trigger.dev 4.0.0-v4-beta.18 → 4.0.0-v4-beta.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/apiClient.d.ts +14 -6
- package/dist/esm/apiClient.js +50 -68
- package/dist/esm/apiClient.js.map +1 -1
- package/dist/esm/build/buildWorker.d.ts +3 -0
- package/dist/esm/build/buildWorker.js +1 -0
- package/dist/esm/build/buildWorker.js.map +1 -1
- package/dist/esm/build/bundle.d.ts +2 -1
- package/dist/esm/build/bundle.js +2 -1
- package/dist/esm/build/bundle.js.map +1 -1
- package/dist/esm/build/extensions.js +17 -0
- package/dist/esm/build/extensions.js.map +1 -1
- package/dist/esm/cli/index.js +4 -0
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/commands/analyze.d.ts +23 -0
- package/dist/esm/commands/analyze.js +122 -0
- package/dist/esm/commands/analyze.js.map +1 -0
- package/dist/esm/commands/deploy.d.ts +4 -1
- package/dist/esm/commands/deploy.js +94 -34
- package/dist/esm/commands/deploy.js.map +1 -1
- package/dist/esm/commands/dev.d.ts +6 -0
- package/dist/esm/commands/dev.js +14 -4
- package/dist/esm/commands/dev.js.map +1 -1
- package/dist/esm/commands/preview.d.ts +5 -0
- package/dist/esm/commands/preview.js +93 -0
- package/dist/esm/commands/preview.js.map +1 -0
- package/dist/esm/commands/promote.js +12 -1
- package/dist/esm/commands/promote.js.map +1 -1
- package/dist/esm/commands/workers/build.d.ts +1 -1
- package/dist/esm/commands/workers/build.js +17 -4
- package/dist/esm/commands/workers/build.js.map +1 -1
- package/dist/esm/deploy/buildImage.d.ts +2 -0
- package/dist/esm/deploy/buildImage.js +11 -1
- package/dist/esm/deploy/buildImage.js.map +1 -1
- package/dist/esm/dev/backgroundWorker.d.ts +3 -1
- package/dist/esm/dev/backgroundWorker.js +3 -1
- package/dist/esm/dev/backgroundWorker.js.map +1 -1
- package/dist/esm/dev/devOutput.js +2 -0
- package/dist/esm/dev/devOutput.js.map +1 -1
- package/dist/esm/dev/devSession.js +6 -2
- package/dist/esm/dev/devSession.js.map +1 -1
- package/dist/esm/dev/devSupervisor.js +5 -17
- package/dist/esm/dev/devSupervisor.js.map +1 -1
- package/dist/esm/dev/workerRuntime.d.ts +2 -1
- package/dist/esm/entryPoints/dev-index-worker.js +4 -2
- package/dist/esm/entryPoints/dev-index-worker.js.map +1 -1
- package/dist/esm/entryPoints/dev-run-controller.js +1 -0
- package/dist/esm/entryPoints/dev-run-controller.js.map +1 -1
- package/dist/esm/entryPoints/managed/env.d.ts +3 -3
- package/dist/esm/entryPoints/managed/execution.js +4 -1
- package/dist/esm/entryPoints/managed/execution.js.map +1 -1
- package/dist/esm/entryPoints/managed-index-controller.js +1 -1
- package/dist/esm/entryPoints/managed-index-controller.js.map +1 -1
- package/dist/esm/entryPoints/managed-index-worker.js +4 -2
- package/dist/esm/entryPoints/managed-index-worker.js.map +1 -1
- package/dist/esm/indexing/indexWorkerManifest.d.ts +1 -0
- package/dist/esm/indexing/registerResources.d.ts +4 -1
- package/dist/esm/indexing/registerResources.js +5 -1
- package/dist/esm/indexing/registerResources.js.map +1 -1
- package/dist/esm/utilities/analyze.d.ts +13 -0
- package/dist/esm/utilities/analyze.js +463 -0
- package/dist/esm/utilities/analyze.js.map +1 -0
- package/dist/esm/utilities/gitMeta.d.ts +2 -0
- package/dist/esm/utilities/gitMeta.js +218 -0
- package/dist/esm/utilities/gitMeta.js.map +1 -0
- package/dist/esm/utilities/localEnvVars.d.ts +3 -0
- package/dist/esm/utilities/localEnvVars.js +19 -0
- package/dist/esm/utilities/localEnvVars.js.map +1 -0
- package/dist/esm/utilities/session.d.ts +12 -0
- package/dist/esm/utilities/session.js +14 -1
- package/dist/esm/utilities/session.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +7 -5
|
@@ -2,10 +2,14 @@ import { resourceCatalog } from "@trigger.dev/core/v3";
|
|
|
2
2
|
import { normalizeImportPath } from "../utilities/normalizeImportPath.js";
|
|
3
3
|
export async function registerResources(buildManifest) {
|
|
4
4
|
const importErrors = [];
|
|
5
|
+
const timings = {};
|
|
5
6
|
for (const file of buildManifest.files) {
|
|
6
7
|
// Set the context before importing
|
|
7
8
|
resourceCatalog.setCurrentFileContext(file.entry, file.out);
|
|
9
|
+
const start = performance.now();
|
|
8
10
|
const [error, _] = await tryImport(file.out);
|
|
11
|
+
const end = performance.now();
|
|
12
|
+
timings[file.entry] = end - start;
|
|
9
13
|
// Clear the context after import, regardless of success/failure
|
|
10
14
|
resourceCatalog.clearCurrentFileContext();
|
|
11
15
|
if (error) {
|
|
@@ -26,7 +30,7 @@ export async function registerResources(buildManifest) {
|
|
|
26
30
|
continue;
|
|
27
31
|
}
|
|
28
32
|
}
|
|
29
|
-
return importErrors;
|
|
33
|
+
return { importErrors, timings };
|
|
30
34
|
}
|
|
31
35
|
async function tryImport(path) {
|
|
32
36
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerResources.js","sourceRoot":"","sources":["../../../src/indexing/registerResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAA4B;IAE5B,MAAM,YAAY,GAAyB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"registerResources.js","sourceRoot":"","sources":["../../../src/indexing/registerResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAA4B;IAE5B,MAAM,YAAY,GAAyB,EAAE,CAAC;IAC9C,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;QACvC,mCAAmC;QACnC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;QAElC,gEAAgE;QAChE,eAAe,CAAC,uBAAuB,EAAE,CAAC;QAE1C,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,IAAI,CAAC,KAAK;oBAChB,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,IAAI,CAAC,KAAK;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;iBACjB,CAAC,CAAC;YACL,CAAC;YAED,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACnC,CAAC;AAID,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvD,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAc,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { WorkerManifest } from "@trigger.dev/core/v3";
|
|
2
|
+
import type { Metafile } from "esbuild";
|
|
3
|
+
import { BackgroundWorker } from "../dev/backgroundWorker.js";
|
|
4
|
+
export declare function analyzeWorker(worker: BackgroundWorker, printDetails?: boolean, disableWarnings?: boolean): void;
|
|
5
|
+
export declare function printBundleTree(workerManifest: WorkerManifest, metafile: Metafile, opts?: {
|
|
6
|
+
sortBy?: "timing" | "bundleSize";
|
|
7
|
+
preservePath?: boolean;
|
|
8
|
+
collapseBundles?: boolean;
|
|
9
|
+
}): void;
|
|
10
|
+
export declare function printBundleSummaryTable(workerManifest: WorkerManifest, metafile: Metafile, opts?: {
|
|
11
|
+
preservePath?: boolean;
|
|
12
|
+
}): void;
|
|
13
|
+
export declare function printWarnings(workerManifest: WorkerManifest): void;
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import { chalkGreen, chalkError, chalkWarning, chalkTask, chalkPurple } from "./cliOutput.js";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import CLITable from "cli-table3";
|
|
4
|
+
export function analyzeWorker(worker, printDetails = false, disableWarnings = false) {
|
|
5
|
+
if (!worker.manifest) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
if (printDetails) {
|
|
9
|
+
printBundleTree(worker.manifest, worker.metafile);
|
|
10
|
+
printBundleSummaryTable(worker.manifest, worker.metafile);
|
|
11
|
+
}
|
|
12
|
+
if (!disableWarnings) {
|
|
13
|
+
printWarnings(worker.manifest);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function printBundleTree(workerManifest, metafile, opts) {
|
|
17
|
+
const sortBy = opts?.sortBy ?? "timing";
|
|
18
|
+
const preservePath = opts?.preservePath ?? true;
|
|
19
|
+
const collapseBundles = opts?.collapseBundles ?? false;
|
|
20
|
+
const data = getBundleTreeData(workerManifest, metafile);
|
|
21
|
+
if (sortBy === "timing") {
|
|
22
|
+
data.sort((a, b) => (a.timing ?? Infinity) - (b.timing ?? Infinity));
|
|
23
|
+
}
|
|
24
|
+
else if (sortBy === "bundleSize") {
|
|
25
|
+
data.sort((a, b) => b.bundleSize - a.bundleSize);
|
|
26
|
+
}
|
|
27
|
+
const { outputs } = metafile;
|
|
28
|
+
// Build the output-defines-task-ids map once
|
|
29
|
+
const outputDefinesTaskIds = buildOutputDefinesTaskIdsMap(workerManifest, metafile);
|
|
30
|
+
for (const item of data) {
|
|
31
|
+
const { filePath, taskIds, bundleSize, bundleChildren, timing } = item;
|
|
32
|
+
// Print the root
|
|
33
|
+
const displayPath = getDisplayPath(filePath, preservePath);
|
|
34
|
+
const timingStr = formatTimingColored(timing, true);
|
|
35
|
+
console.log(chalk.bold(chalkPurple(displayPath)) + " " + timingStr);
|
|
36
|
+
// Determine if we have both tasks and bundles to print as siblings
|
|
37
|
+
const taskCount = taskIds.length;
|
|
38
|
+
const hasBundles = bundleChildren.length > 0;
|
|
39
|
+
const hasTasks = taskCount > 0;
|
|
40
|
+
const showTasks = hasTasks;
|
|
41
|
+
const showBundles = hasBundles;
|
|
42
|
+
if (showTasks) {
|
|
43
|
+
const symbol = showBundles ? "├──" : "└──";
|
|
44
|
+
console.log(` ${symbol} ${chalk.bold(formatTaskCountLabel(taskCount))}`);
|
|
45
|
+
const indent = showBundles ? " │ " : " ";
|
|
46
|
+
printTaskTree(taskIds, indent);
|
|
47
|
+
}
|
|
48
|
+
if (showBundles) {
|
|
49
|
+
// Find the output file for this task file
|
|
50
|
+
const outputFile = findOutputFileByEntryPoint(outputs, filePath);
|
|
51
|
+
// Calculate total bundle size and unique bundle count
|
|
52
|
+
const totalBundleSize = outputFile ? sumBundleTreeUnique(outputs, outputFile) : 0;
|
|
53
|
+
const bundleSizeColored = formatSizeColored(totalBundleSize, true);
|
|
54
|
+
const uniqueBundleCount = outputFile ? countUniqueBundles(outputs, outputFile) : 0;
|
|
55
|
+
const bundleLabel = formatBundleLabel(uniqueBundleCount, bundleSizeColored);
|
|
56
|
+
console.log(` └── ${chalk.bold(bundleLabel)}`);
|
|
57
|
+
if (!collapseBundles) {
|
|
58
|
+
// Print the root bundle as the only child under bundles
|
|
59
|
+
const taskSeen = new Set();
|
|
60
|
+
printBundleRoot({
|
|
61
|
+
outputs,
|
|
62
|
+
outputFile,
|
|
63
|
+
preservePath,
|
|
64
|
+
indent: " ",
|
|
65
|
+
taskSeen,
|
|
66
|
+
outputDefinesTaskIds,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
console.log("");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export function printBundleSummaryTable(workerManifest, metafile, opts) {
|
|
74
|
+
const data = getBundleTreeData(workerManifest, metafile);
|
|
75
|
+
// Sort by timing (asc, missing last), then bundle size (desc), then file (asc)
|
|
76
|
+
const sorted = [...data].sort(sortBundleTableData);
|
|
77
|
+
const preservePath = opts?.preservePath ?? true;
|
|
78
|
+
const table = new CLITable({
|
|
79
|
+
head: [
|
|
80
|
+
chalk.bold("File"),
|
|
81
|
+
chalk.bold("Tasks"),
|
|
82
|
+
chalk.bold("Bundle size"),
|
|
83
|
+
chalk.bold("Import timing"),
|
|
84
|
+
],
|
|
85
|
+
style: {
|
|
86
|
+
head: ["blue"],
|
|
87
|
+
border: ["gray"],
|
|
88
|
+
},
|
|
89
|
+
wordWrap: true,
|
|
90
|
+
});
|
|
91
|
+
for (const item of sorted) {
|
|
92
|
+
const { filePath, taskIds, bundleSize, timing } = item;
|
|
93
|
+
const displayPath = getDisplayPath(filePath, preservePath);
|
|
94
|
+
const bundleSizeColored = formatSizeColored(bundleSize, false);
|
|
95
|
+
const timingStr = formatTimingColored(timing, false);
|
|
96
|
+
table.push([displayPath, taskIds.length, bundleSizeColored, timingStr]);
|
|
97
|
+
}
|
|
98
|
+
console.log(table.toString());
|
|
99
|
+
}
|
|
100
|
+
export function printWarnings(workerManifest) {
|
|
101
|
+
if (!workerManifest.timings) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const timings = workerManifest.timings;
|
|
105
|
+
const tasksByFile = getTasksByFile(workerManifest.tasks);
|
|
106
|
+
let hasWarnings = false;
|
|
107
|
+
for (const [filePath, timing] of Object.entries(timings)) {
|
|
108
|
+
// Warn if the file takes more than 1 second to import
|
|
109
|
+
if (timing > 1000) {
|
|
110
|
+
if (!hasWarnings) {
|
|
111
|
+
console.log("");
|
|
112
|
+
hasWarnings = true;
|
|
113
|
+
}
|
|
114
|
+
const taskIds = tasksByFile[filePath] || [];
|
|
115
|
+
const timingStr = chalkError(`(${Math.round(timing)}ms)`);
|
|
116
|
+
// File path: bold and purple
|
|
117
|
+
console.log(`${chalk.bold(chalkPurple(filePath))} ${timingStr}`);
|
|
118
|
+
// Tasks: blue with a nice tree symbol
|
|
119
|
+
taskIds.forEach((id, idx) => {
|
|
120
|
+
const isLast = idx === taskIds.length - 1;
|
|
121
|
+
const symbol = isLast ? "└──" : "├──";
|
|
122
|
+
console.log(`${chalkTask(symbol)} ${chalkTask(id)}`);
|
|
123
|
+
});
|
|
124
|
+
console.log("");
|
|
125
|
+
console.log(chalkError("Warning: Slow import timing detected (>1s). This will cause slow startups. Consider optimizing this file."));
|
|
126
|
+
console.log("");
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (hasWarnings) {
|
|
130
|
+
printSlowImportTips();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function getTasksByFile(tasks) {
|
|
134
|
+
const tasksByFile = {};
|
|
135
|
+
tasks.forEach((task) => {
|
|
136
|
+
const filePath = task.filePath;
|
|
137
|
+
if (!tasksByFile[filePath]) {
|
|
138
|
+
tasksByFile[filePath] = [];
|
|
139
|
+
}
|
|
140
|
+
tasksByFile[filePath].push(task.id);
|
|
141
|
+
});
|
|
142
|
+
return tasksByFile;
|
|
143
|
+
}
|
|
144
|
+
function formatSize(bytes) {
|
|
145
|
+
if (bytes > 1024 * 1024) {
|
|
146
|
+
return chalkError(`${(bytes / (1024 * 1024)).toFixed(2)} MB`);
|
|
147
|
+
}
|
|
148
|
+
else if (bytes > 1024) {
|
|
149
|
+
return chalkWarning(`${(bytes / 1024).toFixed(1)} KB`);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
return chalkGreen(`${bytes} B`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function normalizePath(path) {
|
|
156
|
+
// Remove .trigger/tmp/build-<hash>/ prefix
|
|
157
|
+
return path.replace(/(^|\/).trigger\/tmp\/build-[^/]+\//, "");
|
|
158
|
+
}
|
|
159
|
+
function getBundleTreeData(workerManifest, metafile) {
|
|
160
|
+
const tasksByFile = getTasksByFile(workerManifest.tasks);
|
|
161
|
+
const outputs = metafile.outputs;
|
|
162
|
+
const timings = workerManifest.timings || {};
|
|
163
|
+
// Map entryPoint (source file) to output file in outputs
|
|
164
|
+
const entryToOutput = {};
|
|
165
|
+
for (const [outputPath, outputMeta] of Object.entries(outputs)) {
|
|
166
|
+
if (outputMeta.entryPoint) {
|
|
167
|
+
entryToOutput[outputMeta.entryPoint] = outputPath;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const result = [];
|
|
171
|
+
for (const filePath of Object.keys(tasksByFile)) {
|
|
172
|
+
const outputFile = entryToOutput[filePath];
|
|
173
|
+
const taskIds = tasksByFile[filePath];
|
|
174
|
+
if (!taskIds || taskIds.length === 0)
|
|
175
|
+
continue;
|
|
176
|
+
let bundleTreeInfo = { total: 0, count: 0 };
|
|
177
|
+
let bundleChildren = [];
|
|
178
|
+
if (outputFile && outputs[outputFile]) {
|
|
179
|
+
bundleChildren = getInternalChildren(outputs[outputFile], outputs);
|
|
180
|
+
// Sum up all bundles in the tree (excluding the root)
|
|
181
|
+
const seen = new Set();
|
|
182
|
+
bundleChildren.forEach((child, idx) => {
|
|
183
|
+
const res = sumBundleTree(outputs, child, seen);
|
|
184
|
+
bundleTreeInfo.total += res.total;
|
|
185
|
+
bundleTreeInfo.count += res.count;
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
result.push({
|
|
189
|
+
filePath,
|
|
190
|
+
taskIds,
|
|
191
|
+
bundleSize: bundleTreeInfo.total,
|
|
192
|
+
bundleCount: bundleTreeInfo.count,
|
|
193
|
+
timing: typeof timings[filePath] === "number" ? timings[filePath] : undefined,
|
|
194
|
+
bundleChildren,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
function sumBundleTree(outputs, current, seen) {
|
|
200
|
+
if (seen.has(current)) {
|
|
201
|
+
return { total: 0, count: 0 };
|
|
202
|
+
}
|
|
203
|
+
seen.add(current);
|
|
204
|
+
const output = outputs[current];
|
|
205
|
+
if (!output) {
|
|
206
|
+
return { total: 0, count: 0 };
|
|
207
|
+
}
|
|
208
|
+
const size = output.bytes;
|
|
209
|
+
const children = getInternalChildren(output, outputs);
|
|
210
|
+
let total = size;
|
|
211
|
+
let count = 1;
|
|
212
|
+
children.forEach((child) => {
|
|
213
|
+
const res = sumBundleTree(outputs, child, seen);
|
|
214
|
+
total += res.total;
|
|
215
|
+
count += res.count;
|
|
216
|
+
});
|
|
217
|
+
return { total, count };
|
|
218
|
+
}
|
|
219
|
+
// Helper to format bundle size with color
|
|
220
|
+
function formatSizeColored(bytes, withBraces = false) {
|
|
221
|
+
let str;
|
|
222
|
+
if (bytes > 5 * 1024 * 1024) {
|
|
223
|
+
str = `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
|
|
224
|
+
str = withBraces ? chalkError(`(${str})`) : chalkError(str);
|
|
225
|
+
}
|
|
226
|
+
else if (bytes > 1024 * 1024) {
|
|
227
|
+
str = `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
|
|
228
|
+
str = withBraces ? chalkWarning(`(${str})`) : chalkWarning(str);
|
|
229
|
+
}
|
|
230
|
+
else if (bytes > 1024) {
|
|
231
|
+
str = `${(bytes / 1024).toFixed(1)} KB`;
|
|
232
|
+
str = withBraces ? chalkGreen(`(${str})`) : chalkGreen(str);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
str = `${bytes} B`;
|
|
236
|
+
str = withBraces ? chalkGreen(`(${str})`) : chalkGreen(str);
|
|
237
|
+
}
|
|
238
|
+
return str;
|
|
239
|
+
}
|
|
240
|
+
// Helper to format timing with color
|
|
241
|
+
function formatTimingColored(timing, withBraces = false) {
|
|
242
|
+
let str;
|
|
243
|
+
if (typeof timing !== "number") {
|
|
244
|
+
str = "?ms";
|
|
245
|
+
return withBraces ? chalkGreen(`(${str})`) : chalkGreen(str);
|
|
246
|
+
}
|
|
247
|
+
if (timing > 1000) {
|
|
248
|
+
str = `${Math.round(timing)}ms`;
|
|
249
|
+
return withBraces ? chalkError(`(${str})`) : chalkError(str);
|
|
250
|
+
}
|
|
251
|
+
else if (timing > 200) {
|
|
252
|
+
str = `${Math.round(timing)}ms`;
|
|
253
|
+
return withBraces ? chalkWarning(`(${str})`) : chalkWarning(str);
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
str = `${Math.round(timing)}ms`;
|
|
257
|
+
return withBraces ? chalkGreen(`(${str})`) : chalkGreen(str);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Helper to build a map from output file path to task IDs it actually defines (based on inputs)
|
|
261
|
+
function buildOutputDefinesTaskIdsMap(workerManifest, metafile) {
|
|
262
|
+
const outputs = metafile.outputs;
|
|
263
|
+
// Map from task file path to task IDs
|
|
264
|
+
const filePathToTaskIds = {};
|
|
265
|
+
for (const task of workerManifest.tasks) {
|
|
266
|
+
if (!filePathToTaskIds[task.filePath])
|
|
267
|
+
filePathToTaskIds[task.filePath] = [];
|
|
268
|
+
filePathToTaskIds[task.filePath].push(task.id);
|
|
269
|
+
}
|
|
270
|
+
// Map from output file to set of task IDs it defines
|
|
271
|
+
const outputDefinesTaskIds = {};
|
|
272
|
+
for (const [outputPath, outputMeta] of Object.entries(outputs)) {
|
|
273
|
+
if (!outputMeta.inputs)
|
|
274
|
+
continue;
|
|
275
|
+
for (const inputPath of Object.keys(outputMeta.inputs)) {
|
|
276
|
+
if (filePathToTaskIds[inputPath]) {
|
|
277
|
+
if (!outputDefinesTaskIds[outputPath])
|
|
278
|
+
outputDefinesTaskIds[outputPath] = new Set();
|
|
279
|
+
for (const taskId of filePathToTaskIds[inputPath]) {
|
|
280
|
+
outputDefinesTaskIds[outputPath].add(taskId);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return outputDefinesTaskIds;
|
|
286
|
+
}
|
|
287
|
+
function getDefinesTaskLabel(taskIds, prefix = "<-- defines tasks: ") {
|
|
288
|
+
if (!taskIds) {
|
|
289
|
+
return "";
|
|
290
|
+
}
|
|
291
|
+
if (taskIds.size === 0) {
|
|
292
|
+
return "";
|
|
293
|
+
}
|
|
294
|
+
return " " + chalk.cyanBright(`${prefix}${Array.from(taskIds).join(", ")}`);
|
|
295
|
+
}
|
|
296
|
+
function printBundleTreeNode({ outputs, current, branchSeen, taskSeen, prefix = "", isLast = true, preservePath = true, colorBundleSize = false, outputDefinesTaskIds = {}, }) {
|
|
297
|
+
// Detect circular dependencies
|
|
298
|
+
if (branchSeen.has(current)) {
|
|
299
|
+
const displayPath = preservePath ? current : normalizePath(current);
|
|
300
|
+
console.log(prefix + (isLast ? "└── " : "├── ") + chalk.grey(displayPath) + chalk.grey(" (circular)"));
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
// Detect already seen bundles (per task)
|
|
304
|
+
if (taskSeen.has(current)) {
|
|
305
|
+
const displayPath = preservePath ? current : normalizePath(current);
|
|
306
|
+
console.log(prefix + (isLast ? "└── " : "├── ") + chalk.grey(displayPath));
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
// Add to seen cache
|
|
310
|
+
branchSeen.add(current);
|
|
311
|
+
taskSeen.add(current);
|
|
312
|
+
// Get the output for the current node
|
|
313
|
+
const output = outputs[current];
|
|
314
|
+
if (!output) {
|
|
315
|
+
const displayPath = preservePath ? current : normalizePath(current);
|
|
316
|
+
console.log(prefix +
|
|
317
|
+
(isLast ? "└── " : "├── ") +
|
|
318
|
+
chalk.grey(displayPath) +
|
|
319
|
+
chalk.grey(" (not found in outputs)"));
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
// Get the size and children of the current node
|
|
323
|
+
const size = output.bytes;
|
|
324
|
+
const children = getInternalChildren(output, outputs);
|
|
325
|
+
const newPrefix = prefix + (isLast ? " " : "│ ");
|
|
326
|
+
const displayPath = preservePath ? current : normalizePath(current);
|
|
327
|
+
const sizeStr = colorBundleSize ? formatSizeColored(size, true) : formatSize(size);
|
|
328
|
+
const definesTaskLabel = output && !output.entryPoint ? getDefinesTaskLabel(outputDefinesTaskIds[current]) : "";
|
|
329
|
+
console.log(prefix + (isLast ? "└── " : "├── ") + chalk.bold(displayPath) + ` ` + sizeStr + definesTaskLabel);
|
|
330
|
+
// Print the children
|
|
331
|
+
children.forEach((child, idx) => {
|
|
332
|
+
printBundleTreeNode({
|
|
333
|
+
outputs,
|
|
334
|
+
current: child,
|
|
335
|
+
branchSeen: new Set(branchSeen),
|
|
336
|
+
taskSeen,
|
|
337
|
+
prefix: newPrefix,
|
|
338
|
+
isLast: idx === children.length - 1,
|
|
339
|
+
preservePath,
|
|
340
|
+
colorBundleSize,
|
|
341
|
+
outputDefinesTaskIds,
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
// Helper to sum the size of the root bundle and all unique descendants
|
|
346
|
+
function sumBundleTreeUnique(outputs, root) {
|
|
347
|
+
const seen = new Set();
|
|
348
|
+
function walk(current) {
|
|
349
|
+
if (seen.has(current))
|
|
350
|
+
return 0;
|
|
351
|
+
seen.add(current);
|
|
352
|
+
const output = outputs[current];
|
|
353
|
+
if (!output)
|
|
354
|
+
return 0;
|
|
355
|
+
let total = output.bytes;
|
|
356
|
+
const children = getInternalChildren(output, outputs);
|
|
357
|
+
for (const child of children) {
|
|
358
|
+
total += walk(child);
|
|
359
|
+
}
|
|
360
|
+
return total;
|
|
361
|
+
}
|
|
362
|
+
return walk(root);
|
|
363
|
+
}
|
|
364
|
+
// Helper to count unique bundles in the tree
|
|
365
|
+
function countUniqueBundles(outputs, root) {
|
|
366
|
+
const seen = new Set();
|
|
367
|
+
function walk(current) {
|
|
368
|
+
if (seen.has(current))
|
|
369
|
+
return;
|
|
370
|
+
seen.add(current);
|
|
371
|
+
const output = outputs[current];
|
|
372
|
+
if (!output)
|
|
373
|
+
return;
|
|
374
|
+
const children = getInternalChildren(output, outputs);
|
|
375
|
+
for (const child of children) {
|
|
376
|
+
walk(child);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
walk(root);
|
|
380
|
+
return seen.size;
|
|
381
|
+
}
|
|
382
|
+
function printBundleRoot({ outputs, outputFile, preservePath, indent = " ", taskSeen, outputDefinesTaskIds, }) {
|
|
383
|
+
if (!outputFile) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
const output = outputs[outputFile];
|
|
387
|
+
if (!output) {
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
const rootBundleDisplayPath = getDisplayPath(outputFile, preservePath);
|
|
391
|
+
const rootBundleSizeColored = formatSizeColored(output.bytes, true);
|
|
392
|
+
const definesTaskLabel = !output.entryPoint
|
|
393
|
+
? getDefinesTaskLabel(outputDefinesTaskIds[outputFile])
|
|
394
|
+
: "";
|
|
395
|
+
// Print root bundle node (always └──)
|
|
396
|
+
console.log(`${indent}└── ${chalk.bold(rootBundleDisplayPath)} ${rootBundleSizeColored}${definesTaskLabel}`);
|
|
397
|
+
// Print children as children of the root bundle node
|
|
398
|
+
const children = getInternalChildren(output, outputs);
|
|
399
|
+
children.forEach((child, idx) => {
|
|
400
|
+
printBundleTreeNode({
|
|
401
|
+
outputs,
|
|
402
|
+
current: child,
|
|
403
|
+
branchSeen: new Set([outputFile]),
|
|
404
|
+
taskSeen,
|
|
405
|
+
prefix: indent + " ",
|
|
406
|
+
isLast: idx === children.length - 1,
|
|
407
|
+
preservePath,
|
|
408
|
+
colorBundleSize: true,
|
|
409
|
+
outputDefinesTaskIds,
|
|
410
|
+
});
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
function getInternalChildren(output, outputs) {
|
|
414
|
+
return (output.imports || [])
|
|
415
|
+
.filter((imp) => !imp.external && outputs[imp.path])
|
|
416
|
+
.map((imp) => imp.path);
|
|
417
|
+
}
|
|
418
|
+
function findOutputFileByEntryPoint(outputs, entryPoint) {
|
|
419
|
+
for (const [outputPath, outputMeta] of Object.entries(outputs)) {
|
|
420
|
+
if (outputMeta.entryPoint === entryPoint) {
|
|
421
|
+
return outputPath;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
return undefined;
|
|
425
|
+
}
|
|
426
|
+
function formatTaskCountLabel(count) {
|
|
427
|
+
return `${count} task${count === 1 ? "" : "s"}`;
|
|
428
|
+
}
|
|
429
|
+
function formatBundleLabel(count, size) {
|
|
430
|
+
return `${count} bundle${count === 1 ? "" : "s"} ${size}`;
|
|
431
|
+
}
|
|
432
|
+
function getDisplayPath(path, preserve) {
|
|
433
|
+
return preserve ? path : normalizePath(path);
|
|
434
|
+
}
|
|
435
|
+
function sortBundleTableData(a, b) {
|
|
436
|
+
const aTiming = typeof a.timing === "number" ? a.timing : -Infinity;
|
|
437
|
+
const bTiming = typeof b.timing === "number" ? b.timing : -Infinity;
|
|
438
|
+
if (aTiming !== bTiming)
|
|
439
|
+
return bTiming - aTiming;
|
|
440
|
+
if (b.bundleSize !== a.bundleSize)
|
|
441
|
+
return b.bundleSize - a.bundleSize;
|
|
442
|
+
return a.filePath.localeCompare(b.filePath);
|
|
443
|
+
}
|
|
444
|
+
function printTaskTree(taskIds, indent = "", colorFn = chalkTask) {
|
|
445
|
+
taskIds.forEach((id, idx) => {
|
|
446
|
+
const isLast = idx === taskIds.length - 1;
|
|
447
|
+
const symbol = isLast ? "└──" : "├──";
|
|
448
|
+
console.log(`${indent}${symbol} ${colorFn(id)}`);
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
function printSlowImportTips() {
|
|
452
|
+
console.log("Some tips for improving slow imports:");
|
|
453
|
+
console.log("- Are there a lot of tasks in this file? Consider splitting it into multiple files with a single task per file.");
|
|
454
|
+
console.log("- Are you importing any tasks? Consider importing only the task types and trigger with `tasks.trigger(<task-id>)` instead. See: https://trigger.dev/docs/triggering#tasks-trigger");
|
|
455
|
+
console.log("- Are there expensive operations outside of your task at the top level of the file? Consider moving them inside the task or only running them on demand by moving them into a function.");
|
|
456
|
+
console.log("- Are you importing large libraries or modules that aren't used in all code paths? Consider importing them only when needed, for example with a dynamic `await import()`.");
|
|
457
|
+
console.log("- Are you using third-party packages that are known to be slow to import? Check if there are lighter alternatives or if you can import only specific submodules.");
|
|
458
|
+
console.log("");
|
|
459
|
+
console.log("To see more details, run with the --analyze flag.");
|
|
460
|
+
console.log("To disable these warnings, run with the --disable-warnings flag.");
|
|
461
|
+
console.log("");
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/utilities/analyze.ts"],"names":[],"mappings":"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"}
|