1
1
import { confirm , intro , isCancel , log , outro } from "@clack/prompts" ;
2
2
import { Command } from "commander" ;
3
3
import { detectPackageManager , installDependencies } from "nypm" ;
4
- import { resolve } from "path" ;
4
+ import { basename , dirname , resolve } from "path" ;
5
5
import { PackageJson , readPackageJSON , resolvePackageJSON } from "pkg-types" ;
6
6
import { z } from "zod" ;
7
7
import { CommonCommandOptions , OutroCommandError , wrapCommandAction } from "../cli/common.js" ;
@@ -12,6 +12,7 @@ import { logger } from "../utilities/logger.js";
12
12
import { spinner } from "../utilities/windows.js" ;
13
13
import { VERSION } from "../version.js" ;
14
14
import { hasTTY } from "std-env" ;
15
+ import nodeResolve from "resolve" ;
15
16
16
17
export const UpdateCommandOptions = CommonCommandOptions . pick ( {
17
18
logLevel : true ,
@@ -54,7 +55,7 @@ export async function updateTriggerPackages(
54
55
let hasOutput = false ;
55
56
const cliVersion = VERSION ;
56
57
57
- if ( cliVersion . startsWith ( "0.0.0" ) ) {
58
+ if ( cliVersion . startsWith ( "0.0.0" ) && process . env . ENABLE_PRERELEASE_UPDATE_CHECKS !== "1" ) {
58
59
return false ;
59
60
}
60
61
@@ -83,7 +84,9 @@ export async function updateTriggerPackages(
83
84
hasOutput = true ;
84
85
}
85
86
86
- const triggerDependencies = getTriggerDependencies ( packageJson ) ;
87
+ const triggerDependencies = await getTriggerDependencies ( packageJson , packageJsonPath ) ;
88
+
89
+ logger . debug ( "Resolved trigger deps" , { triggerDependencies } ) ;
87
90
88
91
function getVersionMismatches (
89
92
deps : Dependency [ ] ,
@@ -268,7 +271,10 @@ type Dependency = {
268
271
version : string ;
269
272
} ;
270
273
271
- function getTriggerDependencies ( packageJson : PackageJson ) : Dependency [ ] {
274
+ async function getTriggerDependencies (
275
+ packageJson : PackageJson ,
276
+ packageJsonPath : string
277
+ ) : Promise < Dependency [ ] > {
272
278
const deps : Dependency [ ] = [ ] ;
273
279
274
280
for ( const type of [ "dependencies" , "devDependencies" ] as const ) {
@@ -291,13 +297,41 @@ function getTriggerDependencies(packageJson: PackageJson): Dependency[] {
291
297
continue ;
292
298
}
293
299
294
- deps . push ( { type, name, version } ) ;
300
+ const $version = await tryResolveTriggerPackageVersion ( name , packageJsonPath ) ;
301
+
302
+ deps . push ( { type, name, version : $version ?? version } ) ;
295
303
}
296
304
}
297
305
298
306
return deps ;
299
307
}
300
308
309
+ async function tryResolveTriggerPackageVersion (
310
+ name : string ,
311
+ packageJsonPath : string
312
+ ) : Promise < string | undefined > {
313
+ try {
314
+ const resolvedPath = nodeResolve . sync ( name , {
315
+ basedir : dirname ( packageJsonPath ) ,
316
+ } ) ;
317
+
318
+ logger . debug ( `Resolved ${ name } package version path` , { name, resolvedPath } ) ;
319
+
320
+ // IMPORTANT: keep the two dirname calls, as the first one resolves the nested package.json inside dist/commonjs or dist/esm
321
+ const { packageJson } = await getPackageJson ( dirname ( dirname ( resolvedPath ) ) ) ;
322
+
323
+ if ( packageJson . version ) {
324
+ logger . debug ( `Resolved ${ name } package version` , { name, version : packageJson . version } ) ;
325
+ return packageJson . version ;
326
+ }
327
+
328
+ return ;
329
+ } catch ( error ) {
330
+ logger . debug ( "Failed to resolve package version" , { name, error } ) ;
331
+ return undefined ;
332
+ }
333
+ }
334
+
301
335
function mutatePackageJsonWithUpdatedPackages (
302
336
packageJson : PackageJson ,
303
337
depsToUpdate : Dependency [ ] ,
0 commit comments