From e44ca59afe92fcd52e24cfb957a950c0387f12f0 Mon Sep 17 00:00:00 2001 From: fisker Date: Sun, 23 Mar 2025 01:35:16 +0800 Subject: [PATCH] refactor: replace `synckit` with `make-synchronized` --- package.json | 6 +++--- pnpm-lock.yaml | 11 ++++++++--- src/getImports.js | 11 +++++++++++ src/import-worker.mjs | 11 ----------- src/rules/checkValues.js | 6 +----- src/rules/noUndefinedTypes.js | 6 +----- tsconfig.json | 1 - 7 files changed, 24 insertions(+), 28 deletions(-) create mode 100644 src/getImports.js delete mode 100644 src/import-worker.mjs diff --git a/package.json b/package.json index 9bd25c3d..06eaff90 100644 --- a/package.json +++ b/package.json @@ -12,10 +12,10 @@ "escape-string-regexp": "^4.0.0", "espree": "^10.1.0", "esquery": "^1.6.0", + "make-synchronized": "^0.3.0", "parse-imports": "^2.1.1", "semver": "^7.6.3", - "spdx-expression-parse": "^4.0.0", - "synckit": "^0.9.1" + "spdx-expression-parse": "^4.0.0" }, "description": "JSDoc linting rules for ESLint.", "devDependencies": { @@ -146,7 +146,7 @@ "scripts": { "tsc": "tsc", "tsc-build": "tsc -p tsconfig-prod.json", - "build": "rimraf ./dist && cross-env NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && cp src/import-worker.mjs dist/import-worker.mjs && pnpm tsc-build", + "build": "rimraf ./dist && cross-env NODE_ENV=production babel ./src --out-file-extension .cjs --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored && replace 'require\\(\"\\.(.*?)\\.[^.]*?\"\\)' 'require(\".$1.cjs\")' 'dist' -r --include=\"*.cjs\" && pnpm tsc-build", "check-docs": "babel-node ./src/bin/generateDocs.js --check", "create-docs": "npm run create-options && babel-node ./src/bin/generateDocs.js", "create-rule": "babel-node ./src/bin/generateRule.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d42a543b..b5d477cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: esquery: specifier: ^1.6.0 version: 1.6.0 + make-synchronized: + specifier: ^0.3.0 + version: 0.3.0 parse-imports: specifier: ^2.1.1 version: 2.1.1 @@ -38,9 +41,6 @@ importers: spdx-expression-parse: specifier: ^4.0.0 version: 4.0.0 - synckit: - specifier: ^0.9.1 - version: 0.9.1 devDependencies: '@babel/cli': specifier: ^7.24.8 @@ -3758,6 +3758,9 @@ packages: resolution: {integrity: sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==} engines: {node: ^16.14.0 || >=18.0.0} + make-synchronized@0.3.0: + resolution: {integrity: sha512-LxLHK8OcrBcish1CslGgHppoq2TfbQIVs5t48saE4uHmdTswYgu7H/lsGIS0ssj6/RFGTeQ60PpnBk73kCJgeg==} + markdown-contents@1.0.11: resolution: {integrity: sha512-6o8It0JhmoN398ATp8zOWHAniTB3/tEXUVTCP00gTqwZNc465DIoHTTaspyEkaov93QLhrqirxizJ29E/i8/0Q==} @@ -9890,6 +9893,8 @@ snapshots: - supports-color optional: true + make-synchronized@0.3.0: {} + markdown-contents@1.0.11: dependencies: contents: 5.0.0 diff --git a/src/getImports.js b/src/getImports.js new file mode 100644 index 00000000..0edb8f51 --- /dev/null +++ b/src/getImports.js @@ -0,0 +1,11 @@ +import makeSynchronized from 'make-synchronized'; + +// ESLint doesn't support async rules +export default makeSynchronized(import.meta.url, async (imprt) => { + const {parseImports} = await import('parse-imports') + try { + return [...await parseImports(imprt)]; + } catch (err) { + return false; + } +}) diff --git a/src/import-worker.mjs b/src/import-worker.mjs deleted file mode 100644 index cc54de76..00000000 --- a/src/import-worker.mjs +++ /dev/null @@ -1,11 +0,0 @@ -import { runAsWorker } from 'synckit' - -runAsWorker(async (imprt) => { - const { parseImports } = await import('parse-imports'); - try { - // ESLint doesn't support async rules - return [...await parseImports(imprt)]; - } catch (err) { - return false; - } -}) diff --git a/src/rules/checkValues.js b/src/rules/checkValues.js index dcb50f6a..97815c5e 100644 --- a/src/rules/checkValues.js +++ b/src/rules/checkValues.js @@ -1,13 +1,10 @@ import { dirname, join } from 'node:path'; import { fileURLToPath } from 'node:url'; -import { createSyncFn } from 'synckit'; import semver from 'semver'; import spdxExpressionParse from 'spdx-expression-parse'; import iterateJsdoc from '../iterateJsdoc.js'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -const pathName = join(__dirname, '../import-worker.mjs'); +import getImports from '../getImports.js'; const allowedKinds = new Set([ 'class', @@ -175,7 +172,6 @@ export default iterateJsdoc(({ ? `${typePart}${name} ${description}` : `${typePart}${name}`); - const getImports = createSyncFn(pathName); if (!getImports(imprt)) { report( `Bad @import tag`, diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 2a3399bf..36693bc3 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -1,7 +1,6 @@ import { dirname, join } from 'path'; import { fileURLToPath } from 'url'; -import { createSyncFn } from 'synckit'; import { getJSDocComment, parse as parseType, @@ -11,9 +10,7 @@ import { import iterateJsdoc, { parseComment, } from '../iterateJsdoc.js'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -const pathName = join(__dirname, '../import-worker.mjs'); +import getImports from '../getImports.js'; const extraTypes = [ 'null', 'undefined', 'void', 'string', 'boolean', 'object', @@ -152,7 +149,6 @@ export default iterateJsdoc(({ ? `${typePart}${name} ${description}` : `${typePart}${name}`); - const getImports = createSyncFn(pathName); const imports = /** @type {import('parse-imports').Import[]} */ (getImports(imprt)); if (!imports) { return null; diff --git a/tsconfig.json b/tsconfig.json index 226114c0..b6da633d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,7 +18,6 @@ "test/**/*.js", "typings/gitdown.d.ts", "typings/babel__eslint-parser.d.ts", - "src/import-worker.mjs" ], "exclude": ["node_modules"] }