@workflow/cli 5.0.0-beta.3 → 5.0.0-beta.30
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/base.d.ts.map +1 -1
- package/dist/base.js +8 -2
- package/dist/commands/build.js +1 -1
- package/dist/commands/cancel.d.ts.map +1 -1
- package/dist/commands/cancel.js +56 -10
- package/dist/commands/dev.js +1 -1
- package/dist/commands/health.js +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/inspect.d.ts +3 -0
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +37 -7
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +8 -3
- package/dist/commands/transform.js +1 -1
- package/dist/commands/validate.js +1 -1
- package/dist/commands/web.d.ts +1 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +9 -3
- package/dist/lib/config/log.js +1 -1
- package/dist/lib/config/types.d.ts +6 -1
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/config/types.js +1 -1
- package/dist/lib/config/workflow-config.js +1 -1
- package/dist/lib/inspect/auth.js +1 -1
- package/dist/lib/inspect/env.d.ts +1 -1
- package/dist/lib/inspect/env.js +2 -2
- package/dist/lib/inspect/errors.d.ts +3 -0
- package/dist/lib/inspect/errors.d.ts.map +1 -0
- package/dist/lib/inspect/errors.js +27 -0
- package/dist/lib/inspect/flags.d.ts +8 -0
- package/dist/lib/inspect/flags.d.ts.map +1 -1
- package/dist/lib/inspect/flags.js +15 -1
- package/dist/lib/inspect/hydration.d.ts +22 -0
- package/dist/lib/inspect/hydration.d.ts.map +1 -1
- package/dist/lib/inspect/hydration.js +102 -47
- package/dist/lib/inspect/hydration.test.d.ts +2 -0
- package/dist/lib/inspect/hydration.test.d.ts.map +1 -0
- package/dist/lib/inspect/hydration.test.js +23 -0
- package/dist/lib/inspect/output.d.ts +2 -2
- package/dist/lib/inspect/output.d.ts.map +1 -1
- package/dist/lib/inspect/output.js +255 -131
- package/dist/lib/inspect/output.test.js +403 -3
- package/dist/lib/inspect/pagination.d.ts +10 -1
- package/dist/lib/inspect/pagination.d.ts.map +1 -1
- package/dist/lib/inspect/pagination.js +20 -4
- package/dist/lib/inspect/run.d.ts.map +1 -1
- package/dist/lib/inspect/run.js +32 -9
- package/dist/lib/inspect/setup.d.ts.map +1 -1
- package/dist/lib/inspect/setup.js +42 -6
- package/dist/lib/inspect/stream.js +1 -1
- package/dist/lib/inspect/terminal-utils.js +1 -1
- package/dist/lib/inspect/time-window.d.ts +28 -0
- package/dist/lib/inspect/time-window.d.ts.map +1 -0
- package/dist/lib/inspect/time-window.js +61 -0
- package/dist/lib/inspect/time-window.test.d.ts +2 -0
- package/dist/lib/inspect/time-window.test.d.ts.map +1 -0
- package/dist/lib/inspect/time-window.test.js +58 -0
- package/dist/lib/inspect/vercel-api.d.ts +5 -2
- package/dist/lib/inspect/vercel-api.d.ts.map +1 -1
- package/dist/lib/inspect/vercel-api.js +12 -37
- package/dist/lib/inspect/vercel-api.test.d.ts +2 -0
- package/dist/lib/inspect/vercel-api.test.d.ts.map +1 -0
- package/dist/lib/inspect/vercel-api.test.js +21 -0
- package/dist/lib/inspect/vercel-link.js +1 -1
- package/dist/lib/inspect/web.d.ts +24 -0
- package/dist/lib/inspect/web.d.ts.map +1 -1
- package/dist/lib/inspect/web.js +47 -3
- package/dist/lib/update-check.js +1 -1
- package/package.json +14 -14
- package/dist/base.js.map +0 -1
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/cancel.js.map +0 -1
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/health.js.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/inspect.js.map +0 -1
- package/dist/commands/start.js.map +0 -1
- package/dist/commands/transform.js.map +0 -1
- package/dist/commands/validate.js.map +0 -1
- package/dist/commands/web.js.map +0 -1
- package/dist/lib/config/log.js.map +0 -1
- package/dist/lib/config/types.js.map +0 -1
- package/dist/lib/config/workflow-config.js.map +0 -1
- package/dist/lib/inspect/auth.js.map +0 -1
- package/dist/lib/inspect/env.js.map +0 -1
- package/dist/lib/inspect/flags.js.map +0 -1
- package/dist/lib/inspect/hydration.js.map +0 -1
- package/dist/lib/inspect/output.js.map +0 -1
- package/dist/lib/inspect/output.test.js.map +0 -1
- package/dist/lib/inspect/pagination.js.map +0 -1
- package/dist/lib/inspect/run.js.map +0 -1
- package/dist/lib/inspect/setup.js.map +0 -1
- package/dist/lib/inspect/stream.js.map +0 -1
- package/dist/lib/inspect/terminal-utils.js.map +0 -1
- package/dist/lib/inspect/vercel-api.js.map +0 -1
- package/dist/lib/inspect/vercel-link.js.map +0 -1
- package/dist/lib/inspect/web.js.map +0 -1
- package/dist/lib/update-check.js.map +0 -1
package/dist/lib/inspect/run.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { start } from '@workflow/core/runtime';
|
|
2
2
|
import { healthCheck } from '@workflow/core/runtime/helpers';
|
|
3
3
|
import { logger } from '../config/log.js';
|
|
4
|
+
import { planWindowStartFromResponse } from './time-window.js';
|
|
4
5
|
const getWorkflowName = async (world, runNameOrId) => {
|
|
5
6
|
if (runNameOrId.startsWith('wrun_')) {
|
|
6
7
|
const run = await world.runs.get(runNameOrId);
|
|
@@ -21,6 +22,8 @@ export const startRun = async (world, workflowNameOrRunId, opts, args) => {
|
|
|
21
22
|
throw error;
|
|
22
23
|
}
|
|
23
24
|
});
|
|
25
|
+
// Only deployment/spec metadata is needed to start a new run, so this
|
|
26
|
+
// accepts either a full run record or an analytics (metadata-only) row.
|
|
24
27
|
let run;
|
|
25
28
|
// If the workflowNameOrRunId is a run ID, get the run
|
|
26
29
|
if (workflowNameOrRunId.startsWith('wrun_')) {
|
|
@@ -28,15 +31,35 @@ export const startRun = async (world, workflowNameOrRunId, opts, args) => {
|
|
|
28
31
|
}
|
|
29
32
|
else {
|
|
30
33
|
// Get the first run for that name, hopefully the newest deployment,
|
|
31
|
-
// but can't guarantee that.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
limit: 1,
|
|
37
|
-
}
|
|
38
|
-
|
|
34
|
+
// but can't guarantee that. This is metadata only, so prefer the
|
|
35
|
+
// analytics read path when the backend provides one.
|
|
36
|
+
const runList = world.analytics
|
|
37
|
+
? await world.analytics.runs.list({
|
|
38
|
+
workflowName: workflowNameOrRunId,
|
|
39
|
+
pagination: { sortOrder: 'desc', limit: 1 },
|
|
40
|
+
})
|
|
41
|
+
: await world.runs.list({
|
|
42
|
+
workflowName: workflowNameOrRunId,
|
|
43
|
+
pagination: { sortOrder: 'desc', limit: 1 },
|
|
44
|
+
resolveData: 'none',
|
|
45
|
+
});
|
|
39
46
|
run = runList.data[0];
|
|
47
|
+
// The analytics backend defaults its listing to a recent window
|
|
48
|
+
// (trailing 24h on the Vercel backend). When the name wasn't found
|
|
49
|
+
// there, retry across the plan's whole observability window using the
|
|
50
|
+
// window bounds from the response's page metadata.
|
|
51
|
+
if (!run && world.analytics) {
|
|
52
|
+
const windowStart = planWindowStartFromResponse(runList);
|
|
53
|
+
if (windowStart) {
|
|
54
|
+
const widened = await world.analytics.runs.list({
|
|
55
|
+
workflowName: workflowNameOrRunId,
|
|
56
|
+
startTime: windowStart,
|
|
57
|
+
endTime: new Date().toISOString(),
|
|
58
|
+
pagination: { sortOrder: 'desc', limit: 1 },
|
|
59
|
+
});
|
|
60
|
+
run = widened.data[0];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
40
63
|
}
|
|
41
64
|
if (!run) {
|
|
42
65
|
throw new Error(`Run "${workflowNameOrRunId}" not found`);
|
|
@@ -71,4 +94,4 @@ export const startRun = async (world, workflowNameOrRunId, opts, args) => {
|
|
|
71
94
|
logger.log(newRun);
|
|
72
95
|
}
|
|
73
96
|
};
|
|
74
|
-
//# sourceMappingURL=
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU8vRCxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUUsS0FBWSxFQUFFLFdBQW1CLEVBQUUsRUFBRTtJQUNsRSxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxXQUFXLFlBQVksQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxZQUFZLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxLQUFLLEVBQzNCLEtBQVksRUFDWixtQkFBMkIsRUFDM0IsSUFBbUIsRUFDbkIsSUFBYyxFQUNkLEVBQUU7SUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElB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REFBMEQ7SUFDNUQsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFO1FBQ25ELFlBQVk7UUFDWixXQUFXO0tBQ1osQ0FBQyxDQUFDO0lBRUgsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckIsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0YXJ0IH0gZnJvbSAnQHdvcmtmbG93L2NvcmUvcnVudGltZSc7XG5pbXBvcnQgeyBoZWFsdGhDaGVjayB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3J1bnRpbWUvaGVscGVycyc7XG5pbXBvcnQgdHlwZSB7IFdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2NvbmZpZy9sb2cuanMnO1xuaW1wb3J0IHsgcGxhbldpbmRvd1N0YXJ0RnJvbVJlc3BvbnNlIH0gZnJvbSAnLi90aW1lLXdpbmRvdy5qcyc7XG5cbmludGVyZmFjZSBDTElDcmVhdGVPcHRzIHtcbiAganNvbj86IGJvb2xlYW47XG4gIHZlcmJvc2U/OiBib29sZWFuO1xufVxuXG5jb25zdCBnZXRXb3JrZmxvd05hbWUgPSBhc3luYyAod29ybGQ6IFdvcmxkLCBydW5OYW1lT3JJZDogc3RyaW5nKSA9PiB7XG4gIGlmIChydW5OYW1lT3JJZC5zdGFydHNXaXRoKCd3cnVuXycpKSB7XG4gICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQocnVuTmFtZU9ySWQpO1xuICAgIGlmICghcnVuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJ1biAke3J1bk5hbWVPcklkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJ1bi53b3JrZmxvd05hbWU7XG4gIH1cbiAgcmV0dXJuIHJ1bk5hbWVPcklkO1xufTtcblxuZXhwb3J0IGNvbnN0IHN0YXJ0UnVuID0gYXN5bmMgKFxuICB3b3JsZDogV29ybGQsXG4gIHdvcmtmbG93TmFtZU9yUnVuSWQ6IHN0cmluZyxcbiAgb3B0czogQ0xJQ3JlYXRlT3B0cyxcbiAgYXJnczogc3RyaW5nW11cbikgPT4ge1xuICBjb25zdCBqc29uQXJncyA9IGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoYXJnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBhcmd1bWVudCBcIiR7YXJnfVwiIGFzIEpTT046ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE9ubHkgZGVwbG95bWVudC9zcGVjIG1ldGFkYXRhIGlzIG5lZWRlZCB0byBzdGFydCBhIG5ldyBydW4sIHNvIHRoaXNcbiAgLy8gYWNjZXB0cyBlaXRoZXIgYSBmdWxsIHJ1biByZWNvcmQgb3IgYW4gYW5hbHl0aWNzIChtZXRhZGF0YS1vbmx5KSByb3cuXG4gIGxldCBydW46XG4gICAgfCB7IGRlcGxveW1lbnRJZDogc3RyaW5nOyBzcGVjVmVyc2lvbj86IG51bWJlcjsgd29ya2Zsb3dOYW1lOiBzdHJpbmcgfVxuICAgIHwgdW5kZWZpbmVkO1xuICAvLyBJZiB0aGUgd29ya2Zsb3dOYW1lT3JSdW5JZCBpcyBhIHJ1biBJRCwgZ2V0IHRoZSBydW5cbiAgaWYgKHdvcmtmbG93TmFtZU9yUnVuSWQuc3RhcnRzV2l0aCgnd3J1bl8nKSkge1xuICAgIHJ1biA9IGF3YWl0IHdvcmxkLnJ1bnMuZ2V0KHdvcmtmbG93TmFtZU9yUnVuSWQpO1xuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgZmlyc3QgcnVuIGZvciB0aGF0IG5hbWUsIGhvcGVmdWxseSB0aGUgbmV3ZXN0IGRlcGxveW1lbnQsXG4gICAgLy8gYnV0IGNhbid0IGd1YXJhbnRlZSB0aGF0LiBUaGlzIGlzIG1ldGFkYXRhIG9ubHksIHNvIHByZWZlciB0aGVcbiAgICAvLyBhbmFseXRpY3MgcmVhZCBwYXRoIHdoZW4gdGhlIGJhY2tlbmQgcHJvdmlkZXMgb25lLlxuICAgIGNvbnN0IHJ1bkxpc3QgPSB3b3JsZC5hbmFseXRpY3NcbiAgICAgID8gYXdhaXQgd29ybGQuYW5hbHl0aWNzLnJ1bnMubGlzdCh7XG4gICAgICAgICAgd29ya2Zsb3dOYW1lOiB3b3JrZmxvd05hbWVPclJ1bklkLFxuICAgICAgICAgIHBhZ2luYXRpb246IHsgc29ydE9yZGVyOiAnZGVzYycsIGxpbWl0OiAxIH0sXG4gICAgICAgIH0pXG4gICAgICA6IGF3YWl0IHdvcmxkLnJ1bnMubGlzdCh7XG4gICAgICAgICAgd29ya2Zsb3dOYW1lOiB3b3JrZmxvd05hbWVPclJ1bklkLFxuICAgICAgICAgIHBhZ2luYXRpb246IHsgc29ydE9yZGVyOiAnZGVzYycsIGxpbWl0OiAxIH0sXG4gICAgICAgICAgcmVzb2x2ZURhdGE6ICdub25lJyxcbiAgICAgICAgfSk7XG4gICAgcnVuID0gcnVuTGlzdC5kYXRhWzBdO1xuXG4gICAgLy8gVGhlIGFuYWx5dGljcyBiYWNrZW5kIGRlZmF1bHRzIGl0cyBsaXN0aW5nIHRvIGEgcmVjZW50IHdpbmRvd1xuICAgIC8vICh0cmFpbGluZyAyNGggb24gdGhlIFZlcmNlbCBiYWNrZW5kKS4gV2hlbiB0aGUgbmFtZSB3YXNuJ3QgZm91bmRcbiAgICAvLyB0aGVyZSwgcmV0cnkgYWNyb3NzIHRoZSBwbGFuJ3Mgd2hvbGUgb2JzZXJ2YWJpbGl0eSB3aW5kb3cgdXNpbmcgdGhlXG4gICAgLy8gd2luZG93IGJvdW5kcyBmcm9tIHRoZSByZXNwb25zZSdzIHBhZ2UgbWV0YWRhdGEuXG4gICAgaWYgKCFydW4gJiYgd29ybGQuYW5hbHl0aWNzKSB7XG4gICAgICBjb25zdCB3aW5kb3dTdGFydCA9IHBsYW5XaW5kb3dTdGFydEZyb21SZXNwb25zZShydW5MaXN0KTtcbiAgICAgIGlmICh3aW5kb3dTdGFydCkge1xuICAgICAgICBjb25zdCB3aWRlbmVkID0gYXdhaXQgd29ybGQuYW5hbHl0aWNzLnJ1bnMubGlzdCh7XG4gICAgICAgICAgd29ya2Zsb3dOYW1lOiB3b3JrZmxvd05hbWVPclJ1bklkLFxuICAgICAgICAgIHN0YXJ0VGltZTogd2luZG93U3RhcnQsXG4gICAgICAgICAgZW5kVGltZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHBhZ2luYXRpb246IHsgc29ydE9yZGVyOiAnZGVzYycsIGxpbWl0OiAxIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBydW4gPSB3aWRlbmVkLmRhdGFbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFydW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJ1biBcIiR7d29ya2Zsb3dOYW1lT3JSdW5JZH1cIiBub3QgZm91bmRgKTtcbiAgfVxuXG4gIGNvbnN0IGRlcGxveW1lbnRJZCA9IHJ1bi5kZXBsb3ltZW50SWQ7XG4gIGNvbnN0IHdvcmtmbG93SWQgPSBhd2FpdCBnZXRXb3JrZmxvd05hbWUod29ybGQsIHdvcmtmbG93TmFtZU9yUnVuSWQpO1xuXG4gIC8vIFByb2JlIHRoZSBkZXBsb3ltZW50J3Mgc3BlY1ZlcnNpb24gdmlhIGhlYWx0aCBjaGVjayBzbyB3ZSB1c2UgdGhlXG4gIC8vIGNvcnJlY3QgcXVldWUgdHJhbnNwb3J0IChKU09OIGZvciBvbGQgZGVwbG95bWVudHMsIENCT1IgZm9yIG5ldykuXG4gIC8vIEZhbGxzIGJhY2sgdG8gdGhlIHJ1bidzIHNwZWNWZXJzaW9uIGlmIHRoZSBoZWFsdGggY2hlY2sgZmFpbHNcbiAgLy8gKGUuZy4gb2xkIGRlcGxveW1lbnQgd2l0aG91dCBoZWFsdGggY2hlY2sgc3VwcG9ydCkuXG4gIGxldCBzcGVjVmVyc2lvbiA9IHJ1bi5zcGVjVmVyc2lvbjtcbiAgdHJ5IHtcbiAgICBjb25zdCBoYyA9IGF3YWl0IGhlYWx0aENoZWNrKHdvcmxkLCAnd29ya2Zsb3cnLCB7XG4gICAgICBkZXBsb3ltZW50SWQsXG4gICAgICB0aW1lb3V0OiAxMF8wMDAsXG4gICAgfSk7XG4gICAgaWYgKGhjLmhlYWx0aHkgJiYgaGMuc3BlY1ZlcnNpb24gIT0gbnVsbCkge1xuICAgICAgc3BlY1ZlcnNpb24gPSBoYy5zcGVjVmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIEhlYWx0aCBjaGVjayBmYWlsZWQg4oCUIHVzZSBydW4ncyBzcGVjVmVyc2lvbiBhcyBmYWxsYmFja1xuICB9XG5cbiAgY29uc3QgbmV3UnVuID0gYXdhaXQgc3RhcnQoeyB3b3JrZmxvd0lkIH0sIGpzb25BcmdzLCB7XG4gICAgZGVwbG95bWVudElkLFxuICAgIHNwZWNWZXJzaW9uLFxuICB9KTtcblxuICBpZiAob3B0cy5qc29uKSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkobmV3UnVuLCBudWxsLCAyKSk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmxvZyhuZXdSdW4pO1xuICB9XG59O1xuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/setup.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAc7C;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO;IACL,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,EACD,SAAS,MAAM,EACf,qCAAmC,0BA8GpC,CAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { setWorld } from '@workflow/core/runtime';
|
|
2
5
|
import { isVercelWorldTarget } from '@workflow/utils';
|
|
3
|
-
import {
|
|
6
|
+
import { createWorld as createLocalCliWorld } from '@workflow/world-local';
|
|
7
|
+
import { createWorld as createVercelCliWorld } from '@workflow/world-vercel';
|
|
4
8
|
import chalk from 'chalk';
|
|
5
9
|
import terminalLink from 'terminal-link';
|
|
6
10
|
import { logger, setJsonMode, setVerboseMode } from '../config/log.js';
|
|
@@ -16,7 +20,7 @@ export const setupCliWorld = async (flags, version, ignoreLocalWorldConfigError
|
|
|
16
20
|
setVerboseMode(Boolean(flags.verbose));
|
|
17
21
|
// Check for updates
|
|
18
22
|
const updateCheck = await checkForUpdateCached(version);
|
|
19
|
-
const withAnsiLinks = flags.json
|
|
23
|
+
const withAnsiLinks = !flags.json;
|
|
20
24
|
const docsUrl = withAnsiLinks
|
|
21
25
|
? terminalLink('https://workflow-sdk.dev/', 'https://workflow-sdk.dev/')
|
|
22
26
|
: 'https://workflow-sdk.dev/';
|
|
@@ -73,7 +77,7 @@ export const setupCliWorld = async (flags, version, ignoreLocalWorldConfigError
|
|
|
73
77
|
if (vercelEnvVars) {
|
|
74
78
|
// Build the Vercel world directly from the inferred config, rather than
|
|
75
79
|
// relying on createWorld() reading process.env.
|
|
76
|
-
world =
|
|
80
|
+
world = createVercelCliWorld({
|
|
77
81
|
token: vercelEnvVars.token,
|
|
78
82
|
projectConfig: {
|
|
79
83
|
environment: vercelEnvVars.environment,
|
|
@@ -83,11 +87,43 @@ export const setupCliWorld = async (flags, version, ignoreLocalWorldConfigError
|
|
|
83
87
|
},
|
|
84
88
|
});
|
|
85
89
|
}
|
|
90
|
+
else if (flags.backend === 'local' ||
|
|
91
|
+
flags.backend === '@workflow/world-local') {
|
|
92
|
+
world = createLocalCliWorld();
|
|
93
|
+
}
|
|
86
94
|
else {
|
|
87
|
-
world = await
|
|
95
|
+
world = await createDynamicCliWorld(flags.backend);
|
|
88
96
|
}
|
|
89
97
|
// Store in the global cache so BaseCommand.finally() can find and close it.
|
|
90
98
|
setWorld(world);
|
|
91
99
|
return world;
|
|
92
100
|
};
|
|
93
|
-
|
|
101
|
+
/**
|
|
102
|
+
* Construct a world from its package (e.g. `@workflow/world-postgres` or a
|
|
103
|
+
* community world), resolved from the user's project directory. The vercel
|
|
104
|
+
* and local worlds are direct dependencies and constructed explicitly above;
|
|
105
|
+
* every other backend is loaded dynamically so third-party worlds keep
|
|
106
|
+
* working without being dependencies of the CLI.
|
|
107
|
+
*/
|
|
108
|
+
async function createDynamicCliWorld(backendId) {
|
|
109
|
+
const cwd = process.cwd();
|
|
110
|
+
let worldPath;
|
|
111
|
+
try {
|
|
112
|
+
worldPath = createRequire(join(cwd, 'package.json')).resolve(backendId, {
|
|
113
|
+
paths: [cwd],
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
throw new Error(`Could not resolve workflow backend package "${backendId}" from "${cwd}". ` +
|
|
118
|
+
'Make sure the package is installed in your project.');
|
|
119
|
+
}
|
|
120
|
+
const mod = (await import(pathToFileURL(worldPath).href));
|
|
121
|
+
// Fall back to default.createWorld for CJS packages whose named exports
|
|
122
|
+
// aren't statically detectable by cjs-module-lexer.
|
|
123
|
+
const createWorldFn = mod.createWorld ?? mod.default?.createWorld;
|
|
124
|
+
if (typeof createWorldFn !== 'function') {
|
|
125
|
+
throw new Error(`Workflow backend package "${backendId}" does not export createWorld().`);
|
|
126
|
+
}
|
|
127
|
+
return createWorldFn();
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luc3BlY3Qvc2V0dXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRELE9BQU8sRUFBRSxXQUFXLElBQUksbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxJQUFJLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sWUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUVsQixZQUFZLEdBQ2IsTUFBTSxVQUFVLENBQUM7QUFFbEI7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQ2hDLEtBUUMsRUFDRCxPQUFlLEVBQ2YsMkJBQTJCLEdBQUcsS0FBSyxFQUNuQyxFQUFFO0lBQ0YsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXZDLG9CQUFv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QUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUd2RCxDQUFDO0lBQ0Ysd0VBQXdFO0lBQ3hFLG9EQUFvRDtJQUNwRCxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO0lBQ2xFLElBQUksT0FBTyxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FDYiw2QkFBNkIsU0FBUyxrQ0FBa0MsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLGFBQWEsRUFBRSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbm9kZTptb2R1bGUnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgc2V0V29ybGQgfSBmcm9tICdAd29ya2Zsb3cvY29yZS9ydW50aW1lJztcbmltcG9ydCB7IGlzVmVyY2VsV29ybGRUYXJnZXQgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBXb3JsZCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBjcmVhdGVXb3JsZCBhcyBjcmVhdGVMb2NhbENsaVdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkLWxvY2FsJztcbmltcG9ydCB7IGNyZWF0ZVdvcmxkIGFzIGNyZWF0ZVZlcmNlbENsaVdvcmxkIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkLXZlcmNlbCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHRlcm1pbmFsTGluayBmcm9tICd0ZXJtaW5hbC1saW5rJztcbmltcG9ydCB7IGxvZ2dlciwgc2V0SnNvbk1vZGUsIHNldFZlcmJvc2VNb2RlIH0gZnJvbSAnLi4vY29uZmlnL2xvZy5qcyc7XG5pbXBvcnQgeyBjaGVja0ZvclVwZGF0ZUNhY2hlZCB9IGZyb20gJy4uL3VwZGF0ZS1jaGVjay5qcyc7XG5pbXBvcnQge1xuICBpbmZlckxvY2FsV29ybGRFbnZWYXJzLFxuICBpbmZlclZlcmNlbEVudlZhcnMsXG4gIHR5cGUgVmVyY2VsRW52VmFycyxcbiAgd3JpdGVFbnZWYXJzLFxufSBmcm9tICcuL2Vudi5qcyc7XG5cbi8qKlxuICogU2V0dXAgQ0xJIHdvcmxkIGNvbmZpZ3VyYXRpb24uXG4gKiBJZiB0aHJvd09uQ29uZmlnRXJyb3IgaXMgZmFsc2UsIHdpbGwgcmV0dXJuIG51bGwgd29ybGQgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZVxuICogaW5zdGVhZCBvZiB0aHJvd2luZywgYWxsb3dpbmcgdGhlIHdlYiBVSSB0byBvcGVuIGZvciBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3Qgc2V0dXBDbGlXb3JsZCA9IGFzeW5jIChcbiAgZmxhZ3M6IHtcbiAgICBqc29uOiBib29sZWFuO1xuICAgIHZlcmJvc2U6IGJvb2xlYW47XG4gICAgYmFja2VuZDogc3RyaW5nO1xuICAgIGVudjogc3RyaW5nO1xuICAgIGF1dGhUb2tlbjogc3RyaW5nO1xuICAgIHByb2plY3Q6IHN0cmluZztcbiAgICB0ZWFtOiBzdHJpbmc7XG4gIH0sXG4gIHZlcnNpb246IHN0cmluZyxcbiAgaWdub3JlTG9jYWxXb3JsZENvbmZpZ0Vycm9yID0gZmFsc2VcbikgPT4ge1xuICBzZXRKc29uTW9kZShCb29sZWFuKGZsYWdzLmpzb24pKTtcbiAgc2V0VmVyYm9zZU1vZGUoQm9vbGVhbihmbGFncy52ZXJib3NlKSk7XG5cbiAgLy8gQ2hlY2sgZm9yIHVwZGF0ZXNcbiAgY29uc3QgdXBkYXRlQ2hlY2sgPSBhd2FpdCBjaGVja0ZvclVwZGF0ZUNhY2hlZCh2ZXJzaW9uKTtcblxuICBjb25zdCB3aXRoQW5zaUxpbmtzID0gIWZsYWdzLmpzb247XG4gIGNvbnN0IGRvY3NVcmwgPSB3aXRoQW5zaUxpbmtzXG4gICAgPyB0ZXJtaW5hbExpbmsoJ2h0dHBzOi8vd29ya2Zsb3ctc2RrLmRldi8nLCAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2LycpXG4gICAgOiAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2Lyc7XG5cbiAgLy8gUHJlcGFyZSBzaG93Qm94IGxpbmVzXG4gIGNvbnN0IGJveExpbmVzID0gW1xuICAgIGBXb3JrZmxvdyBDTEkgdiR7dmVyc2lvbn1gLFxuICAgIGBEb2NzIGF0ICR7ZG9jc1VybH1gLFxuICAgIGNoYWxrLnllbGxvdygnVGhpcyBpcyBhIGJldGEgcmVsZWFzZScpLFxuICBdO1xuXG4gIC8vIEFkZCB1cGRhdGUgbWVzc2FnZSBpZiBhdmFpbGFibGVcbiAgaWYgKHVwZGF0ZUNoZWNrLm5lZWRzVXBkYXRlICYmIHVwZGF0ZUNoZWNrLmxhdGVzdFZlcnNpb24pIHtcbiAgICBib3hMaW5lcy5wdXNoKFxuICAgICAgJycsXG4gICAgICBjaGFsay5jeWFuKFxuICAgICAgICBgVXBkYXRlIGF2YWlsYWJsZTogJHt1cGRhdGVDaGVjay5jdXJyZW50VmVyc2lvbn0g4oaSICR7dXBkYXRlQ2hlY2subGF0ZXN0VmVyc2lvbn1gXG4gICAgICApLFxuICAgICAgLy8gTm90ZSB0aGF0IHdlJ3JlIHN1Z2dlc3RpbmcgaW5zdGFsbCBcImxhdGVzdFwiIGluc3RlYWQgb2YgdGhlIHJlbGVhc2UgdGFnIHRoYXQgdGhlIHVzZXIgaXNcbiAgICAgIC8vIG9uLCBiZWNhdXNlIHdlIGN1cnJlbnRseSB0YWcgYmV0YSByZWxlYXNlcyBhcyBcImxhdGVzdFwiLiBBZnRlciBHQSwgd2UgbmVlZCB0byBhZGp1c3RcbiAgICAgIC8vIHRoaXMgdG8gaW5zdGFsbCB0aGUgcmVsZWFzZSB0YWcgdGhhdCB0aGUgdXNlciBpcyBvbi5cbiAgICAgIGNoYWxrLmdyYXkoXG4gICAgICAgIGBSdW46IFxcYFtucG18YnVufHBucG1dIGkgd29ya2Zsb3dAJHt1cGRhdGVDaGVjay5sYXRlc3RWZXJzaW9ufVxcYGBcbiAgICAgICksXG4gICAgICBjaGFsay5ncmF5KFxuICAgICAgICB0ZXJtaW5hbExpbmsoXG4gICAgICAgICAgJ1ZpZXcgY2hhbmdlbG9nJyxcbiAgICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC93b3JrZmxvdy9yZWxlYXNlcydcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBsb2dnZXIuc2hvd0JveCgnZ3JlZW4nLCAuLi5ib3hMaW5lcyk7XG5cbiAgbG9nZ2VyLmRlYnVnKCdJbmZlcnJpbmcgZW52IHZhcnMsIGJhY2tlbmQ6JywgZmxhZ3MuYmFja2VuZCk7XG4gIHdyaXRlRW52VmFycyh7XG4gICAgREVCVUc6IGZsYWdzLnZlcmJvc2UgPyAnMScgOiAnJyxcbiAgICBXT1JLRkxPV19UQVJHRVRfV09STEQ6IGZsYWdzLmJhY2tlbmQsXG4gIH0pO1xuXG4gIGxldCB2ZXJjZWxFbnZWYXJzOiBWZXJjZWxFbnZWYXJzIHwgdW5kZWZpbmVkO1xuICBpZiAoaXNWZXJjZWxXb3JsZFRhcmdldChmbGFncy5iYWNrZW5kKSkge1xuICAgIC8vIFNlZWQgdGhlIGluaXRpYWwgZmxhZ3MgaW50byBwcm9jZXNzLmVudiBzbyBpbmZlclZlcmNlbEVudlZhcnMoKSBjYW5cbiAgICAvLyByZWFkIHRoZW0gdmlhIGdldEVudlZhcnMoKSBhcyBzdGFydGluZyB2YWx1ZXMgYmVmb3JlIGluZmVyZW5jZS5cbiAgICB3cml0ZUVudlZhcnMoe1xuICAgICAgV09SS0ZMT1dfVkVSQ0VMX0VOVjogZmxhZ3MuZW52LFxuICAgICAgV09SS0ZMT1dfVkVSQ0VMX0FVVEhfVE9LRU46IGZsYWdzLmF1dGhUb2tlbixcbiAgICAgIFdPUktGTE9XX1ZFUkNFTF9QUk9KRUNUOiBmbGFncy5wcm9qZWN0LFxuICAgICAgV09SS0ZMT1dfVkVSQ0VMX1RFQU06IGZsYWdzLnRlYW0sXG4gICAgfSk7XG4gICAgdmVyY2VsRW52VmFycyA9IGF3YWl0IGluZmVyVmVyY2VsRW52VmFycygpO1xuICB9IGVsc2UgaWYgKFxuICAgIGZsYWdzLmJhY2tlbmQgPT09ICdsb2NhbCcgfHxcbiAgICBmbGFncy5iYWNrZW5kID09PSAnQHdvcmtmbG93L3dvcmxkLWxvY2FsJ1xuICApIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgaW5mZXJMb2NhbFdvcmxkRW52VmFycygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaWdub3JlTG9jYWxXb3JsZENvbmZpZ0Vycm9yKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0Vycm9yID1cbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgIDogJ1Vua25vd24gY29uZmlndXJhdGlvbiBlcnJvcic7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICdGYWlsZWQgdG8gZmluZCB2YWxpZCBsb2NhbCB3b3JsZCBjb25maWd1cmF0aW9uOicsXG4gICAgICAgICAgY29uZmlnRXJyb3JcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ0luaXRpYWxpemluZyB3b3JsZCcpO1xuXG4gIGxldCB3b3JsZDogV29ybGQ7XG4gIGlmICh2ZXJjZWxFbnZWYXJzKSB7XG4gICAgLy8gQnVpbGQgdGhlIFZlcmNlbCB3b3JsZCBkaXJlY3RseSBmcm9tIHRoZSBpbmZlcnJlZCBjb25maWcsIHJhdGhlciB0aGFuXG4gICAgLy8gcmVseWluZyBvbiBjcmVhdGVXb3JsZCgpIHJlYWRpbmcgcHJvY2Vzcy5lbnYuXG4gICAgd29ybGQgPSBjcmVhdGVWZXJjZWxDbGlXb3JsZCh7XG4gICAgICB0b2tlbjogdmVyY2VsRW52VmFycy50b2tlbixcbiAgICAgIHByb2plY3RDb25maWc6IHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IHZlcmNlbEVudlZhcnMuZW52aXJvbm1lbnQsXG4gICAgICAgIHByb2plY3RJZDogdmVyY2VsRW52VmFycy5wcm9qZWN0SWQsXG4gICAgICAgIHByb2plY3ROYW1lOiB2ZXJjZWxFbnZWYXJzLnByb2plY3ROYW1lLFxuICAgICAgICB0ZWFtSWQ6IHZlcmNlbEVudlZhcnMudGVhbUlkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChcbiAgICBmbGFncy5iYWNrZW5kID09PSAnbG9jYWwnIHx8XG4gICAgZmxhZ3MuYmFja2VuZCA9PT0gJ0B3b3JrZmxvdy93b3JsZC1sb2NhbCdcbiAgKSB7XG4gICAgd29ybGQgPSBjcmVhdGVMb2NhbENsaVdvcmxkKCk7XG4gIH0gZWxzZSB7XG4gICAgd29ybGQgPSBhd2FpdCBjcmVhdGVEeW5hbWljQ2xpV29ybGQoZmxhZ3MuYmFja2VuZCk7XG4gIH1cblxuICAvLyBTdG9yZSBpbiB0aGUgZ2xvYmFsIGNhY2hlIHNvIEJhc2VDb21tYW5kLmZpbmFsbHkoKSBjYW4gZmluZCBhbmQgY2xvc2UgaXQuXG4gIHNldFdvcmxkKHdvcmxkKTtcbiAgcmV0dXJuIHdvcmxkO1xufTtcblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSB3b3JsZCBmcm9tIGl0cyBwYWNrYWdlIChlLmcuIGBAd29ya2Zsb3cvd29ybGQtcG9zdGdyZXNgIG9yIGFcbiAqIGNvbW11bml0eSB3b3JsZCksIHJlc29sdmVkIGZyb20gdGhlIHVzZXIncyBwcm9qZWN0IGRpcmVjdG9yeS4gVGhlIHZlcmNlbFxuICogYW5kIGxvY2FsIHdvcmxkcyBhcmUgZGlyZWN0IGRlcGVuZGVuY2llcyBhbmQgY29uc3RydWN0ZWQgZXhwbGljaXRseSBhYm92ZTtcbiAqIGV2ZXJ5IG90aGVyIGJhY2tlbmQgaXMgbG9hZGVkIGR5bmFtaWNhbGx5IHNvIHRoaXJkLXBhcnR5IHdvcmxkcyBrZWVwXG4gKiB3b3JraW5nIHdpdGhvdXQgYmVpbmcgZGVwZW5kZW5jaWVzIG9mIHRoZSBDTEkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUR5bmFtaWNDbGlXb3JsZChiYWNrZW5kSWQ6IHN0cmluZyk6IFByb21pc2U8V29ybGQ+IHtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgbGV0IHdvcmxkUGF0aDogc3RyaW5nO1xuICB0cnkge1xuICAgIHdvcmxkUGF0aCA9IGNyZWF0ZVJlcXVpcmUoam9pbihjd2QsICdwYWNrYWdlLmpzb24nKSkucmVzb2x2ZShiYWNrZW5kSWQsIHtcbiAgICAgIHBhdGhzOiBbY3dkXSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENvdWxkIG5vdCByZXNvbHZlIHdvcmtmbG93IGJhY2tlbmQgcGFja2FnZSBcIiR7YmFja2VuZElkfVwiIGZyb20gXCIke2N3ZH1cIi4gYCArXG4gICAgICAgICdNYWtlIHN1cmUgdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGluIHlvdXIgcHJvamVjdC4nXG4gICAgKTtcbiAgfVxuICBjb25zdCBtb2QgPSAoYXdhaXQgaW1wb3J0KHBhdGhUb0ZpbGVVUkwod29ybGRQYXRoKS5ocmVmKSkgYXMge1xuICAgIGNyZWF0ZVdvcmxkPzogKCkgPT4gV29ybGQgfCBQcm9taXNlPFdvcmxkPjtcbiAgICBkZWZhdWx0PzogeyBjcmVhdGVXb3JsZD86ICgpID0+IFdvcmxkIHwgUHJvbWlzZTxXb3JsZD4gfTtcbiAgfTtcbiAgLy8gRmFsbCBiYWNrIHRvIGRlZmF1bHQuY3JlYXRlV29ybGQgZm9yIENKUyBwYWNrYWdlcyB3aG9zZSBuYW1lZCBleHBvcnRzXG4gIC8vIGFyZW4ndCBzdGF0aWNhbGx5IGRldGVjdGFibGUgYnkgY2pzLW1vZHVsZS1sZXhlci5cbiAgY29uc3QgY3JlYXRlV29ybGRGbiA9IG1vZC5jcmVhdGVXb3JsZCA/PyBtb2QuZGVmYXVsdD8uY3JlYXRlV29ybGQ7XG4gIGlmICh0eXBlb2YgY3JlYXRlV29ybGRGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBXb3JrZmxvdyBiYWNrZW5kIHBhY2thZ2UgXCIke2JhY2tlbmRJZH1cIiBkb2VzIG5vdCBleHBvcnQgY3JlYXRlV29ybGQoKS5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlV29ybGRGbigpO1xufVxuIl19
|
|
@@ -56,4 +56,4 @@ export const streamToConsole = async (stream, id, opts) => {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
|
-
//# sourceMappingURL=
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHMUM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFDbEMsTUFBK0IsRUFDL0IsRUFBVSxFQUNWLElBQXVCLEVBQ3ZCLEVBQUU7SUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEMsbUVBQW1FO0lBQ25FLHlFQUF5RTtJQUN6RSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLENBQUM7UUFDSCxTQUFTLENBQUM7WUFDUixNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsTUFBTTtZQUNSLENBQUM7WUFFRCxvQkFBb0I7WUFDcEIsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDMUMsU0FBUztZQUNYLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDZCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JELENBQUM7aUJBQU0sQ0FBQztnQkFDTiwrQkFBK0I7Z0JBQy9CLE1BQU0sSUFBSSxHQUNSLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdEMsVUFBVSxFQUFFLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsaUZBQWlGO1FBQ2pGLElBQUksR0FBRyxZQUFZLEtBQUssSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDdEUsTUFBTSxDQUFDLEtBQUssQ0FDVixrRkFBa0YsQ0FDbkYsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDMUIsS0FBSyxFQUFFLGlDQUFpQyxFQUFFLEVBQUU7Z0JBQzVDLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ3JCLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztZQUFTLENBQUM7UUFDVCxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDRDQUE0QztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2NvbmZpZy9sb2cuanMnO1xuaW1wb3J0IHR5cGUgeyBJbnNwZWN0Q0xJT3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy90eXBlcy5qcyc7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgZnJvbSBhIGRlc2VyaWFsaXplZCBzdHJlYW0gYW5kIHdyaXRlIHRoZSBvdXRwdXQgdG8gdGhlIGNvbnNvbGUuXG4gKiBJZiB0aGUgc3RyZWFtIGlzIG5vdCBjbG9zZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCB0aGUgc3RyZWFtIGlzIGNsb3NlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmVhbVRvQ29uc29sZSA9IGFzeW5jIChcbiAgc3RyZWFtOiBSZWFkYWJsZVN0cmVhbTx1bmtub3duPixcbiAgaWQ6IHN0cmluZyxcbiAgb3B0czogSW5zcGVjdENMSU9wdGlvbnNcbikgPT4ge1xuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIC8vIEtlZXAgdGhlIE5vZGUuanMgZXZlbnQgbG9vcCBhbGl2ZSB3aGlsZSB3ZSBhd2FpdCBzdHJlYW0gY2xvc3VyZS5cbiAgLy8gUGVuZGluZyBQcm9taXNlcyBhbG9uZSBkbyBub3Qga2VlcCB0aGUgcHJvY2VzcyBhbGl2ZSB3aGVuIHVzaW5nIG9jbGlmLlxuICBjb25zdCBrZWVwQWxpdmUgPSBzZXRJbnRlcnZhbCgoKSA9PiB7fSwgNjBfMDAwKTtcbiAgbGV0IGNodW5rSW5kZXggPSAwO1xuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBlbXB0eSBjaHVua3NcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5qc29uKSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1cXG5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvcm1hdCB0aGUgdmFsdWUgZm9yIGRpc3BsYXlcbiAgICAgICAgY29uc3QgdGV4dCA9XG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpO1xuICAgICAgICBsb2dnZXIubG9nKGBbJHtjaHVua0luZGV4fV0gJHt0ZXh0fWApO1xuICAgICAgICBjaHVua0luZGV4Kys7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm92aWRlIGEgY2xlYXIgbWVzc2FnZSB3aGVuIHRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCAtLWRlY3J5cHQgd2Fzbid0IHVzZWRcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ25vIGVuY3J5cHRpb24ga2V5JykpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgJ1RoaXMgc3RyZWFtIGNvbnRhaW5zIGVuY3J5cHRlZCBkYXRhLiBVc2UgLS1kZWNyeXB0IC0tcnVuPTxydW4taWQ+IHRvIGRlY3J5cHQgaXQuJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHJlYWQgc3RyZWFtIHdpdGggSUQgJHtpZH06YCwgZXJyKTtcbiAgICB9XG4gICAgaWYgKG9wdHMuanNvbikge1xuICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXJyb3I6IGBGYWlsZWQgdG8gcmVhZCBzdHJlYW0gd2l0aCBJRCAke2lkfWAsXG4gICAgICAgIGRldGFpbHM6IFN0cmluZyhlcnIpLFxuICAgICAgfSk7XG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgJHtqc29ufVxcbmApO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhckludGVydmFsKGtlZXBBbGl2ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yZSBjYW5jZWxsYXRpb24gZXJyb3JzIGR1cmluZyBjbGVhbnVwXG4gICAgfVxuICB9XG59O1xuIl19
|
|
@@ -105,4 +105,4 @@ export const formatISODate = (date) => {
|
|
|
105
105
|
// Replace T with space and remove Z
|
|
106
106
|
return isoString.replace('T', ' ').replace('Z', '');
|
|
107
107
|
};
|
|
108
|
-
//# sourceMappingURL=
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWwtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luc3BlY3QvdGVybWluYWwtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxHQUFZLEVBQUU7SUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FDUCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQjtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVk7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUztRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7UUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVztRQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVM7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQ3JCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxHQUFZLEVBQUU7SUFDekMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUMzQyxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQVcsRUFBRTtJQUMzQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQztBQUN4RSxDQUFDLENBQUM7QUFjRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUNoQyxhQUFxQixFQUNyQixRQUFpQixFQUNqQixhQUFzQixJQUFJLEVB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TUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBVSxFQUFVLEVBQUU7SUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLG9DQUFvQztJQUNwQyxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVdGlsaXRpZXMgZm9yIHRlcm1pbmFsIGRpc3BsYXkgYW5kIGVudmlyb25tZW50IGRldGVjdGlvblxuICovXG5cbi8qKlxuICogQ2hlY2sgaWYgcnVubmluZyBpbiBDSSBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgY29uc3QgaXNDSSA9ICgpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuICEhKFxuICAgIHByb2Nlc3MuZW52LkNJIHx8XG4gICAgcHJvY2Vzcy5lbnYuQ09OVElOVU9VU19JTlRFR1JBVElPTiB8fFxuICAgIHByb2Nlc3MuZW52LkJVSUxEX05VTUJFUiB8fFxuICAgIHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT05TIHx8XG4gICAgcHJvY2Vzcy5lbnYuR0lUTEFCX0NJIHx8XG4gICAgcHJvY2Vzcy5lbnYuQ0lSQ0xFQ0kgfHxcbiAgICBwcm9jZXNzLmVudi5UUkFWSVMgfHxcbiAgICBwcm9jZXNzLmVudi5KRU5LSU5TX1VSTCB8fFxuICAgIHByb2Nlc3MuZW52LkJVSUxES0lURSB8fFxuICAgIHByb2Nlc3MuZW52LlRGX0JVSUxEXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHJ1bm5pbmcgaW4gYW4gaW50ZXJhY3RpdmUgdGVybWluYWxcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW50ZXJhY3RpdmUgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiAhaXNDSSgpICYmICEhcHJvY2Vzcy5zdGRvdXQuaXNUVFk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCB0ZXJtaW5hbCB3aWR0aFxuICovXG5leHBvcnQgY29uc3QgZ2V0VGVybWluYWxXaWR0aCA9ICgpOiBudW1iZXIgPT4ge1xuICByZXR1cm4gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MDsgLy8gRGVmYXVsdCB0byA4MCBpZiBub3QgYXZhaWxhYmxlXG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkaXNwbGF5IHNldHRpbmdzIGJhc2VkIG9uIHRlcm1pbmFsIHdpZHRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcGxheVNldHRpbmdzIHtcbiAgc2hvd1JlbGF0aXZlRGF0ZXM6IGJvb2xlYW47XG4gIGRhdGFGaWVsZFdpZHRoOiBudW1iZXI7XG4gIGFiYnJldmlhdGVTdGF0dXM6IGJvb2xlYW47XG4gIG5hbWVzVHJ1bmNhdGVMZW5ndGg6IG51bWJlcjtcbiAgdHJ1bmNhdGVJZHNUb0xhc3RDaGFyczogYm9vbGVhbjtcbiAgaGlkZUNvbXBsZXRlZEF0OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheVNldHRpbmdzID0gKFxuICB0ZXJtaW5hbFdpZHRoOiBudW1iZXIsXG4gIHdpdGhEYXRhOiBib29sZWFuLFxuICBpc1J1blRhYmxlOiBib29sZWFuID0gdHJ1ZVxuKTogRGlzcGxheVNldHRpbmdzID0+IHtcbiAgLy8gQmFzZSB3aWR0aHMgZnJvbSBhY3R1YWwgbWVhc3VyZW1lbnRzICh3aXRob3V0IGRhdGEgZmllbGRzKVxuICBjb25zdCBiYXNlV2lkdGggPSAoaXNSdW5UYWJsZSA/IDE0MCA6IDE3MCkgKyAod2l0aERhdGEgPyAzMiA6IDApO1xuXG4gIC8vIEluaXRpYWxpemUgd2l0aCBkZWZhdWx0c1xuICBjb25zdCBzZXR0aW5nczogRGlzcGxheVNldHRpbmdzID0ge1xuICAgIHNob3dSZWxhdGl2ZURhdGVzOiAhd2l0aERhdGEsIC8vIERpc2FibGVkIGJ5IGRlZmF1bHQgd2hlbiB3aXRoRGF0YSBpcyB0cnVlXG4gICAgZGF0YUZpZWxkV2lkdGg6IDE1LFxuICAgIGFiYnJldmlhdGVTdGF0dXM6IGZhbHNlLFxuICAgIG5hbWVzVHJ1bmNhdGVMZW5ndGg6IDQwLFxuICAgIHRydW5jYXRlSWRzVG9MYXN0Q2hhcnM6IGZhbHNlLFxuICAgIGhpZGVDb21wbGV0ZWRBdDogZmFsc2UsXG4gIH07XG5cbiAgLy8gSWYgdGVybWluYWwgd2lkdGggaXMgc3VmZmljaWVudCwgcmV0dXJuIGRlZmF1bHRzXG4gIGlmICh0ZXJtaW5hbFdpZHRoID49IGJhc2VXaWR0aCkge1xuICAgIHJldHVybiBzZXR0aW5ncztcbiAgfVxuXG4gIC8vIFByb2dyZXNzaXZlIGRlZ3JhZGF0aW9uIGF2ZW51ZXNcbiAgbGV0IGF2YWlsYWJsZVdpZHRoID0gYmFzZVdpZHRoO1xuXG4gIC8vIERpc2FibGUgcmVsYXRpdmUgZGF0ZXMgKHNhdmUgMzQgY2hhcmFjdGVycylcbiAgaWYgKHNldHRpbmdzLnNob3dSZWxhdGl2ZURhdGVzICYmIHRlcm1pbmFsV2lkdGggPCBhdmFpbGFibGVXaWR0aCkge1xuICAgIHNldHRpbmdzLnNob3dSZWxhdGl2ZURhdGVzID0gZmFsc2U7XG4gICAgYXZhaWxhYmxlV2lkdGggLT0gMzQ7XG4gIH1cblxuICAvLyBSZWR1Y2UgZGF0YSBmaWVsZCB3aWR0aCBpZiB3aXRoRGF0YSBpcyBzZXQgKHNhdmUgMjAgY2hhcmFjdGVycyBmcm9tIDIqMTApXG4gIGlmIChcbiAgICB3aXRoRGF0YSAmJlxuICAgIHNldHRpbmdzLmRhdGFGaWVsZFdpZHRoID09PSAxNSAmJlxuICAgIHRlcm1pbmFsV2lkdGggPCBhdmFpbGFibGVXaWR0aFxuICApIHtcbiAgICBzZXR0aW5ncy5kYXRhRmllbGRXaWR0aCA9IDU7XG4gICAgYXZhaWxhYmxlV2lkdGggLT0gMjA7XG4gIH1cblxuICAvLyBBYmJyZXZpYXRlIHN0YXR1cyBhbmQgc2V0IGhlYWRlciB0byBcIlNcIiAoc2F2ZSA4IGNoYXJhY3RlcnMpXG4gIGlmICh0ZXJtaW5hbFdpZHRoIDwgYXZhaWxhYmxlV2lkdGgpIHtcbiAgICBzZXR0aW5ncy5hYmJyZXZpYXRlU3RhdHVzID0gdHJ1ZTtcbiAgICBhdmFpbGFibGVXaWR0aCAtPSA4O1xuICB9XG5cbiAgLy8gVHJpbSBuYW1lcyBmcm9tIDQwIHRvIDIwIGNoYXJhY3RlcnMgKHNhdmUgMjAgY2hhcmFjdGVycylcbiAgaWYgKHNldHRpbmdzLm5hbWVzVHJ1bmNhdGVMZW5ndGggPT09IDQwICYmIHRlcm1pbmFsV2lkdGggPCBhdmFpbGFibGVXaWR0aCkge1xuICAgIHNldHRpbmdzLm5hbWVzVHJ1bmNhdGVMZW5ndGggPSAyMDtcbiAgICBhdmFpbGFibGVXaWR0aCAtPSAyMDtcbiAgfVxuXG4gIC8vIEhpZGUgY29tcGxldGVkQXQgY29sdW1uIChzYXZlIDIzIGNoYXJhY3RlcnMpXG4gIGlmICh0ZXJtaW5hbFdpZHRoIDwgYXZhaWxhYmxlV2lkdGgpIHtcbiAgICBzZXR0aW5ncy5oaWRlQ29tcGxldGVkQXQgPSB0cnVlO1xuICAgIGF2YWlsYWJsZVdpZHRoIC09IDIzO1xuICB9XG5cbiAgLy8gVHJpbSBJRHMgdG8gbGFzdCA0IGNoYXJhY3RlcnNcbiAgaWYgKHRlcm1pbmFsV2lkdGggPCBhdmFpbGFibGVXaWR0aCkge1xuICAgIHNldHRpbmdzLnRydW5jYXRlSWRzVG9MYXN0Q2hhcnMgPSB0cnVlO1xuICAgIGF2YWlsYWJsZVdpZHRoIC09IGlzUnVuVGFibGUgPyAyNCA6IDQ4O1xuICB9XG5cbiAgcmV0dXJuIHNldHRpbmdzO1xufTtcblxuLyoqXG4gKiBGb3JtYXQgc3RhdHVzIHdpdGggb3B0aW9uYWwgYWJicmV2aWF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRTdGF0dXMgPSAoc3RhdHVzOiBzdHJpbmcsIGFiYnJldmlhdGVkOiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgaWYgKCFhYmJyZXZpYXRlZCkge1xuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICAvLyBBYmJyZXZpYXRlIHRvIGZpcnN0IGxldHRlclxuICBjb25zdCBhYmJyZXZNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgcnVubmluZzogJ1InLFxuICAgIGNvbXBsZXRlZDogJ0MnLFxuICAgIGZhaWxlZDogJ0YnLFxuICAgIGNhbmNlbGxlZDogJ1gnLFxuICAgIHBlbmRpbmc6ICdQJyxcbiAgfTtcblxuICByZXR1cm4gYWJicmV2TWFwW3N0YXR1cy50b0xvd2VyQ2FzZSgpXSB8fCBzdGF0dXMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIEZvcm1hdCBJU08gZGF0ZSB3aXRob3V0IFQgYW5kIFogY2hhcmFjdGVyc1xuICovXG5leHBvcnQgY29uc3QgZm9ybWF0SVNPRGF0ZSA9IChkYXRlOiBEYXRlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgaXNvU3RyaW5nID0gZGF0ZS50b0lTT1N0cmluZygpO1xuICAvLyBSZXBsYWNlIFQgd2l0aCBzcGFjZSBhbmQgcmVtb3ZlIFpcbiAgcmV0dXJuIGlzb1N0cmluZy5yZXBsYWNlKCdUJywgJyAnKS5yZXBsYWNlKCdaJywgJycpO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a `--since`/`--until` value: either a relative duration (`30m`,
|
|
3
|
+
* `12h`, `7d`, `2w`, interpreted as "that long ago") or an absolute
|
|
4
|
+
* timestamp accepted by `Date`.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseTimeInput(value: string, flagName: string): Date;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve `--since`/`--until` flags into an explicit listing window for the
|
|
9
|
+
* analytics runs API, or undefined when neither flag was given (the backend
|
|
10
|
+
* then applies its default window). Windows older than the plan's
|
|
11
|
+
* observability lookback are rejected by the backend with
|
|
12
|
+
* `observability-upgrade-required`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveTimeWindow(opts: {
|
|
15
|
+
since?: string;
|
|
16
|
+
until?: string;
|
|
17
|
+
}): {
|
|
18
|
+
startTime: string;
|
|
19
|
+
endTime: string;
|
|
20
|
+
} | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Extract the plan observability-window start from a paginated analytics
|
|
23
|
+
* response, for widening a defaulted (recent-window) listing to the whole
|
|
24
|
+
* window the plan allows. Returns undefined when the response carries no
|
|
25
|
+
* page metadata (e.g. non-Vercel backends).
|
|
26
|
+
*/
|
|
27
|
+
export declare function planWindowStartFromResponse(result: unknown): string | undefined;
|
|
28
|
+
//# sourceMappingURL=time-window.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-window.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/time-window.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAapE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAarD;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,OAAO,GACd,MAAM,GAAG,SAAS,CAMpB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const DURATION_UNIT_MS = {
|
|
2
|
+
m: 60_000,
|
|
3
|
+
h: 3_600_000,
|
|
4
|
+
d: 86_400_000,
|
|
5
|
+
w: 604_800_000,
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Parse a `--since`/`--until` value: either a relative duration (`30m`,
|
|
9
|
+
* `12h`, `7d`, `2w`, interpreted as "that long ago") or an absolute
|
|
10
|
+
* timestamp accepted by `Date`.
|
|
11
|
+
*/
|
|
12
|
+
export function parseTimeInput(value, flagName) {
|
|
13
|
+
const duration = /^(\d+)(m|h|d|w)$/.exec(value.trim());
|
|
14
|
+
if (duration) {
|
|
15
|
+
const [, amount, unit] = duration;
|
|
16
|
+
return new Date(Date.now() - Number(amount) * DURATION_UNIT_MS[unit]);
|
|
17
|
+
}
|
|
18
|
+
const absolute = new Date(value);
|
|
19
|
+
if (!Number.isNaN(absolute.getTime())) {
|
|
20
|
+
return absolute;
|
|
21
|
+
}
|
|
22
|
+
throw new Error(`Invalid --${flagName} value "${value}". Use a relative duration (30m, 12h, 7d, 2w) or a timestamp (2026-07-01T00:00:00Z).`);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolve `--since`/`--until` flags into an explicit listing window for the
|
|
26
|
+
* analytics runs API, or undefined when neither flag was given (the backend
|
|
27
|
+
* then applies its default window). Windows older than the plan's
|
|
28
|
+
* observability lookback are rejected by the backend with
|
|
29
|
+
* `observability-upgrade-required`.
|
|
30
|
+
*/
|
|
31
|
+
export function resolveTimeWindow(opts) {
|
|
32
|
+
if (!opts.since && !opts.until)
|
|
33
|
+
return undefined;
|
|
34
|
+
if (!opts.since) {
|
|
35
|
+
throw new Error('--until requires --since.');
|
|
36
|
+
}
|
|
37
|
+
const start = parseTimeInput(opts.since, 'since');
|
|
38
|
+
const end = opts.until
|
|
39
|
+
? parseTimeInput(opts.until, 'until')
|
|
40
|
+
: new Date(Date.now());
|
|
41
|
+
if (start.getTime() >= end.getTime()) {
|
|
42
|
+
throw new Error('--since must be earlier than --until.');
|
|
43
|
+
}
|
|
44
|
+
return { startTime: start.toISOString(), endTime: end.toISOString() };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Extract the plan observability-window start from a paginated analytics
|
|
48
|
+
* response, for widening a defaulted (recent-window) listing to the whole
|
|
49
|
+
* window the plan allows. Returns undefined when the response carries no
|
|
50
|
+
* page metadata (e.g. non-Vercel backends).
|
|
51
|
+
*/
|
|
52
|
+
export function planWindowStartFromResponse(result) {
|
|
53
|
+
if (typeof result !== 'object' || result === null)
|
|
54
|
+
return undefined;
|
|
55
|
+
const pageInfo = result.pageInfo;
|
|
56
|
+
if (!pageInfo?.currentWindowStart)
|
|
57
|
+
return undefined;
|
|
58
|
+
const start = new Date(pageInfo.currentWindowStart);
|
|
59
|
+
return Number.isNaN(start.getTime()) ? undefined : start.toISOString();
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS13aW5kb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luc3BlY3QvdGltZS13aW5kb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxnQkFBZ0IsR0FBMkI7SUFDL0MsQ0FBQyxFQUFFLE1BQU07SUFDVCxDQUFDLEVBQUUsU0FBUztJQUNaLENBQUMsRUFBRSxVQUFVO0lBQ2IsQ0FBQyxFQUFFLFdBQVc7Q0FDZixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYSxFQUFFLFFBQWdCO0lBQzVELE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RCxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUNsQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYixhQUFhLFFBQVEsV0FBVyxLQUFLLHNGQUFzRixDQUM1SCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUdqQztJQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUs7UUFDcEIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztRQUNyQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxNQUFlO0lBRWYsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNwRSxNQUFNLFFBQVEsR0FBSSxNQUEyQyxDQUFDLFFBQVEsQ0FBQztJQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFFLGtCQUFrQjtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3BELE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5hbHl0aWNzUGFnZUluZm8gfSBmcm9tICcuL3BhZ2luYXRpb24uanMnO1xuXG5jb25zdCBEVVJBVElPTl9VTklUX01TOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICBtOiA2MF8wMDAsXG4gIGg6IDNfNjAwXzAwMCxcbiAgZDogODZfNDAwXzAwMCxcbiAgdzogNjA0XzgwMF8wMDAsXG59O1xuXG4vKipcbiAqIFBhcnNlIGEgYC0tc2luY2VgL2AtLXVudGlsYCB2YWx1ZTogZWl0aGVyIGEgcmVsYXRpdmUgZHVyYXRpb24gKGAzMG1gLFxuICogYDEyaGAsIGA3ZGAsIGAyd2AsIGludGVycHJldGVkIGFzIFwidGhhdCBsb25nIGFnb1wiKSBvciBhbiBhYnNvbHV0ZVxuICogdGltZXN0YW1wIGFjY2VwdGVkIGJ5IGBEYXRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGltZUlucHV0KHZhbHVlOiBzdHJpbmcsIGZsYWdOYW1lOiBzdHJpbmcpOiBEYXRlIHtcbiAgY29uc3QgZHVyYXRpb24gPSAvXihcXGQrKShtfGh8ZHx3KSQvLmV4ZWModmFsdWUudHJpbSgpKTtcbiAgaWYgKGR1cmF0aW9uKSB7XG4gICAgY29uc3QgWywgYW1vdW50LCB1bml0XSA9IGR1cmF0aW9uO1xuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gTnVtYmVyKGFtb3VudCkgKiBEVVJBVElPTl9VTklUX01TW3VuaXRdKTtcbiAgfVxuICBjb25zdCBhYnNvbHV0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgaWYgKCFOdW1iZXIuaXNOYU4oYWJzb2x1dGUuZ2V0VGltZSgpKSkge1xuICAgIHJldHVybiBhYnNvbHV0ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYEludmFsaWQgLS0ke2ZsYWdOYW1lfSB2YWx1ZSBcIiR7dmFsdWV9XCIuIFVzZSBhIHJlbGF0aXZlIGR1cmF0aW9uICgzMG0sIDEyaCwgN2QsIDJ3KSBvciBhIHRpbWVzdGFtcCAoMjAyNi0wNy0wMVQwMDowMDowMFopLmBcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGAtLXNpbmNlYC9gLS11bnRpbGAgZmxhZ3MgaW50byBhbiBleHBsaWNpdCBsaXN0aW5nIHdpbmRvdyBmb3IgdGhlXG4gKiBhbmFseXRpY3MgcnVucyBBUEksIG9yIHVuZGVmaW5lZCB3aGVuIG5laXRoZXIgZmxhZyB3YXMgZ2l2ZW4gKHRoZSBiYWNrZW5kXG4gKiB0aGVuIGFwcGxpZXMgaXRzIGRlZmF1bHQgd2luZG93KS4gV2luZG93cyBvbGRlciB0aGFuIHRoZSBwbGFuJ3NcbiAqIG9ic2VydmFiaWxpdHkgbG9va2JhY2sgYXJlIHJlamVjdGVkIGJ5IHRoZSBiYWNrZW5kIHdpdGhcbiAqIGBvYnNlcnZhYmlsaXR5LXVwZ3JhZGUtcmVxdWlyZWRgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRpbWVXaW5kb3cob3B0czoge1xuICBzaW5jZT86IHN0cmluZztcbiAgdW50aWw/OiBzdHJpbmc7XG59KTogeyBzdGFydFRpbWU6IHN0cmluZzsgZW5kVGltZTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdHMuc2luY2UgJiYgIW9wdHMudW50aWwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghb3B0cy5zaW5jZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignLS11bnRpbCByZXF1aXJlcyAtLXNpbmNlLicpO1xuICB9XG4gIGNvbnN0IHN0YXJ0ID0gcGFyc2VUaW1lSW5wdXQob3B0cy5zaW5jZSwgJ3NpbmNlJyk7XG4gIGNvbnN0IGVuZCA9IG9wdHMudW50aWxcbiAgICA/IHBhcnNlVGltZUlucHV0KG9wdHMudW50aWwsICd1bnRpbCcpXG4gICAgOiBuZXcgRGF0ZShEYXRlLm5vdygpKTtcbiAgaWYgKHN0YXJ0LmdldFRpbWUoKSA+PSBlbmQuZ2V0VGltZSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCctLXNpbmNlIG11c3QgYmUgZWFybGllciB0aGFuIC0tdW50aWwuJyk7XG4gIH1cbiAgcmV0dXJuIHsgc3RhcnRUaW1lOiBzdGFydC50b0lTT1N0cmluZygpLCBlbmRUaW1lOiBlbmQudG9JU09TdHJpbmcoKSB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHBsYW4gb2JzZXJ2YWJpbGl0eS13aW5kb3cgc3RhcnQgZnJvbSBhIHBhZ2luYXRlZCBhbmFseXRpY3NcbiAqIHJlc3BvbnNlLCBmb3Igd2lkZW5pbmcgYSBkZWZhdWx0ZWQgKHJlY2VudC13aW5kb3cpIGxpc3RpbmcgdG8gdGhlIHdob2xlXG4gKiB3aW5kb3cgdGhlIHBsYW4gYWxsb3dzLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSByZXNwb25zZSBjYXJyaWVzIG5vXG4gKiBwYWdlIG1ldGFkYXRhIChlLmcuIG5vbi1WZXJjZWwgYmFja2VuZHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhbldpbmRvd1N0YXJ0RnJvbVJlc3BvbnNlKFxuICByZXN1bHQ6IHVua25vd25cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0JyB8fCByZXN1bHQgPT09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHBhZ2VJbmZvID0gKHJlc3VsdCBhcyB7IHBhZ2VJbmZvPzogQW5hbHl0aWNzUGFnZUluZm8gfSkucGFnZUluZm87XG4gIGlmICghcGFnZUluZm8/LmN1cnJlbnRXaW5kb3dTdGFydCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZShwYWdlSW5mby5jdXJyZW50V2luZG93U3RhcnQpO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKHN0YXJ0LmdldFRpbWUoKSkgPyB1bmRlZmluZWQgOiBzdGFydC50b0lTT1N0cmluZygpO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time-window.test.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/time-window.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { parseTimeInput, planWindowStartFromResponse, resolveTimeWindow, } from './time-window.js';
|
|
3
|
+
const NOW = new Date('2026-07-07T12:00:00.000Z');
|
|
4
|
+
afterEach(() => {
|
|
5
|
+
vi.restoreAllMocks();
|
|
6
|
+
});
|
|
7
|
+
describe('parseTimeInput', () => {
|
|
8
|
+
it('parses relative durations as that long ago', () => {
|
|
9
|
+
vi.spyOn(Date, 'now').mockReturnValue(NOW.getTime());
|
|
10
|
+
expect(parseTimeInput('30m', 'since').toISOString()).toBe('2026-07-07T11:30:00.000Z');
|
|
11
|
+
expect(parseTimeInput('12h', 'since').toISOString()).toBe('2026-07-07T00:00:00.000Z');
|
|
12
|
+
expect(parseTimeInput('7d', 'since').toISOString()).toBe('2026-06-30T12:00:00.000Z');
|
|
13
|
+
expect(parseTimeInput('2w', 'since').toISOString()).toBe('2026-06-23T12:00:00.000Z');
|
|
14
|
+
});
|
|
15
|
+
it('parses absolute timestamps', () => {
|
|
16
|
+
expect(parseTimeInput('2026-07-01T00:00:00Z', 'since').toISOString()).toBe('2026-07-01T00:00:00.000Z');
|
|
17
|
+
});
|
|
18
|
+
it('rejects invalid values with the flag name in the error', () => {
|
|
19
|
+
expect(() => parseTimeInput('yesterday-ish', 'since')).toThrow('--since');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('resolveTimeWindow', () => {
|
|
23
|
+
it('returns undefined when neither flag is given', () => {
|
|
24
|
+
expect(resolveTimeWindow({})).toBeUndefined();
|
|
25
|
+
});
|
|
26
|
+
it('defaults the end to now when only --since is given', () => {
|
|
27
|
+
vi.spyOn(Date, 'now').mockReturnValue(NOW.getTime());
|
|
28
|
+
expect(resolveTimeWindow({ since: '24h' })).toEqual({
|
|
29
|
+
startTime: '2026-07-06T12:00:00.000Z',
|
|
30
|
+
endTime: '2026-07-07T12:00:00.000Z',
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
it('rejects --until without --since', () => {
|
|
34
|
+
expect(() => resolveTimeWindow({ until: '1h' })).toThrow('--until requires --since');
|
|
35
|
+
});
|
|
36
|
+
it('rejects inverted windows', () => {
|
|
37
|
+
expect(() => resolveTimeWindow({ since: '1h', until: '2h' })).toThrow('--since must be earlier than --until');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('planWindowStartFromResponse', () => {
|
|
41
|
+
it('extracts the plan window start from page metadata', () => {
|
|
42
|
+
expect(planWindowStartFromResponse({
|
|
43
|
+
data: [],
|
|
44
|
+
pageInfo: {
|
|
45
|
+
currentLookbackDays: 30,
|
|
46
|
+
maxLookbackDays: 30,
|
|
47
|
+
currentWindowStart: '2026-06-07T12:00:00.000Z',
|
|
48
|
+
maxWindowStart: '2026-06-07T12:00:00.000Z',
|
|
49
|
+
upgradeAvailable: false,
|
|
50
|
+
},
|
|
51
|
+
})).toBe('2026-06-07T12:00:00.000Z');
|
|
52
|
+
});
|
|
53
|
+
it('returns undefined without page metadata', () => {
|
|
54
|
+
expect(planWindowStartFromResponse({ data: [] })).toBeUndefined();
|
|
55
|
+
expect(planWindowStartFromResponse(null)).toBeUndefined();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS13aW5kb3cudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaW5zcGVjdC90aW1lLXdpbmRvdy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdELE9BQU8sRUFDTCxjQUFjLEVBQ2QsMkJBQTJCLEVBQzNCLGlCQUFpQixHQUNsQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFakQsU0FBUyxDQUFDLEdBQUcsRUFBRTtJQUNiLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7SUFDOUIsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtRQUNwRCxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3ZELDBCQUEwQixDQUMzQixDQUFDO1FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3ZELDBCQUEwQixDQUMzQixDQUFDO1FBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RELDBCQUEwQixDQUMzQixDQUFDO1FBQ0YsTUFBTSxDQUFDLGNB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LENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJFYWNoLCBkZXNjcmliZSwgZXhwZWN0LCBpdCwgdmkgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHtcbiAgcGFyc2VUaW1lSW5wdXQsXG4gIHBsYW5XaW5kb3dTdGFydEZyb21SZXNwb25zZSxcbiAgcmVzb2x2ZVRpbWVXaW5kb3csXG59IGZyb20gJy4vdGltZS13aW5kb3cuanMnO1xuXG5jb25zdCBOT1cgPSBuZXcgRGF0ZSgnMjAyNi0wNy0wN1QxMjowMDowMC4wMDBaJyk7XG5cbmFmdGVyRWFjaCgoKSA9PiB7XG4gIHZpLnJlc3RvcmVBbGxNb2NrcygpO1xufSk7XG5cbmRlc2NyaWJlKCdwYXJzZVRpbWVJbnB1dCcsICgpID0+IHtcbiAgaXQoJ3BhcnNlcyByZWxhdGl2ZSBkdXJhdGlvbnMgYXMgdGhhdCBsb25nIGFnbycsICgpID0+IHtcbiAgICB2aS5zcHlPbihEYXRlLCAnbm93JykubW9ja1JldHVyblZhbHVlKE5PVy5nZXRUaW1lKCkpO1xuICAgIGV4cGVjdChwYXJzZVRpbWVJbnB1dCgnMzBtJywgJ3NpbmNlJykudG9JU09TdHJpbmcoKSkudG9CZShcbiAgICAgICcyMDI2LTA3LTA3VDExOjMwOjAwLjAwMFonXG4gICAgKTtcbiAgICBleHBlY3QocGFyc2VUaW1lSW5wdXQoJzEyaCcsICdzaW5jZScpLnRvSVNPU3RyaW5nKCkpLnRvQmUoXG4gICAgICAnMjAyNi0wNy0wN1QwMDowMDowMC4wMDBaJ1xuICAgICk7XG4gICAgZXhwZWN0KHBhcnNlVGltZUlucHV0KCc3ZCcsICdzaW5jZScpLnRvSVNPU3RyaW5nKCkpLnRvQmUoXG4gICAgICAnMjAyNi0wNi0zMFQxMjowMDowMC4wMDBaJ1xuICAgICk7XG4gICAgZXhwZWN0KHBhcnNlVGltZUlucHV0KCcydycsICdzaW5jZScpLnRvSVNPU3RyaW5nKCkpLnRvQmUoXG4gICAgICAnMjAyNi0wNi0yM1QxMjowMDowMC4wMDBaJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdwYXJzZXMgYWJzb2x1dGUgdGltZXN0YW1wcycsICgpID0+IHtcbiAgICBleHBlY3QocGFyc2VUaW1lSW5wdXQoJzIwMjYtMDctMDFUMDA6MDA6MDBaJywgJ3NpbmNlJykudG9JU09TdHJpbmcoKSkudG9CZShcbiAgICAgICcyMDI2LTA3LTAxVDAwOjAwOjAwLjAwMFonXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgaW52YWxpZCB2YWx1ZXMgd2l0aCB0aGUgZmxhZyBuYW1lIGluIHRoZSBlcnJvcicsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gcGFyc2VUaW1lSW5wdXQoJ3llc3RlcmRheS1pc2gnLCAnc2luY2UnKSkudG9UaHJvdygnLS1zaW5jZScpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgncmVzb2x2ZVRpbWVXaW5kb3cnLCAoKSA9PiB7XG4gIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCB3aGVuIG5laXRoZXIgZmxhZyBpcyBnaXZlbicsICgpID0+IHtcbiAgICBleHBlY3QocmVzb2x2ZVRpbWVXaW5kb3coe30pKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KCdkZWZhdWx0cyB0aGUgZW5kIHRvIG5vdyB3aGVuIG9ubHkgLS1zaW5jZSBpcyBnaXZlbicsICgpID0+IHtcbiAgICB2aS5zcHlPbihEYXRlLCAnbm93JykubW9ja1JldHVyblZhbHVlKE5PVy5nZXRUaW1lKCkpO1xuICAgIGV4cGVjdChyZXNvbHZlVGltZVdpbmRvdyh7IHNpbmNlOiAnMjRoJyB9KSkudG9FcXVhbCh7XG4gICAgICBzdGFydFRpbWU6ICcyMDI2LTA3LTA2VDEyOjAwOjAwLjAwMFonLFxuICAgICAgZW5kVGltZTogJzIwMjYtMDctMDdUMTI6MDA6MDAuMDAwWicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIC0tdW50aWwgd2l0aG91dCAtLXNpbmNlJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiByZXNvbHZlVGltZVdpbmRvdyh7IHVudGlsOiAnMWgnIH0pKS50b1Rocm93KFxuICAgICAgJy0tdW50aWwgcmVxdWlyZXMgLS1zaW5jZSdcbiAgICApO1xuICB9KTtcblxuICBpdCgncmVqZWN0cyBpbnZlcnRlZCB3aW5kb3dzJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiByZXNvbHZlVGltZVdpbmRvdyh7IHNpbmNlOiAnMWgnLCB1bnRpbDogJzJoJyB9KSkudG9UaHJvdyhcbiAgICAgICctLXNpbmNlIG11c3QgYmUgZWFybGllciB0aGFuIC0tdW50aWwnXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3BsYW5XaW5kb3dTdGFydEZyb21SZXNwb25zZScsICgpID0+IHtcbiAgaXQoJ2V4dHJhY3RzIHRoZSBwbGFuIHdpbmRvdyBzdGFydCBmcm9tIHBhZ2UgbWV0YWRhdGEnLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgcGxhbldpbmRvd1N0YXJ0RnJvbVJlc3BvbnNlKHtcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgY3VycmVudExvb2tiYWNrRGF5czogMzAsXG4gICAgICAgICAgbWF4TG9va2JhY2tEYXlzOiAzMCxcbiAgICAgICAgICBjdXJyZW50V2luZG93U3RhcnQ6ICcyMDI2LTA2LTA3VDEyOjAwOjAwLjAwMFonLFxuICAgICAgICAgIG1heFdpbmRvd1N0YXJ0OiAnMjAyNi0wNi0wN1QxMjowMDowMC4wMDBaJyxcbiAgICAgICAgICB1cGdyYWRlQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS50b0JlKCcyMDI2LTA2LTA3VDEyOjAwOjAwLjAwMFonKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgdW5kZWZpbmVkIHdpdGhvdXQgcGFnZSBtZXRhZGF0YScsICgpID0+IHtcbiAgICBleHBlY3QocGxhbldpbmRvd1N0YXJ0RnJvbVJlc3BvbnNlKHsgZGF0YTogW10gfSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QocGxhbldpbmRvd1N0YXJ0RnJvbVJlc3BvbnNlKG51bGwpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -6,7 +6,10 @@ export declare function fetchTeamInfo(teamId: string, authToken: string): Promis
|
|
|
6
6
|
teamSlug: string;
|
|
7
7
|
} | null>;
|
|
8
8
|
/**
|
|
9
|
-
* Get the Vercel dashboard URL for workflows
|
|
9
|
+
* Get the Vercel dashboard URL for workflows.
|
|
10
|
+
*
|
|
11
|
+
* Format: https://vercel.com/<teamSlug>/<projectSlug>/workflows/runs/<runId>?environment=<env>
|
|
12
|
+
* (the older `/observability/workflows` route is no longer used).
|
|
10
13
|
*/
|
|
11
|
-
export declare function getVercelDashboardUrl(teamSlug: string, projectName: string, resource: string, id?: string): string;
|
|
14
|
+
export declare function getVercelDashboardUrl(teamSlug: string, projectName: string, resource: string, id?: string, environment?: string): string;
|
|
12
15
|
//# sourceMappingURL=vercel-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel-api.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/vercel-api.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAqDtC;
|
|
1
|
+
{"version":3,"file":"vercel-api.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/vercel-api.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAqDtC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,EAAE,CAAC,EAAE,MAAM,EACX,WAAW,SAAe,GACzB,MAAM,CAYR"}
|
|
@@ -43,47 +43,22 @@ export async function fetchTeamInfo(teamId, authToken) {
|
|
|
43
43
|
return null;
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
// /**
|
|
47
|
-
// * Check if the Vercel dashboard workflows page is available
|
|
48
|
-
// */
|
|
49
|
-
// export async function checkVercelDashboardAvailable(
|
|
50
|
-
// teamSlug: string,
|
|
51
|
-
// projectName: string,
|
|
52
|
-
// authToken: string
|
|
53
|
-
// ): Promise<boolean> {
|
|
54
|
-
// try {
|
|
55
|
-
// const dashboardUrl = `https://vercel.com/${teamSlug}/${projectName}/ai/workflows`;
|
|
56
|
-
// logger.debug(`Checking Vercel dashboard availability: ${dashboardUrl}`);
|
|
57
|
-
// const response = await fetch(dashboardUrl, {
|
|
58
|
-
// method: 'HEAD',
|
|
59
|
-
// redirect: 'follow',
|
|
60
|
-
// headers: {
|
|
61
|
-
// Authorization: `Bearer ${authToken}`,
|
|
62
|
-
// },
|
|
63
|
-
// });
|
|
64
|
-
// // Consider 2xx and 3xx as success
|
|
65
|
-
// const isAvailable = response.status >= 200 && response.status < 400;
|
|
66
|
-
// logger.debug(
|
|
67
|
-
// `Dashboard check result: ${response.status} - ${isAvailable ? 'available' : 'not available'}`
|
|
68
|
-
// );
|
|
69
|
-
// return isAvailable;
|
|
70
|
-
// } catch (error) {
|
|
71
|
-
// logger.debug(`Error checking dashboard availability: ${error}`);
|
|
72
|
-
// return false;
|
|
73
|
-
// }
|
|
74
|
-
// }
|
|
75
46
|
/**
|
|
76
|
-
* Get the Vercel dashboard URL for workflows
|
|
47
|
+
* Get the Vercel dashboard URL for workflows.
|
|
48
|
+
*
|
|
49
|
+
* Format: https://vercel.com/<teamSlug>/<projectSlug>/workflows/runs/<runId>?environment=<env>
|
|
50
|
+
* (the older `/observability/workflows` route is no longer used).
|
|
77
51
|
*/
|
|
78
|
-
export function getVercelDashboardUrl(teamSlug, projectName, resource, id) {
|
|
79
|
-
|
|
52
|
+
export function getVercelDashboardUrl(teamSlug, projectName, resource, id, environment = 'production') {
|
|
53
|
+
const base = `https://vercel.com/${teamSlug}/${projectName}/workflows`;
|
|
54
|
+
const env = `environment=${environment}`;
|
|
80
55
|
// Add resource-specific path segments
|
|
81
56
|
if (resource === 'run' && id) {
|
|
82
|
-
|
|
57
|
+
return `${base}/runs/${id}?${env}`;
|
|
83
58
|
}
|
|
84
|
-
|
|
85
|
-
|
|
59
|
+
if (id) {
|
|
60
|
+
return `${base}?${resource}Id=${id}&${env}`;
|
|
86
61
|
}
|
|
87
|
-
return
|
|
62
|
+
return `${base}?${env}`;
|
|
88
63
|
}
|
|
89
|
-
//# sourceMappingURL=
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaW5zcGVjdC92ZXJjZWwtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPMUM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQ2pDLE1BQWMsRUFDZCxTQUFpQjtJQUVqQixJQUFJLENBQUM7UUFDSCxvREFBb0Q7UUFDcEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLG1DQUFtQyxNQUFNLEVBQUUsRUFBRTtZQUN4RSxPQUFPLEVBQUU7Z0JBQ1AsYUFBYSxFQUFFLFVBQVUsU0FBUyxFQUFFO2FBQ3JDO1lBQ0QsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1NBQzFCLENBQUMsQ0FBQztRQUVILDBEQUEwRDtRQUMxRCxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEIsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxLQUFLLENBQ1YsS0FBSyxDQUFDLEdBQUcsQ0FDUCwwQkFBMEIsUUFBUSxDQUFDLE1BQU0sc0NBQXNDLENBQ2hGLENBQ0YsQ0FBQztZQUNGLE1BQU0sQ0FBQyxJQUFJLENBQ1QsS0FBSyxDQUFDLE1BQU0sQ0FDVixnRUFBZ0UsQ0FDakUsQ0FDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQztZQUNsRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxLQUFLLENBQ1YsOEJBQThCLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUN2RSxDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBZSxDQUFDO1FBQ25ELE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsK0RBQStEO1FBQy9ELElBQUksS0FBSyxZQUFZLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQzFELE1BQU0sQ0FBQyxLQUFLLENBQ1Ysd0VBQXdFLENBQ3pFLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsUUFBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsRUFBVyxFQUNYLFdBQVcsR0FBRyxZQUFZO0lBRTFCLE1BQU0sSUFBSSxHQUFHLHNCQUFzQixRQUFRLElBQUksV0FBVyxZQUFZLENBQUM7SUFDdkUsTUFBTSxHQUFHLEdBQUcsZUFBZSxXQUFXLEVBQUUsQ0FBQztJQUV6QyxzQ0FBc0M7SUFDdEMsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE9BQU8sR0FBRyxJQUFJLFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFDRCxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ1AsT0FBTyxHQUFHLElBQUksSUFBSSxRQUFRLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFDRCxPQUFPLEdBQUcsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vY29uZmlnL2xvZy5qcyc7XG5cbmludGVyZmFjZSBWZXJjZWxUZWFtIHtcbiAgaWQ6IHN0cmluZztcbiAgc2x1Zzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZldGNoIHRlYW0gaW5mb3JtYXRpb24gZnJvbSBWZXJjZWwgQVBJXG4gKiBUaW1lb3V0OiA1IHNlY29uZHMgLSBmYWxscyBiYWNrIHRvIGxvY2FsIFVJIGlmIHRoZSByZXF1ZXN0IGZhaWxzIG9yIHRpbWVzIG91dFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hUZWFtSW5mbyhcbiAgdGVhbUlkOiBzdHJpbmcsXG4gIGF1dGhUb2tlbjogc3RyaW5nXG4pOiBQcm9taXNlPHsgdGVhbVNsdWc6IHN0cmluZyB9IHwgbnVsbD4ge1xuICB0cnkge1xuICAgIC8vIENyZWF0ZSBhbiBBYm9ydENvbnRyb2xsZXIgd2l0aCBhIDUgc2Vjb25kIHRpbWVvdXRcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCA1MDAwKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXBpLnZlcmNlbC5jb20vdjIvdGVhbXMvJHt0ZWFtSWR9YCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YXV0aFRva2VufWAsXG4gICAgICB9LFxuICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIC8vIENsZWFyIHRoZSB0aW1lb3V0IGlmIHRoZSByZXF1ZXN0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHlcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQwMykge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBjaGFsay5yZWQoXG4gICAgICAgICAgYEF1dGhlbnRpY2F0aW9uIGZhaWxlZCAoJHtyZXNwb25zZS5zdGF0dXN9KTogVW5hYmxlIHRvIGFjY2VzcyB0ZWFtIGluZm9ybWF0aW9uYFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICAnXFxuUGxlYXNlIGVuc3VyZSB5b3UgYXJlIGxvZ2dlZCBpbiBhbmQgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRlYW06J1xuICAgICAgICApXG4gICAgICApO1xuICAgICAgbG9nZ2VyLndhcm4oY2hhbGsueWVsbG93KCcgIFJ1biBgdmVyY2VsIGxvZ2luYCB0byBhdXRoZW50aWNhdGUnKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggdGVhbSBpbmZvOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0ZWFtID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgVmVyY2VsVGVhbTtcbiAgICByZXR1cm4ge1xuICAgICAgdGVhbVNsdWc6IHRlYW0uc2x1ZyxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEhhbmRsZSBib3RoIHRpbWVvdXQgYW5kIG90aGVyIGVycm9ycyAtIGZhbGwgYmFjayB0byBsb2NhbCBVSVxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAnVmVyY2VsIEFQSSByZXF1ZXN0IHRpbWVkIG91dCBhZnRlciA1IHNlY29uZHMsIGZhbGxpbmcgYmFjayB0byBsb2NhbCBVSSdcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRXJyb3IgZmV0Y2hpbmcgdGVhbSBpbmZvOiAke2Vycm9yfWApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgVmVyY2VsIGRhc2hib2FyZCBVUkwgZm9yIHdvcmtmbG93cy5cbiAqXG4gKiBGb3JtYXQ6IGh0dHBzOi8vdmVyY2VsLmNvbS88dGVhbVNsdWc+Lzxwcm9qZWN0U2x1Zz4vd29ya2Zsb3dzL3J1bnMvPHJ1bklkPj9lbnZpcm9ubWVudD08ZW52PlxuICogKHRoZSBvbGRlciBgL29ic2VydmFiaWxpdHkvd29ya2Zsb3dzYCByb3V0ZSBpcyBubyBsb25nZXIgdXNlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJjZWxEYXNoYm9hcmRVcmwoXG4gIHRlYW1TbHVnOiBzdHJpbmcsXG4gIHByb2plY3ROYW1lOiBzdHJpbmcsXG4gIHJlc291cmNlOiBzdHJpbmcsXG4gIGlkPzogc3RyaW5nLFxuICBlbnZpcm9ubWVudCA9ICdwcm9kdWN0aW9uJ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IGBodHRwczovL3ZlcmNlbC5jb20vJHt0ZWFtU2x1Z30vJHtwcm9qZWN0TmFtZX0vd29ya2Zsb3dzYDtcbiAgY29uc3QgZW52ID0gYGVudmlyb25tZW50PSR7ZW52aXJvbm1lbnR9YDtcblxuICAvLyBBZGQgcmVzb3VyY2Utc3BlY2lmaWMgcGF0aCBzZWdtZW50c1xuICBpZiAocmVzb3VyY2UgPT09ICdydW4nICYmIGlkKSB7XG4gICAgcmV0dXJuIGAke2Jhc2V9L3J1bnMvJHtpZH0/JHtlbnZ9YDtcbiAgfVxuICBpZiAoaWQpIHtcbiAgICByZXR1cm4gYCR7YmFzZX0/JHtyZXNvdXJjZX1JZD0ke2lkfSYke2Vudn1gO1xuICB9XG4gIHJldHVybiBgJHtiYXNlfT8ke2Vudn1gO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel-api.test.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/vercel-api.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { getVercelDashboardUrl } from './vercel-api.js';
|
|
3
|
+
describe('getVercelDashboardUrl', () => {
|
|
4
|
+
it('builds a run deep link with the default (production) environment', () => {
|
|
5
|
+
expect(getVercelDashboardUrl('my-team', 'my-project', 'run', 'wrun_123')).toBe('https://vercel.com/my-team/my-project/workflows/runs/wrun_123?environment=production');
|
|
6
|
+
});
|
|
7
|
+
it('respects the preview environment', () => {
|
|
8
|
+
expect(getVercelDashboardUrl('my-team', 'my-project', 'run', 'wrun_123', 'preview')).toBe('https://vercel.com/my-team/my-project/workflows/runs/wrun_123?environment=preview');
|
|
9
|
+
});
|
|
10
|
+
it('never emits the legacy /observability segment', () => {
|
|
11
|
+
const url = getVercelDashboardUrl('my-team', 'my-project', 'run', 'wrun_123', 'preview');
|
|
12
|
+
expect(url).not.toContain('/observability');
|
|
13
|
+
});
|
|
14
|
+
it('builds an overview link when no id is provided', () => {
|
|
15
|
+
expect(getVercelDashboardUrl('my-team', 'my-project', 'run')).toBe('https://vercel.com/my-team/my-project/workflows?environment=production');
|
|
16
|
+
});
|
|
17
|
+
it('builds a resource-query link for non-run resources', () => {
|
|
18
|
+
expect(getVercelDashboardUrl('my-team', 'my-project', 'step', 'step_456', 'preview')).toBe('https://vercel.com/my-team/my-project/workflows?stepId=step_456&environment=preview');
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWFwaS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbnNwZWN0L3ZlcmNlbC1hcGkudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1FBQzFFLE1BQU0sQ0FDSixxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FDbEUsQ0FBQyxJQUFJLENBQ0osc0ZBQXNGLENBQ3ZGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7UUFDMUMsTUFBTSxDQUNKLHFCQUFxQixDQUNuQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxVQUFVLEVBQ1YsU0FBUyxDQUNWLENBQ0YsQ0FBQyxJQUFJLENBQ0osbUZBQW1GLENBQ3BGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUU7UUFDdkQsTUFBTSxHQUFHLEdBQUcscUJBQXFCLENBQy9CLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLFVBQVUsRUFDVixTQUFTLENBQ1YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxFQUFFO1FBQ3hELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNoRSx3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtRQUM1RCxNQUFNLENBQ0oscUJBQXFCLENBQ25CLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFDVixTQUFTLENBQ1YsQ0FDRixDQUFDLElBQUksQ0FDSixxRkFBcUYsQ0FDdEYsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBnZXRWZXJjZWxEYXNoYm9hcmRVcmwgfSBmcm9tICcuL3ZlcmNlbC1hcGkuanMnO1xuXG5kZXNjcmliZSgnZ2V0VmVyY2VsRGFzaGJvYXJkVXJsJywgKCkgPT4ge1xuICBpdCgnYnVpbGRzIGEgcnVuIGRlZXAgbGluayB3aXRoIHRoZSBkZWZhdWx0IChwcm9kdWN0aW9uKSBlbnZpcm9ubWVudCcsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBnZXRWZXJjZWxEYXNoYm9hcmRVcmwoJ215LXRlYW0nLCAnbXktcHJvamVjdCcsICdydW4nLCAnd3J1bl8xMjMnKVxuICAgICkudG9CZShcbiAgICAgICdodHRwczovL3ZlcmNlbC5jb20vbXktdGVhbS9teS1wcm9qZWN0L3dvcmtmbG93cy9ydW5zL3dydW5fMTIzP2Vudmlyb25tZW50PXByb2R1Y3Rpb24nXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Jlc3BlY3RzIHRoZSBwcmV2aWV3IGVudmlyb25tZW50JywgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGdldFZlcmNlbERhc2hib2FyZFVybChcbiAgICAgICAgJ215LXRlYW0nLFxuICAgICAgICAnbXktcHJvamVjdCcsXG4gICAgICAgICdydW4nLFxuICAgICAgICAnd3J1bl8xMjMnLFxuICAgICAgICAncHJldmlldydcbiAgICAgIClcbiAgICApLnRvQmUoXG4gICAgICAnaHR0cHM6Ly92ZXJjZWwuY29tL215LXRlYW0vbXktcHJvamVjdC93b3JrZmxvd3MvcnVucy93cnVuXzEyMz9lbnZpcm9ubWVudD1wcmV2aWV3J1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCduZXZlciBlbWl0cyB0aGUgbGVnYWN5IC9vYnNlcnZhYmlsaXR5IHNlZ21lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgdXJsID0gZ2V0VmVyY2VsRGFzaGJvYXJkVXJsKFxuICAgICAgJ215LXRlYW0nLFxuICAgICAgJ215LXByb2plY3QnLFxuICAgICAgJ3J1bicsXG4gICAgICAnd3J1bl8xMjMnLFxuICAgICAgJ3ByZXZpZXcnXG4gICAgKTtcbiAgICBleHBlY3QodXJsKS5ub3QudG9Db250YWluKCcvb2JzZXJ2YWJpbGl0eScpO1xuICB9KTtcblxuICBpdCgnYnVpbGRzIGFuIG92ZXJ2aWV3IGxpbmsgd2hlbiBubyBpZCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICBleHBlY3QoZ2V0VmVyY2VsRGFzaGJvYXJkVXJsKCdteS10ZWFtJywgJ215LXByb2plY3QnLCAncnVuJykpLnRvQmUoXG4gICAgICAnaHR0cHM6Ly92ZXJjZWwuY29tL215LXRlYW0vbXktcHJvamVjdC93b3JrZmxvd3M/ZW52aXJvbm1lbnQ9cHJvZHVjdGlvbidcbiAgICApO1xuICB9KTtcblxuICBpdCgnYnVpbGRzIGEgcmVzb3VyY2UtcXVlcnkgbGluayBmb3Igbm9uLXJ1biByZXNvdXJjZXMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgZ2V0VmVyY2VsRGFzaGJvYXJkVXJsKFxuICAgICAgICAnbXktdGVhbScsXG4gICAgICAgICdteS1wcm9qZWN0JyxcbiAgICAgICAgJ3N0ZXAnLFxuICAgICAgICAnc3RlcF80NTYnLFxuICAgICAgICAncHJldmlldydcbiAgICAgIClcbiAgICApLnRvQmUoXG4gICAgICAnaHR0cHM6Ly92ZXJjZWwuY29tL215LXRlYW0vbXktcHJvamVjdC93b3JrZmxvd3M/c3RlcElkPXN0ZXBfNDU2JmVudmlyb25tZW50PXByZXZpZXcnXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==
|