From 4e8a0a39dff8508430f568e80f0457866c7a6160 Mon Sep 17 00:00:00 2001 From: Naily Date: Wed, 6 Nov 2024 01:53:30 +0800 Subject: [PATCH] docs(changeset): feat: add nailyProxy() function to proxy eslint config to naily.config.ts --- .changeset/forty-parents-mix.md | 5 +++ eslint.config.js | 15 ++------- naily.config.ts | 12 +++++++ packages/eslint/package.json | 4 ++- packages/eslint/src/eslint-bootstrap.ts | 42 +++++++++++++++++++++++++ packages/eslint/src/index.ts | 8 +++++ packages/eslint/src/types.ts | 13 ++++++++ packages/eslint/tsconfig.json | 2 ++ pnpm-lock.yaml | 6 ++++ 9 files changed, 93 insertions(+), 14 deletions(-) create mode 100644 .changeset/forty-parents-mix.md create mode 100644 packages/eslint/src/eslint-bootstrap.ts create mode 100644 packages/eslint/src/types.ts diff --git a/.changeset/forty-parents-mix.md b/.changeset/forty-parents-mix.md new file mode 100644 index 0000000..4b4ac18 --- /dev/null +++ b/.changeset/forty-parents-mix.md @@ -0,0 +1,5 @@ +--- +"@nailyjs/eslint": patch +--- + +feat: add nailyProxy() function to proxy eslint config to naily.config.ts diff --git a/eslint.config.js b/eslint.config.js index d0ca868..b88352c 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,14 +1,3 @@ -// @ts-check -import naily from '@nailyjs/eslint' +import { nailyProxy } from '@nailyjs/eslint' -export default naily({ - type: 'lib', - rules: { - 'antfu/curly': 'off', - 'antfu/if-newline': 'off', - 'ts/method-signature-style': 'off', - 'ts/no-wrapper-object-types': 'off', - 'no-console': 'off', - 'unicorn/throw-new-error': 'off', - }, -}) +export default await nailyProxy() diff --git a/naily.config.ts b/naily.config.ts index 93f39df..242398e 100644 --- a/naily.config.ts +++ b/naily.config.ts @@ -6,6 +6,18 @@ export default defineConfig({ naily: { cli: {}, + eslint: { + type: 'lib', + rules: { + 'antfu/curly': 'off', + 'antfu/if-newline': 'off', + 'ts/method-signature-style': 'off', + 'ts/no-wrapper-object-types': 'off', + 'no-console': 'off', + 'unicorn/throw-new-error': 'off', + }, + }, + typeorm: { type: 'sqlite', database: path.join(cwd(), './node_modules/.cache/naily/typeorm.db'), diff --git a/packages/eslint/package.json b/packages/eslint/package.json index 9fd7351..bbc3205 100644 --- a/packages/eslint/package.json +++ b/packages/eslint/package.json @@ -23,7 +23,9 @@ "prepublishOnly": "tsup" }, "dependencies": { - "@antfu/eslint-config": "^3.8.0" + "@antfu/eslint-config": "^3.8.0", + "@nailyjs/config": "workspace:*", + "@nailyjs/ioc": "workspace:*" }, "devDependencies": { "tsup": "^8.3.0" diff --git a/packages/eslint/src/eslint-bootstrap.ts b/packages/eslint/src/eslint-bootstrap.ts new file mode 100644 index 0000000..2e482b1 --- /dev/null +++ b/packages/eslint/src/eslint-bootstrap.ts @@ -0,0 +1,42 @@ +import antfu from '@antfu/eslint-config' +import { Value } from '@nailyjs/config' +import { AbstractBootstrap, ClassWrapper, Container, Injectable } from '@nailyjs/ioc' + +@Injectable() +export class EslintService { + constructor( + @Value('naily.eslint') + private readonly value: Naily.Configuration.NailyUserConfig['eslint'], + ) {} + + getEslintConfig(): Parameters { + return [ + (this.value || {}), + ...((this.value || {}).extraOptions || []), + ] + } + + static getInstance(container: Container): EslintService { + const wrapper = container.getContainer().get(EslintService) as ClassWrapper + if (!wrapper) return container.createClassWrapper(EslintService).getClassFactory().getOrCreateInstance() + return wrapper.getClassFactory().getOrCreateInstance() + } +} + +export class ESLintBootstrap extends AbstractBootstrap { + async run(): Promise> { + await this.getPluginRunner().runBeforeRun() + const args = EslintService.getInstance(this).getEslintConfig() + + return antfu({ + ...args[0], + rules: { + 'ts/method-signature-style': 'off', + 'ts/consistent-type-imports': 'off', + 'ts/no-redeclare': 'off', + 'ts/no-namespace': 'off', + ...(args[0] || {}).rules, + }, + }, ...args.slice(1)) + } +} diff --git a/packages/eslint/src/index.ts b/packages/eslint/src/index.ts index ace7a9e..21bd399 100644 --- a/packages/eslint/src/index.ts +++ b/packages/eslint/src/index.ts @@ -1,4 +1,6 @@ import antfu from '@antfu/eslint-config' +import { ConfigPlugin } from '@nailyjs/config' +import { ESLintBootstrap } from './eslint-bootstrap' export function naily(...args: Parameters): ReturnType { return antfu({ @@ -13,4 +15,10 @@ export function naily(...args: Parameters): ReturnType> { + return await new ESLintBootstrap() + .use(ConfigPlugin()) + .run() +} + export default naily diff --git a/packages/eslint/src/types.ts b/packages/eslint/src/types.ts new file mode 100644 index 0000000..7cafab6 --- /dev/null +++ b/packages/eslint/src/types.ts @@ -0,0 +1,13 @@ +import antfu from '@antfu/eslint-config' + +declare global { + namespace Naily { + namespace Configuration { + interface NailyUserConfig { + eslint?: Parameters[0] & { + extraOptions?: Array[1]> + } + } + } + } +} diff --git a/packages/eslint/tsconfig.json b/packages/eslint/tsconfig.json index 551ed97..ddc0a63 100644 --- a/packages/eslint/tsconfig.json +++ b/packages/eslint/tsconfig.json @@ -1,6 +1,8 @@ { "compilerOptions": { "target": "ES2022", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, "module": "ES2022", "moduleResolution": "Bundler" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b7bfc26..4206eea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -201,6 +201,12 @@ importers: '@antfu/eslint-config': specifier: ^3.8.0 version: 3.8.0(@typescript-eslint/utils@8.12.2(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3))(@vue/compiler-sfc@3.5.12)(eslint@9.13.0(jiti@2.4.0))(typescript@5.6.3)(vitest@2.1.4(@types/node@22.8.4)(@vitest/ui@2.1.4)) + '@nailyjs/config': + specifier: workspace:* + version: link:../config + '@nailyjs/ioc': + specifier: workspace:* + version: link:../ioc devDependencies: tsup: specifier: ^8.3.0