From d00ac3204e09a99b1f4a2783859fbdeef3de1212 Mon Sep 17 00:00:00 2001 From: Brandon Cheng Date: Mon, 25 Jul 2022 22:28:48 -0400 Subject: [PATCH] fix(lockfile-file): check importers key for shared lockfile format The `convertFromLockfileFileMutable` function reverts changes from `normalizeLockfile` when not using the shared lockfile format. - The non-shared lockfile format puts fields like `specifiers`, `dependencies`, `devDependencies`, `optionalDependencies`, and `dependenciesMeta` on the root of the lockfile. This is typically the case for a repo not using pnpm workspaces. - The shared lockfile format puts these under a `importers` block scoped by a path. The `use-inline-specifiers-lockfile-format` feature flag removes the `specifiers` block in favor of putting each specifier next to the resolved version within each `dependencies`, `devDependencies`, etc block. This means the `convertFromLockfileFileMutable` function can no longer check for `specifiers` to detect the whether the "shared" format is used. @zkochan suggested checking for `importers` instead, which should have the same effect. https://github.com/pnpm/pnpm/pull/5091#discussion_r929326835 --- packages/lockfile-file/src/read.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/lockfile-file/src/read.ts b/packages/lockfile-file/src/read.ts index 7cbfc7ce13d..9be964adeac 100644 --- a/packages/lockfile-file/src/read.ts +++ b/packages/lockfile-file/src/read.ts @@ -226,10 +226,10 @@ async function _readGitBranchLockfiles ( * Reverts changes from the "forceSharedFormat" write option if necessary. */ function convertFromLockfileFileMutable (lockfileFile: LockfileFile): Lockfile { - if (typeof lockfileFile?.['specifiers'] !== 'undefined') { + if (typeof lockfileFile?.['importers'] === 'undefined') { lockfileFile.importers = { '.': { - specifiers: lockfileFile['specifiers'], + specifiers: lockfileFile['specifiers'] ?? {}, dependenciesMeta: lockfileFile['dependenciesMeta'], }, }