diff --git a/eslint.config.mjs b/eslint.config.mjs index 07fd48e7fa3e..e6cb3adeb53f 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -162,6 +162,12 @@ export default tseslint.config( ignorePrimitives: true, }, ], + '@typescript-eslint/no-require-imports': [ + 'error', + { + allow: ['/package\\.json$'], + }, + ], // // Internal repo rules diff --git a/packages/ast-spec/tests/fixtures.test.ts b/packages/ast-spec/tests/fixtures.test.ts index d107cc320255..3273b2f65731 100644 --- a/packages/ast-spec/tests/fixtures.test.ts +++ b/packages/ast-spec/tests/fixtures.test.ts @@ -1,5 +1,5 @@ import fs from 'fs'; -import glob = require('glob'); +import * as glob from 'glob'; import makeDir from 'make-dir'; import path from 'path'; @@ -66,6 +66,7 @@ const FIXTURES: readonly Fixture[] = [...VALID_FIXTURES, ...ERROR_FIXTURES].map( absolute, config: ((): ASTFixtureConfig => { try { + // eslint-disable-next-line @typescript-eslint/no-require-imports return require(configPath).default; } catch { return {}; diff --git a/packages/eslint-plugin/docs/rules/no-require-imports.mdx b/packages/eslint-plugin/docs/rules/no-require-imports.mdx index 5af39f233cf5..4512c2693d95 100644 --- a/packages/eslint-plugin/docs/rules/no-require-imports.mdx +++ b/packages/eslint-plugin/docs/rules/no-require-imports.mdx @@ -38,7 +38,7 @@ import * as lib3 from 'lib3'; ### `allow` -A array of strings. These strings will be compiled into regular expressions with the `u` flag and be used to test against the imported path. A common use case is to allow importing `package.json`. This is because `package.json` commonly lives outside of the TS root directory, so statically importing it would lead to root directory conflicts, especially with `resolveJsonModule` enabled. You can also use it to allow importing any JSON if your environment doesn't support JSON modules, or use it for other cases where `import` statements cannot work. +An array of strings. These strings will be compiled into regular expressions with the `u` flag and be used to test against the imported path. A common use case is to allow importing `package.json`. This is because `package.json` commonly lives outside of the TS root directory, so statically importing it would lead to root directory conflicts, especially with `resolveJsonModule` enabled. You can also use it to allow importing any JSON if your environment doesn't support JSON modules, or use it for other cases where `import` statements cannot work. With `{allow: ['/package\\.json$']}`: @@ -59,6 +59,33 @@ console.log(require('../package.json').version); +### `allowAsImport` + +When set to `true`, the `import x = require(...)` declaration won't be reported. +This is useful if you use certain module options that require strict CommonJS interop semantics. + +With `{allowAsImport: true}`: + + + + +```ts option='{ "allowAsImport": true }' +var foo = require('foo'); +const foo = require('foo'); +let foo = require('foo'); +``` + + + + +```ts option='{ "allowAsImport": true }' +import foo = require('foo'); +import foo from 'foo'; +``` + + + + ## When Not To Use It If your project frequently uses older CommonJS `require`s, then this rule might not be applicable to you. diff --git a/packages/eslint-plugin/docs/rules/no-var-requires.mdx b/packages/eslint-plugin/docs/rules/no-var-requires.mdx index e71c2e17c712..c9945304a8a2 100644 --- a/packages/eslint-plugin/docs/rules/no-var-requires.mdx +++ b/packages/eslint-plugin/docs/rules/no-var-requires.mdx @@ -9,6 +9,12 @@ import TabItem from '@theme/TabItem'; > > See **https://typescript-eslint.io/rules/no-var-requires** for documentation. +:::danger Deprecated + +This rule has been deprecated in favour of the [`@typescript-eslint/no-require-imports`](./no-require-imports.mdx) rule. + +::: + In other words, the use of forms such as `var foo = require("foo")` are banned. Instead use ES6 style imports or `import foo = require("foo")` imports. ## Examples diff --git a/packages/eslint-plugin/src/configs/all.ts b/packages/eslint-plugin/src/configs/all.ts index 0ac9c3653d97..581b776db4b3 100644 --- a/packages/eslint-plugin/src/configs/all.ts +++ b/packages/eslint-plugin/src/configs/all.ts @@ -112,7 +112,6 @@ export = { '@typescript-eslint/no-useless-constructor': 'error', '@typescript-eslint/no-useless-empty-export': 'error', '@typescript-eslint/no-useless-template-literals': 'error', - '@typescript-eslint/no-var-requires': 'error', '@typescript-eslint/non-nullable-type-assertion-style': 'error', 'no-throw-literal': 'off', '@typescript-eslint/only-throw-error': 'error', diff --git a/packages/eslint-plugin/src/configs/recommended-type-checked.ts b/packages/eslint-plugin/src/configs/recommended-type-checked.ts index 38b441ae6e2b..49c4bed33b6f 100644 --- a/packages/eslint-plugin/src/configs/recommended-type-checked.ts +++ b/packages/eslint-plugin/src/configs/recommended-type-checked.ts @@ -31,6 +31,7 @@ export = { '@typescript-eslint/no-namespace': 'error', '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', '@typescript-eslint/no-redundant-type-constituents': 'error', + '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/no-this-alias': 'error', '@typescript-eslint/no-unnecessary-type-assertion': 'error', '@typescript-eslint/no-unnecessary-type-constraint': 'error', @@ -47,7 +48,6 @@ export = { 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': 'error', '@typescript-eslint/no-useless-template-literals': 'error', - '@typescript-eslint/no-var-requires': 'error', 'no-throw-literal': 'off', '@typescript-eslint/only-throw-error': 'error', '@typescript-eslint/prefer-as-const': 'error', diff --git a/packages/eslint-plugin/src/configs/recommended.ts b/packages/eslint-plugin/src/configs/recommended.ts index 2861c565f560..6657edaaf5b9 100644 --- a/packages/eslint-plugin/src/configs/recommended.ts +++ b/packages/eslint-plugin/src/configs/recommended.ts @@ -21,6 +21,7 @@ export = { '@typescript-eslint/no-misused-new': 'error', '@typescript-eslint/no-namespace': 'error', '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', + '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/no-this-alias': 'error', '@typescript-eslint/no-unnecessary-type-constraint': 'error', '@typescript-eslint/no-unsafe-declaration-merging': 'error', @@ -28,7 +29,6 @@ export = { '@typescript-eslint/no-unused-expressions': 'error', 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': 'error', - '@typescript-eslint/no-var-requires': 'error', '@typescript-eslint/prefer-as-const': 'error', '@typescript-eslint/prefer-namespace-keyword': 'error', '@typescript-eslint/triple-slash-reference': 'error', diff --git a/packages/eslint-plugin/src/configs/strict-type-checked.ts b/packages/eslint-plugin/src/configs/strict-type-checked.ts index 7058d02e5bd3..541aefe7766a 100644 --- a/packages/eslint-plugin/src/configs/strict-type-checked.ts +++ b/packages/eslint-plugin/src/configs/strict-type-checked.ts @@ -42,6 +42,7 @@ export = { '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', '@typescript-eslint/no-non-null-assertion': 'error', '@typescript-eslint/no-redundant-type-constituents': 'error', + '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/no-this-alias': 'error', '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', '@typescript-eslint/no-unnecessary-condition': 'error', @@ -63,7 +64,6 @@ export = { 'no-useless-constructor': 'off', '@typescript-eslint/no-useless-constructor': 'error', '@typescript-eslint/no-useless-template-literals': 'error', - '@typescript-eslint/no-var-requires': 'error', 'no-throw-literal': 'off', '@typescript-eslint/only-throw-error': 'error', '@typescript-eslint/prefer-as-const': 'error', diff --git a/packages/eslint-plugin/src/configs/strict.ts b/packages/eslint-plugin/src/configs/strict.ts index e5a2ffc1e4b3..2c2063476c30 100644 --- a/packages/eslint-plugin/src/configs/strict.ts +++ b/packages/eslint-plugin/src/configs/strict.ts @@ -29,6 +29,7 @@ export = { '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/no-this-alias': 'error', '@typescript-eslint/no-unnecessary-type-constraint': 'error', '@typescript-eslint/no-unsafe-declaration-merging': 'error', @@ -38,7 +39,6 @@ export = { '@typescript-eslint/no-unused-vars': 'error', 'no-useless-constructor': 'off', '@typescript-eslint/no-useless-constructor': 'error', - '@typescript-eslint/no-var-requires': 'error', '@typescript-eslint/prefer-as-const': 'error', '@typescript-eslint/prefer-literal-enum-member': 'error', '@typescript-eslint/prefer-namespace-keyword': 'error', diff --git a/packages/eslint-plugin/src/rules/no-require-imports.ts b/packages/eslint-plugin/src/rules/no-require-imports.ts index 1956694484f4..64f626076c32 100644 --- a/packages/eslint-plugin/src/rules/no-require-imports.ts +++ b/packages/eslint-plugin/src/rules/no-require-imports.ts @@ -5,7 +5,8 @@ import * as util from '../util'; type Options = [ { - allow: string[]; + allow?: string[]; + allowAsImport?: boolean; }, ]; type MessageIds = 'noRequireImports'; @@ -16,6 +17,7 @@ export default util.createRule({ type: 'problem', docs: { description: 'Disallow invocation of `require()`', + recommended: 'recommended', }, schema: [ { @@ -26,6 +28,10 @@ export default util.createRule({ items: { type: 'string' }, description: 'Patterns of import paths to allow requiring from.', }, + allowAsImport: { + type: 'boolean', + description: 'Allows `require` statements in import declarations.', + }, }, additionalProperties: false, }, @@ -34,13 +40,14 @@ export default util.createRule({ noRequireImports: 'A `require()` style import is forbidden.', }, }, - defaultOptions: [{ allow: [] }], + defaultOptions: [{ allow: [], allowAsImport: false }], create(context, options) { - const allowPatterns = options[0].allow.map( + const allowAsImport = options[0].allowAsImport; + const allowPatterns = options[0].allow?.map( pattern => new RegExp(pattern, 'u'), ); - function isImportPathAllowed(importPath: string): boolean { - return allowPatterns.some(pattern => importPath.match(pattern)); + function isImportPathAllowed(importPath: string): boolean | undefined { + return allowPatterns?.some(pattern => importPath.match(pattern)); } function isStringOrTemplateLiteral(node: TSESTree.Node): boolean { return ( @@ -64,7 +71,6 @@ export default util.createRule({ context.sourceCode.getScope(node), 'require', ); - // ignore non-global require usage as it's something user-land custom instead // of the commonjs standard if (!variable?.identifiers.length) { @@ -81,6 +87,12 @@ export default util.createRule({ return; } } + if ( + allowAsImport && + node.parent.type === AST_NODE_TYPES.TSImportEqualsDeclaration + ) { + return; + } context.report({ node, messageId: 'noRequireImports', diff --git a/packages/eslint-plugin/src/rules/no-var-requires.ts b/packages/eslint-plugin/src/rules/no-var-requires.ts index 9bb9fb7c1921..b7c38620168a 100644 --- a/packages/eslint-plugin/src/rules/no-var-requires.ts +++ b/packages/eslint-plugin/src/rules/no-var-requires.ts @@ -13,10 +13,11 @@ type MessageIds = 'noVarReqs'; export default createRule({ name: 'no-var-requires', meta: { + deprecated: true, + replacedBy: ['@typescript-eslint/no-require-imports'], type: 'problem', docs: { description: 'Disallow `require` statements except in import statements', - recommended: 'recommended', }, messages: { noVarReqs: 'Require statement not part of import statement.', diff --git a/packages/eslint-plugin/tests/docs-eslint-output-snapshots/no-require-imports.shot b/packages/eslint-plugin/tests/docs-eslint-output-snapshots/no-require-imports.shot index 027cb637f45c..54cb8f1ddd2e 100644 --- a/packages/eslint-plugin/tests/docs-eslint-output-snapshots/no-require-imports.shot +++ b/packages/eslint-plugin/tests/docs-eslint-output-snapshots/no-require-imports.shot @@ -37,3 +37,25 @@ Options: { "allow": ["/package.json$"] } console.log(require('../package.json').version); " `; + +exports[`Validating rule docs no-require-imports.mdx code examples ESLint output 5`] = ` +"Incorrect +Options: { "allowAsImport": true } + +var foo = require('foo'); + ~~~~~~~~~~~~~~ A \`require()\` style import is forbidden. +const foo = require('foo'); + ~~~~~~~~~~~~~~ A \`require()\` style import is forbidden. +let foo = require('foo'); + ~~~~~~~~~~~~~~ A \`require()\` style import is forbidden. +" +`; + +exports[`Validating rule docs no-require-imports.mdx code examples ESLint output 6`] = ` +"Correct +Options: { "allowAsImport": true } + +import foo = require('foo'); +import foo from 'foo'; +" +`; diff --git a/packages/eslint-plugin/tests/rules/no-require-imports.test.ts b/packages/eslint-plugin/tests/rules/no-require-imports.test.ts index bdfddbc25ae0..4fc743026e56 100644 --- a/packages/eslint-plugin/tests/rules/no-require-imports.test.ts +++ b/packages/eslint-plugin/tests/rules/no-require-imports.test.ts @@ -52,8 +52,66 @@ require('remark-preset-prettier'); options: [{ allow: ['^some-package$'] }], }, { - code: 'import pkg = require(`some-package`);', - options: [{ allow: ['^some-package$'] }], + code: "import foo = require('foo');", + options: [{ allowAsImport: true }], + }, + { + code: ` +let require = bazz; +trick(require('foo')); + `, + options: [{ allowAsImport: true }], + }, + { + code: ` +let require = bazz; +const foo = require('./foo.json') as Foo; + `, + options: [{ allowAsImport: true }], + }, + { + code: ` +let require = bazz; +const foo: Foo = require('./foo.json').default; + `, + options: [{ allowAsImport: true }], + }, + { + code: ` +let require = bazz; +const foo = require('./foo.json'); + `, + options: [{ allowAsImport: true }], + }, + { + code: ` +let require = bazz; +const configValidator = new Validator(require('./a.json')); +configValidator.addSchema(require('./a.json')); + `, + options: [{ allowAsImport: true }], + }, + { + code: ` +let require = bazz; +require('foo'); + `, + options: [{ allowAsImport: true }], + }, + { + code: ` +let require = bazz; +require?.('foo'); + `, + options: [{ allowAsImport: true }], + }, + { + code: ` +import { createRequire } from 'module'; +const require = createRequire(); +require('remark-preset-prettier'); + `, + options: [{ allowAsImport: true }], }, ], invalid: [ @@ -197,7 +255,7 @@ var lib5 = require?.('lib5'), ], }, { - code: "import pkg = require('./package.json');", + code: 'import pkg = require(`./package.json`);', options: [{ allow: ['^some-package$'] }], errors: [ { @@ -208,13 +266,109 @@ var lib5 = require?.('lib5'), ], }, { - code: 'import pkg = require(`./package.json`);', - options: [{ allow: ['^some-package$'] }], + code: "var foo = require?.('foo');", + options: [{ allowAsImport: true }], errors: [ { + messageId: 'noRequireImports', line: 1, - column: 14, + column: 11, + }, + ], + }, + { + code: "let foo = trick(require?.('foo'));", + options: [{ allowAsImport: true }], + errors: [ + { + messageId: 'noRequireImports', + line: 1, + column: 17, + }, + ], + }, + { + code: "trick(require('foo'));", + options: [{ allowAsImport: true }], + errors: [ + { messageId: 'noRequireImports', + line: 1, + column: 7, + }, + ], + }, + { + code: "const foo = require('./foo.json') as Foo;", + options: [{ allowAsImport: true }], + errors: [ + { + messageId: 'noRequireImports', + line: 1, + column: 13, + }, + ], + }, + { + code: "const foo: Foo = require('./foo.json').default;", + options: [{ allowAsImport: true }], + errors: [ + { + messageId: 'noRequireImports', + line: 1, + column: 18, + }, + ], + }, + { + code: "const foo = require('./foo.json');", + options: [{ allowAsImport: true }], + errors: [ + { + messageId: 'noRequireImports', + line: 1, + column: 18, + }, + ], + }, + { + code: ` +const configValidator = new Validator(require('./a.json')); +configValidator.addSchema(require('./a.json')); + `, + options: [{ allowAsImport: true }], + errors: [ + { + messageId: 'noRequireImports', + line: 2, + column: 39, + }, + { + messageId: 'noRequireImports', + line: 3, + column: 27, + }, + ], + }, + { + code: 'require(foo);', + options: [{ allowAsImport: true }], + errors: [ + { + messageId: 'noRequireImports', + line: 1, + column: 1, + }, + ], + }, + { + code: 'require?.(foo);', + options: [{ allowAsImport: true }], + errors: [ + { + messageId: 'noRequireImports', + line: 1, + column: 1, }, ], }, diff --git a/packages/eslint-plugin/tests/schema-snapshots/no-require-imports.shot b/packages/eslint-plugin/tests/schema-snapshots/no-require-imports.shot index 7561bcbc4b3c..088b2be7c210 100644 --- a/packages/eslint-plugin/tests/schema-snapshots/no-require-imports.shot +++ b/packages/eslint-plugin/tests/schema-snapshots/no-require-imports.shot @@ -14,6 +14,10 @@ exports[`Rule schemas should be convertible to TS types for documentation purpos "type": "string" }, "type": "array" + }, + "allowAsImport": { + "description": "Allows \`require\` statements in import declarations.", + "type": "boolean" } }, "type": "object" @@ -27,6 +31,8 @@ type Options = [ { /** Patterns of import paths to allow requiring from. */ allow?: string[]; + /** Allows \`require\` statements in import declarations. */ + allowAsImport?: boolean; }, ]; " diff --git a/packages/integration-tests/tools/pack-packages.ts b/packages/integration-tests/tools/pack-packages.ts index 5755476cf3cf..0f8ee41dce43 100644 --- a/packages/integration-tests/tools/pack-packages.ts +++ b/packages/integration-tests/tools/pack-packages.ts @@ -35,6 +35,7 @@ for (const pkg of PACKAGES) { continue; } + // eslint-disable-next-line @typescript-eslint/no-require-imports -- this file needs to be sync and CJS for jest const packageJson = require(packagePath) as PackageJSON; if (packageJson.private === true) { continue; diff --git a/packages/parser/tests/lib/services.test.ts b/packages/parser/tests/lib/services.test.ts index 8532ec979ada..e39747196aab 100644 --- a/packages/parser/tests/lib/services.test.ts +++ b/packages/parser/tests/lib/services.test.ts @@ -1,6 +1,6 @@ import { createProgram } from '@typescript-eslint/typescript-estree'; import fs from 'fs'; -import glob = require('glob'); +import * as glob from 'glob'; import path from 'path'; import type { ParserOptions } from '../../src/parser'; diff --git a/packages/rule-tester/src/RuleTester.ts b/packages/rule-tester/src/RuleTester.ts index 2e0d834665a1..6d1e4537d54c 100644 --- a/packages/rule-tester/src/RuleTester.ts +++ b/packages/rule-tester/src/RuleTester.ts @@ -142,6 +142,7 @@ export class RuleTester extends TestFramework { try { // instead of creating a hard dependency, just use a soft require // a bit weird, but if they're using this tooling, it'll be installed + // eslint-disable-next-line @typescript-eslint/no-require-imports const parser = require(TYPESCRIPT_ESLINT_PARSER) as typeof ParserType; parser.clearCaches(); } catch { @@ -565,6 +566,7 @@ export class RuleTester extends TestFramework { this.#linter.defineParser( config.parser, + // eslint-disable-next-line @typescript-eslint/no-require-imports wrapParser(require(config.parser) as Parser.ParserModule), ); diff --git a/packages/rule-tester/src/utils/dependencyConstraints.ts b/packages/rule-tester/src/utils/dependencyConstraints.ts index e651356587a1..47af38167115 100644 --- a/packages/rule-tester/src/utils/dependencyConstraints.ts +++ b/packages/rule-tester/src/utils/dependencyConstraints.ts @@ -21,6 +21,7 @@ function satisfiesDependencyConstraint( : constraintIn; return semver.satisfies( + // eslint-disable-next-line @typescript-eslint/no-require-imports (require(`${packageName}/package.json`) as { version: string }).version, constraint.range, typeof constraint.options === 'object' diff --git a/packages/scope-manager/tests/fixtures.test.ts b/packages/scope-manager/tests/fixtures.test.ts index 753b241b3383..9d05626d6536 100644 --- a/packages/scope-manager/tests/fixtures.test.ts +++ b/packages/scope-manager/tests/fixtures.test.ts @@ -1,5 +1,5 @@ import fs from 'fs'; -import glob = require('glob'); +import * as glob from 'glob'; import makeDir from 'make-dir'; import path from 'path'; diff --git a/packages/typescript-eslint/src/configs/all.ts b/packages/typescript-eslint/src/configs/all.ts index 01d4a56f9ee1..66e90953f6b1 100644 --- a/packages/typescript-eslint/src/configs/all.ts +++ b/packages/typescript-eslint/src/configs/all.ts @@ -121,7 +121,6 @@ export default ( '@typescript-eslint/no-useless-constructor': 'error', '@typescript-eslint/no-useless-empty-export': 'error', '@typescript-eslint/no-useless-template-literals': 'error', - '@typescript-eslint/no-var-requires': 'error', '@typescript-eslint/non-nullable-type-assertion-style': 'error', 'no-throw-literal': 'off', '@typescript-eslint/only-throw-error': 'error', diff --git a/packages/typescript-eslint/src/configs/recommended-type-checked.ts b/packages/typescript-eslint/src/configs/recommended-type-checked.ts index 50487c38d6e4..603c1fcf0a9f 100644 --- a/packages/typescript-eslint/src/configs/recommended-type-checked.ts +++ b/packages/typescript-eslint/src/configs/recommended-type-checked.ts @@ -40,6 +40,7 @@ export default ( '@typescript-eslint/no-namespace': 'error', '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', '@typescript-eslint/no-redundant-type-constituents': 'error', + '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/no-this-alias': 'error', '@typescript-eslint/no-unnecessary-type-assertion': 'error', '@typescript-eslint/no-unnecessary-type-constraint': 'error', @@ -56,7 +57,6 @@ export default ( 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': 'error', '@typescript-eslint/no-useless-template-literals': 'error', - '@typescript-eslint/no-var-requires': 'error', 'no-throw-literal': 'off', '@typescript-eslint/only-throw-error': 'error', '@typescript-eslint/prefer-as-const': 'error', diff --git a/packages/typescript-eslint/src/configs/recommended.ts b/packages/typescript-eslint/src/configs/recommended.ts index e5542c3e2511..0c9d5bb3c91e 100644 --- a/packages/typescript-eslint/src/configs/recommended.ts +++ b/packages/typescript-eslint/src/configs/recommended.ts @@ -30,6 +30,7 @@ export default ( '@typescript-eslint/no-misused-new': 'error', '@typescript-eslint/no-namespace': 'error', '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', + '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/no-this-alias': 'error', '@typescript-eslint/no-unnecessary-type-constraint': 'error', '@typescript-eslint/no-unsafe-declaration-merging': 'error', @@ -37,7 +38,6 @@ export default ( '@typescript-eslint/no-unused-expressions': 'error', 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': 'error', - '@typescript-eslint/no-var-requires': 'error', '@typescript-eslint/prefer-as-const': 'error', '@typescript-eslint/prefer-namespace-keyword': 'error', '@typescript-eslint/triple-slash-reference': 'error', diff --git a/packages/typescript-eslint/src/configs/strict-type-checked.ts b/packages/typescript-eslint/src/configs/strict-type-checked.ts index d5f15ee56f4a..35b67562b5ea 100644 --- a/packages/typescript-eslint/src/configs/strict-type-checked.ts +++ b/packages/typescript-eslint/src/configs/strict-type-checked.ts @@ -51,6 +51,7 @@ export default ( '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', '@typescript-eslint/no-non-null-assertion': 'error', '@typescript-eslint/no-redundant-type-constituents': 'error', + '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/no-this-alias': 'error', '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', '@typescript-eslint/no-unnecessary-condition': 'error', @@ -72,7 +73,6 @@ export default ( 'no-useless-constructor': 'off', '@typescript-eslint/no-useless-constructor': 'error', '@typescript-eslint/no-useless-template-literals': 'error', - '@typescript-eslint/no-var-requires': 'error', 'no-throw-literal': 'off', '@typescript-eslint/only-throw-error': 'error', '@typescript-eslint/prefer-as-const': 'error', diff --git a/packages/typescript-eslint/src/configs/strict.ts b/packages/typescript-eslint/src/configs/strict.ts index f6456995d90e..035a2152ae54 100644 --- a/packages/typescript-eslint/src/configs/strict.ts +++ b/packages/typescript-eslint/src/configs/strict.ts @@ -38,6 +38,7 @@ export default ( '@typescript-eslint/no-non-null-asserted-nullish-coalescing': 'error', '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/no-this-alias': 'error', '@typescript-eslint/no-unnecessary-type-constraint': 'error', '@typescript-eslint/no-unsafe-declaration-merging': 'error', @@ -47,7 +48,6 @@ export default ( '@typescript-eslint/no-unused-vars': 'error', 'no-useless-constructor': 'off', '@typescript-eslint/no-useless-constructor': 'error', - '@typescript-eslint/no-var-requires': 'error', '@typescript-eslint/prefer-as-const': 'error', '@typescript-eslint/prefer-literal-enum-member': 'error', '@typescript-eslint/prefer-namespace-keyword': 'error', diff --git a/packages/typescript-estree/src/create-program/createProjectService.ts b/packages/typescript-estree/src/create-program/createProjectService.ts index 4c5072781462..9f0f44dcec68 100644 --- a/packages/typescript-estree/src/create-program/createProjectService.ts +++ b/packages/typescript-estree/src/create-program/createProjectService.ts @@ -31,6 +31,7 @@ export function createProjectService( // We import this lazily to avoid its cost for users who don't use the service // TODO: Once we drop support for TS<5.3 we can import from "typescript" directly + // eslint-disable-next-line @typescript-eslint/no-require-imports const tsserver = require('typescript/lib/tsserverlibrary') as typeof ts; // TODO: see getWatchProgramsForProjects diff --git a/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts b/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts index dffc7bec3ab0..2be0199cab3d 100644 --- a/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts +++ b/packages/typescript-estree/tests/lib/semanticInfo-singleRun.test.ts @@ -1,4 +1,4 @@ -import glob = require('glob'); +import * as glob from 'glob'; import * as path from 'path'; import { createProgramFromConfigFile as createProgramFromConfigFileOriginal } from '../../src/create-program/useProvidedPrograms'; diff --git a/packages/typescript-estree/tests/lib/semanticInfo.test.ts b/packages/typescript-estree/tests/lib/semanticInfo.test.ts index d81f65fb9887..f6818dc14076 100644 --- a/packages/typescript-estree/tests/lib/semanticInfo.test.ts +++ b/packages/typescript-estree/tests/lib/semanticInfo.test.ts @@ -1,5 +1,5 @@ import * as fs from 'fs'; -import glob = require('glob'); +import * as glob from 'glob'; import * as path from 'path'; import * as ts from 'typescript'; diff --git a/packages/website-eslint/src/mock/eslint-rules.js b/packages/website-eslint/src/mock/eslint-rules.js index e38eed4cefbd..65b54e0bc983 100644 --- a/packages/website-eslint/src/mock/eslint-rules.js +++ b/packages/website-eslint/src/mock/eslint-rules.js @@ -1 +1,2 @@ +// eslint-disable-next-line @typescript-eslint/no-require-imports exports.builtinRules = require('vt:eslint/rules'); diff --git a/packages/website-eslint/src/mock/eslint.js b/packages/website-eslint/src/mock/eslint.js index fac5d44d93e6..b5d428738f9a 100644 --- a/packages/website-eslint/src/mock/eslint.js +++ b/packages/website-eslint/src/mock/eslint.js @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-extraneous-class */ class RuleTester {} class SourceCode {} - +// eslint-disable-next-line @typescript-eslint/no-require-imports exports.Linter = require('vt:eslint/linter').Linter; exports.RuleTester = RuleTester; diff --git a/packages/website/sidebars/sidebar.rules.js b/packages/website/sidebars/sidebar.rules.js index 4e6887df8cd9..0815d479b0b4 100644 --- a/packages/website/sidebars/sidebar.rules.js +++ b/packages/website/sidebars/sidebar.rules.js @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/no-require-imports const plugin = require('@typescript-eslint/eslint-plugin'); const rules = Object.entries(plugin.rules).map(([name, rule]) => { diff --git a/packages/website/src/clientModules.js b/packages/website/src/clientModules.js index b393e94f50f7..8b38aa40ef73 100644 --- a/packages/website/src/clientModules.js +++ b/packages/website/src/clientModules.js @@ -1,5 +1,6 @@ import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; if (ExecutionEnvironment.canUseDOM) { + // eslint-disable-next-line @typescript-eslint/no-require-imports require('konamimojisplosion').initializeKonamimojisplosion(); } diff --git a/packages/website/src/theme/prism-include-languages.js b/packages/website/src/theme/prism-include-languages.js index 660275a1af1b..f356adf2a581 100644 --- a/packages/website/src/theme/prism-include-languages.js +++ b/packages/website/src/theme/prism-include-languages.js @@ -8,9 +8,10 @@ export default function prismIncludeLanguages(PrismObject) { globalThis.Prism = PrismObject; additionalLanguages.forEach(lang => { + // eslint-disable-next-line @typescript-eslint/no-require-imports require(`prismjs/components/prism-${lang}`); }); - + // eslint-disable-next-line @typescript-eslint/no-require-imports require(`../prism/language/jsonc`); delete globalThis.Prism; } diff --git a/packages/website/webpack.plugin.js b/packages/website/webpack.plugin.js index fff4c85008be..ab5dd29767fd 100644 --- a/packages/website/webpack.plugin.js +++ b/packages/website/webpack.plugin.js @@ -1,5 +1,8 @@ +// eslint-disable-next-line @typescript-eslint/no-require-imports const webpack = require('webpack'); +// eslint-disable-next-line @typescript-eslint/no-require-imports const path = require('path'); +// eslint-disable-next-line @typescript-eslint/no-require-imports const CopyPlugin = require('copy-webpack-plugin'); module.exports = function (/*context, options*/) { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy