From 5c20db0dd2d97384f40fe9e8dcaaa5874009adc1 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Thu, 29 Feb 2024 10:28:29 +0100 Subject: [PATCH] feat!: use the same lockfile format in 1-pkg workspace as in multi-pkg one (#7696) --- __fixtures__/empty/pnpm-lock.yaml | 4 + .../node_modules/.pnpm/lock.yaml | 18 +-- __fixtures__/local-pkg/pnpm-lock.yaml | 4 + __fixtures__/local-scoped-pkg/pnpm-lock.yaml | 4 + .../pnpm-lock.yaml | 4 + __fixtures__/pnpm-lock.yaml | 4 + __fixtures__/tar-pkg/pnpm-lock.yaml | 4 + .../with-git-protocol-dep/pnpm-lock.yaml | 11 +- .../implementation/extendRebuildOptions.ts | 2 - lockfile/lockfile-file/src/write.ts | 23 +--- .../test/__snapshots__/write.test.ts.snap | 17 ++- .../core/src/getPeerDependencyIssues.ts | 1 - .../core/src/install/extendInstallOptions.ts | 2 - pkg-manager/core/src/install/index.ts | 5 +- pkg-manager/core/src/link/index.ts | 4 +- pkg-manager/core/src/link/options.ts | 2 - .../core/test/hoistedNodeLinker/uninstall.ts | 2 +- pkg-manager/core/test/install/aliases.ts | 32 +++-- .../core/test/install/autoInstallPeers.ts | 8 +- pkg-manager/core/test/install/fromRepo.ts | 10 +- .../test/install/gitBranchLockfile.test.ts | 20 +-- pkg-manager/core/test/install/local.ts | 54 +++++--- pkg-manager/core/test/install/lockfileOnly.ts | 4 +- pkg-manager/core/test/install/misc.ts | 2 +- .../core/test/install/optionalDependencies.ts | 2 +- .../core/test/install/peerDependencies.ts | 12 +- .../core/test/install/updatingPkgJson.ts | 8 +- pkg-manager/core/test/link.ts | 12 +- pkg-manager/core/test/lockfile.ts | 123 ++++++++++-------- pkg-manager/core/test/uninstall.ts | 2 +- pkg-manager/get-context/src/index.ts | 4 - pkg-manager/get-context/src/readLockfiles.ts | 1 - pkg-manager/get-context/test/index.ts | 1 - .../pnpm-lock.yaml | 11 +- .../has-glob-and-rimraf/pnpm-lock.yaml | 17 ++- .../test/fixtures/has-glob/pnpm-lock.yaml | 11 +- .../pnpm-lock.yaml | 11 +- .../fixtures/has-local-dep/pkg/pnpm-lock.yaml | 11 +- .../has-local-dir-dep/example/pnpm-lock.yaml | 4 + .../fixtures/has-local-dir-dep/pnpm-lock.yaml | 11 +- .../pnpm-lock.yaml | 24 ++-- .../pnpm-lock.yaml | 23 ++-- .../prod-dep-is-dev-subdep/pnpm-lock.yaml | 24 ++-- .../reinstall-peer-deps/pnpm-lock.yaml | 11 +- .../pnpm-lock.yaml | 11 +- .../side-effects-of-subdep/pnpm-lock.yaml | 11 +- .../test/fixtures/side-effects/pnpm-lock.yaml | 11 +- .../simple-shamefully-flatten/pnpm-lock.yaml | 39 +++--- .../simple-with-more-deps/pnpm-lock.yaml | 39 +++--- .../simple-with-optional-dep/pnpm-lock.yaml | 18 +-- .../test/fixtures/simple/pnpm-lock.yaml | 33 ++--- .../test/fixtures/with-1-dep/pnpm-lock.yaml | 11 +- .../test/addRecursive.ts | 4 +- .../plugin-commands-installation/test/link.ts | 8 +- .../test/linkRecursive.ts | 8 +- .../test/peerDependencies.ts | 4 +- .../test/update/update.ts | 10 +- pnpm/src/main.ts | 2 - pnpm/test/monorepo/index.ts | 20 +-- pnpm/test/update.ts | 52 ++++---- .../storeStatus/extendStoreStatusOptions.ts | 2 - 61 files changed, 471 insertions(+), 376 deletions(-) diff --git a/__fixtures__/empty/pnpm-lock.yaml b/__fixtures__/empty/pnpm-lock.yaml index 689d650ceb..f5a1353156 100644 --- a/__fixtures__/empty/pnpm-lock.yaml +++ b/__fixtures__/empty/pnpm-lock.yaml @@ -1 +1,5 @@ lockfileVersion: '7.0' + +importers: + + .: {} diff --git a/__fixtures__/has-2-outdated-deps/node_modules/.pnpm/lock.yaml b/__fixtures__/has-2-outdated-deps/node_modules/.pnpm/lock.yaml index 180ad6acfb..eaee5fd0ca 100644 --- a/__fixtures__/has-2-outdated-deps/node_modules/.pnpm/lock.yaml +++ b/__fixtures__/has-2-outdated-deps/node_modules/.pnpm/lock.yaml @@ -1,14 +1,16 @@ lockfileVersion: '7.0' -dependencies: - is-negative: - specifier: ^1.0.0 - version: 1.0.1 +importers: -devDependencies: - is-positive: - specifier: ^1.0.0 - version: 1.0.0 + .: + dependencies: + is-negative: + specifier: ^1.0.0 + version: 1.0.1 + devDependencies: + is-positive: + specifier: ^1.0.0 + version: 1.0.0 packages: diff --git a/__fixtures__/local-pkg/pnpm-lock.yaml b/__fixtures__/local-pkg/pnpm-lock.yaml index 689d650ceb..f5a1353156 100644 --- a/__fixtures__/local-pkg/pnpm-lock.yaml +++ b/__fixtures__/local-pkg/pnpm-lock.yaml @@ -1 +1,5 @@ lockfileVersion: '7.0' + +importers: + + .: {} diff --git a/__fixtures__/local-scoped-pkg/pnpm-lock.yaml b/__fixtures__/local-scoped-pkg/pnpm-lock.yaml index 689d650ceb..f5a1353156 100644 --- a/__fixtures__/local-scoped-pkg/pnpm-lock.yaml +++ b/__fixtures__/local-scoped-pkg/pnpm-lock.yaml @@ -1 +1,5 @@ lockfileVersion: '7.0' + +importers: + + .: {} diff --git a/__fixtures__/multiple-scripts-error-exit/pnpm-lock.yaml b/__fixtures__/multiple-scripts-error-exit/pnpm-lock.yaml index 689d650ceb..f5a1353156 100644 --- a/__fixtures__/multiple-scripts-error-exit/pnpm-lock.yaml +++ b/__fixtures__/multiple-scripts-error-exit/pnpm-lock.yaml @@ -1 +1,5 @@ lockfileVersion: '7.0' + +importers: + + .: {} diff --git a/__fixtures__/pnpm-lock.yaml b/__fixtures__/pnpm-lock.yaml index 689d650ceb..f5a1353156 100644 --- a/__fixtures__/pnpm-lock.yaml +++ b/__fixtures__/pnpm-lock.yaml @@ -1 +1,5 @@ lockfileVersion: '7.0' + +importers: + + .: {} diff --git a/__fixtures__/tar-pkg/pnpm-lock.yaml b/__fixtures__/tar-pkg/pnpm-lock.yaml index 689d650ceb..f5a1353156 100644 --- a/__fixtures__/tar-pkg/pnpm-lock.yaml +++ b/__fixtures__/tar-pkg/pnpm-lock.yaml @@ -1 +1,5 @@ lockfileVersion: '7.0' + +importers: + + .: {} diff --git a/__fixtures__/with-git-protocol-dep/pnpm-lock.yaml b/__fixtures__/with-git-protocol-dep/pnpm-lock.yaml index 57a20983c3..76590ac365 100644 --- a/__fixtures__/with-git-protocol-dep/pnpm-lock.yaml +++ b/__fixtures__/with-git-protocol-dep/pnpm-lock.yaml @@ -4,10 +4,13 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - is-negative: - specifier: github:kevva/is-negative#master - version: github.com/kevva/is-negative/219c424611ff4a2af15f7deeff4f93c62558c43d +importers: + + .: + dependencies: + is-negative: + specifier: github:kevva/is-negative#master + version: github.com/kevva/is-negative/219c424611ff4a2af15f7deeff4f93c62558c43d packages: diff --git a/exec/plugin-commands-rebuild/src/implementation/extendRebuildOptions.ts b/exec/plugin-commands-rebuild/src/implementation/extendRebuildOptions.ts index 22cfb9d873..16f459cfe1 100644 --- a/exec/plugin-commands-rebuild/src/implementation/extendRebuildOptions.ts +++ b/exec/plugin-commands-rebuild/src/implementation/extendRebuildOptions.ts @@ -25,7 +25,6 @@ export type StrictRebuildOptions = { storeDir: string // TODO: remove this property storeController: StoreController force: boolean - forceSharedLockfile: boolean useLockfile: boolean registries: Registries dir: string @@ -63,7 +62,6 @@ const defaults = async (opts: RebuildOptions) => { development: true, dir, force: false, - forceSharedLockfile: false, lockfileDir, nodeLinker: 'isolated', optional: true, diff --git a/lockfile/lockfile-file/src/write.ts b/lockfile/lockfile-file/src/write.ts index 4c969cd6e0..ed2996407e 100644 --- a/lockfile/lockfile-file/src/write.ts +++ b/lockfile/lockfile-file/src/write.ts @@ -31,21 +31,17 @@ export async function writeWantedLockfile ( pkgPath: string, wantedLockfile: Lockfile, opts?: { - forceSharedFormat?: boolean useGitBranchLockfile?: boolean mergeGitBranchLockfiles?: boolean } ) { const wantedLockfileName: string = await getWantedLockfileName(opts) - return writeLockfile(wantedLockfileName, pkgPath, wantedLockfile, opts) + return writeLockfile(wantedLockfileName, pkgPath, wantedLockfile) } export async function writeCurrentLockfile ( virtualStoreDir: string, - currentLockfile: Lockfile, - opts?: { - forceSharedFormat?: boolean - } + currentLockfile: Lockfile ) { // empty lockfile is not saved if (isEmptyLockfile(currentLockfile)) { @@ -53,23 +49,18 @@ export async function writeCurrentLockfile ( return } await fs.mkdir(virtualStoreDir, { recursive: true }) - return writeLockfile('lock.yaml', virtualStoreDir, currentLockfile, opts) -} - -interface LockfileFormatOptions { - forceSharedFormat?: boolean + return writeLockfile('lock.yaml', virtualStoreDir, currentLockfile) } async function writeLockfile ( lockfileFilename: string, pkgPath: string, - wantedLockfile: Lockfile, - opts?: LockfileFormatOptions + wantedLockfile: Lockfile ) { const lockfilePath = path.join(pkgPath, lockfileFilename) const lockfileToStringify = convertToLockfileFile(wantedLockfile, { - forceSharedFormat: opts?.forceSharedFormat === true, + forceSharedFormat: true, }) const yamlDoc = yamlStringify(lockfileToStringify) @@ -88,7 +79,6 @@ export function isEmptyLockfile (lockfile: Lockfile) { export async function writeLockfiles ( opts: { - forceSharedFormat?: boolean wantedLockfile: Lockfile wantedLockfileDir: string currentLockfile: Lockfile @@ -101,9 +91,8 @@ export async function writeLockfiles ( const wantedLockfilePath = path.join(opts.wantedLockfileDir, wantedLockfileName) const currentLockfilePath = path.join(opts.currentLockfileDir, 'lock.yaml') - const forceSharedFormat = opts?.forceSharedFormat === true const normalizeOpts = { - forceSharedFormat, + forceSharedFormat: true, } const wantedLockfileToStringify = convertToLockfileFile(opts.wantedLockfile, normalizeOpts) const yamlDoc = yamlStringify(wantedLockfileToStringify) diff --git a/lockfile/lockfile-file/test/__snapshots__/write.test.ts.snap b/lockfile/lockfile-file/test/__snapshots__/write.test.ts.snap index 11bfd33740..42bae94e06 100644 --- a/lockfile/lockfile-file/test/__snapshots__/write.test.ts.snap +++ b/lockfile/lockfile-file/test/__snapshots__/write.test.ts.snap @@ -3,13 +3,16 @@ exports[`writeLockfiles() 1`] = ` "lockfileVersion: '7.0' -dependencies: - is-negative: - specifier: ^1.0.0 - version: 1.0.0 - is-positive: - specifier: ^1.0.0 - version: 1.0.0 +importers: + + .: + dependencies: + is-negative: + specifier: ^1.0.0 + version: 1.0.0 + is-positive: + specifier: ^1.0.0 + version: 1.0.0 packages: diff --git a/pkg-manager/core/src/getPeerDependencyIssues.ts b/pkg-manager/core/src/getPeerDependencyIssues.ts index a7642b7f41..f9eb012450 100644 --- a/pkg-manager/core/src/getPeerDependencyIssues.ts +++ b/pkg-manager/core/src/getPeerDependencyIssues.ts @@ -31,7 +31,6 @@ export async function getPeerDependencyIssues ( const lockfileDir = opts.lockfileDir ?? process.cwd() const ctx = await getContext({ force: false, - forceSharedLockfile: false, extraBinPaths: [], lockfileDir, nodeLinker: opts.nodeLinker ?? 'isolated', diff --git a/pkg-manager/core/src/install/extendInstallOptions.ts b/pkg-manager/core/src/install/extendInstallOptions.ts index 2c556c1a45..3ef6a98ffb 100644 --- a/pkg-manager/core/src/install/extendInstallOptions.ts +++ b/pkg-manager/core/src/install/extendInstallOptions.ts @@ -23,7 +23,6 @@ import { type PreResolutionHookContext } from '@pnpm/hooks.types' export interface StrictInstallOptions { autoInstallPeers: boolean autoInstallPeersFromHighestMatch: boolean - forceSharedLockfile: boolean frozenLockfile: boolean frozenLockfileIfExists: boolean enablePnp: boolean @@ -171,7 +170,6 @@ const defaults = (opts: InstallOptions) => { engineStrict: false, force: false, forceFullResolution: false, - forceSharedLockfile: false, frozenLockfile: false, hoistPattern: undefined, publicHoistPattern: undefined, diff --git a/pkg-manager/core/src/install/index.ts b/pkg-manager/core/src/install/index.ts index df490a0745..7720a2fdbb 100644 --- a/pkg-manager/core/src/install/index.ts +++ b/pkg-manager/core/src/install/index.ts @@ -474,7 +474,6 @@ Note that in CI environments, this setting is enabled by default.`, currentLockfileDir: ctx.virtualStoreDir, wantedLockfile: ctx.wantedLockfile, wantedLockfileDir: ctx.lockfileDir, - forceSharedFormat: opts.forceSharedLockfile, useGitBranchLockfile: opts.useGitBranchLockfile, mergeGitBranchLockfiles: opts.mergeGitBranchLockfiles, }) @@ -1080,8 +1079,6 @@ const _installInContext: InstallFunction = async (projects, ctx, opts) => { const depsStateCache: DepsStateCache = {} const lockfileOpts = { - forceSharedFormat: opts.forceSharedLockfile, - useInlineSpecifiersFormat: true, useGitBranchLockfile: opts.useGitBranchLockfile, mergeGitBranchLockfiles: opts.mergeGitBranchLockfiles, } @@ -1269,7 +1266,7 @@ const _installInContext: InstallFunction = async (projects, ctx, opts) => { wantedLockfileDir: ctx.lockfileDir, ...lockfileOpts, }) - : writeCurrentLockfile(ctx.virtualStoreDir, result.currentLockfile, lockfileOpts), + : writeCurrentLockfile(ctx.virtualStoreDir, result.currentLockfile), (async () => { if (result.currentLockfile.packages === undefined && result.removedDepPaths.size === 0) { return Promise.resolve() diff --git a/pkg-manager/core/src/link/index.ts b/pkg-manager/core/src/link/index.ts index dbc905a203..c62af337b3 100644 --- a/pkg-manager/core/src/link/index.ts +++ b/pkg-manager/core/src/link/index.ts @@ -137,7 +137,7 @@ export async function link ( } else { newPkg = opts.manifest } - const lockfileOpts = { forceSharedFormat: opts.forceSharedLockfile, useGitBranchLockfile: opts.useGitBranchLockfile, mergeGitBranchLockfiles: opts.mergeGitBranchLockfiles } + const lockfileOpts = { useGitBranchLockfile: opts.useGitBranchLockfile, mergeGitBranchLockfiles: opts.mergeGitBranchLockfiles } if (opts.useLockfile) { await writeLockfiles({ currentLockfile: updatedCurrentLockfile, @@ -147,7 +147,7 @@ export async function link ( ...lockfileOpts, }) } else { - await writeCurrentLockfile(ctx.virtualStoreDir, updatedCurrentLockfile, lockfileOpts) + await writeCurrentLockfile(ctx.virtualStoreDir, updatedCurrentLockfile) } summaryLogger.debug({ prefix: opts.dir }) diff --git a/pkg-manager/core/src/link/options.ts b/pkg-manager/core/src/link/options.ts index 6dca21a140..ae307d33af 100644 --- a/pkg-manager/core/src/link/options.ts +++ b/pkg-manager/core/src/link/options.ts @@ -13,7 +13,6 @@ interface StrictLinkOptions { binsDir: string excludeLinksFromLockfile: boolean force: boolean - forceSharedLockfile: boolean useLockfile: boolean lockfileDir: string nodeLinker: 'isolated' | 'hoisted' | 'pnp' @@ -61,7 +60,6 @@ async function defaults (opts: LinkOptions) { binsDir: path.join(dir, 'node_modules', '.bin'), dir, force: false, - forceSharedLockfile: false, hoistPattern: undefined, lockfileDir: opts.lockfileDir ?? dir, nodeLinker: 'isolated', diff --git a/pkg-manager/core/test/hoistedNodeLinker/uninstall.ts b/pkg-manager/core/test/hoistedNodeLinker/uninstall.ts index e572bdd4dd..7a66f31e54 100644 --- a/pkg-manager/core/test/hoistedNodeLinker/uninstall.ts +++ b/pkg-manager/core/test/hoistedNodeLinker/uninstall.ts @@ -100,7 +100,7 @@ test('uninstall package with dependencies and do not touch other deps', async () expect(manifest.dependencies).toStrictEqual({ 'is-negative': '2.1.0' }) const lockfile = project.readLockfile() - expect(lockfile.dependencies).toStrictEqual({ + expect(lockfile.importers['.'].dependencies).toStrictEqual({ 'is-negative': { specifier: '2.1.0', version: '2.1.0', diff --git a/pkg-manager/core/test/install/aliases.ts b/pkg-manager/core/test/install/aliases.ts index 7b304d28f1..f96dfa1b45 100644 --- a/pkg-manager/core/test/install/aliases.ts +++ b/pkg-manager/core/test/install/aliases.ts @@ -17,14 +17,18 @@ test('installing aliased dependency', async () => { autoInstallPeers: true, excludeLinksFromLockfile: false, }, - dependencies: { - negative: { - specifier: 'npm:is-negative@1.0.0', - version: '/is-negative@1.0.0', - }, - positive: { - specifier: 'npm:is-positive@^3.1.0', - version: '/is-positive@3.1.0', + importers: { + '.': { + dependencies: { + negative: { + specifier: 'npm:is-negative@1.0.0', + version: '/is-negative@1.0.0', + }, + positive: { + specifier: 'npm:is-positive@^3.1.0', + version: '/is-positive@3.1.0', + }, + }, }, }, lockfileVersion: LOCKFILE_VERSION, @@ -78,10 +82,14 @@ test('a dependency has an aliased subdependency', async () => { autoInstallPeers: true, excludeLinksFromLockfile: false, }, - dependencies: { - '@pnpm.e2e/pkg-with-1-aliased-dep': { - specifier: '^100.0.0', - version: '100.0.0', + importers: { + '.': { + dependencies: { + '@pnpm.e2e/pkg-with-1-aliased-dep': { + specifier: '^100.0.0', + version: '100.0.0', + }, + }, }, }, lockfileVersion: LOCKFILE_VERSION, diff --git a/pkg-manager/core/test/install/autoInstallPeers.ts b/pkg-manager/core/test/install/autoInstallPeers.ts index b96fd7c670..2113945f7e 100644 --- a/pkg-manager/core/test/install/autoInstallPeers.ts +++ b/pkg-manager/core/test/install/autoInstallPeers.ts @@ -197,7 +197,7 @@ test('automatically install root peer dependencies', async () => { { const lockfile = project.readLockfile() - expect(lockfile.dependencies).toStrictEqual({ + expect(lockfile.importers['.'].dependencies).toStrictEqual({ 'is-positive': { specifier: '^1.0.0', version: '1.0.0', @@ -225,7 +225,7 @@ test('automatically install root peer dependencies', async () => { { const lockfile = project.readLockfile() - expect(lockfile.dependencies).toStrictEqual({ + expect(lockfile.importers['.'].dependencies).toStrictEqual({ 'is-odd': { specifier: '1.0.0', version: '1.0.0', @@ -254,7 +254,7 @@ test('automatically install root peer dependencies', async () => { { const lockfile = project.readLockfile() - expect(lockfile.dependencies).toStrictEqual({ + expect(lockfile.importers['.'].dependencies).toStrictEqual({ 'is-positive': { specifier: '^1.0.0', version: '1.0.0', @@ -600,5 +600,5 @@ test('do not override the direct dependency with an auto installed peer dependen }, })) const lockfile = project.readLockfile() - expect(lockfile.dependencies.rxjs.version).toStrictEqual('6.6.7') + expect(lockfile.importers['.'].dependencies?.rxjs.version).toStrictEqual('6.6.7') }) diff --git a/pkg-manager/core/test/install/fromRepo.ts b/pkg-manager/core/test/install/fromRepo.ts index a83f1cd9f6..1b68249f87 100644 --- a/pkg-manager/core/test/install/fromRepo.ts +++ b/pkg-manager/core/test/install/fromRepo.ts @@ -68,7 +68,7 @@ test('from a github repo with different name via named installation', async () = expect(manifest.dependencies).toStrictEqual({ 'say-hi': 'github:zkochan/hi#4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd' }) const lockfile = project.readLockfile() - expect(lockfile.dependencies).toStrictEqual({ + expect(lockfile.importers['.'].dependencies).toStrictEqual({ 'say-hi': { specifier: 'github:zkochan/hi#4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd', version: 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd', @@ -111,7 +111,7 @@ test('from a github repo with different name', async () => { }) const lockfile = project.readLockfile() - expect(lockfile.dependencies).toStrictEqual({ + expect(lockfile.importers['.'].dependencies).toStrictEqual({ 'say-hi': { specifier: 'github:zkochan/hi#4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd', version: 'github.com/zkochan/hi/4cdebec76b7b9d1f6e219e06c42d92a6b8ea60cd', @@ -248,7 +248,7 @@ test('re-adding a git repo with a different tag', async () => { }) expect(JSON.parse(fs.readFileSync('./node_modules/is-negative/package.json', 'utf8')).version).toBe('1.0.0') let lockfile = project.readLockfile() - expect(lockfile.dependencies['is-negative']).toEqual({ + expect(lockfile.importers['.'].dependencies?.['is-negative']).toEqual({ specifier: 'github:kevva/is-negative#1.0.0', version: 'github.com/kevva/is-negative/163360a8d3ae6bee9524541043197ff356f8ed99', }) @@ -267,7 +267,7 @@ test('re-adding a git repo with a different tag', async () => { project.has('is-negative') expect(JSON.parse(fs.readFileSync('./node_modules/is-negative/package.json', 'utf8')).version).toBe('1.0.1') lockfile = project.readLockfile() - expect(lockfile.dependencies['is-negative']).toEqual({ + expect(lockfile.importers['.'].dependencies?.['is-negative']).toEqual({ specifier: 'github:kevva/is-negative#1.0.1', version: 'github.com/kevva/is-negative/9a89df745b2ec20ae7445d3d9853ceaeef5b0b72', }) @@ -303,7 +303,7 @@ test('should not update when adding unrelated dependency', async () => { const project = assertProject(withGitProtocolDepFixture) project.has('is-number') expect(fs.existsSync('./node_modules/.pnpm/github.com+kevva+is-negative+219c424611ff4a2af15f7deeff4f93c62558c43d')).toBe(true) - expect((project.readLockfile()).dependencies).toEqual({ + expect(project.readLockfile().importers['.'].dependencies).toEqual({ 'is-negative': { specifier: 'github:kevva/is-negative#master', version: 'github.com/kevva/is-negative/219c424611ff4a2af15f7deeff4f93c62558c43d', diff --git a/pkg-manager/core/test/install/gitBranchLockfile.test.ts b/pkg-manager/core/test/install/gitBranchLockfile.test.ts index 79356bacd5..9054fcf05b 100644 --- a/pkg-manager/core/test/install/gitBranchLockfile.test.ts +++ b/pkg-manager/core/test/install/gitBranchLockfile.test.ts @@ -183,14 +183,18 @@ test('install with --merge-git-branch-lockfiles when merged lockfile is up to da // is-positive installed in the other branch const otherLockfilePath: string = path.resolve('pnpm-lock.other.yaml') const otherLockfileContent = { - dependencies: { - '@types/semver': { - specifier: '5.3.31', - version: '5.3.31', - }, - 'is-positive': { - specifier: '^3.1.0', - version: '3.1.0', + importers: { + '.': { + dependencies: { + '@types/semver': { + specifier: '5.3.31', + version: '5.3.31', + }, + 'is-positive': { + specifier: '^3.1.0', + version: '3.1.0', + }, + }, }, }, lockfileVersion: LOCKFILE_VERSION, diff --git a/pkg-manager/core/test/install/local.ts b/pkg-manager/core/test/install/local.ts index 57fc421467..b2dba715d0 100644 --- a/pkg-manager/core/test/install/local.ts +++ b/pkg-manager/core/test/install/local.ts @@ -49,10 +49,14 @@ test('local file', async () => { autoInstallPeers: true, excludeLinksFromLockfile: false, }, - dependencies: { - 'local-pkg': { - specifier: expectedSpecs['local-pkg'], - version: 'link:../local-pkg', + importers: { + '.': { + dependencies: { + 'local-pkg': { + specifier: expectedSpecs['local-pkg'], + version: 'link:../local-pkg', + }, + }, }, }, lockfileVersion: LOCKFILE_VERSION, @@ -107,10 +111,14 @@ test('local file via link:', async () => { autoInstallPeers: true, excludeLinksFromLockfile: false, }, - dependencies: { - 'local-pkg': { - specifier: expectedSpecs['local-pkg'], - version: 'link:../local-pkg', + importers: { + '.': { + dependencies: { + 'local-pkg': { + specifier: expectedSpecs['local-pkg'], + version: 'link:../local-pkg', + }, + }, }, }, lockfileVersion: LOCKFILE_VERSION, @@ -139,10 +147,14 @@ test('local file with symlinked node_modules', async () => { autoInstallPeers: true, excludeLinksFromLockfile: false, }, - dependencies: { - 'local-pkg': { - specifier: expectedSpecs['local-pkg'], - version: 'link:../local-pkg', + importers: { + '.': { + dependencies: { + 'local-pkg': { + specifier: expectedSpecs['local-pkg'], + version: 'link:../local-pkg', + }, + }, }, }, lockfileVersion: LOCKFILE_VERSION, @@ -170,7 +182,7 @@ test('tarball local package', async () => { expect(manifest.dependencies).toStrictEqual({ 'tar-pkg': pkgSpec }) const lockfile = project.readLockfile() - expect(lockfile.packages[lockfile.dependencies['tar-pkg'].version]).toStrictEqual({ + expect(lockfile.packages[lockfile.importers['.'].dependencies!['tar-pkg'].version]).toStrictEqual({ dev: false, name: 'tar-pkg', resolution: { @@ -200,8 +212,8 @@ test('tarball local package from project directory', async () => { expect(manifest.dependencies).toStrictEqual({ 'tar-pkg': pkgSpec }) const lockfile = project.readLockfile() - expect(lockfile.dependencies['tar-pkg'].version).toBe(pkgSpec) - expect(lockfile.packages[lockfile.dependencies['tar-pkg'].version]).toStrictEqual({ + expect(lockfile.importers['.'].dependencies?.['tar-pkg'].version).toBe(pkgSpec) + expect(lockfile.packages[lockfile.importers['.'].dependencies!['tar-pkg'].version]).toStrictEqual({ dev: false, name: 'tar-pkg', resolution: { @@ -404,10 +416,14 @@ test('re-install should update local file dependency', async () => { autoInstallPeers: true, excludeLinksFromLockfile: false, }, - dependencies: { - 'local-pkg': { - specifier: expectedSpecs['local-pkg'], - version: 'file:../local-pkg', + importers: { + '.': { + dependencies: { + 'local-pkg': { + specifier: expectedSpecs['local-pkg'], + version: 'file:../local-pkg', + }, + }, }, }, packages: { diff --git a/pkg-manager/core/test/install/lockfileOnly.ts b/pkg-manager/core/test/install/lockfileOnly.ts index f57fd72cbd..7a9b1898a0 100644 --- a/pkg-manager/core/test/install/lockfileOnly.ts +++ b/pkg-manager/core/test/install/lockfileOnly.ts @@ -28,7 +28,7 @@ test('install with lockfileOnly = true', async () => { expect(manifest.dependencies!['@pnpm.e2e/pkg-with-1-dep']).toBeTruthy() const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/pkg-with-1-dep']).toBeTruthy() + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/pkg-with-1-dep']).toBeTruthy() expect(lockfile.packages['/@pnpm.e2e/pkg-with-1-dep@100.0.0']).toBeTruthy() const currentLockfile = project.readCurrentLockfile() @@ -68,7 +68,7 @@ test('warn when installing with lockfileOnly = true and node_modules exists', as expect(manifest.dependencies!.rimraf).toBeTruthy() const lockfile = project.readLockfile() - expect(lockfile.dependencies.rimraf).toBeTruthy() + expect(lockfile.importers['.'].dependencies?.rimraf).toBeTruthy() expect(lockfile.packages['/rimraf@2.5.1']).toBeTruthy() const currentLockfile = project.readCurrentLockfile() diff --git a/pkg-manager/core/test/install/misc.ts b/pkg-manager/core/test/install/misc.ts index f192720094..597ec9b702 100644 --- a/pkg-manager/core/test/install/misc.ts +++ b/pkg-manager/core/test/install/misc.ts @@ -44,7 +44,7 @@ test('spec not specified in package.json.dependencies', async () => { }, testDefaults()) const lockfile = project.readLockfile() - expect(lockfile.dependencies['is-positive'].specifier).toBe('') + expect(lockfile.importers['.'].dependencies?.['is-positive'].specifier).toBe('') }) test.skip('ignoring some files in the dependency', async () => { diff --git a/pkg-manager/core/test/install/optionalDependencies.ts b/pkg-manager/core/test/install/optionalDependencies.ts index a9bde0707f..ae27e18c9d 100644 --- a/pkg-manager/core/test/install/optionalDependencies.ts +++ b/pkg-manager/core/test/install/optionalDependencies.ts @@ -55,7 +55,7 @@ test('skip non-existing optional dependency', async () => { const lockfile = project.readLockfile() - expect(lockfile.dependencies['is-positive'].specifier).toBe('1.0.0') + expect(lockfile.importers['.'].dependencies?.['is-positive'].specifier).toBe('1.0.0') }) test('skip optional dependency that does not support the current OS', async () => { diff --git a/pkg-manager/core/test/install/peerDependencies.ts b/pkg-manager/core/test/install/peerDependencies.ts index fe05be0d4c..1f9a830aca 100644 --- a/pkg-manager/core/test/install/peerDependencies.ts +++ b/pkg-manager/core/test/install/peerDependencies.ts @@ -1674,7 +1674,7 @@ test('resolve peer of peer from the dependencies of the direct dependent package const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/has-has-y-peer-only-as-peer-and-y'].version).toBe('1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))') + expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/has-has-y-peer-only-as-peer-and-y'].version).toBe('1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))') // Even though @pnpm/y@1.0.0 is in the dependencies of the direct dependent package, we resolve y from above. // It might make sense to print a warning in this case and suggest to make y a peer dependency in the dependent package too. expect(lockfile.packages['/@pnpm.e2e/has-has-y-peer-only-as-peer-and-y@1.0.0(@pnpm.e2e/has-y-peer@1.0.0(@pnpm/y@2.0.0))'].dependencies?.['@pnpm.e2e/has-y-peer']).toBe('1.0.0(@pnpm/y@2.0.0)') @@ -1686,8 +1686,8 @@ test('2 circular peers', async () => { const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/circular-peer-a'].version).toBe('1.0.0(@pnpm.e2e/circular-peer-b@1.0.0)') - expect(lockfile.dependencies['@pnpm.e2e/circular-peer-b'].version).toBe('1.0.0(@pnpm.e2e/circular-peer-a@1.0.0)') + expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/circular-peer-a'].version).toBe('1.0.0(@pnpm.e2e/circular-peer-b@1.0.0)') + expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/circular-peer-b'].version).toBe('1.0.0(@pnpm.e2e/circular-peer-a@1.0.0)') }) test('3 circular peers', async () => { @@ -1701,9 +1701,9 @@ test('3 circular peers', async () => { const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/circular-peers-1-of-3'].version).toBe('1.0.0(@pnpm.e2e/circular-peers-2-of-3@1.0.0)(@pnpm.e2e/peer-a@1.0.0)') - expect(lockfile.dependencies['@pnpm.e2e/circular-peers-2-of-3'].version).toBe('1.0.0(@pnpm.e2e/circular-peers-3-of-3@1.0.0)(@pnpm.e2e/peer-a@1.0.0)(@pnpm.e2e/peer-b@1.0.0)') - expect(lockfile.dependencies['@pnpm.e2e/circular-peers-3-of-3'].version).toBe('1.0.0(@pnpm.e2e/circular-peers-1-of-3@1.0.0)') + expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/circular-peers-1-of-3'].version).toBe('1.0.0(@pnpm.e2e/circular-peers-2-of-3@1.0.0)(@pnpm.e2e/peer-a@1.0.0)') + expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/circular-peers-2-of-3'].version).toBe('1.0.0(@pnpm.e2e/circular-peers-3-of-3@1.0.0)(@pnpm.e2e/peer-a@1.0.0)(@pnpm.e2e/peer-b@1.0.0)') + expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/circular-peers-3-of-3'].version).toBe('1.0.0(@pnpm.e2e/circular-peers-1-of-3@1.0.0)') }) test('3 circular peers in workspace root', async () => { diff --git a/pkg-manager/core/test/install/updatingPkgJson.ts b/pkg-manager/core/test/install/updatingPkgJson.ts index 2bbef6576e..fc12d97e9e 100644 --- a/pkg-manager/core/test/install/updatingPkgJson.ts +++ b/pkg-manager/core/test/install/updatingPkgJson.ts @@ -74,10 +74,10 @@ test('dependency should not be added to package.json if it is already there', as const lockfile = project.readLockfile() - expect(lockfile.devDependencies['@pnpm.e2e/foo'].version).toBe('100.0.0') + expect(lockfile.importers['.'].devDependencies?.['@pnpm.e2e/foo'].version).toBe('100.0.0') expect(lockfile.packages['/@pnpm.e2e/foo@100.0.0'].dev).toBeTruthy() - expect(lockfile.optionalDependencies['@pnpm.e2e/bar'].version).toBe('100.0.0') + expect(lockfile.importers['.'].optionalDependencies?.['@pnpm.e2e/bar'].version).toBe('100.0.0') expect(lockfile.packages['/@pnpm.e2e/bar@100.0.0'].optional).toBeTruthy() }) @@ -151,7 +151,7 @@ test('dependency should be removed from the old field when installing it as a di { const lockfile = project.readCurrentLockfile() - expect(Object.keys(lockfile.dependencies)).toStrictEqual(['@pnpm.e2e/bar', '@pnpm.e2e/foo', '@pnpm.e2e/qar']) + expect(Object.keys(lockfile.importers['.'].dependencies ?? {})).toStrictEqual(['@pnpm.e2e/bar', '@pnpm.e2e/foo', '@pnpm.e2e/qar']) } // manually editing package.json. Converting all prod deps to dev deps @@ -163,7 +163,7 @@ test('dependency should be removed from the old field when installing it as a di { const lockfile = project.readCurrentLockfile() - expect(Object.keys(lockfile.devDependencies)).toStrictEqual(['@pnpm.e2e/bar', '@pnpm.e2e/foo', '@pnpm.e2e/qar']) + expect(Object.keys(lockfile.importers['.'].devDependencies ?? {})).toStrictEqual(['@pnpm.e2e/bar', '@pnpm.e2e/foo', '@pnpm.e2e/qar']) expect(lockfile.dependencies).toBeFalsy() } }) diff --git a/pkg-manager/core/test/link.ts b/pkg-manager/core/test/link.ts index cfbac058b8..4023022de4 100644 --- a/pkg-manager/core/test/link.ts +++ b/pkg-manager/core/test/link.ts @@ -35,13 +35,13 @@ test('relative link', async () => { project.isExecutable('.bin/hello-world-js-bin') const wantedLockfile = project.readLockfile() - expect(wantedLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toStrictEqual({ + expect(wantedLockfile.importers['.'].dependencies?.['@pnpm.e2e/hello-world-js-bin']).toStrictEqual({ version: 'link:../hello-world-js-bin', specifier: '*', }) const currentLockfile = project.readCurrentLockfile() - expect(currentLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toStrictEqual({ + expect(currentLockfile.importers['.'].dependencies?.['@pnpm.e2e/hello-world-js-bin']).toStrictEqual({ version: 'link:../hello-world-js-bin', specifier: '*', }) @@ -66,7 +66,7 @@ test('relative link is linked by the name of the alias', async () => { project.has('hello') const wantedLockfile = project.readLockfile() - expect(wantedLockfile.dependencies).toStrictEqual({ + expect(wantedLockfile.importers['.'].dependencies).toStrictEqual({ hello: { specifier: 'link:../hello-world-js-bin', version: 'link:../hello-world-js-bin', @@ -154,10 +154,10 @@ test('relative link is rewritten by named installation to regular dependency', a expect(project.requireModule('@pnpm.e2e/hello-world-js-bin/package.json').isLocal).toBeFalsy() const wantedLockfile = project.readLockfile() - expect(wantedLockfile.dependencies['@pnpm.e2e/hello-world-js-bin'].version).toBe('1.0.0') + expect(wantedLockfile.importers['.'].dependencies?.['@pnpm.e2e/hello-world-js-bin'].version).toBe('1.0.0') const currentLockfile = project.readCurrentLockfile() - expect(currentLockfile.dependencies['@pnpm.e2e/hello-world-js-bin'].version).toBe('1.0.0') + expect(currentLockfile.importers['.'].dependencies?.['@pnpm.e2e/hello-world-js-bin'].version).toBe('1.0.0') }) test('relative link uses realpath when contained in a symlinked dir', async () => { @@ -237,7 +237,7 @@ test('link should not change the type of the dependency', async () => { project.isExecutable('.bin/hello-world-js-bin') const wantedLockfile = project.readLockfile() - expect(wantedLockfile.devDependencies).toStrictEqual({ + expect(wantedLockfile.importers['.'].devDependencies).toStrictEqual({ '@pnpm.e2e/hello-world-js-bin': { version: 'link:../hello-world-js-bin', specifier: '*', diff --git a/pkg-manager/core/test/lockfile.ts b/pkg-manager/core/test/lockfile.ts index 5d1c6740db..608c8a6764 100644 --- a/pkg-manager/core/test/lockfile.ts +++ b/pkg-manager/core/test/lockfile.ts @@ -54,10 +54,10 @@ test('lockfile has correct format', async () => { expect(lockfile.lockfileVersion).toBe(LOCKFILE_VERSION) - expect(lockfile.dependencies).toBeTruthy() - expect(lockfile.dependencies['@pnpm.e2e/pkg-with-1-dep'].version).toBe('100.0.0') - expect(lockfile.dependencies).toHaveProperty(['@rstacruz/tap-spec']) - expect(lockfile.dependencies['is-negative'].version).toContain('/') // has not shortened tarball from the non-standard registry + expect(lockfile.importers?.['.'].dependencies).toBeTruthy() + expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/pkg-with-1-dep'].version).toBe('100.0.0') + expect(lockfile.importers?.['.'].dependencies).toHaveProperty(['@rstacruz/tap-spec']) + expect(lockfile.importers?.['.'].dependencies?.['is-negative'].version).toContain('/') // has not shortened tarball from the non-standard registry expect(lockfile.packages).toBeTruthy() // has packages field expect(lockfile.packages).toHaveProperty([id]) @@ -84,9 +84,9 @@ test('lockfile has dev deps even when installing for prod only', async () => { const lockfile = project.readLockfile() const id = '/is-negative@2.1.0' - expect(lockfile.devDependencies).toBeTruthy() + expect(lockfile.importers['.'].devDependencies).toBeTruthy() - expect(lockfile.devDependencies['is-negative'].version).toBe('2.1.0') + expect(lockfile.importers['.'].devDependencies?.['is-negative'].version).toBe('2.1.0') expect(lockfile.packages[id]).toBeTruthy() }) @@ -142,7 +142,7 @@ test("lockfile doesn't lock subdependencies that don't satisfy the new specs", a const lockfile = project.readLockfile() - expect(Object.keys(lockfile.dependencies).length).toBe(1) // resolutions not duplicated + expect(Object.keys(lockfile.importers!['.'].dependencies!).length).toBe(1) // resolutions not duplicated }) test('a lockfile created even when there are no deps in package.json', async () => { @@ -236,9 +236,9 @@ test('lockfile is fixed when it does not match package.json', async () => { const lockfile = project.readLockfile() - expect(lockfile.devDependencies['is-negative'].version).toBe('2.1.0') - expect(lockfile.optionalDependencies['is-positive'].version).toBe('3.1.0') - expect(lockfile.dependencies).toBeFalsy() + expect(lockfile.importers?.['.'].devDependencies?.['is-negative'].version).toBe('2.1.0') + expect(lockfile.importers?.['.'].optionalDependencies?.['is-positive'].version).toBe('3.1.0') + expect(lockfile.importers?.['.'].dependencies).toBeFalsy() expect(lockfile.packages).not.toHaveProperty(['/@types/semver@5.3.31']) }) @@ -388,8 +388,8 @@ test("recreates lockfile if it doesn't match the dependencies in package.json", manifest = await addDependenciesToPackage(manifest, ['map-obj@1.0.0'], testDefaults({ pinnedVersion: 'patch', targetDependenciesField: 'optionalDependencies' })) const lockfile1 = project.readLockfile() - expect(lockfile1.dependencies['is-negative'].version).toBe('1.0.0') - expect(lockfile1.dependencies['is-negative'].specifier).toBe('1.0.0') + expect(lockfile1.importers['.'].dependencies?.['is-negative'].version).toBe('1.0.0') + expect(lockfile1.importers['.'].dependencies?.['is-negative'].specifier).toBe('1.0.0') manifest.dependencies!['is-negative'] = '^2.1.0' manifest.devDependencies!['is-positive'] = '^2.0.0' @@ -398,15 +398,16 @@ test("recreates lockfile if it doesn't match the dependencies in package.json", await install(manifest, testDefaults()) const lockfile = project.readLockfile() + const importer = lockfile.importers!['.']! - expect(lockfile.dependencies['is-negative'].version).toBe('2.1.0') - expect(lockfile.dependencies['is-negative'].specifier).toBe('^2.1.0') + expect(importer.dependencies!['is-negative'].version).toBe('2.1.0') + expect(importer.dependencies!['is-negative'].specifier).toBe('^2.1.0') - expect(lockfile.devDependencies['is-positive'].version).toBe('2.0.0') - expect(lockfile.devDependencies['is-positive'].specifier).toBe('^2.0.0') + expect(importer.devDependencies!['is-positive'].version).toBe('2.0.0') + expect(importer.devDependencies!['is-positive'].specifier).toBe('^2.0.0') - expect(lockfile.optionalDependencies['map-obj'].version).toBe('1.0.1') - expect(lockfile.optionalDependencies['map-obj'].specifier).toBe('1.0.1') + expect(importer.optionalDependencies!['map-obj'].version).toBe('1.0.1') + expect(importer.optionalDependencies!['map-obj'].specifier).toBe('1.0.1') }) test('repeat install with lockfile should not mutate lockfile when dependency has version specified with v prefix', async () => { @@ -416,7 +417,7 @@ test('repeat install with lockfile should not mutate lockfile when dependency ha const lockfile1 = project.readLockfile() - expect(lockfile1.dependencies['highmaps-release'].version).toBe('5.0.11') + expect(lockfile1.importers['.'].dependencies?.['highmaps-release'].version).toBe('5.0.11') rimraf('node_modules') @@ -478,18 +479,22 @@ test('scoped module from different registry', async () => { autoInstallPeers: true, excludeLinksFromLockfile: false, }, - dependencies: { - '@foo/has-dep-from-same-scope': { - specifier: '^1.0.0', - version: '1.0.0', - }, - '@zkochan/foo': { - specifier: '^1.0.0', - version: '1.0.0', - }, - 'is-positive': { - specifier: '^3.1.0', - version: '3.1.0', + importers: { + '.': { + dependencies: { + '@foo/has-dep-from-same-scope': { + specifier: '^1.0.0', + version: '1.0.0', + }, + '@zkochan/foo': { + specifier: '^1.0.0', + version: '1.0.0', + }, + 'is-positive': { + specifier: '^3.1.0', + version: '3.1.0', + }, + }, }, }, lockfileVersion: LOCKFILE_VERSION, @@ -564,10 +569,10 @@ test('packages are placed in devDependencies even if they are present as non-dev }, }, testDefaults({ reporter })) - const lockfile = project.readLockfile() + const importer = project.readLockfile().importers!['.']! - expect(lockfile.devDependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep']) - expect(lockfile.devDependencies).toHaveProperty(['@pnpm.e2e/pkg-with-1-dep']) + expect(importer.devDependencies).toHaveProperty(['@pnpm.e2e/dep-of-pkg-with-1-dep']) + expect(importer.devDependencies).toHaveProperty(['@pnpm.e2e/pkg-with-1-dep']) expect(reporter.calledWithMatch({ added: { @@ -789,14 +794,18 @@ test('packages installed via tarball URL from the default registry are normalize autoInstallPeers: true, excludeLinksFromLockfile: false, }, - dependencies: { - 'is-positive': { - specifier: 'https://registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz', - version: '@registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz', - }, - '@pnpm.e2e/pkg-with-tarball-dep-from-registry': { - specifier: `http://localhost:${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-tarball-dep-from-registry/-/pkg-with-tarball-dep-from-registry-1.0.0.tgz`, - version: '1.0.0', + importers: { + '.': { + dependencies: { + 'is-positive': { + specifier: 'https://registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz', + version: '@registry.npmjs.org/is-positive/-/is-positive-1.0.0.tgz', + }, + '@pnpm.e2e/pkg-with-tarball-dep-from-registry': { + specifier: `http://localhost:${REGISTRY_MOCK_PORT}/@pnpm.e2e/pkg-with-tarball-dep-from-registry/-/pkg-with-tarball-dep-from-registry-1.0.0.tgz`, + version: '1.0.0', + }, + }, }, }, lockfileVersion: LOCKFILE_VERSION, @@ -1124,10 +1133,14 @@ test('tarball domain differs from registry domain', async () => { autoInstallPeers: true, excludeLinksFromLockfile: false, }, - dependencies: { - 'is-positive': { - specifier: '^3.1.0', - version: '3.1.0', + importers: { + '.': { + dependencies: { + 'is-positive': { + specifier: '^3.1.0', + version: '3.1.0', + }, + }, }, }, lockfileVersion: LOCKFILE_VERSION, @@ -1171,10 +1184,14 @@ test('tarball installed through non-standard URL endpoint from the registry doma autoInstallPeers: true, excludeLinksFromLockfile: false, }, - dependencies: { - 'is-positive': { - specifier: 'https://registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz', - version: '@registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz', + importers: { + '.': { + dependencies: { + 'is-positive': { + specifier: 'https://registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz', + version: '@registry.npmjs.org/is-positive/download/is-positive-3.1.0.tgz', + }, + }, }, }, lockfileVersion: LOCKFILE_VERSION, @@ -1228,7 +1245,7 @@ packages: }, testDefaults()) const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.1.0') + expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.1.0') }) test('a lockfile v6 with merge conflicts is autofixed', async () => { @@ -1266,7 +1283,7 @@ packages: }, testDefaults()) const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep']).toHaveProperty('version', '100.1.0') + expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toHaveProperty('version', '100.1.0') }) test('a lockfile with duplicate keys is fixed', async () => { @@ -1295,7 +1312,7 @@ packages: }, testDefaults({ reporter })) const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.0.0') + expect(lockfile.importers?.['.'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.0.0') expect(reporter).toBeCalledWith(expect.objectContaining({ level: 'warn', diff --git a/pkg-manager/core/test/uninstall.ts b/pkg-manager/core/test/uninstall.ts index 09d3d59850..1ab0d613f8 100644 --- a/pkg-manager/core/test/uninstall.ts +++ b/pkg-manager/core/test/uninstall.ts @@ -160,7 +160,7 @@ test('uninstall package with dependencies and do not touch other deps', async () expect(manifest.dependencies).toStrictEqual({ 'is-negative': '2.1.0' }) const lockfile = project.readLockfile() - expect(lockfile.dependencies).toStrictEqual({ + expect(lockfile.importers['.'].dependencies).toStrictEqual({ 'is-negative': { specifier: '2.1.0', version: '2.1.0', diff --git a/pkg-manager/get-context/src/index.ts b/pkg-manager/get-context/src/index.ts index a1b7c753e8..da1174916c 100644 --- a/pkg-manager/get-context/src/index.ts +++ b/pkg-manager/get-context/src/index.ts @@ -78,7 +78,6 @@ export interface GetContextOptions { confirmModulesPurge?: boolean force: boolean forceNewModules?: boolean - forceSharedLockfile: boolean frozenLockfile?: boolean extraBinPaths: string[] extendNodePath?: boolean @@ -185,7 +184,6 @@ export async function getContext ( autoInstallPeers: opts.autoInstallPeers, excludeLinksFromLockfile: opts.excludeLinksFromLockfile, force: opts.force, - forceSharedLockfile: opts.forceSharedLockfile, frozenLockfile: opts.frozenLockfile === true, lockfileDir: opts.lockfileDir, projects: importersContext.projects, @@ -409,7 +407,6 @@ export async function getContextForSingleImporter ( excludeLinksFromLockfile: boolean force: boolean forceNewModules?: boolean - forceSharedLockfile: boolean confirmModulesPurge?: boolean extraBinPaths: string[] extendNodePath?: boolean @@ -524,7 +521,6 @@ export async function getContextForSingleImporter ( autoInstallPeers: opts.autoInstallPeers, excludeLinksFromLockfile: opts.excludeLinksFromLockfile, force: opts.force, - forceSharedLockfile: opts.forceSharedLockfile, frozenLockfile: false, lockfileDir: opts.lockfileDir, projects: [{ id: importerId, rootDir: opts.dir }], diff --git a/pkg-manager/get-context/src/readLockfiles.ts b/pkg-manager/get-context/src/readLockfiles.ts index 498dcb7d4d..5a031d3c08 100644 --- a/pkg-manager/get-context/src/readLockfiles.ts +++ b/pkg-manager/get-context/src/readLockfiles.ts @@ -30,7 +30,6 @@ export async function readLockfiles ( autoInstallPeers: boolean excludeLinksFromLockfile: boolean force: boolean - forceSharedLockfile: boolean frozenLockfile: boolean projects: Array<{ id: string diff --git a/pkg-manager/get-context/test/index.ts b/pkg-manager/get-context/test/index.ts index b485705b6c..aebbf405b6 100644 --- a/pkg-manager/get-context/test/index.ts +++ b/pkg-manager/get-context/test/index.ts @@ -9,7 +9,6 @@ const DEFAULT_OPTIONS: GetContextOptions = { excludeLinksFromLockfile: false, extraBinPaths: [], force: false, - forceSharedLockfile: false, lockfileDir: path.join(__dirname, 'lockfile'), nodeLinker: 'isolated', hoistPattern: ['*'], diff --git a/pkg-manager/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml index f7bb7d4667..0238d659ae 100644 --- a/pkg-manager/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/deps-have-lifecycle-scripts/pnpm-lock.yaml @@ -4,10 +4,13 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@pnpm.e2e/pre-and-postinstall-scripts-example': - specifier: '*' - version: 2.0.0 +importers: + + .: + dependencies: + '@pnpm.e2e/pre-and-postinstall-scripts-example': + specifier: '*' + version: 2.0.0 packages: diff --git a/pkg-manager/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml index 9a993d776e..3dbf0ff374 100644 --- a/pkg-manager/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-glob-and-rimraf/pnpm-lock.yaml @@ -4,13 +4,16 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - glob: - specifier: ^7.0.5 - version: 7.2.3 - rimraf: - specifier: ^2.6.2 - version: 2.7.1 +importers: + + .: + dependencies: + glob: + specifier: ^7.0.5 + version: 7.2.3 + rimraf: + specifier: ^2.6.2 + version: 2.7.1 packages: diff --git a/pkg-manager/headless/test/fixtures/has-glob/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-glob/pnpm-lock.yaml index 5b4b85de13..fb1fd49e39 100644 --- a/pkg-manager/headless/test/fixtures/has-glob/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-glob/pnpm-lock.yaml @@ -4,10 +4,13 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - glob: - specifier: ^7.0.5 - version: 7.2.3 +importers: + + .: + dependencies: + glob: + specifier: ^7.0.5 + version: 7.2.3 packages: diff --git a/pkg-manager/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml index 87f728ac16..7f29df56b4 100644 --- a/pkg-manager/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-incompatible-optional-subdep/pnpm-lock.yaml @@ -4,10 +4,13 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@pnpm.e2e/pkg-with-optional': - specifier: 1.0.0 - version: 1.0.0 +importers: + + .: + dependencies: + '@pnpm.e2e/pkg-with-optional': + specifier: 1.0.0 + version: 1.0.0 packages: diff --git a/pkg-manager/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml index 0e400873ff..1c7421e186 100644 --- a/pkg-manager/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-local-dep/pkg/pnpm-lock.yaml @@ -4,10 +4,13 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - tar-pkg: - specifier: file:../tar-pkg-1.0.0.tgz - version: file:../tar-pkg-1.0.0.tgz +importers: + + .: + dependencies: + tar-pkg: + specifier: file:../tar-pkg-1.0.0.tgz + version: file:../tar-pkg-1.0.0.tgz packages: diff --git a/pkg-manager/headless/test/fixtures/has-local-dir-dep/example/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-local-dir-dep/example/pnpm-lock.yaml index 214b0c3c0f..f4c8b00745 100644 --- a/pkg-manager/headless/test/fixtures/has-local-dir-dep/example/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-local-dir-dep/example/pnpm-lock.yaml @@ -3,3 +3,7 @@ lockfileVersion: '7.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false + +importers: + + .: {} diff --git a/pkg-manager/headless/test/fixtures/has-local-dir-dep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-local-dir-dep/pnpm-lock.yaml index aecf411666..86f8a77f07 100644 --- a/pkg-manager/headless/test/fixtures/has-local-dir-dep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-local-dir-dep/pnpm-lock.yaml @@ -4,7 +4,10 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - example: - specifier: link:example - version: link:example +importers: + + .: + dependencies: + example: + specifier: link:example + version: link:example diff --git a/pkg-manager/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml index 460b9beb0c..77f5102d70 100644 --- a/pkg-manager/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-nonexistent-optional-dep/pnpm-lock.yaml @@ -4,18 +4,20 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - is-positive: - specifier: ^1.0.0 - version: 1.0.0 - rimraf: - specifier: ^2.6.2 - version: 2.7.1 +importers: -devDependencies: - is-negative: - specifier: ^2.1.0 - version: 2.1.0 + .: + dependencies: + is-positive: + specifier: ^1.0.0 + version: 1.0.0 + rimraf: + specifier: ^2.6.2 + version: 2.7.1 + devDependencies: + is-negative: + specifier: ^2.1.0 + version: 2.1.0 packages: diff --git a/pkg-manager/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml index fd055cf90f..20b997cffe 100644 --- a/pkg-manager/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/has-several-versions-of-same-pkg/pnpm-lock.yaml @@ -4,16 +4,19 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - has-flag: - specifier: 1.0.0 - version: 1.0.0 - ms: - specifier: 1.0.0 - version: 1.0.0 - send: - specifier: 0.17.2 - version: 0.17.2 +importers: + + .: + dependencies: + has-flag: + specifier: 1.0.0 + version: 1.0.0 + ms: + specifier: 1.0.0 + version: 1.0.0 + send: + specifier: 0.17.2 + version: 0.17.2 packages: diff --git a/pkg-manager/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml index a9d53902ed..be088cfbf7 100644 --- a/pkg-manager/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/prod-dep-is-dev-subdep/pnpm-lock.yaml @@ -4,18 +4,20 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - is-positive: - specifier: 1.0.0 - version: 1.0.0 - once: - specifier: ^1.4.0 - version: 1.4.0 +importers: -devDependencies: - inflight: - specifier: 1.0.6 - version: 1.0.6 + .: + dependencies: + is-positive: + specifier: 1.0.0 + version: 1.0.0 + once: + specifier: ^1.4.0 + version: 1.4.0 + devDependencies: + inflight: + specifier: 1.0.6 + version: 1.0.6 packages: diff --git a/pkg-manager/headless/test/fixtures/reinstall-peer-deps/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/reinstall-peer-deps/pnpm-lock.yaml index 5864ae3620..09f9b72cb5 100644 --- a/pkg-manager/headless/test/fixtures/reinstall-peer-deps/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/reinstall-peer-deps/pnpm-lock.yaml @@ -4,10 +4,13 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -devDependencies: - '@pnpm.e2e/abc': - specifier: 1.0.0 - version: 1.0.0(@pnpm.e2e/peer-a@1.0.1)(@pnpm.e2e/peer-b@1.0.0)(@pnpm.e2e/peer-c@1.0.0) +importers: + + .: + devDependencies: + '@pnpm.e2e/abc': + specifier: 1.0.0 + version: 1.0.0(@pnpm.e2e/peer-a@1.0.1)(@pnpm.e2e/peer-b@1.0.0)(@pnpm.e2e/peer-c@1.0.0) packages: diff --git a/pkg-manager/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml index 2b46857d65..09e2a5f124 100644 --- a/pkg-manager/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/resolved-peer-deps-in-subdeps/pnpm-lock.yaml @@ -4,10 +4,13 @@ settings: autoInstallPeers: false excludeLinksFromLockfile: false -dependencies: - pnpm-default-reporter: - specifier: 0.14.7 - version: 0.14.7 +importers: + + .: + dependencies: + pnpm-default-reporter: + specifier: 0.14.7 + version: 0.14.7 packages: diff --git a/pkg-manager/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml index 55d6cd3dcc..98bfae96b8 100644 --- a/pkg-manager/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/side-effects-of-subdep/pnpm-lock.yaml @@ -4,10 +4,13 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - expire-fs: - specifier: 2.2.3 - version: 2.2.3 +importers: + + .: + dependencies: + expire-fs: + specifier: 2.2.3 + version: 2.2.3 packages: diff --git a/pkg-manager/headless/test/fixtures/side-effects/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/side-effects/pnpm-lock.yaml index 9a8e4dcecc..4aa954ca18 100644 --- a/pkg-manager/headless/test/fixtures/side-effects/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/side-effects/pnpm-lock.yaml @@ -4,10 +4,13 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@pnpm.e2e/pre-and-postinstall-scripts-example': - specifier: 1.0.0 - version: 1.0.0 +importers: + + .: + dependencies: + '@pnpm.e2e/pre-and-postinstall-scripts-example': + specifier: 1.0.0 + version: 1.0.0 packages: diff --git a/pkg-manager/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml index b3de0d4091..4b33cce83f 100644 --- a/pkg-manager/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/simple-shamefully-flatten/pnpm-lock.yaml @@ -4,26 +4,27 @@ settings: autoInstallPeers: false excludeLinksFromLockfile: false -dependencies: - '@pnpm.e2e/pkg-with-peer-having-bin': - specifier: 1.0.0 - version: 1.0.0 - is-positive: - specifier: ^1.0.0 - version: 1.0.0 - rimraf: - specifier: ^2.6.2 - version: 2.7.1 +importers: -optionalDependencies: - colors: - specifier: 1.2.0 - version: 1.2.0 - -devDependencies: - is-negative: - specifier: ^2.1.0 - version: 2.1.0 + .: + dependencies: + '@pnpm.e2e/pkg-with-peer-having-bin': + specifier: 1.0.0 + version: 1.0.0 + is-positive: + specifier: ^1.0.0 + version: 1.0.0 + rimraf: + specifier: ^2.6.2 + version: 2.7.1 + optionalDependencies: + colors: + specifier: 1.2.0 + version: 1.2.0 + devDependencies: + is-negative: + specifier: ^2.1.0 + version: 2.1.0 packages: diff --git a/pkg-manager/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml index a930d8cd21..97012a12bd 100644 --- a/pkg-manager/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/simple-with-more-deps/pnpm-lock.yaml @@ -4,26 +4,27 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - is-positive: - specifier: ^1.0.0 - version: 1.0.0 - resolve-from: - specifier: 4.0.0 - version: 4.0.0 - rimraf: - specifier: ^2.6.2 - version: 2.7.1 +importers: -optionalDependencies: - colors: - specifier: 1.2.0 - version: 1.2.0 - -devDependencies: - is-negative: - specifier: ^2.1.0 - version: 2.1.0 + .: + dependencies: + is-positive: + specifier: ^1.0.0 + version: 1.0.0 + resolve-from: + specifier: 4.0.0 + version: 4.0.0 + rimraf: + specifier: ^2.6.2 + version: 2.7.1 + optionalDependencies: + colors: + specifier: 1.2.0 + version: 1.2.0 + devDependencies: + is-negative: + specifier: ^2.1.0 + version: 2.1.0 packages: diff --git a/pkg-manager/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml index b0b1e2d2a6..b4df03924a 100644 --- a/pkg-manager/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/simple-with-optional-dep/pnpm-lock.yaml @@ -4,15 +4,17 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@pnpm.e2e/pkg-with-good-optional': - specifier: '*' - version: 1.0.0 +importers: -optionalDependencies: - is-positive: - specifier: 1.0.0 - version: 1.0.0 + .: + dependencies: + '@pnpm.e2e/pkg-with-good-optional': + specifier: '*' + version: 1.0.0 + optionalDependencies: + is-positive: + specifier: 1.0.0 + version: 1.0.0 packages: diff --git a/pkg-manager/headless/test/fixtures/simple/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/simple/pnpm-lock.yaml index 4e105f56dd..dd18015151 100644 --- a/pkg-manager/headless/test/fixtures/simple/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/simple/pnpm-lock.yaml @@ -4,23 +4,24 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - is-positive: - specifier: ^1.0.0 - version: 1.0.0 - rimraf: - specifier: ^2.6.2 - version: 2.7.1 +importers: -optionalDependencies: - colors: - specifier: 1.2.0 - version: 1.2.0 - -devDependencies: - is-negative: - specifier: ^2.1.0 - version: 2.1.0 + .: + dependencies: + is-positive: + specifier: ^1.0.0 + version: 1.0.0 + rimraf: + specifier: ^2.6.2 + version: 2.7.1 + optionalDependencies: + colors: + specifier: 1.2.0 + version: 1.2.0 + devDependencies: + is-negative: + specifier: ^2.1.0 + version: 2.1.0 packages: diff --git a/pkg-manager/headless/test/fixtures/with-1-dep/pnpm-lock.yaml b/pkg-manager/headless/test/fixtures/with-1-dep/pnpm-lock.yaml index abb5479ace..559154b541 100644 --- a/pkg-manager/headless/test/fixtures/with-1-dep/pnpm-lock.yaml +++ b/pkg-manager/headless/test/fixtures/with-1-dep/pnpm-lock.yaml @@ -4,10 +4,13 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - rimraf: - specifier: 2.5.1 - version: 2.5.1 +importers: + + .: + dependencies: + rimraf: + specifier: 2.5.1 + version: 2.5.1 packages: diff --git a/pkg-manager/plugin-commands-installation/test/addRecursive.ts b/pkg-manager/plugin-commands-installation/test/addRecursive.ts index 72a9697eb2..fe38384eee 100644 --- a/pkg-manager/plugin-commands-installation/test/addRecursive.ts +++ b/pkg-manager/plugin-commands-installation/test/addRecursive.ts @@ -52,7 +52,7 @@ test('recursive add --save-dev, --save-peer on workspace with multiple lockfiles { 'is-negative': '1.0.0' } ) expect( - (projects['project-1'].readLockfile()).devDependencies + projects['project-1'].readLockfile().importers['.'].devDependencies ).toStrictEqual( { 'is-positive': { @@ -80,7 +80,7 @@ test('recursive add --save-dev, --save-peer on workspace with multiple lockfiles { 'is-negative': '1.0.0' } ) expect( - (projects['project-2'].readLockfile()).devDependencies + projects['project-2'].readLockfile().importers['.'].devDependencies ).toStrictEqual( { 'is-positive': { diff --git a/pkg-manager/plugin-commands-installation/test/link.ts b/pkg-manager/plugin-commands-installation/test/link.ts index 2de92d26dd..d53897defc 100644 --- a/pkg-manager/plugin-commands-installation/test/link.ts +++ b/pkg-manager/plugin-commands-installation/test/link.ts @@ -179,13 +179,13 @@ test('relative link', async () => { linkedProject.isExecutable('.bin/cowsay') const wantedLockfile = project.readLockfile() - expect(wantedLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toStrictEqual({ + expect(wantedLockfile.importers['.'].dependencies?.['@pnpm.e2e/hello-world-js-bin']).toStrictEqual({ specifier: '*', // specifier of linked dependency added to ${WANTED_LOCKFILE} version: 'link:../hello-world-js-bin', // link added to wanted lockfile }) const currentLockfile = project.readCurrentLockfile() - expect(currentLockfile.dependencies['@pnpm.e2e/hello-world-js-bin'].version).toBe('link:../hello-world-js-bin') // link added to wanted lockfile + expect(currentLockfile.importers['.'].dependencies?.['@pnpm.e2e/hello-world-js-bin'].version).toBe('link:../hello-world-js-bin') // link added to wanted lockfile }) test('absolute link', async () => { @@ -212,13 +212,13 @@ test('absolute link', async () => { linkedProject.isExecutable('.bin/cowsay') const wantedLockfile = project.readLockfile() - expect(wantedLockfile.dependencies['@pnpm.e2e/hello-world-js-bin']).toStrictEqual({ + expect(wantedLockfile.importers['.'].dependencies?.['@pnpm.e2e/hello-world-js-bin']).toStrictEqual({ specifier: '*', // specifier of linked dependency added to ${WANTED_LOCKFILE} version: 'link:../hello-world-js-bin', // link added to wanted lockfile }) const currentLockfile = project.readCurrentLockfile() - expect(currentLockfile.dependencies['@pnpm.e2e/hello-world-js-bin'].version).toBe('link:../hello-world-js-bin') // link added to wanted lockfile + expect(currentLockfile.importers['.'].dependencies?.['@pnpm.e2e/hello-world-js-bin'].version).toBe('link:../hello-world-js-bin') // link added to wanted lockfile }) test('link --production', async () => { diff --git a/pkg-manager/plugin-commands-installation/test/linkRecursive.ts b/pkg-manager/plugin-commands-installation/test/linkRecursive.ts index 6692808549..d2a89328da 100644 --- a/pkg-manager/plugin-commands-installation/test/linkRecursive.ts +++ b/pkg-manager/plugin-commands-installation/test/linkRecursive.ts @@ -43,7 +43,7 @@ test('recursive linking/unlinking', async () => { { const project1Lockfile = projects['project-1'].readLockfile() - expect(project1Lockfile.devDependencies['is-positive'].version).toBe('link:../is-positive') + expect(project1Lockfile.importers['.'].devDependencies?.['is-positive'].version).toBe('link:../is-positive') } await unlink.handler({ @@ -63,7 +63,7 @@ test('recursive linking/unlinking', async () => { { const project1Lockfile = projects['project-1'].readLockfile() expect(project1Lockfile.lockfileVersion).toBe(LOCKFILE_VERSION) - expect(project1Lockfile.devDependencies['is-positive'].version).toBe('1.0.0') + expect(project1Lockfile.importers['.'].devDependencies?.['is-positive'].version).toBe('1.0.0') expect(project1Lockfile.packages['/is-positive@1.0.0']).toBeTruthy() } @@ -108,7 +108,7 @@ test('recursive unlink specific package', async () => { { const project1Lockfile = projects['project-1'].readLockfile() - expect(project1Lockfile.devDependencies['is-positive'].version).toBe('link:../is-positive') + expect(project1Lockfile.importers['.'].devDependencies?.['is-positive'].version).toBe('link:../is-positive') } await unlink.handler({ @@ -128,7 +128,7 @@ test('recursive unlink specific package', async () => { { const project1Lockfile = projects['project-1'].readLockfile() expect(project1Lockfile.lockfileVersion).toBe(LOCKFILE_VERSION) - expect(project1Lockfile.devDependencies['is-positive'].version).toBe('1.0.0') + expect(project1Lockfile.importers['.'].devDependencies?.['is-positive'].version).toBe('1.0.0') expect(project1Lockfile.packages['/is-positive@1.0.0']).toBeTruthy() } diff --git a/pkg-manager/plugin-commands-installation/test/peerDependencies.ts b/pkg-manager/plugin-commands-installation/test/peerDependencies.ts index 5938f361ab..cbdee2c5f1 100644 --- a/pkg-manager/plugin-commands-installation/test/peerDependencies.ts +++ b/pkg-manager/plugin-commands-installation/test/peerDependencies.ts @@ -48,7 +48,7 @@ test('root dependency that has a peer is correctly updated after its version cha { const lockfile = project.readLockfile() - expect(lockfile.dependencies['ajv-keywords'].version).toBe('1.5.0(ajv@4.10.4)') + expect(lockfile.importers['.'].dependencies?.['ajv-keywords'].version).toBe('1.5.0(ajv@4.10.4)') } project.writePackageJson({ @@ -69,6 +69,6 @@ test('root dependency that has a peer is correctly updated after its version cha { const lockfile = project.readLockfile() - expect(lockfile.dependencies['ajv-keywords'].version).toBe('1.5.1(ajv@4.10.4)') + expect(lockfile.importers['.'].dependencies?.['ajv-keywords'].version).toBe('1.5.1(ajv@4.10.4)') } }) diff --git a/pkg-manager/plugin-commands-installation/test/update/update.ts b/pkg-manager/plugin-commands-installation/test/update/update.ts index a67331e197..243f499336 100644 --- a/pkg-manager/plugin-commands-installation/test/update/update.ts +++ b/pkg-manager/plugin-commands-installation/test/update/update.ts @@ -173,7 +173,7 @@ test('update --no-save should not update package.json and pnpm-lock.yaml', async expect(manifest.dependencies?.['@pnpm.e2e/peer-a']).toBe('^1.0.0') const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/peer-a'].specifier).toBe('^1.0.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/peer-a'].specifier).toBe('^1.0.0') expect(lockfile.packages['/@pnpm.e2e/peer-a@1.0.0']).toBeTruthy() } @@ -191,7 +191,7 @@ test('update --no-save should not update package.json and pnpm-lock.yaml', async expect(manifest.dependencies?.['@pnpm.e2e/peer-a']).toBe('^1.0.0') const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/peer-a'].specifier).toBe('^1.0.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/peer-a'].specifier).toBe('^1.0.0') expect(lockfile.packages['/@pnpm.e2e/peer-a@1.0.1']).toBeTruthy() } }) @@ -227,9 +227,9 @@ test('update should work normal when set empty string version', async () => { expect(lockfile.packages['/@pnpm.e2e/peer-a@1.0.1']).toBeTruthy() expect(lockfile.packages['/@pnpm.e2e/peer-c@2.0.0']).toBeTruthy() expect(lockfile.packages['/@pnpm.e2e/foo@2.0.0']).toBeTruthy() - expect(lockfile.dependencies['@pnpm.e2e/peer-a'].version).toEqual('1.0.1') - expect(lockfile.devDependencies['@pnpm.e2e/foo'].version).toEqual('2.0.0') - expect(lockfile.devDependencies['@pnpm.e2e/peer-c'].version).toEqual('2.0.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/peer-a'].version).toEqual('1.0.1') + expect(lockfile.importers['.'].devDependencies?.['@pnpm.e2e/foo'].version).toEqual('2.0.0') + expect(lockfile.importers['.'].devDependencies?.['@pnpm.e2e/peer-c'].version).toEqual('2.0.0') }) test('ignore packages in package.json > updateConfig.ignoreDependencies fields in update command', async () => { diff --git a/pnpm/src/main.ts b/pnpm/src/main.ts index 566f09ef14..a330911aa4 100644 --- a/pnpm/src/main.ts +++ b/pnpm/src/main.ts @@ -82,7 +82,6 @@ export async function main (inputArgv: string[]) { } let config: Config & { - forceSharedLockfile: boolean argv: { remain: string[], cooked: string[], original: string[] } fallbackCommandUsed: boolean } @@ -100,7 +99,6 @@ export async function main (inputArgv: string[]) { if (cmd === 'dlx') { config.useStderr = true } - config.forceSharedLockfile = typeof config.workspaceDir === 'string' && config.sharedWorkspaceLockfile === true config.argv = argv config.fallbackCommandUsed = fallbackCommandUsed // Set 'npm_command' env variable to current command name diff --git a/pnpm/test/monorepo/index.ts b/pnpm/test/monorepo/index.ts index 879a151458..cde4167241 100644 --- a/pnpm/test/monorepo/index.ts +++ b/pnpm/test/monorepo/index.ts @@ -265,9 +265,9 @@ save-workspace-protocol=false { const lockfile = projects['project-1'].readLockfile() - expect(lockfile.dependencies['project-2'].version).toBe('link:../project-2') - expect(lockfile.devDependencies['is-negative'].version).toBe('link:../is-negative') - expect(lockfile.optionalDependencies['is-positive'].version).toBe('link:../is-positive') + expect(lockfile.importers['.'].dependencies?.['project-2'].version).toBe('link:../project-2') + expect(lockfile.importers['.'].devDependencies?.['is-negative'].version).toBe('link:../is-negative') + expect(lockfile.importers['.'].optionalDependencies?.['is-positive'].version).toBe('link:../is-positive') } projects['is-positive'].writePackageJson({ @@ -279,14 +279,14 @@ save-workspace-protocol=false { const lockfile = projects['project-1'].readLockfile() - expect(lockfile.optionalDependencies['is-positive'].version).toBe('1.0.0') // is-positive is unlinked and installed from registry + expect(lockfile.importers['.'].optionalDependencies?.['is-positive'].version).toBe('1.0.0') // is-positive is unlinked and installed from registry } await execPnpm(['update', 'is-negative@2.0.0']) { const lockfile = projects['project-1'].readLockfile() - expect(lockfile.devDependencies['is-negative'].version).toBe('2.0.0') + expect(lockfile.importers['.'].devDependencies?.['is-negative'].version).toBe('2.0.0') } }) @@ -594,16 +594,16 @@ test('installation with --link-workspace-packages links packages even if they we { const lockfile = projects.project.readLockfile() - expect(lockfile.dependencies['is-positive'].version).toBe('2.0.0') - expect(lockfile.dependencies.negative.version).toBe('/is-negative@1.0.0') + expect(lockfile.importers['.'].dependencies?.['is-positive'].version).toBe('2.0.0') + expect(lockfile.importers['.'].dependencies?.negative.version).toBe('/is-negative@1.0.0') } await execPnpm(['recursive', 'install', '--link-workspace-packages']) { const lockfile = projects.project.readLockfile() - expect(lockfile.dependencies['is-positive'].version).toBe('link:../is-positive') - expect(lockfile.dependencies.negative.version).toBe('link:../is-negative') + expect(lockfile.importers['.'].dependencies?.['is-positive'].version).toBe('link:../is-positive') + expect(lockfile.importers['.'].dependencies?.negative.version).toBe('link:../is-negative') } }) @@ -892,7 +892,7 @@ test('local packages should be preferred when running "pnpm install" inside a wo const lockfile = projects['project-1'].readLockfile() - expect(lockfile?.dependencies?.['is-positive'].version).toBe('link:../is-positive') + expect(lockfile?.importers['.'].dependencies?.['is-positive'].version).toBe('link:../is-positive') }) // covers https://github.com/pnpm/pnpm/issues/1437 diff --git a/pnpm/test/update.ts b/pnpm/test/update.ts index 3bc161250d..9bfec9b1af 100644 --- a/pnpm/test/update.ts +++ b/pnpm/test/update.ts @@ -22,7 +22,7 @@ test('update ', async () => { project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0') const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('101.0.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('101.0.0') const pkg = await readPackageJsonFromDir(process.cwd()) expect(pkg.dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('^101.0.0') @@ -153,9 +153,9 @@ test('update --latest', async function () { project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0') const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('101.0.0') - expect(lockfile.dependencies['@pnpm.e2e/bar'].version).toBe('100.1.0') - expect(lockfile.dependencies['alias'].version).toBe('/@pnpm.e2e/qar@100.1.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('101.0.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/bar'].version).toBe('100.1.0') + expect(lockfile.importers['.'].dependencies?.['alias'].version).toBe('/@pnpm.e2e/qar@100.1.0') const pkg = await readPackageJsonFromDir(process.cwd()) expect(pkg.dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('^101.0.0') @@ -180,9 +180,9 @@ test('update --latest --save-exact', async function () { project.storeHas('@pnpm.e2e/dep-of-pkg-with-1-dep', '101.0.0') const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('101.0.0') - expect(lockfile.dependencies['@pnpm.e2e/bar'].version).toBe('100.1.0') - expect(lockfile.dependencies['alias'].version).toBe('/@pnpm.e2e/qar@100.1.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('101.0.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/bar'].version).toBe('100.1.0') + expect(lockfile.importers['.'].dependencies?.['alias'].version).toBe('/@pnpm.e2e/qar@100.1.0') const pkg = await readPackageJsonFromDir(process.cwd()) expect(pkg.dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('101.0.0') @@ -206,10 +206,10 @@ test('update --latest specific dependency', async function () { await execPnpm(['update', '-L', '@pnpm.e2e/bar', 'alias', 'is-negative']) const lockfile = project.readLockfile() - expect(lockfile.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.0.0') - expect(lockfile.dependencies['@pnpm.e2e/bar'].version).toBe('100.1.0') - expect(lockfile.dependencies['@pnpm.e2e/foo'].version).toBe('100.0.0') - expect(lockfile.dependencies['alias'].version).toBe('/@pnpm.e2e/qar@100.1.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.0.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/bar'].version).toBe('100.1.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/foo'].version).toBe('100.0.0') + expect(lockfile.importers['.'].dependencies?.['alias'].version).toBe('/@pnpm.e2e/qar@100.1.0') const pkg = await readPackageJsonFromDir(process.cwd()) expect(pkg.dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') @@ -233,8 +233,8 @@ test('update --latest --prod', async function () { await execPnpm(['update', '--latest', '--prod']) const lockfile = project.readLockfile() - expect(lockfile.devDependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.0.0') - expect(lockfile.dependencies['@pnpm.e2e/bar'].version).toBe('100.1.0') + expect(lockfile.importers['.'].devDependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.0.0') + expect(lockfile.importers['.'].dependencies?.['@pnpm.e2e/bar'].version).toBe('100.1.0') const pkg = await readPackageJsonFromDir(process.cwd()) expect(pkg.devDependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep']).toBe('100.0.0') @@ -282,8 +282,8 @@ test('recursive update --latest on projects that do not share a lockfile', async }) const lockfile1 = projects['project-1'].readLockfile() - expect(lockfile1.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('101.0.0') - expect(lockfile1.dependencies['@pnpm.e2e/foo'].version).toBe('100.1.0') + expect(lockfile1.importers['.'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('101.0.0') + expect(lockfile1.importers['.'].dependencies?.['@pnpm.e2e/foo'].version).toBe('100.1.0') const manifest2 = await readPackageJsonFromDir(path.resolve('project-2')) expect(manifest2.dependencies).toStrictEqual({ @@ -292,8 +292,8 @@ test('recursive update --latest on projects that do not share a lockfile', async }) const lockfile2 = projects['project-2'].readLockfile() - expect(lockfile2.dependencies['@pnpm.e2e/bar'].version).toBe('100.1.0') - expect(lockfile2.dependencies['@pnpm.e2e/foo'].version).toBe('100.1.0') + expect(lockfile2.importers['.'].dependencies?.['@pnpm.e2e/bar'].version).toBe('100.1.0') + expect(lockfile2.importers['.'].dependencies?.['@pnpm.e2e/foo'].version).toBe('100.1.0') }) test('recursive update --latest --prod on projects that do not share a lockfile', async () => { @@ -341,8 +341,8 @@ test('recursive update --latest --prod on projects that do not share a lockfile' }) const lockfile1 = projects['project-1'].readLockfile() - expect(lockfile1.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('101.0.0') - expect(lockfile1.devDependencies['@pnpm.e2e/foo'].version).toBe('100.0.0') + expect(lockfile1.importers['.'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('101.0.0') + expect(lockfile1.importers['.'].devDependencies?.['@pnpm.e2e/foo'].version).toBe('100.0.0') projects['project-1'].has('@pnpm.e2e/dep-of-pkg-with-1-dep') projects['project-1'].has('@pnpm.e2e/foo') @@ -356,8 +356,8 @@ test('recursive update --latest --prod on projects that do not share a lockfile' }) const lockfile2 = projects['project-2'].readLockfile() - expect(lockfile2.devDependencies['@pnpm.e2e/bar'].version).toBe('100.0.0') - expect(lockfile2.dependencies['@pnpm.e2e/foo'].version).toBe('100.1.0') + expect(lockfile2.importers['.'].devDependencies?.['@pnpm.e2e/bar'].version).toBe('100.0.0') + expect(lockfile2.importers['.'].dependencies?.['@pnpm.e2e/foo'].version).toBe('100.1.0') projects['project-2'].has('@pnpm.e2e/bar') projects['project-2'].has('@pnpm.e2e/foo') @@ -405,9 +405,9 @@ test('recursive update --latest specific dependency on projects that do not shar }) const lockfile1 = projects['project-1'].readLockfile() - expect(lockfile1.dependencies['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.0.0') - expect(lockfile1.dependencies['@pnpm.e2e/foo'].version).toBe('100.1.0') - expect(lockfile1.dependencies['alias'].version).toBe('/@pnpm.e2e/qar@100.1.0') + expect(lockfile1.importers['.'].dependencies?.['@pnpm.e2e/dep-of-pkg-with-1-dep'].version).toBe('100.0.0') + expect(lockfile1.importers['.'].dependencies?.['@pnpm.e2e/foo'].version).toBe('100.1.0') + expect(lockfile1.importers['.'].dependencies?.['alias'].version).toBe('/@pnpm.e2e/qar@100.1.0') const manifest2 = await readPackageJsonFromDir(path.resolve('project-2')) expect(manifest2.dependencies).toStrictEqual({ @@ -416,8 +416,8 @@ test('recursive update --latest specific dependency on projects that do not shar }) const lockfile2 = projects['project-2'].readLockfile() - expect(lockfile2.dependencies['@pnpm.e2e/bar'].version).toBe('100.0.0') - expect(lockfile2.dependencies['@pnpm.e2e/foo'].version).toBe('100.1.0') + expect(lockfile2.importers['.'].dependencies?.['@pnpm.e2e/bar'].version).toBe('100.0.0') + expect(lockfile2.importers['.'].dependencies?.['@pnpm.e2e/foo'].version).toBe('100.1.0') }) test('recursive update --latest on projects with a shared a lockfile', async () => { diff --git a/store/plugin-commands-store/src/storeStatus/extendStoreStatusOptions.ts b/store/plugin-commands-store/src/storeStatus/extendStoreStatusOptions.ts index 13ae869cfb..864e36a727 100644 --- a/store/plugin-commands-store/src/storeStatus/extendStoreStatusOptions.ts +++ b/store/plugin-commands-store/src/storeStatus/extendStoreStatusOptions.ts @@ -10,7 +10,6 @@ export interface StrictStoreStatusOptions { dir: string storeDir: string force: boolean - forceSharedLockfile: boolean nodeLinker: 'isolated' | 'hoisted' | 'pnp' useLockfile: boolean registries: Registries @@ -33,7 +32,6 @@ const defaults = async (opts: StoreStatusOptions) => { binsDir: path.join(dir, 'node_modules', '.bin'), dir, force: false, - forceSharedLockfile: false, lockfileDir, nodeLinker: 'isolated', registries: DEFAULT_REGISTRIES,