diff --git a/.changeset/dirty-rabbits-pretend.md b/.changeset/dirty-rabbits-pretend.md new file mode 100644 index 0000000000..913176cfab --- /dev/null +++ b/.changeset/dirty-rabbits-pretend.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-import-x": minor +--- + +feat: migrate `enhanced-resolve` to `oxc-resolver` diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b477729078..16518e0946 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} + cancel-in-progress: true jobs: ci: @@ -30,6 +30,7 @@ jobs: - executeLint: true node: 20 os: ubuntu-latest + fail-fast: false runs-on: ${{ matrix.os }} steps: diff --git a/jest.config.ts b/jest.config.ts index 6be9bf9348..4059ed30d9 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -13,6 +13,7 @@ export default { '^eslint-plugin-import-x/package.json$': `/package.json`, '^eslint-plugin-import-x/(.+)$': `/${srcDir}/$1`, }, + snapshotSerializers: ['/test/jest.serializer.ts'], testMatch: ['/test/**/*.spec.ts'], transform: { '^.+\\.(t|j)sx?$': ['@swc-node/jest', {} satisfies SwcOptions], diff --git a/package.json b/package.json index 122264a454..6023812a1a 100644 --- a/package.json +++ b/package.json @@ -53,11 +53,11 @@ "@typescript-eslint/utils": "^8.1.0", "debug": "^4.3.4", "doctrine": "^3.0.0", - "enhanced-resolve": "^5.17.1", "eslint-import-resolver-node": "^0.3.9", "get-tsconfig": "^4.7.3", "is-glob": "^4.0.3", "minimatch": "^9.0.3", + "oxc-resolver": "^5.0.0", "semver": "^7.6.3", "stable-hash": "^0.0.4", "tslib": "^2.6.3" @@ -117,6 +117,7 @@ "jest": "^29.7.0", "klaw-sync": "^6.0.0", "npm-run-all2": "^6.1.2", + "path-serializer": "^0.3.4", "prettier": "^3.2.5", "redux": "^5.0.1", "rimraf": "^5.0.10", diff --git a/src/node-resolver.ts b/src/node-resolver.ts index 1597eb055b..4a05d5d531 100644 --- a/src/node-resolver.ts +++ b/src/node-resolver.ts @@ -1,40 +1,45 @@ -import fs from 'node:fs' import { isBuiltin } from 'node:module' import path from 'node:path' -import { ResolverFactory, CachedInputFileSystem } from 'enhanced-resolve' -import type { ResolveOptions } from 'enhanced-resolve' +import { ResolverFactory } from 'oxc-resolver' +import type { NapiResolveOptions as ResolveOptions } from 'oxc-resolver' import type { NewResolver } from './types' -type NodeResolverOptions = { +export type NodeResolverOptions = { /** - * The allowed extensions the resolver will attempt to find when resolving a module - * @type {string[] | undefined} + * Attempt to resolve these extensions in order. + * If multiple files share the same name but have different extensions, + * will resolve the one with the extension listed first in the array and skip the rest. + * * @default ['.mjs', '.cjs', '.js', '.json', '.node'] */ extensions?: string[] /** - * The import conditions the resolver will used when reading the exports map from "package.json" - * @type {string[] | undefined} - * @default ['default', 'module', 'import', 'require'] + * Condition names for exports field which defines entry points of a package. + * The key order in the exports field is significant. During condition matching, earlier entries have higher priority and take precedence over later entries. + * + * @default ['import', 'require', 'default'] */ conditionNames?: string[] -} & Omit + /** + * A list of main fields in description files + * + * @default ['module', 'main'] + */ + mainFields?: string[] +} & ResolveOptions export function createNodeResolver({ extensions = ['.mjs', '.cjs', '.js', '.json', '.node'], conditionNames = ['import', 'require', 'default'], mainFields = ['module', 'main'], - fileSystem = new CachedInputFileSystem(fs, 4 * 1000), ...restOptions -}: Partial = {}): NewResolver { - const resolver = ResolverFactory.createResolver({ +}: NodeResolverOptions = {}): NewResolver { + const resolver = new ResolverFactory({ extensions, - fileSystem, conditionNames, mainFields, - useSyncFileSystemCalls: true, ...restOptions, }) @@ -43,7 +48,7 @@ export function createNodeResolver({ return { interfaceVersion: 3, name: 'eslint-plugin-import-x built-in node resolver', - resolve: (modulePath, sourceFile) => { + resolve(modulePath, sourceFile) { if (isBuiltin(modulePath)) { return { found: true, path: null } } @@ -53,13 +58,9 @@ export function createNodeResolver({ } try { - const resolved = resolver.resolveSync( - {}, - path.dirname(sourceFile), - modulePath, - ) - if (resolved) { - return { found: true, path: resolved } + const resolved = resolver.sync(path.dirname(sourceFile), modulePath) + if (resolved.path) { + return { found: true, path: resolved.path } } return { found: false } } catch { diff --git a/src/types.ts b/src/types.ts index e45e57ae21..711b782fd7 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,6 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils' -import type { ResolveOptions } from 'enhanced-resolve' import type { MinimatchOptions } from 'minimatch' +import type { NapiResolveOptions as ResolveOptions } from 'oxc-resolver' import type { KebabCase } from 'type-fest' import type { ImportType as ImportType_, PluginName } from './utils' @@ -40,7 +40,7 @@ export type NodeResolverOptions = { } export type WebpackResolverOptions = { - config?: string | { resolve: Omit } + config?: string | { resolve: ResolveOptions } 'config-index'?: number env?: Record argv?: Record @@ -50,7 +50,7 @@ export type TsResolverOptions = { alwaysTryTypes?: boolean project?: string[] | string extensions?: string[] -} & Omit +} & ResolveOptions // TODO: remove prefix New in the next major version export type NewResolverResolve = ( diff --git a/src/utils/parse.ts b/src/utils/parse.ts index 8a576bfbd2..7dad78cf3d 100644 --- a/src/utils/parse.ts +++ b/src/utils/parse.ts @@ -146,7 +146,7 @@ export function parse( if (!ast || typeof ast !== 'object') { console.warn( // Can only be invalid for custom parser per imports/parser - `\`parseForESLint\` from parser \`${typeof parserOrPath === 'string' ? parserOrPath : '`context.languageOptions.parser`'}\` is invalid and will just be ignored`, + `\`parseForESLint\` from parser \`${typeof parserOrPath === 'string' ? parserOrPath : 'context.languageOptions.parser'}\` is invalid and will just be ignored`, { content, parserMeta: parser.meta }, ) } else { diff --git a/test/__snapshots__/node-resolver.spec.ts.snap b/test/__snapshots__/node-resolver.spec.ts.snap new file mode 100644 index 0000000000..28ca35524a --- /dev/null +++ b/test/__snapshots__/node-resolver.spec.ts.snap @@ -0,0 +1,207 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`builtin node:path => true 1`] = ` +{ + "expected": true, + "requireResolve": "node:path", + "source": "node:path", +} +`; + +exports[`builtin node:path => true 2`] = ` +{ + "expected": true, + "result": { + "found": true, + "path": null, + }, + "source": "node:path", +} +`; + +exports[`builtin path => true 1`] = ` +{ + "expected": true, + "requireResolve": "path", + "source": "path", +} +`; + +exports[`builtin path => true 2`] = ` +{ + "expected": true, + "result": { + "found": true, + "path": null, + }, + "source": "path", +} +`; + +exports[`modules @sukka/does-not-exists => false 1`] = ` +{ + "expected": false, + "requireResolve": undefined, + "source": "@sukka/does-not-exists", +} +`; + +exports[`modules @sukka/does-not-exists => false 2`] = ` +{ + "expected": false, + "result": { + "found": false, + }, + "source": "@sukka/does-not-exists", +} +`; + +exports[`modules jest => true 1`] = ` +{ + "expected": true, + "requireResolve": "/node_modules/jest/build/index.js", + "source": "jest", +} +`; + +exports[`modules jest => true 2`] = ` +{ + "expected": true, + "result": { + "found": true, + "path": "/node_modules/jest/build/index.js", + }, + "source": "jest", +} +`; + +exports[`relative ../.github/dependabot.yml => false 1`] = ` +{ + "expected": false, + "requireResolve": undefined, + "source": "../.github/dependabot.yml", +} +`; + +exports[`relative ../.github/dependabot.yml => false 2`] = ` +{ + "expected": false, + "result": { + "found": false, + }, + "source": "../.github/dependabot.yml", +} +`; + +exports[`relative ../babel.config.js => babel.config.js 1`] = ` +{ + "expected": "babel.config.js", + "requireResolve": "/babel.config.js", + "source": "../babel.config.js", +} +`; + +exports[`relative ../babel.config.js => babel.config.js 2`] = ` +{ + "expected": "babel.config.js", + "result": { + "found": true, + "path": "/babel.config.js", + }, + "source": "../babel.config.js", +} +`; + +exports[`relative ../inexistent.js => false 1`] = ` +{ + "expected": false, + "requireResolve": undefined, + "source": "../inexistent.js", +} +`; + +exports[`relative ../inexistent.js => false 2`] = ` +{ + "expected": false, + "result": { + "found": false, + }, + "source": "../inexistent.js", +} +`; + +exports[`relative ../package.json => package.json 1`] = ` +{ + "expected": "package.json", + "requireResolve": "/package.json", + "source": "../package.json", +} +`; + +exports[`relative ../package.json => package.json 2`] = ` +{ + "expected": "package.json", + "result": { + "found": true, + "path": "/package.json", + }, + "source": "../package.json", +} +`; + +exports[`relative ../test => test/index.js 1`] = ` +{ + "expected": "test/index.js", + "requireResolve": "/test/index.js", + "source": "../test", +} +`; + +exports[`relative ../test => test/index.js 2`] = ` +{ + "expected": "test/index.js", + "result": { + "found": true, + "path": "/test/index.js", + }, + "source": "../test", +} +`; + +exports[`relative ../test/ => test/index.js 1`] = ` +{ + "expected": "test/index.js", + "requireResolve": "/test/index.js", + "source": "../test/", +} +`; + +exports[`relative ../test/ => test/index.js 2`] = ` +{ + "expected": "test/index.js", + "result": { + "found": true, + "path": "/test/index.js", + }, + "source": "../test/", +} +`; + +exports[`relative ../test/index.js => test/index.js 1`] = ` +{ + "expected": "test/index.js", + "requireResolve": "/test/index.js", + "source": "../test/index.js", +} +`; + +exports[`relative ../test/index.js => test/index.js 2`] = ` +{ + "expected": "test/index.js", + "result": { + "found": true, + "path": "/test/index.js", + }, + "source": "../test/index.js", +} +`; diff --git a/test/jest.serializer.ts b/test/jest.serializer.ts new file mode 100644 index 0000000000..81545a4e26 --- /dev/null +++ b/test/jest.serializer.ts @@ -0,0 +1,6 @@ +import { createSnapshotSerializer } from 'path-serializer' + +const serializer: ReturnType = + createSnapshotSerializer() + +export = serializer diff --git a/test/node-resolver.spec.ts b/test/node-resolver.spec.ts index 5365539e10..eb6373db56 100644 --- a/test/node-resolver.spec.ts +++ b/test/node-resolver.spec.ts @@ -1,5 +1,4 @@ import path from 'node:path' -import { cwd } from 'node:process' import { createNodeResolver } from '../src/node-resolver' @@ -7,20 +6,28 @@ const resolver = createNodeResolver() function expectResolve(source: string, expected: boolean | string) { it(`${source} => ${expected}`, () => { + let requireResolve: string | undefined try { - console.log({ - source, - expected, - requireResolve: require.resolve(source, { paths: [__dirname] }), - }) + requireResolve = require.resolve(source, { paths: [__dirname] }) } catch { - console.log({ source, expected, requireResolve: null }) + // ignore } + + expect({ + source, + expected, + requireResolve, + }).toMatchSnapshot() + const result = resolver.resolve(source, __filename) - console.log({ source, expected, result }) + expect({ + source, + expected, + result, + }).toMatchSnapshot() if (typeof expected === 'string') { - expect(result.path).toBe(path.resolve(cwd(), expected)) + expect(result.path).toBe(path.resolve(expected)) } else { expect(result.found).toBe(expected) } diff --git a/test/utils/import-type.spec.ts b/test/utils/import-type.spec.ts index 2762e6c87f..35717c542b 100644 --- a/test/utils/import-type.spec.ts +++ b/test/utils/import-type.spec.ts @@ -106,7 +106,7 @@ describe('importType(name)', () => { // `@` for internal modules is a common alias and is different from scoped names. // Scoped names are prepended with `@` (e.g. `@scoped/some-file.js`) whereas `@` // as an alias by itelf is the full root name (e.g. `@/some-file.js`). - const alias = { '@': testFilePath('internal-modules') } + const alias = { '@': [testFilePath('internal-modules')] } const webpackConfig = { resolve: { alias } } const pathContext = testContext({ 'import-x/resolver': { webpack: { config: webpackConfig } }, diff --git a/yarn.lock b/yarn.lock index 258fe86283..2406c5faa2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1375,17 +1375,25 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@emnapi/core@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.1.0.tgz#6b552ea3d2b303965c52661c05976d3072ccb6a3" - integrity sha512-gNEVZo0HhUfVjhr6rFG//HZXbauclxueiDxaKGBZHcK5h8i9pslABNPfG8kMwYTubAn3mV7AyOZN8gfPRgbU8A== +"@emnapi/core@^1.3.1": + version "1.3.1" + resolved "https://registry.npmmirror.com/@emnapi/core/-/core-1.3.1.tgz#9c62d185372d1bddc94682b87f376e03dfac3f16" + integrity sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog== dependencies: + "@emnapi/wasi-threads" "1.0.1" tslib "^2.4.0" -"@emnapi/runtime@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.1.0.tgz#b07a0c8d3e61795a192fab57ff0c90a77283ada1" - integrity sha512-gCGlE0fJGWalfy+wbFApjhKn6uoSVvopru77IPyxNKkjkaiSx2HxDS7eOYSmo9dcMIhmmIvoxiC3N9TM1c3EaA== +"@emnapi/runtime@^1.3.1": + version "1.3.1" + resolved "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" + integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz#d7ae71fd2166b1c916c6cd2d0df2ef565a2e1a5b" + integrity sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw== dependencies: tslib "^2.4.0" @@ -1795,13 +1803,13 @@ globby "^11.0.0" read-yaml-file "^1.1.0" -"@napi-rs/wasm-runtime@^0.2.3", "@napi-rs/wasm-runtime@^0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz#d27788176f250d86e498081e3c5ff48a17606918" - integrity sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ== +"@napi-rs/wasm-runtime@^0.2.3", "@napi-rs/wasm-runtime@^0.2.4", "@napi-rs/wasm-runtime@^0.2.7": + version "0.2.7" + resolved "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz#288f03812a408bc53c2c3686c65f38fe90f295eb" + integrity sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw== dependencies: - "@emnapi/core" "^1.1.0" - "@emnapi/runtime" "^1.1.0" + "@emnapi/core" "^1.3.1" + "@emnapi/runtime" "^1.3.1" "@tybys/wasm-util" "^0.9.0" "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": @@ -1929,41 +1937,81 @@ resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-1.10.2.tgz#7fd04e5f07bd4dfc9abe9416afe107b925df1f98" integrity sha512-aOCZYXqmFL+2sXlaVkYbAOtICGGeTFtmdul8OimQfOXHJods6YHJ2nR6+rEeBcJzaXyXPP18ne1IsEc4AYL1IA== +"@oxc-resolver/binding-darwin-arm64@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-5.0.0.tgz#c99057f297954f197217e75d63ff92d4514e354a" + integrity sha512-zwHAf+owoxSWTDD4dFuwW+FkpaDzbaL30H5Ltocb+RmLyg4WKuteusRLKh5Y8b/cyu7UzhxM0haIqQjyqA1iuA== + "@oxc-resolver/binding-darwin-x64@1.10.2": version "1.10.2" resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-1.10.2.tgz#b73dfa73c7af1ee808a52f6873274b47af284716" integrity sha512-6WD7lHGkoduFZfUgnC2suKOlqttQRKxWsiVXiiGPu3mfXvQAhMd/gekuH1t8vOhFlPJduaww15n5UB0bSjCK+w== +"@oxc-resolver/binding-darwin-x64@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-5.0.0.tgz#530cf02f3a3833a3932fc22d732d757cdc7e3cbf" + integrity sha512-1lS3aBNVjVQKBvZdHm13+8tSjvu2Tl1Cv4FnUyMYxqx6+rsom2YaOylS5LhDUwfZu0zAgpLMwK6kGpF/UPncNg== + "@oxc-resolver/binding-freebsd-x64@1.10.2": version "1.10.2" resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-1.10.2.tgz#b1303a29ff8eafc267683d253b7458b78f68245b" integrity sha512-nEqHWx/Ot5p7Mafj8qH6vFlLSvHjECxAcZwhnAMqRuQu1NgXC/QM3emkdhVGy7QJgsxZbHpPaF6TERNf5/NL9Q== +"@oxc-resolver/binding-freebsd-x64@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-5.0.0.tgz#4a10430b9375f17ea5c5f8a4439aa2901dcaa5c2" + integrity sha512-q9sRd68wC1/AJ0eu6ClhxlklVfe8gH4wrUkSyEbIYTZ8zY5yjsLY3fpqqsaCvWJUx65nW+XtnAxCGCi5AXr1Mw== + "@oxc-resolver/binding-linux-arm-gnueabihf@1.10.2": version "1.10.2" resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.10.2.tgz#f921703edfc1e972408394b9c639c50e984ff16e" integrity sha512-+AlZI0fPnpfArh8aC5k2295lmQrxa2p8gBLxC3buvCkz0ZpbVLxyyAXz3J2jGwJnmc5MUPLEqPYw6ZlAGH4XHA== +"@oxc-resolver/binding-linux-arm-gnueabihf@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-5.0.0.tgz#f082550d0ff62e772657ebccea8d2f7751d2130b" + integrity sha512-catYavWsvqViYnCveQjhrK6yVYDEPFvIOgGLxnz5r2dcgrjpmquzREoyss0L2QG/J5HTTbwqwZ1kk+g56hE/1A== + "@oxc-resolver/binding-linux-arm64-gnu@1.10.2": version "1.10.2" resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.10.2.tgz#173982495965af46d028329ce1e99d7dd584e483" integrity sha512-8fZ8NszFaUZaoA8eUwkF2lHjgUs76aFiewWgG/cjcZmwKp+ErZQLW8eOvIWZ4SohHQ+ScvhVsSaU2PU38c88gw== +"@oxc-resolver/binding-linux-arm64-gnu@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-5.0.0.tgz#d016b164f46548759454e58a42289d4e45030e69" + integrity sha512-l/0pWoQM5kVmJLg4frQ1mKZOXgi0ex/hzvFt8E4WK2ifXr5JgKFUokxsb/oat7f5YzdJJh5r9p+qS/t3dA26Aw== + "@oxc-resolver/binding-linux-arm64-musl@1.10.2": version "1.10.2" resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.10.2.tgz#323fc30fc4611a2bd0d1a2d73fdea5d91a9c0ae7" integrity sha512-oPrLICrw96Ym9n04FWXWGkbkpF6qJtZ57JSnqI3oQ24xHTt4iWyjHKHQO46NbJAK9sFb3Qce4BzV8faDI5Rifg== +"@oxc-resolver/binding-linux-arm64-musl@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-5.0.0.tgz#c9ce09343c877e1000a8e2b2b04694d94ae5a918" + integrity sha512-bx0oz/oaAW4FGYqpIIxJCnmgb906YfMhTEWCJvYkxjpEI8VKLJEL3PQevYiqDq36SA0yRLJ/sQK2fqry8AFBfA== + "@oxc-resolver/binding-linux-x64-gnu@1.10.2": version "1.10.2" resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.10.2.tgz#f7f8bd53f146a28176180a1fa8b47885427df7e9" integrity sha512-eli74jTAUiIfqi8IPFqiPxQS69Alcr6w/IFRyf3XxrkxeFGgcgxJkRIxWNTKJ6T3EXxjuma+49LdZn6l9rEj7A== +"@oxc-resolver/binding-linux-x64-gnu@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-5.0.0.tgz#10476acfa3e8e46331820a629914d351df0ccf8c" + integrity sha512-4PH++qbSIhlRsFYdN1P9neDov4OGhTGo5nbQ1D7AL6gWFLo3gdZTc00FM2y8JjeTcPWEXkViZuwpuc0w5i6qHg== + "@oxc-resolver/binding-linux-x64-musl@1.10.2": version "1.10.2" resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-1.10.2.tgz#00d3465bc6a2abd9a34d09dc5eeba0479f33059b" integrity sha512-HH9zmjNSQo3rkbqJH5nIjGrtjC+QPrUy0KGGMR/oRCSLuD0cNFJ/Uly1XAugwSm4oEw0+rv6PmeclXmVTKsxhw== +"@oxc-resolver/binding-linux-x64-musl@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-5.0.0.tgz#5b9383bc12c2c394f228b7771469c8aac3cb7bff" + integrity sha512-mLfQFpX3/5y9oWi0b+9FbWDkL2hM0Y29653beCHiHxAdGyVgb2DsJbK74WkMTwtSz9by8vyBh8jGPZcg1yLZbQ== + "@oxc-resolver/binding-wasm32-wasi@1.10.2": version "1.10.2" resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-1.10.2.tgz#ed3c49f4887a765503f589bb8b95e9c8d5369adb" @@ -1971,16 +2019,33 @@ dependencies: "@napi-rs/wasm-runtime" "^0.2.4" +"@oxc-resolver/binding-wasm32-wasi@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-5.0.0.tgz#cb7ad0e966b3d746f2c8ea98660a2558d2db9057" + integrity sha512-uEhsAZSo65qsRi6+IfBTEUUFbjg7T2yruJeLYpFfEATpm3ory5Mgo5vx3L0c2/Cz1OUZXBgp3A8x6VMUB2jT2A== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.7" + "@oxc-resolver/binding-win32-arm64-msvc@1.10.2": version "1.10.2" resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.10.2.tgz#bea966a1ab09d1a8b2823abf488ba1e213a619b7" integrity sha512-aVoj2V+jmQ1N+lVy9AhaLmzssJM0lcKt8D0UL83aNLZJ5lSN7hgBuUXTVmL+VF268f167khjo38z+fbELDVm8Q== +"@oxc-resolver/binding-win32-arm64-msvc@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-5.0.0.tgz#44422b316f744dbd904254ee4fbdd2cd0444f613" + integrity sha512-8DbSso9Jp1ns8AYuZFXdRfAcdJrzZwkFm/RjPuvAPTENsm685dosBF8G6gTHQlHvULnk6o3sa9ygZaTGC/UoEw== + "@oxc-resolver/binding-win32-x64-msvc@1.10.2": version "1.10.2" resolved "https://registry.yarnpkg.com/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.10.2.tgz#b43deb60fac0b13add5a259fac3c8fdfffd7333c" integrity sha512-l8BDQWyP0Piw8hlmYPUqTRKLsq+ceG9h+9p6ZrjNzwW9AmJX7T7T2hgoVVHqS6f4WNA/CFkb3RyZP9QTzNkyyA== +"@oxc-resolver/binding-win32-x64-msvc@5.0.0": + version "5.0.0" + resolved "https://registry.npmmirror.com/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-5.0.0.tgz#1575b4aaf6f46faf5b95003be2a5dfd8ea1e10e0" + integrity sha512-ylppfPEg63NuRXOPNsXFlgyl37JrtRn0QMO26X3K3Ytp5HtLrMreQMGVtgr30e1l2YmAWqhvmKlCryOqzGPD/g== + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -3421,14 +3486,6 @@ enhanced-resolve@^5.12.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enhanced-resolve@^5.17.1: - version "5.17.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" - integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - enquirer@^2.3.0: version "2.4.1" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" @@ -5711,6 +5768,23 @@ oxc-resolver@^1.10.2: "@oxc-resolver/binding-win32-arm64-msvc" "1.10.2" "@oxc-resolver/binding-win32-x64-msvc" "1.10.2" +oxc-resolver@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/oxc-resolver/-/oxc-resolver-5.0.0.tgz#8aac10775e45f8656393bf9b90dda0f1b2f507cd" + integrity sha512-66fopyAqCN8Mx4tzNiBXWbk8asCSuxUWN62gwTc3yfRs7JfWhX/eVJCf+fUrfbNOdQVOWn+o8pAKllp76ysMXA== + optionalDependencies: + "@oxc-resolver/binding-darwin-arm64" "5.0.0" + "@oxc-resolver/binding-darwin-x64" "5.0.0" + "@oxc-resolver/binding-freebsd-x64" "5.0.0" + "@oxc-resolver/binding-linux-arm-gnueabihf" "5.0.0" + "@oxc-resolver/binding-linux-arm64-gnu" "5.0.0" + "@oxc-resolver/binding-linux-arm64-musl" "5.0.0" + "@oxc-resolver/binding-linux-x64-gnu" "5.0.0" + "@oxc-resolver/binding-linux-x64-musl" "5.0.0" + "@oxc-resolver/binding-wasm32-wasi" "5.0.0" + "@oxc-resolver/binding-win32-arm64-msvc" "5.0.0" + "@oxc-resolver/binding-win32-x64-msvc" "5.0.0" + p-filter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" @@ -5813,6 +5887,11 @@ path-scurry@^1.10.1: lru-cache "^9.1.1 || ^10.0.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-serializer@^0.3.4: + version "0.3.4" + resolved "https://registry.npmmirror.com/path-serializer/-/path-serializer-0.3.4.tgz#d7bd46f3509b5d998a2a18fc083f67e0a337900f" + integrity sha512-bqNF6KKbFn2hrTgybBTqAqjKOneLvpFmvYx43ppm8IcmfgYLh4aMmR35+GnnKYdd0l6gtBlaok+aRR0PSwtGaQ== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"