diff --git a/.changeset/new-vans-guess.md b/.changeset/new-vans-guess.md new file mode 100644 index 00000000000..8f5f6de47d2 --- /dev/null +++ b/.changeset/new-vans-guess.md @@ -0,0 +1,6 @@ +--- +"@pnpm/headless": patch +"pnpm": patch +--- + +Also include missing deeply linked workspace packages at headless installation [#5034](https://github.com/pnpm/pnpm/issues/5034). diff --git a/.changeset/silly-walls-shave.md b/.changeset/silly-walls-shave.md new file mode 100644 index 00000000000..4d104d9aa74 --- /dev/null +++ b/.changeset/silly-walls-shave.md @@ -0,0 +1,5 @@ +--- +"@pnpm/filter-lockfile": major +--- + +Breaking change to the API. Also include missing deeply linked workspace packages at headless installation. diff --git a/fixtures/workspace-external-depends-deep/.npmrc b/fixtures/workspace-external-depends-deep/.npmrc new file mode 100644 index 00000000000..abf8fa6b8f0 --- /dev/null +++ b/fixtures/workspace-external-depends-deep/.npmrc @@ -0,0 +1,5 @@ +link-workspace-packages = deep +prefer-workspace-packages = true +shared-workspace-lockfile = true +save-workspace-protocol = rolling +registry=http://localhost:4873 diff --git a/fixtures/workspace-external-depends-deep/package.json b/fixtures/workspace-external-depends-deep/package.json new file mode 100644 index 00000000000..6fe879fb0a8 --- /dev/null +++ b/fixtures/workspace-external-depends-deep/package.json @@ -0,0 +1,7 @@ +{ + "name": "root", + "version": "1.0.0", + "dependencies": { + "is-positive": "1.0.0" + } +} diff --git a/fixtures/workspace-external-depends-deep/packages/f/package.json b/fixtures/workspace-external-depends-deep/packages/f/package.json new file mode 100644 index 00000000000..4ce399ec780 --- /dev/null +++ b/fixtures/workspace-external-depends-deep/packages/f/package.json @@ -0,0 +1,9 @@ +{ + "name": "@kenrick95/internal-f", + "version": "1.0.0", + "dependencies": { + "is-positive": "1.0.0", + "is-negative": "1.0.0" + } +} + diff --git a/fixtures/workspace-external-depends-deep/packages/g/package.json b/fixtures/workspace-external-depends-deep/packages/g/package.json new file mode 100644 index 00000000000..1598b7be3ab --- /dev/null +++ b/fixtures/workspace-external-depends-deep/packages/g/package.json @@ -0,0 +1,8 @@ +{ + "name": "@kenrick95/internal-g", + "version": "1.0.0", + "dependencies": { + "@pnpm.e2e/external-depend-on-internal-dep": "1.0.0", + "is-positive": "1.0.0" + } +} diff --git a/fixtures/workspace-external-depends-deep/pnpm-lock.yaml b/fixtures/workspace-external-depends-deep/pnpm-lock.yaml new file mode 100644 index 00000000000..b0723f73ee7 --- /dev/null +++ b/fixtures/workspace-external-depends-deep/pnpm-lock.yaml @@ -0,0 +1,43 @@ +lockfileVersion: 5.4 + +importers: + + .: + specifiers: + is-positive: 1.0.0 + dependencies: + is-positive: 1.0.0 + + packages/f: + specifiers: + is-negative: 1.0.0 + is-positive: 1.0.0 + dependencies: + is-negative: 1.0.0 + is-positive: 1.0.0 + + packages/g: + specifiers: + '@pnpm.e2e/external-depend-on-internal-dep': 1.0.0 + is-positive: 1.0.0 + dependencies: + '@pnpm.e2e/external-depend-on-internal-dep': 1.0.0 + is-positive: 1.0.0 + +packages: + + /@pnpm.e2e/external-depend-on-internal-dep/1.0.0: + resolution: {integrity: sha512-UPhSnFgg3p1acuOcuWgunypA7tTqhVCBUUC4laNotJw1RUbTldprdLJmrhOvGylvw4VBipHnXPm/y9wTIAf53A==} + dependencies: + '@pnpm.e2e/internal-f': link:packages/f + dev: false + + /is-negative/1.0.0: + resolution: {integrity: sha512-1aKMsFUc7vYQGzt//8zhkjRWPoYkajY/I5MJEvrc0pDoHXrW7n5ri8DYxhy3rR+Dk0QFl7GjHHsZU1sppQrWtw==} + engines: {node: '>=0.10.0'} + dev: false + + /is-positive/1.0.0: + resolution: {integrity: sha512-xxzPGZ4P2uN6rROUa5N9Z7zTX6ERuE0hs6GUOc/cKBLF2NqKc16UwqHMt3tFg4CO6EBTE5UecUasg+3jZx3Ckg==} + engines: {node: '>=0.10.0'} + dev: false diff --git a/fixtures/workspace-external-depends-deep/pnpm-workspace.yaml b/fixtures/workspace-external-depends-deep/pnpm-workspace.yaml new file mode 100644 index 00000000000..eccc335f93b --- /dev/null +++ b/fixtures/workspace-external-depends-deep/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - 'packages/**' \ No newline at end of file diff --git a/package.json b/package.json index b0670077178..56a286c8cf0 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@commitlint/prompt-cli": "^17.1.2", "@pnpm/eslint-config": "workspace:*", "@pnpm/meta-updater": "0.2.0", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@pnpm/tsconfig": "workspace:*", "@types/jest": "^29.1.2", "@types/node": "^14.18.29", diff --git a/packages/core/package.json b/packages/core/package.json index e5eb8a90baf..1e2ca047c63 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -75,7 +75,7 @@ "@pnpm/git-utils": "workspace:*", "@pnpm/package-store": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@pnpm/store-path": "workspace:*", "@pnpm/test-fixtures": "workspace:*", "@types/fs-extra": "^9.0.13", diff --git a/packages/filter-lockfile/src/filterLockfileByImportersAndEngine.ts b/packages/filter-lockfile/src/filterLockfileByImportersAndEngine.ts index ea2b563aa09..8a54ec8a66e 100644 --- a/packages/filter-lockfile/src/filterLockfileByImportersAndEngine.ts +++ b/packages/filter-lockfile/src/filterLockfileByImportersAndEngine.ts @@ -29,30 +29,27 @@ export default function filterByImportersAndEngine ( lockfileDir: string skipped: Set } -): Lockfile { - const importerDeps = importerIds - .map((importerId) => lockfile.importers[importerId]) - .map((importer) => ({ - ...(opts.include.dependencies ? importer.dependencies : {}), - ...(opts.include.devDependencies ? importer.devDependencies : {}), - ...(opts.include.optionalDependencies ? importer.optionalDependencies : {}), - })) - .map(Object.entries) - const directDepPaths = unnest(importerDeps) - .map(([pkgName, ref]) => dp.refToRelative(ref, pkgName)) - .filter((nodeId) => nodeId !== null) as string[] +): { lockfile: Lockfile, selectedImporterIds: string[] } { + const importerIdSet = new Set(importerIds) as Set + + const directDepPaths = toImporterDepPaths(lockfile, importerIds, { + include: opts.include, + importerIdSet, + }) - const packages = (lockfile.packages != null) - ? pickPkgsWithAllDeps(lockfile.packages, directDepPaths, { - currentEngine: opts.currentEngine, - engineStrict: opts.engineStrict, - failOnMissingDependencies: opts.failOnMissingDependencies, - include: opts.include, - includeIncompatiblePackages: opts.includeIncompatiblePackages === true, - lockfileDir: opts.lockfileDir, - skipped: opts.skipped, - }) - : {} + const packages = + lockfile.packages != null + ? pickPkgsWithAllDeps(lockfile, directDepPaths, importerIdSet, { + currentEngine: opts.currentEngine, + engineStrict: opts.engineStrict, + failOnMissingDependencies: opts.failOnMissingDependencies, + include: opts.include, + includeIncompatiblePackages: + opts.includeIncompatiblePackages === true, + lockfileDir: opts.lockfileDir, + skipped: opts.skipped, + }) + : {} const importers = importerIds.reduce((acc, importerId) => { acc[importerId] = filterImporter(lockfile.importers[importerId], opts.include) @@ -68,15 +65,19 @@ export default function filterByImportersAndEngine ( }, { ...lockfile.importers }) return { - ...lockfile, - importers, - packages, + lockfile: { + ...lockfile, + importers, + packages, + }, + selectedImporterIds: Array.from(importerIdSet), } } function pickPkgsWithAllDeps ( - pkgSnapshots: PackageSnapshots, + lockfile: Lockfile, depPaths: string[], + importerIdSet: Set, opts: { currentEngine: { nodeVersion: string @@ -91,14 +92,15 @@ function pickPkgsWithAllDeps ( } ) { const pickedPackages = {} as PackageSnapshots - pkgAllDeps({ pkgSnapshots, pickedPackages }, depPaths, true, opts) + pkgAllDeps({ lockfile, pickedPackages, importerIdSet }, depPaths, true, opts) return pickedPackages } function pkgAllDeps ( ctx: { - pkgSnapshots: PackageSnapshots + lockfile: Lockfile pickedPackages: PackageSnapshots + importerIdSet: Set }, depPaths: string[], parentIsInstallable: boolean, @@ -117,7 +119,7 @@ function pkgAllDeps ( ) { for (const depPath of depPaths) { if (ctx.pickedPackages[depPath]) continue - const pkgSnapshot = ctx.pkgSnapshots[depPath] + const pkgSnapshot = ctx.lockfile.packages![depPath] if (!pkgSnapshot && !depPath.startsWith('link:')) { if (opts.failOnMissingDependencies) { throw new LockfileMissingDependencyError(depPath) @@ -140,13 +142,15 @@ function pkgAllDeps ( libc: pkgSnapshot.libc, } // TODO: depPath is not the package ID. Should be fixed - installable = opts.includeIncompatiblePackages || packageIsInstallable(pkgSnapshot.id ?? depPath, pkg, { - engineStrict: opts.engineStrict, - lockfileDir: opts.lockfileDir, - nodeVersion: opts.currentEngine.nodeVersion, - optional: pkgSnapshot.optional === true, - pnpmVersion: opts.currentEngine.pnpmVersion, - }) !== false + installable = + opts.includeIncompatiblePackages || + packageIsInstallable(pkgSnapshot.id ?? depPath, pkg, { + engineStrict: opts.engineStrict, + lockfileDir: opts.lockfileDir, + nodeVersion: opts.currentEngine.nodeVersion, + optional: pkgSnapshot.optional === true, + pnpmVersion: opts.currentEngine.pnpmVersion, + }) !== false if (!installable) { if (!ctx.pickedPackages[depPath] && pkgSnapshot.optional === true) { opts.skipped.add(depPath) @@ -156,14 +160,69 @@ function pkgAllDeps ( } } ctx.pickedPackages[depPath] = pkgSnapshot - const nextRelDepPaths = Object.entries( - { - ...pkgSnapshot.dependencies, - ...(opts.include.optionalDependencies ? pkgSnapshot.optionalDependencies : {}), + const { depPaths: nextRelDepPaths, importerIds: additionalImporterIds } = parseDepRefs(Object.entries({ + ...pkgSnapshot.dependencies, + ...(opts.include.optionalDependencies + ? pkgSnapshot.optionalDependencies + : {}), + }), ctx.lockfile) + additionalImporterIds.forEach((importerId) => ctx.importerIdSet.add(importerId)) + nextRelDepPaths.push( + ...toImporterDepPaths(ctx.lockfile, additionalImporterIds, { + include: opts.include, + importerIdSet: ctx.importerIdSet, }) - .map(([pkgName, ref]) => dp.refToRelative(ref, pkgName)) - .filter((nodeId) => nodeId !== null) as string[] - + ) pkgAllDeps(ctx, nextRelDepPaths, installable, opts) } } + +function toImporterDepPaths ( + lockfile: Lockfile, + importerIds: string[], + opts: { + include: { [dependenciesField in DependenciesField]: boolean } + importerIdSet: Set + } +): string[] { + const importerDeps = importerIds + .map(importerId => lockfile.importers[importerId]) + .map(importer => ({ + ...(opts.include.dependencies ? importer.dependencies : {}), + ...(opts.include.devDependencies ? importer.devDependencies : {}), + ...(opts.include.optionalDependencies + ? importer.optionalDependencies + : {}), + })) + .map(Object.entries) + + const { depPaths, importerIds: nextImporterIds } = parseDepRefs(unnest(importerDeps), lockfile) + + if (!nextImporterIds.length) { + return depPaths + } + nextImporterIds.forEach((importerId) => { + opts.importerIdSet.add(importerId) + }) + return [ + ...depPaths, + ...toImporterDepPaths(lockfile, nextImporterIds, opts), + ] +} + +function parseDepRefs (refsByPkgNames: Array<[string, string]>, lockfile: Lockfile) { + return refsByPkgNames + .reduce((acc, [pkgName, ref]) => { + if (ref.startsWith('link:')) { + const importerId = ref.substring(5) + if (lockfile.importers[importerId]) { + acc.importerIds.push(importerId) + } + return acc + } + const depPath = dp.refToRelative(ref, pkgName) + if (depPath == null) return acc + acc.depPaths.push(depPath) + return acc + }, { depPaths: [] as string[], importerIds: [] as string[] }) +} diff --git a/packages/filter-lockfile/test/filterByImportersAndEngine.ts b/packages/filter-lockfile/test/filterByImportersAndEngine.ts index 5a10af816d9..e4c3fc1857d 100644 --- a/packages/filter-lockfile/test/filterByImportersAndEngine.ts +++ b/packages/filter-lockfile/test/filterByImportersAndEngine.ts @@ -119,7 +119,7 @@ test('filterByImportersAndEngine(): skip packages that are not installable', () } ) - expect(filteredLockfile).toStrictEqual({ + expect(filteredLockfile.lockfile).toStrictEqual({ importers: { 'project-1': { dependencies: { @@ -298,7 +298,7 @@ test('filterByImportersAndEngine(): filter the packages that set os and cpu', () } ) - expect(filteredLockfile).toStrictEqual({ + expect(filteredLockfile.lockfile).toStrictEqual({ importers: { 'project-1': { dependencies: { @@ -466,7 +466,7 @@ test('filterByImportersAndEngine(): filter the packages that set libc', () => { } ) - expect(filteredLockfile).toStrictEqual({ + expect(filteredLockfile.lockfile).toStrictEqual({ importers: { 'project-1': { dependencies: { @@ -537,4 +537,115 @@ test('filterByImportersAndEngine(): filter the packages that set libc', () => { }, }) expect(Array.from(skippedPackages)).toStrictEqual(['/preserve-existing-skipped/1.0.0', '/optional-dep/1.0.0', '/foo/1.0.0']) -}) \ No newline at end of file +}) + +test('filterByImportersAndEngine(): includes linked packages', () => { + const filteredLockfile = filterLockfileByImportersAndEngine( + { + importers: { + 'project-1': { + dependencies: { + 'project-2': 'link:project-2', + }, + devDependencies: { + }, + optionalDependencies: { + }, + specifiers: { + 'project-2': '^1.0.0', + }, + }, + 'project-2': { + dependencies: { + 'project-3': 'link:project-3', + foo: '1.0.0', + }, + specifiers: { + foo: '^1.0.0', + }, + }, + 'project-3': { + dependencies: { + bar: '1.0.0', + }, + specifiers: { + bar: '^1.0.0', + }, + }, + }, + lockfileVersion: LOCKFILE_VERSION, + packages: { + '/bar/1.0.0': { + resolution: { integrity: '' }, + }, + '/foo/1.0.0': { + resolution: { integrity: '' }, + }, + }, + }, + ['project-1'], + { + currentEngine: { + nodeVersion: '10.0.0', + pnpmVersion: '2.0.0', + }, + engineStrict: true, + failOnMissingDependencies: true, + include: { + dependencies: true, + devDependencies: true, + optionalDependencies: true, + }, + lockfileDir: process.cwd(), + skipped: new Set(), + } + ) + + expect(filteredLockfile.lockfile).toStrictEqual({ + importers: { + 'project-1': { + dependencies: { + 'project-2': 'link:project-2', + }, + devDependencies: { + }, + optionalDependencies: { + }, + specifiers: { + 'project-2': '^1.0.0', + }, + }, + 'project-2': { + dependencies: { + 'project-3': 'link:project-3', + foo: '1.0.0', + }, + specifiers: { + foo: '^1.0.0', + }, + }, + 'project-3': { + dependencies: { + bar: '1.0.0', + }, + specifiers: { + bar: '^1.0.0', + }, + }, + }, + lockfileVersion: LOCKFILE_VERSION, + packages: { + '/bar/1.0.0': { + resolution: { integrity: '' }, + }, + '/foo/1.0.0': { + resolution: { integrity: '' }, + }, + }, + }) + expect(filteredLockfile.selectedImporterIds).toStrictEqual([ + 'project-1', + 'project-2', + 'project-3', + ]) +}) diff --git a/packages/headless/package.json b/packages/headless/package.json index 5138f7c77fd..542c816b1dd 100644 --- a/packages/headless/package.json +++ b/packages/headless/package.json @@ -22,7 +22,7 @@ "@pnpm/package-store": "workspace:*", "@pnpm/prepare": "workspace:*", "@pnpm/read-projects-context": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@pnpm/store-path": "workspace:*", "@pnpm/test-fixtures": "workspace:*", "@types/fs-extra": "^9.0.13", diff --git a/packages/headless/src/index.ts b/packages/headless/src/index.ts index d9f2a502502..b68c07ce1ae 100644 --- a/packages/headless/src/index.ts +++ b/packages/headless/src/index.ts @@ -240,10 +240,10 @@ export async function headlessInstall (opts: HeadlessOptions) { registries: opts.registries, skipped, } - const importerIds = (opts.ignorePackageManifest === true || opts.nodeLinker === 'hoisted') + const initialImporterIds = (opts.ignorePackageManifest === true || opts.nodeLinker === 'hoisted') ? Object.keys(wantedLockfile.importers) : selectedProjects.map(({ id }) => id) - const filteredLockfile = filterLockfileByImportersAndEngine(wantedLockfile, importerIds, { + const { lockfile: filteredLockfile, selectedImporterIds: importerIds } = filterLockfileByImportersAndEngine(wantedLockfile, initialImporterIds, { ...filterOpts, currentEngine: opts.currentEngine, engineStrict: opts.engineStrict, @@ -251,6 +251,18 @@ export async function headlessInstall (opts: HeadlessOptions) { includeIncompatiblePackages: opts.force, lockfileDir, }) + + // Update selectedProjects to add missing projects. importerIds will have the updated ids, found from deeply linked workspace projects + const initialImporterIdSet = new Set(initialImporterIds) + const missingIds = importerIds.filter((importerId) => !initialImporterIdSet.has(importerId)) + if (missingIds.length > 0) { + for (const project of Object.values(opts.allProjects)) { + if (missingIds.includes(project.id)) { + selectedProjects.push(project) + } + } + } + const lockfileToDepGraphOpts = { ...opts, importerIds, diff --git a/packages/headless/test/index.ts b/packages/headless/test/index.ts index 0bfea74be98..51d64f5168e 100644 --- a/packages/headless/test/index.ts +++ b/packages/headless/test/index.ts @@ -831,3 +831,29 @@ test('installing in a workspace with node-linker=hoisted', async () => { function readPkgVersion (dir: string): string { return loadJsonFile.sync<{ version: string }>(path.join(dir, 'package.json')).version } + +test('installing a package deeply installs all required dependencies', async () => { + const workspaceFixture = f.prepare('workspace-external-depends-deep') + const projects = [ + path.join(workspaceFixture), + path.join(workspaceFixture, 'packages/f'), + path.join(workspaceFixture, 'packages/g'), + workspaceFixture, + ] + + await headlessInstall( + await testDefaults({ + lockfileDir: workspaceFixture, + projects, + selectedProjectDirs: [projects[2]], + }) + ) + + for (const projectDir of projects) { + if (projectDir === workspaceFixture) { + continue + } + const projectAssertion = assertProject(projectDir) + expect(projectAssertion.requireModule('is-positive')).toBeTruthy() + } +}) diff --git a/packages/headless/test/utils/testDefaults.ts b/packages/headless/test/utils/testDefaults.ts index 4ece65ceee4..03cd1d4dbbc 100644 --- a/packages/headless/test/utils/testDefaults.ts +++ b/packages/headless/test/utils/testDefaults.ts @@ -28,7 +28,7 @@ export default async function testDefaults ( let storeDir = opts?.storeDir ?? path.join(tmp, 'store') const cacheDir = path.join(tmp, 'cache') const lockfileDir = opts?.lockfileDir ?? process.cwd() - const { include, pendingBuilds, projects, registries } = await readProjectsContext( + const { include, pendingBuilds, projects } = await readProjectsContext( opts.projects ? opts.projects.map((rootDir: string) => ({ rootDir })) : [ @@ -75,12 +75,12 @@ export default async function testDefaults ( version: '1.0.0', }, pendingBuilds, - selectedProjectDirs: projects.map((project) => project.rootDir), + selectedProjectDirs: opts.selectedProjectDirs ?? projects.map((project) => project.rootDir), allProjects: fromPairs( await Promise.all(projects.map(async (project) => [project.rootDir, { ...project, manifest: await safeReadPackageFromDir(project.rootDir) }])) ), rawConfig: {}, - registries: registries ?? { + registries: { default: registry, }, sideEffectsCache: true, diff --git a/packages/package-requester/package.json b/packages/package-requester/package.json index 6868af028fd..32754b94378 100644 --- a/packages/package-requester/package.json +++ b/packages/package-requester/package.json @@ -67,7 +67,7 @@ "@pnpm/client": "workspace:*", "@pnpm/create-cafs-store": "workspace:*", "@pnpm/package-requester": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@pnpm/test-fixtures": "workspace:*", "@types/normalize-path": "^3.0.0", "@types/ramda": "0.28.15", diff --git a/packages/plugin-commands-deploy/package.json b/packages/plugin-commands-deploy/package.json index 8ee42cbd805..2f70afa1697 100644 --- a/packages/plugin-commands-deploy/package.json +++ b/packages/plugin-commands-deploy/package.json @@ -42,7 +42,7 @@ "@pnpm/lockfile-types": "workspace:*", "@pnpm/plugin-commands-deploy": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0" + "@pnpm/registry-mock": "3.1.0" }, "dependencies": { "@pnpm/cli-utils": "workspace:*", diff --git a/packages/plugin-commands-installation/package.json b/packages/plugin-commands-installation/package.json index 4e8a9c2b054..6e38344f6fa 100644 --- a/packages/plugin-commands-installation/package.json +++ b/packages/plugin-commands-installation/package.json @@ -38,7 +38,7 @@ "@pnpm/modules-yaml": "workspace:*", "@pnpm/plugin-commands-installation": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@pnpm/test-fixtures": "workspace:*", "@types/is-ci": "^3.0.0", "@types/proxyquire": "^1.3.28", diff --git a/packages/plugin-commands-listing/package.json b/packages/plugin-commands-listing/package.json index 21c4dc8966a..94434bf56d4 100644 --- a/packages/plugin-commands-listing/package.json +++ b/packages/plugin-commands-listing/package.json @@ -37,7 +37,7 @@ "@pnpm/plugin-commands-installation": "workspace:*", "@pnpm/plugin-commands-listing": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@types/ramda": "0.28.15", "execa": "npm:safe-execa@^0.1.2", "strip-ansi": "^6.0.1", diff --git a/packages/plugin-commands-outdated/package.json b/packages/plugin-commands-outdated/package.json index 487689df12b..fd3e7895e41 100644 --- a/packages/plugin-commands-outdated/package.json +++ b/packages/plugin-commands-outdated/package.json @@ -38,7 +38,7 @@ "@pnpm/plugin-commands-installation": "workspace:*", "@pnpm/plugin-commands-outdated": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@types/ramda": "0.28.15", "@types/wrap-ansi": "^3.0.0", "@types/zkochan__table": "npm:@types/table@6.0.0" diff --git a/packages/plugin-commands-patching/package.json b/packages/plugin-commands-patching/package.json index 0bf00f13ea1..f5d9c9c4ecd 100644 --- a/packages/plugin-commands-patching/package.json +++ b/packages/plugin-commands-patching/package.json @@ -35,7 +35,7 @@ "devDependencies": { "@pnpm/plugin-commands-patching": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@types/ramda": "0.28.15" }, "dependencies": { diff --git a/packages/plugin-commands-publishing/package.json b/packages/plugin-commands-publishing/package.json index d8bab1debea..c03560e1587 100644 --- a/packages/plugin-commands-publishing/package.json +++ b/packages/plugin-commands-publishing/package.json @@ -38,7 +38,7 @@ "@pnpm/filter-workspace-packages": "workspace:*", "@pnpm/plugin-commands-publishing": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@types/cross-spawn": "^6.0.2", "@types/is-ci": "^3.0.0", "@types/is-windows": "^1.0.0", diff --git a/packages/plugin-commands-rebuild/package.json b/packages/plugin-commands-rebuild/package.json index 97fa8213626..3cac9458fae 100644 --- a/packages/plugin-commands-rebuild/package.json +++ b/packages/plugin-commands-rebuild/package.json @@ -36,7 +36,7 @@ "@pnpm/filter-workspace-packages": "workspace:*", "@pnpm/plugin-commands-rebuild": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@pnpm/test-fixtures": "workspace:*", "@types/ramda": "0.28.15", "@types/semver": "7.3.12", diff --git a/packages/plugin-commands-script-runners/package.json b/packages/plugin-commands-script-runners/package.json index b9cc5462a48..66afd03738b 100644 --- a/packages/plugin-commands-script-runners/package.json +++ b/packages/plugin-commands-script-runners/package.json @@ -37,7 +37,7 @@ "@pnpm/filter-workspace-packages": "workspace:*", "@pnpm/plugin-commands-script-runners": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@types/is-windows": "^1.0.0", "@types/ramda": "0.28.15", "is-windows": "^1.0.2", diff --git a/packages/plugin-commands-store/package.json b/packages/plugin-commands-store/package.json index 3913300742f..24cb943fd43 100644 --- a/packages/plugin-commands-store/package.json +++ b/packages/plugin-commands-store/package.json @@ -37,7 +37,7 @@ "@pnpm/lockfile-file": "workspace:*", "@pnpm/plugin-commands-store": "workspace:*", "@pnpm/prepare": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@types/archy": "0.0.32", "@types/ramda": "0.28.15", "@types/ssri": "^7.1.1", diff --git a/packages/pnpm/package.json b/packages/pnpm/package.json index 4ecabfd0c91..3d804bc3a29 100644 --- a/packages/pnpm/package.json +++ b/packages/pnpm/package.json @@ -56,7 +56,7 @@ "@pnpm/prepare": "workspace:*", "@pnpm/read-package-json": "workspace:*", "@pnpm/read-project-manifest": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@pnpm/run-npm": "workspace:*", "@pnpm/tabtab": "^0.1.2", "@pnpm/types": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e858d7c430..aa77033e813 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,8 +59,8 @@ importers: specifier: 0.2.0 version: 0.2.0_typanion@3.12.0 '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@pnpm/tsconfig': specifier: workspace:* version: link:utils/tsconfig @@ -726,8 +726,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@pnpm/store-path': specifier: workspace:* version: link:../store-path @@ -1655,8 +1655,8 @@ importers: specifier: workspace:* version: link:../read-projects-context '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@pnpm/store-path': specifier: workspace:* version: link:../store-path @@ -2795,8 +2795,8 @@ importers: specifier: workspace:* version: 'link:' '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@pnpm/test-fixtures': specifier: workspace:* version: link:../../privatePackages/test-fixtures @@ -3094,8 +3094,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 packages/plugin-commands-env: dependencies: @@ -3361,8 +3361,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@pnpm/test-fixtures': specifier: workspace:* version: link:../../privatePackages/test-fixtures @@ -3461,8 +3461,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@types/ramda': specifier: 0.28.15 version: 0.28.15 @@ -3558,8 +3558,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@types/ramda': specifier: 0.28.15 version: 0.28.15 @@ -3625,8 +3625,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@types/ramda': specifier: 0.28.15 version: 0.28.15 @@ -3725,8 +3725,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@types/cross-spawn': specifier: ^6.0.2 version: 6.0.2 @@ -3879,8 +3879,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@pnpm/test-fixtures': specifier: workspace:* version: link:../../privatePackages/test-fixtures @@ -3985,8 +3985,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@types/is-windows': specifier: ^1.0.0 version: 1.0.0 @@ -4174,8 +4174,8 @@ importers: specifier: workspace:* version: link:../../privatePackages/prepare '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@types/archy': specifier: 0.0.32 version: 0.0.32 @@ -4205,7 +4205,7 @@ importers: optionalDependencies: node-gyp: specifier: ^9.2.0 - version: 9.2.0 + version: 9.3.0 devDependencies: '@pnpm/assert-project': specifier: workspace:* @@ -4319,8 +4319,8 @@ importers: specifier: workspace:* version: link:../read-project-manifest '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@pnpm/run-npm': specifier: workspace:* version: link:../run-npm @@ -5225,8 +5225,8 @@ importers: specifier: workspace:* version: link:../../packages/modules-yaml '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 '@pnpm/types': specifier: workspace:* version: link:../../packages/types @@ -5265,8 +5265,8 @@ importers: specifier: workspace:* version: link:../../packages/cafs '@pnpm/registry-mock': - specifier: 3.0.0 - version: 3.0.0_typanion@3.12.0 + specifier: 3.1.0 + version: 3.1.0_typanion@3.12.0 path-exists: specifier: ^4.0.0 version: 4.0.0 @@ -7698,8 +7698,8 @@ packages: - typanion dev: true - /@pnpm/registry-mock/3.0.0_typanion@3.12.0: - resolution: {integrity: sha512-/e6P2sVX+1frYDl7z4qAnRHEU2VG4RUu4vcsoSZdc9LFi93ZxQ9gbuF066aR+T3S+JcFFjHNZXfJUj8ZaTfssg==} + /@pnpm/registry-mock/3.1.0_typanion@3.12.0: + resolution: {integrity: sha512-uOWJxzqNOutPbeH+yQW+cYwg0yM1eCdaMWstlIVjBCCoJ2IEpwsi3KhQnCDmMKZbqqUdPDcHTQaYzMKVG0WAFQ==} engines: {node: '>=10.13'} hasBin: true dependencies: @@ -7977,7 +7977,7 @@ packages: /@types/byline/4.2.33: resolution: {integrity: sha512-LJYez7wrWcJQQDknqZtrZuExMGP0IXmPl1rOOGDqLbu+H7UNNRfKNuSxCBcQMLH1EfjeWidLedC/hCc5dDfBog==} dependencies: - '@types/node': 18.8.4 + '@types/node': 18.8.5 dev: true /@types/cacheable-request/6.0.2: @@ -8132,6 +8132,10 @@ packages: /@types/node/18.8.4: resolution: {integrity: sha512-WdlVphvfR/GJCLEMbNA8lJ0lhFNBj4SW3O+O5/cEGw9oYrv0al9zTwuQsq+myDUXgNx2jgBynoVgZ2MMJ6pbow==} + /@types/node/18.8.5: + resolution: {integrity: sha512-Bq7G3AErwe5A/Zki5fdD3O6+0zDChhg671NfPjtIcbtzDNZTv4NPKMRFr7gtYPG7y+B8uTiNK4Ngd9T0FTar6Q==} + dev: true + /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -9889,7 +9893,7 @@ packages: hasBin: true dependencies: graceful-fs: 4.2.10 - minimist: 1.2.6 + minimist: 1.2.7 mkdirp: 0.5.6 rimraf: 2.7.1 @@ -10076,8 +10080,8 @@ packages: engines: {node: '>=10'} dev: true - /decimal.js/10.4.1: - resolution: {integrity: sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==} + /decimal.js/10.4.2: + resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} /decompress-maybe/1.0.0: resolution: {integrity: sha512-av8/KhXWRUYQ7lGTl/9Gtizz3nQ+7NqDFm/I4Lx+JvTbzHiD4WqfqxMO4YYi91FTqffoBDCYPfIvofwQZwZ3ZQ==} @@ -11728,7 +11732,7 @@ packages: engines: {node: '>=0.4.7'} hasBin: true dependencies: - minimist: 1.2.6 + minimist: 1.2.7 neo-async: 2.6.2 source-map: 0.6.1 wordwrap: 1.0.0 @@ -12857,7 +12861,7 @@ packages: cssom: 0.4.4 cssstyle: 2.3.0 data-urls: 2.0.0 - decimal.js: 10.4.1 + decimal.js: 10.4.2 domexception: 2.0.1 escodegen: 2.0.0 form-data: 3.0.1 @@ -13612,6 +13616,9 @@ packages: /minimist/1.2.6: resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + /minimist/1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + /minipass-collect/1.0.2: resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} engines: {node: '>= 8'} @@ -13699,7 +13706,7 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: - minimist: 1.2.6 + minimist: 1.2.7 /mkdirp/1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} @@ -13880,8 +13887,8 @@ packages: - bluebird - supports-color - /node-gyp/9.2.0: - resolution: {integrity: sha512-/+/YxGfIJOh/fnMsr4Ep0v6oOIjnO1BgLd2dcDspBX1spTkQU7xSIox5RdRE/2/Uq3ZwK8Z5swRIbMUmPlslmg==} + /node-gyp/9.3.0: + resolution: {integrity: sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==} engines: {node: ^12.22 || ^14.13 || >=16} hasBin: true requiresBuild: true @@ -14034,6 +14041,7 @@ packages: /npmlog/4.1.2: resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==} + requiresBuild: true dependencies: are-we-there-yet: 1.1.7 console-control-strings: 1.1.0 @@ -14370,7 +14378,7 @@ packages: fs-extra: 7.0.1 is-ci: 2.0.0 klaw-sync: 6.0.0 - minimist: 1.2.6 + minimist: 1.2.7 open: 7.4.2 rimraf: 2.7.1 semver: 5.7.1 @@ -17132,7 +17140,7 @@ time: /@pnpm/npm-package-arg/1.0.0: '2022-06-28T12:48:31.287Z' /@pnpm/os.env.path-extender/0.2.6: '2022-08-08T10:36:30.986Z' /@pnpm/ramda/0.28.1: '2022-08-03T13:56:59.597Z' - /@pnpm/registry-mock/3.0.0: '2022-09-04T20:12:48.942Z' + /@pnpm/registry-mock/3.1.0: '2022-10-13T19:59:17.408Z' /@pnpm/semver-diff/1.1.0: '2021-11-16T12:40:59.941Z' /@pnpm/tabtab/0.1.2: '2021-03-05T17:31:19.932Z' /@types/adm-zip/0.4.34: '2021-04-04T18:01:23.318Z' @@ -17261,7 +17269,7 @@ time: /micromatch/4.0.5: '2022-03-24T19:31:47.722Z' /nock/13.2.9: '2022-07-19T18:34:55.582Z' /node-fetch/3.0.0-beta.9: '2020-09-05T12:52:27.791Z' - /node-gyp/9.2.0: '2022-10-04T10:40:24.552Z' + /node-gyp/9.3.0: '2022-10-11T04:54:21.968Z' /normalize-newline/3.0.0: '2016-09-06T12:35:43.571Z' /normalize-package-data/4.0.1: '2022-08-15T21:03:50.558Z' /normalize-path/3.0.0: '2018-04-19T14:54:47.609Z' diff --git a/privatePackages/assert-project/package.json b/privatePackages/assert-project/package.json index 709e3f574f4..c9fea83066b 100644 --- a/privatePackages/assert-project/package.json +++ b/privatePackages/assert-project/package.json @@ -44,7 +44,7 @@ "@pnpm/constants": "workspace:*", "@pnpm/lockfile-types": "workspace:*", "@pnpm/modules-yaml": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "@pnpm/types": "workspace:*", "is-windows": "^1.0.2", "isexe": "2.0.0", diff --git a/privatePackages/assert-store/package.json b/privatePackages/assert-store/package.json index 8b4af7294f5..4cbc6a34b9b 100644 --- a/privatePackages/assert-store/package.json +++ b/privatePackages/assert-store/package.json @@ -41,7 +41,7 @@ }, "dependencies": { "@pnpm/cafs": "workspace:*", - "@pnpm/registry-mock": "3.0.0", + "@pnpm/registry-mock": "3.1.0", "path-exists": "^4.0.0" }, "devDependencies": {