@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
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import {
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { getObservabilityUpgradeRequiredMessage, isObservabilityUpgradeRequiredError, } from './errors.js';
|
|
3
|
+
import { formatTableValue, hasExpiredData, listEvents, listRuns, listSleeps, listSteps, } from './output.js';
|
|
3
4
|
const makeRun = (overrides = {}) => ({
|
|
4
5
|
runId: 'run-1',
|
|
5
6
|
status: 'running',
|
|
@@ -17,6 +18,9 @@ const makeRun = (overrides = {}) => ({
|
|
|
17
18
|
executionContext: {},
|
|
18
19
|
...overrides,
|
|
19
20
|
});
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
vi.restoreAllMocks();
|
|
23
|
+
});
|
|
20
24
|
describe('hasExpiredData', () => {
|
|
21
25
|
it('returns false when expiredAt is undefined', () => {
|
|
22
26
|
expect(hasExpiredData(makeRun({ expiredAt: undefined }))).toBe(false);
|
|
@@ -49,4 +53,400 @@ describe('formatTableValue expired data handling', () => {
|
|
|
49
53
|
expect(String(result)).not.toContain('expired');
|
|
50
54
|
});
|
|
51
55
|
});
|
|
52
|
-
|
|
56
|
+
describe('isObservabilityUpgradeRequiredError', () => {
|
|
57
|
+
it('detects workflow analytics 402 errors by top-level code', () => {
|
|
58
|
+
expect(isObservabilityUpgradeRequiredError({
|
|
59
|
+
status: 402,
|
|
60
|
+
code: 'observability-upgrade-required',
|
|
61
|
+
})).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
it('detects workflow analytics 402 errors by response body error', () => {
|
|
64
|
+
expect(isObservabilityUpgradeRequiredError({
|
|
65
|
+
status: 402,
|
|
66
|
+
body: { error: 'observability-upgrade-required' },
|
|
67
|
+
})).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
it('does not treat 404s as upgrade prompts', () => {
|
|
70
|
+
expect(isObservabilityUpgradeRequiredError({
|
|
71
|
+
status: 404,
|
|
72
|
+
code: 'observability-upgrade-required',
|
|
73
|
+
})).toBe(false);
|
|
74
|
+
});
|
|
75
|
+
it('uses an upgrade prompt message', () => {
|
|
76
|
+
expect(getObservabilityUpgradeRequiredMessage()).toContain('Upgrade Observability Plus');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('listRuns', () => {
|
|
80
|
+
it('preserves analytics page metadata in JSON output', async () => {
|
|
81
|
+
const run = {
|
|
82
|
+
runId: 'run-1',
|
|
83
|
+
status: 'running',
|
|
84
|
+
deploymentId: 'dep-1',
|
|
85
|
+
workflowName: 'workflow//./src/workflows/test//myWorkflow',
|
|
86
|
+
specVersion: 2,
|
|
87
|
+
attributes: {},
|
|
88
|
+
createdAt: new Date('2026-06-30T00:00:00.000Z'),
|
|
89
|
+
updatedAt: new Date('2026-06-30T00:00:00.000Z'),
|
|
90
|
+
startedAt: new Date('2026-06-30T00:00:01.000Z'),
|
|
91
|
+
completedAt: null,
|
|
92
|
+
errorCode: null,
|
|
93
|
+
workflowCoreVersion: null,
|
|
94
|
+
workflowEncryptionEnabled: false,
|
|
95
|
+
};
|
|
96
|
+
const pageInfo = {
|
|
97
|
+
currentLookbackDays: 2,
|
|
98
|
+
maxLookbackDays: 30,
|
|
99
|
+
currentWindowStart: new Date('2026-06-28T00:00:00.000Z'),
|
|
100
|
+
maxWindowStart: new Date('2026-06-01T00:00:00.000Z'),
|
|
101
|
+
upgradeAvailable: true,
|
|
102
|
+
};
|
|
103
|
+
const world = {
|
|
104
|
+
analytics: {
|
|
105
|
+
runs: {
|
|
106
|
+
list: vi.fn().mockResolvedValue({
|
|
107
|
+
data: [run],
|
|
108
|
+
cursor: null,
|
|
109
|
+
hasMore: false,
|
|
110
|
+
pageInfo,
|
|
111
|
+
}),
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
const write = vi
|
|
116
|
+
.spyOn(process.stdout, 'write')
|
|
117
|
+
.mockImplementation(() => true);
|
|
118
|
+
await listRuns(world, { json: true });
|
|
119
|
+
expect(world.analytics?.runs.list).toHaveBeenCalledWith({
|
|
120
|
+
workflowName: undefined,
|
|
121
|
+
status: undefined,
|
|
122
|
+
pagination: {
|
|
123
|
+
sortOrder: 'desc',
|
|
124
|
+
cursor: undefined,
|
|
125
|
+
limit: 20,
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
expect(write).toHaveBeenCalledTimes(1);
|
|
129
|
+
expect(JSON.parse(String(write.mock.calls[0][0]))).toEqual({
|
|
130
|
+
data: [
|
|
131
|
+
{
|
|
132
|
+
...run,
|
|
133
|
+
createdAt: '2026-06-30T00:00:00.000Z',
|
|
134
|
+
updatedAt: '2026-06-30T00:00:00.000Z',
|
|
135
|
+
startedAt: '2026-06-30T00:00:01.000Z',
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
cursor: null,
|
|
139
|
+
hasMore: false,
|
|
140
|
+
pageInfo: {
|
|
141
|
+
currentLookbackDays: 2,
|
|
142
|
+
maxLookbackDays: 30,
|
|
143
|
+
currentWindowStart: '2026-06-28T00:00:00.000Z',
|
|
144
|
+
maxWindowStart: '2026-06-01T00:00:00.000Z',
|
|
145
|
+
upgradeAvailable: true,
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe('listSteps', () => {
|
|
151
|
+
it('passes cursors and preserves the JSON array output', async () => {
|
|
152
|
+
const step = {
|
|
153
|
+
runId: 'run-1',
|
|
154
|
+
stepId: 'step-1',
|
|
155
|
+
stepName: 'doWork',
|
|
156
|
+
status: 'completed',
|
|
157
|
+
attempt: 1,
|
|
158
|
+
createdAt: new Date('2026-06-30T00:00:00.000Z'),
|
|
159
|
+
updatedAt: new Date('2026-06-30T00:00:02.000Z'),
|
|
160
|
+
startedAt: new Date('2026-06-30T00:00:01.000Z'),
|
|
161
|
+
completedAt: new Date('2026-06-30T00:00:02.000Z'),
|
|
162
|
+
retryAfter: null,
|
|
163
|
+
errorCode: null,
|
|
164
|
+
workflowCoreVersion: null,
|
|
165
|
+
workflowEncryptionEnabled: false,
|
|
166
|
+
};
|
|
167
|
+
const world = {
|
|
168
|
+
analytics: {
|
|
169
|
+
steps: {
|
|
170
|
+
list: vi.fn().mockResolvedValue({
|
|
171
|
+
data: [step],
|
|
172
|
+
cursor: 'next-step-cursor',
|
|
173
|
+
hasMore: true,
|
|
174
|
+
}),
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
const write = vi
|
|
179
|
+
.spyOn(process.stdout, 'write')
|
|
180
|
+
.mockImplementation(() => true);
|
|
181
|
+
await listSteps(world, {
|
|
182
|
+
json: true,
|
|
183
|
+
runId: 'run-1',
|
|
184
|
+
cursor: 'step-cursor',
|
|
185
|
+
limit: 1,
|
|
186
|
+
});
|
|
187
|
+
expect(world.analytics?.steps.list).toHaveBeenCalledWith({
|
|
188
|
+
runId: 'run-1',
|
|
189
|
+
pagination: {
|
|
190
|
+
sortOrder: 'desc',
|
|
191
|
+
cursor: 'step-cursor',
|
|
192
|
+
limit: 1,
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
expect(JSON.parse(String(write.mock.calls[0][0]))).toEqual([
|
|
196
|
+
{
|
|
197
|
+
...step,
|
|
198
|
+
createdAt: '2026-06-30T00:00:00.000Z',
|
|
199
|
+
updatedAt: '2026-06-30T00:00:02.000Z',
|
|
200
|
+
startedAt: '2026-06-30T00:00:01.000Z',
|
|
201
|
+
completedAt: '2026-06-30T00:00:02.000Z',
|
|
202
|
+
},
|
|
203
|
+
]);
|
|
204
|
+
});
|
|
205
|
+
it('falls back to storage when the first analytics page is empty', async () => {
|
|
206
|
+
const step = {
|
|
207
|
+
runId: 'run-1',
|
|
208
|
+
stepId: 'step-1',
|
|
209
|
+
stepName: 'step//./src/workflows/test//doWork',
|
|
210
|
+
status: 'completed',
|
|
211
|
+
attempt: 1,
|
|
212
|
+
input: undefined,
|
|
213
|
+
output: undefined,
|
|
214
|
+
createdAt: new Date('2026-06-30T00:00:00.000Z'),
|
|
215
|
+
updatedAt: new Date('2026-06-30T00:00:02.000Z'),
|
|
216
|
+
startedAt: new Date('2026-06-30T00:00:01.000Z'),
|
|
217
|
+
completedAt: new Date('2026-06-30T00:00:02.000Z'),
|
|
218
|
+
};
|
|
219
|
+
const world = {
|
|
220
|
+
analytics: {
|
|
221
|
+
steps: {
|
|
222
|
+
list: vi.fn().mockResolvedValue({
|
|
223
|
+
data: [],
|
|
224
|
+
cursor: null,
|
|
225
|
+
hasMore: false,
|
|
226
|
+
}),
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
steps: {
|
|
230
|
+
list: vi.fn().mockResolvedValue({
|
|
231
|
+
data: [step],
|
|
232
|
+
cursor: null,
|
|
233
|
+
hasMore: false,
|
|
234
|
+
}),
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
const write = vi
|
|
238
|
+
.spyOn(process.stdout, 'write')
|
|
239
|
+
.mockImplementation(() => true);
|
|
240
|
+
await listSteps(world, { json: true, runId: 'run-1' });
|
|
241
|
+
expect(world.analytics?.steps.list).toHaveBeenCalled();
|
|
242
|
+
expect(world.steps.list).toHaveBeenCalledWith({
|
|
243
|
+
runId: 'run-1',
|
|
244
|
+
pagination: {
|
|
245
|
+
sortOrder: 'desc',
|
|
246
|
+
cursor: undefined,
|
|
247
|
+
limit: 20,
|
|
248
|
+
},
|
|
249
|
+
resolveData: 'none',
|
|
250
|
+
});
|
|
251
|
+
expect(JSON.parse(String(write.mock.calls[0][0]))).toEqual([
|
|
252
|
+
{
|
|
253
|
+
...step,
|
|
254
|
+
createdAt: '2026-06-30T00:00:00.000Z',
|
|
255
|
+
updatedAt: '2026-06-30T00:00:02.000Z',
|
|
256
|
+
startedAt: '2026-06-30T00:00:01.000Z',
|
|
257
|
+
completedAt: '2026-06-30T00:00:02.000Z',
|
|
258
|
+
},
|
|
259
|
+
]);
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
describe('listEvents', () => {
|
|
263
|
+
it('passes cursors and preserves the JSON array output', async () => {
|
|
264
|
+
const event = {
|
|
265
|
+
runId: 'run-1',
|
|
266
|
+
eventId: 'event-1',
|
|
267
|
+
eventType: 'step_completed',
|
|
268
|
+
correlationId: 'step-1',
|
|
269
|
+
entityId: 'step-1',
|
|
270
|
+
stepName: 'doWork',
|
|
271
|
+
workflowName: 'workflow//./src/workflows/test//myWorkflow',
|
|
272
|
+
deploymentId: 'dep-1',
|
|
273
|
+
specVersion: 2,
|
|
274
|
+
runCreatedAt: new Date('2026-06-30T00:00:00.000Z'),
|
|
275
|
+
createdAt: new Date('2026-06-30T00:00:02.000Z'),
|
|
276
|
+
region: null,
|
|
277
|
+
vercelId: null,
|
|
278
|
+
requestId: null,
|
|
279
|
+
resumeAt: null,
|
|
280
|
+
retryAfter: null,
|
|
281
|
+
errorCode: null,
|
|
282
|
+
workflowCoreVersion: null,
|
|
283
|
+
isWebhook: false,
|
|
284
|
+
isSystem: false,
|
|
285
|
+
workflowEncryptionEnabled: false,
|
|
286
|
+
};
|
|
287
|
+
const world = {
|
|
288
|
+
analytics: {
|
|
289
|
+
events: {
|
|
290
|
+
list: vi.fn().mockResolvedValue({
|
|
291
|
+
data: [event],
|
|
292
|
+
cursor: 'next-event-cursor',
|
|
293
|
+
hasMore: true,
|
|
294
|
+
}),
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
const write = vi
|
|
299
|
+
.spyOn(process.stdout, 'write')
|
|
300
|
+
.mockImplementation(() => true);
|
|
301
|
+
await listEvents(world, {
|
|
302
|
+
json: true,
|
|
303
|
+
runId: 'run-1',
|
|
304
|
+
cursor: 'event-cursor',
|
|
305
|
+
limit: 1,
|
|
306
|
+
});
|
|
307
|
+
expect(world.analytics?.events.list).toHaveBeenCalledWith({
|
|
308
|
+
runId: 'run-1',
|
|
309
|
+
correlationId: undefined,
|
|
310
|
+
pagination: {
|
|
311
|
+
sortOrder: 'desc',
|
|
312
|
+
cursor: 'event-cursor',
|
|
313
|
+
limit: 1,
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
expect(JSON.parse(String(write.mock.calls[0][0]))).toEqual([
|
|
317
|
+
{
|
|
318
|
+
...event,
|
|
319
|
+
runCreatedAt: '2026-06-30T00:00:00.000Z',
|
|
320
|
+
createdAt: '2026-06-30T00:00:02.000Z',
|
|
321
|
+
},
|
|
322
|
+
]);
|
|
323
|
+
});
|
|
324
|
+
it('falls back to storage when the first analytics page is empty', async () => {
|
|
325
|
+
const event = {
|
|
326
|
+
runId: 'run-1',
|
|
327
|
+
eventId: 'event-1',
|
|
328
|
+
eventType: 'step_completed',
|
|
329
|
+
correlationId: 'step-1',
|
|
330
|
+
eventData: {
|
|
331
|
+
stepName: 'doWork',
|
|
332
|
+
result: undefined,
|
|
333
|
+
},
|
|
334
|
+
createdAt: new Date('2026-06-30T00:00:02.000Z'),
|
|
335
|
+
};
|
|
336
|
+
const world = {
|
|
337
|
+
analytics: {
|
|
338
|
+
events: {
|
|
339
|
+
list: vi.fn().mockResolvedValue({
|
|
340
|
+
data: [],
|
|
341
|
+
cursor: null,
|
|
342
|
+
hasMore: false,
|
|
343
|
+
}),
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
events: {
|
|
347
|
+
list: vi.fn().mockResolvedValue({
|
|
348
|
+
data: [event],
|
|
349
|
+
cursor: null,
|
|
350
|
+
hasMore: false,
|
|
351
|
+
}),
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
const write = vi
|
|
355
|
+
.spyOn(process.stdout, 'write')
|
|
356
|
+
.mockImplementation(() => true);
|
|
357
|
+
await listEvents(world, { json: true, runId: 'run-1' });
|
|
358
|
+
expect(world.analytics?.events.list).toHaveBeenCalled();
|
|
359
|
+
expect(world.events.list).toHaveBeenCalledWith({
|
|
360
|
+
runId: 'run-1',
|
|
361
|
+
pagination: {
|
|
362
|
+
sortOrder: 'desc',
|
|
363
|
+
cursor: undefined,
|
|
364
|
+
limit: 20,
|
|
365
|
+
},
|
|
366
|
+
resolveData: 'none',
|
|
367
|
+
});
|
|
368
|
+
expect(JSON.parse(String(write.mock.calls[0][0]))).toEqual([
|
|
369
|
+
{
|
|
370
|
+
...event,
|
|
371
|
+
createdAt: '2026-06-30T00:00:02.000Z',
|
|
372
|
+
},
|
|
373
|
+
]);
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
describe('listSleeps', () => {
|
|
377
|
+
const wait = {
|
|
378
|
+
runId: 'run-1',
|
|
379
|
+
waitId: 'wait-1',
|
|
380
|
+
status: 'waiting',
|
|
381
|
+
resumeAt: new Date('2026-06-30T00:01:00.000Z'),
|
|
382
|
+
createdAt: new Date('2026-06-30T00:00:00.000Z'),
|
|
383
|
+
updatedAt: new Date('2026-06-30T00:00:00.000Z'),
|
|
384
|
+
completedAt: null,
|
|
385
|
+
workflowCoreVersion: null,
|
|
386
|
+
workflowEncryptionEnabled: false,
|
|
387
|
+
};
|
|
388
|
+
const pageInfo = {
|
|
389
|
+
currentLookbackDays: 2,
|
|
390
|
+
maxLookbackDays: 30,
|
|
391
|
+
currentWindowStart: new Date('2026-06-28T00:00:00.000Z'),
|
|
392
|
+
maxWindowStart: new Date('2026-06-01T00:00:00.000Z'),
|
|
393
|
+
upgradeAvailable: true,
|
|
394
|
+
};
|
|
395
|
+
it('passes cursors and preserves the JSON array output through analytics', async () => {
|
|
396
|
+
const world = {
|
|
397
|
+
analytics: {
|
|
398
|
+
waits: {
|
|
399
|
+
list: vi.fn().mockResolvedValue({
|
|
400
|
+
data: [wait],
|
|
401
|
+
cursor: 'next-wait-cursor',
|
|
402
|
+
hasMore: true,
|
|
403
|
+
pageInfo,
|
|
404
|
+
}),
|
|
405
|
+
},
|
|
406
|
+
},
|
|
407
|
+
};
|
|
408
|
+
const write = vi
|
|
409
|
+
.spyOn(process.stdout, 'write')
|
|
410
|
+
.mockImplementation(() => true);
|
|
411
|
+
await listSleeps(world, {
|
|
412
|
+
json: true,
|
|
413
|
+
runId: 'run-1',
|
|
414
|
+
cursor: 'wait-cursor',
|
|
415
|
+
limit: 1,
|
|
416
|
+
});
|
|
417
|
+
expect(world.analytics?.waits.list).toHaveBeenCalledWith({
|
|
418
|
+
runId: 'run-1',
|
|
419
|
+
pagination: {
|
|
420
|
+
sortOrder: 'desc',
|
|
421
|
+
cursor: 'wait-cursor',
|
|
422
|
+
limit: 1,
|
|
423
|
+
},
|
|
424
|
+
});
|
|
425
|
+
expect(JSON.parse(String(write.mock.calls[0][0]))).toEqual([
|
|
426
|
+
{
|
|
427
|
+
...wait,
|
|
428
|
+
resumeAt: '2026-06-30T00:01:00.000Z',
|
|
429
|
+
createdAt: '2026-06-30T00:00:00.000Z',
|
|
430
|
+
updatedAt: '2026-06-30T00:00:00.000Z',
|
|
431
|
+
},
|
|
432
|
+
]);
|
|
433
|
+
});
|
|
434
|
+
it('surfaces the observability upgrade hint in table mode', async () => {
|
|
435
|
+
const world = {
|
|
436
|
+
analytics: {
|
|
437
|
+
waits: {
|
|
438
|
+
list: vi.fn().mockResolvedValue({
|
|
439
|
+
data: [wait],
|
|
440
|
+
cursor: null,
|
|
441
|
+
hasMore: false,
|
|
442
|
+
pageInfo,
|
|
443
|
+
}),
|
|
444
|
+
},
|
|
445
|
+
},
|
|
446
|
+
};
|
|
447
|
+
const log = vi.spyOn(console, 'log').mockImplementation(() => undefined);
|
|
448
|
+
await listSleeps(world, { runId: 'run-1' });
|
|
449
|
+
expect(log.mock.calls.flat().join('\n')).toContain('Upgrade Observability Plus');
|
|
450
|
+
});
|
|
451
|
+
});
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luc3BlY3Qvb3V0cHV0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0QsT0FBTyxFQUNMLHNDQUFzQyxFQUN0QyxtQ0FBbUMsR0FDcEMsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxHQUNWLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sT0FBTyxHQUFHLENBQUMsWUFBa0MsRUFBRSxFQUFlLEVBQUUsQ0FDcEUsQ0FBQztJQUNDLEtBQUssRUFBRSxPQUFPO0lBQ2QsTUFBTSxFQUFFLFNBQVM7SUFDakIsWUFBWSxFQUFFLE9BQU87SUFDckIsWUFBWSxFQUFFLDRDQUE0QztJQUMxRCxLQUFLLEVBQUUsU0FBUztJQUNoQixNQUFNLEVBQUUsU0FBUztJQUNqQixLQUFLLEVBQUUsU0FBUztJQUNoQixTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ2pDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDakMsV0FBVyxFQUFFLFNBQVM7SUFDdEIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsV0FBVyxFQUFFLENBQUM7SUFDZCxnQkFBZ0IsRUFBRSxFQUFFO0lBQ3BCLEdBQUcsU0FBUztDQUNiLENBQTJCLENBQUM7QUFFL0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtJQUNiLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7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O0lBRUgsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JFLE1BQU0sS0FBSyxHQUFHO1lBQ1osU0FBUyxFQUFFO2dCQUNULEtBQUssRUFBRTtvQkFDTCxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDO3dCQUM5QixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7d0JBQ1osTUFBTSxFQUFFLElBQUk7d0JBQ1osT0FBTyxFQUFFLEtBQUs7d0JBQ2QsUUFBUTtxQkFDVCxDQUFDO2lCQUNIO2FBQ0Y7U0FDa0IsQ0FBQztRQUN0QixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6RSxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUU1QyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNoRCw0QkFBNEIsQ0FDN0IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEFuYWx5dGljc0V2ZW50LFxuICBBbmFseXRpY3NSdW4sXG4gIEFuYWx5dGljc1N0ZXAsXG4gIEFuYWx5dGljc1dhaXQsXG4gIEV2ZW50LFxuICBTdGVwLFxuICBXb3JrZmxvd1J1bixcbiAgV29ybGQsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBhZnRlckVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0LCB2aSB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQge1xuICBnZXRPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkTWVzc2FnZSxcbiAgaXNPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkRXJyb3IsXG59IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7XG4gIGZvcm1hdFRhYmxlVmFsdWUsXG4gIGhhc0V4cGlyZWREYXRhLFxuICBsaXN0RXZlbnRzLFxuICBsaXN0UnVucyxcbiAgbGlzdFNsZWVwcyxcbiAgbGlzdFN0ZXBzLFxufSBmcm9tICcuL291dHB1dC5qcyc7XG5cbmNvbnN0IG1ha2VSdW4gPSAob3ZlcnJpZGVzOiBQYXJ0aWFsPFdvcmtmbG93UnVuPiA9IHt9KTogV29ya2Zsb3dSdW4gPT5cbiAgKHtcbiAgICBydW5JZDogJ3J1bi0xJyxcbiAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICBkZXBsb3ltZW50SWQ6ICdkZXAtMScsXG4gICAgd29ya2Zsb3dOYW1lOiAnd29ya2Zsb3cvLy4vc3JjL3dvcmtmbG93cy90ZXN0Ly9teVdvcmtmbG93JyxcbiAgICBpbnB1dDogdW5kZWZpbmVkLFxuICAgIG91dHB1dDogdW5kZWZpbmVkLFxuICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgnMjAyNS0wMS0wMScpLFxuICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoJzIwMjUtMDEtMDEnKSxcbiAgICBjb21wbGV0ZWRBdDogdW5kZWZpbmVkLFxuICAgIHN0YXJ0ZWRBdDogdW5kZWZpbmVkLFxuICAgIGV4cGlyZWRBdDogdW5kZWZpbmVkLFxuICAgIHNwZWNWZXJzaW9uOiAyLFxuICAgIGV4ZWN1dGlvbkNvbnRleHQ6IHt9LFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfSkgYXMgdW5rbm93biBhcyBXb3JrZmxvd1J1bjtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgdmkucmVzdG9yZUFsbE1vY2tzKCk7XG59KTtcblxuZGVzY3JpYmUoJ2hhc0V4cGlyZWREYXRhJywgKCkgPT4ge1xuICBpdCgncmV0dXJucyBmYWxzZSB3aGVuIGV4cGlyZWRBdCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGhhc0V4cGlyZWREYXRhKG1ha2VSdW4oeyBleHBpcmVkQXQ6IHVuZGVmaW5lZCB9KSkpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyBmYWxzZSB3aGVuIGV4cGlyZWRBdCBpcyBpbiB0aGUgZnV0dXJlJywgKCkgPT4ge1xuICAgIGNvbnN0IGZ1dHVyZSA9IG5ldyBEYXRlKERhdGUubm93KCkgKyAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICBleHBlY3QoaGFzRXhwaXJlZERhdGEobWFrZVJ1bih7IGV4cGlyZWRBdDogZnV0dXJlIH0pKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIHRydWUgd2hlbiBleHBpcmVkQXQgaXMgaW4gdGhlIHBhc3QnLCAoKSA9PiB7XG4gICAgY29uc3QgcGFzdCA9IG5ldyBEYXRlKERhdGUubm93KCkgLSAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICBleHBlY3QoaGFzRXhwaXJlZERhdGEobWFrZVJ1bih7IGV4cGlyZWRBdDogcGFzdCB9KSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdmb3JtYXRUYWJsZVZhbHVlIGV4cGlyZWQgZGF0YSBoYW5kbGluZycsICgpID0+IHtcbiAgaXQoJ3JldHVybnMgaW5wdXQgdmFsdWUgd2hlbiBleHBpcmVkQXQgaXMgaW4gdGhlIGZ1dHVyZScsICgpID0+IHtcbiAgICBjb25zdCBmdXR1cmUgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgY29uc3QgaXRlbSA9IHsgZXhwaXJlZEF0OiBmdXR1cmUudG9JU09TdHJpbmcoKSwgaW5wdXQ6ICdoZWxsbycgfTtcbiAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUYWJsZVZhbHVlKCdpbnB1dCcsICdoZWxsbycsIHt9LCB1bmRlZmluZWQsIGl0ZW0pO1xuICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0NvbnRhaW4oJ2V4cGlyZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgZXhwaXJlZCBtZXNzYWdlIHdoZW4gZXhwaXJlZEF0IGlzIGluIHRoZSBwYXN0JywgKCkgPT4ge1xuICAgIGNvbnN0IHBhc3QgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgY29uc3QgaXRlbSA9IHsgZXhwaXJlZEF0OiBwYXN0LnRvSVNPU3RyaW5nKCksIG91dHB1dDogJ2hlbGxvJyB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRhYmxlVmFsdWUoJ291dHB1dCcsICdoZWxsbycsIHt9LCB1bmRlZmluZWQsIGl0ZW0pO1xuICAgIGV4cGVjdChTdHJpbmcocmVzdWx0KSkudG9Db250YWluKCdkYXRhIGV4cGlyZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ3JldHVybnMgaW5wdXQgdmFsdWUgd2hlbiBleHBpcmVkQXQgaXMgbm90IHByZXNlbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgaXRlbSA9IHsgaW5wdXQ6ICdoZWxsbycgfTtcbiAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUYWJsZVZhbHVlKCdpbnB1dCcsICdoZWxsbycsIHt9LCB1bmRlZmluZWQsIGl0ZW0pO1xuICAgIGV4cGVjdChTdHJpbmcocmVzdWx0KSkubm90LnRvQ29udGFpbignZXhwaXJlZCcpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnaXNPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkRXJyb3InLCAoKSA9PiB7XG4gIGl0KCdkZXRlY3RzIHdvcmtmbG93IGFuYWx5dGljcyA0MDIgZXJyb3JzIGJ5IHRvcC1sZXZlbCBjb2RlJywgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGlzT2JzZXJ2YWJpbGl0eVVwZ3JhZGVSZXF1aXJlZEVycm9yKHtcbiAgICAgICAgc3RhdHVzOiA0MDIsXG4gICAgICAgIGNvZGU6ICdvYnNlcnZhYmlsaXR5LXVwZ3JhZGUtcmVxdWlyZWQnLFxuICAgICAgfSlcbiAgICApLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdkZXRlY3RzIHdvcmtmbG93IGFuYWx5dGljcyA0MDIgZXJyb3JzIGJ5IHJlc3BvbnNlIGJvZHkgZXJyb3InLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgaXNPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IDQwMixcbiAgICAgICAgYm9keTogeyBlcnJvcjogJ29ic2VydmFiaWxpdHktdXBncmFkZS1yZXF1aXJlZCcgfSxcbiAgICAgIH0pXG4gICAgKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgdHJlYXQgNDA0cyBhcyB1cGdyYWRlIHByb21wdHMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgaXNPYnNlcnZhYmlsaXR5VXBncmFkZVJlcXVpcmVkRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IDQwNCxcbiAgICAgICAgY29kZTogJ29ic2VydmFiaWxpdHktdXBncmFkZS1yZXF1aXJlZCcsXG4gICAgICB9KVxuICAgICkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIGFuIHVwZ3JhZGUgcHJvbXB0IG1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGdldE9ic2VydmFiaWxpdHlVcGdyYWRlUmVxdWlyZWRNZXNzYWdlKCkpLnRvQ29udGFpbihcbiAgICAgICdVcGdyYWRlIE9ic2VydmFiaWxpdHkgUGx1cydcbiAgICApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnbGlzdFJ1bnMnLCAoKSA9PiB7XG4gIGl0KCdwcmVzZXJ2ZXMgYW5hbHl0aWNzIHBhZ2UgbWV0YWRhdGEgaW4gSlNPTiBvdXRwdXQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcnVuID0ge1xuICAgICAgcnVuSWQ6ICdydW4tMScsXG4gICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgIGRlcGxveW1lbnRJZDogJ2RlcC0xJyxcbiAgICAgIHdvcmtmbG93TmFtZTogJ3dvcmtmbG93Ly8uL3NyYy93b3JrZmxvd3MvdGVzdC8vbXlXb3JrZmxvdycsXG4gICAgICBzcGVjVmVyc2lvbjogMixcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgnMjAyNi0wNi0zMFQwMDowMDowMC4wMDBaJyksXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCcyMDI2LTA2LTMwVDAwOjAwOjAwLjAwMFonKSxcbiAgICAgIHN0YXJ0ZWRBdDogbmV3IERhdGUoJzIwMjYtMDYtMzBUMDA6MDA6MDEuMDAwWicpLFxuICAgICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgICBlcnJvckNvZGU6IG51bGwsXG4gICAgICB3b3JrZmxvd0NvcmVWZXJzaW9uOiBudWxsLFxuICAgICAgd29ya2Zsb3dFbmNyeXB0aW9uRW5hYmxlZDogZmFsc2UsXG4gICAgfSBzYXRpc2ZpZXMgQW5hbHl0aWNzUnVuO1xuICAgIGNvbnN0IHBhZ2VJbmZvID0ge1xuICAgICAgY3VycmVudExvb2tiYWNrRGF5czogMixcbiAgICAgIG1heExvb2tiYWNrRGF5czogMzAsXG4gICAgICBjdXJyZW50V2luZG93U3RhcnQ6IG5ldyBEYXRlKCcyMDI2LTA2LTI4VDAwOjAwOjAwLjAwMFonKSxcbiAgICAgIG1heFdpbmRvd1N0YXJ0OiBuZXcgRGF0ZSgnMjAyNi0wNi0wMVQwMDowMDowMC4wMDBaJyksXG4gICAgICB1cGdyYWRlQXZhaWxhYmxlOiB0cnVlLFxuICAgIH07XG4gICAgY29uc3Qgd29ybGQgPSB7XG4gICAgICBhbmFseXRpY3M6IHtcbiAgICAgICAgcnVuczoge1xuICAgICAgICAgIGxpc3Q6IHZpLmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICAgICAgZGF0YTogW3J1bl0sXG4gICAgICAgICAgICBjdXJzb3I6IG51bGwsXG4gICAgICAgICAgICBoYXNNb3JlOiBmYWxzZSxcbiAgICAgICAgICAgIHBhZ2VJbmZvLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9IGFzIHVua25vd24gYXMgV29ybGQ7XG4gICAgY29uc3Qgd3JpdGUgPSB2aVxuICAgICAgLnNweU9uKHByb2Nlc3Muc3Rkb3V0LCAnd3JpdGUnKVxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB0cnVlKTtcblxuICAgIGF3YWl0IGxpc3RSdW5zKHdvcmxkLCB7IGpzb246IHRydWUgfSk7XG5cbiAgICBleHBlY3Qod29ybGQuYW5hbHl0aWNzPy5ydW5zLmxpc3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgIHdvcmtmbG93TmFtZTogdW5kZWZpbmVkLFxuICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHNvcnRPcmRlcjogJ2Rlc2MnLFxuICAgICAgICBjdXJzb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgbGltaXQ6IDIwLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qod3JpdGUpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QoSlNPTi5wYXJzZShTdHJpbmcod3JpdGUubW9jay5jYWxsc1swXVswXSkpKS50b0VxdWFsKHtcbiAgICAgIGRhdGE6IFtcbiAgICAgICAge1xuICAgICAgICAgIC4uLnJ1bixcbiAgICAgICAgICBjcmVhdGVkQXQ6ICcyMDI2LTA2LTMwVDAwOjAwOjAwLjAwMFonLFxuICAgICAgICAgIHVwZGF0ZWRBdDogJzIwMjYtMDYtMzBUMDA6MDA6MDAuMDAwWicsXG4gICAgICAgICAgc3RhcnRlZEF0OiAnMjAyNi0wNi0zMFQwMDowMDowMS4wMDBaJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjdXJzb3I6IG51bGwsXG4gICAgICBoYXNNb3JlOiBmYWxzZSxcbiAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgIGN1cnJlbnRMb29rYmFja0RheXM6IDIsXG4gICAgICAgIG1heExvb2tiYWNrRGF5czogMzAsXG4gICAgICAgIGN1cnJlbnRXaW5kb3dTdGFydDogJzIwMjYtMDYtMjhUMDA6MDA6MDAuMDAwWicsXG4gICAgICAgIG1heFdpbmRvd1N0YXJ0OiAnMjAyNi0wNi0wMVQwMDowMDowMC4wMDBaJyxcbiAgICAgICAgdXBncmFkZUF2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdsaXN0U3RlcHMnLCAoKSA9PiB7XG4gIGl0KCdwYXNzZXMgY3Vyc29ycyBhbmQgcHJlc2VydmVzIHRoZSBKU09OIGFycmF5IG91dHB1dCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzdGVwID0ge1xuICAgICAgcnVuSWQ6ICdydW4tMScsXG4gICAgICBzdGVwSWQ6ICdzdGVwLTEnLFxuICAgICAgc3RlcE5hbWU6ICdkb1dvcmsnLFxuICAgICAgc3RhdHVzOiAnY29tcGxldGVkJyxcbiAgICAgIGF0dGVtcHQ6IDEsXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCcyMDI2LTA2LTMwVDAwOjAwOjAwLjAwMFonKSxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoJzIwMjYtMDYtMzBUMDA6MDA6MDIuMDAwWicpLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgnMjAyNi0wNi0zMFQwMDowMDowMS4wMDBaJyksXG4gICAgICBjb21wbGV0ZWRBdDogbmV3IERhdGUoJzIwMjYtMDYtMzBUMDA6MDA6MDIuMDAwWicpLFxuICAgICAgcmV0cnlBZnRlcjogbnVsbCxcbiAgICAgIGVycm9yQ29kZTogbnVsbCxcbiAgICAgIHdvcmtmbG93Q29yZVZlcnNpb246IG51bGwsXG4gICAgICB3b3JrZmxvd0VuY3J5cHRpb25FbmFibGVkOiBmYWxzZSxcbiAgICB9IHNhdGlzZmllcyBBbmFseXRpY3NTdGVwO1xuICAgIGNvbnN0IHdvcmxkID0ge1xuICAgICAgYW5hbHl0aWNzOiB7XG4gICAgICAgIHN0ZXBzOiB7XG4gICAgICAgICAgbGlzdDogdmkuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgICAgICBkYXRhOiBbc3RlcF0sXG4gICAgICAgICAgICBjdXJzb3I6ICduZXh0LXN0ZXAtY3Vyc29yJyxcbiAgICAgICAgICAgIGhhc01vcmU6IHRydWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0gYXMgdW5rbm93biBhcyBXb3JsZDtcbiAgICBjb25zdCB3cml0ZSA9IHZpXG4gICAgICAuc3B5T24ocHJvY2Vzcy5zdGRvdXQsICd3cml0ZScpXG4gICAgICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHRydWUpO1xuXG4gICAgYXdhaXQgbGlzdFN0ZXBzKHdvcmxkLCB7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgcnVuSWQ6ICdydW4tMScsXG4gICAgICBjdXJzb3I6ICdzdGVwLWN1cnNvcicsXG4gICAgICBsaW1pdDogMSxcbiAgICB9KTtcblxuICAgIGV4cGVjdCh3b3JsZC5hbmFseXRpY3M/LnN0ZXBzLmxpc3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgIHJ1bklkOiAncnVuLTEnLFxuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBzb3J0T3JkZXI6ICdkZXNjJyxcbiAgICAgICAgY3Vyc29yOiAnc3RlcC1jdXJzb3InLFxuICAgICAgICBsaW1pdDogMSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KEpTT04ucGFyc2UoU3RyaW5nKHdyaXRlLm1vY2suY2FsbHNbMF1bMF0pKSkudG9FcXVhbChbXG4gICAgICB7XG4gICAgICAgIC4uLnN0ZXAsXG4gICAgICAgIGNyZWF0ZWRBdDogJzIwMjYtMDYtMzBUMDA6MDA6MDAuMDAwWicsXG4gICAgICAgIHVwZGF0ZWRBdDogJzIwMjYtMDYtMzBUMDA6MDA6MDIuMDAwWicsXG4gICAgICAgIHN0YXJ0ZWRBdDogJzIwMjYtMDYtMzBUMDA6MDA6MDEuMDAwWicsXG4gICAgICAgIGNvbXBsZXRlZEF0OiAnMjAyNi0wNi0zMFQwMDowMDowMi4wMDBaJyxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KCdmYWxscyBiYWNrIHRvIHN0b3JhZ2Ugd2hlbiB0aGUgZmlyc3QgYW5hbHl0aWNzIHBhZ2UgaXMgZW1wdHknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RlcCA9IHtcbiAgICAgIHJ1bklkOiAncnVuLTEnLFxuICAgICAgc3RlcElkOiAnc3RlcC0xJyxcbiAgICAgIHN0ZXBOYW1lOiAnc3RlcC8vLi9zcmMvd29ya2Zsb3dzL3Rlc3QvL2RvV29yaycsXG4gICAgICBzdGF0dXM6ICdjb21wbGV0ZWQnLFxuICAgICAgYXR0ZW1wdDogMSxcbiAgICAgIGlucHV0OiB1bmRlZmluZWQsXG4gICAgICBvdXRwdXQ6IHVuZGVmaW5lZCxcbiAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoJzIwMjYtMDYtMzBUMDA6MDA6MDAuMDAwWicpLFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgnMjAyNi0wNi0zMFQwMDowMDowMi4wMDBaJyksXG4gICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCcyMDI2LTA2LTMwVDAwOjAwOjAxLjAwMFonKSxcbiAgICAgIGNvbXBsZXRlZEF0OiBuZXcgRGF0ZSgnMjAyNi0wNi0zMFQwMDowMDowMi4wMDBaJyksXG4gICAgfSBzYXRpc2ZpZXMgU3RlcDtcbiAgICBjb25zdCB3b3JsZCA9IHtcbiAgICAgIGFuYWx5dGljczoge1xuICAgICAgICBzdGVwczoge1xuICAgICAgICAgIGxpc3Q6IHZpLmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICBjdXJzb3I6IG51bGwsXG4gICAgICAgICAgICBoYXNNb3JlOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzdGVwczoge1xuICAgICAgICBsaXN0OiB2aS5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgICBkYXRhOiBbc3RlcF0sXG4gICAgICAgICAgY3Vyc29yOiBudWxsLFxuICAgICAgICAgIGhhc01vcmU6IGZhbHNlLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSBhcyB1bmtub3duIGFzIFdvcmxkO1xuICAgIGNvbnN0IHdyaXRlID0gdmlcbiAgICAgIC5zcHlPbihwcm9jZXNzLnN0ZG91dCwgJ3dyaXRlJylcbiAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gdHJ1ZSk7XG5cbiAgICBhd2FpdCBsaXN0U3RlcHMod29ybGQsIHsganNvbjogdHJ1ZSwgcnVuSWQ6ICdydW4tMScgfSk7XG5cbiAgICBleHBlY3Qod29ybGQuYW5hbHl0aWNzPy5zdGVwcy5saXN0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KHdvcmxkLnN0ZXBzLmxpc3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgIHJ1bklkOiAncnVuLTEnLFxuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBzb3J0T3JkZXI6ICdkZXNjJyxcbiAgICAgICAgY3Vyc29yOiB1bmRlZmluZWQsXG4gICAgICAgIGxpbWl0OiAyMCxcbiAgICAgIH0sXG4gICAgICByZXNvbHZlRGF0YTogJ25vbmUnLFxuICAgIH0pO1xuICAgIGV4cGVjdChKU09OLnBhcnNlKFN0cmluZyh3cml0ZS5tb2NrLmNhbGxzWzBdWzBdKSkpLnRvRXF1YWwoW1xuICAgICAge1xuICAgICAgICAuLi5zdGVwLFxuICAgICAgICBjcmVhdGVkQXQ6ICcyMDI2LTA2LTMwVDAwOjAwOjAwLjAwMFonLFxuICAgICAgICB1cGRhdGVkQXQ6ICcyMDI2LTA2LTMwVDAwOjAwOjAyLjAwMFonLFxuICAgICAgICBzdGFydGVkQXQ6ICcyMDI2LTA2LTMwVDAwOjAwOjAxLjAwMFonLFxuICAgICAgICBjb21wbGV0ZWRBdDogJzIwMjYtMDYtMzBUMDA6MDA6MDIuMDAwWicsXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnbGlzdEV2ZW50cycsICgpID0+IHtcbiAgaXQoJ3Bhc3NlcyBjdXJzb3JzIGFuZCBwcmVzZXJ2ZXMgdGhlIEpTT04gYXJyYXkgb3V0cHV0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgcnVuSWQ6ICdydW4tMScsXG4gICAgICBldmVudElkOiAnZXZlbnQtMScsXG4gICAgICBldmVudFR5cGU6ICdzdGVwX2NvbXBsZXRlZCcsXG4gICAgICBjb3JyZWxhdGlvbklkOiAnc3RlcC0xJyxcbiAgICAgIGVudGl0eUlkOiAnc3RlcC0xJyxcbiAgICAgIHN0ZXBOYW1lOiAnZG9Xb3JrJyxcbiAgICAgIHdvcmtmbG93TmFtZTogJ3dvcmtmbG93Ly8uL3NyYy93b3JrZmxvd3MvdGVzdC8vbXlXb3JrZmxvdycsXG4gICAgICBkZXBsb3ltZW50SWQ6ICdkZXAtMScsXG4gICAgICBzcGVjVmVyc2lvbjogMixcbiAgICAgIHJ1bkNyZWF0ZWRBdDogbmV3IERhdGUoJzIwMjYtMDYtMzBUMDA6MDA6MDAuMDAwWicpLFxuICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgnMjAyNi0wNi0zMFQwMDowMDowMi4wMDBaJyksXG4gICAgICByZWdpb246IG51bGwsXG4gICAgICB2ZXJjZWxJZDogbnVsbCxcbiAgICAgIHJlcXVlc3RJZDogbnVsbCxcbiAgICAgIHJlc3VtZUF0OiBudWxsLFxuICAgICAgcmV0cnlBZnRlcjogbnVsbCxcbiAgICAgIGVycm9yQ29kZTogbnVsbCxcbiAgICAgIHdvcmtmbG93Q29yZVZlcnNpb246IG51bGwsXG4gICAgICBpc1dlYmhvb2s6IGZhbHNlLFxuICAgICAgaXNTeXN0ZW06IGZhbHNlLFxuICAgICAgd29ya2Zsb3dFbmNyeXB0aW9uRW5hYmxlZDogZmFsc2UsXG4gICAgfSBzYXRpc2ZpZXMgQW5hbHl0aWNzRXZlbnQ7XG4gICAgY29uc3Qgd29ybGQgPSB7XG4gICAgICBhbmFseXRpY3M6IHtcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbGlzdDogdmkuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgICAgICBkYXRhOiBbZXZlbnRdLFxuICAgICAgICAgICAgY3Vyc29yOiAnbmV4dC1ldmVudC1jdXJzb3InLFxuICAgICAgICAgICAgaGFzTW9yZTogdHJ1ZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSBhcyB1bmtub3duIGFzIFdvcmxkO1xuICAgIGNvbnN0IHdyaXRlID0gdmlcbiAgICAgIC5zcHlPbihwcm9jZXNzLnN0ZG91dCwgJ3dyaXRlJylcbiAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gdHJ1ZSk7XG5cbiAgICBhd2FpdCBsaXN0RXZlbnRzKHdvcmxkLCB7XG4gICAgICBqc29uOiB0cnVlLFxuICAgICAgcnVuSWQ6ICdydW4tMScsXG4gICAgICBjdXJzb3I6ICdldmVudC1jdXJzb3InLFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG5cbiAgICBleHBlY3Qod29ybGQuYW5hbHl0aWNzPy5ldmVudHMubGlzdCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgcnVuSWQ6ICdydW4tMScsXG4gICAgICBjb3JyZWxhdGlvbklkOiB1bmRlZmluZWQsXG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHNvcnRPcmRlcjogJ2Rlc2MnLFxuICAgICAgICBjdXJzb3I6ICdldmVudC1jdXJzb3InLFxuICAgICAgICBsaW1pdDogMSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KEpTT04ucGFyc2UoU3RyaW5nKHdyaXRlLm1vY2suY2FsbHNbMF1bMF0pKSkudG9FcXVhbChbXG4gICAgICB7XG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBydW5DcmVhdGVkQXQ6ICcyMDI2LTA2LTMwVDAwOjAwOjAwLjAwMFonLFxuICAgICAgICBjcmVhdGVkQXQ6ICcyMDI2LTA2LTMwVDAwOjAwOjAyLjAwMFonLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoJ2ZhbGxzIGJhY2sgdG8gc3RvcmFnZSB3aGVuIHRoZSBmaXJzdCBhbmFseXRpY3MgcGFnZSBpcyBlbXB0eScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIHJ1bklkOiAncnVuLTEnLFxuICAgICAgZXZlbnRJZDogJ2V2ZW50LTEnLFxuICAgICAgZXZlbnRUeXBlOiAnc3RlcF9jb21wbGV0ZWQnLFxuICAgICAgY29ycmVsYXRpb25JZDogJ3N0ZXAtMScsXG4gICAgICBldmVudERhdGE6IHtcbiAgICAgICAgc3RlcE5hbWU6ICdkb1dvcmsnLFxuICAgICAgICByZXN1bHQ6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCcyMDI2LTA2LTMwVDAwOjAwOjAyLjAwMFonKSxcbiAgICB9IGFzIHVua25vd24gYXMgRXZlbnQ7XG4gICAgY29uc3Qgd29ybGQgPSB7XG4gICAgICBhbmFseXRpY3M6IHtcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbGlzdDogdmkuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgIGN1cnNvcjogbnVsbCxcbiAgICAgICAgICAgIGhhc01vcmU6IGZhbHNlLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBsaXN0OiB2aS5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgICBkYXRhOiBbZXZlbnRdLFxuICAgICAgICAgIGN1cnNvcjogbnVsbCxcbiAgICAgICAgICBoYXNNb3JlOiBmYWxzZSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0gYXMgdW5rbm93biBhcyBXb3JsZDtcbiAgICBjb25zdCB3cml0ZSA9IHZpXG4gICAgICAuc3B5T24ocHJvY2Vzcy5zdGRvdXQsICd3cml0ZScpXG4gICAgICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHRydWUpO1xuXG4gICAgYXdhaXQgbGlzdEV2ZW50cyh3b3JsZCwgeyBqc29uOiB0cnVlLCBydW5JZDogJ3J1bi0xJyB9KTtcblxuICAgIGV4cGVjdCh3b3JsZC5hbmFseXRpY3M/LmV2ZW50cy5saXN0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KHdvcmxkLmV2ZW50cy5saXN0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICBydW5JZDogJ3J1bi0xJyxcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgc29ydE9yZGVyOiAnZGVzYycsXG4gICAgICAgIGN1cnNvcjogdW5kZWZpbmVkLFxuICAgICAgICBsaW1pdDogMjAsXG4gICAgICB9LFxuICAgICAgcmVzb2x2ZURhdGE6ICdub25lJyxcbiAgICB9KTtcbiAgICBleHBlY3QoSlNPTi5wYXJzZShTdHJpbmcod3JpdGUubW9jay5jYWxsc1swXVswXSkpKS50b0VxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGNyZWF0ZWRBdDogJzIwMjYtMDYtMzBUMDA6MDA6MDIuMDAwWicsXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnbGlzdFNsZWVwcycsICgpID0+IHtcbiAgY29uc3Qgd2FpdCA9IHtcbiAgICBydW5JZDogJ3J1bi0xJyxcbiAgICB3YWl0SWQ6ICd3YWl0LTEnLFxuICAgIHN0YXR1czogJ3dhaXRpbmcnLFxuICAgIHJlc3VtZUF0OiBuZXcgRGF0ZSgnMjAyNi0wNi0zMFQwMDowMTowMC4wMDBaJyksXG4gICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgnMjAyNi0wNi0zMFQwMDowMDowMC4wMDBaJyksXG4gICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgnMjAyNi0wNi0zMFQwMDowMDowMC4wMDBaJyksXG4gICAgY29tcGxldGVkQXQ6IG51bGwsXG4gICAgd29ya2Zsb3dDb3JlVmVyc2lvbjogbnVsbCxcbiAgICB3b3JrZmxvd0VuY3J5cHRpb25FbmFibGVkOiBmYWxzZSxcbiAgfSBzYXRpc2ZpZXMgQW5hbHl0aWNzV2FpdDtcbiAgY29uc3QgcGFnZUluZm8gPSB7XG4gICAgY3VycmVudExvb2tiYWNrRGF5czogMixcbiAgICBtYXhMb29rYmFja0RheXM6IDMwLFxuICAgIGN1cnJlbnRXaW5kb3dTdGFydDogbmV3IERhdGUoJzIwMjYtMDYtMjhUMDA6MDA6MDAuMDAwWicpLFxuICAgIG1heFdpbmRvd1N0YXJ0OiBuZXcgRGF0ZSgnMjAyNi0wNi0wMVQwMDowMDowMC4wMDBaJyksXG4gICAgdXBncmFkZUF2YWlsYWJsZTogdHJ1ZSxcbiAgfTtcblxuICBpdCgncGFzc2VzIGN1cnNvcnMgYW5kIHByZXNlcnZlcyB0aGUgSlNPTiBhcnJheSBvdXRwdXQgdGhyb3VnaCBhbmFseXRpY3MnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgd29ybGQgPSB7XG4gICAgICBhbmFseXRpY3M6IHtcbiAgICAgICAgd2FpdHM6IHtcbiAgICAgICAgICBsaXN0OiB2aS5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgICAgIGRhdGE6IFt3YWl0XSxcbiAgICAgICAgICAgIGN1cnNvcjogJ25leHQtd2FpdC1jdXJzb3InLFxuICAgICAgICAgICAgaGFzTW9yZTogdHJ1ZSxcbiAgICAgICAgICAgIHBhZ2VJbmZvLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9IGFzIHVua25vd24gYXMgV29ybGQ7XG4gICAgY29uc3Qgd3JpdGUgPSB2aVxuICAgICAgLnNweU9uKHByb2Nlc3Muc3Rkb3V0LCAnd3JpdGUnKVxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB0cnVlKTtcblxuICAgIGF3YWl0IGxpc3RTbGVlcHMod29ybGQsIHtcbiAgICAgIGpzb246IHRydWUsXG4gICAgICBydW5JZDogJ3J1bi0xJyxcbiAgICAgIGN1cnNvcjogJ3dhaXQtY3Vyc29yJyxcbiAgICAgIGxpbWl0OiAxLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KHdvcmxkLmFuYWx5dGljcz8ud2FpdHMubGlzdCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgcnVuSWQ6ICdydW4tMScsXG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHNvcnRPcmRlcjogJ2Rlc2MnLFxuICAgICAgICBjdXJzb3I6ICd3YWl0LWN1cnNvcicsXG4gICAgICAgIGxpbWl0OiAxLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBleHBlY3QoSlNPTi5wYXJzZShTdHJpbmcod3JpdGUubW9jay5jYWxsc1swXVswXSkpKS50b0VxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgLi4ud2FpdCxcbiAgICAgICAgcmVzdW1lQXQ6ICcyMDI2LTA2LTMwVDAwOjAxOjAwLjAwMFonLFxuICAgICAgICBjcmVhdGVkQXQ6ICcyMDI2LTA2LTMwVDAwOjAwOjAwLjAwMFonLFxuICAgICAgICB1cGRhdGVkQXQ6ICcyMDI2LTA2LTMwVDAwOjAwOjAwLjAwMFonLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoJ3N1cmZhY2VzIHRoZSBvYnNlcnZhYmlsaXR5IHVwZ3JhZGUgaGludCBpbiB0YWJsZSBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHdvcmxkID0ge1xuICAgICAgYW5hbHl0aWNzOiB7XG4gICAgICAgIHdhaXRzOiB7XG4gICAgICAgICAgbGlzdDogdmkuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgICAgICBkYXRhOiBbd2FpdF0sXG4gICAgICAgICAgICBjdXJzb3I6IG51bGwsXG4gICAgICAgICAgICBoYXNNb3JlOiBmYWxzZSxcbiAgICAgICAgICAgIHBhZ2VJbmZvLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9IGFzIHVua25vd24gYXMgV29ybGQ7XG4gICAgY29uc3QgbG9nID0gdmkuc3B5T24oY29uc29sZSwgJ2xvZycpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB1bmRlZmluZWQpO1xuXG4gICAgYXdhaXQgbGlzdFNsZWVwcyh3b3JsZCwgeyBydW5JZDogJ3J1bi0xJyB9KTtcblxuICAgIGV4cGVjdChsb2cubW9jay5jYWxscy5mbGF0KCkuam9pbignXFxuJykpLnRvQ29udGFpbihcbiAgICAgICdVcGdyYWRlIE9ic2VydmFiaWxpdHkgUGx1cydcbiAgICApO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -26,7 +26,16 @@ export interface PageData<T> {
|
|
|
26
26
|
data: T[];
|
|
27
27
|
cursor: string | null | undefined;
|
|
28
28
|
hasMore: boolean;
|
|
29
|
+
pageInfo?: AnalyticsPageInfo;
|
|
29
30
|
}
|
|
31
|
+
export interface AnalyticsPageInfo {
|
|
32
|
+
currentLookbackDays: number;
|
|
33
|
+
maxLookbackDays: number;
|
|
34
|
+
currentWindowStart: Date | string;
|
|
35
|
+
maxWindowStart: Date | string;
|
|
36
|
+
upgradeAvailable: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare const getPageInfoUpgradeHint: (pageInfo: AnalyticsPageInfo | undefined) => string | undefined;
|
|
30
39
|
/**
|
|
31
40
|
* Generic pagination handler for list operations
|
|
32
41
|
*/
|
|
@@ -42,7 +51,7 @@ export interface ListPaginationOptions<TData> {
|
|
|
42
51
|
/**
|
|
43
52
|
* Display function that renders the current page
|
|
44
53
|
*/
|
|
45
|
-
displayPage: (data: TData[], pageIndex: number) => void | Promise<void>;
|
|
54
|
+
displayPage: (data: TData[], pageIndex: number, page: PageData<TData>) => void | Promise<void>;
|
|
46
55
|
/**
|
|
47
56
|
* Optional callback for when fetching starts
|
|
48
57
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/pagination.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,eAAe,EACtB,WAAW,mBAAmB,KAC7B,CAAC,MAAM,IAAI,CAwDb,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO,eAAe,SAsBzD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/pagination.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,eAAe,EACtB,WAAW,mBAAmB,KAC7B,CAAC,MAAM,IAAI,CAwDb,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO,eAAe,SAsBzD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,IAAI,GAAG,MAAM,CAAC;IAClC,cAAc,EAAE,IAAI,GAAG,MAAM,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,sBAAsB,GACjC,UAAU,iBAAiB,GAAG,SAAS,KACtC,MAAM,GAAG,SASX,CAAC;AAWF;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,KAAK;IAC1C;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpE;;OAEG;IACH,WAAW,EAAE,CACX,IAAI,EAAE,KAAK,EAAE,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAClB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3C;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAC7C,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAiJf"}
|
|
@@ -78,6 +78,19 @@ export const showPaginationState = (state) => {
|
|
|
78
78
|
parts.push('[q] Quit (or Ctrl+C)');
|
|
79
79
|
logger.log(`\n${parts.join(' | ')}`);
|
|
80
80
|
};
|
|
81
|
+
export const getPageInfoUpgradeHint = (pageInfo) => {
|
|
82
|
+
if (!pageInfo?.upgradeAvailable ||
|
|
83
|
+
pageInfo.currentLookbackDays >= pageInfo.maxLookbackDays) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
return `Showing the last ${pageInfo.currentLookbackDays} days of workflow observability data. Upgrade Observability Plus to query up to ${pageInfo.maxLookbackDays} days.`;
|
|
87
|
+
};
|
|
88
|
+
const showPageInfoUpgradeHint = (pageInfo) => {
|
|
89
|
+
const hint = getPageInfoUpgradeHint(pageInfo);
|
|
90
|
+
if (hint) {
|
|
91
|
+
logger.info(hint);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
81
94
|
/**
|
|
82
95
|
* Setup pagination for list operations with page caching
|
|
83
96
|
*/
|
|
@@ -103,7 +116,8 @@ export async function setupListPagination(options) {
|
|
|
103
116
|
if (enableInteractive) {
|
|
104
117
|
console.clear();
|
|
105
118
|
}
|
|
106
|
-
await displayPage(page.data, index);
|
|
119
|
+
await displayPage(page.data, index, page);
|
|
120
|
+
showPageInfoUpgradeHint(page.pageInfo);
|
|
107
121
|
return page;
|
|
108
122
|
};
|
|
109
123
|
// Fetch and display first page
|
|
@@ -135,7 +149,8 @@ export async function setupListPagination(options) {
|
|
|
135
149
|
if (enableInteractive) {
|
|
136
150
|
console.clear();
|
|
137
151
|
}
|
|
138
|
-
await displayPage(cachedPage.data, pageIndex);
|
|
152
|
+
await displayPage(cachedPage.data, pageIndex, cachedPage);
|
|
153
|
+
showPageInfoUpgradeHint(cachedPage.pageInfo);
|
|
139
154
|
paginationState.cursor = cachedPage.cursor;
|
|
140
155
|
paginationState.hasMore = cachedPage.hasMore;
|
|
141
156
|
paginationState.hasPrevious = pageIndex > 0;
|
|
@@ -177,7 +192,8 @@ export async function setupListPagination(options) {
|
|
|
177
192
|
if (enableInteractive) {
|
|
178
193
|
console.clear();
|
|
179
194
|
}
|
|
180
|
-
await displayPage(prevPage.data, pageIndex);
|
|
195
|
+
await displayPage(prevPage.data, pageIndex, prevPage);
|
|
196
|
+
showPageInfoUpgradeHint(prevPage.pageInfo);
|
|
181
197
|
paginationState.cursor = prevPage.cursor;
|
|
182
198
|
paginationState.hasMore = prevPage.hasMore;
|
|
183
199
|
paginationState.hasPrevious = pageIndex > 0;
|
|
@@ -196,4 +212,4 @@ export async function setupListPagination(options) {
|
|
|
196
212
|
// Keep process alive
|
|
197
213
|
return new Promise(() => { });
|
|
198
214
|
}
|
|
199
|
-
//# sourceMappingURL=pagination.js.map
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaW5zcGVjdC9wYWdpbmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFpQnBEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FDckMsS0FBc0IsRUFDdEIsU0FBOEIsRUFDaEIsRUFBRTtJQUNoQixJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUNyQixPQUFPLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtJQUM1QyxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixRQUFRLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFFLEdBQVEsRUFBRSxFQUFFO1FBQ3pELElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUVqQixjQUFjO1FBQ2QsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZELFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixJQUNFLENBQUMsR0FBRyxDQUFDLElBQUks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QUFXLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDNUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxlQUFlLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQzFDLGdEQUFnRDtnQkFDaEQsZUFBZSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMxRSxDQUFDO1lBRUQsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDWCxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVILHFCQUFxQjtJQUNyQixPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVyYWN0aXZlIHBhZ2luYXRpb24gZm9yIENMSSB0YWJsZXNcbiAqL1xuaW1wb3J0IHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vY29uZmlnL2xvZy5qcyc7XG5pbXBvcnQgeyBpc0ludGVyYWN0aXZlIH0gZnJvbSAnLi90ZXJtaW5hbC11dGlscy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvblN0YXRlIHtcbiAgY3Vyc29yOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBoYXNNb3JlOiBib29sZWFuO1xuICBoYXNQcmV2aW91czogYm9vbGVhbjtcbiAgY3VycmVudFBhZ2U6IG51bWJlcjtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xuICBoYXNNb3JlUGFnZXNBdmFpbGFibGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbkNhbGxiYWNrcyB7XG4gIG9uTmV4dDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgb25QcmV2aW91czogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgb25FeGl0OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFNldHVwIGludGVyYWN0aXZlIHBhZ2luYXRpb24gbGlzdGVuZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHNldHVwUGFnaW5hdGlvbkxpc3RlbmVyID0gKFxuICBzdGF0ZTogUGFnaW5hdGlvblN0YXRlLFxuICBjYWxsYmFja3M6IFBhZ2luYXRpb25DYWxsYmFja3Ncbik6ICgoKSA9PiB2b2lkKSA9PiB7XG4gIGlmICghaXNJbnRlcmFjdGl2ZSgpKSB7XG4gICAgcmV0dXJuICgpID0+IHt9OyAvLyBOby1vcCBjbGVhbnVwIGZ1bmN0aW9uXG4gIH1cblxuICAvLyBFbmFibGUgcmF3IG1vZGUgZm9yIGltbWVkaWF0ZSBrZXkgY2FwdHVyZVxuICBpZiAocHJvY2Vzcy5zdGRpbi5pc1RUWSkge1xuICAgIHJlYWRsaW5lLmVtaXRLZXlwcmVzc0V2ZW50cyhwcm9jZXNzLnN0ZGluKTtcbiAgICBwcm9jZXNzLnN0ZGluLnNldFJhd01vZGUodHJ1ZSk7XG4gIH1cblxuICBjb25zdCBrZXlwcmVzc0hhbmRsZXIgPSBhc3luYyAoX2NodW5rOiBzdHJpbmcsIGtleTogYW55KSA9PiB7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcblxuICAgIC8vIEhhbmRsZSBleGl0XG4gICAgaWYgKGtleS5uYW1lID09PSAncScgfHwgKGtleS5jdHJsICYmIGtleS5uYW1lID09PSAnYycpKSB7XG4gICAgICBjYWxsYmFja3Mub25FeGl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIG5leHQgcGFnZVxuICAgIGlmIChcbiAgICAgIChrZXkubmFtZSA9PT0gJ24nICYmICFrZXkuY3RybCkgfHxcbiAgICAgIGtleS5uYW1lID09PSAncmlnaHQnIHx8XG4gICAgICBrZXkubmFtZSA9PT0gJ2Rvd24nXG4gICAgKSB7XG4gICAgICBpZiAoc3RhdGUuaGFzTW9yZSkge1xuICAgICAgICBhd2FpdCBjYWxsYmFja3Mub25OZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIud2FybignTm8gbW9yZSBwYWdlcyBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJldmlvdXMgcGFnZVxuICAgIGlmIChcbiAgICAgIChrZXkubmFtZSA9PT0gJ3AnICYmICFrZXkuY3RybCkgfHxcbiAgICAgIGtleS5uYW1lID09PSAnbGVmdCcgfHxcbiAgICAgIGtleS5uYW1lID09PSAndXAnXG4gICAgKSB7XG4gICAgICAvLyBBbHdheXMgYWxsb3cgZ29pbmcgXCJwcmV2aW91c1wiIC0gb24gZmlyc3QgcGFnZSBpdCByZWxvYWRzXG4gICAgICBhd2FpdCBjYWxsYmFja3Mub25QcmV2aW91cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzLnN0ZGluLm9uKCdrZXlwcmVzcycsIGtleXByZXNzSGFuZGxlcik7XG5cbiAgLy8gUmV0dXJuIGNsZWFudXAgZnVuY3Rpb25cbiAgcmV0dXJuICgpID0+IHtcbiAgICBwcm9jZXNzLnN0ZGluLm9mZigna2V5cHJlc3MnLCBrZXlwcmVzc0hhbmRsZXIpO1xuICAgIGlmIChwcm9jZXNzLnN0ZGluLmlzVFRZICYmIHByb2Nlc3Muc3RkaW4uaXNSYXcpIHtcbiAgICAgIHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgfVxuICAgIHByb2Nlc3Muc3RkaW4ucGF1c2UoKTtcbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBwYWdpbmF0aW9uIHN0YXRlIGluZm9cbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dQYWdpbmF0aW9uU3RhdGUgPSAoc3RhdGU6IFBhZ2luYXRpb25TdGF0ZSkgPT4ge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcblxuICAvLyBTaG93IHBhZ2UgaW5kaWNhdG9yXG4gIC8vIFVzZSBoYXNNb3JlUGFnZXNBdmFpbGFibGUgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSB1bmtub3duIHBhZ2VzIGJleW9uZCB3aGF0IHdlJ3ZlIGxvYWRlZFxuICBjb25zdCBwYWdlSW5kaWNhdG9yID0gc3RhdGUuaGFzTW9yZVBhZ2VzQXZhaWxhYmxlXG4gICAgPyBgUGFnZSAke3N0YXRlLmN1cnJlbnRQYWdlfSBvZiAke3N0YXRlLnRvdGFsUGFnZXN9K2BcbiAgICA6IGBQYWdlICR7c3RhdGUuY3VycmVudFBhZ2V9IG9mICR7c3RhdGUudG90YWxQYWdlc31gO1xuICBwYXJ0cy5wdXNoKHBhZ2VJbmRpY2F0b3IpO1xuXG4gIGlmIChzdGF0ZS5oYXNQcmV2aW91cykge1xuICAgIHBhcnRzLnB1c2goJ1twXSBQcmV2aW91cycpO1xuICB9IGVsc2Uge1xuICAgIHBhcnRzLnB1c2goJ1twXSBSZWxvYWQnKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5oYXNNb3JlKSB7XG4gICAgcGFydHMucHVzaCgnW25dIE5leHQnKTtcbiAgfVxuXG4gIHBhcnRzLnB1c2goJ1txXSBRdWl0IChvciBDdHJsK0MpJyk7XG4gIGxvZ2dlci5sb2coYFxcbiR7cGFydHMuam9pbignIHwgJyl9YCk7XG59O1xuXG4vKipcbiAqIFBhZ2UgZGF0YSBzdHJ1Y3R1cmUgZm9yIGNhY2hpbmcgcGFnaW5hdGVkIHJlc3VsdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlRGF0YTxUPiB7XG4gIGRhdGE6IFRbXTtcbiAgY3Vyc29yOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBoYXNNb3JlOiBib29sZWFuO1xuICBwYWdlSW5mbz86IEFuYWx5dGljc1BhZ2VJbmZvO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFuYWx5dGljc1BhZ2VJbmZvIHtcbiAgY3VycmVudExvb2tiYWNrRGF5czogbnVtYmVyO1xuICBtYXhMb29rYmFja0RheXM6IG51bWJlcjtcbiAgY3VycmVudFdpbmRvd1N0YXJ0OiBEYXRlIHwgc3RyaW5nO1xuICBtYXhXaW5kb3dTdGFydDogRGF0ZSB8IHN0cmluZztcbiAgdXBncmFkZUF2YWlsYWJsZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBhZ2VJbmZvVXBncmFkZUhpbnQgPSAoXG4gIHBhZ2VJbmZvOiBBbmFseXRpY3NQYWdlSW5mbyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKFxuICAgICFwYWdlSW5mbz8udXBncmFkZUF2YWlsYWJsZSB8fFxuICAgIHBhZ2VJbmZvLmN1cnJlbnRMb29rYmFja0RheXMgPj0gcGFnZUluZm8ubWF4TG9va2JhY2tEYXlzXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gYFNob3dpbmcgdGhlIGxhc3QgJHtwYWdlSW5mby5jdXJyZW50TG9va2JhY2tEYXlzfSBkYXlzIG9mIHdvcmtmbG93IG9ic2VydmFiaWxpdHkgZGF0YS4gVXBncmFkZSBPYnNlcnZhYmlsaXR5IFBsdXMgdG8gcXVlcnkgdXAgdG8gJHtwYWdlSW5mby5tYXhMb29rYmFja0RheXN9IGRheXMuYDtcbn07XG5cbmNvbnN0IHNob3dQYWdlSW5mb1VwZ3JhZGVIaW50ID0gKFxuICBwYWdlSW5mbzogQW5hbHl0aWNzUGFnZUluZm8gfCB1bmRlZmluZWRcbik6IHZvaWQgPT4ge1xuICBjb25zdCBoaW50ID0gZ2V0UGFnZUluZm9VcGdyYWRlSGludChwYWdlSW5mbyk7XG4gIGlmIChoaW50KSB7XG4gICAgbG9nZ2VyLmluZm8oaGludCk7XG4gIH1cbn07XG5cbi8qKlxuICogR2VuZXJpYyBwYWdpbmF0aW9uIGhhbmRsZXIgZm9yIGxpc3Qgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RQYWdpbmF0aW9uT3B0aW9uczxURGF0YT4ge1xuICAvKipcbiAgICogSW5pdGlhbCBjdXJzb3IgZnJvbSBDTEkgb3B0aW9uc1xuICAgKi9cbiAgaW5pdGlhbEN1cnNvcj86IHN0cmluZztcblxuICAvKipcbiAgICogRmV0Y2ggZnVuY3Rpb24gdGhhdCByZXR1cm5zIHBhZ2luYXRlZCBkYXRhXG4gICAqL1xuICBmZXRjaFBhZ2U6IChjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gUHJvbWlzZTxQYWdlRGF0YTxURGF0YT4+O1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB0aGUgY3VycmVudCBwYWdlXG4gICAqL1xuICBkaXNwbGF5UGFnZTogKFxuICAgIGRhdGE6IFREYXRhW10sXG4gICAgcGFnZUluZGV4OiBudW1iZXIsXG4gICAgcGFnZTogUGFnZURhdGE8VERhdGE+XG4gICkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciB3aGVuIGZldGNoaW5nIHN0YXJ0c1xuICAgKi9cbiAgb25GZXRjaFN0YXJ0PzogKHBhZ2VJbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgaW50ZXJhY3RpdmUgcGFnaW5hdGlvbiB3aXRoIGtleWJvYXJkIGNvbnRyb2xzXG4gICAqL1xuICBpbnRlcmFjdGl2ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2V0dXAgcGFnaW5hdGlvbiBmb3IgbGlzdCBvcGVyYXRpb25zIHdpdGggcGFnZSBjYWNoaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cExpc3RQYWdpbmF0aW9uPFREYXRhPihcbiAgb3B0aW9uczogTGlzdFBhZ2luYXRpb25PcHRpb25zPFREYXRhPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgaW5pdGlhbEN1cnNvciwgZmV0Y2hQYWdlLCBkaXNwbGF5UGFnZSwgb25GZXRjaFN0YXJ0LCBpbnRlcmFjdGl2ZSB9ID1cbiAgICBvcHRpb25zO1xuXG4gIC8vIEludGVyYWN0aXZlIG1vZGUgcmVxdWlyZXMgYm90aCBUVFkgc3VwcG9ydCBhbmQgZXhwbGljaXQgLS1pbnRlcmFjdGl2ZSBmbGFnXG4gIGNvbnN0IGVuYWJsZUludGVyYWN0aXZlID0gaW50ZXJhY3RpdmUgJiYgaXNJbnRlcmFjdGl2ZSgpO1xuXG4gIC8vIFBhZ2VzIHN0YWNrIC0gc3RvcmVzIGFsbCBmZXRjaGVkIHBhZ2VzXG4gIGNvbnN0IHBhZ2VzOiBQYWdlRGF0YTxURGF0YT5bXSA9IFtdO1xuXG4gIC8vIEN1cnJlbnQgcGFnZSBpbmRleCAoMC1iYXNlZClcbiAgbGV0IHBhZ2VJbmRleCA9IDA7XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuZCBkaXNwbGF5IGEgc3BlY2lmaWMgcGFnZVxuICAgKi9cbiAgY29uc3Qgc2hvd1BhZ2UgPSBhc3luYyAoaW5kZXg6IG51bWJlciwgY3Vyc29yPzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKG9uRmV0Y2hTdGFydCkge1xuICAgICAgb25GZXRjaFN0YXJ0KGluZGV4KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlID0gYXdhaXQgZmV0Y2hQYWdlKGN1cnNvcik7XG4gICAgcGFnZXNbaW5kZXhdID0gcGFnZTtcbiAgICBwYWdlSW5kZXggPSBpbmRleDtcblxuICAgIC8vIENsZWFyIHNjcmVlbiBmb3Igc3Vic2VxdWVudCBwYWdlcyBpbiBpbnRlcmFjdGl2ZSBtb2RlXG4gICAgaWYgKGVuYWJsZUludGVyYWN0aXZlKSB7XG4gICAgICBjb25zb2xlLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGlzcGxheVBhZ2UocGFnZS5kYXRhLCBpbmRleCwgcGFnZSk7XG4gICAgc2hvd1BhZ2VJbmZvVXBncmFkZUhpbnQocGFnZS5wYWdlSW5mbyk7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH07XG5cbiAgLy8gRmV0Y2ggYW5kIGRpc3BsYXkgZmlyc3QgcGFnZVxuICBjb25zdCBmaXJzdFBhZ2UgPSBhd2FpdCBzaG93UGFnZSgwLCBpbml0aWFsQ3Vyc29yKTtcblxuICAvLyBJbiBub24taW50ZXJhY3RpdmUgbW9kZSwgc2hvdyBpbmZvIGlmIHRoZXJlIGFyZSBtb3JlIHBhZ2VzXG4gIGlmICghZW5hYmxlSW50ZXJhY3RpdmUpIHtcbiAgICBpZiAoZmlyc3RQYWdlLmhhc01vcmUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAnXFxuTW9yZSByZXN1bHRzIGF2YWlsYWJsZS4gVXNlIC0taW50ZXJhY3RpdmUgKC1pKSB0byBwYWdpbmF0ZSB0aHJvdWdoIHJlc3VsdHMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2V0dXAgcGFnaW5hdGlvbiBzdGF0ZVxuICBjb25zdCBwYWdpbmF0aW9uU3RhdGU6IFBhZ2luYXRpb25TdGF0ZSA9IHtcbiAgICBjdXJzb3I6IGZpcnN0UGFnZS5jdXJzb3IsXG4gICAgaGFzTW9yZTogZmlyc3RQYWdlLmhhc01vcmUsXG4gICAgaGFzUHJldmlvdXM6IGZhbHNlLFxuICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIHRvdGFsUGFnZXM6IDEsXG4gICAgaGFzTW9yZVBhZ2VzQXZhaWxhYmxlOiBmaXJzdFBhZ2UuaGFzTW9yZSxcbiAgfTtcblxuICBzaG93UGFnaW5hdGlvblN0YXRlKHBhZ2luYXRpb25TdGF0ZSk7XG5cbiAgY29uc3QgY2xlYW51cCA9IHNldHVwUGFnaW5hdGlvbkxpc3RlbmVyKHBhZ2luYXRpb25TdGF0ZSwge1xuICAgIG9uTmV4dDogYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbmV3UGFnZUluZGV4ID0gcGFnZUluZGV4ICsgMTtcblxuICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgcGFnZSBjYWNoZWRcbiAgICAgIGlmIChwYWdlc1tuZXdQYWdlSW5kZXhdKSB7XG4gICAgICAgIHBhZ2VJbmRleCA9IG5ld1BhZ2VJbmRleDtcbiAgICAgICAgY29uc3QgY2FjaGVkUGFnZSA9IHBhZ2VzW25ld1BhZ2VJbmRleF07XG5cbiAgICAgICAgaWYgKGVuYWJsZUludGVyYWN0aXZlKSB7XG4gICAgICAgICAgY29uc29sZS5jbGVhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgZGlzcGxheVBhZ2UoY2FjaGVkUGFnZS5kYXRhLCBwYWdlSW5kZXgsIGNhY2hlZFBhZ2UpO1xuICAgICAgICBzaG93UGFnZUluZm9VcGdyYWRlSGludChjYWNoZWRQYWdlLnBhZ2VJbmZvKTtcblxuICAgICAgICBwYWdpbmF0aW9uU3RhdGUuY3Vyc29yID0gY2FjaGVkUGFnZS5jdXJzb3I7XG4gICAgICAgIHBhZ2luYXRpb25TdGF0ZS5oYXNNb3JlID0gY2FjaGVkUGFnZS5oYXNNb3JlO1xuICAgICAgICBwYWdpbmF0aW9uU3RhdGUuaGFzUHJldmlvdXMgPSBwYWdlSW5kZXggPiAwO1xuICAgICAgICBwYWdpbmF0aW9uU3RhdGUuY3VycmVudFBhZ2UgPSBwYWdlSW5kZXggKyAxO1xuICAgICAgICBwYWdpbmF0aW9uU3RhdGUudG90YWxQYWdlcyA9IHBhZ2VzLmxlbmd0aDtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxhc3QgcGFnZSBpbiBjYWNoZSBoYXMgbW9yZSBkYXRhXG4gICAgICAgIHBhZ2luYXRpb25TdGF0ZS5oYXNNb3JlUGFnZXNBdmFpbGFibGUgPSBwYWdlc1twYWdlcy5sZW5ndGggLSAxXS5oYXNNb3JlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmV0Y2ggbmV3IHBhZ2UgdXNpbmcgY3Vyc29yIGZyb20gY3VycmVudCBwYWdlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gcGFnZXNbcGFnZUluZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dFBhZ2UgPSBhd2FpdCBzaG93UGFnZShcbiAgICAgICAgICBuZXdQYWdlSW5kZXgsXG4gICAgICAgICAgY3VycmVudFBhZ2UuY3Vyc29yIHx8IHVuZGVmaW5lZFxuICAgICAgICApO1xuXG4gICAgICAgIHBhZ2luYXRpb25TdGF0ZS5jdXJzb3IgPSBuZXh0UGFnZS5jdXJzb3I7XG4gICAgICAgIHBhZ2luYXRpb25TdGF0ZS5oYXNNb3JlID0gbmV4dFBhZ2UuaGFzTW9yZTtcbiAgICAgICAgcGFnaW5hdGlvblN0YXRlLmhhc1ByZXZpb3VzID0gcGFnZUluZGV4ID4gMDtcbiAgICAgICAgcGFnaW5hdGlvblN0YXRlLmN1cnJlbnRQYWdlID0gcGFnZUluZGV4ICsgMTtcbiAgICAgICAgcGFnaW5hdGlvblN0YXRlLnRvdGFsUGFnZXMgPSBwYWdlcy5sZW5ndGg7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0IHBhZ2UgaW4gY2FjaGUgaGFzIG1vcmUgZGF0YVxuICAgICAgICBwYWdpbmF0aW9uU3RhdGUuaGFzTW9yZVBhZ2VzQXZhaWxhYmxlID0gcGFnZXNbcGFnZXMubGVuZ3RoIC0gMV0uaGFzTW9yZTtcbiAgICAgIH1cblxuICAgICAgc2hvd1BhZ2luYXRpb25TdGF0ZShwYWdpbmF0aW9uU3RhdGUpO1xuICAgIH0sXG4gICAgb25QcmV2aW91czogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gU3BlY2lhbCBjYXNlOiBvbiBmaXJzdCBwYWdlLCByZWxvYWRcbiAgICAgIGlmIChwYWdlSW5kZXggPT09IDApIHtcbiAgICAgICAgcGFnZXMubGVuZ3RoID0gMDsgLy8gQ2xlYXIgY2FjaGVcbiAgICAgICAgY29uc3QgcmVsb2FkZWRQYWdlID0gYXdhaXQgc2hvd1BhZ2UoMCwgaW5pdGlhbEN1cnNvcik7XG5cbiAgICAgICAgcGFnaW5hdGlvblN0YXRlLmN1cnNvciA9IHJlbG9hZGVkUGFnZS5jdXJzb3I7XG4gICAgICAgIHBhZ2luYXRpb25TdGF0ZS5oYXNNb3JlID0gcmVsb2FkZWRQYWdlLmhhc01vcmU7XG4gICAgICAgIHBhZ2luYXRpb25TdGF0ZS5oYXNQcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICBwYWdpbmF0aW9uU3RhdGUuY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICBwYWdpbmF0aW9uU3RhdGUudG90YWxQYWdlcyA9IDE7XG4gICAgICAgIHBhZ2luYXRpb25TdGF0ZS5oYXNNb3JlUGFnZXNBdmFpbGFibGUgPSByZWxvYWRlZFBhZ2UuaGFzTW9yZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEdvIHRvIHByZXZpb3VzIGNhY2hlZCBwYWdlXG4gICAgICAgIHBhZ2VJbmRleC0tO1xuICAgICAgICBjb25zdCBwcmV2UGFnZSA9IHBhZ2VzW3BhZ2VJbmRleF07XG5cbiAgICAgICAgaWYgKGVuYWJsZUludGVyYWN0aXZlKSB7XG4gICAgICAgICAgY29uc29sZS5jbGVhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgZGlzcGxheVBhZ2UocHJldlBhZ2UuZGF0YSwgcGFnZUluZGV4LCBwcmV2UGFnZSk7XG4gICAgICAgIHNob3dQYWdlSW5mb1VwZ3JhZGVIaW50KHByZXZQYWdlLnBhZ2VJbmZvKTtcblxuICAgICAgICBwYWdpbmF0aW9uU3RhdGUuY3Vyc29yID0gcHJldlBhZ2UuY3Vyc29yO1xuICAgICAgICBwYWdpbmF0aW9uU3RhdGUuaGFzTW9yZSA9IHByZXZQYWdlLmhhc01vcmU7XG4gICAgICAgIHBhZ2luYXRpb25TdGF0ZS5oYXNQcmV2aW91cyA9IHBhZ2VJbmRleCA+IDA7XG4gICAgICAgIHBhZ2luYXRpb25TdGF0ZS5jdXJyZW50UGFnZSA9IHBhZ2VJbmRleCArIDE7XG4gICAgICAgIHBhZ2luYXRpb25TdGF0ZS50b3RhbFBhZ2VzID0gcGFnZXMubGVuZ3RoO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdCBwYWdlIGluIGNhY2hlIGhhcyBtb3JlIGRhdGFcbiAgICAgICAgcGFnaW5hdGlvblN0YXRlLmhhc01vcmVQYWdlc0F2YWlsYWJsZSA9IHBhZ2VzW3BhZ2VzLmxlbmd0aCAtIDFdLmhhc01vcmU7XG4gICAgICB9XG5cbiAgICAgIHNob3dQYWdpbmF0aW9uU3RhdGUocGFnaW5hdGlvblN0YXRlKTtcbiAgICB9LFxuICAgIG9uRXhpdDogKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIEtlZXAgcHJvY2VzcyBhbGl2ZVxuICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pO1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/run.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/lib/inspect/run.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAI7C,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAaD,eAAO,MAAM,QAAQ,GACnB,OAAO,KAAK,EACZ,qBAAqB,MAAM,EAC3B,MAAM,aAAa,EACnB,MAAM,MAAM,EAAE,kBAuFf,CAAC"}
|