mirror of
https://github.com/pnpm/pnpm.git
synced 2026-06-28 09:55:39 -04:00
When a project transitions from non-GVS to GVS mode, hoisted symlinks at `node_modules/.pnpm/node_modules/<dep>` still pointed into `node_modules/.pnpm/<depPath>/node_modules/<dep>`. The `symlinkHoistedDependency` function only checked `isSubdir(virtualStoreDir, ...)` — with GVS active, `virtualStoreDir` is `storeDir/links`, so these old symlinks were classified as "external" and silently skipped. Added `internalPnpmDir` (derived from `path.dirname(privateHoistedModulesDir)`) as a second check. Symlinks under `node_modules/.pnpm/` are now recognized as pnpm-internal and correctly replaced, matching the pattern in `safeIsInnerLink`. The broader TypeScript type inference breakage (#9739) also has an architectural dimension: when TypeScript follows a symlink to storeDir/links/<hash>/, Node's module resolution walk-up never reaches node_modules/. This is the same root cause as #12437 (packages from links store can't resolve transitive deps) and requires a separate architectural fix. Closes pnpm/pnpm#9739 --------- Co-authored-by: Zoltan Kochan <z@kochan.io>