@@ -7,16 +7,19 @@ import findWorkspaceRoot from "find-yarn-workspace-root"
77import { getPackageVersion } from "./getPackageVersion"
88import { execSync } from "child_process"
99
10- const isVerbose = false // TODO expose to CLI
10+ const isVerbose = global . patchPackageIsVerbose
11+ const isDebug = global . patchPackageIsDebug
1112
1213export function getPackageResolution ( {
1314 packageDetails,
1415 packageManager,
1516 appPath,
17+ appPackageJson,
1618} : {
1719 packageDetails : PackageDetails
1820 packageManager : PackageManager
1921 appPath : string
22+ appPackageJson : any
2023} ) {
2124 if ( packageManager === "yarn" ) {
2225 let lockFilePath = "yarn.lock"
@@ -76,17 +79,63 @@ export function getPackageResolution({
7679 }
7780 return { version : resolution }
7881 } else if ( packageManager === "pnpm" ) {
82+ // WORKAROUND for pnpm bug? pnpm-lock.yaml says version 1.2.3 for linked packages, not link:../../path/to/package
83+ const declaredVersion =
84+ ( appPackageJson . dependencies &&
85+ appPackageJson . dependencies [ packageDetails . name ] ) ||
86+ ( appPackageJson . devDependencies &&
87+ appPackageJson . devDependencies [ packageDetails . name ] )
88+ if ( isDebug ) {
89+ console . log (
90+ `patch-package/getPackageResolution: declaredVersion = ${ declaredVersion } ` ,
91+ )
92+ }
93+
7994 const lockfile = require ( "js-yaml" ) . load (
8095 require ( "fs" ) . readFileSync ( join ( appPath , "pnpm-lock.yaml" ) , "utf8" ) ,
8196 )
97+ if ( isDebug ) {
98+ console . log ( `patch-package/getPackageResolution: appPath = ${ appPath } ` )
99+ console . log ( `patch-package/getPackageResolution: packageDetails:` )
100+ console . dir ( packageDetails )
101+ console . log (
102+ `patch-package/getPackageResolution: packageDetails.name = ${ packageDetails . name } ` ,
103+ )
104+ console . log (
105+ `patch-package/getPackageResolution: lockfile.dependencies[packageDetails.name] = ${
106+ lockfile . dependencies [ packageDetails . name ]
107+ } `,
108+ )
109+ console . log (
110+ `patch-package/getPackageResolution: lockfile.devDependencies[packageDetails.name] = ${
111+ lockfile . devDependencies [ packageDetails . name ]
112+ } `,
113+ )
114+ }
82115 let resolvedVersion =
83116 ( lockfile . dependencies && lockfile . dependencies [ packageDetails . name ] ) ||
84117 ( lockfile . devDependencies &&
85118 lockfile . devDependencies [ packageDetails . name ] )
119+ if ( declaredVersion . startsWith ( "link:" ) ) {
120+ // WORKAROUND
121+ if ( isDebug ) {
122+ console . log (
123+ `patch-package/getPackageResolution: using declaredVersion ${ declaredVersion } , not resolvedVersion ${ resolvedVersion } ` ,
124+ )
125+ }
126+ resolvedVersion = declaredVersion
127+ }
128+ if ( isDebug ) {
129+ console . log (
130+ `patch-package/getPackageResolution: resolvedVersion = ${ resolvedVersion } ` ,
131+ )
132+ }
86133 if ( resolvedVersion . startsWith ( "link:" ) ) {
87134 const localPath = resolve ( resolvedVersion . slice ( 5 ) )
88135 if ( isVerbose ) {
89- console . log ( `pnpm installed ${ packageDetails . name } from ${ localPath } ` )
136+ console . log (
137+ `patch-package/getPackageResolution: pnpm installed ${ packageDetails . name } from ${ localPath } ` ,
138+ )
90139 }
91140 if ( existsSync ( localPath + "/.git" ) ) {
92141 // we hope that the originCommit will be available for future downloads
@@ -100,11 +149,12 @@ export function getPackageResolution({
100149 } ) . trim ( )
101150 }
102151 const originUrl = exec ( "git remote get-url origin" )
152+ // TODO what if the upstream repo is not called "origin"?
103153 const originCommit = exec ( "git rev-parse origin/HEAD" ) // npm needs the long commit hash
104154 resolvedVersion = `git+${ originUrl } #${ originCommit } `
105155 if ( isVerbose ) {
106156 console . log (
107- `using ${ packageDetails . name } version ${ resolvedVersion } from git origin/HEAD in ${ localPath } ` ,
157+ `patch-package/getPackageResolution: using ${ packageDetails . name } version ${ resolvedVersion } from git origin/HEAD in ${ localPath } ` ,
108158 )
109159 }
110160 return { version : resolvedVersion , originCommit }
@@ -119,7 +169,9 @@ export function getPackageResolution({
119169 }
120170 }
121171 if ( isVerbose ) {
122- console . log ( `using ${ packageDetails . name } version ${ resolvedVersion } ` )
172+ console . log (
173+ `patch-package/getPackageResolution: using ${ packageDetails . name } version ${ resolvedVersion } ` ,
174+ )
123175 }
124176 return { version : resolvedVersion }
125177 } else {
@@ -158,6 +210,7 @@ if (require.main === module) {
158210 appPath : process . cwd ( ) ,
159211 packageDetails,
160212 packageManager : detectPackageManager ( process . cwd ( ) , null ) ,
213+ appPackageJson : { } , // TODO?
161214 } ) ,
162215 )
163216}
0 commit comments