diff --git a/package.json b/package.json index 6d7724a..a4aa052 100644 --- a/package.json +++ b/package.json @@ -29,85 +29,85 @@ "exports": { "./core": { "import": { - "types": "./dist/esm/core.d.mts", + "types": "./dist/esm/core.d.ts", "default": "./dist/esm/core.mjs" }, "require": { - "types": "./dist/cjs/core.d.cts", + "types": "./dist/cjs/core.d.ts", "default": "./dist/cjs/core.cjs" } }, "./rollup": { "import": { - "types": "./dist/esm/rollup.d.mts", + "types": "./dist/esm/rollup.d.ts", "default": "./dist/esm/rollup.mjs" }, "require": { - "types": "./dist/cjs/rollup.d.cts", + "types": "./dist/cjs/rollup.d.ts", "default": "./dist/cjs/rollup.cjs" } }, "./webpack": { "import": { - "types": "./dist/esm/webpack.d.mts", + "types": "./dist/esm/webpack.d.ts", "default": "./dist/esm/webpack.mjs" }, "require": { - "types": "./dist/cjs/webpack.d.cts", + "types": "./dist/cjs/webpack.d.ts", "default": "./dist/cjs/webpack.cjs" } }, "./vite": { "import": { - "types": "./dist/esm/vite.d.mts", + "types": "./dist/esm/vite.d.ts", "default": "./dist/esm/vite.mjs" }, "require": { - "types": "./dist/cjs/vite.d.cts", + "types": "./dist/cjs/vite.d.ts", "default": "./dist/cjs/vite.cjs" } }, "./esbuild": { "import": { - "types": "./dist/esm/esbuild.d.mts", + "types": "./dist/esm/esbuild.d.ts", "default": "./dist/esm/esbuild.mjs" }, "require": { - "types": "./dist/cjs/esbuild.d.cts", + "types": "./dist/cjs/esbuild.d.ts", "default": "./dist/cjs/esbuild.cjs" } }, "./bun": { - "types": "./dist/esm/bun.d.mts", + "types": "./dist/esm/bun.d.ts", "default": "./dist/esm/bun.mjs" }, "./webpack-loader": { - "types": "./dist/cjs/webpack-loader.d.cts", + "types": "./dist/cjs/webpack-loader.d.ts", "default": "./dist/cjs/webpack-loader.cjs" } }, "typesVersions": { "*": { "core": [ - "./dist/types/core.d.ts" + "./dist/esm/core.d.ts" ], "rollup": [ - "./dist/types/rollup.d.ts" + "./dist/esm/rollup.d.ts" ], "webpack": [ - "./dist/types/webpack.d.ts" + "./dist/esm/webpack.d.ts" ], "vite": [ - "./dist/types/vite.d.ts" + "./dist/esm/vite.d.ts" ], "esbuild": [ - "./dist/types/esbuild.d.ts" + "./dist/esm/esbuild.d.ts" ], "bun": [ - "./dist/types/bun.d.ts" + "./dist/esm/bun.d.ts" ], "webpack-loader": [ - "./dist/types/webpack-loader.d.ts" + "./dist/esm/webpack-loader.d.ts" ] } }, @@ -120,18 +120,17 @@ "dependencies": { "@apm-js-collab/code-transformer": "^0.18.0", "es-module-lexer": "^2.1.0", - "module-details-from-path": "^1.0.4", - "magic-string": "^0.30.21" + "magic-string": "^0.30.21", + "module-details-from-path": "^1.0.4" }, "devDependencies": { - "@types/node": "^20.10.4", - "meriyah": "^6.1.4", "@types/bun": "^1.3.14", + "@types/node": "^20.10.4", "esbuild": "^0.28.1", + "meriyah": "^6.1.4", "rollup": "^4.62.0", "tslib": "^2.6.2", "typescript": "^6.0.3", - "unplugin-dts": "^1.0.1", "vite": "^8.0.16", "vitest": "^4.1.9", "webpack": "^5.107.2" diff --git a/src/bun.ts b/src/bun.ts index 9f1c158..aa92c2c 100644 --- a/src/bun.ts +++ b/src/bun.ts @@ -3,7 +3,7 @@ import { createCodeTransformer, isJsFile, type CodeTransformerPluginOptions, -} from './core'; +} from './core.js'; import type { Plugin } from 'esbuild'; /** @@ -117,4 +117,4 @@ export default function codeTransformerBun( }; } -export type { CodeTransformerPluginOptions } from './core'; +export type { CodeTransformerPluginOptions } from './core.js'; diff --git a/src/core.ts b/src/core.ts index 86bf20c..78eebee 100644 --- a/src/core.ts +++ b/src/core.ts @@ -257,9 +257,9 @@ export type { CustomTransform, InstrumentationConfig, ModuleMatcher, FunctionBeh // Keep type and value exports in separate statements: inline `type` modifiers // in a mixed export emit TS 4.5+ syntax into the declarations, which breaks // consumers type-checking with older TypeScript. -export { serializeInstrumentations, deserializeInstrumentations } from './instrumentation-serde'; +export { serializeInstrumentations, deserializeInstrumentations } from './instrumentation-serde.js'; export type { SerializedRegExp, SerializableInstrumentationConfig, AnyInstrumentationConfig, -} from './instrumentation-serde'; +} from './instrumentation-serde.js'; diff --git a/src/esbuild.ts b/src/esbuild.ts index a0eb6c4..6703993 100644 --- a/src/esbuild.ts +++ b/src/esbuild.ts @@ -5,7 +5,7 @@ import { createCodeTransformer, isJsFile, type CodeTransformerPluginOptions, -} from './core'; +} from './core.js'; const filter = /\.(cjs|mjs|cts|mts|tsx|jsx|ts|js)$/; @@ -170,4 +170,4 @@ export default function codeTransformerEsbuild( }; } -export type { CodeTransformerPluginOptions } from './core'; +export type { CodeTransformerPluginOptions } from './core.js'; diff --git a/src/rollup.ts b/src/rollup.ts index 1c5a0b5..6c743c9 100644 --- a/src/rollup.ts +++ b/src/rollup.ts @@ -5,7 +5,7 @@ import { isJsFile, shouldSkipCodeInjection, type CodeTransformerPluginOptions, -} from "./core"; +} from "./core.js"; import MagicString, { SourceMap } from "magic-string"; export default function codeTransformerRollup( @@ -124,4 +124,4 @@ export default function codeTransformerRollup( }; } -export type { CodeTransformerPluginOptions } from "./core"; +export type { CodeTransformerPluginOptions } from "./core.js"; diff --git a/src/vite.ts b/src/vite.ts index d8b5583..f9ab529 100644 --- a/src/vite.ts +++ b/src/vite.ts @@ -1,6 +1,6 @@ import type { Plugin } from 'vite'; -import type { CodeTransformerPluginOptions } from './core'; -import codeTransformerRollup from './rollup'; // Ensure rollup types are included for TransformResult +import type { CodeTransformerPluginOptions } from './core.js'; +import codeTransformerRollup from './rollup.js'; // Ensure rollup types are included for TransformResult export default function codeTransformerVite( options: CodeTransformerPluginOptions, @@ -11,4 +11,4 @@ export default function codeTransformerVite( }; } -export type { CodeTransformerPluginOptions } from './core'; +export type { CodeTransformerPluginOptions } from './core.js'; diff --git a/src/webpack-loader.ts b/src/webpack-loader.ts index 500c1c4..cd909f5 100644 --- a/src/webpack-loader.ts +++ b/src/webpack-loader.ts @@ -6,7 +6,7 @@ import { deserializeInstrumentations, serializeInstrumentations, type AnyInstrumentationConfig, -} from './instrumentation-serde'; +} from './instrumentation-serde.js'; // Handle CJS default export - module-details-from-path exports a function directly const moduleDetailsFromPath = (moduleDetailsFromPathImport as any).default || moduleDetailsFromPathImport as any; diff --git a/src/webpack.ts b/src/webpack.ts index 9247e40..dae7001 100644 --- a/src/webpack.ts +++ b/src/webpack.ts @@ -3,8 +3,8 @@ import { fileURLToPath } from 'url'; import { dirname, resolve } from 'path'; import { type CodeTransformerPluginOptions, -} from './core'; -import { serializeInstrumentations } from './instrumentation-serde'; +} from './core.js'; +import { serializeInstrumentations } from './instrumentation-serde.js'; const __dirname = dirname(fileURLToPath(import.meta.url)); @@ -121,4 +121,4 @@ export default function codeTransformerWebpack( return new CodeTransformerWebpackPlugin(options); } -export type { CodeTransformerPluginOptions } from './core'; +export type { CodeTransformerPluginOptions } from './core.js'; diff --git a/test/type-resolution.test.ts b/test/type-resolution.test.ts new file mode 100644 index 0000000..ba95758 --- /dev/null +++ b/test/type-resolution.test.ts @@ -0,0 +1,141 @@ +import { describe, it, expect, beforeAll, afterAll } from 'vitest'; +import { + mkdtempSync, + mkdirSync, + writeFileSync, + symlinkSync, + unlinkSync, + rmSync, + existsSync, +} from 'fs'; +import { join, dirname } from 'path'; +import { spawnSync } from 'child_process'; +import { fileURLToPath } from 'url'; +import { createRequire } from 'module'; + +// Regression tests for https://github.com/apm-js-collab/code-transformer-bundler-plugins/issues/40 +// +// The published declarations must reference their sibling modules with explicit +// extensions, otherwise they fail to resolve under TypeScript's Node16/NodeNext +// module resolution with `error TS2307: Cannot find module` (or `TS2834`). +// These tests type-check a consumer that imports every advertised subpath under +// each resolution mode. + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const root = join(__dirname, '..'); +const tsc = createRequire(import.meta.url).resolve('typescript/bin/tsc'); + +const PKG = '@apm-js-collab/code-transformer-bundler-plugins'; +const ALL_SUBPATHS = ['core', 'rollup', 'webpack', 'vite', 'esbuild', 'bun', 'webpack-loader'] as const; + +// `vite` ships `exports`-only type declarations that legacy `node10` resolution +// cannot follow, so the `/vite` subpath's peer types are unresolvable there — +// a limitation of vite itself, not of our declarations (which resolve fine). +const NODE10_SUBPATHS = ALL_SUBPATHS.filter((s) => s !== 'vite'); + +// A consumer module that imports (and references) each subpath, so an +// unresolved declaration surfaces as a hard error rather than being elided. +function consumerFor(subpaths: readonly string[]): string { + return ( + subpaths.map((s, i) => `import * as m${i} from '${PKG}/${s}';`).join('\n') + + `\nexport const used = [${subpaths.map((_, i) => `m${i}`).join(', ')}];\n` + ); +} + +// `skipLibCheck: false` is essential: issue #40's TS2307 originates inside the +// package's own declaration files, which `skipLibCheck: true` would hide. +const baseCompilerOptions = { + target: 'esnext', + strict: true, + skipLibCheck: false, + esModuleInterop: true, + types: ['node'], + noEmit: true, +}; + +const modes = [ + // Node16/NodeNext — the resolution that broke in #40. `.mts` exercises the + // `import` condition; `.cts` exercises `require`. + { + name: 'nodenext', + compilerOptions: { ...baseCompilerOptions, module: 'nodenext' }, + files: ['consumer.mts', 'consumer.cts'], + subpaths: ALL_SUBPATHS, + }, + { + name: 'bundler', + compilerOptions: { ...baseCompilerOptions, module: 'esnext', moduleResolution: 'bundler' }, + files: ['consumer.ts'], + subpaths: ALL_SUBPATHS, + }, + // Legacy resolution routes subpaths through `typesVersions` → the `.d.ts` + // files. `ignoreDeprecations` silences TS6's non-fatal `node10` deprecation + // warning so the mode actually runs; TS7 removes `node10` outright, which + // the skip below detects. + { + name: 'node10', + compilerOptions: { + ...baseCompilerOptions, + module: 'commonjs', + moduleResolution: 'node10', + ignoreDeprecations: '6.0', + }, + files: ['consumer.ts'], + subpaths: NODE10_SUBPATHS, + }, +]; + +let fixture: string; +let symlink: string; + +beforeAll(() => { + expect( + existsSync(join(root, 'dist/esm/core.d.ts')), + 'Declarations are missing — run `yarn build` before the tests.', + ).toBe(true); + + // The fixture lives under the repo's own node_modules so that `@types/node` + // and `@apm-js-collab/code-transformer` resolve up the tree, exactly as + // they would for a real installed consumer. + fixture = mkdtempSync(join(root, 'node_modules', '.type-resolution-')); + + // Symlink the package into place so resolution flows through package.json + // `exports` / `typesVersions` rather than a `paths` alias — that routing is + // precisely what we are testing. + const scope = join(fixture, 'node_modules', '@apm-js-collab'); + mkdirSync(scope, { recursive: true }); + symlink = join(scope, 'code-transformer-bundler-plugins'); + symlinkSync(root, symlink, process.platform === 'win32' ? 'junction' : 'dir'); +}); + +afterAll(() => { + // Unlink the symlink explicitly first so cleanup can never recurse into the + // repo it points at. + if (symlink && existsSync(symlink)) unlinkSync(symlink); + if (fixture) rmSync(fixture, { recursive: true, force: true }); +}); + +describe('published type declarations resolve for consumers', () => { + it.each(modes)('$name: every subpath type-checks cleanly', (mode) => { + const source = consumerFor(mode.subpaths); + for (const file of mode.files) writeFileSync(join(fixture, file), source); + + const tsconfig = join(fixture, `tsconfig.${mode.name}.json`); + writeFileSync( + tsconfig, + JSON.stringify({ compilerOptions: mode.compilerOptions, files: mode.files }, null, 2), + ); + + const { status, stdout, stderr } = spawnSync(process.execPath, [tsc, '-p', tsconfig], { + cwd: fixture, + encoding: 'utf8', + }); + const output = stdout + stderr; + + // `node10` was removed as a `moduleResolution` value in TypeScript 7; + // skip the mode if the installed compiler no longer accepts it. + if (/error TS510[78]|moduleResolution.*removed/.test(output)) return; + + expect(status, output).toBe(0); + }); +}); diff --git a/vite.config.ts b/vite.config.ts index d58d553..b89e1c4 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,7 +1,8 @@ -import { defineConfig } from 'vite'; -import dts from 'unplugin-dts/vite'; +import { defineConfig, type Plugin } from 'vite'; import { builtinModules } from 'module'; -import { resolve } from 'path'; +import { resolve, join } from 'path'; +import { execFileSync } from 'child_process'; +import { readdirSync, readFileSync, writeFileSync } from 'fs'; const entries = { core: 'src/core.ts', @@ -13,6 +14,63 @@ const entries = { 'webpack-loader': 'src/webpack-loader.ts', }; +/** + * Emit TypeScript declarations for the dual ESM/CJS package. + * + * The source authors relative imports with explicit `.js` extensions (the + * Node16/NodeNext convention), so `tsc`'s `.d.ts` output already resolves + * without any rewriting. We emit it once and copy it into both output + * directories: + * + * - `dist/esm` is ESM (the package is `"type": "module"`), matching `*.mjs`. + * - `dist/cjs` gets a `package.json` marker so its `.d.ts` files are treated + * as CommonJS, matching `*.cjs`. + * + * The same `.d.ts` also serves legacy `node10` resolution via `typesVersions`. + * We drive `tsc` directly: it is the canonical declaration emitter. + */ +function emitDeclarations(): Plugin { + return { + name: 'emit-declarations', + // Runs once, after Vite has written both `dist/esm` and `dist/cjs`. + closeBundle: { + sequential: true, + order: 'post', + handler() { + const esmDir = resolve(__dirname, 'dist/esm'); + const cjsDir = resolve(__dirname, 'dist/cjs'); + + // Reuse tsconfig.json (rootDir/include/strict), overriding it to + // emit declarations only, without source or declaration maps + // (the latter reference `src/`, which is not published). + execFileSync( + process.execPath, + [ + resolve(__dirname, 'node_modules/typescript/bin/tsc'), + '--project', 'tsconfig.json', + '--noEmit', 'false', + '--emitDeclarationOnly', + '--declaration', + '--declarationMap', 'false', + '--sourceMap', 'false', + '--outDir', 'dist/esm', + ], + { cwd: __dirname, stdio: 'inherit' }, + ); + + // Mark `dist/cjs` as CommonJS so the copied `.d.ts` files are + // interpreted as CJS types for the `require` condition. + writeFileSync(join(cjsDir, 'package.json'), '{ "type": "commonjs" }\n'); + + for (const name of readdirSync(esmDir)) { + if (!name.endsWith('.d.ts')) continue; + writeFileSync(join(cjsDir, name), readFileSync(join(esmDir, name))); + } + }, + }, + }; +} + export default defineConfig({ build: { target: 'node18', @@ -51,18 +109,5 @@ export default defineConfig({ ], }, }, - plugins: [ - dts({ - outDirs: [ - { dir: 'dist/esm', moduleFormat: 'esm' }, - { dir: 'dist/cjs', moduleFormat: 'cjs' }, - // Plain .d.ts copies for consumers on node10 module resolution - // (referenced from `typesVersions` in package.json). Old - // TypeScript versions cannot parse .d.mts/.d.cts extensions. - { dir: 'dist/types' }, - ], - include: ['src/**/*.ts'], - entryRoot: 'src', - }), - ], + plugins: [emitDeclarations()], }); diff --git a/yarn.lock b/yarn.lock index 8f3b82b..09cf5b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -174,14 +174,6 @@ "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/remapping@^2.3.5": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" - integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" @@ -304,15 +296,6 @@ resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz#e3fcee093fbb5ce765e1ad088ff4de2889f6f9be" integrity sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw== -"@rollup/pluginutils@^5.1.4": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.3.0.tgz#57ba1b0cbda8e7a3c597a4853c807b156e21a7b4" - integrity sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^4.0.2" - "@rollup/rollup-android-arm-eabi@4.62.0": version "4.62.0" resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.0.tgz#634b0258cc501bef2353cee09a887b434826e81f" @@ -554,27 +537,6 @@ convert-source-map "^2.0.0" tinyrainbow "^3.1.0" -"@volar/language-core@2.4.28": - version "2.4.28" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.4.28.tgz#c21f365a91c1dffe8bd7264fd491770c8d74fef3" - integrity sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ== - dependencies: - "@volar/source-map" "2.4.28" - -"@volar/source-map@2.4.28": - version "2.4.28" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.4.28.tgz#b40254e8c96199e5f1e0796777c593c617ad270e" - integrity sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ== - -"@volar/typescript@^2.4.26": - version "2.4.28" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.4.28.tgz#83f86356e84eb101b8081a44c104f2f2ced8411f" - integrity sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw== - dependencies: - "@volar/language-core" "2.4.28" - path-browserify "^1.0.1" - vscode-uri "^3.0.8" - "@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": version "1.14.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" @@ -798,33 +760,11 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -compare-versions@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" - integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== - -confbox@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" - integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== - -confbox@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.2.4.tgz#592e7be71f882a4a874e3c88f0ac1ef6f7da1ce5" - integrity sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -debug@^4.4.0: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - detect-libc@^2.0.3: version "2.1.2" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" @@ -917,11 +857,6 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - estree-walker@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" @@ -939,11 +874,6 @@ expect-type@^1.3.0: resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.3.0.tgz#0d58ed361877a31bbc4dd6cf71bbfef7faf6bd68" integrity sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA== -exsolve@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.8.tgz#7f5e34da61cd1116deda5136e62292c096f50613" - integrity sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA== - fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -993,11 +923,6 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -kolorist@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.8.0.tgz#edddbbbc7894bc13302cdf740af6374d4a04743c" - integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== - lightningcss-android-arm64@1.32.0: version "1.32.0" resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz#f033885116dfefd9c6f54787523e3514b61e1968" @@ -1077,16 +1002,7 @@ loader-runner@^4.3.2: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.2.tgz#9913d3a15971f8f635915e601fb5c9d495d918e9" integrity sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w== -local-pkg@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-1.2.1.tgz#9628389399851d78f3b50c9236eddb02f0c31b2b" - integrity sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q== - dependencies: - mlly "^1.7.4" - pkg-types "^2.3.0" - quansync "^0.2.11" - -magic-string@^0.30.17, magic-string@^0.30.21: +magic-string@^0.30.21: version "0.30.21" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== @@ -1108,26 +1024,11 @@ mime-db@^1.54.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== -mlly@^1.7.4: - version "1.8.2" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.8.2.tgz#e7f7919a82d13b174405613117249a3f449d78bb" - integrity sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA== - dependencies: - acorn "^8.16.0" - pathe "^2.0.3" - pkg-types "^1.3.1" - ufo "^1.6.3" - module-details-from-path@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.4.tgz#b662fdcd93f6c83d3f25289da0ce81c8d9685b94" integrity sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w== -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - nanoid@^3.3.12: version "3.3.12" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.12.tgz#ab3d912e217a6d0a514f00a72a16543a28982c05" @@ -1148,12 +1049,7 @@ obug@^2.1.1: resolved "https://registry.yarnpkg.com/obug/-/obug-2.1.3.tgz#c02c60f95abd603409330e767db7f2823193331e" integrity sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg== -path-browserify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -pathe@^2.0.1, pathe@^2.0.3: +pathe@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== @@ -1163,29 +1059,11 @@ picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^4.0.2, picomatch@^4.0.3, picomatch@^4.0.4: +picomatch@^4.0.3, picomatch@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589" integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== -pkg-types@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" - integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== - dependencies: - confbox "^0.1.8" - mlly "^1.7.4" - pathe "^2.0.1" - -pkg-types@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-2.3.1.tgz#fa27ed0940efcf40bba453b0e5cab41217b0d442" - integrity sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg== - dependencies: - confbox "^0.2.4" - exsolve "^1.0.8" - pathe "^2.0.3" - postcss@^8.5.15: version "8.5.15" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.15.tgz#d1eaf677a324e9ec02196da2d3fecf4a0b9a735c" @@ -1195,11 +1073,6 @@ postcss@^8.5.15: picocolors "^1.1.1" source-map-js "^1.2.1" -quansync@^0.2.11: - version "0.2.11" - resolved "https://registry.yarnpkg.com/quansync/-/quansync-0.2.11.tgz#f9c3adda2e1272e4f8cf3f1457b04cbdb4ee692a" - integrity sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA== - require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -1384,11 +1257,6 @@ typescript@^6.0.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-6.0.3.tgz#90251dc007916e972786cb94d74d15b185577d21" integrity sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw== -ufo@^1.6.3: - version "1.6.4" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.4.tgz#7a8fb875fcc6382d2c7d0b3692738b0500a92467" - integrity sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA== - "undici-types@>=7.24.0 <7.24.7": version "7.24.6" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.24.6.tgz#61275b485d7fd4e9d269c7cf04ec2873c9cc0f91" @@ -1399,30 +1267,6 @@ undici-types@~6.21.0: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -unplugin-dts@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unplugin-dts/-/unplugin-dts-1.0.1.tgz#9ffd538fad8fe887fe9c93e5920a70042fadcacb" - integrity sha512-EdJZxdWP4Tm/xhe58/zAge3Tu0OKDYygm8rucRrcCZ4XzgA31jexUKhaJuEMddOPBDs9ONnq6vwigbjeBqkfuw== - dependencies: - "@rollup/pluginutils" "^5.1.4" - "@volar/typescript" "^2.4.26" - compare-versions "^6.1.1" - debug "^4.4.0" - kolorist "^1.8.0" - local-pkg "^1.1.1" - magic-string "^0.30.17" - unplugin "^2.3.2" - -unplugin@^2.3.2: - version "2.3.11" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-2.3.11.tgz#411e020dd2ba90e2fbe1e7bd63a5a399e6ee3b54" - integrity sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww== - dependencies: - "@jridgewell/remapping" "^2.3.5" - acorn "^8.15.0" - picomatch "^4.0.3" - webpack-virtual-modules "^0.6.2" - update-browserslist-db@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" @@ -1470,11 +1314,6 @@ vitest@^4.1.9: vite "^6.0.0 || ^7.0.0 || ^8.0.0" why-is-node-running "^2.3.0" -vscode-uri@^3.0.8: - version "3.1.0" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.1.0.tgz#dd09ec5a66a38b5c3fffc774015713496d14e09c" - integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ== - watchpack@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" @@ -1488,11 +1327,6 @@ webpack-sources@^3.5.0: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.5.0.tgz#87bf7f5801a4e985b1f1c92b64b9620a02f76d08" integrity sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ== -webpack-virtual-modules@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" - integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== - webpack@^5.107.2: version "5.107.2" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.107.2.tgz#dea14dcb177b46b29de15f952f7303691ee2b596"