@rushstack/eslint-patch
Advanced tools
| // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. | ||
| // See LICENSE in the project root for license information. | ||
| const nodeTrustedToolProfile = require('decoupled-local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); | ||
| const friendlyLocalsMixin = require('decoupled-local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); | ||
| const tsdocMixin = require('decoupled-local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc'); | ||
| module.exports = [ | ||
| ...nodeTrustedToolProfile, | ||
| ...friendlyLocalsMixin, | ||
| ...tsdocMixin, | ||
| { | ||
| files: ['**/*.ts', '**/*.tsx'], | ||
| languageOptions: { | ||
| parserOptions: { | ||
| tsconfigRootDir: __dirname | ||
| } | ||
| }, | ||
| rules: { | ||
| 'no-console': 'off' | ||
| } | ||
| } | ||
| ]; |
+12
-0
@@ -5,2 +5,14 @@ { | ||
| { | ||
| "version": "1.13.0", | ||
| "tag": "@rushstack/eslint-patch_v1.13.0", | ||
| "date": "Fri, 03 Oct 2025 20:09:59 GMT", | ||
| "comments": { | ||
| "minor": [ | ||
| { | ||
| "comment": "Normalize import of builtin modules to use the `node:` protocol." | ||
| } | ||
| ] | ||
| } | ||
| }, | ||
| { | ||
| "version": "1.12.0", | ||
@@ -7,0 +19,0 @@ "tag": "@rushstack/eslint-patch_v1.12.0", |
+8
-1
| # Change Log - @rushstack/eslint-patch | ||
| This log was last generated on Thu, 26 Jun 2025 18:57:04 GMT and should not be manually modified. | ||
| This log was last generated on Fri, 03 Oct 2025 20:09:59 GMT and should not be manually modified. | ||
| ## 1.13.0 | ||
| Fri, 03 Oct 2025 20:09:59 GMT | ||
| ### Minor changes | ||
| - Normalize import of builtin modules to use the `node:` protocol. | ||
| ## 1.12.0 | ||
@@ -6,0 +13,0 @@ Thu, 26 Jun 2025 18:57:04 GMT |
+15
-15
@@ -15,3 +15,3 @@ "use strict"; | ||
| // | ||
| const path_1 = __importDefault(require("path")); | ||
| const node_path_1 = __importDefault(require("node:path")); | ||
| const isModuleResolutionError = (ex) => typeof ex === 'object' && !!ex && 'code' in ex && ex.code === 'MODULE_NOT_FOUND'; | ||
@@ -83,3 +83,3 @@ exports.isModuleResolutionError = isModuleResolutionError; | ||
| while (currentPath) { | ||
| const potentialPath = path_1.default.dirname(currentPath); | ||
| const potentialPath = node_path_1.default.dirname(currentPath); | ||
| if (potentialPath === currentPath) { | ||
@@ -90,3 +90,3 @@ break; | ||
| try { | ||
| exports.eslintFolder = eslintFolder = path_1.default.dirname(require.resolve('eslint/package.json', { paths: [currentPath] })); | ||
| exports.eslintFolder = eslintFolder = node_path_1.default.dirname(require.resolve('eslint/package.json', { paths: [currentPath] })); | ||
| break; | ||
@@ -102,4 +102,4 @@ } | ||
| if (eslintFolder) { | ||
| const eslintrcFolderPath = path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', { paths: [eslintFolder] })); | ||
| eslintrcBundlePath = path_1.default.join(eslintrcFolderPath, 'dist/eslintrc.cjs'); | ||
| const eslintrcFolderPath = node_path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', { paths: [eslintFolder] })); | ||
| eslintrcBundlePath = node_path_1.default.join(eslintrcFolderPath, 'dist/eslintrc.cjs'); | ||
| } | ||
@@ -121,6 +121,6 @@ break; | ||
| try { | ||
| const eslintrcFolderPath = path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', { paths: [currentModule.path] })); | ||
| const eslintrcFolderPath = node_path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', { paths: [currentModule.path] })); | ||
| // Make sure we actually resolved the module in our call path | ||
| // and not some other spurious dependency. | ||
| const resolvedEslintrcBundlePath = path_1.default.join(eslintrcFolderPath, 'dist/eslintrc.cjs'); | ||
| const resolvedEslintrcBundlePath = node_path_1.default.join(eslintrcFolderPath, 'dist/eslintrc.cjs'); | ||
| if (resolvedEslintrcBundlePath === currentModule.filename) { | ||
@@ -144,3 +144,3 @@ eslintrcBundlePath = resolvedEslintrcBundlePath; | ||
| try { | ||
| const eslintCandidateFolder = path_1.default.dirname(require.resolve('eslint/package.json', { | ||
| const eslintCandidateFolder = node_path_1.default.dirname(require.resolve('eslint/package.json', { | ||
| paths: [currentModule.path] | ||
@@ -150,3 +150,3 @@ })); | ||
| // and not some other spurious dependency. | ||
| if (currentModule.filename.startsWith(eslintCandidateFolder + path_1.default.sep)) { | ||
| if (currentModule.filename.startsWith(eslintCandidateFolder + node_path_1.default.sep)) { | ||
| exports.eslintFolder = eslintFolder = eslintCandidateFolder; | ||
@@ -178,6 +178,6 @@ break; | ||
| try { | ||
| const eslintrcFolder = path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', { | ||
| const eslintrcFolder = node_path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', { | ||
| paths: [currentModule.path] | ||
| })); | ||
| const resolvedConfigArrayFactoryPath = path_1.default.join(eslintrcFolder, '/lib/config-array-factory.js'); | ||
| const resolvedConfigArrayFactoryPath = node_path_1.default.join(eslintrcFolder, '/lib/config-array-factory.js'); | ||
| if (resolvedConfigArrayFactoryPath === currentModule.filename) { | ||
@@ -202,6 +202,6 @@ configArrayFactoryPath = resolvedConfigArrayFactoryPath; | ||
| try { | ||
| const eslintCandidateFolder = path_1.default.dirname(require.resolve('eslint/package.json', { | ||
| const eslintCandidateFolder = node_path_1.default.dirname(require.resolve('eslint/package.json', { | ||
| paths: [currentModule.path] | ||
| })); | ||
| if (path_1.default.join(eslintCandidateFolder, 'lib/cli-engine/cli-engine.js') === currentModule.filename) { | ||
| if (node_path_1.default.join(eslintCandidateFolder, 'lib/cli-engine/cli-engine.js') === currentModule.filename) { | ||
| exports.eslintFolder = eslintFolder = eslintCandidateFolder; | ||
@@ -232,3 +232,3 @@ break; | ||
| if (/[\\/]eslint[\\/]lib[\\/]cli-engine[\\/]config-array-factory\.js$/i.test(currentModule.filename)) { | ||
| exports.eslintFolder = eslintFolder = path_1.default.join(path_1.default.dirname(currentModule.filename), '../..'); | ||
| exports.eslintFolder = eslintFolder = node_path_1.default.join(node_path_1.default.dirname(currentModule.filename), '../..'); | ||
| configArrayFactoryPath = `${eslintFolder}/lib/cli-engine/config-array-factory`; | ||
@@ -240,3 +240,3 @@ moduleResolverPath = `${eslintFolder}/lib/shared/relative-module-resolver`; | ||
| try { | ||
| eslintrcFolder = path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', { | ||
| eslintrcFolder = node_path_1.default.dirname(require.resolve('@eslint/eslintrc/package.json', { | ||
| paths: [currentModule.path] | ||
@@ -243,0 +243,0 @@ })); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"_patch-base.js","sourceRoot":"","sources":["../src/_patch-base.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// This is a workaround for https://github.com/eslint/eslint/issues/3458\n//\n// To correct how ESLint searches for plugin packages, add this line to the top of your project's .eslintrc.js file:\n//\n// require(\"@rushstack/eslint-patch/modern-module-resolution\");\n//\n\nimport path from 'path';\n\nconst isModuleResolutionError: (ex: unknown) => boolean = (ex) =>\n typeof ex === 'object' && !!ex && 'code' in ex && (ex as { code: unknown }).code === 'MODULE_NOT_FOUND';\n\nconst FLAT_CONFIG_REGEX: RegExp = /eslint\\.config\\.(cjs|mjs|js)$/i;\n\n// Ex:\n// at async ESLint.lintFiles (C:\\\\path\\\\to\\\\\\\\eslint\\\\lib\\\\eslint\\\\eslint.js:720:21)\nconst NODE_STACK_REGEX: RegExp =\n /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?)(?::(\\d+)| (\\d+))(?::(\\d+))?\\)?\\s*$/i;\n\ninterface INodeStackFrame {\n file: string;\n method?: string;\n lineNumber: number;\n column?: number;\n}\n\nfunction parseNodeStack(stack: string): INodeStackFrame | undefined {\n const stackTraceMatch: RegExpExecArray | null = NODE_STACK_REGEX.exec(stack);\n if (!stackTraceMatch) {\n return undefined;\n }\n\n return {\n file: stackTraceMatch[2],\n method: stackTraceMatch[1],\n lineNumber: parseInt(stackTraceMatch[3], 10),\n column: stackTraceMatch[4] ? parseInt(stackTraceMatch[4], 10) : undefined\n };\n}\n\nfunction getStackTrace(): INodeStackFrame[] {\n const stackObj: { stack?: string } = {};\n const originalStackTraceLimit: number = Error.stackTraceLimit;\n Error.stackTraceLimit = Infinity;\n Error.captureStackTrace(stackObj, getStackTrace);\n Error.stackTraceLimit = originalStackTraceLimit;\n if (!stackObj.stack) {\n throw new Error('Unable to capture stack trace');\n }\n\n const { stack } = stackObj;\n const stackLines: string[] = stack.split('\\n');\n const frames: INodeStackFrame[] = [];\n for (const line of stackLines) {\n const frame: INodeStackFrame | undefined = parseNodeStack(line);\n if (frame) {\n frames.push(frame);\n }\n }\n\n return frames;\n}\n\n// Module path for eslintrc.cjs\n// Example: \".../@eslint/eslintrc/dist/eslintrc.cjs\"\nlet eslintrcBundlePath: string | undefined = undefined;\n\n// Module path for config-array-factory.js\n// Example: \".../@eslint/eslintrc/lib/config-array-factory\"\nlet configArrayFactoryPath: string | undefined = undefined;\n\n// Module path for relative-module-resolver.js\n// Example: \".../@eslint/eslintrc/lib/shared/relative-module-resolver\"\nlet moduleResolverPath: string | undefined = undefined;\n\n// Module path for naming.js\n// Example: \".../@eslint/eslintrc/lib/shared/naming\"\nlet namingPath: string | undefined = undefined;\n\n// Folder path where ESLint's package.json can be found\n// Example: \".../node_modules/eslint\"\nlet eslintFolder: string | undefined = undefined;\n\n// Probe for the ESLint >=9.0.0 flat config layout:\nfor (let currentModule: NodeModule = module; ; ) {\n if (FLAT_CONFIG_REGEX.test(currentModule.filename)) {\n // Obtain the stack trace of the current module, since the\n // parent module of a flat config is undefined. From the\n // stack trace, we can find the ESLint folder.\n const stackTrace: INodeStackFrame[] = getStackTrace();\n const targetFrame: INodeStackFrame | undefined = stackTrace.find(\n (frame: INodeStackFrame) => frame.file && frame.file.endsWith('eslint.js')\n );\n if (targetFrame) {\n // Walk up the path and continuously attempt to resolve the ESLint folder\n let currentPath: string | undefined = targetFrame.file;\n while (currentPath) {\n const potentialPath: string = path.dirname(currentPath);\n if (potentialPath === currentPath) {\n break;\n }\n currentPath = potentialPath;\n try {\n eslintFolder = path.dirname(require.resolve('eslint/package.json', { paths: [currentPath] }));\n break;\n } catch (ex: unknown) {\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n }\n }\n\n if (eslintFolder) {\n const eslintrcFolderPath: string = path.dirname(\n require.resolve('@eslint/eslintrc/package.json', { paths: [eslintFolder] })\n );\n eslintrcBundlePath = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs');\n }\n\n break;\n }\n\n if (!currentModule.parent) {\n break;\n }\n currentModule = currentModule.parent;\n}\n\nif (!eslintFolder) {\n // Probe for the ESLint >=8.0.0 layout:\n for (let currentModule: NodeModule = module; ; ) {\n if (!eslintrcBundlePath) {\n if (currentModule.filename.endsWith('eslintrc.cjs')) {\n // For ESLint >=8.0.0, all @eslint/eslintrc code is bundled at this path:\n // .../@eslint/eslintrc/dist/eslintrc.cjs\n try {\n const eslintrcFolderPath: string = path.dirname(\n require.resolve('@eslint/eslintrc/package.json', { paths: [currentModule.path] })\n );\n\n // Make sure we actually resolved the module in our call path\n // and not some other spurious dependency.\n const resolvedEslintrcBundlePath: string = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs');\n if (resolvedEslintrcBundlePath === currentModule.filename) {\n eslintrcBundlePath = resolvedEslintrcBundlePath;\n }\n } catch (ex: unknown) {\n // Module resolution failures are expected, as we're walking\n // up our require stack to look for eslint. All other errors\n // are re-thrown.\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n }\n } else {\n // Next look for a file in ESLint's folder\n // .../eslint/lib/cli-engine/cli-engine.js\n try {\n const eslintCandidateFolder: string = path.dirname(\n require.resolve('eslint/package.json', {\n paths: [currentModule.path]\n })\n );\n\n // Make sure we actually resolved the module in our call path\n // and not some other spurious dependency.\n if (currentModule.filename.startsWith(eslintCandidateFolder + path.sep)) {\n eslintFolder = eslintCandidateFolder;\n break;\n }\n } catch (ex: unknown) {\n // Module resolution failures are expected, as we're walking\n // up our require stack to look for eslint. All other errors\n // are re-thrown.\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n }\n\n if (!currentModule.parent) {\n break;\n }\n currentModule = currentModule.parent;\n }\n}\n\nif (!eslintFolder) {\n // Probe for the ESLint >=7.12.0 layout:\n for (let currentModule: NodeModule = module; ; ) {\n if (!configArrayFactoryPath) {\n // For ESLint >=7.12.0, config-array-factory.js is at this path:\n // .../@eslint/eslintrc/lib/config-array-factory.js\n try {\n const eslintrcFolder: string = path.dirname(\n require.resolve('@eslint/eslintrc/package.json', {\n paths: [currentModule.path]\n })\n );\n\n const resolvedConfigArrayFactoryPath: string = path.join(\n eslintrcFolder,\n '/lib/config-array-factory.js'\n );\n if (resolvedConfigArrayFactoryPath === currentModule.filename) {\n configArrayFactoryPath = resolvedConfigArrayFactoryPath;\n moduleResolverPath = `${eslintrcFolder}/lib/shared/relative-module-resolver`;\n namingPath = `${eslintrcFolder}/lib/shared/naming`;\n }\n } catch (ex: unknown) {\n // Module resolution failures are expected, as we're walking\n // up our require stack to look for eslint. All other errors\n // are re-thrown.\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n } else if (currentModule.filename.endsWith('cli-engine.js')) {\n // Next look for a file in ESLint's folder\n // .../eslint/lib/cli-engine/cli-engine.js\n try {\n const eslintCandidateFolder: string = path.dirname(\n require.resolve('eslint/package.json', {\n paths: [currentModule.path]\n })\n );\n\n if (path.join(eslintCandidateFolder, 'lib/cli-engine/cli-engine.js') === currentModule.filename) {\n eslintFolder = eslintCandidateFolder;\n break;\n }\n } catch (ex: unknown) {\n // Module resolution failures are expected, as we're walking\n // up our require stack to look for eslint. All other errors\n // are rethrown.\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n }\n\n if (!currentModule.parent) {\n break;\n }\n currentModule = currentModule.parent;\n }\n}\n\nif (!eslintFolder) {\n // Probe for the <7.12.0 layout:\n for (let currentModule: NodeModule = module; ; ) {\n // For ESLint <7.12.0, config-array-factory.js was at this path:\n // .../eslint/lib/cli-engine/config-array-factory.js\n if (/[\\\\/]eslint[\\\\/]lib[\\\\/]cli-engine[\\\\/]config-array-factory\\.js$/i.test(currentModule.filename)) {\n eslintFolder = path.join(path.dirname(currentModule.filename), '../..');\n configArrayFactoryPath = `${eslintFolder}/lib/cli-engine/config-array-factory`;\n moduleResolverPath = `${eslintFolder}/lib/shared/relative-module-resolver`;\n\n // The naming module was moved to @eslint/eslintrc in ESLint 7.8.0, which is also when the @eslint/eslintrc\n // package was created and added to ESLint, so we need to probe for whether it's in the old or new location.\n let eslintrcFolder: string | undefined;\n try {\n eslintrcFolder = path.dirname(\n require.resolve('@eslint/eslintrc/package.json', {\n paths: [currentModule.path]\n })\n );\n } catch (ex: unknown) {\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n\n namingPath = `${eslintrcFolder ?? eslintFolder}/lib/shared/naming`;\n break;\n }\n\n if (!currentModule.parent) {\n // This was tested with ESLint 6.1.0 .. 7.12.1.\n throw new Error(\n 'Failed to patch ESLint because the calling module was not recognized.\\n' +\n 'If you are using a newer ESLint version that may be unsupported, please create a GitHub issue:\\n' +\n 'https://github.com/microsoft/rushstack/issues'\n );\n }\n currentModule = currentModule.parent;\n }\n}\n\n// Detect the ESLint package version\nconst eslintPackageJsonPath: string = `${eslintFolder}/package.json`;\nconst eslintPackageObject: { version: string } = require(eslintPackageJsonPath);\nexport const eslintPackageVersion: string = eslintPackageObject.version;\nconst ESLINT_MAJOR_VERSION: number = parseInt(eslintPackageVersion, 10);\nif (isNaN(ESLINT_MAJOR_VERSION)) {\n throw new Error(\n `Unable to parse ESLint version \"${eslintPackageVersion}\" in file \"${eslintPackageJsonPath}\"`\n );\n}\n\nif (!(ESLINT_MAJOR_VERSION >= 6 && ESLINT_MAJOR_VERSION <= 9)) {\n throw new Error(\n 'The ESLint patch script has only been tested with ESLint version 6.x, 7.x, 8.x, and 9.x.' +\n ` (Your version: ${eslintPackageVersion})\\n` +\n 'Consider reporting a GitHub issue:\\n' +\n 'https://github.com/microsoft/rushstack/issues'\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet configArrayFactory: any;\nif (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {\n configArrayFactory = require(eslintrcBundlePath).Legacy.ConfigArrayFactory;\n} else if (configArrayFactoryPath) {\n configArrayFactory = require(configArrayFactoryPath).ConfigArrayFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet ModuleResolver: { resolve: any };\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Naming: { normalizePackageName: any };\nif (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {\n ModuleResolver = require(eslintrcBundlePath).Legacy.ModuleResolver;\n Naming = require(eslintrcBundlePath).Legacy.naming;\n} else if (moduleResolverPath && namingPath) {\n ModuleResolver = require(moduleResolverPath);\n Naming = require(namingPath);\n}\n\nexport {\n eslintFolder,\n configArrayFactory,\n ModuleResolver,\n Naming,\n ESLINT_MAJOR_VERSION,\n isModuleResolutionError\n};\n"]} | ||
| {"version":3,"file":"_patch-base.js","sourceRoot":"","sources":["../src/_patch-base.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\n// This is a workaround for https://github.com/eslint/eslint/issues/3458\n//\n// To correct how ESLint searches for plugin packages, add this line to the top of your project's .eslintrc.js file:\n//\n// require(\"@rushstack/eslint-patch/modern-module-resolution\");\n//\n\nimport path from 'node:path';\n\nconst isModuleResolutionError: (ex: unknown) => boolean = (ex) =>\n typeof ex === 'object' && !!ex && 'code' in ex && (ex as { code: unknown }).code === 'MODULE_NOT_FOUND';\n\nconst FLAT_CONFIG_REGEX: RegExp = /eslint\\.config\\.(cjs|mjs|js)$/i;\n\n// Ex:\n// at async ESLint.lintFiles (C:\\\\path\\\\to\\\\\\\\eslint\\\\lib\\\\eslint\\\\eslint.js:720:21)\nconst NODE_STACK_REGEX: RegExp =\n /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?)(?::(\\d+)| (\\d+))(?::(\\d+))?\\)?\\s*$/i;\n\ninterface INodeStackFrame {\n file: string;\n method?: string;\n lineNumber: number;\n column?: number;\n}\n\nfunction parseNodeStack(stack: string): INodeStackFrame | undefined {\n const stackTraceMatch: RegExpExecArray | null = NODE_STACK_REGEX.exec(stack);\n if (!stackTraceMatch) {\n return undefined;\n }\n\n return {\n file: stackTraceMatch[2],\n method: stackTraceMatch[1],\n lineNumber: parseInt(stackTraceMatch[3], 10),\n column: stackTraceMatch[4] ? parseInt(stackTraceMatch[4], 10) : undefined\n };\n}\n\nfunction getStackTrace(): INodeStackFrame[] {\n const stackObj: { stack?: string } = {};\n const originalStackTraceLimit: number = Error.stackTraceLimit;\n Error.stackTraceLimit = Infinity;\n Error.captureStackTrace(stackObj, getStackTrace);\n Error.stackTraceLimit = originalStackTraceLimit;\n if (!stackObj.stack) {\n throw new Error('Unable to capture stack trace');\n }\n\n const { stack } = stackObj;\n const stackLines: string[] = stack.split('\\n');\n const frames: INodeStackFrame[] = [];\n for (const line of stackLines) {\n const frame: INodeStackFrame | undefined = parseNodeStack(line);\n if (frame) {\n frames.push(frame);\n }\n }\n\n return frames;\n}\n\n// Module path for eslintrc.cjs\n// Example: \".../@eslint/eslintrc/dist/eslintrc.cjs\"\nlet eslintrcBundlePath: string | undefined = undefined;\n\n// Module path for config-array-factory.js\n// Example: \".../@eslint/eslintrc/lib/config-array-factory\"\nlet configArrayFactoryPath: string | undefined = undefined;\n\n// Module path for relative-module-resolver.js\n// Example: \".../@eslint/eslintrc/lib/shared/relative-module-resolver\"\nlet moduleResolverPath: string | undefined = undefined;\n\n// Module path for naming.js\n// Example: \".../@eslint/eslintrc/lib/shared/naming\"\nlet namingPath: string | undefined = undefined;\n\n// Folder path where ESLint's package.json can be found\n// Example: \".../node_modules/eslint\"\nlet eslintFolder: string | undefined = undefined;\n\n// Probe for the ESLint >=9.0.0 flat config layout:\nfor (let currentModule: NodeModule = module; ; ) {\n if (FLAT_CONFIG_REGEX.test(currentModule.filename)) {\n // Obtain the stack trace of the current module, since the\n // parent module of a flat config is undefined. From the\n // stack trace, we can find the ESLint folder.\n const stackTrace: INodeStackFrame[] = getStackTrace();\n const targetFrame: INodeStackFrame | undefined = stackTrace.find(\n (frame: INodeStackFrame) => frame.file && frame.file.endsWith('eslint.js')\n );\n if (targetFrame) {\n // Walk up the path and continuously attempt to resolve the ESLint folder\n let currentPath: string | undefined = targetFrame.file;\n while (currentPath) {\n const potentialPath: string = path.dirname(currentPath);\n if (potentialPath === currentPath) {\n break;\n }\n currentPath = potentialPath;\n try {\n eslintFolder = path.dirname(require.resolve('eslint/package.json', { paths: [currentPath] }));\n break;\n } catch (ex: unknown) {\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n }\n }\n\n if (eslintFolder) {\n const eslintrcFolderPath: string = path.dirname(\n require.resolve('@eslint/eslintrc/package.json', { paths: [eslintFolder] })\n );\n eslintrcBundlePath = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs');\n }\n\n break;\n }\n\n if (!currentModule.parent) {\n break;\n }\n currentModule = currentModule.parent;\n}\n\nif (!eslintFolder) {\n // Probe for the ESLint >=8.0.0 layout:\n for (let currentModule: NodeModule = module; ; ) {\n if (!eslintrcBundlePath) {\n if (currentModule.filename.endsWith('eslintrc.cjs')) {\n // For ESLint >=8.0.0, all @eslint/eslintrc code is bundled at this path:\n // .../@eslint/eslintrc/dist/eslintrc.cjs\n try {\n const eslintrcFolderPath: string = path.dirname(\n require.resolve('@eslint/eslintrc/package.json', { paths: [currentModule.path] })\n );\n\n // Make sure we actually resolved the module in our call path\n // and not some other spurious dependency.\n const resolvedEslintrcBundlePath: string = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs');\n if (resolvedEslintrcBundlePath === currentModule.filename) {\n eslintrcBundlePath = resolvedEslintrcBundlePath;\n }\n } catch (ex: unknown) {\n // Module resolution failures are expected, as we're walking\n // up our require stack to look for eslint. All other errors\n // are re-thrown.\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n }\n } else {\n // Next look for a file in ESLint's folder\n // .../eslint/lib/cli-engine/cli-engine.js\n try {\n const eslintCandidateFolder: string = path.dirname(\n require.resolve('eslint/package.json', {\n paths: [currentModule.path]\n })\n );\n\n // Make sure we actually resolved the module in our call path\n // and not some other spurious dependency.\n if (currentModule.filename.startsWith(eslintCandidateFolder + path.sep)) {\n eslintFolder = eslintCandidateFolder;\n break;\n }\n } catch (ex: unknown) {\n // Module resolution failures are expected, as we're walking\n // up our require stack to look for eslint. All other errors\n // are re-thrown.\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n }\n\n if (!currentModule.parent) {\n break;\n }\n currentModule = currentModule.parent;\n }\n}\n\nif (!eslintFolder) {\n // Probe for the ESLint >=7.12.0 layout:\n for (let currentModule: NodeModule = module; ; ) {\n if (!configArrayFactoryPath) {\n // For ESLint >=7.12.0, config-array-factory.js is at this path:\n // .../@eslint/eslintrc/lib/config-array-factory.js\n try {\n const eslintrcFolder: string = path.dirname(\n require.resolve('@eslint/eslintrc/package.json', {\n paths: [currentModule.path]\n })\n );\n\n const resolvedConfigArrayFactoryPath: string = path.join(\n eslintrcFolder,\n '/lib/config-array-factory.js'\n );\n if (resolvedConfigArrayFactoryPath === currentModule.filename) {\n configArrayFactoryPath = resolvedConfigArrayFactoryPath;\n moduleResolverPath = `${eslintrcFolder}/lib/shared/relative-module-resolver`;\n namingPath = `${eslintrcFolder}/lib/shared/naming`;\n }\n } catch (ex: unknown) {\n // Module resolution failures are expected, as we're walking\n // up our require stack to look for eslint. All other errors\n // are re-thrown.\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n } else if (currentModule.filename.endsWith('cli-engine.js')) {\n // Next look for a file in ESLint's folder\n // .../eslint/lib/cli-engine/cli-engine.js\n try {\n const eslintCandidateFolder: string = path.dirname(\n require.resolve('eslint/package.json', {\n paths: [currentModule.path]\n })\n );\n\n if (path.join(eslintCandidateFolder, 'lib/cli-engine/cli-engine.js') === currentModule.filename) {\n eslintFolder = eslintCandidateFolder;\n break;\n }\n } catch (ex: unknown) {\n // Module resolution failures are expected, as we're walking\n // up our require stack to look for eslint. All other errors\n // are rethrown.\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n }\n\n if (!currentModule.parent) {\n break;\n }\n currentModule = currentModule.parent;\n }\n}\n\nif (!eslintFolder) {\n // Probe for the <7.12.0 layout:\n for (let currentModule: NodeModule = module; ; ) {\n // For ESLint <7.12.0, config-array-factory.js was at this path:\n // .../eslint/lib/cli-engine/config-array-factory.js\n if (/[\\\\/]eslint[\\\\/]lib[\\\\/]cli-engine[\\\\/]config-array-factory\\.js$/i.test(currentModule.filename)) {\n eslintFolder = path.join(path.dirname(currentModule.filename), '../..');\n configArrayFactoryPath = `${eslintFolder}/lib/cli-engine/config-array-factory`;\n moduleResolverPath = `${eslintFolder}/lib/shared/relative-module-resolver`;\n\n // The naming module was moved to @eslint/eslintrc in ESLint 7.8.0, which is also when the @eslint/eslintrc\n // package was created and added to ESLint, so we need to probe for whether it's in the old or new location.\n let eslintrcFolder: string | undefined;\n try {\n eslintrcFolder = path.dirname(\n require.resolve('@eslint/eslintrc/package.json', {\n paths: [currentModule.path]\n })\n );\n } catch (ex: unknown) {\n if (!isModuleResolutionError(ex)) {\n throw ex;\n }\n }\n\n namingPath = `${eslintrcFolder ?? eslintFolder}/lib/shared/naming`;\n break;\n }\n\n if (!currentModule.parent) {\n // This was tested with ESLint 6.1.0 .. 7.12.1.\n throw new Error(\n 'Failed to patch ESLint because the calling module was not recognized.\\n' +\n 'If you are using a newer ESLint version that may be unsupported, please create a GitHub issue:\\n' +\n 'https://github.com/microsoft/rushstack/issues'\n );\n }\n currentModule = currentModule.parent;\n }\n}\n\n// Detect the ESLint package version\nconst eslintPackageJsonPath: string = `${eslintFolder}/package.json`;\nconst eslintPackageObject: { version: string } = require(eslintPackageJsonPath);\nexport const eslintPackageVersion: string = eslintPackageObject.version;\nconst ESLINT_MAJOR_VERSION: number = parseInt(eslintPackageVersion, 10);\nif (isNaN(ESLINT_MAJOR_VERSION)) {\n throw new Error(\n `Unable to parse ESLint version \"${eslintPackageVersion}\" in file \"${eslintPackageJsonPath}\"`\n );\n}\n\nif (!(ESLINT_MAJOR_VERSION >= 6 && ESLINT_MAJOR_VERSION <= 9)) {\n throw new Error(\n 'The ESLint patch script has only been tested with ESLint version 6.x, 7.x, 8.x, and 9.x.' +\n ` (Your version: ${eslintPackageVersion})\\n` +\n 'Consider reporting a GitHub issue:\\n' +\n 'https://github.com/microsoft/rushstack/issues'\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet configArrayFactory: any;\nif (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {\n configArrayFactory = require(eslintrcBundlePath).Legacy.ConfigArrayFactory;\n} else if (configArrayFactoryPath) {\n configArrayFactory = require(configArrayFactoryPath).ConfigArrayFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet ModuleResolver: { resolve: any };\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Naming: { normalizePackageName: any };\nif (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) {\n ModuleResolver = require(eslintrcBundlePath).Legacy.ModuleResolver;\n Naming = require(eslintrcBundlePath).Legacy.naming;\n} else if (moduleResolverPath && namingPath) {\n ModuleResolver = require(moduleResolverPath);\n Naming = require(namingPath);\n}\n\nexport {\n eslintFolder,\n configArrayFactory,\n ModuleResolver,\n Naming,\n ESLINT_MAJOR_VERSION,\n isModuleResolutionError\n};\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bulk-suppressions-file.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-file.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,UAAU,EAAE,qBAAqB,CAAC;IAClC,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAkBD,wBAAgB,8CAA8C,CAC5D,sBAAsB,EAAE,MAAM,GAC7B,uBAAuB,CAkDzB;AAED,wBAAgB,qDAAqD,IAAI,CAAC,MAAM,EAAE,uBAAuB,CAAC,EAAE,CAO3G;AAED,wBAAgB,2BAA2B,CACzC,sBAAsB,EAAE,MAAM,EAC9B,kBAAkB,EAAE,uBAAuB,GAC1C,IAAI,CASN;AAED,wBAAgB,8CAA8C,CAAC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAGnG;AAUD,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,YAAY,GAAG,MAAM,CAElF"} | ||
| {"version":3,"file":"bulk-suppressions-file.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-file.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,UAAU,EAAE,qBAAqB,CAAC;IAClC,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,aAAa,EAAE,qBAAqB,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAkBD,wBAAgB,8CAA8C,CAC5D,sBAAsB,EAAE,MAAM,GAC7B,uBAAuB,CAkDzB;AAED,wBAAgB,qDAAqD,IAAI,CAAC,MAAM,EAAE,uBAAuB,CAAC,EAAE,CAO3G;AAED,wBAAgB,2BAA2B,CACzC,sBAAsB,EAAE,MAAM,EAC9B,kBAAkB,EAAE,uBAAuB,GAC1C,IAAI,CASN;AAED,wBAAgB,8CAA8C,CAAC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAGnG;AAUD,wBAAgB,oBAAoB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,YAAY,GAAG,MAAM,CAElF"} |
@@ -13,3 +13,3 @@ "use strict"; | ||
| exports.serializeSuppression = serializeSuppression; | ||
| const fs_1 = __importDefault(require("fs")); | ||
| const node_fs_1 = __importDefault(require("node:fs")); | ||
| const constants_1 = require("./constants"); | ||
@@ -41,3 +41,3 @@ const IS_RUNNING_IN_VSCODE = process.env[constants_1.VSCODE_PID_ENV_VAR_NAME] !== undefined; | ||
| try { | ||
| rawJsonFile = fs_1.default.readFileSync(suppressionsPath).toString(); | ||
| rawJsonFile = node_fs_1.default.readFileSync(suppressionsPath).toString(); | ||
| } | ||
@@ -88,3 +88,3 @@ catch (e) { | ||
| suppressionsConfig.jsonObject.suppressions.sort(compareSuppressions); | ||
| fs_1.default.writeFileSync(suppressionsPath, JSON.stringify(suppressionsConfig.jsonObject, undefined, 2)); | ||
| node_fs_1.default.writeFileSync(suppressionsPath, JSON.stringify(suppressionsConfig.jsonObject, undefined, 2)); | ||
| } | ||
@@ -98,3 +98,3 @@ } | ||
| try { | ||
| fs_1.default.unlinkSync(filePath); | ||
| node_fs_1.default.unlinkSync(filePath); | ||
| } | ||
@@ -101,0 +101,0 @@ catch (e) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bulk-suppressions-file.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-file.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'fs';\nimport { VSCODE_PID_ENV_VAR_NAME } from './constants';\n\nexport interface ISuppression {\n file: string;\n scopeId: string;\n rule: string;\n}\n\nexport interface IBulkSuppressionsConfig {\n serializedSuppressions: Set<string>;\n jsonObject: IBulkSuppressionsJson;\n newSerializedSuppressions: Set<string>;\n newJsonObject: IBulkSuppressionsJson;\n}\n\nexport interface IBulkSuppressionsJson {\n suppressions: ISuppression[];\n}\n\nconst IS_RUNNING_IN_VSCODE: boolean = process.env[VSCODE_PID_ENV_VAR_NAME] !== undefined;\nconst TEN_SECONDS_MS: number = 10 * 1000;\nconst SUPPRESSIONS_JSON_FILENAME: string = '.eslint-bulk-suppressions.json';\n\nfunction throwIfAnythingOtherThanNotExistError(e: NodeJS.ErrnoException): void | never {\n if (e?.code !== 'ENOENT') {\n // Throw an error if any other error than file not found\n throw e;\n }\n}\n\ninterface ICachedBulkSuppressionsConfig {\n readTime: number;\n suppressionsConfig: IBulkSuppressionsConfig;\n}\nconst suppressionsJsonByFolderPath: Map<string, ICachedBulkSuppressionsConfig> = new Map();\nexport function getSuppressionsConfigForEslintConfigFolderPath(\n eslintConfigFolderPath: string\n): IBulkSuppressionsConfig {\n const cachedSuppressionsConfig: ICachedBulkSuppressionsConfig | undefined =\n suppressionsJsonByFolderPath.get(eslintConfigFolderPath);\n\n let shouldLoad: boolean;\n let suppressionsConfig: IBulkSuppressionsConfig;\n if (cachedSuppressionsConfig) {\n shouldLoad = IS_RUNNING_IN_VSCODE && cachedSuppressionsConfig.readTime < Date.now() - TEN_SECONDS_MS;\n suppressionsConfig = cachedSuppressionsConfig.suppressionsConfig;\n } else {\n shouldLoad = true;\n }\n\n if (shouldLoad) {\n const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n let rawJsonFile: string | undefined;\n try {\n rawJsonFile = fs.readFileSync(suppressionsPath).toString();\n } catch (e) {\n throwIfAnythingOtherThanNotExistError(e);\n }\n\n if (!rawJsonFile) {\n suppressionsConfig = {\n serializedSuppressions: new Set(),\n jsonObject: { suppressions: [] },\n newSerializedSuppressions: new Set(),\n newJsonObject: { suppressions: [] }\n };\n } else {\n const jsonObject: IBulkSuppressionsJson = JSON.parse(rawJsonFile);\n validateSuppressionsJson(jsonObject);\n\n const serializedSuppressions: Set<string> = new Set();\n for (const suppression of jsonObject.suppressions) {\n serializedSuppressions.add(serializeSuppression(suppression));\n }\n\n suppressionsConfig = {\n serializedSuppressions,\n jsonObject,\n newSerializedSuppressions: new Set(),\n newJsonObject: { suppressions: [] }\n };\n }\n\n suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });\n }\n\n return suppressionsConfig!;\n}\n\nexport function getAllBulkSuppressionsConfigsByEslintConfigFolderPath(): [string, IBulkSuppressionsConfig][] {\n const result: [string, IBulkSuppressionsConfig][] = [];\n for (const [eslintConfigFolderPath, { suppressionsConfig }] of suppressionsJsonByFolderPath) {\n result.push([eslintConfigFolderPath, suppressionsConfig]);\n }\n\n return result;\n}\n\nexport function writeSuppressionsJsonToFile(\n eslintConfigFolderPath: string,\n suppressionsConfig: IBulkSuppressionsConfig\n): void {\n suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });\n const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n if (suppressionsConfig.jsonObject.suppressions.length === 0) {\n deleteFile(suppressionsPath);\n } else {\n suppressionsConfig.jsonObject.suppressions.sort(compareSuppressions);\n fs.writeFileSync(suppressionsPath, JSON.stringify(suppressionsConfig.jsonObject, undefined, 2));\n }\n}\n\nexport function deleteBulkSuppressionsFileInEslintConfigFolder(eslintConfigFolderPath: string): void {\n const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n deleteFile(suppressionsPath);\n}\n\nfunction deleteFile(filePath: string): void {\n try {\n fs.unlinkSync(filePath);\n } catch (e) {\n throwIfAnythingOtherThanNotExistError(e);\n }\n}\n\nexport function serializeSuppression({ file, scopeId, rule }: ISuppression): string {\n return `${file}|${scopeId}|${rule}`;\n}\n\nfunction compareSuppressions(a: ISuppression, b: ISuppression): -1 | 0 | 1 {\n if (a.file < b.file) {\n return -1;\n } else if (a.file > b.file) {\n return 1;\n } else if (a.scopeId < b.scopeId) {\n return -1;\n } else if (a.scopeId > b.scopeId) {\n return 1;\n } else if (a.rule < b.rule) {\n return -1;\n } else if (a.rule > b.rule) {\n return 1;\n } else {\n return 0;\n }\n}\n\nfunction validateSuppressionsJson(json: IBulkSuppressionsJson): json is IBulkSuppressionsJson {\n if (typeof json !== 'object') {\n throw new Error(`Invalid JSON object: ${JSON.stringify(json, null, 2)}`);\n }\n\n if (!json) {\n throw new Error('JSON object is null.');\n }\n\n const EXPECTED_ROOT_PROPERTY_NAMES: Set<keyof IBulkSuppressionsJson> = new Set(['suppressions']);\n\n for (const propertyName of Object.getOwnPropertyNames(json)) {\n if (!EXPECTED_ROOT_PROPERTY_NAMES.has(propertyName as keyof IBulkSuppressionsJson)) {\n throw new Error(`Unexpected property name: ${propertyName}`);\n }\n }\n\n const { suppressions } = json;\n if (!suppressions) {\n throw new Error('Missing \"suppressions\" property.');\n }\n\n if (!Array.isArray(suppressions)) {\n throw new Error('\"suppressions\" property is not an array.');\n }\n\n const EXPECTED_SUPPRESSION_PROPERTY_NAMES: Set<keyof ISuppression> = new Set(['file', 'scopeId', 'rule']);\n for (const suppression of suppressions) {\n if (typeof suppression !== 'object') {\n throw new Error(`Invalid suppression: ${JSON.stringify(suppression, null, 2)}`);\n }\n\n if (!suppression) {\n throw new Error(`Suppression is null: ${JSON.stringify(suppression, null, 2)}`);\n }\n\n for (const propertyName of Object.getOwnPropertyNames(suppression)) {\n if (!EXPECTED_SUPPRESSION_PROPERTY_NAMES.has(propertyName as keyof ISuppression)) {\n throw new Error(`Unexpected property name: ${propertyName}`);\n }\n }\n\n for (const propertyName of EXPECTED_SUPPRESSION_PROPERTY_NAMES) {\n if (!suppression.hasOwnProperty(propertyName)) {\n throw new Error(\n `Missing \"${propertyName}\" property in suppression: ${JSON.stringify(suppression, null, 2)}`\n );\n } else if (typeof suppression[propertyName] !== 'string') {\n throw new Error(\n `\"${propertyName}\" property in suppression is not a string: ${JSON.stringify(suppression, null, 2)}`\n );\n }\n }\n }\n\n return true;\n}\n"]} | ||
| {"version":3,"file":"bulk-suppressions-file.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-file.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport { VSCODE_PID_ENV_VAR_NAME } from './constants';\n\nexport interface ISuppression {\n file: string;\n scopeId: string;\n rule: string;\n}\n\nexport interface IBulkSuppressionsConfig {\n serializedSuppressions: Set<string>;\n jsonObject: IBulkSuppressionsJson;\n newSerializedSuppressions: Set<string>;\n newJsonObject: IBulkSuppressionsJson;\n}\n\nexport interface IBulkSuppressionsJson {\n suppressions: ISuppression[];\n}\n\nconst IS_RUNNING_IN_VSCODE: boolean = process.env[VSCODE_PID_ENV_VAR_NAME] !== undefined;\nconst TEN_SECONDS_MS: number = 10 * 1000;\nconst SUPPRESSIONS_JSON_FILENAME: string = '.eslint-bulk-suppressions.json';\n\nfunction throwIfAnythingOtherThanNotExistError(e: NodeJS.ErrnoException): void | never {\n if (e?.code !== 'ENOENT') {\n // Throw an error if any other error than file not found\n throw e;\n }\n}\n\ninterface ICachedBulkSuppressionsConfig {\n readTime: number;\n suppressionsConfig: IBulkSuppressionsConfig;\n}\nconst suppressionsJsonByFolderPath: Map<string, ICachedBulkSuppressionsConfig> = new Map();\nexport function getSuppressionsConfigForEslintConfigFolderPath(\n eslintConfigFolderPath: string\n): IBulkSuppressionsConfig {\n const cachedSuppressionsConfig: ICachedBulkSuppressionsConfig | undefined =\n suppressionsJsonByFolderPath.get(eslintConfigFolderPath);\n\n let shouldLoad: boolean;\n let suppressionsConfig: IBulkSuppressionsConfig;\n if (cachedSuppressionsConfig) {\n shouldLoad = IS_RUNNING_IN_VSCODE && cachedSuppressionsConfig.readTime < Date.now() - TEN_SECONDS_MS;\n suppressionsConfig = cachedSuppressionsConfig.suppressionsConfig;\n } else {\n shouldLoad = true;\n }\n\n if (shouldLoad) {\n const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n let rawJsonFile: string | undefined;\n try {\n rawJsonFile = fs.readFileSync(suppressionsPath).toString();\n } catch (e) {\n throwIfAnythingOtherThanNotExistError(e);\n }\n\n if (!rawJsonFile) {\n suppressionsConfig = {\n serializedSuppressions: new Set(),\n jsonObject: { suppressions: [] },\n newSerializedSuppressions: new Set(),\n newJsonObject: { suppressions: [] }\n };\n } else {\n const jsonObject: IBulkSuppressionsJson = JSON.parse(rawJsonFile);\n validateSuppressionsJson(jsonObject);\n\n const serializedSuppressions: Set<string> = new Set();\n for (const suppression of jsonObject.suppressions) {\n serializedSuppressions.add(serializeSuppression(suppression));\n }\n\n suppressionsConfig = {\n serializedSuppressions,\n jsonObject,\n newSerializedSuppressions: new Set(),\n newJsonObject: { suppressions: [] }\n };\n }\n\n suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });\n }\n\n return suppressionsConfig!;\n}\n\nexport function getAllBulkSuppressionsConfigsByEslintConfigFolderPath(): [string, IBulkSuppressionsConfig][] {\n const result: [string, IBulkSuppressionsConfig][] = [];\n for (const [eslintConfigFolderPath, { suppressionsConfig }] of suppressionsJsonByFolderPath) {\n result.push([eslintConfigFolderPath, suppressionsConfig]);\n }\n\n return result;\n}\n\nexport function writeSuppressionsJsonToFile(\n eslintConfigFolderPath: string,\n suppressionsConfig: IBulkSuppressionsConfig\n): void {\n suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig });\n const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n if (suppressionsConfig.jsonObject.suppressions.length === 0) {\n deleteFile(suppressionsPath);\n } else {\n suppressionsConfig.jsonObject.suppressions.sort(compareSuppressions);\n fs.writeFileSync(suppressionsPath, JSON.stringify(suppressionsConfig.jsonObject, undefined, 2));\n }\n}\n\nexport function deleteBulkSuppressionsFileInEslintConfigFolder(eslintConfigFolderPath: string): void {\n const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`;\n deleteFile(suppressionsPath);\n}\n\nfunction deleteFile(filePath: string): void {\n try {\n fs.unlinkSync(filePath);\n } catch (e) {\n throwIfAnythingOtherThanNotExistError(e);\n }\n}\n\nexport function serializeSuppression({ file, scopeId, rule }: ISuppression): string {\n return `${file}|${scopeId}|${rule}`;\n}\n\nfunction compareSuppressions(a: ISuppression, b: ISuppression): -1 | 0 | 1 {\n if (a.file < b.file) {\n return -1;\n } else if (a.file > b.file) {\n return 1;\n } else if (a.scopeId < b.scopeId) {\n return -1;\n } else if (a.scopeId > b.scopeId) {\n return 1;\n } else if (a.rule < b.rule) {\n return -1;\n } else if (a.rule > b.rule) {\n return 1;\n } else {\n return 0;\n }\n}\n\nfunction validateSuppressionsJson(json: IBulkSuppressionsJson): json is IBulkSuppressionsJson {\n if (typeof json !== 'object') {\n throw new Error(`Invalid JSON object: ${JSON.stringify(json, null, 2)}`);\n }\n\n if (!json) {\n throw new Error('JSON object is null.');\n }\n\n const EXPECTED_ROOT_PROPERTY_NAMES: Set<keyof IBulkSuppressionsJson> = new Set(['suppressions']);\n\n for (const propertyName of Object.getOwnPropertyNames(json)) {\n if (!EXPECTED_ROOT_PROPERTY_NAMES.has(propertyName as keyof IBulkSuppressionsJson)) {\n throw new Error(`Unexpected property name: ${propertyName}`);\n }\n }\n\n const { suppressions } = json;\n if (!suppressions) {\n throw new Error('Missing \"suppressions\" property.');\n }\n\n if (!Array.isArray(suppressions)) {\n throw new Error('\"suppressions\" property is not an array.');\n }\n\n const EXPECTED_SUPPRESSION_PROPERTY_NAMES: Set<keyof ISuppression> = new Set(['file', 'scopeId', 'rule']);\n for (const suppression of suppressions) {\n if (typeof suppression !== 'object') {\n throw new Error(`Invalid suppression: ${JSON.stringify(suppression, null, 2)}`);\n }\n\n if (!suppression) {\n throw new Error(`Suppression is null: ${JSON.stringify(suppression, null, 2)}`);\n }\n\n for (const propertyName of Object.getOwnPropertyNames(suppression)) {\n if (!EXPECTED_SUPPRESSION_PROPERTY_NAMES.has(propertyName as keyof ISuppression)) {\n throw new Error(`Unexpected property name: ${propertyName}`);\n }\n }\n\n for (const propertyName of EXPECTED_SUPPRESSION_PROPERTY_NAMES) {\n if (!suppression.hasOwnProperty(propertyName)) {\n throw new Error(\n `Missing \"${propertyName}\" property in suppression: ${JSON.stringify(suppression, null, 2)}`\n );\n } else if (typeof suppression[propertyName] !== 'string') {\n throw new Error(\n `\"${propertyName}\" property in suppression is not a string: ${JSON.stringify(suppression, null, 2)}`\n );\n }\n }\n }\n\n return true;\n}\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bulk-suppressions-patch.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-patch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAWzD,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EAGlB,MAAM,0BAA0B,CAAC;AAWlC,QAAA,MAAM,kBAAkB,EAAE,OAAO,MAA8B,CAAC;AAOhE,UAAU,QAAQ;IAChB,CAAC,kBAAkB,CAAC,CAAC,EAAE;QACrB,MAAM,EAAE,uBAAuB,CAAC;QAChC,WAAW,EAAE,YAAY,CAAC;QAC1B,qBAAqB,EAAE,MAAM,CAAC;KAC/B,CAAC;CACH;AAiGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,QAAQ,CAAC;CACnB,GAAG,OAAO,CA4BV;AAED,wBAAgB,KAAK,IAAI,IAAI,CAiB5B;AAED,wBAAgB,KAAK,IAAI,IAAI,CAS5B;AAGD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,UAAU,EAAE,MAAM,GAAG,OAAO,UAAU,EAAE,MAAM,CAQvD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG,IAAI,CAgBtG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,GAAG,SAAS,GACxE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,GAAG,SAAS,CA0B/D"} | ||
| {"version":3,"file":"bulk-suppressions-patch.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-patch.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AASzD,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EAGlB,MAAM,0BAA0B,CAAC;AAWlC,QAAA,MAAM,kBAAkB,EAAE,OAAO,MAA8B,CAAC;AAOhE,UAAU,QAAQ;IAChB,CAAC,kBAAkB,CAAC,CAAC,EAAE;QACrB,MAAM,EAAE,uBAAuB,CAAC;QAChC,WAAW,EAAE,YAAY,CAAC;QAC1B,qBAAqB,EAAE,MAAM,CAAC;KAC/B,CAAC;CACH;AAiGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,QAAQ,CAAC;CACnB,GAAG,OAAO,CA4BV;AAED,wBAAgB,KAAK,IAAI,IAAI,CAiB5B;AAED,wBAAgB,KAAK,IAAI,IAAI,CAS5B;AAGD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,GACjB,OAAO,UAAU,EAAE,MAAM,GAAG,OAAO,UAAU,EAAE,MAAM,CAQvD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG,IAAI,CAgBtG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,GAAG,SAAS,GACxE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,GAAG,SAAS,CA0B/D"} |
@@ -47,3 +47,3 @@ "use strict"; | ||
| exports.extendVerifyFunction = extendVerifyFunction; | ||
| const fs_1 = __importDefault(require("fs")); | ||
| const node_fs_1 = __importDefault(require("node:fs")); | ||
| const Guards = __importStar(require("./ast-guards")); | ||
@@ -140,3 +140,3 @@ const _patch_base_1 = require("../_patch-base"); | ||
| for (const eslintConfigFilename of ESLINT_CONFIG_FILENAMES) { | ||
| if (fs_1.default.existsSync(`${currentFolder}/${eslintConfigFilename}`)) { | ||
| if (node_fs_1.default.existsSync(`${currentFolder}/${eslintConfigFilename}`)) { | ||
| eslintConfigFolderPath = currentFolder; | ||
@@ -143,0 +143,0 @@ break findEslintConfigFileLoop; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bulk-suppressions-patch.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-patch.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type { TSESTree } from '@typescript-eslint/types';\nimport fs from 'fs';\n\nimport * as Guards from './ast-guards';\n\nimport { eslintFolder } from '../_patch-base';\nimport {\n ESLINT_BULK_ENABLE_ENV_VAR_NAME,\n ESLINT_BULK_PRUNE_ENV_VAR_NAME,\n ESLINT_BULK_SUPPRESS_ENV_VAR_NAME\n} from './constants';\nimport {\n getSuppressionsConfigForEslintConfigFolderPath,\n serializeSuppression,\n type IBulkSuppressionsConfig,\n type ISuppression,\n writeSuppressionsJsonToFile,\n getAllBulkSuppressionsConfigsByEslintConfigFolderPath\n} from './bulk-suppressions-file';\n\nconst ESLINT_CONFIG_FILENAMES: string[] = [\n 'eslint.config.js',\n 'eslint.config.cjs',\n 'eslint.config.mjs',\n '.eslintrc.js',\n '.eslintrc.cjs'\n // Several other filenames are allowed, but this patch requires that it be loaded via a JS config file,\n // so we only need to check for the JS-based filenames\n];\nconst SUPPRESSION_SYMBOL: unique symbol = Symbol('suppression');\nconst ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE: string | undefined = process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME];\nconst SUPPRESS_ALL_RULES: boolean = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE === '*';\nconst RULES_TO_SUPPRESS: Set<string> | undefined = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE\n ? new Set(ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE.split(','))\n : undefined;\n\ninterface IProblem {\n [SUPPRESSION_SYMBOL]?: {\n config: IBulkSuppressionsConfig;\n suppression: ISuppression;\n serializedSuppression: string;\n };\n}\n\nfunction getNodeName(node: TSESTree.Node): string | undefined {\n if (Guards.isClassDeclarationWithName(node)) {\n return node.id.name;\n } else if (Guards.isFunctionDeclarationWithName(node)) {\n return node.id.name;\n } else if (Guards.isClassExpressionWithName(node)) {\n return node.id.name;\n } else if (Guards.isFunctionExpressionWithName(node)) {\n return node.id.name;\n } else if (Guards.isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node)) {\n return node.id.name;\n } else if (Guards.isNormalObjectPropertyWithAnonymousExpressionAssigned(node)) {\n return node.key.name;\n } else if (Guards.isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node)) {\n return node.key.name;\n } else if (Guards.isNormalAssignmentPatternWithAnonymousExpressionAssigned(node)) {\n return node.left.name;\n } else if (Guards.isNormalMethodDefinition(node)) {\n return node.key.name;\n } else if (Guards.isTSEnumDeclaration(node)) {\n return node.id.name;\n } else if (Guards.isTSInterfaceDeclaration(node)) {\n return node.id.name;\n } else if (Guards.isTSTypeAliasDeclaration(node)) {\n return node.id.name;\n }\n}\n\ntype NodeWithParent = TSESTree.Node & { parent?: TSESTree.Node };\n\nfunction calculateScopeId(node: NodeWithParent | undefined): string {\n const scopeIds: string[] = [];\n for (let current: NodeWithParent | undefined = node; current; current = current.parent) {\n const scopeIdForASTNode: string | undefined = getNodeName(current);\n if (scopeIdForASTNode !== undefined) {\n scopeIds.unshift(scopeIdForASTNode);\n }\n }\n\n if (scopeIds.length === 0) {\n return '.';\n } else {\n return '.' + scopeIds.join('.');\n }\n}\n\nconst eslintConfigPathByFileOrFolderPath: Map<string, string> = new Map();\n\nfunction findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFilePath: string): string {\n const cachedFolderPathForFilePath: string | undefined =\n eslintConfigPathByFileOrFolderPath.get(normalizedFilePath);\n if (cachedFolderPathForFilePath) {\n return cachedFolderPathForFilePath;\n }\n const normalizedFileFolderPath: string = normalizedFilePath.substring(\n 0,\n normalizedFilePath.lastIndexOf('/')\n );\n\n const pathsToCache: string[] = [normalizedFilePath];\n let eslintConfigFolderPath: string | undefined;\n findEslintConfigFileLoop: for (\n let currentFolder: string = normalizedFileFolderPath;\n currentFolder; // 'something'.substring(0, -1) is ''\n currentFolder = currentFolder.substring(0, currentFolder.lastIndexOf('/'))\n ) {\n const cachedEslintrcFolderPath: string | undefined =\n eslintConfigPathByFileOrFolderPath.get(currentFolder);\n if (cachedEslintrcFolderPath) {\n // Need to cache this result into the intermediate paths\n eslintConfigFolderPath = cachedEslintrcFolderPath;\n break;\n }\n\n pathsToCache.push(currentFolder);\n for (const eslintConfigFilename of ESLINT_CONFIG_FILENAMES) {\n if (fs.existsSync(`${currentFolder}/${eslintConfigFilename}`)) {\n eslintConfigFolderPath = currentFolder;\n break findEslintConfigFileLoop;\n }\n }\n }\n\n if (eslintConfigFolderPath) {\n for (const checkedFolder of pathsToCache) {\n eslintConfigPathByFileOrFolderPath.set(checkedFolder, eslintConfigFolderPath);\n }\n\n return eslintConfigFolderPath;\n } else {\n throw new Error(`Cannot locate an ESLint configuration file for ${normalizedFilePath}`);\n }\n}\n\n// One-line insert into the ruleContext report method to prematurely exit if the ESLint problem has been suppressed\nexport function shouldBulkSuppress(params: {\n filename: string;\n currentNode: TSESTree.Node;\n ruleId: string;\n problem: IProblem;\n}): boolean {\n // Use this ENV variable to turn off eslint-bulk-suppressions functionality, default behavior is on\n if (process.env[ESLINT_BULK_ENABLE_ENV_VAR_NAME] === 'false') {\n return false;\n }\n\n const { filename: fileAbsolutePath, currentNode, ruleId: rule, problem } = params;\n const normalizedFileAbsolutePath: string = fileAbsolutePath.replace(/\\\\/g, '/');\n const eslintConfigDirectory: string =\n findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFileAbsolutePath);\n const fileRelativePath: string = normalizedFileAbsolutePath.substring(eslintConfigDirectory.length + 1);\n const scopeId: string = calculateScopeId(currentNode);\n const suppression: ISuppression = { file: fileRelativePath, scopeId, rule };\n\n const config: IBulkSuppressionsConfig =\n getSuppressionsConfigForEslintConfigFolderPath(eslintConfigDirectory);\n const serializedSuppression: string = serializeSuppression(suppression);\n const currentNodeIsSuppressed: boolean = config.serializedSuppressions.has(serializedSuppression);\n\n if (currentNodeIsSuppressed || SUPPRESS_ALL_RULES || RULES_TO_SUPPRESS?.has(suppression.rule)) {\n problem[SUPPRESSION_SYMBOL] = {\n suppression,\n serializedSuppression,\n config\n };\n }\n\n return process.env[ESLINT_BULK_PRUNE_ENV_VAR_NAME] !== '1' && currentNodeIsSuppressed;\n}\n\nexport function prune(): void {\n for (const [\n eslintConfigFolderPath,\n suppressionsConfig\n ] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) {\n if (suppressionsConfig) {\n const { newSerializedSuppressions, newJsonObject } = suppressionsConfig;\n const newSuppressionsConfig: IBulkSuppressionsConfig = {\n serializedSuppressions: newSerializedSuppressions,\n jsonObject: newJsonObject,\n newSerializedSuppressions: new Set(),\n newJsonObject: { suppressions: [] }\n };\n\n writeSuppressionsJsonToFile(eslintConfigFolderPath, newSuppressionsConfig);\n }\n }\n}\n\nexport function write(): void {\n for (const [\n eslintrcFolderPath,\n suppressionsConfig\n ] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) {\n if (suppressionsConfig) {\n writeSuppressionsJsonToFile(eslintrcFolderPath, suppressionsConfig);\n }\n }\n}\n\n// utility function for linter-patch.js to make require statements that use relative paths in linter.js work in linter-patch.js\nexport function requireFromPathToLinterJS(\n importPath: string\n): import('eslint-9').Linter | import('eslint-8').Linter {\n if (!eslintFolder) {\n return require(importPath);\n }\n\n const pathToLinterFolder: string = `${eslintFolder}/lib/linter`;\n const moduleAbsolutePath: string = require.resolve(importPath, { paths: [pathToLinterFolder] });\n return require(moduleAbsolutePath);\n}\n\nexport function patchClass<T, U extends T>(originalClass: new () => T, patchedClass: new () => U): void {\n // Get all the property names of the patched class prototype\n const patchedProperties: string[] = Object.getOwnPropertyNames(patchedClass.prototype);\n\n // Loop through all the properties\n for (const prop of patchedProperties) {\n // Override the property in the original class\n originalClass.prototype[prop] = patchedClass.prototype[prop];\n }\n\n // Handle getters and setters\n for (const [prop, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(patchedClass.prototype))) {\n if (descriptor.get || descriptor.set) {\n Object.defineProperty(originalClass.prototype, prop, descriptor);\n }\n }\n}\n\n/**\n * This returns a wrapped version of the \"verify\" function from ESLint's Linter class\n * that postprocesses rule violations that weren't suppressed by comments. This postprocessing\n * records suppressions that weren't otherwise suppressed by comments to be used\n * by the \"suppress\" and \"prune\" commands.\n */\nexport function extendVerifyFunction(\n originalFn: (this: unknown, ...args: unknown[]) => IProblem[] | undefined\n): (this: unknown, ...args: unknown[]) => IProblem[] | undefined {\n return function (this: unknown, ...args: unknown[]): IProblem[] | undefined {\n const problems: IProblem[] | undefined = originalFn.apply(this, args);\n if (problems) {\n for (const problem of problems) {\n if (problem[SUPPRESSION_SYMBOL]) {\n const {\n serializedSuppression,\n suppression,\n config: {\n newSerializedSuppressions,\n jsonObject: { suppressions },\n newJsonObject: { suppressions: newSuppressions }\n }\n } = problem[SUPPRESSION_SYMBOL];\n if (!newSerializedSuppressions.has(serializedSuppression)) {\n newSerializedSuppressions.add(serializedSuppression);\n newSuppressions.push(suppression);\n suppressions.push(suppression);\n }\n }\n }\n }\n\n return problems;\n };\n}\n"]} | ||
| {"version":3,"file":"bulk-suppressions-patch.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/bulk-suppressions-patch.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport type { TSESTree } from '@typescript-eslint/types';\n\nimport * as Guards from './ast-guards';\nimport { eslintFolder } from '../_patch-base';\nimport {\n ESLINT_BULK_ENABLE_ENV_VAR_NAME,\n ESLINT_BULK_PRUNE_ENV_VAR_NAME,\n ESLINT_BULK_SUPPRESS_ENV_VAR_NAME\n} from './constants';\nimport {\n getSuppressionsConfigForEslintConfigFolderPath,\n serializeSuppression,\n type IBulkSuppressionsConfig,\n type ISuppression,\n writeSuppressionsJsonToFile,\n getAllBulkSuppressionsConfigsByEslintConfigFolderPath\n} from './bulk-suppressions-file';\n\nconst ESLINT_CONFIG_FILENAMES: string[] = [\n 'eslint.config.js',\n 'eslint.config.cjs',\n 'eslint.config.mjs',\n '.eslintrc.js',\n '.eslintrc.cjs'\n // Several other filenames are allowed, but this patch requires that it be loaded via a JS config file,\n // so we only need to check for the JS-based filenames\n];\nconst SUPPRESSION_SYMBOL: unique symbol = Symbol('suppression');\nconst ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE: string | undefined = process.env[ESLINT_BULK_SUPPRESS_ENV_VAR_NAME];\nconst SUPPRESS_ALL_RULES: boolean = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE === '*';\nconst RULES_TO_SUPPRESS: Set<string> | undefined = ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE\n ? new Set(ESLINT_BULK_SUPPRESS_ENV_VAR_VALUE.split(','))\n : undefined;\n\ninterface IProblem {\n [SUPPRESSION_SYMBOL]?: {\n config: IBulkSuppressionsConfig;\n suppression: ISuppression;\n serializedSuppression: string;\n };\n}\n\nfunction getNodeName(node: TSESTree.Node): string | undefined {\n if (Guards.isClassDeclarationWithName(node)) {\n return node.id.name;\n } else if (Guards.isFunctionDeclarationWithName(node)) {\n return node.id.name;\n } else if (Guards.isClassExpressionWithName(node)) {\n return node.id.name;\n } else if (Guards.isFunctionExpressionWithName(node)) {\n return node.id.name;\n } else if (Guards.isNormalVariableDeclaratorWithAnonymousExpressionAssigned(node)) {\n return node.id.name;\n } else if (Guards.isNormalObjectPropertyWithAnonymousExpressionAssigned(node)) {\n return node.key.name;\n } else if (Guards.isNormalClassPropertyDefinitionWithAnonymousExpressionAssigned(node)) {\n return node.key.name;\n } else if (Guards.isNormalAssignmentPatternWithAnonymousExpressionAssigned(node)) {\n return node.left.name;\n } else if (Guards.isNormalMethodDefinition(node)) {\n return node.key.name;\n } else if (Guards.isTSEnumDeclaration(node)) {\n return node.id.name;\n } else if (Guards.isTSInterfaceDeclaration(node)) {\n return node.id.name;\n } else if (Guards.isTSTypeAliasDeclaration(node)) {\n return node.id.name;\n }\n}\n\ntype NodeWithParent = TSESTree.Node & { parent?: TSESTree.Node };\n\nfunction calculateScopeId(node: NodeWithParent | undefined): string {\n const scopeIds: string[] = [];\n for (let current: NodeWithParent | undefined = node; current; current = current.parent) {\n const scopeIdForASTNode: string | undefined = getNodeName(current);\n if (scopeIdForASTNode !== undefined) {\n scopeIds.unshift(scopeIdForASTNode);\n }\n }\n\n if (scopeIds.length === 0) {\n return '.';\n } else {\n return '.' + scopeIds.join('.');\n }\n}\n\nconst eslintConfigPathByFileOrFolderPath: Map<string, string> = new Map();\n\nfunction findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFilePath: string): string {\n const cachedFolderPathForFilePath: string | undefined =\n eslintConfigPathByFileOrFolderPath.get(normalizedFilePath);\n if (cachedFolderPathForFilePath) {\n return cachedFolderPathForFilePath;\n }\n const normalizedFileFolderPath: string = normalizedFilePath.substring(\n 0,\n normalizedFilePath.lastIndexOf('/')\n );\n\n const pathsToCache: string[] = [normalizedFilePath];\n let eslintConfigFolderPath: string | undefined;\n findEslintConfigFileLoop: for (\n let currentFolder: string = normalizedFileFolderPath;\n currentFolder; // 'something'.substring(0, -1) is ''\n currentFolder = currentFolder.substring(0, currentFolder.lastIndexOf('/'))\n ) {\n const cachedEslintrcFolderPath: string | undefined =\n eslintConfigPathByFileOrFolderPath.get(currentFolder);\n if (cachedEslintrcFolderPath) {\n // Need to cache this result into the intermediate paths\n eslintConfigFolderPath = cachedEslintrcFolderPath;\n break;\n }\n\n pathsToCache.push(currentFolder);\n for (const eslintConfigFilename of ESLINT_CONFIG_FILENAMES) {\n if (fs.existsSync(`${currentFolder}/${eslintConfigFilename}`)) {\n eslintConfigFolderPath = currentFolder;\n break findEslintConfigFileLoop;\n }\n }\n }\n\n if (eslintConfigFolderPath) {\n for (const checkedFolder of pathsToCache) {\n eslintConfigPathByFileOrFolderPath.set(checkedFolder, eslintConfigFolderPath);\n }\n\n return eslintConfigFolderPath;\n } else {\n throw new Error(`Cannot locate an ESLint configuration file for ${normalizedFilePath}`);\n }\n}\n\n// One-line insert into the ruleContext report method to prematurely exit if the ESLint problem has been suppressed\nexport function shouldBulkSuppress(params: {\n filename: string;\n currentNode: TSESTree.Node;\n ruleId: string;\n problem: IProblem;\n}): boolean {\n // Use this ENV variable to turn off eslint-bulk-suppressions functionality, default behavior is on\n if (process.env[ESLINT_BULK_ENABLE_ENV_VAR_NAME] === 'false') {\n return false;\n }\n\n const { filename: fileAbsolutePath, currentNode, ruleId: rule, problem } = params;\n const normalizedFileAbsolutePath: string = fileAbsolutePath.replace(/\\\\/g, '/');\n const eslintConfigDirectory: string =\n findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFileAbsolutePath);\n const fileRelativePath: string = normalizedFileAbsolutePath.substring(eslintConfigDirectory.length + 1);\n const scopeId: string = calculateScopeId(currentNode);\n const suppression: ISuppression = { file: fileRelativePath, scopeId, rule };\n\n const config: IBulkSuppressionsConfig =\n getSuppressionsConfigForEslintConfigFolderPath(eslintConfigDirectory);\n const serializedSuppression: string = serializeSuppression(suppression);\n const currentNodeIsSuppressed: boolean = config.serializedSuppressions.has(serializedSuppression);\n\n if (currentNodeIsSuppressed || SUPPRESS_ALL_RULES || RULES_TO_SUPPRESS?.has(suppression.rule)) {\n problem[SUPPRESSION_SYMBOL] = {\n suppression,\n serializedSuppression,\n config\n };\n }\n\n return process.env[ESLINT_BULK_PRUNE_ENV_VAR_NAME] !== '1' && currentNodeIsSuppressed;\n}\n\nexport function prune(): void {\n for (const [\n eslintConfigFolderPath,\n suppressionsConfig\n ] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) {\n if (suppressionsConfig) {\n const { newSerializedSuppressions, newJsonObject } = suppressionsConfig;\n const newSuppressionsConfig: IBulkSuppressionsConfig = {\n serializedSuppressions: newSerializedSuppressions,\n jsonObject: newJsonObject,\n newSerializedSuppressions: new Set(),\n newJsonObject: { suppressions: [] }\n };\n\n writeSuppressionsJsonToFile(eslintConfigFolderPath, newSuppressionsConfig);\n }\n }\n}\n\nexport function write(): void {\n for (const [\n eslintrcFolderPath,\n suppressionsConfig\n ] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) {\n if (suppressionsConfig) {\n writeSuppressionsJsonToFile(eslintrcFolderPath, suppressionsConfig);\n }\n }\n}\n\n// utility function for linter-patch.js to make require statements that use relative paths in linter.js work in linter-patch.js\nexport function requireFromPathToLinterJS(\n importPath: string\n): import('eslint-9').Linter | import('eslint-8').Linter {\n if (!eslintFolder) {\n return require(importPath);\n }\n\n const pathToLinterFolder: string = `${eslintFolder}/lib/linter`;\n const moduleAbsolutePath: string = require.resolve(importPath, { paths: [pathToLinterFolder] });\n return require(moduleAbsolutePath);\n}\n\nexport function patchClass<T, U extends T>(originalClass: new () => T, patchedClass: new () => U): void {\n // Get all the property names of the patched class prototype\n const patchedProperties: string[] = Object.getOwnPropertyNames(patchedClass.prototype);\n\n // Loop through all the properties\n for (const prop of patchedProperties) {\n // Override the property in the original class\n originalClass.prototype[prop] = patchedClass.prototype[prop];\n }\n\n // Handle getters and setters\n for (const [prop, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(patchedClass.prototype))) {\n if (descriptor.get || descriptor.set) {\n Object.defineProperty(originalClass.prototype, prop, descriptor);\n }\n }\n}\n\n/**\n * This returns a wrapped version of the \"verify\" function from ESLint's Linter class\n * that postprocesses rule violations that weren't suppressed by comments. This postprocessing\n * records suppressions that weren't otherwise suppressed by comments to be used\n * by the \"suppress\" and \"prune\" commands.\n */\nexport function extendVerifyFunction(\n originalFn: (this: unknown, ...args: unknown[]) => IProblem[] | undefined\n): (this: unknown, ...args: unknown[]) => IProblem[] | undefined {\n return function (this: unknown, ...args: unknown[]): IProblem[] | undefined {\n const problems: IProblem[] | undefined = originalFn.apply(this, args);\n if (problems) {\n for (const problem of problems) {\n if (problem[SUPPRESSION_SYMBOL]) {\n const {\n serializedSuppression,\n suppression,\n config: {\n newSerializedSuppressions,\n jsonObject: { suppressions },\n newJsonObject: { suppressions: newSuppressions }\n }\n } = problem[SUPPRESSION_SYMBOL];\n if (!newSerializedSuppressions.has(serializedSuppression)) {\n newSerializedSuppressions.add(serializedSuppression);\n newSuppressions.push(suppression);\n suppressions.push(suppression);\n }\n }\n }\n }\n\n return problems;\n };\n}\n"]} |
@@ -9,3 +9,3 @@ "use strict"; | ||
| exports.pruneAsync = pruneAsync; | ||
| const fs_1 = __importDefault(require("fs")); | ||
| const node_fs_1 = __importDefault(require("node:fs")); | ||
| const print_help_1 = require("./utils/print-help"); | ||
@@ -47,3 +47,3 @@ const runEslint_1 = require("./runEslint"); | ||
| try { | ||
| await fs_1.default.promises.access(filePath, fs_1.default.constants.F_OK); | ||
| await node_fs_1.default.promises.access(filePath, node_fs_1.default.constants.F_OK); | ||
| allExistingFiles.push(filePath); | ||
@@ -50,0 +50,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/prune.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAY3D,gCAsBC;AAhCD,4CAAoB;AAEpB,mDAAoD;AACpD,2CAA6C;AAC7C,4CAA8D;AAC9D,sEAGmC;AAE5B,KAAK,UAAU,UAAU;IAC9B,MAAM,IAAI,GAAa,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,IAAA,2BAAc,GAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,aAAa,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAa,MAAM,8CAA8C,CAAC,aAAa,CAAC,CAAC;IAC/F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,0CAA8B,CAAC,GAAG,GAAG,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;QACpE,MAAM,IAAA,0BAAc,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,IAAA,uEAA8C,EAAC,aAAa,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,8CAA8C,CAAC,aAAqB;IACjF,MAAM,EAAE,UAAU,EAAE,0BAA0B,EAAE,GAC9C,IAAA,uEAA8C,EAAC,aAAa,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAC;IACxC,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,0BAA0B,CAAC,YAAY,EAAE,CAAC;QACzE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,aAAa,GAAa,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErD,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,wGAAwG;IACxG,MAAM,OAAO,CAAC,GAAG,CACf,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,YAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,WAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,SAAS,gBAAgB,CAAC,MAAM,oCAAoC,CAAC,CAAC;IAClF,MAAM,YAAY,GAAW,aAAa,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAC5E,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,wCAAwC,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'fs';\n\nimport { printPruneHelp } from './utils/print-help';\nimport { runEslintAsync } from './runEslint';\nimport { ESLINT_BULK_PRUNE_ENV_VAR_NAME } from '../constants';\nimport {\n deleteBulkSuppressionsFileInEslintConfigFolder,\n getSuppressionsConfigForEslintConfigFolderPath\n} from '../bulk-suppressions-file';\n\nexport async function pruneAsync(): Promise<void> {\n const args: string[] = process.argv.slice(3);\n\n if (args.includes('--help') || args.includes('-h')) {\n printPruneHelp();\n process.exit(0);\n }\n\n if (args.length > 0) {\n throw new Error(`@rushstack/eslint-bulk: Unknown arguments: ${args.join(' ')}`);\n }\n\n const normalizedCwd: string = process.cwd().replace(/\\\\/g, '/');\n const allFiles: string[] = await getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd);\n if (allFiles.length > 0) {\n process.env[ESLINT_BULK_PRUNE_ENV_VAR_NAME] = '1';\n console.log(`Pruning suppressions for ${allFiles.length} files...`);\n await runEslintAsync(allFiles, 'prune');\n } else {\n console.log('No files with existing suppressions found.');\n deleteBulkSuppressionsFileInEslintConfigFolder(normalizedCwd);\n }\n}\n\nasync function getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd: string): Promise<string[]> {\n const { jsonObject: bulkSuppressionsConfigJson } =\n getSuppressionsConfigForEslintConfigFolderPath(normalizedCwd);\n const allFiles: Set<string> = new Set();\n for (const { file: filePath } of bulkSuppressionsConfigJson.suppressions) {\n allFiles.add(filePath);\n }\n\n const allFilesArray: string[] = Array.from(allFiles);\n\n const allExistingFiles: string[] = [];\n // TODO: limit parallelism here with something similar to `Async.forEachAsync` from `node-core-library`.\n await Promise.all(\n allFilesArray.map(async (filePath: string) => {\n try {\n await fs.promises.access(filePath, fs.constants.F_OK);\n allExistingFiles.push(filePath);\n } catch {\n // Doesn't exist - ignore\n }\n })\n );\n\n console.log(`Found ${allExistingFiles.length} files with existing suppressions.`);\n const deletedCount: number = allFilesArray.length - allExistingFiles.length;\n if (deletedCount > 0) {\n console.log(`${deletedCount} files with suppressions were deleted.`);\n }\n\n return allExistingFiles;\n}\n"]} | ||
| {"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/prune.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAY3D,gCAsBC;AAhCD,sDAAyB;AAEzB,mDAAoD;AACpD,2CAA6C;AAC7C,4CAA8D;AAC9D,sEAGmC;AAE5B,KAAK,UAAU,UAAU;IAC9B,MAAM,IAAI,GAAa,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,IAAA,2BAAc,GAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,aAAa,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAa,MAAM,8CAA8C,CAAC,aAAa,CAAC,CAAC;IAC/F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,0CAA8B,CAAC,GAAG,GAAG,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;QACpE,MAAM,IAAA,0BAAc,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,IAAA,uEAA8C,EAAC,aAAa,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,8CAA8C,CAAC,aAAqB;IACjF,MAAM,EAAE,UAAU,EAAE,0BAA0B,EAAE,GAC9C,IAAA,uEAA8C,EAAC,aAAa,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAC;IACxC,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,0BAA0B,CAAC,YAAY,EAAE,CAAC;QACzE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,aAAa,GAAa,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErD,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,wGAAwG;IACxG,MAAM,OAAO,CAAC,GAAG,CACf,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,iBAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,iBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,WAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,SAAS,gBAAgB,CAAC,MAAM,oCAAoC,CAAC,CAAC;IAClF,MAAM,YAAY,GAAW,aAAa,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAC5E,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,wCAAwC,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport { printPruneHelp } from './utils/print-help';\nimport { runEslintAsync } from './runEslint';\nimport { ESLINT_BULK_PRUNE_ENV_VAR_NAME } from '../constants';\nimport {\n deleteBulkSuppressionsFileInEslintConfigFolder,\n getSuppressionsConfigForEslintConfigFolderPath\n} from '../bulk-suppressions-file';\n\nexport async function pruneAsync(): Promise<void> {\n const args: string[] = process.argv.slice(3);\n\n if (args.includes('--help') || args.includes('-h')) {\n printPruneHelp();\n process.exit(0);\n }\n\n if (args.length > 0) {\n throw new Error(`@rushstack/eslint-bulk: Unknown arguments: ${args.join(' ')}`);\n }\n\n const normalizedCwd: string = process.cwd().replace(/\\\\/g, '/');\n const allFiles: string[] = await getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd);\n if (allFiles.length > 0) {\n process.env[ESLINT_BULK_PRUNE_ENV_VAR_NAME] = '1';\n console.log(`Pruning suppressions for ${allFiles.length} files...`);\n await runEslintAsync(allFiles, 'prune');\n } else {\n console.log('No files with existing suppressions found.');\n deleteBulkSuppressionsFileInEslintConfigFolder(normalizedCwd);\n }\n}\n\nasync function getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd: string): Promise<string[]> {\n const { jsonObject: bulkSuppressionsConfigJson } =\n getSuppressionsConfigForEslintConfigFolderPath(normalizedCwd);\n const allFiles: Set<string> = new Set();\n for (const { file: filePath } of bulkSuppressionsConfigJson.suppressions) {\n allFiles.add(filePath);\n }\n\n const allFilesArray: string[] = Array.from(allFiles);\n\n const allExistingFiles: string[] = [];\n // TODO: limit parallelism here with something similar to `Async.forEachAsync` from `node-core-library`.\n await Promise.all(\n allFilesArray.map(async (filePath: string) => {\n try {\n await fs.promises.access(filePath, fs.constants.F_OK);\n allExistingFiles.push(filePath);\n } catch {\n // Doesn't exist - ignore\n }\n })\n );\n\n console.log(`Found ${allExistingFiles.length} files with existing suppressions.`);\n const deletedCount: number = allFilesArray.length - allExistingFiles.length;\n if (deletedCount > 0) {\n console.log(`${deletedCount} files with suppressions were deleted.`);\n }\n\n return allExistingFiles;\n}\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"runEslint.d.ts","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/runEslint.ts"],"names":[],"mappings":"AAOA,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C/F"} | ||
| {"version":3,"file":"runEslint.d.ts","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/runEslint.ts"],"names":[],"mappings":"AAQA,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C/F"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"runEslint.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/runEslint.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAM3D,wCA4CC;AA9CD,2DAAiE;AAE1D,KAAK,UAAU,cAAc,CAAC,KAAe,EAAE,IAA0B;IAC9E,MAAM,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,wCAAuB,EAAC,GAAG,CAAC,CAAC;IACjE,MAAM,EAAE,MAAM,EAAE,GAA0D,OAAO,CAAC,UAAU,CAAC,CAAC;IAE9F,IAAI,MAA+B,CAAC;IACpC,MAAM,YAAY,GAAW,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,OAA0D,CAAC;IAC/D,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,wDAAa,4BAA4B,GAAC,CAAC;IACpE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QACR,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAgD,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QACnG,8DAA8D;QAC9D,MAAM,gBAAgB,GAAW,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAc,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,CACT,wGAAwG;QACtG,yBAAyB,GAAG,EAAE,CACjC,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type { ESLint as TEslintLegacy } from 'eslint-8';\nimport type { ESLint as TEslint } from 'eslint-9';\nimport { getEslintPathAndVersion } from './utils/get-eslint-cli';\n\nexport async function runEslintAsync(files: string[], mode: 'suppress' | 'prune'): Promise<void> {\n const cwd: string = process.cwd();\n const [eslintPath, eslintVersion] = getEslintPathAndVersion(cwd);\n const { ESLint }: typeof import('eslint-9') | typeof import('eslint-8') = require(eslintPath);\n\n let eslint: TEslint | TEslintLegacy;\n const majorVersion: number = parseInt(eslintVersion, 10);\n if (majorVersion < 9) {\n eslint = new ESLint({ cwd, useEslintrc: true });\n } else {\n eslint = new ESLint({ cwd });\n }\n\n let results: (TEslint.LintResult | TEslintLegacy.LintResult)[];\n try {\n results = await eslint.lintFiles(files);\n } catch (e) {\n throw new Error(`@rushstack/eslint-bulk execution error: ${e.message}`);\n }\n\n const { write, prune } = await import('../bulk-suppressions-patch');\n switch (mode) {\n case 'suppress': {\n await write();\n break;\n }\n\n case 'prune': {\n await prune();\n break;\n }\n }\n\n if (results.length > 0) {\n const stylishFormatter: TEslint.Formatter | TEslintLegacy.Formatter = await eslint.loadFormatter();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const formattedResults: string = await Promise.resolve(stylishFormatter.format(results as any));\n console.log(formattedResults);\n }\n\n console.log(\n '@rushstack/eslint-bulk: Successfully pruned unused suppressions in all .eslint-bulk-suppressions.json ' +\n `files under directory ${cwd}`\n );\n}\n"]} | ||
| {"version":3,"file":"runEslint.js","sourceRoot":"","sources":["../../../src/eslint-bulk-suppressions/cli/runEslint.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAO3D,wCA4CC;AA9CD,2DAAiE;AAE1D,KAAK,UAAU,cAAc,CAAC,KAAe,EAAE,IAA0B;IAC9E,MAAM,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,wCAAuB,EAAC,GAAG,CAAC,CAAC;IACjE,MAAM,EAAE,MAAM,EAAE,GAA0D,OAAO,CAAC,UAAU,CAAC,CAAC;IAE9F,IAAI,MAA+B,CAAC;IACpC,MAAM,YAAY,GAAW,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,OAA0D,CAAC;IAC/D,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,wDAAa,4BAA4B,GAAC,CAAC;IACpE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QACR,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAgD,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QACnG,8DAA8D;QAC9D,MAAM,gBAAgB,GAAW,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAc,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,CACT,wGAAwG;QACtG,yBAAyB,GAAG,EAAE,CACjC,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport type { ESLint as TEslintLegacy } from 'eslint-8';\nimport type { ESLint as TEslint } from 'eslint-9';\n\nimport { getEslintPathAndVersion } from './utils/get-eslint-cli';\n\nexport async function runEslintAsync(files: string[], mode: 'suppress' | 'prune'): Promise<void> {\n const cwd: string = process.cwd();\n const [eslintPath, eslintVersion] = getEslintPathAndVersion(cwd);\n const { ESLint }: typeof import('eslint-9') | typeof import('eslint-8') = require(eslintPath);\n\n let eslint: TEslint | TEslintLegacy;\n const majorVersion: number = parseInt(eslintVersion, 10);\n if (majorVersion < 9) {\n eslint = new ESLint({ cwd, useEslintrc: true });\n } else {\n eslint = new ESLint({ cwd });\n }\n\n let results: (TEslint.LintResult | TEslintLegacy.LintResult)[];\n try {\n results = await eslint.lintFiles(files);\n } catch (e) {\n throw new Error(`@rushstack/eslint-bulk execution error: ${e.message}`);\n }\n\n const { write, prune } = await import('../bulk-suppressions-patch');\n switch (mode) {\n case 'suppress': {\n await write();\n break;\n }\n\n case 'prune': {\n await prune();\n break;\n }\n }\n\n if (results.length > 0) {\n const stylishFormatter: TEslint.Formatter | TEslintLegacy.Formatter = await eslint.loadFormatter();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const formattedResults: string = await Promise.resolve(stylishFormatter.format(results as any));\n console.log(formattedResults);\n }\n\n console.log(\n '@rushstack/eslint-bulk: Successfully pruned unused suppressions in all .eslint-bulk-suppressions.json ' +\n `files under directory ${cwd}`\n );\n}\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"get-eslint-cli.d.ts","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts"],"names":[],"mappings":"AAmBA,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA8C7E"} | ||
| {"version":3,"file":"get-eslint-cli.d.ts","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts"],"names":[],"mappings":"AAoBA,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA8C7E"} |
@@ -9,3 +9,3 @@ "use strict"; | ||
| exports.getEslintPathAndVersion = getEslintPathAndVersion; | ||
| const path_1 = __importDefault(require("path")); | ||
| const node_path_1 = __importDefault(require("node:path")); | ||
| const constants_1 = require("../../constants"); | ||
@@ -31,3 +31,3 @@ // When this list is updated, update the `eslint-bulk-suppressions-newest-test` | ||
| }); | ||
| const localEslintPath = path_1.default.dirname(path_1.default.dirname(localEslintApiPath)); | ||
| const localEslintPath = node_path_1.default.dirname(node_path_1.default.dirname(localEslintApiPath)); | ||
| const { version: localEslintVersion } = require(`${localEslintPath}/package.json`); | ||
@@ -34,0 +34,0 @@ if (!TESTED_VERSIONS.has(localEslintVersion)) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"get-eslint-cli.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAkB3D,0DA8CC;AA9DD,gDAAwB;AACxB,+CAA4E;AAE5E,+EAA+E;AAC/E,mFAAmF;AACnF,MAAM,eAAe,GAAgB,IAAI,GAAG,CAAC;IAC3C,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC,CAAC;AAEH,SAAgB,uBAAuB,CAAC,WAAmB;IACzD,6GAA6G;IAC7G,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAW,OAAO,CAAC,OAAO,CAAC,qDAAyC,EAAE;YAC5F,KAAK,EAAE,CAAC,WAAW,CAAC;SACrB,CAAC,CAAC;QACH,MAAM,eAAe,GAAW,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC/E,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,GAAG,eAAe,eAAe,CAAC,CAAC;QAEnF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CACV,wGAAwG,CACzG,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,EACJ,YAAY,EACZ,eAAe,EAChB,GAGG,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC;YAE3C,IAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,mFAAmF;oBACjF,iDAAiD,CACpD,CAAC;YACJ,CAAC;iBAAM,IAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,+EAA+E;oBAC7E,iDAAiD,CACpD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport path from 'path';\nimport { BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME } from '../../constants';\n\n// When this list is updated, update the `eslint-bulk-suppressions-newest-test`\n// and/or the `eslint-bulk-suppressions-newest-test` projects' eslint dependencies.\nconst TESTED_VERSIONS: Set<string> = new Set([\n '8.6.0',\n '8.7.0',\n '8.21.0',\n '8.22.0',\n '8.23.0',\n '8.23.1',\n '8.57.0',\n '9.25.1'\n]);\n\nexport function getEslintPathAndVersion(packagePath: string): [string, string] {\n // Try to find a local ESLint installation, the one that should be listed as a dev dependency in package.json\n // and installed in node_modules\n try {\n const localEslintApiPath: string = require.resolve(BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME, {\n paths: [packagePath]\n });\n const localEslintPath: string = path.dirname(path.dirname(localEslintApiPath));\n const { version: localEslintVersion } = require(`${localEslintPath}/package.json`);\n\n if (!TESTED_VERSIONS.has(localEslintVersion)) {\n console.warn(\n '@rushstack/eslint-bulk: Be careful, the installed ESLint version has not been tested with eslint-bulk.'\n );\n }\n\n return [localEslintApiPath, localEslintVersion];\n } catch (e1) {\n try {\n const {\n dependencies,\n devDependencies\n }: {\n dependencies: Record<string, string> | undefined;\n devDependencies: Record<string, string> | undefined;\n } = require(`${packagePath}/package.json`);\n\n if (devDependencies?.eslint) {\n throw new Error(\n '@rushstack/eslint-bulk: eslint is specified as a dev dependency in package.json, ' +\n 'but eslint-bulk cannot find it in node_modules.'\n );\n } else if (dependencies?.eslint) {\n throw new Error(\n '@rushstack/eslint-bulk: eslint is specified as a dependency in package.json, ' +\n 'but eslint-bulk cannot find it in node_modules.'\n );\n } else {\n throw new Error('@rushstack/eslint-bulk: eslint is not specified as a dependency in package.json.');\n }\n } catch (e2) {\n throw new Error(\n \"@rushstack/eslint-bulk: This command must be run in the same folder as a project's package.json file.\"\n );\n }\n }\n}\n"]} | ||
| {"version":3,"file":"get-eslint-cli.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAmB3D,0DA8CC;AA/DD,0DAA6B;AAE7B,+CAA4E;AAE5E,+EAA+E;AAC/E,mFAAmF;AACnF,MAAM,eAAe,GAAgB,IAAI,GAAG,CAAC;IAC3C,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC,CAAC;AAEH,SAAgB,uBAAuB,CAAC,WAAmB;IACzD,6GAA6G;IAC7G,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAW,OAAO,CAAC,OAAO,CAAC,qDAAyC,EAAE;YAC5F,KAAK,EAAE,CAAC,WAAW,CAAC;SACrB,CAAC,CAAC;QACH,MAAM,eAAe,GAAW,mBAAI,CAAC,OAAO,CAAC,mBAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC/E,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,GAAG,eAAe,eAAe,CAAC,CAAC;QAEnF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CACV,wGAAwG,CACzG,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,EACJ,YAAY,EACZ,eAAe,EAChB,GAGG,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC;YAE3C,IAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,mFAAmF;oBACjF,iDAAiD,CACpD,CAAC;YACJ,CAAC;iBAAM,IAAI,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,+EAA+E;oBAC7E,iDAAiD,CACpD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport path from 'node:path';\n\nimport { BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME } from '../../constants';\n\n// When this list is updated, update the `eslint-bulk-suppressions-newest-test`\n// and/or the `eslint-bulk-suppressions-newest-test` projects' eslint dependencies.\nconst TESTED_VERSIONS: Set<string> = new Set([\n '8.6.0',\n '8.7.0',\n '8.21.0',\n '8.22.0',\n '8.23.0',\n '8.23.1',\n '8.57.0',\n '9.25.1'\n]);\n\nexport function getEslintPathAndVersion(packagePath: string): [string, string] {\n // Try to find a local ESLint installation, the one that should be listed as a dev dependency in package.json\n // and installed in node_modules\n try {\n const localEslintApiPath: string = require.resolve(BULK_SUPPRESSIONS_CLI_ESLINT_PACKAGE_NAME, {\n paths: [packagePath]\n });\n const localEslintPath: string = path.dirname(path.dirname(localEslintApiPath));\n const { version: localEslintVersion } = require(`${localEslintPath}/package.json`);\n\n if (!TESTED_VERSIONS.has(localEslintVersion)) {\n console.warn(\n '@rushstack/eslint-bulk: Be careful, the installed ESLint version has not been tested with eslint-bulk.'\n );\n }\n\n return [localEslintApiPath, localEslintVersion];\n } catch (e1) {\n try {\n const {\n dependencies,\n devDependencies\n }: {\n dependencies: Record<string, string> | undefined;\n devDependencies: Record<string, string> | undefined;\n } = require(`${packagePath}/package.json`);\n\n if (devDependencies?.eslint) {\n throw new Error(\n '@rushstack/eslint-bulk: eslint is specified as a dev dependency in package.json, ' +\n 'but eslint-bulk cannot find it in node_modules.'\n );\n } else if (dependencies?.eslint) {\n throw new Error(\n '@rushstack/eslint-bulk: eslint is specified as a dependency in package.json, ' +\n 'but eslint-bulk cannot find it in node_modules.'\n );\n } else {\n throw new Error('@rushstack/eslint-bulk: eslint is not specified as a dependency in package.json.');\n }\n } catch (e2) {\n throw new Error(\n \"@rushstack/eslint-bulk: This command must be run in the same folder as a project's package.json file.\"\n );\n }\n }\n}\n"]} |
@@ -9,10 +9,10 @@ "use strict"; | ||
| exports.isCorrectCwd = isCorrectCwd; | ||
| const fs_1 = __importDefault(require("fs")); | ||
| const node_fs_1 = __importDefault(require("node:fs")); | ||
| function isCorrectCwd(cwd) { | ||
| return (fs_1.default.existsSync(`${cwd}/eslint.config.js`) || | ||
| fs_1.default.existsSync(`${cwd}/eslint.config.cjs`) || | ||
| fs_1.default.existsSync(`${cwd}/eslint.config.mjs`) || | ||
| fs_1.default.existsSync(`${cwd}/.eslintrc.js`) || | ||
| fs_1.default.existsSync(`${cwd}/.eslintrc.cjs`)); | ||
| return (node_fs_1.default.existsSync(`${cwd}/eslint.config.js`) || | ||
| node_fs_1.default.existsSync(`${cwd}/eslint.config.cjs`) || | ||
| node_fs_1.default.existsSync(`${cwd}/eslint.config.mjs`) || | ||
| node_fs_1.default.existsSync(`${cwd}/.eslintrc.js`) || | ||
| node_fs_1.default.existsSync(`${cwd}/.eslintrc.cjs`)); | ||
| } | ||
| //# sourceMappingURL=is-correct-cwd.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"is-correct-cwd.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/is-correct-cwd.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAI3D,oCAQC;AAVD,4CAAoB;AAEpB,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,CACL,YAAE,CAAC,UAAU,CAAC,GAAG,GAAG,mBAAmB,CAAC;QACxC,YAAE,CAAC,UAAU,CAAC,GAAG,GAAG,oBAAoB,CAAC;QACzC,YAAE,CAAC,UAAU,CAAC,GAAG,GAAG,oBAAoB,CAAC;QACzC,YAAE,CAAC,UAAU,CAAC,GAAG,GAAG,eAAe,CAAC;QACpC,YAAE,CAAC,UAAU,CAAC,GAAG,GAAG,gBAAgB,CAAC,CACtC,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'fs';\n\nexport function isCorrectCwd(cwd: string): boolean {\n return (\n fs.existsSync(`${cwd}/eslint.config.js`) ||\n fs.existsSync(`${cwd}/eslint.config.cjs`) ||\n fs.existsSync(`${cwd}/eslint.config.mjs`) ||\n fs.existsSync(`${cwd}/.eslintrc.js`) ||\n fs.existsSync(`${cwd}/.eslintrc.cjs`)\n );\n}\n"]} | ||
| {"version":3,"file":"is-correct-cwd.js","sourceRoot":"","sources":["../../../../src/eslint-bulk-suppressions/cli/utils/is-correct-cwd.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAI3D,oCAQC;AAVD,sDAAyB;AAEzB,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,CACL,iBAAE,CAAC,UAAU,CAAC,GAAG,GAAG,mBAAmB,CAAC;QACxC,iBAAE,CAAC,UAAU,CAAC,GAAG,GAAG,oBAAoB,CAAC;QACzC,iBAAE,CAAC,UAAU,CAAC,GAAG,GAAG,oBAAoB,CAAC;QACzC,iBAAE,CAAC,UAAU,CAAC,GAAG,GAAG,eAAe,CAAC;QACpC,iBAAE,CAAC,UAAU,CAAC,GAAG,GAAG,gBAAgB,CAAC,CACtC,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nexport function isCorrectCwd(cwd: string): boolean {\n return (\n fs.existsSync(`${cwd}/eslint.config.js`) ||\n fs.existsSync(`${cwd}/eslint.config.cjs`) ||\n fs.existsSync(`${cwd}/eslint.config.mjs`) ||\n fs.existsSync(`${cwd}/.eslintrc.js`) ||\n fs.existsSync(`${cwd}/.eslintrc.cjs`)\n );\n}\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"generate-patched-file.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/generate-patched-file.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,wBAAgB,yCAAyC,CACvD,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,oBAAoB,EAAE,MAAM,GAC3B,IAAI,CAkTN"} | ||
| {"version":3,"file":"generate-patched-file.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/generate-patched-file.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,wBAAgB,yCAAyC,CACvD,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,oBAAoB,EAAE,MAAM,GAC3B,IAAI,CAiTN"} |
@@ -9,3 +9,3 @@ "use strict"; | ||
| exports.generatePatchedLinterJsFileIfDoesNotExist = generatePatchedLinterJsFileIfDoesNotExist; | ||
| const fs_1 = __importDefault(require("fs")); | ||
| const node_fs_1 = __importDefault(require("node:fs")); | ||
| const constants_1 = require("./constants"); | ||
@@ -19,7 +19,7 @@ /** | ||
| const generateEnvVarValue = process.env[constants_1.ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME]; | ||
| if (generateEnvVarValue !== 'true' && generateEnvVarValue !== '1' && fs_1.default.existsSync(outputFilePath)) { | ||
| if (generateEnvVarValue !== 'true' && generateEnvVarValue !== '1' && node_fs_1.default.existsSync(outputFilePath)) { | ||
| return; | ||
| } | ||
| const majorVersion = parseInt(eslintPackageVersion, 10); | ||
| const inputFile = fs_1.default.readFileSync(inputFilePath).toString(); | ||
| const inputFile = node_fs_1.default.readFileSync(inputFilePath).toString(); | ||
| let inputIndex = 0; | ||
@@ -276,3 +276,2 @@ /** | ||
| if (privateMethodNames.length) { | ||
| // eslint-disable-next-line @rushstack/security/no-unsafe-regexp | ||
| const privateMethodCallRegex = new RegExp(`\.(${privateMethodNames.join('|')})\\(`, 'g'); | ||
@@ -284,4 +283,4 @@ outputFile = outputFile.replace(privateMethodCallRegex, (match, privateMethodName) => { | ||
| } | ||
| fs_1.default.writeFileSync(outputFilePath, outputFile); | ||
| node_fs_1.default.writeFileSync(outputFilePath, outputFile); | ||
| } | ||
| //# sourceMappingURL=generate-patched-file.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"generate-patched-file.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/generate-patched-file.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'fs';\nimport {\n ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME,\n ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME\n} from './constants';\n\n/**\n * Dynamically generate file to properly patch many versions of ESLint\n * @param inputFilePath - Must be an iteration of https://github.com/eslint/eslint/blob/main/lib/linter/linter.js\n * @param outputFilePath - Some small changes to linter.js\n */\nexport function generatePatchedLinterJsFileIfDoesNotExist(\n inputFilePath: string,\n outputFilePath: string,\n eslintPackageVersion: string\n): void {\n const generateEnvVarValue: string | undefined =\n process.env[ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME];\n if (generateEnvVarValue !== 'true' && generateEnvVarValue !== '1' && fs.existsSync(outputFilePath)) {\n return;\n }\n\n const majorVersion: number = parseInt(eslintPackageVersion, 10);\n\n const inputFile: string = fs.readFileSync(inputFilePath).toString();\n\n let inputIndex: number = 0;\n\n /**\n * Extract from the stream until marker is reached. When matching marker,\n * ignore whitespace in the stream and in the marker. Return the extracted text.\n */\n function scanUntilMarker(marker: string): string {\n const trimmedMarker: string = marker.replace(/\\s/g, '');\n\n let output: string = '';\n let trimmed: string = '';\n\n while (inputIndex < inputFile.length) {\n const char: string = inputFile[inputIndex++];\n output += char;\n if (!/^\\s$/.test(char)) {\n trimmed += char;\n }\n if (trimmed.endsWith(trimmedMarker)) {\n return output;\n }\n }\n\n throw new Error('Unexpected end of input while looking for ' + JSON.stringify(marker));\n }\n\n function scanUntilNewline(): string {\n let output: string = '';\n\n while (inputIndex < inputFile.length) {\n const char: string = inputFile[inputIndex++];\n output += char;\n if (char === '\\n') {\n return output;\n }\n }\n\n throw new Error('Unexpected end of input while looking for new line');\n }\n\n function scanUntilEnd(): string {\n const output: string = inputFile.substring(inputIndex);\n inputIndex = inputFile.length;\n return output;\n }\n\n const markerForStartOfClassMethodSpaces: string = '\\n */\\n ';\n const markerForStartOfClassMethodTabs: string = '\\n\\t */\\n\\t';\n function indexOfStartOfClassMethod(input: string, position?: number): { index: number; marker?: string } {\n let startOfClassMethodIndex: number = input.indexOf(markerForStartOfClassMethodSpaces, position);\n if (startOfClassMethodIndex === -1) {\n startOfClassMethodIndex = input.indexOf(markerForStartOfClassMethodTabs, position);\n if (startOfClassMethodIndex === -1) {\n return { index: startOfClassMethodIndex };\n }\n return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodTabs };\n }\n return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodSpaces };\n }\n\n /**\n * Returns index of next public method\n * @param fromIndex - index of inputFile to search if public method still exists\n * @returns -1 if public method does not exist or index of next public method\n */\n function getIndexOfNextMethod(fromIndex: number): { index: number; isPublic?: boolean } {\n const rest: string = inputFile.substring(fromIndex);\n\n const endOfClassIndex: number = rest.indexOf('\\n}');\n\n const { index: startOfClassMethodIndex, marker: startOfClassMethodMarker } =\n indexOfStartOfClassMethod(rest);\n\n if (\n startOfClassMethodIndex === -1 ||\n !startOfClassMethodMarker ||\n startOfClassMethodIndex > endOfClassIndex\n ) {\n return { index: -1 };\n }\n\n const afterMarkerIndex: number = startOfClassMethodIndex + startOfClassMethodMarker.length;\n\n const isPublicMethod: boolean =\n rest[afterMarkerIndex] !== '_' &&\n rest[afterMarkerIndex] !== '#' &&\n !rest.substring(afterMarkerIndex, rest.indexOf('\\n', afterMarkerIndex)).includes('static') &&\n !rest.substring(afterMarkerIndex, rest.indexOf('\\n', afterMarkerIndex)).includes('constructor');\n\n return { index: fromIndex + afterMarkerIndex, isPublic: isPublicMethod };\n }\n\n function scanUntilIndex(indexToScanTo: number): string {\n const output: string = inputFile.substring(inputIndex, indexToScanTo);\n inputIndex = indexToScanTo;\n return output;\n }\n\n let outputFile: string = '';\n\n // Match this:\n // //------------------------------------------------------------------------------\n // // Requirements\n // //------------------------------------------------------------------------------\n outputFile += scanUntilMarker('// Requirements');\n outputFile += scanUntilMarker('//--');\n outputFile += scanUntilNewline();\n\n outputFile += `\n// --- BEGIN MONKEY PATCH ---\nconst bulkSuppressionsPatch = require(process.env.${ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME});\nconst requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJS;\n`;\n\n // Match this:\n // //------------------------------------------------------------------------------\n // // Typedefs\n // //------------------------------------------------------------------------------\n const requireSection: string = scanUntilMarker('// Typedefs');\n\n // Match something like this:\n //\n // const path = require('path'),\n // eslintScope = require('eslint-scope'),\n // evk = require('eslint-visitor-keys'),\n //\n // Convert to something like this:\n //\n // const path = require('path'),\n // eslintScope = requireFromPathToLinterJS('eslint-scope'),\n // evk = requireFromPathToLinterJS('eslint-visitor-keys'),\n //\n outputFile += requireSection.replace(/require\\s*\\((?:'([^']+)'|\"([^\"]+)\")\\)/g, (match, p1, p2) => {\n const importPath: string = p1 ?? p2 ?? '';\n\n if (importPath !== 'path') {\n if (p1) {\n return `requireFromPathToLinterJS('${p1}')`;\n }\n if (p2) {\n return `requireFromPathToLinterJS(\"${p2}\")`;\n }\n }\n\n // Keep as-is\n return match;\n });\n outputFile += `--- END MONKEY PATCH ---\n`;\n\n if (majorVersion >= 9) {\n outputFile += scanUntilMarker('const emitter = createEmitter();');\n outputFile += `\n // --- BEGIN MONKEY PATCH ---\n let currentNode = undefined;\n // --- END MONKEY PATCH ---`;\n }\n\n // Match this:\n // ```\n // if (reportTranslator === null) {\n // reportTranslator = createReportTranslator({\n // ruleId,\n // severity,\n // sourceCode,\n // messageIds,\n // disableFixes\n // });\n // }\n // const problem = reportTranslator(...args);\n //\n // if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n // throw new Error(\"Fixable rules must set the `meta.fixable` property to \\\"code\\\" or \\\"whitespace\\\".\");\n // }\n // ```\n //\n // Convert to something like this:\n // ```\n // if (reportTranslator === null) {\n // reportTranslator = createReportTranslator({\n // ruleId,\n // severity,\n // sourceCode,\n // messageIds,\n // disableFixes\n // });\n // }\n // const problem = reportTranslator(...args);\n // // --- BEGIN MONKEY PATCH ---\n // if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;\n // // --- END MONKEY PATCH ---\n //\n // if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n // throw new Error(\"Fixable rules must set the `meta.fixable` property to \\\"code\\\" or \\\"whitespace\\\".\");\n // }\n // ```\n outputFile += scanUntilMarker('const problem = reportTranslator(...args);');\n outputFile += `\n // --- BEGIN MONKEY PATCH ---\n if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;\n // --- END MONKEY PATCH ---`;\n\n //\n // Match this:\n // ```\n // Object.keys(ruleListeners).forEach(selector => {\n // ...\n // });\n // ```\n //\n // Convert to something like this:\n // ```\n // Object.keys(ruleListeners).forEach(selector => {\n // // --- BEGIN MONKEY PATCH ---\n // emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });\n // // --- END MONKEY PATCH ---\n // ...\n // });\n // ```\n if (majorVersion >= 9) {\n outputFile += scanUntilMarker('Object.keys(ruleListeners).forEach(selector => {');\n outputFile += `\n // --- BEGIN MONKEY PATCH ---\n emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });\n // --- END MONKEY PATCH ---`;\n }\n\n outputFile += scanUntilMarker('class Linter {');\n outputFile += scanUntilNewline();\n outputFile += `\n // --- BEGIN MONKEY PATCH ---\n /**\n * We intercept ESLint execution at the .eslintrc.js file, but unfortunately the Linter class is\n * initialized before the .eslintrc.js file is executed. This means the internalSlotsMap that all\n * the patched methods refer to is not initialized. This method checks if the internalSlotsMap is\n * initialized, and if not, initializes it.\n */\n _conditionallyReinitialize({ cwd, configType } = {}) {\n if (internalSlotsMap.get(this) === undefined) {\n internalSlotsMap.set(this, {\n cwd: normalizeCwd(cwd),\n lastConfigArray: null,\n lastSourceCode: null,\n lastSuppressedMessages: [],\n configType, // TODO: Remove after flat config conversion\n parserMap: new Map([['espree', espree]]),\n ruleMap: new Rules()\n });\n\n this.version = pkg.version;\n }\n }\n // --- END MONKEY PATCH ---\n`;\n\n const privateMethodNames: string[] = [];\n let { index: indexOfNextMethod, isPublic } = getIndexOfNextMethod(inputIndex);\n\n while (indexOfNextMethod !== -1) {\n outputFile += scanUntilIndex(indexOfNextMethod);\n if (isPublic) {\n // Inject the monkey patch at the start of the public method\n outputFile += scanUntilNewline();\n outputFile += ` // --- BEGIN MONKEY PATCH ---\n this._conditionallyReinitialize();\n // --- END MONKEY PATCH ---\n`;\n } else if (inputFile[inputIndex] === '#') {\n // Replace the '#' private method with a '_' private method, so that our monkey patch\n // can still call it. Otherwise, we get the following error during execution:\n // TypeError: Receiver must be an instance of class Linter\n const privateMethodName: string = scanUntilMarker('(');\n // Remove the '(' at the end and stash it, since we need to escape it for the regex later\n privateMethodNames.push(privateMethodName.slice(0, -1));\n outputFile += `_${privateMethodName.slice(1)}`;\n }\n\n const indexResult: { index: number; isPublic?: boolean } = getIndexOfNextMethod(inputIndex);\n indexOfNextMethod = indexResult.index;\n isPublic = indexResult.isPublic;\n }\n\n outputFile += scanUntilEnd();\n\n // Do a second pass to find and replace all calls to private methods with the patched versions.\n if (privateMethodNames.length) {\n // eslint-disable-next-line @rushstack/security/no-unsafe-regexp\n const privateMethodCallRegex: RegExp = new RegExp(`\\.(${privateMethodNames.join('|')})\\\\(`, 'g');\n outputFile = outputFile.replace(privateMethodCallRegex, (match, privateMethodName) => {\n // Replace the leading '#' with a leading '_'\n return `._${privateMethodName.slice(1)}(`;\n });\n }\n\n fs.writeFileSync(outputFilePath, outputFile);\n}\n"]} | ||
| {"version":3,"file":"generate-patched-file.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/generate-patched-file.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\n\nimport {\n ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME,\n ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME\n} from './constants';\n\n/**\n * Dynamically generate file to properly patch many versions of ESLint\n * @param inputFilePath - Must be an iteration of https://github.com/eslint/eslint/blob/main/lib/linter/linter.js\n * @param outputFilePath - Some small changes to linter.js\n */\nexport function generatePatchedLinterJsFileIfDoesNotExist(\n inputFilePath: string,\n outputFilePath: string,\n eslintPackageVersion: string\n): void {\n const generateEnvVarValue: string | undefined =\n process.env[ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME];\n if (generateEnvVarValue !== 'true' && generateEnvVarValue !== '1' && fs.existsSync(outputFilePath)) {\n return;\n }\n\n const majorVersion: number = parseInt(eslintPackageVersion, 10);\n\n const inputFile: string = fs.readFileSync(inputFilePath).toString();\n\n let inputIndex: number = 0;\n\n /**\n * Extract from the stream until marker is reached. When matching marker,\n * ignore whitespace in the stream and in the marker. Return the extracted text.\n */\n function scanUntilMarker(marker: string): string {\n const trimmedMarker: string = marker.replace(/\\s/g, '');\n\n let output: string = '';\n let trimmed: string = '';\n\n while (inputIndex < inputFile.length) {\n const char: string = inputFile[inputIndex++];\n output += char;\n if (!/^\\s$/.test(char)) {\n trimmed += char;\n }\n if (trimmed.endsWith(trimmedMarker)) {\n return output;\n }\n }\n\n throw new Error('Unexpected end of input while looking for ' + JSON.stringify(marker));\n }\n\n function scanUntilNewline(): string {\n let output: string = '';\n\n while (inputIndex < inputFile.length) {\n const char: string = inputFile[inputIndex++];\n output += char;\n if (char === '\\n') {\n return output;\n }\n }\n\n throw new Error('Unexpected end of input while looking for new line');\n }\n\n function scanUntilEnd(): string {\n const output: string = inputFile.substring(inputIndex);\n inputIndex = inputFile.length;\n return output;\n }\n\n const markerForStartOfClassMethodSpaces: string = '\\n */\\n ';\n const markerForStartOfClassMethodTabs: string = '\\n\\t */\\n\\t';\n function indexOfStartOfClassMethod(input: string, position?: number): { index: number; marker?: string } {\n let startOfClassMethodIndex: number = input.indexOf(markerForStartOfClassMethodSpaces, position);\n if (startOfClassMethodIndex === -1) {\n startOfClassMethodIndex = input.indexOf(markerForStartOfClassMethodTabs, position);\n if (startOfClassMethodIndex === -1) {\n return { index: startOfClassMethodIndex };\n }\n return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodTabs };\n }\n return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodSpaces };\n }\n\n /**\n * Returns index of next public method\n * @param fromIndex - index of inputFile to search if public method still exists\n * @returns -1 if public method does not exist or index of next public method\n */\n function getIndexOfNextMethod(fromIndex: number): { index: number; isPublic?: boolean } {\n const rest: string = inputFile.substring(fromIndex);\n\n const endOfClassIndex: number = rest.indexOf('\\n}');\n\n const { index: startOfClassMethodIndex, marker: startOfClassMethodMarker } =\n indexOfStartOfClassMethod(rest);\n\n if (\n startOfClassMethodIndex === -1 ||\n !startOfClassMethodMarker ||\n startOfClassMethodIndex > endOfClassIndex\n ) {\n return { index: -1 };\n }\n\n const afterMarkerIndex: number = startOfClassMethodIndex + startOfClassMethodMarker.length;\n\n const isPublicMethod: boolean =\n rest[afterMarkerIndex] !== '_' &&\n rest[afterMarkerIndex] !== '#' &&\n !rest.substring(afterMarkerIndex, rest.indexOf('\\n', afterMarkerIndex)).includes('static') &&\n !rest.substring(afterMarkerIndex, rest.indexOf('\\n', afterMarkerIndex)).includes('constructor');\n\n return { index: fromIndex + afterMarkerIndex, isPublic: isPublicMethod };\n }\n\n function scanUntilIndex(indexToScanTo: number): string {\n const output: string = inputFile.substring(inputIndex, indexToScanTo);\n inputIndex = indexToScanTo;\n return output;\n }\n\n let outputFile: string = '';\n\n // Match this:\n // //------------------------------------------------------------------------------\n // // Requirements\n // //------------------------------------------------------------------------------\n outputFile += scanUntilMarker('// Requirements');\n outputFile += scanUntilMarker('//--');\n outputFile += scanUntilNewline();\n\n outputFile += `\n// --- BEGIN MONKEY PATCH ---\nconst bulkSuppressionsPatch = require(process.env.${ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME});\nconst requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJS;\n`;\n\n // Match this:\n // //------------------------------------------------------------------------------\n // // Typedefs\n // //------------------------------------------------------------------------------\n const requireSection: string = scanUntilMarker('// Typedefs');\n\n // Match something like this:\n //\n // const path = require('path'),\n // eslintScope = require('eslint-scope'),\n // evk = require('eslint-visitor-keys'),\n //\n // Convert to something like this:\n //\n // const path = require('path'),\n // eslintScope = requireFromPathToLinterJS('eslint-scope'),\n // evk = requireFromPathToLinterJS('eslint-visitor-keys'),\n //\n outputFile += requireSection.replace(/require\\s*\\((?:'([^']+)'|\"([^\"]+)\")\\)/g, (match, p1, p2) => {\n const importPath: string = p1 ?? p2 ?? '';\n\n if (importPath !== 'path') {\n if (p1) {\n return `requireFromPathToLinterJS('${p1}')`;\n }\n if (p2) {\n return `requireFromPathToLinterJS(\"${p2}\")`;\n }\n }\n\n // Keep as-is\n return match;\n });\n outputFile += `--- END MONKEY PATCH ---\n`;\n\n if (majorVersion >= 9) {\n outputFile += scanUntilMarker('const emitter = createEmitter();');\n outputFile += `\n // --- BEGIN MONKEY PATCH ---\n let currentNode = undefined;\n // --- END MONKEY PATCH ---`;\n }\n\n // Match this:\n // ```\n // if (reportTranslator === null) {\n // reportTranslator = createReportTranslator({\n // ruleId,\n // severity,\n // sourceCode,\n // messageIds,\n // disableFixes\n // });\n // }\n // const problem = reportTranslator(...args);\n //\n // if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n // throw new Error(\"Fixable rules must set the `meta.fixable` property to \\\"code\\\" or \\\"whitespace\\\".\");\n // }\n // ```\n //\n // Convert to something like this:\n // ```\n // if (reportTranslator === null) {\n // reportTranslator = createReportTranslator({\n // ruleId,\n // severity,\n // sourceCode,\n // messageIds,\n // disableFixes\n // });\n // }\n // const problem = reportTranslator(...args);\n // // --- BEGIN MONKEY PATCH ---\n // if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;\n // // --- END MONKEY PATCH ---\n //\n // if (problem.fix && !(rule.meta && rule.meta.fixable)) {\n // throw new Error(\"Fixable rules must set the `meta.fixable` property to \\\"code\\\" or \\\"whitespace\\\".\");\n // }\n // ```\n outputFile += scanUntilMarker('const problem = reportTranslator(...args);');\n outputFile += `\n // --- BEGIN MONKEY PATCH ---\n if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return;\n // --- END MONKEY PATCH ---`;\n\n //\n // Match this:\n // ```\n // Object.keys(ruleListeners).forEach(selector => {\n // ...\n // });\n // ```\n //\n // Convert to something like this:\n // ```\n // Object.keys(ruleListeners).forEach(selector => {\n // // --- BEGIN MONKEY PATCH ---\n // emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });\n // // --- END MONKEY PATCH ---\n // ...\n // });\n // ```\n if (majorVersion >= 9) {\n outputFile += scanUntilMarker('Object.keys(ruleListeners).forEach(selector => {');\n outputFile += `\n // --- BEGIN MONKEY PATCH ---\n emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; });\n // --- END MONKEY PATCH ---`;\n }\n\n outputFile += scanUntilMarker('class Linter {');\n outputFile += scanUntilNewline();\n outputFile += `\n // --- BEGIN MONKEY PATCH ---\n /**\n * We intercept ESLint execution at the .eslintrc.js file, but unfortunately the Linter class is\n * initialized before the .eslintrc.js file is executed. This means the internalSlotsMap that all\n * the patched methods refer to is not initialized. This method checks if the internalSlotsMap is\n * initialized, and if not, initializes it.\n */\n _conditionallyReinitialize({ cwd, configType } = {}) {\n if (internalSlotsMap.get(this) === undefined) {\n internalSlotsMap.set(this, {\n cwd: normalizeCwd(cwd),\n lastConfigArray: null,\n lastSourceCode: null,\n lastSuppressedMessages: [],\n configType, // TODO: Remove after flat config conversion\n parserMap: new Map([['espree', espree]]),\n ruleMap: new Rules()\n });\n\n this.version = pkg.version;\n }\n }\n // --- END MONKEY PATCH ---\n`;\n\n const privateMethodNames: string[] = [];\n let { index: indexOfNextMethod, isPublic } = getIndexOfNextMethod(inputIndex);\n\n while (indexOfNextMethod !== -1) {\n outputFile += scanUntilIndex(indexOfNextMethod);\n if (isPublic) {\n // Inject the monkey patch at the start of the public method\n outputFile += scanUntilNewline();\n outputFile += ` // --- BEGIN MONKEY PATCH ---\n this._conditionallyReinitialize();\n // --- END MONKEY PATCH ---\n`;\n } else if (inputFile[inputIndex] === '#') {\n // Replace the '#' private method with a '_' private method, so that our monkey patch\n // can still call it. Otherwise, we get the following error during execution:\n // TypeError: Receiver must be an instance of class Linter\n const privateMethodName: string = scanUntilMarker('(');\n // Remove the '(' at the end and stash it, since we need to escape it for the regex later\n privateMethodNames.push(privateMethodName.slice(0, -1));\n outputFile += `_${privateMethodName.slice(1)}`;\n }\n\n const indexResult: { index: number; isPublic?: boolean } = getIndexOfNextMethod(inputIndex);\n indexOfNextMethod = indexResult.index;\n isPublic = indexResult.isPublic;\n }\n\n outputFile += scanUntilEnd();\n\n // Do a second pass to find and replace all calls to private methods with the patched versions.\n if (privateMethodNames.length) {\n const privateMethodCallRegex: RegExp = new RegExp(`\\.(${privateMethodNames.join('|')})\\\\(`, 'g');\n outputFile = outputFile.replace(privateMethodCallRegex, (match, privateMethodName) => {\n // Replace the leading '#' with a leading '_'\n return `._${privateMethodName.slice(1)}(`;\n });\n }\n\n fs.writeFileSync(outputFilePath, outputFile);\n}\n"]} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/path-utils.ts"],"names":[],"mappings":"AAgBA,wBAAgB,6BAA6B,IAAI,IAAI,CAqBpD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAKnD"} | ||
| {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/path-utils.ts"],"names":[],"mappings":"AAiBA,wBAAgB,6BAA6B,IAAI,IAAI,CAqBpD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAM1C;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAKnD"} |
@@ -11,4 +11,4 @@ "use strict"; | ||
| exports.ensurePathToGeneratedPatch = ensurePathToGeneratedPatch; | ||
| const fs_1 = __importDefault(require("fs")); | ||
| const os_1 = __importDefault(require("os")); | ||
| const node_fs_1 = __importDefault(require("node:fs")); | ||
| const node_os_1 = __importDefault(require("node:os")); | ||
| const _patch_base_1 = require("../_patch-base"); | ||
@@ -44,4 +44,4 @@ const constants_1 = require("./constants"); | ||
| function ensurePathToGeneratedPatch() { | ||
| const patchesFolderPath = `${os_1.default.tmpdir()}/rushstack-eslint-bulk-${CURRENT_PACKAGE_VERSION}/patches`; | ||
| fs_1.default.mkdirSync(patchesFolderPath, { recursive: true }); | ||
| const patchesFolderPath = `${node_os_1.default.tmpdir()}/rushstack-eslint-bulk-${CURRENT_PACKAGE_VERSION}/patches`; | ||
| node_fs_1.default.mkdirSync(patchesFolderPath, { recursive: true }); | ||
| const pathToGeneratedPatch = `${patchesFolderPath}/linter-patch-v${_patch_base_1.eslintPackageVersion}.js`; | ||
@@ -48,0 +48,0 @@ return pathToGeneratedPatch; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/path-utils.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAe3D,sEAqBC;AAED,8CAMC;AAED,gEAKC;AAjDD,4CAAoB;AACpB,4CAAoB;AACpB,gDAAoE;AACpE,2CAA8D;AAC9D,sEAAoD;AAOpD,MAAM,uBAAuB,GAAW,sBAAkB,CAAC,OAAO,CAAC;AAEnE,SAAgB,6BAA6B;IAC3C,MAAM,2BAA2B,GAAuB,OAAO,CAAC,GAAG,CAAC,2CAA+B,CAAC,CAAC;IACrG,IAAI,2BAA2B,KAAK,MAAM,IAAI,2BAA2B,KAAK,GAAG,EAAE,CAAC;QAClF,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAW,6BAA6B,CAAC;IAC7D,MAAM,YAAY,GAAW,2BAA2B,CAAC;IAEzD,MAAM,aAAa,GAAmB;QACpC;;WAEG;QACH,aAAa,EAAE,OAAO;QACtB;;WAEG;QACH,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC;KACzD,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,CAAC,0BAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,GAAG,0BAAY,uBAAuB,CAAC;AAChD,CAAC;AAED,SAAgB,0BAA0B;IACxC,MAAM,iBAAiB,GAAW,GAAG,YAAE,CAAC,MAAM,EAAE,0BAA0B,uBAAuB,UAAU,CAAC;IAC5G,YAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,oBAAoB,GAAW,GAAG,iBAAiB,kBAAkB,kCAAoB,KAAK,CAAC;IACrG,OAAO,oBAAoB,CAAC;AAC9B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'fs';\nimport os from 'os';\nimport { eslintFolder, eslintPackageVersion } from '../_patch-base';\nimport { ESLINT_BULK_DETECT_ENV_VAR_NAME } from './constants';\nimport currentPackageJson from '../../package.json';\n\ninterface IConfiguration {\n minCliVersion: string;\n cliEntryPoint: string;\n}\n\nconst CURRENT_PACKAGE_VERSION: string = currentPackageJson.version;\n\nexport function findAndConsoleLogPatchPathCli(): void {\n const eslintBulkDetectEnvVarValue: string | undefined = process.env[ESLINT_BULK_DETECT_ENV_VAR_NAME];\n if (eslintBulkDetectEnvVarValue !== 'true' && eslintBulkDetectEnvVarValue !== '1') {\n return;\n }\n\n const startDelimiter: string = 'RUSHSTACK_ESLINT_BULK_START';\n const endDelimiter: string = 'RUSHSTACK_ESLINT_BULK_END';\n\n const configuration: IConfiguration = {\n /**\n * `@rushstack/eslint-bulk` should report an error if its package.json is older than this number\n */\n minCliVersion: '0.0.0',\n /**\n * `@rushstack/eslint-bulk` will invoke this entry point\n */\n cliEntryPoint: require.resolve('../exports/eslint-bulk')\n };\n\n console.log(startDelimiter + JSON.stringify(configuration) + endDelimiter);\n}\n\nexport function getPathToLinterJS(): string {\n if (!eslintFolder) {\n throw new Error('Cannot find ESLint installation to patch.');\n }\n\n return `${eslintFolder}/lib/linter/linter.js`;\n}\n\nexport function ensurePathToGeneratedPatch(): string {\n const patchesFolderPath: string = `${os.tmpdir()}/rushstack-eslint-bulk-${CURRENT_PACKAGE_VERSION}/patches`;\n fs.mkdirSync(patchesFolderPath, { recursive: true });\n const pathToGeneratedPatch: string = `${patchesFolderPath}/linter-patch-v${eslintPackageVersion}.js`;\n return pathToGeneratedPatch;\n}\n"]} | ||
| {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/eslint-bulk-suppressions/path-utils.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;AAgB3D,sEAqBC;AAED,8CAMC;AAED,gEAKC;AAlDD,sDAAyB;AACzB,sDAAyB;AAEzB,gDAAoE;AACpE,2CAA8D;AAC9D,sEAAoD;AAOpD,MAAM,uBAAuB,GAAW,sBAAkB,CAAC,OAAO,CAAC;AAEnE,SAAgB,6BAA6B;IAC3C,MAAM,2BAA2B,GAAuB,OAAO,CAAC,GAAG,CAAC,2CAA+B,CAAC,CAAC;IACrG,IAAI,2BAA2B,KAAK,MAAM,IAAI,2BAA2B,KAAK,GAAG,EAAE,CAAC;QAClF,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAW,6BAA6B,CAAC;IAC7D,MAAM,YAAY,GAAW,2BAA2B,CAAC;IAEzD,MAAM,aAAa,GAAmB;QACpC;;WAEG;QACH,aAAa,EAAE,OAAO;QACtB;;WAEG;QACH,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC;KACzD,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,CAAC,0BAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,GAAG,0BAAY,uBAAuB,CAAC;AAChD,CAAC;AAED,SAAgB,0BAA0B;IACxC,MAAM,iBAAiB,GAAW,GAAG,iBAAE,CAAC,MAAM,EAAE,0BAA0B,uBAAuB,UAAU,CAAC;IAC5G,iBAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,oBAAoB,GAAW,GAAG,iBAAiB,kBAAkB,kCAAoB,KAAK,CAAC;IACrG,OAAO,oBAAoB,CAAC;AAC9B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport fs from 'node:fs';\nimport os from 'node:os';\n\nimport { eslintFolder, eslintPackageVersion } from '../_patch-base';\nimport { ESLINT_BULK_DETECT_ENV_VAR_NAME } from './constants';\nimport currentPackageJson from '../../package.json';\n\ninterface IConfiguration {\n minCliVersion: string;\n cliEntryPoint: string;\n}\n\nconst CURRENT_PACKAGE_VERSION: string = currentPackageJson.version;\n\nexport function findAndConsoleLogPatchPathCli(): void {\n const eslintBulkDetectEnvVarValue: string | undefined = process.env[ESLINT_BULK_DETECT_ENV_VAR_NAME];\n if (eslintBulkDetectEnvVarValue !== 'true' && eslintBulkDetectEnvVarValue !== '1') {\n return;\n }\n\n const startDelimiter: string = 'RUSHSTACK_ESLINT_BULK_START';\n const endDelimiter: string = 'RUSHSTACK_ESLINT_BULK_END';\n\n const configuration: IConfiguration = {\n /**\n * `@rushstack/eslint-bulk` should report an error if its package.json is older than this number\n */\n minCliVersion: '0.0.0',\n /**\n * `@rushstack/eslint-bulk` will invoke this entry point\n */\n cliEntryPoint: require.resolve('../exports/eslint-bulk')\n };\n\n console.log(startDelimiter + JSON.stringify(configuration) + endDelimiter);\n}\n\nexport function getPathToLinterJS(): string {\n if (!eslintFolder) {\n throw new Error('Cannot find ESLint installation to patch.');\n }\n\n return `${eslintFolder}/lib/linter/linter.js`;\n}\n\nexport function ensurePathToGeneratedPatch(): string {\n const patchesFolderPath: string = `${os.tmpdir()}/rushstack-eslint-bulk-${CURRENT_PACKAGE_VERSION}/patches`;\n fs.mkdirSync(patchesFolderPath, { recursive: true });\n const pathToGeneratedPatch: string = `${patchesFolderPath}/linter-patch-v${eslintPackageVersion}.js`;\n return pathToGeneratedPatch;\n}\n"]} |
+4
-3
| { | ||
| "name": "@rushstack/eslint-patch", | ||
| "version": "1.12.0", | ||
| "version": "1.13.0", | ||
| "description": "Enhance ESLint with better support for large scale monorepos", | ||
@@ -29,8 +29,9 @@ "main": "lib/usage.js", | ||
| "devDependencies": { | ||
| "@rushstack/heft": "0.73.2", | ||
| "@rushstack/heft": "1.0.0", | ||
| "@types/eslint-8": "npm:@types/eslint@8.56.10", | ||
| "@types/eslint-9": "npm:@types/eslint@9.6.1", | ||
| "@typescript-eslint/types": "~8.31.0", | ||
| "eslint-8": "npm:eslint@~8.57.0", | ||
| "eslint-9": "npm:eslint@~9.25.1", | ||
| "eslint-8": "npm:eslint@~8.57.0", | ||
| "eslint": "~9.25.1", | ||
| "typescript": "~5.8.2", | ||
@@ -37,0 +38,0 @@ "decoupled-local-node-rig": "1.0.0" |
-22
| // This is a workaround for https://github.com/eslint/eslint/issues/3458 | ||
| require('decoupled-local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution'); | ||
| // This is a workaround for https://github.com/microsoft/rushstack/issues/3021 | ||
| require('decoupled-local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); | ||
| module.exports = { | ||
| extends: [ | ||
| 'decoupled-local-node-rig/profiles/default/includes/eslint/profile/node', | ||
| 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', | ||
| 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' | ||
| ], | ||
| parserOptions: { tsconfigRootDir: __dirname }, | ||
| overrides: [ | ||
| { | ||
| files: ['*.ts', '*.tsx'], | ||
| rules: { | ||
| 'no-console': 'off' | ||
| } | ||
| } | ||
| ] | ||
| }; |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Found 2 instances in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
274996
0.23%2525
0.48%32
-5.88%9
12.5%