From e60507da0a382683ea6749ac08332b44f9bd3c59 Mon Sep 17 00:00:00 2001 From: Danny Kim <0916dhkim@gmail.com> Date: Sat, 8 Jun 2024 21:48:00 +0000 Subject: [PATCH 1/2] Fix an edge case in pnpm lock file generation Co-authored-by: Evan Suhyeong Lee --- .../helpers/generate-pnpm-lockfile.ts | 4 +-- src/lib/lockfile/helpers/pnpm-map-importer.ts | 32 ++++++++++++++++--- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/lib/lockfile/helpers/generate-pnpm-lockfile.ts b/src/lib/lockfile/helpers/generate-pnpm-lockfile.ts index 1016546..042560c 100644 --- a/src/lib/lockfile/helpers/generate-pnpm-lockfile.ts +++ b/src/lib/lockfile/helpers/generate-pnpm-lockfile.ts @@ -118,7 +118,7 @@ export async function generatePnpmLockfile({ return [ ".", - pnpmMapImporter(importer, { + pnpmMapImporter(".", importer, { includeDevDependencies, includePatchedDependencies, directoryByPackageName, @@ -130,7 +130,7 @@ export async function generatePnpmLockfile({ return [ importerId, - pnpmMapImporter(importer, { + pnpmMapImporter(importerId, importer, { includeDevDependencies, includePatchedDependencies, directoryByPackageName, diff --git a/src/lib/lockfile/helpers/pnpm-map-importer.ts b/src/lib/lockfile/helpers/pnpm-map-importer.ts index 9724009..e37b24a 100644 --- a/src/lib/lockfile/helpers/pnpm-map-importer.ts +++ b/src/lib/lockfile/helpers/pnpm-map-importer.ts @@ -1,3 +1,4 @@ +import path from "node:path"; import type { ProjectSnapshot, ResolvedDependencies, @@ -7,6 +8,7 @@ import { mapValues } from "remeda"; /** Convert dependency links */ export function pnpmMapImporter( + importerPath: string, { dependencies, devDependencies, ...rest }: ProjectSnapshot, { includeDevDependencies, @@ -19,21 +21,41 @@ export function pnpmMapImporter( ): ProjectSnapshot { return { dependencies: dependencies - ? pnpmMapDependenciesLinks(dependencies, directoryByPackageName) + ? pnpmMapDependenciesLinks( + importerPath, + dependencies, + directoryByPackageName + ) : undefined, devDependencies: includeDevDependencies && devDependencies - ? pnpmMapDependenciesLinks(devDependencies, directoryByPackageName) + ? pnpmMapDependenciesLinks( + importerPath, + devDependencies, + directoryByPackageName + ) : undefined, ...rest, }; } function pnpmMapDependenciesLinks( + importerPath: string, def: ResolvedDependencies, directoryByPackageName: { [packageName: string]: string } ): ResolvedDependencies { - return mapValues(def, (value, key) => - value.startsWith("link:") ? `link:./${directoryByPackageName[key]}` : value - ); + return mapValues(def, (value, key) => { + if (value.startsWith("link:")) { + let relativePath = path.relative( + importerPath, + directoryByPackageName[key] + ); + if (!relativePath.startsWith(".") && !relativePath.startsWith("/")) { + relativePath = `./${relativePath}`; + } + return `link:${relativePath}`; + } else { + return value; + } + }); } From 81bb662b11b7afdef51abf559db4758d46fd4313 Mon Sep 17 00:00:00 2001 From: Thijs Koerselman Date: Tue, 11 Jun 2024 17:51:00 +0200 Subject: [PATCH 2/2] Simplify relative path check --- src/lib/lockfile/helpers/pnpm-map-importer.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lib/lockfile/helpers/pnpm-map-importer.ts b/src/lib/lockfile/helpers/pnpm-map-importer.ts index e37b24a..4f33f31 100644 --- a/src/lib/lockfile/helpers/pnpm-map-importer.ts +++ b/src/lib/lockfile/helpers/pnpm-map-importer.ts @@ -45,17 +45,17 @@ function pnpmMapDependenciesLinks( directoryByPackageName: { [packageName: string]: string } ): ResolvedDependencies { return mapValues(def, (value, key) => { - if (value.startsWith("link:")) { - let relativePath = path.relative( - importerPath, - directoryByPackageName[key] - ); - if (!relativePath.startsWith(".") && !relativePath.startsWith("/")) { - relativePath = `./${relativePath}`; - } - return `link:${relativePath}`; - } else { + if (!value.startsWith("link:")) { return value; } + + const relativePath = path.relative( + importerPath, + directoryByPackageName[key] + ); + + return relativePath.startsWith(".") + ? `link:${relativePath}` + : `link:./${relativePath}`; }); }