@workflow/web-shared 5.0.0-beta.23 → 5.0.0-beta.24
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/components/workflow-traces/trace-span-construction.d.ts +3 -0
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +27 -8
- package/dist/lib/event-materialization.d.ts +3 -0
- package/dist/lib/event-materialization.d.ts.map +1 -1
- package/dist/lib/event-materialization.js +13 -7
- package/package.json +2 -2
- package/src/components/workflow-traces/trace-span-construction.ts +71 -31
- package/src/lib/event-materialization.ts +68 -40
|
@@ -16,6 +16,7 @@ export declare const waitEventsToWaitEntity: (events: Event[]) => {
|
|
|
16
16
|
waitId: string;
|
|
17
17
|
runId: string;
|
|
18
18
|
createdAt: Date;
|
|
19
|
+
occurredAt?: Date;
|
|
19
20
|
resumeAt?: Date;
|
|
20
21
|
completedAt?: Date;
|
|
21
22
|
} | null;
|
|
@@ -31,6 +32,7 @@ export declare const stepEventsToStepEntity: (events: Event[]) => {
|
|
|
31
32
|
attempt: number;
|
|
32
33
|
createdAt: Date;
|
|
33
34
|
updatedAt: Date;
|
|
35
|
+
occurredAt?: Date;
|
|
34
36
|
startedAt?: Date;
|
|
35
37
|
completedAt?: Date;
|
|
36
38
|
specVersion?: number;
|
|
@@ -44,6 +46,7 @@ export declare const hookEventsToHookEntity: (events: Event[]) => {
|
|
|
44
46
|
runId: string;
|
|
45
47
|
token?: string;
|
|
46
48
|
createdAt: Date;
|
|
49
|
+
occurredAt?: Date;
|
|
47
50
|
receivedCount: number;
|
|
48
51
|
lastReceivedAt?: Date;
|
|
49
52
|
disposedAt?: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-span-construction.d.ts","sourceRoot":"","sources":["../../../src/components/workflow-traces/trace-span-construction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAI7D,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC;
|
|
1
|
+
{"version":3,"file":"trace-span-construction.d.ts","sourceRoot":"","sources":["../../../src/components/workflow-traces/trace-span-construction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAI7D,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC;AAuCF;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,KAAK,EAAE,EACf,WAAW,UAAO,GACjB,SAAS,EAAE,CAgBb;AAED,eAAO,MAAM,sBAAsB,GACjC,QAAQ,KAAK,EAAE,KACd;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB,GAAG,IAoBH,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,KAAK,EAAE,EACf,UAAU,EAAE,IAAI,EAChB,eAAe,OAAa,GAC3B,IAAI,GAAG,IAAI,CAyCb;AAED,eAAO,MAAM,sBAAsB,GACjC,QAAQ,KAAK,EAAE,KACd;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,IAiEH,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAsD7E;AAED,eAAO,MAAM,sBAAsB,GACjC,QAAQ,KAAK,EAAE,KACd;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB,GAAG,IA0BH,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CA6B7E;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,KAAK,EAAE,EAClB,OAAO,CAAC,EAAE,IAAI,GACb,IAAI,CA2CN"}
|
|
@@ -23,6 +23,20 @@ const MARKER_EVENT_TYPES = new Set([
|
|
|
23
23
|
'wait_completed',
|
|
24
24
|
'attr_set',
|
|
25
25
|
]);
|
|
26
|
+
const findEventByType = (events, eventTypes) => {
|
|
27
|
+
for (const eventType of eventTypes) {
|
|
28
|
+
const event = events.find((e) => e.eventType === eventType);
|
|
29
|
+
if (event)
|
|
30
|
+
return event;
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
};
|
|
34
|
+
const withOccurredAt = (entity, occurredAt) => {
|
|
35
|
+
if (!occurredAt || entity.occurredAt != null) {
|
|
36
|
+
return entity;
|
|
37
|
+
}
|
|
38
|
+
return { ...entity, occurredAt };
|
|
39
|
+
};
|
|
26
40
|
/**
|
|
27
41
|
* Convert workflow events to span events
|
|
28
42
|
* Only includes events that should be displayed as markers
|
|
@@ -48,7 +62,7 @@ export const waitEventsToWaitEntity = (events) => {
|
|
|
48
62
|
return null;
|
|
49
63
|
}
|
|
50
64
|
const completedEvent = events.find((event) => event.eventType === 'wait_completed');
|
|
51
|
-
return {
|
|
65
|
+
return withOccurredAt({
|
|
52
66
|
waitId: startEvent.correlationId,
|
|
53
67
|
runId: startEvent.runId,
|
|
54
68
|
createdAt: startEvent.createdAt,
|
|
@@ -56,7 +70,7 @@ export const waitEventsToWaitEntity = (events) => {
|
|
|
56
70
|
? new Date(startEvent.eventData.resumeAt)
|
|
57
71
|
: undefined,
|
|
58
72
|
completedAt: completedEvent?.createdAt,
|
|
59
|
-
};
|
|
73
|
+
}, startEvent.occurredAt);
|
|
60
74
|
};
|
|
61
75
|
/**
|
|
62
76
|
* Converts a workflow Wait to an OpenTelemetry Span
|
|
@@ -143,7 +157,8 @@ export const stepEventsToStepEntity = (events) => {
|
|
|
143
157
|
if (attempt === 0)
|
|
144
158
|
attempt = 1;
|
|
145
159
|
const lastEvent = events[events.length - 1];
|
|
146
|
-
|
|
160
|
+
const occurrenceEvent = findEventByType(events, ['step_created', 'step_started']) ?? anchorEvent;
|
|
161
|
+
return withOccurredAt({
|
|
147
162
|
stepId: anchorEvent.correlationId ?? '',
|
|
148
163
|
runId: anchorEvent.runId,
|
|
149
164
|
stepName: createdEvent?.eventData?.stepName ?? '',
|
|
@@ -154,7 +169,7 @@ export const stepEventsToStepEntity = (events) => {
|
|
|
154
169
|
startedAt,
|
|
155
170
|
completedAt,
|
|
156
171
|
specVersion: anchorEvent.specVersion,
|
|
157
|
-
};
|
|
172
|
+
}, occurrenceEvent.occurredAt);
|
|
158
173
|
};
|
|
159
174
|
/**
|
|
160
175
|
* Converts step events to an OpenTelemetry Span
|
|
@@ -214,7 +229,7 @@ export const hookEventsToHookEntity = (events) => {
|
|
|
214
229
|
const receivedEvents = events.filter((event) => event.eventType === 'hook_received');
|
|
215
230
|
const disposedEvents = events.filter((event) => event.eventType === 'hook_disposed');
|
|
216
231
|
const lastReceivedEvent = receivedEvents.at(-1);
|
|
217
|
-
return {
|
|
232
|
+
return withOccurredAt({
|
|
218
233
|
hookId: createdEvent.correlationId,
|
|
219
234
|
runId: createdEvent.runId,
|
|
220
235
|
token: createdEvent.eventData?.token,
|
|
@@ -222,7 +237,7 @@ export const hookEventsToHookEntity = (events) => {
|
|
|
222
237
|
receivedCount: receivedEvents.length,
|
|
223
238
|
lastReceivedAt: lastReceivedEvent?.createdAt || undefined,
|
|
224
239
|
disposedAt: disposedEvents.at(-1)?.createdAt || undefined,
|
|
225
|
-
};
|
|
240
|
+
}, createdEvent.occurredAt);
|
|
226
241
|
};
|
|
227
242
|
/**
|
|
228
243
|
* Converts a workflow Hook to an OpenTelemetry Span
|
|
@@ -262,9 +277,13 @@ export function runToSpan(run, runEvents, nowTime) {
|
|
|
262
277
|
// Only embed identification fields — not the full object with
|
|
263
278
|
// input/output/error which may contain non-cloneable types.
|
|
264
279
|
const { input: _i, output: _o, error: _e, ...runIdentity } = run;
|
|
280
|
+
const occurrenceEvent = findEventByType(runEvents, [
|
|
281
|
+
'run_created',
|
|
282
|
+
'run_started',
|
|
283
|
+
]);
|
|
265
284
|
const attributes = {
|
|
266
285
|
resource: 'run',
|
|
267
|
-
data: runIdentity,
|
|
286
|
+
data: withOccurredAt(runIdentity, occurrenceEvent?.occurredAt),
|
|
268
287
|
};
|
|
269
288
|
// Use createdAt as span start time, with activeStartTime for when execution began
|
|
270
289
|
const spanStartTime = new Date(run.createdAt);
|
|
@@ -292,4 +311,4 @@ export function runToSpan(run, runEvents, nowTime) {
|
|
|
292
311
|
: undefined,
|
|
293
312
|
};
|
|
294
313
|
}
|
|
295
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy93b3JrZmxvdy10cmFjZXMvdHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBNEIsSUFBSSxHQUFHLENBQUM7SUFDMUQsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsY0FBYztJQUNkLGVBQWU7SUFDZixhQUFhO0lBQ2IsWUFBWTtJQUNaLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsVUFBVTtDQUNYLENBQUMsQ0FBQztBQUVIOzs7R0FHRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsTUFBZSxFQUNmLFdBQVcsR0FBRyxJQUFJO0lBRWxCLE9BQU8sTUFBTTtTQUNWLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2hCLFdBQVcsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM3RDtTQUNBLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNmLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUztRQUNyQixTQUFTLEVBQUUsY0FBYyxDQUFD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LEdBQUcseUJBQXlCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNELE9BQU87UUFDTCxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUNuRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLHFCQUFxQjtRQUM5QixRQUFRLEVBQUUsS0FBSztRQUNmLE9BQU8sRUFBRSxnQkFBZ0I7UUFDekIsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtRQUNuQixVQUFVLEVBQUUsQ0FBQztRQUNiLFVBQVU7UUFDVixLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU07UUFDTixTQUFTLEVBQUUsY0FBYyxDQUFDLGFBQWEsQ0FBQztRQUN4QyxPQUFPLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUNoQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQztRQUNuRCwwRkFBMEY7UUFDMUYsZUFBZSxFQUNiLGVBQWUsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRTtZQUNwRSxDQUFDLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztZQUNqQyxDQUFDLENBQUMsU0FBUztLQUNoQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRnVuY3Rpb25zIGZvciBjb25zdHJ1Y3RpbmcgT3BlblRlbGVtZXRyeSBzcGFucyBmcm9tIHdvcmtmbG93IGVudGl0aWVzXG4gKi9cblxuaW1wb3J0IHsgcGFyc2VTdGVwTmFtZSwgcGFyc2VXb3JrZmxvd05hbWUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IFNwYW4sIFNwYW5FdmVudCB9IGZyb20gJy4uL3RyYWNlLXZpZXdlci90eXBlcyc7XG5pbXBvcnQgeyBzaG91bGRTaG93VmVydGljYWxMaW5lIH0gZnJvbSAnLi9ldmVudC1jb2xvcnMnO1xuaW1wb3J0IHsgY2FsY3VsYXRlRHVyYXRpb24sIGRhdGVUb090ZWxUaW1lIH0gZnJvbSAnLi90cmFjZS10aW1lLXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IFdPUktGTE9XX0xJQlJBUlkgPSB7XG4gIG5hbWU6ICd3b3JrZmxvdy1kZXZlbG9wbWVudC1raXQnLFxuICB2ZXJzaW9uOiAnNC4wLjAnLFxufTtcblxuLyoqXG4gKiBFdmVudCB0eXBlcyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgdmlzdWFsIG1hcmtlcnMgaW4gdGhlIHRyYWNlIHZpZXdlclxuICovXG5jb25zdCBNQVJLRVJfRVZFTlRfVFlQRVM6IFNldDxFdmVudFsnZXZlbnRUeXBlJ10+ID0gbmV3IFNldChbXG4gICdob29rX2NyZWF0ZWQnLFxuICAnaG9va19yZWNlaXZlZCcsXG4gICdob29rX2Rpc3Bvc2VkJyxcbiAgJ3N0ZXBfc3RhcnRlZCcsXG4gICdzdGVwX3JldHJ5aW5nJyxcbiAgJ3N0ZXBfZmFpbGVkJyxcbiAgJ3J1bl9mYWlsZWQnLFxuICAnd2FpdF9jcmVhdGVkJyxcbiAgJ3dhaXRfY29tcGxldGVkJyxcbiAgJ2F0dHJfc2V0Jyxcbl0pO1xuXG4vKipcbiAqIENvbnZlcnQgd29ya2Zsb3cgZXZlbnRzIHRvIHNwYW4gZXZlbnRzXG4gKiBPbmx5IGluY2x1ZGVzIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgbWFya2Vyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEV2ZW50c1RvU3BhbkV2ZW50cyhcbiAgZXZlbnRzOiBFdmVudFtdLFxuICBmaWx0ZXJUeXBlcyA9IHRydWVcbik6IFNwYW5FdmVudFtdIHtcbiAgcmV0dXJuIGV2ZW50c1xuICAgIC5maWx0ZXIoKGV2ZW50KSA9PlxuICAgICAgZmlsdGVyVHlwZXMgPyBNQVJLRVJfRVZFTlRfVFlQRVMuaGFzKGV2ZW50LmV2ZW50VHlwZSkgOiB0cnVlXG4gICAgKVxuICAgIC5tYXAoKGV2ZW50KSA9PiAoe1xuICAgICAgbmFtZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgdGltZXN0YW1wOiBkYXRlVG9PdGVsVGltZShldmVudC5jcmVhdGVkQXQpLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBldmVudElkOiBldmVudC5ldmVudElkLFxuICAgICAgICBjb3JyZWxhdGlvbklkOiBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICBldmVudERhdGE6ICdldmVudERhdGEnIGluIGV2ZW50ID8gZXZlbnQuZXZlbnREYXRhIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIC8vIENvbnRyb2wgd2hldGhlciB0byBzaG93IHZlcnRpY2FsIGxpbmUgaW4gdGltZWxpbmVcbiAgICAgIHNob3dWZXJ0aWNhbExpbmU6IHNob3VsZFNob3dWZXJ0aWNhbExpbmUoZXZlbnQuZXZlbnRUeXBlKSxcbiAgICB9KSk7XG59XG5cbmV4cG9ydCBjb25zdCB3YWl0RXZlbnRzVG9XYWl0RW50aXR5ID0gKFxuICBldmVudHM6IEV2ZW50W11cbik6IHtcbiAgd2FpdElkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgcmVzdW1lQXQ/OiBEYXRlO1xuICBjb21wbGV0ZWRBdD86IERhdGU7XG59IHwgbnVsbCA9PiB7XG4gIGNvbnN0IHN0YXJ0RXZlbnQgPSBldmVudHMuZmluZCgoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3dhaXRfY3JlYXRlZCcpO1xuICBpZiAoIXN0YXJ0RXZlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjb21wbGV0ZWRFdmVudCA9IGV2ZW50cy5maW5kKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnXG4gICk7XG4gIHJldHVybiB7XG4gICAgd2FpdElkOiBzdGFydEV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgcnVuSWQ6IHN0YXJ0RXZlbnQucnVuSWQsXG4gICAgY3JlYXRlZEF0OiBzdGFydEV2ZW50LmNyZWF0ZWRBdCxcbiAgICByZXN1bWVBdDogc3RhcnRFdmVudC5ldmVudERhdGE/LnJlc3VtZUF0XG4gICAgICA/IG5ldyBEYXRlKHN0YXJ0RXZlbnQuZXZlbnREYXRhLnJlc3VtZUF0KVxuICAgICAgOiB1bmRlZmluZWQsXG4gICAgY29tcGxldGVkQXQ6IGNvbXBsZXRlZEV2ZW50Py5jcmVhdGVkQXQsXG4gIH07XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgd29ya2Zsb3cgV2FpdCB0byBhbiBPcGVuVGVsZW1ldHJ5IFNwYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRUb1NwYW4oXG4gIGV2ZW50czogRXZlbnRbXSxcbiAgbWF4RW5kVGltZTogRGF0ZSxcbiAgZmFsbGJhY2tFbmRUaW1lID0gbWF4RW5kVGltZVxuKTogU3BhbiB8IG51bGwge1xuICBjb25zdCB3YWl0ID0gd2FpdEV2ZW50c1RvV2FpdEVudGl0eShldmVudHMpO1xuICBpZiAoIXdhaXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBzdGFydFRpbWUgPSB3YWl0LmNyZWF0ZWRBdDtcbiAgY29uc3Qgc3RhcnRNcyA9IHN0YXJ0VGltZS5nZXRUaW1lKCk7XG4gIGxldCBlbmRUaW1lID0gd2FpdC5jb21wbGV0ZWRBdDtcbiAgaWYgKCFlbmRUaW1lKSB7XG4gICAgY29uc3QgZmFsbGJhY2tDYXAgPVxuICAgICAgd2FpdC5yZXN1bWVBdCAmJiB3YWl0LnJlc3VtZUF0LmdldFRpbWUoKSA8IGZhbGxiYWNrRW5kVGltZS5nZXRUaW1lKClcbiAgICAgICAgPyB3YWl0LnJlc3VtZUF0XG4gICAgICAgIDogZmFsbGJhY2tFbmRUaW1lO1xuICAgIGVuZFRpbWUgPVxuICAgICAgbWF4RW5kVGltZS5nZXRUaW1lKCkgPiBzdGFydE1zICYmXG4gICAgICBtYXhFbmRUaW1lLmdldFRpbWUoKSA8IGZhbGxiYWNrQ2FwLmdldFRpbWUoKVxuICAgICAgICA/IG1heEVuZFRpbWVcbiAgICAgICAgOiBmYWxsYmFja0NhcDtcbiAgfVxuICBjb25zdCBzdGFydCA9IGRhdGVUb090ZWxUaW1lKHN0YXJ0VGltZSk7XG4gIGNvbnN0IGVuZCA9IGRhdGVUb090ZWxUaW1lKGVuZFRpbWUpO1xuICBjb25zdCBkdXJhdGlvbiA9IGNhbGN1bGF0ZUR1cmF0aW9uKHN0YXJ0VGltZSwgZW5kVGltZSk7XG4gIGNvbnN0IHNwYW5FdmVudHMgPSBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKGV2ZW50cywgZmFsc2UpO1xuICByZXR1cm4ge1xuICAgIHNwYW5JZDogd2FpdC53YWl0SWQsXG4gICAgbmFtZTogJ3NsZWVwJyxcbiAgICBraW5kOiAxLCAvLyBJTlRFUk5BTCBzcGFuIGtpbmRcbiAgICByZXNvdXJjZTogJ3NsZWVwJyxcbiAgICBsaWJyYXJ5OiBXT1JLRkxPV19MSUJSQVJZLFxuICAgIHN0YXR1czogeyBjb2RlOiAwIH0sXG4gICAgdHJhY2VGbGFnczogMSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICByZXNvdXJjZTogJ3NsZWVwJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHdhaXQsIC8vIHdhaXQgaXMgYSBwbGFpbiBvYmplY3QgYnVpbHQgZnJvbSBldmVudHMsIG5vIG5vbi1jbG9uZWFibGUgdHlwZXNcbiAgICB9LFxuICAgIGxpbmtzOiBbXSxcbiAgICBldmVudHM6IHNwYW5FdmVudHMsXG4gICAgZHVyYXRpb24sXG4gICAgc3RhcnRUaW1lOiBzdGFydCxcbiAgICBlbmRUaW1lOiBlbmQsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBzdGVwRXZlbnRzVG9TdGVwRW50aXR5ID0gKFxuICBldmVudHM6IEV2ZW50W11cbik6IHtcbiAgc3RlcElkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHN0ZXBOYW1lOiBzdHJpbmc7XG4gIHN0YXR1czogJ3BlbmRpbmcnIHwgJ3J1bm5pbmcnIHwgJ2NvbXBsZXRlZCcgfCAnZmFpbGVkJyB8ICdjYW5jZWxsZWQnO1xuICBhdHRlbXB0OiBudW1iZXI7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgdXBkYXRlZEF0OiBEYXRlO1xuICBzdGFydGVkQXQ/OiBEYXRlO1xuICBjb21wbGV0ZWRBdD86IERhdGU7XG4gIHNwZWNWZXJzaW9uPzogbnVtYmVyO1xufSB8IG51bGwgPT4ge1xuICBjb25zdCBjcmVhdGVkRXZlbnQgPSBldmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY3JlYXRlZCdcbiAgKTtcblxuICAvLyBWMSBydW5zIGRvbid0IGVtaXQgc3RlcF9jcmVhdGVkIGV2ZW50cy4gRmFsbCBiYWNrIHRvIHRoZSBlYXJsaWVzdCBldmVudFxuICAvLyBpbiB0aGUgZ3JvdXAgc28gd2UgY2FuIHN0aWxsIGJ1aWxkIGEgc3RlcCBzcGFuLlxuICBjb25zdCBhbmNob3JFdmVudCA9IGNyZWF0ZWRFdmVudCA/PyBldmVudHNbMF07XG4gIGlmICghYW5jaG9yRXZlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFdhbGsgZXZlbnRzIGluIG9yZGVyIHRvIGRlcml2ZSBzdGF0dXMsIGF0dGVtcHQgY291bnQsIGFuZCB0aW1lc3RhbXBzLlxuICAvLyBIYW5kbGVzIGJvdGggc3RlcF9yZXRyeWluZyBhbmQgY29uc2VjdXRpdmUgc3RlcF9zdGFydGVkIGFzIHJldHJ5IHNpZ25hbHMuXG4gIGxldCBzdGF0dXM6ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsbGVkJyA9XG4gICAgJ3BlbmRpbmcnO1xuICBsZXQgYXR0ZW1wdCA9IDA7XG4gIGxldCBzdGFydGVkQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG4gIGxldCBjb21wbGV0ZWRBdDogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGUgb2YgZXZlbnRzKSB7XG4gICAgc3dpdGNoIChlLmV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnc3RlcF9zdGFydGVkJzpcbiAgICAgICAgc3RhdHVzID0gJ3J1bm5pbmcnO1xuICAgICAgICBhdHRlbXB0ICs9IDE7XG4gICAgICAgIGlmICghc3RhcnRlZEF0KSBzdGFydGVkQXQgPSBlLmNyZWF0ZWRBdDtcbiAgICAgICAgY29tcGxldGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RlcF9jb21wbGV0ZWQnOlxuICAgICAgICBzdGF0dXMgPSAnY29tcGxldGVkJztcbiAgICAgICAgY29tcGxldGVkQXQgPSBlLmNyZWF0ZWRBdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGVwX2ZhaWxlZCc6XG4gICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xuICAgICAgICBjb21wbGV0ZWRBdCA9IGUuY3JlYXRlZEF0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0ZXBfcmV0cnlpbmcnOlxuICAgICAgICBzdGF0dXMgPSAncGVuZGluZyc7XG4gICAgICAgIGNvbXBsZXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgYXQgbGVhc3QgYXR0ZW1wdCAxIGlmIHdlIG5ldmVyIHNhdyBzdGVwX3N0YXJ0ZWRcbiAgaWYgKGF0dGVtcHQgPT09IDApIGF0dGVtcHQgPSAxO1xuXG4gIGNvbnN0IGxhc3RFdmVudCA9IGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV07XG4gIHJldHVybiB7XG4gICAgc3RlcElkOiBhbmNob3JFdmVudC5jb3JyZWxhdGlvbklkID8/ICcnLFxuICAgIHJ1bklkOiBhbmNob3JFdmVudC5ydW5JZCxcbiAgICBzdGVwTmFtZTogY3JlYXRlZEV2ZW50Py5ldmVudERhdGE/LnN0ZXBOYW1lID8/ICcnLFxuICAgIHN0YXR1cyxcbiAgICBhdHRlbXB0LFxuICAgIGNyZWF0ZWRBdDogYW5jaG9yRXZlbnQuY3JlYXRlZEF0LFxuICAgIHVwZGF0ZWRBdDogbGFzdEV2ZW50Py5jcmVhdGVkQXQgPz8gYW5jaG9yRXZlbnQuY3JlYXRlZEF0LFxuICAgIHN0YXJ0ZWRBdCxcbiAgICBjb21wbGV0ZWRBdCxcbiAgICBzcGVjVmVyc2lvbjogYW5jaG9yRXZlbnQuc3BlY1ZlcnNpb24sXG4gIH07XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHN0ZXAgZXZlbnRzIHRvIGFuIE9wZW5UZWxlbWV0cnkgU3BhblxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RlcFRvU3BhbihzdGVwRXZlbnRzOiBFdmVudFtdLCBtYXhFbmRUaW1lOiBEYXRlKTogU3BhbiB8IG51bGwge1xuICBjb25zdCBzdGVwID0gc3RlcEV2ZW50c1RvU3RlcEVudGl0eShzdGVwRXZlbnRzKTtcbiAgaWYgKCFzdGVwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcGFyc2VkTmFtZSA9IHBhcnNlU3RlcE5hbWUoU3RyaW5nKHN0ZXAuc3RlcE5hbWUpKTtcblxuICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgIHJlc291cmNlOiAnc3RlcCcgYXMgY29uc3QsXG4gICAgZGF0YTogc3RlcCxcbiAgfTtcblxuICBjb25zdCByZXNvdXJjZSA9ICdzdGVwJztcbiAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKHN0ZXAuY29tcGxldGVkQXQgPz8gbWF4RW5kVGltZSk7XG5cbiAgLy8gSW5jbHVkZSBBTEwgY29ycmVsYXRlZCBldmVudHMgb24gdGhlIHNwYW4gc28gdGhlIHNpZGViYXIgZGV0YWlsIHZpZXdcbiAgLy8gY2FuIGRpc3BsYXkgdGhlbS4gVGhlIHRpbWVsaW5lIHVzZXMgdGhlIGBzaG93VmVydGljYWxMaW5lYCBmbGFnIHRvXG4gIC8vIGRldGVybWluZSB3aGljaCBldmVudHMgYXBwZWFyIGFzIG1hcmtlcnMuXG4gIGNvbnN0IGV2ZW50cyA9IGNvbnZlcnRFdmVudHNUb1NwYW5FdmVudHMoc3RlcEV2ZW50cywgZmFsc2UpO1xuXG4gIC8vIFVzZSBjcmVhdGVkQXQgYXMgc3BhbiBzdGFydCB0aW1lLCB3aXRoIGFjdGl2ZVN0YXJ0VGltZSBmb3Igd2hlbiBleGVjdXRpb24gYmVnYW5cbiAgLy8gVGhpcyBhbGxvd3MgdmlzdWFsaXphdGlvbiBvZiB0aGUgXCJxdWV1ZWRcIiBwZXJpb2QgYmVmb3JlIGV4ZWN1dGlvblxuICBjb25zdCBzcGFuU3RhcnRUaW1lID0gbmV3IERhdGUoc3RlcC5jcmVhdGVkQXQpO1xuICBsZXQgYWN0aXZlU3RhcnRUaW1lID0gc3RlcC5zdGFydGVkQXQgPyBuZXcgRGF0ZShzdGVwLnN0YXJ0ZWRBdCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGZpcnN0U3RhcnRFdmVudCA9IHN0ZXBFdmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCdcbiAgKTtcbiAgaWYgKGZpcnN0U3RhcnRFdmVudCkge1xuICAgIC8vIGBzdGVwLnN0YXJ0ZWRBdGAgaXMgdGhlIHNlcnZlci1zaWRlIGNyZWF0aW9uIHRpbWVzdGFtcCwgYW5kIGBldmVudC5jcmVhdGVkQXRgIGlzXG4gICAgLy8gdGhlIGNsaWVudC1zaWRlIGNyZWF0aW9uIHRpbWVzdGFtcC4gRm9yIG5vdywgdG8gYWxpZ24gdGhlIGV2ZW50IG1hcmtlciB3aXRoIHRoZVxuICAgIC8vIGxpbmUgd2Ugc2hvdyBmb3Igc3RlcC5zdGFydGVkQXQsIHdlIG92ZXJ3cml0ZSBoZXJlIHRvIGFsd2F5cyB1c2UgY2xpZW50LXNpZGUgdGltZS5cbiAgICBhY3RpdmVTdGFydFRpbWUgPSBuZXcgRGF0ZShmaXJzdFN0YXJ0RXZlbnQuY3JlYXRlZEF0KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3BhbklkOiBTdHJpbmcoc3RlcC5zdGVwSWQpLFxuICAgIG5hbWU6IHBhcnNlZE5hbWU/LnNob3J0TmFtZSA/PyBTdHJpbmcoc3RlcC5zdGVwTmFtZSksXG4gICAga2luZDogMSwgLy8gSU5URVJOQUwgc3BhbiBraW5kXG4gICAgcmVzb3VyY2UsXG4gICAgbGlicmFyeTogV09SS0ZMT1dfTElCUkFSWSxcbiAgICBzdGF0dXM6IHsgY29kZTogMCB9LFxuICAgIHRyYWNlRmxhZ3M6IDEsXG4gICAgYXR0cmlidXRlcyxcbiAgICBsaW5rczogW10sXG4gICAgZXZlbnRzLFxuICAgIHN0YXJ0VGltZTogZGF0ZVRvT3RlbFRpbWUoc3BhblN0YXJ0VGltZSksXG4gICAgZW5kVGltZTogZGF0ZVRvT3RlbFRpbWUoZW5kVGltZSksXG4gICAgZHVyYXRpb246IGNhbGN1bGF0ZUR1cmF0aW9uKHNwYW5TdGFydFRpbWUsIGVuZFRpbWUpLFxuICAgIC8vIE9ubHkgc2V0IGFjdGl2ZVN0YXJ0VGltZSBpZiBpdCBkaWZmZXJzIGZyb20gc3RhcnRUaW1lIChpLmUuLCB0aGVyZSB3YXMgYSBxdWV1ZWQgcGVyaW9kKVxuICAgIGFjdGl2ZVN0YXJ0VGltZTpcbiAgICAgIGFjdGl2ZVN0YXJ0VGltZSAmJiBhY3RpdmVTdGFydFRpbWUuZ2V0VGltZSgpID4gc3BhblN0YXJ0VGltZS5nZXRUaW1lKClcbiAgICAgICAgPyBkYXRlVG9PdGVsVGltZShhY3RpdmVTdGFydFRpbWUpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgaG9va0V2ZW50c1RvSG9va0VudGl0eSA9IChcbiAgZXZlbnRzOiBFdmVudFtdXG4pOiB7XG4gIGhvb2tJZDogc3RyaW5nO1xuICBydW5JZDogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICByZWNlaXZlZENvdW50OiBudW1iZXI7XG4gIGxhc3RSZWNlaXZlZEF0PzogRGF0ZTtcbiAgZGlzcG9zZWRBdD86IERhdGU7XG59IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNyZWF0ZWRFdmVudCA9IGV2ZW50cy5maW5kKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19jcmVhdGVkJ1xuICApO1xuICBpZiAoIWNyZWF0ZWRFdmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY2VpdmVkRXZlbnRzID0gZXZlbnRzLmZpbHRlcihcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnXG4gICk7XG4gIGNvbnN0IGRpc3Bvc2VkRXZlbnRzID0gZXZlbnRzLmZpbHRlcihcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnXG4gICk7XG4gIGNvbnN0IGxhc3RSZWNlaXZlZEV2ZW50ID0gcmVjZWl2ZWRFdmVudHMuYXQoLTEpO1xuICByZXR1cm4ge1xuICAgIGhvb2tJZDogY3JlYXRlZEV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgcnVuSWQ6IGNyZWF0ZWRFdmVudC5ydW5JZCxcbiAgICB0b2tlbjogY3JlYXRlZEV2ZW50LmV2ZW50RGF0YT8udG9rZW4sXG4gICAgY3JlYXRlZEF0OiBjcmVhdGVkRXZlbnQuY3JlYXRlZEF0LFxuICAgIHJlY2VpdmVkQ291bnQ6IHJlY2VpdmVkRXZlbnRzLmxlbmd0aCxcbiAgICBsYXN0UmVjZWl2ZWRBdDogbGFzdFJlY2VpdmVkRXZlbnQ/LmNyZWF0ZWRBdCB8fCB1bmRlZmluZWQsXG4gICAgZGlzcG9zZWRBdDogZGlzcG9zZWRFdmVudHMuYXQoLTEpPy5jcmVhdGVkQXQgfHwgdW5kZWZpbmVkLFxuICB9O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHdvcmtmbG93IEhvb2sgdG8gYW4gT3BlblRlbGVtZXRyeSBTcGFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rVG9TcGFuKGhvb2tFdmVudHM6IEV2ZW50W10sIG1heEVuZFRpbWU6IERhdGUpOiBTcGFuIHwgbnVsbCB7XG4gIGNvbnN0IGhvb2sgPSBob29rRXZlbnRzVG9Ib29rRW50aXR5KGhvb2tFdmVudHMpO1xuICBpZiAoIWhvb2spIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENvbnZlcnQgaG9vay1yZWxhdGVkIGV2ZW50cyB0byBzcGFuIGV2ZW50c1xuICBjb25zdCBldmVudHMgPSBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKGhvb2tFdmVudHMsIGZhbHNlKTtcblxuICBjb25zdCBlbmRUaW1lID0gaG9vay5kaXNwb3NlZEF0IHx8IG1heEVuZFRpbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBzcGFuSWQ6IFN0cmluZyhob29rLmhvb2tJZCksXG4gICAgbmFtZTogaG9vay50b2tlbiA/PyBTdHJpbmcoaG9vay5ob29rSWQpLFxuICAgIGtpbmQ6IDEsIC8vIElOVEVSTkFMIHNwYW4ga2luZFxuICAgIHJlc291cmNlOiAnaG9vaycsXG4gICAgbGlicmFyeTogV09SS0ZMT1dfTElCUkFSWSxcbiAgICBzdGF0dXM6IHsgY29kZTogMSB9LFxuICAgIHRyYWNlRmxhZ3M6IDEsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgcmVzb3VyY2U6ICdob29rJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IGhvb2ssXG4gICAgfSxcbiAgICBsaW5rczogW10sXG4gICAgZXZlbnRzLFxuICAgIHN0YXJ0VGltZTogZGF0ZVRvT3RlbFRpbWUoaG9vay5jcmVhdGVkQXQpLFxuICAgIGVuZFRpbWU6IGRhdGVUb090ZWxUaW1lKGVuZFRpbWUpLFxuICAgIGR1cmF0aW9uOiBjYWxjdWxhdGVEdXJhdGlvbihob29rLmNyZWF0ZWRBdCwgZW5kVGltZSksXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvb3Qgc3BhbiBmb3IgdGhlIHdvcmtmbG93IHJ1blxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuVG9TcGFuKFxuICBydW46IFdvcmtmbG93UnVuLFxuICBydW5FdmVudHM6IEV2ZW50W10sXG4gIG5vd1RpbWU/OiBEYXRlXG4pOiBTcGFuIHtcbiAgY29uc3Qgbm93ID0gbm93VGltZSA/PyBuZXcgRGF0ZSgpO1xuXG4gIC8vIE9ubHkgZW1iZWQgaWRlbnRpZmljYXRpb24gZmllbGRzIOKAlCBub3QgdGhlIGZ1bGwgb2JqZWN0IHdpdGhcbiAgLy8gaW5wdXQvb3V0cHV0L2Vycm9yIHdoaWNoIG1heSBjb250YWluIG5vbi1jbG9uZWFibGUgdHlwZXMuXG4gIGNvbnN0IHsgaW5wdXQ6IF9pLCBvdXRwdXQ6IF9vLCBlcnJvcjogX2UsIC4uLnJ1bklkZW50aXR5IH0gPSBydW47XG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgcmVzb3VyY2U6ICdydW4nIGFzIGNvbnN0LFxuICAgIGRhdGE6IHJ1bklkZW50aXR5LFxuICB9O1xuXG4gIC8vIFVzZSBjcmVhdGVkQXQgYXMgc3BhbiBzdGFydCB0aW1lLCB3aXRoIGFjdGl2ZVN0YXJ0VGltZSBmb3Igd2hlbiBleGVjdXRpb24gYmVnYW5cbiAgY29uc3Qgc3BhblN0YXJ0VGltZSA9IG5ldyBEYXRlKHJ1bi5jcmVhdGVkQXQpO1xuICBjb25zdCBhY3RpdmVTdGFydFRpbWUgPSBydW4uc3RhcnRlZEF0ID8gbmV3IERhdGUocnVuLnN0YXJ0ZWRBdCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVuZFRpbWUgPSBydW4uY29tcGxldGVkQXQgPz8gbm93O1xuXG4gIC8vIENvbnZlcnQgcnVuLWxldmVsIGV2ZW50cyB0byBzcGFuIGV2ZW50c1xuICBjb25zdCBldmVudHMgPSBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKHJ1bkV2ZW50cywgZmFsc2UpO1xuXG4gIHJldHVybiB7XG4gICAgc3BhbklkOiBTdHJpbmcocnVuLnJ1bklkKSxcbiAgICBuYW1lOiBTdHJpbmcocGFyc2VXb3JrZmxvd05hbWUocnVuLndvcmtmbG93TmFtZSk/LnNob3J0TmFtZSA/PyAnPycpLFxuICAgIGtpbmQ6IDEsIC8vIElOVEVSTkFMIHNwYW4ga2luZFxuICAgIHJlc291cmNlOiAncnVuJyxcbiAgICBsaWJyYXJ5OiBXT1JLRkxPV19MSUJSQVJZLFxuICAgIHN0YXR1czogeyBjb2RlOiAwIH0sXG4gICAgdHJhY2VGbGFnczogMSxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGxpbmtzOiBbXSxcbiAgICBldmVudHMsXG4gICAgc3RhcnRUaW1lOiBkYXRlVG9PdGVsVGltZShzcGFuU3RhcnRUaW1lKSxcbiAgICBlbmRUaW1lOiBkYXRlVG9PdGVsVGltZShlbmRUaW1lKSxcbiAgICBkdXJhdGlvbjogY2FsY3VsYXRlRHVyYXRpb24oc3BhblN0YXJ0VGltZSwgZW5kVGltZSksXG4gICAgLy8gT25seSBzZXQgYWN0aXZlU3RhcnRUaW1lIGlmIGl0IGRpZmZlcnMgZnJvbSBzdGFydFRpbWUgKGkuZS4sIHRoZXJlIHdhcyBhIHF1ZXVlZCBwZXJpb2QpXG4gICAgYWN0aXZlU3RhcnRUaW1lOlxuICAgICAgYWN0aXZlU3RhcnRUaW1lICYmIGFjdGl2ZVN0YXJ0VGltZS5nZXRUaW1lKCkgPiBzcGFuU3RhcnRUaW1lLmdldFRpbWUoKVxuICAgICAgICA/IGRhdGVUb090ZWxUaW1lKGFjdGl2ZVN0YXJ0VGltZSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gIH07XG59XG4iXX0=
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy93b3JrZmxvdy10cmFjZXMvdHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBNEIsSUFBSSxHQUFHLENBQUM7SUFDMUQsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsY0FBYztJQUNkLGVBQWU7SUFDZixhQUFhO0lBQ2IsWUFBWTtJQUNaLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsVUFBVTtDQUNYLENBQUMsQ0FBQztBQUVILE1BQU0sZUFBZSxHQUFHLENBQ3RCLE1BQWUsRUFDZixVQUFnQyxFQUNiLEVBQUU7SUFDckIsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNuQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzVELElBQUksS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUNyQixNQUFTLEVB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QUFJLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLElBQUksR0FBRyxDQUFDO1FBQ25FLElBQUksRUFBRSxDQUFDLEVBQUUscUJBQXFCO1FBQzlCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQ25CLFVBQVUsRUFBRSxDQUFDO1FBQ2IsVUFBVTtRQUNWLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTTtRQUNOLFNBQVMsRUFBRSxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQ3hDLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQ2hDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO1FBQ25ELDBGQUEwRjtRQUMxRixlQUFlLEVBQ2IsZUFBZSxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFO1lBQ3BFLENBQUMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxTQUFTO0tBQ2hCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGdW5jdGlvbnMgZm9yIGNvbnN0cnVjdGluZyBPcGVuVGVsZW1ldHJ5IHNwYW5zIGZyb20gd29ya2Zsb3cgZW50aXRpZXNcbiAqL1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgRXZlbnQsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB0eXBlIHsgU3BhbiwgU3BhbkV2ZW50IH0gZnJvbSAnLi4vdHJhY2Utdmlld2VyL3R5cGVzJztcbmltcG9ydCB7IHNob3VsZFNob3dWZXJ0aWNhbExpbmUgfSBmcm9tICcuL2V2ZW50LWNvbG9ycyc7XG5pbXBvcnQgeyBjYWxjdWxhdGVEdXJhdGlvbiwgZGF0ZVRvT3RlbFRpbWUgfSBmcm9tICcuL3RyYWNlLXRpbWUtdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgV09SS0ZMT1dfTElCUkFSWSA9IHtcbiAgbmFtZTogJ3dvcmtmbG93LWRldmVsb3BtZW50LWtpdCcsXG4gIHZlcnNpb246ICc0LjAuMCcsXG59O1xuXG4vKipcbiAqIEV2ZW50IHR5cGVzIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBhcyB2aXN1YWwgbWFya2VycyBpbiB0aGUgdHJhY2Ugdmlld2VyXG4gKi9cbmNvbnN0IE1BUktFUl9FVkVOVF9UWVBFUzogU2V0PEV2ZW50WydldmVudFR5cGUnXT4gPSBuZXcgU2V0KFtcbiAgJ2hvb2tfY3JlYXRlZCcsXG4gICdob29rX3JlY2VpdmVkJyxcbiAgJ2hvb2tfZGlzcG9zZWQnLFxuICAnc3RlcF9zdGFydGVkJyxcbiAgJ3N0ZXBfcmV0cnlpbmcnLFxuICAnc3RlcF9mYWlsZWQnLFxuICAncnVuX2ZhaWxlZCcsXG4gICd3YWl0X2NyZWF0ZWQnLFxuICAnd2FpdF9jb21wbGV0ZWQnLFxuICAnYXR0cl9zZXQnLFxuXSk7XG5cbmNvbnN0IGZpbmRFdmVudEJ5VHlwZSA9IChcbiAgZXZlbnRzOiBFdmVudFtdLFxuICBldmVudFR5cGVzOiBFdmVudFsnZXZlbnRUeXBlJ11bXVxuKTogRXZlbnQgfCB1bmRlZmluZWQgPT4ge1xuICBmb3IgKGNvbnN0IGV2ZW50VHlwZSBvZiBldmVudFR5cGVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSBldmVudHMuZmluZCgoZSkgPT4gZS5ldmVudFR5cGUgPT09IGV2ZW50VHlwZSk7XG4gICAgaWYgKGV2ZW50KSByZXR1cm4gZXZlbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IHdpdGhPY2N1cnJlZEF0ID0gPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBlbnRpdHk6IFQsXG4gIG9jY3VycmVkQXQ6IEV2ZW50WydvY2N1cnJlZEF0J10gfCB1bmRlZmluZWRcbik6IFQgJiB7IG9jY3VycmVkQXQ/OiBEYXRlIH0gPT4ge1xuICBpZiAoIW9jY3VycmVkQXQgfHwgKGVudGl0eSBhcyB7IG9jY3VycmVkQXQ/OiB1bmtub3duIH0pLm9jY3VycmVkQXQgIT0gbnVsbCkge1xuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cbiAgcmV0dXJuIHsgLi4uZW50aXR5LCBvY2N1cnJlZEF0IH07XG59O1xuXG4vKipcbiAqIENvbnZlcnQgd29ya2Zsb3cgZXZlbnRzIHRvIHNwYW4gZXZlbnRzXG4gKiBPbmx5IGluY2x1ZGVzIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgbWFya2Vyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEV2ZW50c1RvU3BhbkV2ZW50cyhcbiAgZXZlbnRzOiBFdmVudFtdLFxuICBmaWx0ZXJUeXBlcyA9IHRydWVcbik6IFNwYW5FdmVudFtdIHtcbiAgcmV0dXJuIGV2ZW50c1xuICAgIC5maWx0ZXIoKGV2ZW50KSA9PlxuICAgICAgZmlsdGVyVHlwZXMgPyBNQVJLRVJfRVZFTlRfVFlQRVMuaGFzKGV2ZW50LmV2ZW50VHlwZSkgOiB0cnVlXG4gICAgKVxuICAgIC5tYXAoKGV2ZW50KSA9PiAoe1xuICAgICAgbmFtZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgdGltZXN0YW1wOiBkYXRlVG9PdGVsVGltZShldmVudC5jcmVhdGVkQXQpLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBldmVudElkOiBldmVudC5ldmVudElkLFxuICAgICAgICBjb3JyZWxhdGlvbklkOiBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgICAgICBldmVudERhdGE6ICdldmVudERhdGEnIGluIGV2ZW50ID8gZXZlbnQuZXZlbnREYXRhIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIC8vIENvbnRyb2wgd2hldGhlciB0byBzaG93IHZlcnRpY2FsIGxpbmUgaW4gdGltZWxpbmVcbiAgICAgIHNob3dWZXJ0aWNhbExpbmU6IHNob3VsZFNob3dWZXJ0aWNhbExpbmUoZXZlbnQuZXZlbnRUeXBlKSxcbiAgICB9KSk7XG59XG5cbmV4cG9ydCBjb25zdCB3YWl0RXZlbnRzVG9XYWl0RW50aXR5ID0gKFxuICBldmVudHM6IEV2ZW50W11cbik6IHtcbiAgd2FpdElkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgb2NjdXJyZWRBdD86IERhdGU7XG4gIHJlc3VtZUF0PzogRGF0ZTtcbiAgY29tcGxldGVkQXQ/OiBEYXRlO1xufSB8IG51bGwgPT4ge1xuICBjb25zdCBzdGFydEV2ZW50ID0gZXZlbnRzLmZpbmQoKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKTtcbiAgaWYgKCFzdGFydEV2ZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY29tcGxldGVkRXZlbnQgPSBldmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICApO1xuICByZXR1cm4gd2l0aE9jY3VycmVkQXQoXG4gICAge1xuICAgICAgd2FpdElkOiBzdGFydEV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgICBydW5JZDogc3RhcnRFdmVudC5ydW5JZCxcbiAgICAgIGNyZWF0ZWRBdDogc3RhcnRFdmVudC5jcmVhdGVkQXQsXG4gICAgICByZXN1bWVBdDogc3RhcnRFdmVudC5ldmVudERhdGE/LnJlc3VtZUF0XG4gICAgICAgID8gbmV3IERhdGUoc3RhcnRFdmVudC5ldmVudERhdGEucmVzdW1lQXQpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgY29tcGxldGVkQXQ6IGNvbXBsZXRlZEV2ZW50Py5jcmVhdGVkQXQsXG4gICAgfSxcbiAgICBzdGFydEV2ZW50Lm9jY3VycmVkQXRcbiAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSB3b3JrZmxvdyBXYWl0IHRvIGFuIE9wZW5UZWxlbWV0cnkgU3BhblxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FpdFRvU3BhbihcbiAgZXZlbnRzOiBFdmVudFtdLFxuICBtYXhFbmRUaW1lOiBEYXRlLFxuICBmYWxsYmFja0VuZFRpbWUgPSBtYXhFbmRUaW1lXG4pOiBTcGFuIHwgbnVsbCB7XG4gIGNvbnN0IHdhaXQgPSB3YWl0RXZlbnRzVG9XYWl0RW50aXR5KGV2ZW50cyk7XG4gIGlmICghd2FpdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHN0YXJ0VGltZSA9IHdhaXQuY3JlYXRlZEF0O1xuICBjb25zdCBzdGFydE1zID0gc3RhcnRUaW1lLmdldFRpbWUoKTtcbiAgbGV0IGVuZFRpbWUgPSB3YWl0LmNvbXBsZXRlZEF0O1xuICBpZiAoIWVuZFRpbWUpIHtcbiAgICBjb25zdCBmYWxsYmFja0NhcCA9XG4gICAgICB3YWl0LnJlc3VtZUF0ICYmIHdhaXQucmVzdW1lQXQuZ2V0VGltZSgpIDwgZmFsbGJhY2tFbmRUaW1lLmdldFRpbWUoKVxuICAgICAgICA/IHdhaXQucmVzdW1lQXRcbiAgICAgICAgOiBmYWxsYmFja0VuZFRpbWU7XG4gICAgZW5kVGltZSA9XG4gICAgICBtYXhFbmRUaW1lLmdldFRpbWUoKSA+IHN0YXJ0TXMgJiZcbiAgICAgIG1heEVuZFRpbWUuZ2V0VGltZSgpIDwgZmFsbGJhY2tDYXAuZ2V0VGltZSgpXG4gICAgICAgID8gbWF4RW5kVGltZVxuICAgICAgICA6IGZhbGxiYWNrQ2FwO1xuICB9XG4gIGNvbnN0IHN0YXJ0ID0gZGF0ZVRvT3RlbFRpbWUoc3RhcnRUaW1lKTtcbiAgY29uc3QgZW5kID0gZGF0ZVRvT3RlbFRpbWUoZW5kVGltZSk7XG4gIGNvbnN0IGR1cmF0aW9uID0gY2FsY3VsYXRlRHVyYXRpb24oc3RhcnRUaW1lLCBlbmRUaW1lKTtcbiAgY29uc3Qgc3BhbkV2ZW50cyA9IGNvbnZlcnRFdmVudHNUb1NwYW5FdmVudHMoZXZlbnRzLCBmYWxzZSk7XG4gIHJldHVybiB7XG4gICAgc3BhbklkOiB3YWl0LndhaXRJZCxcbiAgICBuYW1lOiAnc2xlZXAnLFxuICAgIGtpbmQ6IDEsIC8vIElOVEVSTkFMIHNwYW4ga2luZFxuICAgIHJlc291cmNlOiAnc2xlZXAnLFxuICAgIGxpYnJhcnk6IFdPUktGTE9XX0xJQlJBUlksXG4gICAgc3RhdHVzOiB7IGNvZGU6IDAgfSxcbiAgICB0cmFjZUZsYWdzOiAxLFxuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgIHJlc291cmNlOiAnc2xlZXAnIGFzIGNvbnN0LFxuICAgICAgZGF0YTogd2FpdCwgLy8gd2FpdCBpcyBhIHBsYWluIG9iamVjdCBidWlsdCBmcm9tIGV2ZW50cywgbm8gbm9uLWNsb25lYWJsZSB0eXBlc1xuICAgIH0sXG4gICAgbGlua3M6IFtdLFxuICAgIGV2ZW50czogc3BhbkV2ZW50cyxcbiAgICBkdXJhdGlvbixcbiAgICBzdGFydFRpbWU6IHN0YXJ0LFxuICAgIGVuZFRpbWU6IGVuZCxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0ZXBFdmVudHNUb1N0ZXBFbnRpdHkgPSAoXG4gIGV2ZW50czogRXZlbnRbXVxuKToge1xuICBzdGVwSWQ6IHN0cmluZztcbiAgcnVuSWQ6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgc3RhdHVzOiAncGVuZGluZycgfCAncnVubmluZycgfCAnY29tcGxldGVkJyB8ICdmYWlsZWQnIHwgJ2NhbmNlbGxlZCc7XG4gIGF0dGVtcHQ6IG51bWJlcjtcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICB1cGRhdGVkQXQ6IERhdGU7XG4gIG9jY3VycmVkQXQ/OiBEYXRlO1xuICBzdGFydGVkQXQ/OiBEYXRlO1xuICBjb21wbGV0ZWRBdD86IERhdGU7XG4gIHNwZWNWZXJzaW9uPzogbnVtYmVyO1xufSB8IG51bGwgPT4ge1xuICBjb25zdCBjcmVhdGVkRXZlbnQgPSBldmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY3JlYXRlZCdcbiAgKTtcblxuICAvLyBWMSBydW5zIGRvbid0IGVtaXQgc3RlcF9jcmVhdGVkIGV2ZW50cy4gRmFsbCBiYWNrIHRvIHRoZSBlYXJsaWVzdCBldmVudFxuICAvLyBpbiB0aGUgZ3JvdXAgc28gd2UgY2FuIHN0aWxsIGJ1aWxkIGEgc3RlcCBzcGFuLlxuICBjb25zdCBhbmNob3JFdmVudCA9IGNyZWF0ZWRFdmVudCA/PyBldmVudHNbMF07XG4gIGlmICghYW5jaG9yRXZlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFdhbGsgZXZlbnRzIGluIG9yZGVyIHRvIGRlcml2ZSBzdGF0dXMsIGF0dGVtcHQgY291bnQsIGFuZCB0aW1lc3RhbXBzLlxuICAvLyBIYW5kbGVzIGJvdGggc3RlcF9yZXRyeWluZyBhbmQgY29uc2VjdXRpdmUgc3RlcF9zdGFydGVkIGFzIHJldHJ5IHNpZ25hbHMuXG4gIGxldCBzdGF0dXM6ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsbGVkJyA9XG4gICAgJ3BlbmRpbmcnO1xuICBsZXQgYXR0ZW1wdCA9IDA7XG4gIGxldCBzdGFydGVkQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG4gIGxldCBjb21wbGV0ZWRBdDogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGUgb2YgZXZlbnRzKSB7XG4gICAgc3dpdGNoIChlLmV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnc3RlcF9zdGFydGVkJzpcbiAgICAgICAgc3RhdHVzID0gJ3J1bm5pbmcnO1xuICAgICAgICBhdHRlbXB0ICs9IDE7XG4gICAgICAgIGlmICghc3RhcnRlZEF0KSBzdGFydGVkQXQgPSBlLmNyZWF0ZWRBdDtcbiAgICAgICAgY29tcGxldGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RlcF9jb21wbGV0ZWQnOlxuICAgICAgICBzdGF0dXMgPSAnY29tcGxldGVkJztcbiAgICAgICAgY29tcGxldGVkQXQgPSBlLmNyZWF0ZWRBdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGVwX2ZhaWxlZCc6XG4gICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xuICAgICAgICBjb21wbGV0ZWRBdCA9IGUuY3JlYXRlZEF0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0ZXBfcmV0cnlpbmcnOlxuICAgICAgICBzdGF0dXMgPSAncGVuZGluZyc7XG4gICAgICAgIGNvbXBsZXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgYXQgbGVhc3QgYXR0ZW1wdCAxIGlmIHdlIG5ldmVyIHNhdyBzdGVwX3N0YXJ0ZWRcbiAgaWYgKGF0dGVtcHQgPT09IDApIGF0dGVtcHQgPSAxO1xuXG4gIGNvbnN0IGxhc3RFdmVudCA9IGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV07XG4gIGNvbnN0IG9jY3VycmVuY2VFdmVudCA9XG4gICAgZmluZEV2ZW50QnlUeXBlKGV2ZW50cywgWydzdGVwX2NyZWF0ZWQnLCAnc3RlcF9zdGFydGVkJ10pID8/IGFuY2hvckV2ZW50O1xuXG4gIHJldHVybiB3aXRoT2NjdXJyZWRBdChcbiAgICB7XG4gICAgICBzdGVwSWQ6IGFuY2hvckV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gJycsXG4gICAgICBydW5JZDogYW5jaG9yRXZlbnQucnVuSWQsXG4gICAgICBzdGVwTmFtZTogY3JlYXRlZEV2ZW50Py5ldmVudERhdGE/LnN0ZXBOYW1lID8/ICcnLFxuICAgICAgc3RhdHVzLFxuICAgICAgYXR0ZW1wdCxcbiAgICAgIGNyZWF0ZWRBdDogYW5jaG9yRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgdXBkYXRlZEF0OiBsYXN0RXZlbnQ/LmNyZWF0ZWRBdCA/PyBhbmNob3JFdmVudC5jcmVhdGVkQXQsXG4gICAgICBzdGFydGVkQXQsXG4gICAgICBjb21wbGV0ZWRBdCxcbiAgICAgIHNwZWNWZXJzaW9uOiBhbmNob3JFdmVudC5zcGVjVmVyc2lvbixcbiAgICB9LFxuICAgIG9jY3VycmVuY2VFdmVudC5vY2N1cnJlZEF0XG4gICk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHN0ZXAgZXZlbnRzIHRvIGFuIE9wZW5UZWxlbWV0cnkgU3BhblxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RlcFRvU3BhbihzdGVwRXZlbnRzOiBFdmVudFtdLCBtYXhFbmRUaW1lOiBEYXRlKTogU3BhbiB8IG51bGwge1xuICBjb25zdCBzdGVwID0gc3RlcEV2ZW50c1RvU3RlcEVudGl0eShzdGVwRXZlbnRzKTtcbiAgaWYgKCFzdGVwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcGFyc2VkTmFtZSA9IHBhcnNlU3RlcE5hbWUoU3RyaW5nKHN0ZXAuc3RlcE5hbWUpKTtcblxuICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgIHJlc291cmNlOiAnc3RlcCcgYXMgY29uc3QsXG4gICAgZGF0YTogc3RlcCxcbiAgfTtcblxuICBjb25zdCByZXNvdXJjZSA9ICdzdGVwJztcbiAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKHN0ZXAuY29tcGxldGVkQXQgPz8gbWF4RW5kVGltZSk7XG5cbiAgLy8gSW5jbHVkZSBBTEwgY29ycmVsYXRlZCBldmVudHMgb24gdGhlIHNwYW4gc28gdGhlIHNpZGViYXIgZGV0YWlsIHZpZXdcbiAgLy8gY2FuIGRpc3BsYXkgdGhlbS4gVGhlIHRpbWVsaW5lIHVzZXMgdGhlIGBzaG93VmVydGljYWxMaW5lYCBmbGFnIHRvXG4gIC8vIGRldGVybWluZSB3aGljaCBldmVudHMgYXBwZWFyIGFzIG1hcmtlcnMuXG4gIGNvbnN0IGV2ZW50cyA9IGNvbnZlcnRFdmVudHNUb1NwYW5FdmVudHMoc3RlcEV2ZW50cywgZmFsc2UpO1xuXG4gIC8vIFVzZSBjcmVhdGVkQXQgYXMgc3BhbiBzdGFydCB0aW1lLCB3aXRoIGFjdGl2ZVN0YXJ0VGltZSBmb3Igd2hlbiBleGVjdXRpb24gYmVnYW5cbiAgLy8gVGhpcyBhbGxvd3MgdmlzdWFsaXphdGlvbiBvZiB0aGUgXCJxdWV1ZWRcIiBwZXJpb2QgYmVmb3JlIGV4ZWN1dGlvblxuICBjb25zdCBzcGFuU3RhcnRUaW1lID0gbmV3IERhdGUoc3RlcC5jcmVhdGVkQXQpO1xuICBsZXQgYWN0aXZlU3RhcnRUaW1lID0gc3RlcC5zdGFydGVkQXQgPyBuZXcgRGF0ZShzdGVwLnN0YXJ0ZWRBdCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGZpcnN0U3RhcnRFdmVudCA9IHN0ZXBFdmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCdcbiAgKTtcbiAgaWYgKGZpcnN0U3RhcnRFdmVudCkge1xuICAgIC8vIGBzdGVwLnN0YXJ0ZWRBdGAgaXMgdGhlIHNlcnZlci1zaWRlIGNyZWF0aW9uIHRpbWVzdGFtcCwgYW5kIGBldmVudC5jcmVhdGVkQXRgIGlzXG4gICAgLy8gdGhlIGNsaWVudC1zaWRlIGNyZWF0aW9uIHRpbWVzdGFtcC4gRm9yIG5vdywgdG8gYWxpZ24gdGhlIGV2ZW50IG1hcmtlciB3aXRoIHRoZVxuICAgIC8vIGxpbmUgd2Ugc2hvdyBmb3Igc3RlcC5zdGFydGVkQXQsIHdlIG92ZXJ3cml0ZSBoZXJlIHRvIGFsd2F5cyB1c2UgY2xpZW50LXNpZGUgdGltZS5cbiAgICBhY3RpdmVTdGFydFRpbWUgPSBuZXcgRGF0ZShmaXJzdFN0YXJ0RXZlbnQuY3JlYXRlZEF0KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3BhbklkOiBTdHJpbmcoc3RlcC5zdGVwSWQpLFxuICAgIG5hbWU6IHBhcnNlZE5hbWU/LnNob3J0TmFtZSA/PyBTdHJpbmcoc3RlcC5zdGVwTmFtZSksXG4gICAga2luZDogMSwgLy8gSU5URVJOQUwgc3BhbiBraW5kXG4gICAgcmVzb3VyY2UsXG4gICAgbGlicmFyeTogV09SS0ZMT1dfTElCUkFSWSxcbiAgICBzdGF0dXM6IHsgY29kZTogMCB9LFxuICAgIHRyYWNlRmxhZ3M6IDEsXG4gICAgYXR0cmlidXRlcyxcbiAgICBsaW5rczogW10sXG4gICAgZXZlbnRzLFxuICAgIHN0YXJ0VGltZTogZGF0ZVRvT3RlbFRpbWUoc3BhblN0YXJ0VGltZSksXG4gICAgZW5kVGltZTogZGF0ZVRvT3RlbFRpbWUoZW5kVGltZSksXG4gICAgZHVyYXRpb246IGNhbGN1bGF0ZUR1cmF0aW9uKHNwYW5TdGFydFRpbWUsIGVuZFRpbWUpLFxuICAgIC8vIE9ubHkgc2V0IGFjdGl2ZVN0YXJ0VGltZSBpZiBpdCBkaWZmZXJzIGZyb20gc3RhcnRUaW1lIChpLmUuLCB0aGVyZSB3YXMgYSBxdWV1ZWQgcGVyaW9kKVxuICAgIGFjdGl2ZVN0YXJ0VGltZTpcbiAgICAgIGFjdGl2ZVN0YXJ0VGltZSAmJiBhY3RpdmVTdGFydFRpbWUuZ2V0VGltZSgpID4gc3BhblN0YXJ0VGltZS5nZXRUaW1lKClcbiAgICAgICAgPyBkYXRlVG9PdGVsVGltZShhY3RpdmVTdGFydFRpbWUpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgaG9va0V2ZW50c1RvSG9va0VudGl0eSA9IChcbiAgZXZlbnRzOiBFdmVudFtdXG4pOiB7XG4gIGhvb2tJZDogc3RyaW5nO1xuICBydW5JZDogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICBvY2N1cnJlZEF0PzogRGF0ZTtcbiAgcmVjZWl2ZWRDb3VudDogbnVtYmVyO1xuICBsYXN0UmVjZWl2ZWRBdD86IERhdGU7XG4gIGRpc3Bvc2VkQXQ/OiBEYXRlO1xufSB8IG51bGwgPT4ge1xuICBjb25zdCBjcmVhdGVkRXZlbnQgPSBldmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfY3JlYXRlZCdcbiAgKTtcbiAgaWYgKCFjcmVhdGVkRXZlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWNlaXZlZEV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJ1xuICApO1xuICBjb25zdCBkaXNwb3NlZEV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJ1xuICApO1xuICBjb25zdCBsYXN0UmVjZWl2ZWRFdmVudCA9IHJlY2VpdmVkRXZlbnRzLmF0KC0xKTtcbiAgcmV0dXJuIHdpdGhPY2N1cnJlZEF0KFxuICAgIHtcbiAgICAgIGhvb2tJZDogY3JlYXRlZEV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgICBydW5JZDogY3JlYXRlZEV2ZW50LnJ1bklkLFxuICAgICAgdG9rZW46IGNyZWF0ZWRFdmVudC5ldmVudERhdGE/LnRva2VuLFxuICAgICAgY3JlYXRlZEF0OiBjcmVhdGVkRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgcmVjZWl2ZWRDb3VudDogcmVjZWl2ZWRFdmVudHMubGVuZ3RoLFxuICAgICAgbGFzdFJlY2VpdmVkQXQ6IGxhc3RSZWNlaXZlZEV2ZW50Py5jcmVhdGVkQXQgfHwgdW5kZWZpbmVkLFxuICAgICAgZGlzcG9zZWRBdDogZGlzcG9zZWRFdmVudHMuYXQoLTEpPy5jcmVhdGVkQXQgfHwgdW5kZWZpbmVkLFxuICAgIH0sXG4gICAgY3JlYXRlZEV2ZW50Lm9jY3VycmVkQXRcbiAgKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSB3b3JrZmxvdyBIb29rIHRvIGFuIE9wZW5UZWxlbWV0cnkgU3BhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaG9va1RvU3Bhbihob29rRXZlbnRzOiBFdmVudFtdLCBtYXhFbmRUaW1lOiBEYXRlKTogU3BhbiB8IG51bGwge1xuICBjb25zdCBob29rID0gaG9va0V2ZW50c1RvSG9va0VudGl0eShob29rRXZlbnRzKTtcbiAgaWYgKCFob29rKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDb252ZXJ0IGhvb2stcmVsYXRlZCBldmVudHMgdG8gc3BhbiBldmVudHNcbiAgY29uc3QgZXZlbnRzID0gY29udmVydEV2ZW50c1RvU3BhbkV2ZW50cyhob29rRXZlbnRzLCBmYWxzZSk7XG5cbiAgY29uc3QgZW5kVGltZSA9IGhvb2suZGlzcG9zZWRBdCB8fCBtYXhFbmRUaW1lO1xuXG4gIHJldHVybiB7XG4gICAgc3BhbklkOiBTdHJpbmcoaG9vay5ob29rSWQpLFxuICAgIG5hbWU6IGhvb2sudG9rZW4gPz8gU3RyaW5nKGhvb2suaG9va0lkKSxcbiAgICBraW5kOiAxLCAvLyBJTlRFUk5BTCBzcGFuIGtpbmRcbiAgICByZXNvdXJjZTogJ2hvb2snLFxuICAgIGxpYnJhcnk6IFdPUktGTE9XX0xJQlJBUlksXG4gICAgc3RhdHVzOiB7IGNvZGU6IDEgfSxcbiAgICB0cmFjZUZsYWdzOiAxLFxuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgIHJlc291cmNlOiAnaG9vaycgYXMgY29uc3QsXG4gICAgICBkYXRhOiBob29rLFxuICAgIH0sXG4gICAgbGlua3M6IFtdLFxuICAgIGV2ZW50cyxcbiAgICBzdGFydFRpbWU6IGRhdGVUb090ZWxUaW1lKGhvb2suY3JlYXRlZEF0KSxcbiAgICBlbmRUaW1lOiBkYXRlVG9PdGVsVGltZShlbmRUaW1lKSxcbiAgICBkdXJhdGlvbjogY2FsY3VsYXRlRHVyYXRpb24oaG9vay5jcmVhdGVkQXQsIGVuZFRpbWUpLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByb290IHNwYW4gZm9yIHRoZSB3b3JrZmxvdyBydW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blRvU3BhbihcbiAgcnVuOiBXb3JrZmxvd1J1bixcbiAgcnVuRXZlbnRzOiBFdmVudFtdLFxuICBub3dUaW1lPzogRGF0ZVxuKTogU3BhbiB7XG4gIGNvbnN0IG5vdyA9IG5vd1RpbWUgPz8gbmV3IERhdGUoKTtcblxuICAvLyBPbmx5IGVtYmVkIGlkZW50aWZpY2F0aW9uIGZpZWxkcyDigJQgbm90IHRoZSBmdWxsIG9iamVjdCB3aXRoXG4gIC8vIGlucHV0L291dHB1dC9lcnJvciB3aGljaCBtYXkgY29udGFpbiBub24tY2xvbmVhYmxlIHR5cGVzLlxuICBjb25zdCB7IGlucHV0OiBfaSwgb3V0cHV0OiBfbywgZXJyb3I6IF9lLCAuLi5ydW5JZGVudGl0eSB9ID0gcnVuO1xuICBjb25zdCBvY2N1cnJlbmNlRXZlbnQgPSBmaW5kRXZlbnRCeVR5cGUocnVuRXZlbnRzLCBbXG4gICAgJ3J1bl9jcmVhdGVkJyxcbiAgICAncnVuX3N0YXJ0ZWQnLFxuICBdKTtcbiAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICByZXNvdXJjZTogJ3J1bicgYXMgY29uc3QsXG4gICAgZGF0YTogd2l0aE9jY3VycmVkQXQocnVuSWRlbnRpdHksIG9jY3VycmVuY2VFdmVudD8ub2NjdXJyZWRBdCksXG4gIH07XG5cbiAgLy8gVXNlIGNyZWF0ZWRBdCBhcyBzcGFuIHN0YXJ0IHRpbWUsIHdpdGggYWN0aXZlU3RhcnRUaW1lIGZvciB3aGVuIGV4ZWN1dGlvbiBiZWdhblxuICBjb25zdCBzcGFuU3RhcnRUaW1lID0gbmV3IERhdGUocnVuLmNyZWF0ZWRBdCk7XG4gIGNvbnN0IGFjdGl2ZVN0YXJ0VGltZSA9IHJ1bi5zdGFydGVkQXQgPyBuZXcgRGF0ZShydW4uc3RhcnRlZEF0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZW5kVGltZSA9IHJ1bi5jb21wbGV0ZWRBdCA/PyBub3c7XG5cbiAgLy8gQ29udmVydCBydW4tbGV2ZWwgZXZlbnRzIHRvIHNwYW4gZXZlbnRzXG4gIGNvbnN0IGV2ZW50cyA9IGNvbnZlcnRFdmVudHNUb1NwYW5FdmVudHMocnVuRXZlbnRzLCBmYWxzZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzcGFuSWQ6IFN0cmluZyhydW4ucnVuSWQpLFxuICAgIG5hbWU6IFN0cmluZyhwYXJzZVdvcmtmbG93TmFtZShydW4ud29ya2Zsb3dOYW1lKT8uc2hvcnROYW1lID8/ICc/JyksXG4gICAga2luZDogMSwgLy8gSU5URVJOQUwgc3BhbiBraW5kXG4gICAgcmVzb3VyY2U6ICdydW4nLFxuICAgIGxpYnJhcnk6IFdPUktGTE9XX0xJQlJBUlksXG4gICAgc3RhdHVzOiB7IGNvZGU6IDAgfSxcbiAgICB0cmFjZUZsYWdzOiAxLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgbGlua3M6IFtdLFxuICAgIGV2ZW50cyxcbiAgICBzdGFydFRpbWU6IGRhdGVUb090ZWxUaW1lKHNwYW5TdGFydFRpbWUpLFxuICAgIGVuZFRpbWU6IGRhdGVUb090ZWxUaW1lKGVuZFRpbWUpLFxuICAgIGR1cmF0aW9uOiBjYWxjdWxhdGVEdXJhdGlvbihzcGFuU3RhcnRUaW1lLCBlbmRUaW1lKSxcbiAgICAvLyBPbmx5IHNldCBhY3RpdmVTdGFydFRpbWUgaWYgaXQgZGlmZmVycyBmcm9tIHN0YXJ0VGltZSAoaS5lLiwgdGhlcmUgd2FzIGEgcXVldWVkIHBlcmlvZClcbiAgICBhY3RpdmVTdGFydFRpbWU6XG4gICAgICBhY3RpdmVTdGFydFRpbWUgJiYgYWN0aXZlU3RhcnRUaW1lLmdldFRpbWUoKSA+IHNwYW5TdGFydFRpbWUuZ2V0VGltZSgpXG4gICAgICAgID8gZGF0ZVRvT3RlbFRpbWUoYWN0aXZlU3RhcnRUaW1lKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -17,6 +17,7 @@ export interface MaterializedStep {
|
|
|
17
17
|
status: StepStatus;
|
|
18
18
|
attempt: number;
|
|
19
19
|
createdAt: Date;
|
|
20
|
+
occurredAt?: Date;
|
|
20
21
|
startedAt?: Date;
|
|
21
22
|
completedAt?: Date;
|
|
22
23
|
updatedAt: Date;
|
|
@@ -28,6 +29,7 @@ export interface MaterializedHook {
|
|
|
28
29
|
runId: string;
|
|
29
30
|
token?: string;
|
|
30
31
|
createdAt: Date;
|
|
32
|
+
occurredAt?: Date;
|
|
31
33
|
receivedCount: number;
|
|
32
34
|
lastReceivedAt?: Date;
|
|
33
35
|
disposedAt?: Date;
|
|
@@ -39,6 +41,7 @@ export interface MaterializedWait {
|
|
|
39
41
|
runId: string;
|
|
40
42
|
status: 'waiting' | 'completed';
|
|
41
43
|
createdAt: Date;
|
|
44
|
+
occurredAt?: Date;
|
|
42
45
|
resumeAt?: Date;
|
|
43
46
|
completedAt?: Date;
|
|
44
47
|
/** All events for this wait, in insertion order */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-materialization.d.ts","sourceRoot":"","sources":["../../src/lib/event-materialization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMzD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,mDAAmD;IACnD,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,mDAAmD;IACnD,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"event-materialization.d.ts","sourceRoot":"","sources":["../../src/lib/event-materialization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMzD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,mDAAmD;IACnD,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,mDAAmD;IACnD,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAuCD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE,CAgEpE;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE,CAmCpE;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE,CA8BpE;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,oBAAoB,CAMpE"}
|
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
* all events for a run once, then materializes entities client-side instead
|
|
10
10
|
* of making separate API calls for each entity type.
|
|
11
11
|
*/
|
|
12
|
+
const withOccurredAt = (entity, occurredAt) => {
|
|
13
|
+
if (!occurredAt || entity.occurredAt != null) {
|
|
14
|
+
return entity;
|
|
15
|
+
}
|
|
16
|
+
return { ...entity, occurredAt };
|
|
17
|
+
};
|
|
12
18
|
// ---------------------------------------------------------------------------
|
|
13
19
|
// Helper: group events by correlationId prefix
|
|
14
20
|
// ---------------------------------------------------------------------------
|
|
@@ -78,7 +84,7 @@ export function materializeSteps(events) {
|
|
|
78
84
|
break;
|
|
79
85
|
}
|
|
80
86
|
}
|
|
81
|
-
steps.push({
|
|
87
|
+
steps.push(withOccurredAt({
|
|
82
88
|
stepId: correlationId,
|
|
83
89
|
runId: created.runId,
|
|
84
90
|
stepName: created.eventType === 'step_created'
|
|
@@ -91,7 +97,7 @@ export function materializeSteps(events) {
|
|
|
91
97
|
completedAt,
|
|
92
98
|
updatedAt,
|
|
93
99
|
events: stepEvents,
|
|
94
|
-
});
|
|
100
|
+
}, created.occurredAt));
|
|
95
101
|
}
|
|
96
102
|
return steps;
|
|
97
103
|
}
|
|
@@ -111,7 +117,7 @@ export function materializeHooks(events) {
|
|
|
111
117
|
const receivedEvents = hookEvents.filter((e) => e.eventType === 'hook_received');
|
|
112
118
|
const disposed = hookEvents.find((e) => e.eventType === 'hook_disposed');
|
|
113
119
|
const lastReceived = receivedEvents.at(-1);
|
|
114
|
-
hooks.push({
|
|
120
|
+
hooks.push(withOccurredAt({
|
|
115
121
|
hookId: correlationId,
|
|
116
122
|
runId: created.runId,
|
|
117
123
|
token: created.eventType === 'hook_created'
|
|
@@ -122,7 +128,7 @@ export function materializeHooks(events) {
|
|
|
122
128
|
lastReceivedAt: lastReceived?.createdAt,
|
|
123
129
|
disposedAt: disposed?.createdAt,
|
|
124
130
|
events: hookEvents,
|
|
125
|
-
});
|
|
131
|
+
}, created.occurredAt));
|
|
126
132
|
}
|
|
127
133
|
return hooks;
|
|
128
134
|
}
|
|
@@ -140,7 +146,7 @@ export function materializeWaits(events) {
|
|
|
140
146
|
if (!created)
|
|
141
147
|
continue;
|
|
142
148
|
const completed = waitEvents.find((e) => e.eventType === 'wait_completed');
|
|
143
|
-
waits.push({
|
|
149
|
+
waits.push(withOccurredAt({
|
|
144
150
|
waitId: correlationId,
|
|
145
151
|
runId: created.runId,
|
|
146
152
|
status: completed ? 'completed' : 'waiting',
|
|
@@ -150,7 +156,7 @@ export function materializeWaits(events) {
|
|
|
150
156
|
: undefined,
|
|
151
157
|
completedAt: completed?.createdAt,
|
|
152
158
|
events: waitEvents,
|
|
153
|
-
});
|
|
159
|
+
}, created.occurredAt));
|
|
154
160
|
}
|
|
155
161
|
return waits;
|
|
156
162
|
}
|
|
@@ -168,4 +174,4 @@ export function materializeAll(events) {
|
|
|
168
174
|
waits: materializeWaits(events),
|
|
169
175
|
};
|
|
170
176
|
}
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbWF0ZXJpYWxpemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9ldmVudC1tYXRlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQW1ESCw4RUFBOEU7QUFDOUUsK0NBQStDO0FBQy9DLDhFQUE4RTtBQUU5RSxTQUFTLG9CQUFvQixDQUMzQixNQUFlLEVBQ2YsUUFBa0I7SUFFbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7SUFDMUMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHO1lBQUUsU0FBUztRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLFNBQVM7UUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsbUJBQW1CO0FBQ25CLDhFQUE4RTtBQUU5RTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFlO0lBQzlDLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFD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RyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxPQUFPO1lBQUUsU0FBUztRQUV2QixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLGdCQUFnQixDQUFDLENBQUM7UUFFM0UsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNULE1BQU0sRUFBRSxhQUFhO1lBQ3JCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztZQUNwQixNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDM0MsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzVCLFFBQVEsRUFDTixPQUFPLENBQUMsU0FBUyxLQUFLLGNBQWM7Z0JBQ2xDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVE7Z0JBQzdCLENBQUMsQ0FBQyxTQUFTO1lBQ2YsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTO1lBQ2pDLE1BQU0sRUFBRSxVQUFVO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsaUJBQWlCO0FBQ2pCLDhFQUE4RTtBQUU5RTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQWU7SUFDNUMsT0FBTztRQUNMLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDL0IsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztRQUMvQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0tBQ2hDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFdmVudCBtYXRlcmlhbGl6YXRpb24gaGVscGVycy5cbiAqXG4gKiBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBhIGZsYXQgbGlzdCBvZiB3b3JrZmxvdyBldmVudHMgaW50byBlbnRpdHktbGlrZVxuICogb2JqZWN0cyAoc3RlcHMsIGhvb2tzLCB3YWl0cykgYnkgZ3JvdXBpbmcgZXZlbnRzIGJ5IGNvcnJlbGF0aW9uSWQgYW5kXG4gKiBzdGl0Y2hpbmcgdG9nZXRoZXIgbGlmZWN5Y2xlIGV2ZW50cy5cbiAqXG4gKiBUaGlzIGVuYWJsZXMgYSBcInRvcC1kb3duXCIgZGF0YSBmZXRjaGluZyBwYXR0ZXJuIHdoZXJlIHRoZSBjbGllbnQgZmV0Y2hlc1xuICogYWxsIGV2ZW50cyBmb3IgYSBydW4gb25jZSwgdGhlbiBtYXRlcmlhbGl6ZXMgZW50aXRpZXMgY2xpZW50LXNpZGUgaW5zdGVhZFxuICogb2YgbWFraW5nIHNlcGFyYXRlIEFQSSBjYWxscyBmb3IgZWFjaCBlbnRpdHkgdHlwZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBTdGVwU3RhdHVzIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNYXRlcmlhbGl6ZWQgZW50aXR5IHR5cGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBNYXRlcmlhbGl6ZWRTdGVwIHtcbiAgc3RlcElkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHN0ZXBOYW1lOiBzdHJpbmc7XG4gIHN0YXR1czogU3RlcFN0YXR1cztcbiAgYXR0ZW1wdDogbnVtYmVyO1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIHN0YXJ0ZWRBdD86IERhdGU7XG4gIGNvbXBsZXRlZEF0PzogRGF0ZTtcbiAgdXBkYXRlZEF0OiBEYXRlO1xuICAvKiogQWxsIGV2ZW50cyBmb3IgdGhpcyBzdGVwLCBpbiBpbnNlcnRpb24gb3JkZXIgKi9cbiAgZXZlbnRzOiBFdmVudFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hdGVyaWFsaXplZEhvb2sge1xuICBob29rSWQ6IHN0cmluZztcbiAgcnVuSWQ6IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgcmVjZWl2ZWRDb3VudDogbnVtYmVyO1xuICBsYXN0UmVjZWl2ZWRBdD86IERhdGU7XG4gIGRpc3Bvc2VkQXQ/OiBEYXRlO1xuICAvKiogQWxsIGV2ZW50cyBmb3IgdGhpcyBob29rLCBpbiBpbnNlcnRpb24gb3JkZXIgKi9cbiAgZXZlbnRzOiBFdmVudFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hdGVyaWFsaXplZFdhaXQge1xuICB3YWl0SWQ6IHN0cmluZztcbiAgcnVuSWQ6IHN0cmluZztcbiAgc3RhdHVzOiAnd2FpdGluZycgfCAnY29tcGxldGVkJztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICByZXN1bWVBdD86IERhdGU7XG4gIGNvbXBsZXRlZEF0PzogRGF0ZTtcbiAgLyoqIEFsbCBldmVudHMgZm9yIHRoaXMgd2FpdCwgaW4gaW5zZXJ0aW9uIG9yZGVyICovXG4gIGV2ZW50czogRXZlbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXRlcmlhbGl6ZWRFbnRpdGllcyB7XG4gIHN0ZXBzOiBNYXRlcmlhbGl6ZWRTdGVwW107XG4gIGhvb2tzOiBNYXRlcmlhbGl6ZWRIb29rW107XG4gIHdhaXRzOiBNYXRlcmlhbGl6ZWRXYWl0W107XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSGVscGVyOiBncm91cCBldmVudHMgYnkgY29ycmVsYXRpb25JZCBwcmVmaXhcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBncm91cEJ5Q29ycmVsYXRpb25JZChcbiAgZXZlbnRzOiBFdmVudFtdLFxuICBwcmVmaXhlczogc3RyaW5nW11cbik6IE1hcDxzdHJpbmcsIEV2ZW50W10+IHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIEV2ZW50W10+KCk7XG4gIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgY29uc3QgY2lkID0gZXZlbnQuY29ycmVsYXRpb25JZDtcbiAgICBpZiAoIWNpZCkgY29udGludWU7XG4gICAgaWYgKCFwcmVmaXhlcy5zb21lKChwKSA9PiBjaWQuc3RhcnRzV2l0aChwKSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZ3JvdXBzLmdldChjaWQpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgZXhpc3RpbmcucHVzaChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb3Vwcy5zZXQoY2lkLCBbZXZlbnRdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBtYXRlcmlhbGl6ZVN0ZXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBHcm91cCBzdGVwXyogZXZlbnRzIGJ5IGNvcnJlbGF0aW9uSWQgYW5kIGJ1aWxkIFN0ZXAtbGlrZSBlbnRpdGllcy5cbiAqXG4gKiBIYW5kbGVzIHBhcnRpYWwgZXZlbnQgbGlzdHMgZ3JhY2VmdWxseTogYSBzdGVwIG1heSBvbmx5IGhhdmUgYVxuICogc3RlcF9jcmVhdGVkIGV2ZW50IHdpdGggbm8gY29tcGxldGlvbiB5ZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRlcmlhbGl6ZVN0ZXBzKGV2ZW50czogRXZlbnRbXSk6IE1hdGVyaWFsaXplZFN0ZXBbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IGdyb3VwQnlDb3JyZWxhdGlvbklkKGV2ZW50cywgWydzdGVwXyddKTtcbiAgY29uc3Qgc3RlcHM6IE1hdGVyaWFsaXplZFN0ZXBbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2NvcnJlbGF0aW9uSWQsIHN0ZXBFdmVudHNdIG9mIGdyb3Vwcykge1xuICAgIGNvbnN0IGNyZWF0ZWQgPSBzdGVwRXZlbnRzLmZpbmQoKGUpID0+IGUuZXZlbnRUeXBlID09PSAnc3RlcF9jcmVhdGVkJyk7XG4gICAgaWYgKCFjcmVhdGVkKSBjb250aW51ZTtcblxuICAgIGxldCBzdGF0dXM6IFN0ZXBTdGF0dXMgPSAncGVuZGluZyc7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIGxldCBzdGFydGVkQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGNvbXBsZXRlZEF0OiBEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCB1cGRhdGVkQXQgPSBjcmVhdGVkLmNyZWF0ZWRBdDtcblxuICAgIGZvciAoY29uc3QgZSBvZiBzdGVwRXZlbnRzKSB7XG4gICAgICBzd2l0Y2ggKGUuZXZlbnRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3N0ZXBfc3RhcnRlZCc6XG4gICAgICAgICAgc3RhdHVzID0gJ3J1bm5pbmcnO1xuICAgICAgICAgIGF0dGVtcHQgKz0gMTtcbiAgICAgICAgICBpZiAoIXN0YXJ0ZWRBdCkgc3RhcnRlZEF0ID0gZS5jcmVhdGVkQXQ7XG4gICAgICAgICAgY29tcGxldGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdXBkYXRlZEF0ID0gZS5jcmVhdGVkQXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0ZXBfY29tcGxldGVkJzpcbiAgICAgICAgICBzdGF0dXMgPSAnY29tcGxldGVkJztcbiAgICAgICAgICBjb21wbGV0ZWRBdCA9IGUuY3JlYXRlZEF0O1xuICAgICAgICAgIHVwZGF0ZWRBdCA9IGUuY3JlYXRlZEF0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdGVwX2ZhaWxlZCc6XG4gICAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XG4gICAgICAgICAgY29tcGxldGVkQXQgPSBlLmNyZWF0ZWRBdDtcbiAgICAgICAgICB1cGRhdGVkQXQgPSBlLmNyZWF0ZWRBdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RlcF9yZXRyeWluZyc6XG4gICAgICAgICAgc3RhdHVzID0gJ3BlbmRpbmcnO1xuICAgICAgICAgIGNvbXBsZXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHVwZGF0ZWRBdCA9IGUuY3JlYXRlZEF0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgc3RlcElkOiBjb3JyZWxhdGlvbklkLFxuICAgICAgcnVuSWQ6IGNyZWF0ZWQucnVuSWQsXG4gICAgICBzdGVwTmFtZTpcbiAgICAgICAgY3JlYXRlZC5ldmVudFR5cGUgPT09ICdzdGVwX2NyZWF0ZWQnXG4gICAgICAgICAgPyAoY3JlYXRlZC5ldmVudERhdGE/LnN0ZXBOYW1lID8/IGNvcnJlbGF0aW9uSWQpXG4gICAgICAgICAgOiBjb3JyZWxhdGlvbklkLFxuICAgICAgc3RhdHVzLFxuICAgICAgYXR0ZW1wdCxcbiAgICAgIGNyZWF0ZWRBdDogY3JlYXRlZC5jcmVhdGVkQXQsXG4gICAgICBzdGFydGVkQXQsXG4gICAgICBjb21wbGV0ZWRBdCxcbiAgICAgIHVwZGF0ZWRBdCxcbiAgICAgIGV2ZW50czogc3RlcEV2ZW50cyxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzdGVwcztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBtYXRlcmlhbGl6ZUhvb2tzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBHcm91cCBob29rXyogZXZlbnRzIGJ5IGNvcnJlbGF0aW9uSWQgYW5kIGJ1aWxkIEhvb2stbGlrZSBlbnRpdGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGVyaWFsaXplSG9va3MoZXZlbnRzOiBFdmVudFtdKTogTWF0ZXJpYWxpemVkSG9va1tdIHtcbiAgY29uc3QgZ3JvdXBzID0gZ3JvdXBCeUNvcnJlbGF0aW9uSWQoZXZlbnRzLCBbJ2hvb2tfJ10pO1xuICBjb25zdCBob29rczogTWF0ZXJpYWxpemVkSG9va1tdID0gW107XG5cbiAgZm9yIChjb25zdCBbY29ycmVsYXRpb25JZCwgaG9va0V2ZW50c10gb2YgZ3JvdXBzKSB7XG4gICAgY29uc3QgY3JlYXRlZCA9IGhvb2tFdmVudHMuZmluZCgoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnKTtcbiAgICBpZiAoIWNyZWF0ZWQpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgcmVjZWl2ZWRFdmVudHMgPSBob29rRXZlbnRzLmZpbHRlcihcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnXG4gICAgKTtcbiAgICBjb25zdCBkaXNwb3NlZCA9IGhvb2tFdmVudHMuZmluZCgoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJyk7XG4gICAgY29uc3QgbGFzdFJlY2VpdmVkID0gcmVjZWl2ZWRFdmVudHMuYXQoLTEpO1xuXG4gICAgaG9va3MucHVzaCh7XG4gICAgICBob29rSWQ6IGNvcnJlbGF0aW9uSWQsXG4gICAgICBydW5JZDogY3JlYXRlZC5ydW5JZCxcbiAgICAgIHRva2VuOlxuICAgICAgICBjcmVhdGVkLmV2ZW50VHlwZSA9PT0gJ2hvb2tfY3JlYXRlZCdcbiAgICAgICAgICA/IGNyZWF0ZWQuZXZlbnREYXRhPy50b2tlblxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgY3JlYXRlZEF0OiBjcmVhdGVkLmNyZWF0ZWRBdCxcbiAgICAgIHJlY2VpdmVkQ291bnQ6IHJlY2VpdmVkRXZlbnRzLmxlbmd0aCxcbiAgICAgIGxhc3RSZWNlaXZlZEF0OiBsYXN0UmVjZWl2ZWQ/LmNyZWF0ZWRBdCxcbiAgICAgIGRpc3Bvc2VkQXQ6IGRpc3Bvc2VkPy5jcmVhdGVkQXQsXG4gICAgICBldmVudHM6IGhvb2tFdmVudHMsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaG9va3M7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gbWF0ZXJpYWxpemVXYWl0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogR3JvdXAgd2FpdF8qIGV2ZW50cyBieSBjb3JyZWxhdGlvbklkIGFuZCBidWlsZCBXYWl0LWxpa2UgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRlcmlhbGl6ZVdhaXRzKGV2ZW50czogRXZlbnRbXSk6IE1hdGVyaWFsaXplZFdhaXRbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IGdyb3VwQnlDb3JyZWxhdGlvbklkKGV2ZW50cywgWyd3YWl0XyddKTtcbiAgY29uc3Qgd2FpdHM6IE1hdGVyaWFsaXplZFdhaXRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2NvcnJlbGF0aW9uSWQsIHdhaXRFdmVudHNdIG9mIGdyb3Vwcykge1xuICAgIGNvbnN0IGNyZWF0ZWQgPSB3YWl0RXZlbnRzLmZpbmQoKGUpID0+IGUuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJyk7XG4gICAgaWYgKCFjcmVhdGVkKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGNvbXBsZXRlZCA9IHdhaXRFdmVudHMuZmluZCgoZSkgPT4gZS5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCcpO1xuXG4gICAgd2FpdHMucHVzaCh7XG4gICAgICB3YWl0SWQ6IGNvcnJlbGF0aW9uSWQsXG4gICAgICBydW5JZDogY3JlYXRlZC5ydW5JZCxcbiAgICAgIHN0YXR1czogY29tcGxldGVkID8gJ2NvbXBsZXRlZCcgOiAnd2FpdGluZycsXG4gICAgICBjcmVhdGVkQXQ6IGNyZWF0ZWQuY3JlYXRlZEF0LFxuICAgICAgcmVzdW1lQXQ6XG4gICAgICAgIGNyZWF0ZWQuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICAgICAgID8gY3JlYXRlZC5ldmVudERhdGE/LnJlc3VtZUF0XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjb21wbGV0ZWRBdDogY29tcGxldGVkPy5jcmVhdGVkQXQsXG4gICAgICBldmVudHM6IHdhaXRFdmVudHMsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gd2FpdHM7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gbWF0ZXJpYWxpemVBbGxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgbWF0ZXJpYWxpemVzIGFsbCBlbnRpdHkgdHlwZXMgZnJvbSBhIGZsYXRcbiAqIGV2ZW50IGxpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRlcmlhbGl6ZUFsbChldmVudHM6IEV2ZW50W10pOiBNYXRlcmlhbGl6ZWRFbnRpdGllcyB7XG4gIHJldHVybiB7XG4gICAgc3RlcHM6IG1hdGVyaWFsaXplU3RlcHMoZXZlbnRzKSxcbiAgICBob29rczogbWF0ZXJpYWxpemVIb29rcyhldmVudHMpLFxuICAgIHdhaXRzOiBtYXRlcmlhbGl6ZVdhaXRzKGV2ZW50cyksXG4gIH07XG59XG4iXX0=
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbWF0ZXJpYWxpemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9ldmVudC1tYXRlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQXNESCxNQUFNLGNBQWMsR0FBRyxDQUNyQixNQUFTLEVBQ1QsVUFBMkMsRUFDaEIsRUFBRTtJQUM3QixJQUFJLENBQUMsVUFBVSxJQUFLLE1BQW1DLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzNFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUYsOEVBQThFO0FBQzlFLCtDQUErQztBQUMvQyw4RUFBOEU7QUFFOUUsU0FBUyxvQkFBb0IsQ0FDM0IsTUFBZSxFQUNmLFFBQWtCO0lBRWxCLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBQzFDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUNoQyxJQUFJLENBQUMsR0FBRztZQUFFLFNBQVM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxTQUFTO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxD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QUM7QUFDZixDQUFDO0FBRUQsOEVBQThFO0FBQzlFLGlCQUFpQjtBQUNqQiw4RUFBOEU7QUFFOUU7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFlO0lBQzVDLE9BQU87UUFDTCxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1FBQy9CLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDL0IsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztLQUNoQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnQgbWF0ZXJpYWxpemF0aW9uIGhlbHBlcnMuXG4gKlxuICogVGhlc2UgZnVuY3Rpb25zIGNvbnZlcnQgYSBmbGF0IGxpc3Qgb2Ygd29ya2Zsb3cgZXZlbnRzIGludG8gZW50aXR5LWxpa2VcbiAqIG9iamVjdHMgKHN0ZXBzLCBob29rcywgd2FpdHMpIGJ5IGdyb3VwaW5nIGV2ZW50cyBieSBjb3JyZWxhdGlvbklkIGFuZFxuICogc3RpdGNoaW5nIHRvZ2V0aGVyIGxpZmVjeWNsZSBldmVudHMuXG4gKlxuICogVGhpcyBlbmFibGVzIGEgXCJ0b3AtZG93blwiIGRhdGEgZmV0Y2hpbmcgcGF0dGVybiB3aGVyZSB0aGUgY2xpZW50IGZldGNoZXNcbiAqIGFsbCBldmVudHMgZm9yIGEgcnVuIG9uY2UsIHRoZW4gbWF0ZXJpYWxpemVzIGVudGl0aWVzIGNsaWVudC1zaWRlIGluc3RlYWRcbiAqIG9mIG1ha2luZyBzZXBhcmF0ZSBBUEkgY2FsbHMgZm9yIGVhY2ggZW50aXR5IHR5cGUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFdmVudCwgU3RlcFN0YXR1cyB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWF0ZXJpYWxpemVkIGVudGl0eSB0eXBlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWF0ZXJpYWxpemVkU3RlcCB7XG4gIHN0ZXBJZDogc3RyaW5nO1xuICBydW5JZDogc3RyaW5nO1xuICBzdGVwTmFtZTogc3RyaW5nO1xuICBzdGF0dXM6IFN0ZXBTdGF0dXM7XG4gIGF0dGVtcHQ6IG51bWJlcjtcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICBvY2N1cnJlZEF0PzogRGF0ZTtcbiAgc3RhcnRlZEF0PzogRGF0ZTtcbiAgY29tcGxldGVkQXQ/OiBEYXRlO1xuICB1cGRhdGVkQXQ6IERhdGU7XG4gIC8qKiBBbGwgZXZlbnRzIGZvciB0aGlzIHN0ZXAsIGluIGluc2VydGlvbiBvcmRlciAqL1xuICBldmVudHM6IEV2ZW50W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWF0ZXJpYWxpemVkSG9vayB7XG4gIGhvb2tJZDogc3RyaW5nO1xuICBydW5JZDogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICBvY2N1cnJlZEF0PzogRGF0ZTtcbiAgcmVjZWl2ZWRDb3VudDogbnVtYmVyO1xuICBsYXN0UmVjZWl2ZWRBdD86IERhdGU7XG4gIGRpc3Bvc2VkQXQ/OiBEYXRlO1xuICAvKiogQWxsIGV2ZW50cyBmb3IgdGhpcyBob29rLCBpbiBpbnNlcnRpb24gb3JkZXIgKi9cbiAgZXZlbnRzOiBFdmVudFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hdGVyaWFsaXplZFdhaXQge1xuICB3YWl0SWQ6IHN0cmluZztcbiAgcnVuSWQ6IHN0cmluZztcbiAgc3RhdHVzOiAnd2FpdGluZycgfCAnY29tcGxldGVkJztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICBvY2N1cnJlZEF0PzogRGF0ZTtcbiAgcmVzdW1lQXQ/OiBEYXRlO1xuICBjb21wbGV0ZWRBdD86IERhdGU7XG4gIC8qKiBBbGwgZXZlbnRzIGZvciB0aGlzIHdhaXQsIGluIGluc2VydGlvbiBvcmRlciAqL1xuICBldmVudHM6IEV2ZW50W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWF0ZXJpYWxpemVkRW50aXRpZXMge1xuICBzdGVwczogTWF0ZXJpYWxpemVkU3RlcFtdO1xuICBob29rczogTWF0ZXJpYWxpemVkSG9va1tdO1xuICB3YWl0czogTWF0ZXJpYWxpemVkV2FpdFtdO1xufVxuXG5jb25zdCB3aXRoT2NjdXJyZWRBdCA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgZW50aXR5OiBULFxuICBvY2N1cnJlZEF0OiBFdmVudFsnb2NjdXJyZWRBdCddIHwgdW5kZWZpbmVkXG4pOiBUICYgeyBvY2N1cnJlZEF0PzogRGF0ZSB9ID0+IHtcbiAgaWYgKCFvY2N1cnJlZEF0IHx8IChlbnRpdHkgYXMgeyBvY2N1cnJlZEF0PzogdW5rbm93biB9KS5vY2N1cnJlZEF0ICE9IG51bGwpIHtcbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG4gIHJldHVybiB7IC4uLmVudGl0eSwgb2NjdXJyZWRBdCB9O1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIZWxwZXI6IGdyb3VwIGV2ZW50cyBieSBjb3JyZWxhdGlvbklkIHByZWZpeFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGdyb3VwQnlDb3JyZWxhdGlvbklkKFxuICBldmVudHM6IEV2ZW50W10sXG4gIHByZWZpeGVzOiBzdHJpbmdbXVxuKTogTWFwPHN0cmluZywgRXZlbnRbXT4ge1xuICBjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgRXZlbnRbXT4oKTtcbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICBjb25zdCBjaWQgPSBldmVudC5jb3JyZWxhdGlvbklkO1xuICAgIGlmICghY2lkKSBjb250aW51ZTtcbiAgICBpZiAoIXByZWZpeGVzLnNvbWUoKHApID0+IGNpZC5zdGFydHNXaXRoKHApKSkgY29udGludWU7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBncm91cHMuZ2V0KGNpZCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBleGlzdGluZy5wdXNoKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzLnNldChjaWQsIFtldmVudF0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3JvdXBzO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIG1hdGVyaWFsaXplU3RlcHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEdyb3VwIHN0ZXBfKiBldmVudHMgYnkgY29ycmVsYXRpb25JZCBhbmQgYnVpbGQgU3RlcC1saWtlIGVudGl0aWVzLlxuICpcbiAqIEhhbmRsZXMgcGFydGlhbCBldmVudCBsaXN0cyBncmFjZWZ1bGx5OiBhIHN0ZXAgbWF5IG9ubHkgaGF2ZSBhXG4gKiBzdGVwX2NyZWF0ZWQgZXZlbnQgd2l0aCBubyBjb21wbGV0aW9uIHlldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGVyaWFsaXplU3RlcHMoZXZlbnRzOiBFdmVudFtdKTogTWF0ZXJpYWxpemVkU3RlcFtdIHtcbiAgY29uc3QgZ3JvdXBzID0gZ3JvdXBCeUNvcnJlbGF0aW9uSWQoZXZlbnRzLCBbJ3N0ZXBfJ10pO1xuICBjb25zdCBzdGVwczogTWF0ZXJpYWxpemVkU3RlcFtdID0gW107XG5cbiAgZm9yIChjb25zdCBbY29ycmVsYXRpb25JZCwgc3RlcEV2ZW50c10gb2YgZ3JvdXBzKSB7XG4gICAgY29uc3QgY3JlYXRlZCA9IHN0ZXBFdmVudHMuZmluZCgoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdzdGVwX2NyZWF0ZWQnKTtcbiAgICBpZiAoIWNyZWF0ZWQpIGNvbnRpbnVlO1xuXG4gICAgbGV0IHN0YXR1czogU3RlcFN0YXR1cyA9ICdwZW5kaW5nJztcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgbGV0IHN0YXJ0ZWRBdDogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgY29tcGxldGVkQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHVwZGF0ZWRBdCA9IGNyZWF0ZWQuY3JlYXRlZEF0O1xuXG4gICAgZm9yIChjb25zdCBlIG9mIHN0ZXBFdmVudHMpIHtcbiAgICAgIHN3aXRjaCAoZS5ldmVudFR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3RlcF9zdGFydGVkJzpcbiAgICAgICAgICBzdGF0dXMgPSAncnVubmluZyc7XG4gICAgICAgICAgYXR0ZW1wdCArPSAxO1xuICAgICAgICAgIGlmICghc3RhcnRlZEF0KSBzdGFydGVkQXQgPSBlLmNyZWF0ZWRBdDtcbiAgICAgICAgICBjb21wbGV0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB1cGRhdGVkQXQgPSBlLmNyZWF0ZWRBdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RlcF9jb21wbGV0ZWQnOlxuICAgICAgICAgIHN0YXR1cyA9ICdjb21wbGV0ZWQnO1xuICAgICAgICAgIGNvbXBsZXRlZEF0ID0gZS5jcmVhdGVkQXQ7XG4gICAgICAgICAgdXBkYXRlZEF0ID0gZS5jcmVhdGVkQXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0ZXBfZmFpbGVkJzpcbiAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcbiAgICAgICAgICBjb21wbGV0ZWRBdCA9IGUuY3JlYXRlZEF0O1xuICAgICAgICAgIHVwZGF0ZWRBdCA9IGUuY3JlYXRlZEF0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdGVwX3JldHJ5aW5nJzpcbiAgICAgICAgICBzdGF0dXMgPSAncGVuZGluZyc7XG4gICAgICAgICAgY29tcGxldGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdXBkYXRlZEF0ID0gZS5jcmVhdGVkQXQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RlcHMucHVzaChcbiAgICAgIHdpdGhPY2N1cnJlZEF0KFxuICAgICAgICB7XG4gICAgICAgICAgc3RlcElkOiBjb3JyZWxhdGlvbklkLFxuICAgICAgICAgIHJ1bklkOiBjcmVhdGVkLnJ1bklkLFxuICAgICAgICAgIHN0ZXBOYW1lOlxuICAgICAgICAgICAgY3JlYXRlZC5ldmVudFR5cGUgPT09ICdzdGVwX2NyZWF0ZWQnXG4gICAgICAgICAgICAgID8gKGNyZWF0ZWQuZXZlbnREYXRhPy5zdGVwTmFtZSA/PyBjb3JyZWxhdGlvbklkKVxuICAgICAgICAgICAgICA6IGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGF0dGVtcHQsXG4gICAgICAgICAgY3JlYXRlZEF0OiBjcmVhdGVkLmNyZWF0ZWRBdCxcbiAgICAgICAgICBzdGFydGVkQXQsXG4gICAgICAgICAgY29tcGxldGVkQXQsXG4gICAgICAgICAgdXBkYXRlZEF0LFxuICAgICAgICAgIGV2ZW50czogc3RlcEV2ZW50cyxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZC5vY2N1cnJlZEF0XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGVwcztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBtYXRlcmlhbGl6ZUhvb2tzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBHcm91cCBob29rXyogZXZlbnRzIGJ5IGNvcnJlbGF0aW9uSWQgYW5kIGJ1aWxkIEhvb2stbGlrZSBlbnRpdGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGVyaWFsaXplSG9va3MoZXZlbnRzOiBFdmVudFtdKTogTWF0ZXJpYWxpemVkSG9va1tdIHtcbiAgY29uc3QgZ3JvdXBzID0gZ3JvdXBCeUNvcnJlbGF0aW9uSWQoZXZlbnRzLCBbJ2hvb2tfJ10pO1xuICBjb25zdCBob29rczogTWF0ZXJpYWxpemVkSG9va1tdID0gW107XG5cbiAgZm9yIChjb25zdCBbY29ycmVsYXRpb25JZCwgaG9va0V2ZW50c10gb2YgZ3JvdXBzKSB7XG4gICAgY29uc3QgY3JlYXRlZCA9IGhvb2tFdmVudHMuZmluZCgoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnKTtcbiAgICBpZiAoIWNyZWF0ZWQpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgcmVjZWl2ZWRFdmVudHMgPSBob29rRXZlbnRzLmZpbHRlcihcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ2hvb2tfcmVjZWl2ZWQnXG4gICAgKTtcbiAgICBjb25zdCBkaXNwb3NlZCA9IGhvb2tFdmVudHMuZmluZCgoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJyk7XG4gICAgY29uc3QgbGFzdFJlY2VpdmVkID0gcmVjZWl2ZWRFdmVudHMuYXQoLTEpO1xuXG4gICAgaG9va3MucHVzaChcbiAgICAgIHdpdGhPY2N1cnJlZEF0KFxuICAgICAgICB7XG4gICAgICAgICAgaG9va0lkOiBjb3JyZWxhdGlvbklkLFxuICAgICAgICAgIHJ1bklkOiBjcmVhdGVkLnJ1bklkLFxuICAgICAgICAgIHRva2VuOlxuICAgICAgICAgICAgY3JlYXRlZC5ldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnXG4gICAgICAgICAgICAgID8gY3JlYXRlZC5ldmVudERhdGE/LnRva2VuXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNyZWF0ZWRBdDogY3JlYXRlZC5jcmVhdGVkQXQsXG4gICAgICAgICAgcmVjZWl2ZWRDb3VudDogcmVjZWl2ZWRFdmVudHMubGVuZ3RoLFxuICAgICAgICAgIGxhc3RSZWNlaXZlZEF0OiBsYXN0UmVjZWl2ZWQ/LmNyZWF0ZWRBdCxcbiAgICAgICAgICBkaXNwb3NlZEF0OiBkaXNwb3NlZD8uY3JlYXRlZEF0LFxuICAgICAgICAgIGV2ZW50czogaG9va0V2ZW50cyxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZC5vY2N1cnJlZEF0XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBob29rcztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBtYXRlcmlhbGl6ZVdhaXRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBHcm91cCB3YWl0XyogZXZlbnRzIGJ5IGNvcnJlbGF0aW9uSWQgYW5kIGJ1aWxkIFdhaXQtbGlrZSBlbnRpdGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGVyaWFsaXplV2FpdHMoZXZlbnRzOiBFdmVudFtdKTogTWF0ZXJpYWxpemVkV2FpdFtdIHtcbiAgY29uc3QgZ3JvdXBzID0gZ3JvdXBCeUNvcnJlbGF0aW9uSWQoZXZlbnRzLCBbJ3dhaXRfJ10pO1xuICBjb25zdCB3YWl0czogTWF0ZXJpYWxpemVkV2FpdFtdID0gW107XG5cbiAgZm9yIChjb25zdCBbY29ycmVsYXRpb25JZCwgd2FpdEV2ZW50c10gb2YgZ3JvdXBzKSB7XG4gICAgY29uc3QgY3JlYXRlZCA9IHdhaXRFdmVudHMuZmluZCgoZSkgPT4gZS5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKTtcbiAgICBpZiAoIWNyZWF0ZWQpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgY29tcGxldGVkID0gd2FpdEV2ZW50cy5maW5kKChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJyk7XG5cbiAgICB3YWl0cy5wdXNoKFxuICAgICAgd2l0aE9jY3VycmVkQXQoXG4gICAgICAgIHtcbiAgICAgICAgICB3YWl0SWQ6IGNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgcnVuSWQ6IGNyZWF0ZWQucnVuSWQsXG4gICAgICAgICAgc3RhdHVzOiBjb21wbGV0ZWQgPyAnY29tcGxldGVkJyA6ICd3YWl0aW5nJyxcbiAgICAgICAgICBjcmVhdGVkQXQ6IGNyZWF0ZWQuY3JlYXRlZEF0LFxuICAgICAgICAgIHJlc3VtZUF0OlxuICAgICAgICAgICAgY3JlYXRlZC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnXG4gICAgICAgICAgICAgID8gY3JlYXRlZC5ldmVudERhdGE/LnJlc3VtZUF0XG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGNvbXBsZXRlZEF0OiBjb21wbGV0ZWQ/LmNyZWF0ZWRBdCxcbiAgICAgICAgICBldmVudHM6IHdhaXRFdmVudHMsXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQub2NjdXJyZWRBdFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gd2FpdHM7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gbWF0ZXJpYWxpemVBbGxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgbWF0ZXJpYWxpemVzIGFsbCBlbnRpdHkgdHlwZXMgZnJvbSBhIGZsYXRcbiAqIGV2ZW50IGxpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRlcmlhbGl6ZUFsbChldmVudHM6IEV2ZW50W10pOiBNYXRlcmlhbGl6ZWRFbnRpdGllcyB7XG4gIHJldHVybiB7XG4gICAgc3RlcHM6IG1hdGVyaWFsaXplU3RlcHMoZXZlbnRzKSxcbiAgICBob29rczogbWF0ZXJpYWxpemVIb29rcyhldmVudHMpLFxuICAgIHdhaXRzOiBtYXRlcmlhbGl6ZVdhaXRzKGV2ZW50cyksXG4gIH07XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/web-shared",
|
|
3
3
|
"description": "Shared components for Workflow Observability UI",
|
|
4
|
-
"version": "5.0.0-beta.
|
|
4
|
+
"version": "5.0.0-beta.24",
|
|
5
5
|
"private": false,
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"streamdown": "2.3.0",
|
|
56
56
|
"tailwind-merge": "3.5.0",
|
|
57
57
|
"tailwindcss": "4",
|
|
58
|
-
"@workflow/core": "5.0.0-beta.
|
|
58
|
+
"@workflow/core": "5.0.0-beta.24",
|
|
59
59
|
"@workflow/utils": "5.0.0-beta.4",
|
|
60
60
|
"@workflow/world": "5.0.0-beta.13"
|
|
61
61
|
},
|
|
@@ -29,6 +29,27 @@ const MARKER_EVENT_TYPES: Set<Event['eventType']> = new Set([
|
|
|
29
29
|
'attr_set',
|
|
30
30
|
]);
|
|
31
31
|
|
|
32
|
+
const findEventByType = (
|
|
33
|
+
events: Event[],
|
|
34
|
+
eventTypes: Event['eventType'][]
|
|
35
|
+
): Event | undefined => {
|
|
36
|
+
for (const eventType of eventTypes) {
|
|
37
|
+
const event = events.find((e) => e.eventType === eventType);
|
|
38
|
+
if (event) return event;
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const withOccurredAt = <T extends object>(
|
|
44
|
+
entity: T,
|
|
45
|
+
occurredAt: Event['occurredAt'] | undefined
|
|
46
|
+
): T & { occurredAt?: Date } => {
|
|
47
|
+
if (!occurredAt || (entity as { occurredAt?: unknown }).occurredAt != null) {
|
|
48
|
+
return entity;
|
|
49
|
+
}
|
|
50
|
+
return { ...entity, occurredAt };
|
|
51
|
+
};
|
|
52
|
+
|
|
32
53
|
/**
|
|
33
54
|
* Convert workflow events to span events
|
|
34
55
|
* Only includes events that should be displayed as markers
|
|
@@ -60,6 +81,7 @@ export const waitEventsToWaitEntity = (
|
|
|
60
81
|
waitId: string;
|
|
61
82
|
runId: string;
|
|
62
83
|
createdAt: Date;
|
|
84
|
+
occurredAt?: Date;
|
|
63
85
|
resumeAt?: Date;
|
|
64
86
|
completedAt?: Date;
|
|
65
87
|
} | null => {
|
|
@@ -70,15 +92,18 @@ export const waitEventsToWaitEntity = (
|
|
|
70
92
|
const completedEvent = events.find(
|
|
71
93
|
(event) => event.eventType === 'wait_completed'
|
|
72
94
|
);
|
|
73
|
-
return
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
95
|
+
return withOccurredAt(
|
|
96
|
+
{
|
|
97
|
+
waitId: startEvent.correlationId,
|
|
98
|
+
runId: startEvent.runId,
|
|
99
|
+
createdAt: startEvent.createdAt,
|
|
100
|
+
resumeAt: startEvent.eventData?.resumeAt
|
|
101
|
+
? new Date(startEvent.eventData.resumeAt)
|
|
102
|
+
: undefined,
|
|
103
|
+
completedAt: completedEvent?.createdAt,
|
|
104
|
+
},
|
|
105
|
+
startEvent.occurredAt
|
|
106
|
+
);
|
|
82
107
|
};
|
|
83
108
|
|
|
84
109
|
/**
|
|
@@ -141,6 +166,7 @@ export const stepEventsToStepEntity = (
|
|
|
141
166
|
attempt: number;
|
|
142
167
|
createdAt: Date;
|
|
143
168
|
updatedAt: Date;
|
|
169
|
+
occurredAt?: Date;
|
|
144
170
|
startedAt?: Date;
|
|
145
171
|
completedAt?: Date;
|
|
146
172
|
specVersion?: number;
|
|
@@ -191,18 +217,24 @@ export const stepEventsToStepEntity = (
|
|
|
191
217
|
if (attempt === 0) attempt = 1;
|
|
192
218
|
|
|
193
219
|
const lastEvent = events[events.length - 1];
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
220
|
+
const occurrenceEvent =
|
|
221
|
+
findEventByType(events, ['step_created', 'step_started']) ?? anchorEvent;
|
|
222
|
+
|
|
223
|
+
return withOccurredAt(
|
|
224
|
+
{
|
|
225
|
+
stepId: anchorEvent.correlationId ?? '',
|
|
226
|
+
runId: anchorEvent.runId,
|
|
227
|
+
stepName: createdEvent?.eventData?.stepName ?? '',
|
|
228
|
+
status,
|
|
229
|
+
attempt,
|
|
230
|
+
createdAt: anchorEvent.createdAt,
|
|
231
|
+
updatedAt: lastEvent?.createdAt ?? anchorEvent.createdAt,
|
|
232
|
+
startedAt,
|
|
233
|
+
completedAt,
|
|
234
|
+
specVersion: anchorEvent.specVersion,
|
|
235
|
+
},
|
|
236
|
+
occurrenceEvent.occurredAt
|
|
237
|
+
);
|
|
206
238
|
};
|
|
207
239
|
|
|
208
240
|
/**
|
|
@@ -271,6 +303,7 @@ export const hookEventsToHookEntity = (
|
|
|
271
303
|
runId: string;
|
|
272
304
|
token?: string;
|
|
273
305
|
createdAt: Date;
|
|
306
|
+
occurredAt?: Date;
|
|
274
307
|
receivedCount: number;
|
|
275
308
|
lastReceivedAt?: Date;
|
|
276
309
|
disposedAt?: Date;
|
|
@@ -288,15 +321,18 @@ export const hookEventsToHookEntity = (
|
|
|
288
321
|
(event) => event.eventType === 'hook_disposed'
|
|
289
322
|
);
|
|
290
323
|
const lastReceivedEvent = receivedEvents.at(-1);
|
|
291
|
-
return
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
324
|
+
return withOccurredAt(
|
|
325
|
+
{
|
|
326
|
+
hookId: createdEvent.correlationId,
|
|
327
|
+
runId: createdEvent.runId,
|
|
328
|
+
token: createdEvent.eventData?.token,
|
|
329
|
+
createdAt: createdEvent.createdAt,
|
|
330
|
+
receivedCount: receivedEvents.length,
|
|
331
|
+
lastReceivedAt: lastReceivedEvent?.createdAt || undefined,
|
|
332
|
+
disposedAt: disposedEvents.at(-1)?.createdAt || undefined,
|
|
333
|
+
},
|
|
334
|
+
createdEvent.occurredAt
|
|
335
|
+
);
|
|
300
336
|
};
|
|
301
337
|
|
|
302
338
|
/**
|
|
@@ -346,9 +382,13 @@ export function runToSpan(
|
|
|
346
382
|
// Only embed identification fields — not the full object with
|
|
347
383
|
// input/output/error which may contain non-cloneable types.
|
|
348
384
|
const { input: _i, output: _o, error: _e, ...runIdentity } = run;
|
|
385
|
+
const occurrenceEvent = findEventByType(runEvents, [
|
|
386
|
+
'run_created',
|
|
387
|
+
'run_started',
|
|
388
|
+
]);
|
|
349
389
|
const attributes = {
|
|
350
390
|
resource: 'run' as const,
|
|
351
|
-
data: runIdentity,
|
|
391
|
+
data: withOccurredAt(runIdentity, occurrenceEvent?.occurredAt),
|
|
352
392
|
};
|
|
353
393
|
|
|
354
394
|
// Use createdAt as span start time, with activeStartTime for when execution began
|
|
@@ -23,6 +23,7 @@ export interface MaterializedStep {
|
|
|
23
23
|
status: StepStatus;
|
|
24
24
|
attempt: number;
|
|
25
25
|
createdAt: Date;
|
|
26
|
+
occurredAt?: Date;
|
|
26
27
|
startedAt?: Date;
|
|
27
28
|
completedAt?: Date;
|
|
28
29
|
updatedAt: Date;
|
|
@@ -35,6 +36,7 @@ export interface MaterializedHook {
|
|
|
35
36
|
runId: string;
|
|
36
37
|
token?: string;
|
|
37
38
|
createdAt: Date;
|
|
39
|
+
occurredAt?: Date;
|
|
38
40
|
receivedCount: number;
|
|
39
41
|
lastReceivedAt?: Date;
|
|
40
42
|
disposedAt?: Date;
|
|
@@ -47,6 +49,7 @@ export interface MaterializedWait {
|
|
|
47
49
|
runId: string;
|
|
48
50
|
status: 'waiting' | 'completed';
|
|
49
51
|
createdAt: Date;
|
|
52
|
+
occurredAt?: Date;
|
|
50
53
|
resumeAt?: Date;
|
|
51
54
|
completedAt?: Date;
|
|
52
55
|
/** All events for this wait, in insertion order */
|
|
@@ -59,6 +62,16 @@ export interface MaterializedEntities {
|
|
|
59
62
|
waits: MaterializedWait[];
|
|
60
63
|
}
|
|
61
64
|
|
|
65
|
+
const withOccurredAt = <T extends object>(
|
|
66
|
+
entity: T,
|
|
67
|
+
occurredAt: Event['occurredAt'] | undefined
|
|
68
|
+
): T & { occurredAt?: Date } => {
|
|
69
|
+
if (!occurredAt || (entity as { occurredAt?: unknown }).occurredAt != null) {
|
|
70
|
+
return entity;
|
|
71
|
+
}
|
|
72
|
+
return { ...entity, occurredAt };
|
|
73
|
+
};
|
|
74
|
+
|
|
62
75
|
// ---------------------------------------------------------------------------
|
|
63
76
|
// Helper: group events by correlationId prefix
|
|
64
77
|
// ---------------------------------------------------------------------------
|
|
@@ -133,21 +146,26 @@ export function materializeSteps(events: Event[]): MaterializedStep[] {
|
|
|
133
146
|
}
|
|
134
147
|
}
|
|
135
148
|
|
|
136
|
-
steps.push(
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
steps.push(
|
|
150
|
+
withOccurredAt(
|
|
151
|
+
{
|
|
152
|
+
stepId: correlationId,
|
|
153
|
+
runId: created.runId,
|
|
154
|
+
stepName:
|
|
155
|
+
created.eventType === 'step_created'
|
|
156
|
+
? (created.eventData?.stepName ?? correlationId)
|
|
157
|
+
: correlationId,
|
|
158
|
+
status,
|
|
159
|
+
attempt,
|
|
160
|
+
createdAt: created.createdAt,
|
|
161
|
+
startedAt,
|
|
162
|
+
completedAt,
|
|
163
|
+
updatedAt,
|
|
164
|
+
events: stepEvents,
|
|
165
|
+
},
|
|
166
|
+
created.occurredAt
|
|
167
|
+
)
|
|
168
|
+
);
|
|
151
169
|
}
|
|
152
170
|
|
|
153
171
|
return steps;
|
|
@@ -174,19 +192,24 @@ export function materializeHooks(events: Event[]): MaterializedHook[] {
|
|
|
174
192
|
const disposed = hookEvents.find((e) => e.eventType === 'hook_disposed');
|
|
175
193
|
const lastReceived = receivedEvents.at(-1);
|
|
176
194
|
|
|
177
|
-
hooks.push(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
195
|
+
hooks.push(
|
|
196
|
+
withOccurredAt(
|
|
197
|
+
{
|
|
198
|
+
hookId: correlationId,
|
|
199
|
+
runId: created.runId,
|
|
200
|
+
token:
|
|
201
|
+
created.eventType === 'hook_created'
|
|
202
|
+
? created.eventData?.token
|
|
203
|
+
: undefined,
|
|
204
|
+
createdAt: created.createdAt,
|
|
205
|
+
receivedCount: receivedEvents.length,
|
|
206
|
+
lastReceivedAt: lastReceived?.createdAt,
|
|
207
|
+
disposedAt: disposed?.createdAt,
|
|
208
|
+
events: hookEvents,
|
|
209
|
+
},
|
|
210
|
+
created.occurredAt
|
|
211
|
+
)
|
|
212
|
+
);
|
|
190
213
|
}
|
|
191
214
|
|
|
192
215
|
return hooks;
|
|
@@ -209,18 +232,23 @@ export function materializeWaits(events: Event[]): MaterializedWait[] {
|
|
|
209
232
|
|
|
210
233
|
const completed = waitEvents.find((e) => e.eventType === 'wait_completed');
|
|
211
234
|
|
|
212
|
-
waits.push(
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
235
|
+
waits.push(
|
|
236
|
+
withOccurredAt(
|
|
237
|
+
{
|
|
238
|
+
waitId: correlationId,
|
|
239
|
+
runId: created.runId,
|
|
240
|
+
status: completed ? 'completed' : 'waiting',
|
|
241
|
+
createdAt: created.createdAt,
|
|
242
|
+
resumeAt:
|
|
243
|
+
created.eventType === 'wait_created'
|
|
244
|
+
? created.eventData?.resumeAt
|
|
245
|
+
: undefined,
|
|
246
|
+
completedAt: completed?.createdAt,
|
|
247
|
+
events: waitEvents,
|
|
248
|
+
},
|
|
249
|
+
created.occurredAt
|
|
250
|
+
)
|
|
251
|
+
);
|
|
224
252
|
}
|
|
225
253
|
|
|
226
254
|
return waits;
|