Skip to content

Commit 902f5cc

Browse files
committed
Stop using JavascriptProject.resolve
1 parent 07fe1f6 commit 902f5cc

File tree

2 files changed

+22
-144
lines changed

2 files changed

+22
-144
lines changed

packages/cli-v3/src/commands/deploy.ts

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import {
99
} from "@trigger.dev/core/v3";
1010
import { recordSpanException } from "@trigger.dev/core/v3/workers";
1111
import { Command, Option as CommandOption } from "commander";
12-
import { Metafile, build } from "esbuild";
12+
import { build } from "esbuild";
1313
import { execa } from "execa";
1414
import { createHash } from "node:crypto";
1515
import { readFileSync } from "node:fs";
1616
import { copyFile, mkdir, readFile, writeFile } from "node:fs/promises";
17-
import { dirname, join, posix, relative, resolve } from "node:path";
17+
import { dirname, join, posix, relative } from "node:path";
1818
import { setTimeout } from "node:timers/promises";
1919
import invariant from "tiny-invariant";
2020
import { z } from "zod";
@@ -32,11 +32,7 @@ import {
3232
import { ReadConfigResult, readConfig } from "../utilities/configFiles.js";
3333
import { createTempDir, writeJSONFile } from "../utilities/fileSystem";
3434
import { printStandloneInitialBanner } from "../utilities/initialBanner.js";
35-
import {
36-
detectPackageNameFromImportPath,
37-
parsePackageName,
38-
stripWorkspaceFromVersion,
39-
} from "../utilities/installPackages";
35+
import { parsePackageName, stripWorkspaceFromVersion } from "../utilities/installPackages";
4036
import { logger } from "../utilities/logger.js";
4137
import { createTaskFileImports, gatherTaskFiles } from "../utilities/taskFiles";
4238
import { login } from "./login";
@@ -1335,11 +1331,7 @@ async function compileProject(
13351331
entryPointImports: entryPointMetaOutput.imports,
13361332
});
13371333

1338-
const dependencies = await resolveRequiredDependencies(
1339-
directDependenciesMeta,
1340-
config,
1341-
javascriptProject
1342-
);
1334+
const dependencies = await resolveRequiredDependencies(directDependenciesMeta, config);
13431335

13441336
logger.debug("gatherRequiredDependencies()", { dependencies });
13451337

@@ -1710,8 +1702,7 @@ export async function typecheckProject(config: ResolvedConfig) {
17101702
// Returns the dependency names and the version to use (taken from the CLI deps package.json)
17111703
export async function resolveRequiredDependencies(
17121704
directDependenciesMeta: Record<string, DependencyMeta>,
1713-
config: ResolvedConfig,
1714-
project: JavascriptProject
1705+
config: ResolvedConfig
17151706
) {
17161707
return await tracer.startActiveSpan("resolveRequiredDependencies", async (span) => {
17171708
span.setAttribute("resolvablePackageNames", Object.keys(directDependenciesMeta));
@@ -1737,8 +1728,8 @@ export async function resolveRequiredDependencies(
17371728
}
17381729
}
17391730

1740-
for (const [pkgName, { version }] of Object.entries(directDependenciesMeta)) {
1741-
dependencies[pkgName] = version;
1731+
for (const [packageName, { version }] of Object.entries(directDependenciesMeta)) {
1732+
dependencies[packageName] = version;
17421733
}
17431734

17441735
if (config.additionalPackages) {
@@ -1755,9 +1746,7 @@ export async function resolveRequiredDependencies(
17551746
dependencies[packageParts.name] = packageParts.version;
17561747
continue;
17571748
} else {
1758-
const externalDependencyVersion = await project.resolve(packageParts.name, {
1759-
allowDev: true,
1760-
});
1749+
const externalDependencyVersion = directDependenciesMeta[packageParts.name]?.version;
17611750

17621751
if (externalDependencyVersion) {
17631752
dependencies[packageParts.name] = externalDependencyVersion;

packages/cli-v3/src/utilities/javascriptProject.ts

Lines changed: 14 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
import { $, ExecaError } from "execa";
1+
import { $ } from "execa";
22
import { join } from "node:path";
33
import { readJSONFileSync } from "./fileSystem";
44
import { logger } from "./logger";
55
import { PackageManager, getUserPackageManager } from "./getUserPackageManager";
66
import { PackageJson } from "type-fest";
77
import { assertExhaustive } from "./assertExhaustive";
8-
import { builtinModules } from "node:module";
98
import { tracer } from "../cli/common";
109
import { recordSpanException } from "@trigger.dev/core/v3/otel";
1110
import { flattenAttributes } from "@trigger.dev/core/v3";
1211

13-
export type ResolveOptions = { allowDev: boolean };
1412
export type DependencyMeta = { version: string; external: boolean };
1513

1614
export class JavascriptProject {
@@ -126,13 +124,25 @@ export class JavascriptProject {
126124

127125
packagesMeta[packageName] = { version: packageJsonVersion, external };
128126
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+
}
129139
}
130140
}
131141

132142
span.setAttributes({
133143
...flattenAttributes(missingPackageVersions, "missingPackageVersions"),
134144
missingPackages: missingPackagesMeta.map(
135-
([pkgName]: [string, DependencyMeta]) => pkgName
145+
([packageName]: [string, DependencyMeta]) => packageName
136146
),
137147
});
138148

@@ -153,53 +163,6 @@ export class JavascriptProject {
153163
);
154164
}
155165

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-
203166
async #getCommand(): Promise<PackageManagerCommands> {
204167
const packageManager = await this.getPackageManager();
205168

@@ -252,11 +215,6 @@ interface PackageManagerCommands {
252215
extractDirectDependenciesMeta(
253216
options: PackageManagerOptions
254217
): Promise<Record<string, DependencyMeta>>;
255-
256-
resolveDependencyVersion(
257-
packageName: string,
258-
options: PackageManagerOptions
259-
): Promise<string | undefined>;
260218
}
261219

262220
class PNPMCommands implements PackageManagerCommands {
@@ -274,22 +232,6 @@ class PNPMCommands implements PackageManagerCommands {
274232
logger.debug(`Installing dependencies using ${this.name}`, { stdout, stderr });
275233
}
276234

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-
293235
async extractDirectDependenciesMeta(options: PackageManagerOptions) {
294236
const result = await this.#listDirectDependencies(options);
295237

@@ -358,15 +300,6 @@ class NPMCommands implements PackageManagerCommands {
358300
logger.debug(`Installing dependencies using ${this.name}`, { stdout, stderr });
359301
}
360302

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-
370303
async extractDirectDependenciesMeta(
371304
options: PackageManagerOptions
372305
): Promise<Record<string, DependencyMeta>> {
@@ -392,25 +325,6 @@ class NPMCommands implements PackageManagerCommands {
392325
return JSON.parse(childProcess.stdout) as NpmListOutput;
393326
}
394327

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-
414328
#flattenDependenciesMeta(
415329
dependencies: Record<string, NpmDependency>
416330
): Record<string, DependencyMeta> {
@@ -444,22 +358,6 @@ class YarnCommands implements PackageManagerCommands {
444358
logger.debug(`Installing dependencies using ${this.name}`, { stdout, stderr });
445359
}
446360

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-
463361
async extractDirectDependenciesMeta(options: PackageManagerOptions) {
464362
const result = await this.#listDirectDependencies(options);
465363

@@ -522,12 +420,3 @@ class YarnCommands implements PackageManagerCommands {
522420
];
523421
}
524422
}
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

Comments
 (0)