diff --git a/src/getESLint.js b/src/getESLint.js index 6c852ff..f3577ba 100644 --- a/src/getESLint.js +++ b/src/getESLint.js @@ -3,7 +3,7 @@ const { cpus } = require('os'); const { Worker: JestWorker } = require('jest-worker'); // @ts-ignore -const { setup, lintFiles } = require('./worker'); +const { setup } = require('./worker'); const { getESLintOptions } = require('./options'); const { jsonStringifyReplacerSortKeys } = require('./utils'); const { stringify } = require('flatted'); @@ -25,7 +25,7 @@ const cache = {}; */ async function loadESLint(options) { const { eslintPath } = options; - const eslint = await setup({ + const eslintPack = await setup({ eslintPath, configType: options.configType, eslintOptions: getESLintOptions(options), @@ -33,8 +33,8 @@ async function loadESLint(options) { return { threads: 1, - lintFiles, - eslint, + lintFiles : eslintPack.lintFiles, + eslint : eslintPack.eslint, // no-op for non-threaded cleanup: async () => {}, }; diff --git a/src/worker.js b/src/worker.js index a714b68..91212f4 100644 --- a/src/worker.js +++ b/src/worker.js @@ -4,16 +4,9 @@ /** @typedef {{new (arg0: ESLintOptions): ESLint; outputFixes: (arg0: LintResult[]) => any;}} ESLintClass */ Object.assign(module.exports, { - lintFiles, - setup, + setup }); -/** @type {ESLintClass} */ -let ESLint; - -/** @type {ESLint} */ -let eslint; - /** @type {boolean} */ let fix; @@ -25,48 +18,61 @@ let fix; * * @param {setupOptions} arg0 - setup worker */ -function setup({ eslintPath, configType, eslintOptions }) { +function setup({eslintPath, configType, eslintOptions}) { fix = !!(eslintOptions && eslintOptions.fix); const eslintModule = require(eslintPath || 'eslint'); if (eslintModule.ESLint && parseFloat(eslintModule.ESLint.version) >= 9) { return eslintModule - .loadESLint({ useFlatConfig: configType === 'flat' }) + .loadESLint({useFlatConfig: configType === 'flat'}) .then((/** @type {ESLintClass} */ classESLint) => { - ESLint = classESLint; - eslint = new ESLint(eslintOptions); - return eslint; + const ESLint = classESLint; + const eslint = new ESLint(eslintOptions); + const pack = { + ESLint, + eslint, + lintFiles: lintFiles.bind(null, ESLint, eslint), + }; + return pack; }); } let FlatESLint; - + /** @type {ESLintClass} */ + let ESLint; if (eslintModule.LegacyESLint) { ESLint = eslintModule.LegacyESLint; - ({ FlatESLint } = eslintModule); + ({FlatESLint} = eslintModule); } else { - ({ ESLint } = eslintModule); - + ({ESLint} = eslintModule); if (configType === 'flat') { throw new Error( "Couldn't find FlatESLint, you might need to set eslintPath to 'eslint/use-at-your-own-risk'", ); } } - + /** @type {ESLint} */ + let eslint; if (configType === 'flat') { eslint = new FlatESLint(eslintOptions); } else { eslint = new ESLint(eslintOptions); } + const pack = { + ESLint, + eslint, + lintFiles: lintFiles.bind(null, ESLint, eslint), + }; - return eslint; + return pack; } /** + * @param {ESLintClass} ESLint + * @param {ESLint} eslint * @param {string | string[]} files */ -async function lintFiles(files) { +async function lintFiles(ESLint, eslint, files) { /** @type {LintResult[]} */ const result = await eslint.lintFiles(files); // if enabled, use eslint autofixing where possible