1
- import { $ , ExecaError } from "execa" ;
1
+ import { $ } from "execa" ;
2
2
import { join } from "node:path" ;
3
3
import { readJSONFileSync } from "./fileSystem" ;
4
4
import { logger } from "./logger" ;
5
5
import { PackageManager , getUserPackageManager } from "./getUserPackageManager" ;
6
6
import { PackageJson } from "type-fest" ;
7
7
import { assertExhaustive } from "./assertExhaustive" ;
8
- import { builtinModules } from "node:module" ;
9
8
import { tracer } from "../cli/common" ;
10
9
import { recordSpanException } from "@trigger.dev/core/v3/otel" ;
11
10
import { flattenAttributes } from "@trigger.dev/core/v3" ;
12
11
13
- export type ResolveOptions = { allowDev : boolean } ;
14
12
export type DependencyMeta = { version : string ; external : boolean } ;
15
13
16
14
export class JavascriptProject {
@@ -126,13 +124,25 @@ export class JavascriptProject {
126
124
127
125
packagesMeta [ packageName ] = { version : packageJsonVersion , external } ;
128
126
missingPackageVersions [ packageName ] = packageJsonVersion ;
127
+ } else {
128
+ // Last resort: check devDependencies
129
+ const devPackageJsonVersion = this . packageJson . devDependencies ?. [ packageName ] ;
130
+
131
+ if ( typeof devPackageJsonVersion === "string" ) {
132
+ logger . debug ( `Resolved ${ packageName } version using devDependencies` , {
133
+ devPackageJsonVersion,
134
+ } ) ;
135
+
136
+ packagesMeta [ packageName ] = { version : devPackageJsonVersion , external } ;
137
+ missingPackageVersions [ packageName ] = devPackageJsonVersion ;
138
+ }
129
139
}
130
140
}
131
141
132
142
span . setAttributes ( {
133
143
...flattenAttributes ( missingPackageVersions , "missingPackageVersions" ) ,
134
144
missingPackages : missingPackagesMeta . map (
135
- ( [ pkgName ] : [ string , DependencyMeta ] ) => pkgName
145
+ ( [ packageName ] : [ string , DependencyMeta ] ) => packageName
136
146
) ,
137
147
} ) ;
138
148
@@ -153,53 +163,6 @@ export class JavascriptProject {
153
163
) ;
154
164
}
155
165
156
- async resolve ( packageName : string , options ?: ResolveOptions ) : Promise < string | undefined > {
157
- if ( isBuiltInModule ( packageName ) ) {
158
- return undefined ;
159
- }
160
-
161
- const opts = { allowDev : false , ...options } ;
162
-
163
- const command = await this . #getCommand( ) ;
164
-
165
- try {
166
- const version = await command . resolveDependencyVersion ( packageName , {
167
- cwd : this . projectPath ,
168
- } ) ;
169
-
170
- if ( version ) {
171
- logger . debug ( `Resolved ${ packageName } version using ${ command . name } ` , { version } ) ;
172
-
173
- return version ;
174
- }
175
-
176
- const packageJsonVersion = this . packageJson . dependencies ?. [ packageName ] ;
177
-
178
- if ( typeof packageJsonVersion === "string" ) {
179
- logger . debug ( `Resolved ${ packageName } version using package.json` , { packageJsonVersion } ) ;
180
-
181
- return packageJsonVersion ;
182
- }
183
-
184
- if ( opts . allowDev ) {
185
- const devPackageJsonVersion = this . packageJson . devDependencies ?. [ packageName ] ;
186
-
187
- if ( typeof devPackageJsonVersion === "string" ) {
188
- logger . debug ( `Resolved ${ packageName } version using devDependencies` , {
189
- devPackageJsonVersion,
190
- } ) ;
191
-
192
- return devPackageJsonVersion ;
193
- }
194
- }
195
- } catch ( error ) {
196
- logger . debug ( `Failed to resolve dependency version using ${ command . name } ` , {
197
- packageName,
198
- error,
199
- } ) ;
200
- }
201
- }
202
-
203
166
async #getCommand( ) : Promise < PackageManagerCommands > {
204
167
const packageManager = await this . getPackageManager ( ) ;
205
168
@@ -252,11 +215,6 @@ interface PackageManagerCommands {
252
215
extractDirectDependenciesMeta (
253
216
options : PackageManagerOptions
254
217
) : Promise < Record < string , DependencyMeta > > ;
255
-
256
- resolveDependencyVersion (
257
- packageName : string ,
258
- options : PackageManagerOptions
259
- ) : Promise < string | undefined > ;
260
218
}
261
219
262
220
class PNPMCommands implements PackageManagerCommands {
@@ -274,22 +232,6 @@ class PNPMCommands implements PackageManagerCommands {
274
232
logger . debug ( `Installing dependencies using ${ this . name } ` , { stdout, stderr } ) ;
275
233
}
276
234
277
- async resolveDependencyVersion ( packageName : string , options : PackageManagerOptions ) {
278
- const { stdout } = await $ ( { cwd : options . cwd } ) `${ this . cmd } list ${ packageName } -r --json` ;
279
- const result = JSON . parse ( stdout ) as PnpmList ;
280
-
281
- logger . debug ( `Resolving ${ packageName } version using ${ this . name } ` ) ;
282
-
283
- // Return the first dependency version that matches the package name
284
- for ( const dep of result ) {
285
- const dependency = dep . dependencies ?. [ packageName ] ;
286
-
287
- if ( dependency ) {
288
- return dependency . version ;
289
- }
290
- }
291
- }
292
-
293
235
async extractDirectDependenciesMeta ( options : PackageManagerOptions ) {
294
236
const result = await this . #listDirectDependencies( options ) ;
295
237
@@ -358,15 +300,6 @@ class NPMCommands implements PackageManagerCommands {
358
300
logger . debug ( `Installing dependencies using ${ this . name } ` , { stdout, stderr } ) ;
359
301
}
360
302
361
- async resolveDependencyVersion ( packageName : string , options : PackageManagerOptions ) {
362
- const { stdout } = await $ ( { cwd : options . cwd } ) `${ this . cmd } list ${ packageName } --json` ;
363
- const output = JSON . parse ( stdout ) as NpmListOutput ;
364
-
365
- logger . debug ( `Resolving ${ packageName } version using ${ this . name } ` , { output } ) ;
366
-
367
- return this . #recursivelySearchDependencies( output . dependencies , packageName ) ;
368
- }
369
-
370
303
async extractDirectDependenciesMeta (
371
304
options : PackageManagerOptions
372
305
) : Promise < Record < string , DependencyMeta > > {
@@ -392,25 +325,6 @@ class NPMCommands implements PackageManagerCommands {
392
325
return JSON . parse ( childProcess . stdout ) as NpmListOutput ;
393
326
}
394
327
395
- #recursivelySearchDependencies(
396
- dependencies : Record < string , NpmDependency > ,
397
- packageName : string
398
- ) : string | undefined {
399
- for ( const [ name , dependency ] of Object . entries ( dependencies ) ) {
400
- if ( name === packageName ) {
401
- return dependency . version ;
402
- }
403
-
404
- if ( dependency . dependencies ) {
405
- const result = this . #recursivelySearchDependencies( dependency . dependencies , packageName ) ;
406
-
407
- if ( result ) {
408
- return result ;
409
- }
410
- }
411
- }
412
- }
413
-
414
328
#flattenDependenciesMeta(
415
329
dependencies : Record < string , NpmDependency >
416
330
) : Record < string , DependencyMeta > {
@@ -444,22 +358,6 @@ class YarnCommands implements PackageManagerCommands {
444
358
logger . debug ( `Installing dependencies using ${ this . name } ` , { stdout, stderr } ) ;
445
359
}
446
360
447
- async resolveDependencyVersion ( packageName : string , options : PackageManagerOptions ) {
448
- const { stdout } = await $ ( { cwd : options . cwd } ) `${ this . cmd } info ${ packageName } --json` ;
449
-
450
- const lines = stdout . split ( "\n" ) ;
451
-
452
- logger . debug ( `Resolving ${ packageName } version using ${ this . name } ` ) ;
453
-
454
- for ( const line of lines ) {
455
- const json = JSON . parse ( line ) ;
456
-
457
- if ( json . value === packageName ) {
458
- return json . children . Version ;
459
- }
460
- }
461
- }
462
-
463
361
async extractDirectDependenciesMeta ( options : PackageManagerOptions ) {
464
362
const result = await this . #listDirectDependencies( options ) ;
465
363
@@ -522,12 +420,3 @@ class YarnCommands implements PackageManagerCommands {
522
420
] ;
523
421
}
524
422
}
525
-
526
- function isBuiltInModule ( module : string ) : boolean {
527
- // if the module has node: prefix, it's a built-in module
528
- if ( module . startsWith ( "node:" ) ) {
529
- return true ;
530
- }
531
-
532
- return builtinModules . includes ( module ) ;
533
- }
0 commit comments