diff --git a/packages/@glimmer-workspace/build/lib/config.js b/packages/@glimmer-workspace/build/lib/config.js index a331ca3be6..a47c0d7eb3 100644 --- a/packages/@glimmer-workspace/build/lib/config.js +++ b/packages/@glimmer-workspace/build/lib/config.js @@ -1,6 +1,7 @@ /* eslint-disable no-console */ // @ts-check import { existsSync, readFileSync } from 'node:fs'; +import { createRequire } from 'node:module'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -12,6 +13,8 @@ import ts from 'typescript'; import inline from './inline.js'; +const require = createRequire(import.meta.url); + // eslint-disable-next-line import/no-named-as-default-member const { ModuleKind, ModuleResolutionKind, ScriptTarget, ImportsNotUsedAsValues } = ts; @@ -94,7 +97,7 @@ export function typescript(pkg, config) { return rollupTS({ transpiler: 'babel', transpileOnly: true, - babelConfig: { presets }, + babelConfig: { presets, plugins: [require.resolve('@glimmer/local-debug-babel-plugin')] }, /** * This shouldn't be required, but it is. * If we use @rollup/plugin-babel, we can remove this. @@ -452,10 +455,14 @@ export class Package { return { input: resolve(root, ts), + treeshake: { + moduleSideEffects: false, + }, output: { file: resolve(root, 'dist', env, file), format, sourcemap: true, + hoistTransitiveImports: false, exports: format === 'cjs' ? 'named' : 'auto', }, onwarn: (warning, warn) => { diff --git a/packages/@glimmer-workspace/build/package.json b/packages/@glimmer-workspace/build/package.json index 3dd515f7c6..8705cec9ca 100644 --- a/packages/@glimmer-workspace/build/package.json +++ b/packages/@glimmer-workspace/build/package.json @@ -13,6 +13,7 @@ "test:types": "tsc --noEmit -p ../tsconfig.json" }, "dependencies": { + "@glimmer/local-debug-babel-plugin": "workspace:*", "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-replace": "^5.0.5", diff --git a/packages/@glimmer/local-debug-babel-plugin/index.js b/packages/@glimmer/local-debug-babel-plugin/index.js new file mode 100644 index 0000000000..aa854fbbef --- /dev/null +++ b/packages/@glimmer/local-debug-babel-plugin/index.js @@ -0,0 +1,110 @@ +/** + * https://astexplorer.net/#/gist/c3f41b75af73006f64476775e73f7daa/e6e3e120df8404b1bff308bec3ed89eaaf0b05f2 + * + * This plugin exists because, _even when we inline @glimmer/debug_, + * we cannot get terser to remove/inline/unwrap identity functions. + * + * Repro here: https://try.terser.org/ + * + * ```js + function x(x) { return x; } + function y(x, y, z) { return x; }; + + function abc(a) { return x(a); } + function abc2(a) { return y(a); } + + export function example() { + return `${x(2)} ${y("2")} ${abc(3)} ${abc2("3")}`; + } + ``` + + With Options: + + { + module: true, + compress: { + passes: 6, + module: true, + inline: 3, // default + }, + mangle: {}, + output: {}, + parse: {}, + rename: {}, + } + */ +export default function (babel) { + let _removeCheck = removeChecks(babel); + + return { + name: 'Cleanup local-debug code that terser could not', + visitor: { + ImportDeclaration(path, state) { + _removeCheck.ImportDeclaration(path, state); + }, + CallExpression(path, state) { + _removeCheck.CallExpression(path, state); + }, + }, + }; +} + +function removeChecks({ template }) { + let stateKey = Symbol.for('removeChecks'); + + const unwrap = ['check']; + const trueFn = ['CheckInterface']; + const removeEntirely = ['recordStackSize']; + + function isToBeRemoved(callPath, state) { + if (!state) return; + + let ourState = state[stateKey]; + + if (!ourState) return; + /** + * Do we want to support local aliasing / re-assignment? + * if so, this would break + */ + if (!ourState?.names?.has(callPath.node.callee.name)) return; + + return true; + } + + return { + ImportDeclaration(path, state) { + let node = path.node; + + if (!node.source) return; + if (node.source.value !== '@glimmer/debug') return; + + state[stateKey] ??= { names: new Set(), nodes: [] }; + + node.specifiers.forEach((specifier) => { + let name = specifier.local.name; + let relevant = + unwrap.includes(name) || removeEntirely.includes(name) || trueFn.includes(name); + if (!relevant) return; + + state[stateKey].names.add(name); + state[stateKey].nodes.push(specifier.local); + }); + }, + CallExpression(path, state) { + if (isToBeRemoved(path, state)) { + let name = path.node.callee.name; + if (removeEntirely.includes(name)) { + path.remove(); + return; + } + + if (trueFn.includes(name)) { + path.replaceWith(template(`() => true`)()); + return; + } + + path.replaceWith(path.node.arguments[0]); + } + }, + }; +} diff --git a/packages/@glimmer/local-debug-babel-plugin/package.json b/packages/@glimmer/local-debug-babel-plugin/package.json new file mode 100644 index 0000000000..c595d3a689 --- /dev/null +++ b/packages/@glimmer/local-debug-babel-plugin/package.json @@ -0,0 +1,13 @@ +{ + "name": "@glimmer/local-debug-babel-plugin", + "version": "0.92.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/glimmerjs/glimmer-vm.git", + "directory": "packages/@glimmer/local-debug-babel-plugin" + }, + "type": "module", + "private": true, + "main": "index.js" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8bd4faf6c8..d68d48ff94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -221,7 +221,7 @@ importers: version: 5.0.12(@types/node@20.9.4) xo: specifier: ^0.54.2 - version: 0.54.2(eslint-import-resolver-typescript@3.6.1)(webpack@5.89.0) + version: 0.54.2(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(webpack@5.89.0) zx: specifier: ^7.2.3 version: 7.2.3 @@ -349,6 +349,9 @@ importers: packages/@glimmer-workspace/build: dependencies: + '@glimmer/local-debug-babel-plugin': + specifier: workspace:* + version: link:../../@glimmer/local-debug-babel-plugin '@rollup/plugin-commonjs': specifier: ^25.0.7 version: 25.0.7(rollup@4.5.1) @@ -767,6 +770,8 @@ importers: specifier: ^5.0.4 version: 5.0.4 + packages/@glimmer/local-debug-babel-plugin: {} + packages/@glimmer/local-debug-flags: devDependencies: eslint: @@ -4356,34 +4361,6 @@ packages: '@types/node': 20.9.4 optional: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.2.2): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.54.0)(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@5.2.2) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.54.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare-lite: 1.4.0 - semver: 7.5.2 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.0.4): resolution: {integrity: sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4441,26 +4418,6 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@5.62.0(eslint@8.54.0)(typescript@5.2.2): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.54.0 - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/parser@6.12.0(eslint@8.54.0)(typescript@5.0.4): resolution: {integrity: sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4502,14 +4459,6 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - /@typescript-eslint/scope-manager@6.12.0: resolution: {integrity: sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4517,26 +4466,6 @@ packages: '@typescript-eslint/types': 6.12.0 '@typescript-eslint/visitor-keys': 6.12.0 - /@typescript-eslint/type-utils@5.62.0(eslint@8.54.0)(typescript@5.2.2): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@5.2.2) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.54.0 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/type-utils@6.12.0(eslint@8.54.0)(typescript@5.0.4): resolution: {integrity: sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4576,36 +4505,10 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@typescript-eslint/types@6.12.0: resolution: {integrity: sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==} engines: {node: ^16.0.0 || >=18.0.0} - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.2.2): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.2 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/typescript-estree@6.12.0(typescript@5.0.4): resolution: {integrity: sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4647,26 +4550,6 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/utils@5.62.0(eslint@8.54.0)(typescript@5.2.2): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - eslint: 8.54.0 - eslint-scope: 5.1.1 - semver: 7.5.2 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /@typescript-eslint/utils@6.12.0(eslint@8.54.0)(typescript@5.0.4): resolution: {integrity: sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4704,14 +4587,6 @@ packages: - supports-color - typescript - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys@6.12.0: resolution: {integrity: sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==} engines: {node: ^16.0.0 || >=18.0.0} @@ -8236,21 +8111,6 @@ packages: dependencies: eslint: 8.54.0 - /eslint-config-xo-typescript@0.57.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.2.2): - resolution: {integrity: sha512-u+qcTaADHn2/+hbDqZHRWiAps8JS6BcRsJKAADFxYHIPpYqQeQv9mXuhRe/1+ikfZAIz9hlG1V+Lkj8J7nf34A==} - engines: {node: '>=12'} - peerDependencies: - '@typescript-eslint/eslint-plugin': '>=5.57.0' - '@typescript-eslint/parser': '>=5.57.0' - eslint: '>=8.0.0' - typescript: ^5.0.4 || 5 - dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.2.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.2.2) - eslint: 8.54.0 - typescript: 5.2.2 - dev: true - /eslint-config-xo@0.43.1(eslint@8.54.0): resolution: {integrity: sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==} engines: {node: '>=12'} @@ -8339,7 +8199,7 @@ packages: array-find: 1.0.0 debug: 3.2.7 enhanced-resolve: 0.9.1 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.54.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.54.0) find-root: 1.1.0 has: 1.0.4 interpret: 1.4.0 @@ -8353,7 +8213,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.54.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.54.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -8374,7 +8234,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.0.4) debug: 3.2.7 eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 @@ -8533,7 +8393,7 @@ packages: - eslint-import-resolver-webpack - supports-color - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.54.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.54.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -8543,7 +8403,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.0.4) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -8552,7 +8412,7 @@ packages: doctrine: 2.1.0 eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.54.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.54.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -12620,10 +12480,6 @@ packages: - supports-color dev: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -16384,6 +16240,7 @@ packages: dependencies: tslib: 1.14.1 typescript: 5.2.2 + dev: false /tsx@3.14.0: resolution: {integrity: sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==} @@ -17324,7 +17181,7 @@ packages: engines: {node: '>=12'} dev: true - /xo@0.54.2(eslint-import-resolver-typescript@3.6.1)(webpack@5.89.0): + /xo@0.54.2(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(webpack@5.89.0): resolution: {integrity: sha512-1S3r+ecCg8OVPtu711as+cgwxOg+WQNRgSzqZ+OHzYlsa8CpW3ych0Ve9k8Q2QG6gqO3HSpaS5AXi9D0yPUffg==} engines: {node: '>=14.16'} hasBin: true @@ -17335,20 +17192,17 @@ packages: optional: true dependencies: '@eslint/eslintrc': 1.4.1 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.2.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.2.2) arrify: 3.0.0 cosmiconfig: 8.3.6(typescript@5.2.2) define-lazy-prop: 3.0.0 eslint: 8.54.0 eslint-config-prettier: 8.10.0(eslint@8.54.0) eslint-config-xo: 0.43.1(eslint@8.54.0) - eslint-config-xo-typescript: 0.57.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.2.2) eslint-formatter-pretty: 5.0.0 eslint-import-resolver-webpack: 0.13.2(eslint-plugin-import@2.29.1)(webpack@5.89.0) eslint-plugin-ava: 14.0.0(eslint@8.54.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.54.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.54.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint-import-resolver-webpack@0.13.2)(eslint@8.54.0) eslint-plugin-n: 15.7.0(eslint@8.54.0) eslint-plugin-no-use-extend-native: 0.5.0 eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.10.0)(eslint@8.54.0)(prettier@2.8.8) @@ -17372,6 +17226,7 @@ packages: typescript: 5.2.2 webpack: 5.89.0 transitivePeerDependencies: + - '@typescript-eslint/parser' - eslint-import-resolver-typescript - supports-color dev: true