diff --git a/.changeset/metal-insects-trade.md b/.changeset/metal-insects-trade.md new file mode 100644 index 0000000..0598ccf --- /dev/null +++ b/.changeset/metal-insects-trade.md @@ -0,0 +1,45 @@ +--- +'eslint-import-resolver-typescript': minor +--- + +This version has implemented the `eslint-plugin-import-x`'s v3 resolver interface. This allows you to use import/require to reference `eslint-import-resolver-typescript` directly in your ESLint flat config: + +**Previously** + +```js +// eslint.config.js +module.exports = { + settings: { + 'import-x/resolver': { + typescript: { + alwaysTryTypes: true, + }, + // or + require.resolve('eslint-import-resolver-typescript'): + alwaysTryTypes: true, + } + } + } +} +``` + +**Now** + +```js +// eslint.config.js +const { + createTypeScriptImportResolver, +} = require('eslint-import-resolver-typescript') + +module.exports = { + settings: { + 'import-x/resolver-next': [ + createTypeScriptImportResolver({ + alwaysTryTypes: true, + }), + ], + }, +} +``` + +Note that this only works with `eslint-plugin-import-x@>=4.5.0`. You can't use `createTypeScriptImportResolver` with the older versions of `eslint-plugin-import-x` or any existing versions of `eslint-plugin-import`. diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..07388b7 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "eslint.useFlatConfig": false +} diff --git a/README.md b/README.md index 44019d6..de3808f 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,90 @@ yarn add -D eslint-plugin-import eslint-import-resolver-typescript ## Configuration +### `eslint.config.js` + +If you are using `eslint-plugin-import-x@>=4.5.0`, you can use import/require to reference `eslint-import-resolver-typescript` directly in your ESLint flat config: + +```js +// eslint.config.js +const { + createTypeScriptImportResolver, +} = require('eslint-import-resolver-typescript') + +module.exports = [{ + settings: { + "import/resolver-next": [ + createTypeScriptImportResolver({ + alwaysTryTypes: true, // always try to resolve types under `@types` directory even it doesn't contain any source code, like `@types/unist` + + // Choose from one of the "project" configs below or omit to use /tsconfig.json by default + + // use /path/to/folder/tsconfig.json + project: "path/to/folder", + + // Multiple tsconfigs (Useful for monorepos) + + // use a glob pattern + project: "packages/*/tsconfig.json", + + // use an array + project: [ + "packages/module-a/tsconfig.json", + "packages/module-b/tsconfig.json" + ], + + // use an array of glob patterns + project: [ + "packages/*/tsconfig.json", + "other-packages/*/tsconfig.json" + ] + }), + ]; + } +}] +``` + +But if you are using `eslint-plugin-import` or the older version of `eslint-plugin-import-x`, you can't use require/import: + +```js +// eslint.config.js +module.exports = [ + { + settings: { + 'import/resolvers': { + typescript: { + alwaysTryTypes: true, // always try to resolve types under `@types` directory even it doesn't contain any source code, like `@types/unist` + + // Choose from one of the "project" configs below or omit to use /tsconfig.json by default + + // use /path/to/folder/tsconfig.json + project: 'path/to/folder', + + // Multiple tsconfigs (Useful for monorepos) + + // use a glob pattern + project: 'packages/*/tsconfig.json', + + // use an array + project: [ + 'packages/module-a/tsconfig.json', + 'packages/module-b/tsconfig.json', + ], + + // use an array of glob patterns + project: [ + 'packages/*/tsconfig.json', + 'other-packages/*/tsconfig.json', + ], + }, + }, + }, + }, +] +``` + +### `.eslintrc` + Add the following to your `.eslintrc` config: ```jsonc diff --git a/package.json b/package.json index 6b4eeb7..ee3c7b3 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "prepare": "simple-git-hooks", "release": "changeset publish", "test": "run-p 'test:*'", + "test:importXResolverV3": "eslint --config=tests/importXResolverV3/eslint.config.js tests/importXResolverV3", "test:multipleEslintrcs": "eslint --ext ts,tsx tests/multipleEslintrcs", "test:multipleTsconfigs": "eslint --ext ts,tsx tests/multipleTsconfigs", "test:withJsExtension": "node tests/withJsExtension/test.js && eslint --ext ts,tsx tests/withJsExtension", @@ -78,13 +79,14 @@ "@nolyfill/is-core-module": "1.0.39", "debug": "^4.3.7", "enhanced-resolve": "^5.15.0", - "eslint-module-utils": "^2.8.1", "fast-glob": "^3.3.2", "get-tsconfig": "^4.7.5", "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3" + "is-glob": "^4.0.3", + "stable-hash": "^0.0.4" }, "devDependencies": { + "@1stg/eslint-config": "7", "@1stg/lib-config": "^12.0.1", "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.10", @@ -99,6 +101,7 @@ "eslint": "^8.57.1", "eslint-import-resolver-typescript": "link:.", "eslint-plugin-import": "npm:eslint-plugin-i@^2.29.1", + "eslint-plugin-import-x": "^4.5.0", "lint-staged": "^13.3.0", "npm-run-all2": "^5.0.2", "prettier": "^2.8.8", diff --git a/shim.d.ts b/shim.d.ts deleted file mode 100644 index e76db42..0000000 --- a/shim.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'eslint-module-utils/hash.js' { - import type { Hash } from 'node:crypto' - export const hashObject: (object: object, hash?: Hash) => Hash -} diff --git a/src/index.ts b/src/index.ts index e0e97ca..53e9b8e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,16 +5,19 @@ import isNodeCoreModule from '@nolyfill/is-core-module' import debug from 'debug' import type { FileSystem, ResolveOptions, Resolver } from 'enhanced-resolve' import enhancedResolve from 'enhanced-resolve' -import { hashObject } from 'eslint-module-utils/hash.js' import fg from 'fast-glob' import { createPathsMatcher, getTsconfig } from 'get-tsconfig' import type { TsConfigResult } from 'get-tsconfig' import type { Version } from 'is-bun-module' import { isBunModule } from 'is-bun-module' import isGlob from 'is-glob' +import stableHashExports from 'stable-hash' const { globSync } = fg +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- esmodule interop +const stableHash = stableHashExports.default || stableHashExports + const IMPORTER_NAME = 'eslint-import-resolver-typescript' const log = debug(IMPORTER_NAME) @@ -114,10 +117,7 @@ let mappersCachedOptions: InternalResolverOptions let mappers: Array<((specifier: string) => string[]) | null> | undefined let resolverCachedOptions: InternalResolverOptions -let resolver: Resolver | undefined - -const digestHashObject = (value: object | null | undefined) => - hashObject(value ?? {}).digest('hex') +let cachedResolver: Resolver | undefined /** * @param source the module to resolve; i.e './some-module' @@ -129,13 +129,14 @@ export function resolve( source: string, file: string, options?: TsResolverOptions | null, + resolver: Resolver | null = null, ): { found: boolean path?: string | null } { if ( !cachedOptions || - previousOptionsHash !== (optionsHash = digestHashObject(options)) + previousOptionsHash !== (optionsHash = stableHash(options)) ) { previousOptionsHash = optionsHash cachedOptions = { @@ -152,9 +153,13 @@ export function resolve( } } - if (!resolver || resolverCachedOptions !== cachedOptions) { - resolver = enhancedResolve.ResolverFactory.createResolver(cachedOptions) - resolverCachedOptions = cachedOptions + if (!resolver) { + if (!cachedResolver || resolverCachedOptions !== cachedOptions) { + cachedResolver = + enhancedResolve.ResolverFactory.createResolver(cachedOptions) + resolverCachedOptions = cachedOptions + } + resolver = cachedResolver } log('looking for:', source) @@ -229,6 +234,28 @@ export function resolve( } } +export function createTypeScriptImportResolver( + options?: TsResolverOptions | null, +) { + const resolver = enhancedResolve.ResolverFactory.createResolver({ + ...options, + conditionNames: options?.conditionNames ?? defaultConditionNames, + extensions: options?.extensions ?? defaultExtensions, + extensionAlias: options?.extensionAlias ?? defaultExtensionAlias, + mainFields: options?.mainFields ?? defaultMainFields, + fileSystem: new enhancedResolve.CachedInputFileSystem(fileSystem, 5 * 1000), + useSyncFileSystemCalls: true, + }) + + return { + interfaceVersion: 3, + name: IMPORTER_NAME, + resolve(source: string, file: string) { + return resolve(source, file, options, resolver) + }, + } +} + /** Remove any trailing querystring from module id. */ function removeQuerystring(id: string) { const querystringIndex = id.lastIndexOf('?') diff --git a/tests/importXResolverV3/eslint.config.js b/tests/importXResolverV3/eslint.config.js new file mode 100644 index 0000000..70a0e56 --- /dev/null +++ b/tests/importXResolverV3/eslint.config.js @@ -0,0 +1,20 @@ +const path = require('path') +const { createTypeScriptImportResolver } = require('../../lib/index.cjs') + +const globPattern = './packages/*/tsconfig.json' + +// in normal cases this is not needed because the __dirname would be the root +const absoluteGlobPath = path.join(__dirname, globPattern) + +module.exports = { + ...require('eslint-plugin-import-x').flatConfigs.typescript, + settings: { + ...require('eslint-plugin-import-x').flatConfigs.typescript.settings, + 'import-x/resolver-next': [ + createTypeScriptImportResolver({ + project: absoluteGlobPath, + alwaysTryTypes: true, + }), + ], + }, +} diff --git a/tests/importXResolverV3/packages/module-a/index.ts b/tests/importXResolverV3/packages/module-a/index.ts new file mode 100644 index 0000000..8d011e9 --- /dev/null +++ b/tests/importXResolverV3/packages/module-a/index.ts @@ -0,0 +1,15 @@ +// import relative +import './tsImportee' +import './tsxImportee' +import './subfolder/tsImportee' +import './subfolder/tsxImportee' + +// import using tsconfig.json path mapping +import 'folder/tsImportee' +import 'folder/tsxImportee' +import 'folder/subfolder/tsImportee' +import 'folder/subfolder/tsxImportee' + +// import from node_module +import 'typescript' +import 'dummy.js' diff --git a/tests/importXResolverV3/packages/module-a/subfolder/tsImportee.ts b/tests/importXResolverV3/packages/module-a/subfolder/tsImportee.ts new file mode 100644 index 0000000..2893e5d --- /dev/null +++ b/tests/importXResolverV3/packages/module-a/subfolder/tsImportee.ts @@ -0,0 +1 @@ +export default 'yes' diff --git a/tests/importXResolverV3/packages/module-a/subfolder/tsxImportee.tsx b/tests/importXResolverV3/packages/module-a/subfolder/tsxImportee.tsx new file mode 100644 index 0000000..e500b41 --- /dev/null +++ b/tests/importXResolverV3/packages/module-a/subfolder/tsxImportee.tsx @@ -0,0 +1 @@ +export default 'React Component' diff --git a/tests/importXResolverV3/packages/module-a/tsImportee.ts b/tests/importXResolverV3/packages/module-a/tsImportee.ts new file mode 100644 index 0000000..2893e5d --- /dev/null +++ b/tests/importXResolverV3/packages/module-a/tsImportee.ts @@ -0,0 +1 @@ +export default 'yes' diff --git a/tests/importXResolverV3/packages/module-a/tsconfig.json b/tests/importXResolverV3/packages/module-a/tsconfig.json new file mode 100644 index 0000000..1ed978a --- /dev/null +++ b/tests/importXResolverV3/packages/module-a/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "jsx": "react", + "paths": { + "folder/*": ["*"], + "*": ["../../../../node_modules/*"] + } + }, + "files": ["index.ts", "tsImportee.ts", "tsxImportee.tsx"] +} diff --git a/tests/importXResolverV3/packages/module-a/tsxImportee.tsx b/tests/importXResolverV3/packages/module-a/tsxImportee.tsx new file mode 100644 index 0000000..e500b41 --- /dev/null +++ b/tests/importXResolverV3/packages/module-a/tsxImportee.tsx @@ -0,0 +1 @@ +export default 'React Component' diff --git a/tests/importXResolverV3/packages/module-b/index.ts b/tests/importXResolverV3/packages/module-b/index.ts new file mode 100644 index 0000000..8d011e9 --- /dev/null +++ b/tests/importXResolverV3/packages/module-b/index.ts @@ -0,0 +1,15 @@ +// import relative +import './tsImportee' +import './tsxImportee' +import './subfolder/tsImportee' +import './subfolder/tsxImportee' + +// import using tsconfig.json path mapping +import 'folder/tsImportee' +import 'folder/tsxImportee' +import 'folder/subfolder/tsImportee' +import 'folder/subfolder/tsxImportee' + +// import from node_module +import 'typescript' +import 'dummy.js' diff --git a/tests/importXResolverV3/packages/module-b/subfolder/tsImportee.ts b/tests/importXResolverV3/packages/module-b/subfolder/tsImportee.ts new file mode 100644 index 0000000..2893e5d --- /dev/null +++ b/tests/importXResolverV3/packages/module-b/subfolder/tsImportee.ts @@ -0,0 +1 @@ +export default 'yes' diff --git a/tests/importXResolverV3/packages/module-b/subfolder/tsxImportee.tsx b/tests/importXResolverV3/packages/module-b/subfolder/tsxImportee.tsx new file mode 100644 index 0000000..e500b41 --- /dev/null +++ b/tests/importXResolverV3/packages/module-b/subfolder/tsxImportee.tsx @@ -0,0 +1 @@ +export default 'React Component' diff --git a/tests/importXResolverV3/packages/module-b/tsImportee.ts b/tests/importXResolverV3/packages/module-b/tsImportee.ts new file mode 100644 index 0000000..2893e5d --- /dev/null +++ b/tests/importXResolverV3/packages/module-b/tsImportee.ts @@ -0,0 +1 @@ +export default 'yes' diff --git a/tests/importXResolverV3/packages/module-b/tsconfig.json b/tests/importXResolverV3/packages/module-b/tsconfig.json new file mode 100644 index 0000000..1ed978a --- /dev/null +++ b/tests/importXResolverV3/packages/module-b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "jsx": "react", + "paths": { + "folder/*": ["*"], + "*": ["../../../../node_modules/*"] + } + }, + "files": ["index.ts", "tsImportee.ts", "tsxImportee.tsx"] +} diff --git a/tests/importXResolverV3/packages/module-b/tsxImportee.tsx b/tests/importXResolverV3/packages/module-b/tsxImportee.tsx new file mode 100644 index 0000000..e500b41 --- /dev/null +++ b/tests/importXResolverV3/packages/module-b/tsxImportee.tsx @@ -0,0 +1 @@ +export default 'React Component' diff --git a/tsconfig.json b/tsconfig.json index 39c6900..84e4344 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,5 +6,5 @@ "allowSyntheticDefaultImports": true, "esModuleInterop": true }, - "include": ["./src", "./shim.d.ts"] + "include": ["./src"] } diff --git a/yarn.lock b/yarn.lock index b9f0c88..89bd519 100644 --- a/yarn.lock +++ b/yarn.lock @@ -76,7 +76,7 @@ __metadata: languageName: node linkType: hard -"@1stg/eslint-config@npm:^7.0.1": +"@1stg/eslint-config@npm:7, @1stg/eslint-config@npm:^7.0.1": version: 7.0.1 resolution: "@1stg/eslint-config@npm:7.0.1" dependencies: @@ -3881,6 +3881,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:8.17.0, @typescript-eslint/scope-manager@npm:^8.1.0": + version: 8.17.0 + resolution: "@typescript-eslint/scope-manager@npm:8.17.0" + dependencies: + "@typescript-eslint/types": "npm:8.17.0" + "@typescript-eslint/visitor-keys": "npm:8.17.0" + checksum: fa934d9fd88070833c57a3e79c0f933d0b68884c00293a1d571889b882e5c9680ccfdc5c77a7160d5a4b8b46657f93db2468a4726a517fce4d3bc764b66f1995 + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/type-utils@npm:5.62.0" @@ -3905,6 +3915,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/types@npm:8.17.0" + checksum: 46baf69ab30dd814a390590b94ca64c407ac725cb0143590ddcaf72fa43c940cec180539752ce4af26ac7e0ae2f5f921cfd0d07b088ca680f8a28800d4d33a5f + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" @@ -3923,6 +3940,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.17.0" + dependencies: + "@typescript-eslint/types": "npm:8.17.0" + "@typescript-eslint/visitor-keys": "npm:8.17.0" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 8a1f8be767b82e75d41eedda7fdb5135787ceaab480671b6d9891b5f92ee3a13f19ad6f48d5abf5e4f2afc4dd3317c621c1935505ef098f22b67be2f9d01ab7b + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.62.0, @typescript-eslint/utils@npm:^5.10.0": version: 5.62.0 resolution: "@typescript-eslint/utils@npm:5.62.0" @@ -3941,6 +3977,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:^8.1.0": + version: 8.17.0 + resolution: "@typescript-eslint/utils@npm:8.17.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:8.17.0" + "@typescript-eslint/types": "npm:8.17.0" + "@typescript-eslint/typescript-estree": "npm:8.17.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: e82934468bece55ccf633be9f3fe6cae26791fa6488b5af08ea22566f6b32e1296917e46cb1fe39bba7717ebdf0dca49935112760c4439a11af36b3b7925917a + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" @@ -3951,6 +4004,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.17.0" + dependencies: + "@typescript-eslint/types": "npm:8.17.0" + eslint-visitor-keys: "npm:^4.2.0" + checksum: e7a3c3b9430ecefb8e720f735f8a94f87901f055c75dc8eec60052dfdf90cc28dd33f03c11cd8244551dc988bf98d1db9bd09ef8fd3c51236912cab3680b9c6b + languageName: node + linkType: hard + "@ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" @@ -6152,6 +6215,7 @@ __metadata: version: 0.0.0-use.local resolution: "eslint-import-resolver-typescript@workspace:." dependencies: + "@1stg/eslint-config": "npm:7" "@1stg/lib-config": "npm:^12.0.1" "@changesets/changelog-github": "npm:^0.5.0" "@changesets/cli": "npm:^2.27.10" @@ -6168,8 +6232,8 @@ __metadata: enhanced-resolve: "npm:^5.15.0" eslint: "npm:^8.57.1" eslint-import-resolver-typescript: "link:." - eslint-module-utils: "npm:^2.8.1" eslint-plugin-import: "npm:eslint-plugin-i@^2.29.1" + eslint-plugin-import-x: "npm:^4.5.0" fast-glob: "npm:^3.3.2" get-tsconfig: "npm:^4.7.5" is-bun-module: "npm:^1.0.2" @@ -6181,6 +6245,7 @@ __metadata: simple-git-hooks: "npm:^2.11.1" size-limit: "npm:^11.0.0" size-limit-preset-node-lib: "npm:^0.3.0" + stable-hash: "npm:^0.0.4" type-coverage: "npm:^2.27.0" typescript: "npm:^5.3.2" peerDependencies: @@ -6219,7 +6284,7 @@ __metadata: languageName: node linkType: hard -"eslint-module-utils@npm:^2.8.0, eslint-module-utils@npm:^2.8.1": +"eslint-module-utils@npm:^2.8.0": version: 2.8.1 resolution: "eslint-module-utils@npm:2.8.1" dependencies: @@ -6258,6 +6323,27 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-import-x@npm:^4.5.0": + version: 4.5.0 + resolution: "eslint-plugin-import-x@npm:4.5.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:^8.1.0" + "@typescript-eslint/utils": "npm:^8.1.0" + debug: "npm:^4.3.4" + doctrine: "npm:^3.0.0" + eslint-import-resolver-node: "npm:^0.3.9" + get-tsconfig: "npm:^4.7.3" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.3" + semver: "npm:^7.6.3" + stable-hash: "npm:^0.0.4" + tslib: "npm:^2.6.3" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + checksum: c894408247344655f1f5db7c0d808ae5f7de331572968fa12074b54d490e6967cc5921f2ae616b161cafa171ff751c16bfd0201137fb47a1617105aabf5197d8 + languageName: node + linkType: hard + "eslint-plugin-import@npm:eslint-plugin-i@^2.27.5, eslint-plugin-import@npm:eslint-plugin-i@^2.29.1": version: 2.29.1 resolution: "eslint-plugin-i@npm:2.29.1" @@ -6655,6 +6741,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^4.2.0": + version: 4.2.0 + resolution: "eslint-visitor-keys@npm:4.2.0" + checksum: 9651b3356b01760e586b4c631c5268c0e1a85236e3292bf754f0472f465bf9a856c0ddc261fceace155334118c0151778effafbab981413dbf9288349343fa25 + languageName: node + linkType: hard + "eslint@npm:^8.43.0": version: 8.57.0 resolution: "eslint@npm:8.57.0" @@ -7358,6 +7451,15 @@ __metadata: languageName: node linkType: hard +"get-tsconfig@npm:^4.7.3": + version: 4.8.1 + resolution: "get-tsconfig@npm:4.8.1" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 3fb5a8ad57b9633eaea085d81661e9e5c9f78b35d8f8689eaf8b8b45a2a3ebf3b3422266d4d7df765e308cc1e6231648d114803ab3d018332e29916f2c1de036 + languageName: node + linkType: hard + "git-raw-commits@npm:^2.0.11": version: 2.0.11 resolution: "git-raw-commits@npm:2.0.11" @@ -10114,6 +10216,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: dd6a8927b063aca6d910b119e1f2df6d2ce7d36eab91de83167dd136bb85e1ebff97b0d3de1cb08bd1f7e018ca170b4962479fefab5b2a69e2ae12cb2edc8348 + languageName: node + linkType: hard + "minimist-options@npm:4.1.0": version: 4.1.0 resolution: "minimist-options@npm:4.1.0" @@ -12806,6 +12917,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.6.0, semver@npm:^7.6.3": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 36b1fbe1a2b6f873559cd57b238f1094a053dbfd997ceeb8757d79d1d2089c56d1321b9f1069ce263dc64cfa922fa1d2ad566b39426fe1ac6c723c1487589e10 + languageName: node + linkType: hard + "semver@npm:^7.6.2": version: 7.6.2 resolution: "semver@npm:7.6.2" @@ -13176,6 +13296,13 @@ __metadata: languageName: node linkType: hard +"stable-hash@npm:^0.0.4": + version: 0.0.4 + resolution: "stable-hash@npm:0.0.4" + checksum: 21c039d21c1cb739cf8342561753a5e007cb95ea682ccd452e76310bbb9c6987a89de8eda023e320b019f3e4691aabda75079cdbb7dadf7ab9013e931f2f23cd + languageName: node + linkType: hard + "strict-event-emitter@npm:^0.5.1": version: 0.5.1 resolution: "strict-event-emitter@npm:0.5.1" @@ -13623,6 +13750,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^1.3.0": + version: 1.4.3 + resolution: "ts-api-utils@npm:1.4.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 713c51e7392323305bd4867422ba130fbf70873ef6edbf80ea6d7e9c8f41eeeb13e40e8e7fe7cd321d74e4864777329797077268c9f570464303a1723f1eed39 + languageName: node + linkType: hard + "ts-node@npm:^10.8.1, ts-node@npm:^10.9.1": version: 10.9.1 resolution: "ts-node@npm:10.9.1" @@ -13675,6 +13811,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.6.3": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7 + languageName: node + linkType: hard + "tsutils@npm:3, tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0"