From 3cfffaad10f1007a471727c7b070ccf66d9269bb Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Fri, 6 Feb 2026 15:59:22 +0100 Subject: [PATCH] perf: save node_modules/.modules.yaml in JSON format (#10406) --- .changeset/curvy-baboons-refuse.md | 5 + .changeset/tender-times-hug.md | 5 + fs/graceful-fs/src/index.ts | 1 + pkg-manager/core/src/install/index.ts | 2 - pkg-manager/headless/src/index.ts | 2 - pkg-manager/modules-yaml/package.json | 4 +- pkg-manager/modules-yaml/src/index.ts | 24 +-- pkg-manager/modules-yaml/test/index.ts | 31 +--- pkg-manager/modules-yaml/tsconfig.json | 3 + pnpm-lock.yaml | 208 +++++++++++++++++++++---- 10 files changed, 197 insertions(+), 88 deletions(-) create mode 100644 .changeset/curvy-baboons-refuse.md create mode 100644 .changeset/tender-times-hug.md diff --git a/.changeset/curvy-baboons-refuse.md b/.changeset/curvy-baboons-refuse.md new file mode 100644 index 0000000000..4d1ad65e71 --- /dev/null +++ b/.changeset/curvy-baboons-refuse.md @@ -0,0 +1,5 @@ +--- +"@pnpm/modules-yaml": major +--- + +Remove options from writeModulesManifest. diff --git a/.changeset/tender-times-hug.md b/.changeset/tender-times-hug.md new file mode 100644 index 0000000000..3ccb90d185 --- /dev/null +++ b/.changeset/tender-times-hug.md @@ -0,0 +1,5 @@ +--- +"@pnpm/modules-yaml": minor +--- + +Save node_modules/.modules.yaml in JSON format. diff --git a/fs/graceful-fs/src/index.ts b/fs/graceful-fs/src/index.ts index 0f0cfac697..cb26232637 100644 --- a/fs/graceful-fs/src/index.ts +++ b/fs/graceful-fs/src/index.ts @@ -7,6 +7,7 @@ export default { // eslint-disable-line createReadStream: gfs.createReadStream, link: promisify(gfs.link), linkSync: withEagainRetry(gfs.linkSync), + mkdir: promisify(gfs.mkdir), mkdirSync: withEagainRetry(gfs.mkdirSync), renameSync: withEagainRetry(gfs.renameSync), readFile: promisify(gfs.readFile), diff --git a/pkg-manager/core/src/install/index.ts b/pkg-manager/core/src/install/index.ts index ca4bf10da1..39ae0d59eb 100644 --- a/pkg-manager/core/src/install/index.ts +++ b/pkg-manager/core/src/install/index.ts @@ -1511,8 +1511,6 @@ const _installInContext: InstallFunction = async (projects, ctx, opts) => { storeDir: ctx.storeDir, virtualStoreDir: ctx.virtualStoreDir, virtualStoreDirMaxLength: ctx.virtualStoreDirMaxLength, - }, { - makeModulesDir: Object.keys(result.currentLockfile.packages ?? {}).length > 0, }) })(), ]) diff --git a/pkg-manager/headless/src/index.ts b/pkg-manager/headless/src/index.ts index c7efbe1f1f..9dc02ca73e 100644 --- a/pkg-manager/headless/src/index.ts +++ b/pkg-manager/headless/src/index.ts @@ -633,8 +633,6 @@ export async function headlessInstall (opts: HeadlessOptions): Promise 0, }) const currentLockfileDir = path.join(rootModulesDir, '.pnpm') if (opts.useLockfile) { diff --git a/pkg-manager/modules-yaml/package.json b/pkg-manager/modules-yaml/package.json index 49fd376270..69decfcead 100644 --- a/pkg-manager/modules-yaml/package.json +++ b/pkg-manager/modules-yaml/package.json @@ -33,11 +33,11 @@ "compile": "tsgo --build && pnpm run lint --fix" }, "dependencies": { + "@pnpm/graceful-fs": "workspace:*", "@pnpm/types": "workspace:*", "is-windows": "catalog:", "ramda": "catalog:", - "read-yaml-file": "catalog:", - "write-yaml-file": "catalog:" + "read-yaml-file": "catalog:" }, "devDependencies": { "@pnpm/modules-yaml": "workspace:*", diff --git a/pkg-manager/modules-yaml/src/index.ts b/pkg-manager/modules-yaml/src/index.ts index 5b0f65fe96..ca972546bc 100644 --- a/pkg-manager/modules-yaml/src/index.ts +++ b/pkg-manager/modules-yaml/src/index.ts @@ -1,4 +1,5 @@ import path from 'path' +import fs from '@pnpm/graceful-fs' import { type DepPath, type DependenciesField, @@ -9,7 +10,6 @@ import { import readYamlFile from 'read-yaml-file' import { map as mapValues } from 'ramda' import isWindows from 'is-windows' -import writeYamlFile from 'write-yaml-file' // The dot prefix is needed because otherwise `npm shrinkwrap` // thinks that it is an extraneous package. @@ -102,23 +102,13 @@ export async function readModulesManifest (modulesDir: string): Promise { const modulesYamlPath = path.join(modulesDir, MODULES_FILENAME) const saveModules = { ...modules, ignoredBuilds: modules.ignoredBuilds ? Array.from(modules.ignoredBuilds) : undefined } @@ -141,12 +131,6 @@ export async function writeModulesManifest ( if (!isWindows()) { saveModules.virtualStoreDir = path.relative(modulesDir, saveModules.virtualStoreDir) } - try { - await writeYamlFile(modulesYamlPath, saveModules, { - ...YAML_OPTS, - makeDir: opts?.makeModulesDir ?? false, - }) - } catch (err: any) { // eslint-disable-line - if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err - } + await fs.mkdir(modulesDir, { recursive: true }) + await fs.writeFile(modulesYamlPath, JSON.stringify(saveModules, null, 2)) } diff --git a/pkg-manager/modules-yaml/test/index.ts b/pkg-manager/modules-yaml/test/index.ts index b0433c0fec..8d5c3b0d17 100644 --- a/pkg-manager/modules-yaml/test/index.ts +++ b/pkg-manager/modules-yaml/test/index.ts @@ -1,5 +1,4 @@ /// -import fs from 'fs' import path from 'path' import { readModulesManifest, writeModulesManifest, type StrictModules } from '@pnpm/modules-yaml' import { sync as readYamlFile } from 'read-yaml-file' @@ -64,7 +63,7 @@ test('backward compatible read of .modules.yaml created with shamefully-hoist=fa }) }) -test('readModulesManifest() should not create a node_modules directory if it does not exist', async () => { +test('readModulesManifest() should create a node_modules directory', async () => { const modulesDir = path.join(temporaryDirectory(), 'node_modules') const modulesYaml: StrictModules = { hoistedDependencies: {}, @@ -89,34 +88,6 @@ test('readModulesManifest() should not create a node_modules directory if it doe virtualStoreDirMaxLength: 120, } await writeModulesManifest(modulesDir, modulesYaml) - expect(fs.existsSync(modulesDir)).toBeFalsy() -}) - -test('readModulesManifest() should create a node_modules directory if makeModuleDir is set to true', async () => { - const modulesDir = path.join(temporaryDirectory(), 'node_modules') - const modulesYaml: StrictModules = { - hoistedDependencies: {}, - included: { - dependencies: true, - devDependencies: true, - optionalDependencies: true, - }, - ignoredBuilds: new Set(), - layoutVersion: 1, - packageManager: 'pnpm@2', - pendingBuilds: [], - publicHoistPattern: [], - prunedAt: new Date().toUTCString(), - registries: { - default: 'https://registry.npmjs.org/', - }, - shamefullyHoist: false, - skipped: [], - storeDir: '/.pnpm-store', - virtualStoreDir: path.join(modulesDir, '.pnpm'), - virtualStoreDirMaxLength: 120, - } - await writeModulesManifest(modulesDir, modulesYaml, { makeModulesDir: true }) expect(await readModulesManifest(modulesDir)).toEqual(modulesYaml) }) diff --git a/pkg-manager/modules-yaml/tsconfig.json b/pkg-manager/modules-yaml/tsconfig.json index d37dd6eefe..b998d9e2d4 100644 --- a/pkg-manager/modules-yaml/tsconfig.json +++ b/pkg-manager/modules-yaml/tsconfig.json @@ -9,6 +9,9 @@ "../../__typings__/**/*.d.ts" ], "references": [ + { + "path": "../../fs/graceful-fs" + }, { "path": "../../packages/types" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 05828a1122..42efcc2849 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -886,7 +886,7 @@ importers: version: 9.1.7 jest: specifier: 'catalog:' - version: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8) + version: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)) keyv: specifier: 'catalog:' version: 4.5.4 @@ -904,7 +904,7 @@ importers: version: 0.4.0 ts-jest: specifier: 'catalog:' - version: 29.4.1(@babel/core@7.29.0)(@jest/transform@30.2.0(@babel/types@7.29.0))(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.29.0)(@babel/types@7.29.0))(jest-util@30.2.0)(jest@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8))(typescript@5.9.2) + version: 29.4.1(@babel/core@7.29.0)(@jest/transform@30.2.0(@babel/types@7.29.0))(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.29.0)(@babel/types@7.29.0))(jest-util@30.2.0)(jest@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)))(typescript@5.9.2) typescript: specifier: 'catalog:' version: 5.9.2 @@ -1076,7 +1076,7 @@ importers: version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2) eslint-plugin-jest: specifier: 'catalog:' - version: 29.12.1(@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.2(jiti@2.6.1))(jest@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8))(typescript@5.9.2) + version: 29.12.1(@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.2(jiti@2.6.1))(jest@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)))(typescript@5.9.2) __utils__/get-release-text: dependencies: @@ -5707,6 +5707,9 @@ importers: pkg-manager/modules-yaml: dependencies: + '@pnpm/graceful-fs': + specifier: workspace:* + version: link:../../fs/graceful-fs '@pnpm/types': specifier: workspace:* version: link:../../packages/types @@ -5719,9 +5722,6 @@ importers: read-yaml-file: specifier: 'catalog:' version: 2.1.0 - write-yaml-file: - specifier: 'catalog:' - version: 5.0.0 devDependencies: '@pnpm/modules-yaml': specifier: workspace:* @@ -9713,6 +9713,10 @@ packages: resolution: {integrity: sha512-plB0wwdAESqBl4xDAT2db2/K1FZHJXfYlJTiV6pkn0XffTGyg4UGLaSCm15NzUoPxdSmzqj5jQb7y+mB9kFK8g==} engines: {node: '>=20'} + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + '@cypress/request@3.0.9': resolution: {integrity: sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==} engines: {node: '>= 6'} @@ -10122,6 +10126,9 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -10832,6 +10839,18 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} + '@tsconfig/node10@1.0.12': + resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -11441,6 +11460,10 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -11549,6 +11572,9 @@ packages: resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} deprecated: This package is no longer supported. + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -12126,6 +12152,9 @@ packages: typescript: optional: true + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cross-env@10.1.0: resolution: {integrity: sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==} engines: {node: '>=20'} @@ -15955,6 +15984,20 @@ packages: jest-util: optional: true + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + ts-toolbelt@9.6.0: resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} @@ -16196,6 +16239,9 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + v8-compile-cache@2.4.0: resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} @@ -16471,6 +16517,10 @@ packages: yazl@3.3.1: resolution: {integrity: sha512-BbETDVWG+VcMUle37k5Fqp//7SDOK2/1+T7X8TD96M3D9G8jK5VLUdQVdVjGi8im7FGkazX7kk5hkU8X4L5Bng==} + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -17242,6 +17292,11 @@ snapshots: '@cspell/url@9.2.0': {} + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + optional: true + '@cypress/request@3.0.9': dependencies: aws-sign2: 0.7.0 @@ -17465,7 +17520,7 @@ snapshots: jest-util: 30.2.0 slash: 3.0.0 - '@jest/core@30.2.0(@babel/types@7.29.0)': + '@jest/core@30.2.0(@babel/types@7.29.0)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2))': dependencies: '@jest/console': 30.2.0 '@jest/pattern': 30.0.1 @@ -17473,14 +17528,14 @@ snapshots: '@jest/test-result': 30.2.0 '@jest/transform': 30.2.0(@babel/types@7.29.0) '@jest/types': 30.2.0 - '@types/node': 22.19.8 + '@types/node': 25.2.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 4.4.0 exit-x: 0.2.2 graceful-fs: 4.2.11(patch_hash=68ebc232025360cb3dcd3081f4067f4e9fc022ab6b6f71a3230e86c7a5b337d1) jest-changed-files: 30.2.0 - jest-config: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8) + jest-config: 30.2.0(@babel/types@7.29.0)(@types/node@25.2.0)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)) jest-haste-map: 30.2.0 jest-message-util: 30.2.0 jest-regex-util: 30.0.1 @@ -17723,7 +17778,7 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.19.8 + '@types/node': 25.2.0 '@types/yargs': 17.0.35 chalk: 4.1.2 @@ -17746,6 +17801,12 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + optional: true + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.28.6 @@ -19266,6 +19327,18 @@ snapshots: dependencies: defer-to-connect: 2.0.1 + '@tsconfig/node10@1.0.12': + optional: true + + '@tsconfig/node12@1.0.11': + optional: true + + '@tsconfig/node14@1.0.3': + optional: true + + '@tsconfig/node16@1.0.4': + optional: true + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -19349,7 +19422,7 @@ snapshots: '@types/isexe@2.0.2': dependencies: - '@types/node': 22.19.8 + '@types/node': 25.2.0 '@types/istanbul-lib-coverage@2.0.6': {} @@ -19461,7 +19534,7 @@ snapshots: '@types/touch@3.1.5': dependencies: - '@types/node': 22.19.8 + '@types/node': 25.2.0 '@types/treeify@1.0.3': {} @@ -19854,7 +19927,7 @@ snapshots: '@yarnpkg/core@4.2.0(typanion@3.14.0)': dependencies: '@arcanis/slice-ansi': 1.1.1 - '@types/semver': 7.5.3 + '@types/semver': 7.7.1 '@types/treeify': 1.0.3 '@yarnpkg/fslib': 3.1.4 '@yarnpkg/libzip': 3.2.2(@yarnpkg/fslib@3.1.4) @@ -20041,13 +20114,18 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 + optional: true + acorn@8.15.0: {} adm-zip@0.5.16: {} agent-base@6.0.2: dependencies: - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -20157,6 +20235,9 @@ snapshots: readable-stream: 2.3.8 optional: true + arg@4.1.3: + optional: true + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -20664,7 +20745,7 @@ snapshots: dependencies: bytes: 3.1.2 compressible: 2.0.18 - debug: 4.4.1 + debug: 4.4.3 negotiator: 0.6.4 on-headers: 1.1.0 safe-buffer: 5.2.1 @@ -20754,6 +20835,9 @@ snapshots: optionalDependencies: typescript: 5.9.2 + create-require@1.1.1: + optional: true + cross-env@10.1.0: dependencies: '@epic-web/invariant': 1.0.0 @@ -21261,13 +21345,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jest@29.12.1(@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.2(jiti@2.6.1))(jest@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8))(typescript@5.9.2): + eslint-plugin-jest@29.12.1(@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.2(jiti@2.6.1))(jest@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)))(typescript@5.9.2): dependencies: '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2) eslint: 9.39.2(jiti@2.6.1) optionalDependencies: '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.2) - jest: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8) + jest: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)) transitivePeerDependencies: - supports-color - typescript @@ -21448,7 +21532,7 @@ snapshots: content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.0.7 - debug: 4.4.1 + debug: 4.4.3 depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 @@ -21549,7 +21633,7 @@ snapshots: finalhandler@1.3.2: dependencies: - debug: 4.4.1 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -22081,7 +22165,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -22493,15 +22577,15 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8): + jest-cli@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)): dependencies: - '@jest/core': 30.2.0(@babel/types@7.29.0) + '@jest/core': 30.2.0(@babel/types@7.29.0)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)) '@jest/test-result': 30.2.0 '@jest/types': 30.2.0 chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8) + jest-config: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)) jest-util: 30.2.0 jest-validate: 30.2.0 yargs: 17.7.2 @@ -22513,7 +22597,7 @@ snapshots: - supports-color - ts-node - jest-config@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8): + jest-config@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)): dependencies: '@babel/core': 7.29.0 '@jest/get-type': 30.1.0 @@ -22541,6 +22625,41 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 22.19.8 + ts-node: 10.9.2(@types/node@22.19.8)(typescript@5.9.2) + transitivePeerDependencies: + - '@babel/types' + - babel-plugin-macros + - supports-color + + jest-config@30.2.0(@babel/types@7.29.0)(@types/node@25.2.0)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)): + dependencies: + '@babel/core': 7.29.0 + '@jest/get-type': 30.1.0 + '@jest/pattern': 30.0.1 + '@jest/test-sequencer': 30.2.0 + '@jest/types': 30.2.0 + babel-jest: 30.2.0(@babel/core@7.29.0)(@babel/types@7.29.0) + chalk: 4.1.2 + ci-info: 4.4.0 + deepmerge: 4.3.1 + glob: 11.1.0 + graceful-fs: 4.2.11(patch_hash=68ebc232025360cb3dcd3081f4067f4e9fc022ab6b6f71a3230e86c7a5b337d1) + jest-circus: 30.2.0(@babel/types@7.29.0) + jest-docblock: 30.2.0 + jest-environment-node: 30.2.0 + jest-regex-util: 30.0.1 + jest-resolve: 30.2.0 + jest-runner: 30.2.0(@babel/types@7.29.0) + jest-util: 30.2.0 + jest-validate: 30.2.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 30.2.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 25.2.0 + ts-node: 10.9.2(@types/node@22.19.8)(typescript@5.9.2) transitivePeerDependencies: - '@babel/types' - babel-plugin-macros @@ -22914,12 +23033,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8): + jest@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)): dependencies: - '@jest/core': 30.2.0(@babel/types@7.29.0) + '@jest/core': 30.2.0(@babel/types@7.29.0)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)) '@jest/types': 30.2.0 import-local: 3.2.0 - jest-cli: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8) + jest-cli: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)) transitivePeerDependencies: - '@babel/types' - '@types/node' @@ -22982,7 +23101,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.2 + semver: 7.7.3 jsprim@2.0.2: dependencies: @@ -24499,7 +24618,7 @@ snapshots: send@0.19.2: dependencies: - debug: 4.4.1 + debug: 4.4.3 depd: 2.0.0 destroy: 1.2.0 encodeurl: 2.0.0 @@ -25122,12 +25241,12 @@ snapshots: dependencies: jest-resolve: 29.7.0 - ts-jest@29.4.1(@babel/core@7.29.0)(@jest/transform@30.2.0(@babel/types@7.29.0))(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.29.0)(@babel/types@7.29.0))(jest-util@30.2.0)(jest@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8))(typescript@5.9.2): + ts-jest@29.4.1(@babel/core@7.29.0)(@jest/transform@30.2.0(@babel/types@7.29.0))(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.29.0)(@babel/types@7.29.0))(jest-util@30.2.0)(jest@30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)))(typescript@5.9.2): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.8 - jest: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8) + jest: 30.2.0(@babel/types@7.29.0)(@types/node@22.19.8)(ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -25142,6 +25261,25 @@ snapshots: babel-jest: 30.2.0(@babel/core@7.29.0)(@babel/types@7.29.0) jest-util: 30.2.0 + ts-node@10.9.2(@types/node@22.19.8)(typescript@5.9.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.12 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.19.8 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 8.0.3 + make-error: 1.3.6 + typescript: 5.9.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + ts-toolbelt@9.6.0: {} tslib@2.8.1: {} @@ -25385,6 +25523,9 @@ snapshots: uuid@9.0.1: {} + v8-compile-cache-lib@3.0.1: + optional: true + v8-compile-cache@2.4.0: {} v8-to-istanbul@9.3.0: @@ -25634,7 +25775,7 @@ snapshots: wide-align@1.1.5: dependencies: - string-width: 1.0.2 + string-width: 4.2.3 optional: true widest-line@3.1.0: @@ -25805,6 +25946,9 @@ snapshots: dependencies: buffer-crc32: 1.0.0 + yn@3.1.1: + optional: true + yocto-queue@0.1.0: {} yocto-queue@1.2.2: {}