perf: save node_modules/.modules.yaml in JSON format (#10406)

This commit is contained in:
Zoltan Kochan
2026-02-06 15:59:22 +01:00
committed by GitHub
parent 121f64ae99
commit 3cfffaad10
10 changed files with 197 additions and 88 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/modules-yaml": major
---
Remove options from writeModulesManifest.

View File

@@ -0,0 +1,5 @@
---
"@pnpm/modules-yaml": minor
---
Save node_modules/.modules.yaml in JSON format.

View File

@@ -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),

View File

@@ -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,
})
})(),
])

View File

@@ -633,8 +633,6 @@ export async function headlessInstall (opts: HeadlessOptions): Promise<Installat
storeDir: opts.storeDir,
virtualStoreDir,
virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,
}, {
makeModulesDir: Object.keys(filteredLockfile.packages ?? {}).length > 0,
})
const currentLockfileDir = path.join(rootModulesDir, '.pnpm')
if (opts.useLockfile) {

View File

@@ -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:*",

View File

@@ -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<Modules
return modules
}
const YAML_OPTS = {
lineWidth: 1000,
noCompatMode: true,
noRefs: true,
sortKeys: true,
}
export interface StrictModules extends Modules {
registries: Registries
}
export async function writeModulesManifest (
modulesDir: string,
modules: StrictModules,
opts?: {
makeModulesDir?: boolean
}
modules: StrictModules
): Promise<void> {
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))
}

View File

@@ -1,5 +1,4 @@
/// <reference path="../../../__typings__/index.d.ts"/>
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)
})

View File

@@ -9,6 +9,9 @@
"../../__typings__/**/*.d.ts"
],
"references": [
{
"path": "../../fs/graceful-fs"
},
{
"path": "../../packages/types"
}

208
pnpm-lock.yaml generated
View File

@@ -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: {}