@workflow/web-shared 5.0.0-beta.15 → 5.0.0-beta.17
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/event-list-view.d.ts +1 -1
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +20 -3
- package/dist/components/new-trace-viewer/components/timeline.d.ts +1 -1
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/timeline.js +40 -4
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/trace-viewer.js +8 -9
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +26 -32
- package/dist/components/sidebar/attributes-block.d.ts +28 -0
- package/dist/components/sidebar/attributes-block.d.ts.map +1 -0
- package/dist/components/sidebar/attributes-block.js +83 -0
- package/dist/components/sidebar/entity-detail-panel.js +2 -2
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +8 -1
- package/dist/components/trace-viewer/components/node.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/node.js +2 -1
- package/dist/components/ui/context-card.d.ts +47 -0
- package/dist/components/ui/context-card.d.ts.map +1 -0
- package/dist/components/ui/context-card.js +471 -0
- package/dist/components/ui/timestamp-tooltip.d.ts +34 -1
- package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
- package/dist/components/ui/timestamp-tooltip.js +80 -132
- package/dist/components/workflow-trace-view.d.ts.map +1 -1
- package/dist/components/workflow-trace-view.js +8 -10
- package/dist/components/workflow-traces/event-colors.d.ts +1 -0
- package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
- package/dist/components/workflow-traces/event-colors.js +12 -1
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +2 -1
- package/dist/lib/trace-builder.d.ts +15 -0
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +27 -2
- package/dist/styles.css +9 -0
- package/package.json +7 -5
- package/src/components/event-list-view.tsx +25 -2
- package/src/components/new-trace-viewer/components/timeline.tsx +82 -2
- package/src/components/new-trace-viewer/trace-viewer.tsx +17 -14
- package/src/components/sidebar/attribute-panel.tsx +117 -119
- package/src/components/sidebar/attributes-block.tsx +182 -0
- package/src/components/sidebar/entity-detail-panel.tsx +1 -1
- package/src/components/sidebar/events-list.tsx +8 -0
- package/src/components/trace-viewer/components/node.tsx +3 -2
- package/src/components/ui/context-card.tsx +784 -0
- package/src/components/ui/timestamp-tooltip.tsx +132 -194
- package/src/components/workflow-trace-view.tsx +18 -10
- package/src/components/workflow-traces/event-colors.ts +12 -0
- package/src/components/workflow-traces/trace-span-construction.ts +1 -0
- package/src/lib/trace-builder.ts +32 -1
- package/src/styles.css +9 -0
|
@@ -21,6 +21,7 @@ const MARKER_EVENT_TYPES = new Set([
|
|
|
21
21
|
'run_failed',
|
|
22
22
|
'wait_created',
|
|
23
23
|
'wait_completed',
|
|
24
|
+
'attr_set',
|
|
24
25
|
]);
|
|
25
26
|
/**
|
|
26
27
|
* Convert workflow events to span events
|
|
@@ -291,4 +292,4 @@ export function runToSpan(run, runEvents, nowTime) {
|
|
|
291
292
|
: undefined,
|
|
292
293
|
};
|
|
293
294
|
}
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy93b3JrZmxvdy10cmFjZXMvdHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLElBQUksRUFBRSwwQkFBMEI7SUFDaEMsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBNEIsSUFBSSxHQUFHLENBQUM7SUFDMUQsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YsY0FBYztJQUNkLGVBQWU7SUFDZixhQUFhO0lBQ2IsWUFBWTtJQUNaLGNBQWM7SUFDZCxnQkFBZ0I7Q0FDakIsQ0FBQyxDQUFDO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxNQUFlLEVBQ2YsV0FBVyxHQUFHLElBQUk7SUFFbEIsT0FBTyxNQUFNO1NBQ1YsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDaEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzdEO1NBQ0EsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQ3JCLFNBQVMsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFD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eUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFM0QsT0FBTztRQUNMLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLElBQUksR0FBRyxDQUFDO1FBQ25FLElBQUksRUFBRSxDQUFDLEVBQUUscUJBQXFCO1FBQzlCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1FBQ25CLFVBQVUsRUFBRSxDQUFDO1FBQ2IsVUFBVTtRQUNWLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTTtRQUNOLFNBQVMsRUFBRSxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQ3hDLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQ2hDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO1FBQ25ELDBGQUEwRjtRQUMxRixlQUFlLEVBQ2IsZUFBZSxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFO1lBQ3BFLENBQUMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxTQUFTO0tBQ2hCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGdW5jdGlvbnMgZm9yIGNvbnN0cnVjdGluZyBPcGVuVGVsZW1ldHJ5IHNwYW5zIGZyb20gd29ya2Zsb3cgZW50aXRpZXNcbiAqL1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgRXZlbnQsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB0eXBlIHsgU3BhbiwgU3BhbkV2ZW50IH0gZnJvbSAnLi4vdHJhY2Utdmlld2VyL3R5cGVzJztcbmltcG9ydCB7IHNob3VsZFNob3dWZXJ0aWNhbExpbmUgfSBmcm9tICcuL2V2ZW50LWNvbG9ycyc7XG5pbXBvcnQgeyBjYWxjdWxhdGVEdXJhdGlvbiwgZGF0ZVRvT3RlbFRpbWUgfSBmcm9tICcuL3RyYWNlLXRpbWUtdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgV09SS0ZMT1dfTElCUkFSWSA9IHtcbiAgbmFtZTogJ3dvcmtmbG93LWRldmVsb3BtZW50LWtpdCcsXG4gIHZlcnNpb246ICc0LjAuMCcsXG59O1xuXG4vKipcbiAqIEV2ZW50IHR5cGVzIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBhcyB2aXN1YWwgbWFya2VycyBpbiB0aGUgdHJhY2Ugdmlld2VyXG4gKi9cbmNvbnN0IE1BUktFUl9FVkVOVF9UWVBFUzogU2V0PEV2ZW50WydldmVudFR5cGUnXT4gPSBuZXcgU2V0KFtcbiAgJ2hvb2tfY3JlYXRlZCcsXG4gICdob29rX3JlY2VpdmVkJyxcbiAgJ2hvb2tfZGlzcG9zZWQnLFxuICAnc3RlcF9zdGFydGVkJyxcbiAgJ3N0ZXBfcmV0cnlpbmcnLFxuICAnc3RlcF9mYWlsZWQnLFxuICAncnVuX2ZhaWxlZCcsXG4gICd3YWl0X2NyZWF0ZWQnLFxuICAnd2FpdF9jb21wbGV0ZWQnLFxuXSk7XG5cbi8qKlxuICogQ29udmVydCB3b3JrZmxvdyBldmVudHMgdG8gc3BhbiBldmVudHNcbiAqIE9ubHkgaW5jbHVkZXMgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBhcyBtYXJrZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKFxuICBldmVudHM6IEV2ZW50W10sXG4gIGZpbHRlclR5cGVzID0gdHJ1ZVxuKTogU3BhbkV2ZW50W10ge1xuICByZXR1cm4gZXZlbnRzXG4gICAgLmZpbHRlcigoZXZlbnQpID0+XG4gICAgICBmaWx0ZXJUeXBlcyA/IE1BUktFUl9FVkVOVF9UWVBFUy5oYXMoZXZlbnQuZXZlbnRUeXBlKSA6IHRydWVcbiAgICApXG4gICAgLm1hcCgoZXZlbnQpID0+ICh7XG4gICAgICBuYW1lOiBldmVudC5ldmVudFR5cGUsXG4gICAgICB0aW1lc3RhbXA6IGRhdGVUb090ZWxUaW1lKGV2ZW50LmNyZWF0ZWRBdCksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICAgIGNvcnJlbGF0aW9uSWQ6IGV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgICAgIGV2ZW50RGF0YTogJ2V2ZW50RGF0YScgaW4gZXZlbnQgPyBldmVudC5ldmVudERhdGEgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgLy8gQ29udHJvbCB3aGV0aGVyIHRvIHNob3cgdmVydGljYWwgbGluZSBpbiB0aW1lbGluZVxuICAgICAgc2hvd1ZlcnRpY2FsTGluZTogc2hvdWxkU2hvd1ZlcnRpY2FsTGluZShldmVudC5ldmVudFR5cGUpLFxuICAgIH0pKTtcbn1cblxuZXhwb3J0IGNvbnN0IHdhaXRFdmVudHNUb1dhaXRFbnRpdHkgPSAoXG4gIGV2ZW50czogRXZlbnRbXVxuKToge1xuICB3YWl0SWQ6IHN0cmluZztcbiAgcnVuSWQ6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICByZXN1bWVBdD86IERhdGU7XG4gIGNvbXBsZXRlZEF0PzogRGF0ZTtcbn0gfCBudWxsID0+IHtcbiAgY29uc3Qgc3RhcnRFdmVudCA9IGV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJyk7XG4gIGlmICghc3RhcnRFdmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGNvbXBsZXRlZEV2ZW50ID0gZXZlbnRzLmZpbmQoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NvbXBsZXRlZCdcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICB3YWl0SWQ6IHN0YXJ0RXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICBydW5JZDogc3RhcnRFdmVudC5ydW5JZCxcbiAgICBjcmVhdGVkQXQ6IHN0YXJ0RXZlbnQuY3JlYXRlZEF0LFxuICAgIHJlc3VtZUF0OiBzdGFydEV2ZW50LmV2ZW50RGF0YT8ucmVzdW1lQXRcbiAgICAgID8gbmV3IERhdGUoc3RhcnRFdmVudC5ldmVudERhdGEucmVzdW1lQXQpXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICBjb21wbGV0ZWRBdDogY29tcGxldGVkRXZlbnQ/LmNyZWF0ZWRBdCxcbiAgfTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSB3b3JrZmxvdyBXYWl0IHRvIGFuIE9wZW5UZWxlbWV0cnkgU3BhblxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FpdFRvU3BhbihcbiAgZXZlbnRzOiBFdmVudFtdLFxuICBtYXhFbmRUaW1lOiBEYXRlLFxuICBmYWxsYmFja0VuZFRpbWUgPSBtYXhFbmRUaW1lXG4pOiBTcGFuIHwgbnVsbCB7XG4gIGNvbnN0IHdhaXQgPSB3YWl0RXZlbnRzVG9XYWl0RW50aXR5KGV2ZW50cyk7XG4gIGlmICghd2FpdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHN0YXJ0VGltZSA9IHdhaXQuY3JlYXRlZEF0O1xuICBjb25zdCBzdGFydE1zID0gc3RhcnRUaW1lLmdldFRpbWUoKTtcbiAgbGV0IGVuZFRpbWUgPSB3YWl0LmNvbXBsZXRlZEF0O1xuICBpZiAoIWVuZFRpbWUpIHtcbiAgICBjb25zdCBmYWxsYmFja0NhcCA9XG4gICAgICB3YWl0LnJlc3VtZUF0ICYmIHdhaXQucmVzdW1lQXQuZ2V0VGltZSgpIDwgZmFsbGJhY2tFbmRUaW1lLmdldFRpbWUoKVxuICAgICAgICA/IHdhaXQucmVzdW1lQXRcbiAgICAgICAgOiBmYWxsYmFja0VuZFRpbWU7XG4gICAgZW5kVGltZSA9XG4gICAgICBtYXhFbmRUaW1lLmdldFRpbWUoKSA+IHN0YXJ0TXMgJiZcbiAgICAgIG1heEVuZFRpbWUuZ2V0VGltZSgpIDwgZmFsbGJhY2tDYXAuZ2V0VGltZSgpXG4gICAgICAgID8gbWF4RW5kVGltZVxuICAgICAgICA6IGZhbGxiYWNrQ2FwO1xuICB9XG4gIGNvbnN0IHN0YXJ0ID0gZGF0ZVRvT3RlbFRpbWUoc3RhcnRUaW1lKTtcbiAgY29uc3QgZW5kID0gZGF0ZVRvT3RlbFRpbWUoZW5kVGltZSk7XG4gIGNvbnN0IGR1cmF0aW9uID0gY2FsY3VsYXRlRHVyYXRpb24oc3RhcnRUaW1lLCBlbmRUaW1lKTtcbiAgY29uc3Qgc3BhbkV2ZW50cyA9IGNvbnZlcnRFdmVudHNUb1NwYW5FdmVudHMoZXZlbnRzLCBmYWxzZSk7XG4gIHJldHVybiB7XG4gICAgc3BhbklkOiB3YWl0LndhaXRJZCxcbiAgICBuYW1lOiAnc2xlZXAnLFxuICAgIGtpbmQ6IDEsIC8vIElOVEVSTkFMIHNwYW4ga2luZFxuICAgIHJlc291cmNlOiAnc2xlZXAnLFxuICAgIGxpYnJhcnk6IFdPUktGTE9XX0xJQlJBUlksXG4gICAgc3RhdHVzOiB7IGNvZGU6IDAgfSxcbiAgICB0cmFjZUZsYWdzOiAxLFxuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgIHJlc291cmNlOiAnc2xlZXAnIGFzIGNvbnN0LFxuICAgICAgZGF0YTogd2FpdCwgLy8gd2FpdCBpcyBhIHBsYWluIG9iamVjdCBidWlsdCBmcm9tIGV2ZW50cywgbm8gbm9uLWNsb25lYWJsZSB0eXBlc1xuICAgIH0sXG4gICAgbGlua3M6IFtdLFxuICAgIGV2ZW50czogc3BhbkV2ZW50cyxcbiAgICBkdXJhdGlvbixcbiAgICBzdGFydFRpbWU6IHN0YXJ0LFxuICAgIGVuZFRpbWU6IGVuZCxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHN0ZXBFdmVudHNUb1N0ZXBFbnRpdHkgPSAoXG4gIGV2ZW50czogRXZlbnRbXVxuKToge1xuICBzdGVwSWQ6IHN0cmluZztcbiAgcnVuSWQ6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgc3RhdHVzOiAncGVuZGluZycgfCAncnVubmluZycgfCAnY29tcGxldGVkJyB8ICdmYWlsZWQnIHwgJ2NhbmNlbGxlZCc7XG4gIGF0dGVtcHQ6IG51bWJlcjtcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICB1cGRhdGVkQXQ6IERhdGU7XG4gIHN0YXJ0ZWRBdD86IERhdGU7XG4gIGNvbXBsZXRlZEF0PzogRGF0ZTtcbiAgc3BlY1ZlcnNpb24/OiBudW1iZXI7XG59IHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNyZWF0ZWRFdmVudCA9IGV2ZW50cy5maW5kKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9jcmVhdGVkJ1xuICApO1xuXG4gIC8vIFYxIHJ1bnMgZG9uJ3QgZW1pdCBzdGVwX2NyZWF0ZWQgZXZlbnRzLiBGYWxsIGJhY2sgdG8gdGhlIGVhcmxpZXN0IGV2ZW50XG4gIC8vIGluIHRoZSBncm91cCBzbyB3ZSBjYW4gc3RpbGwgYnVpbGQgYSBzdGVwIHNwYW4uXG4gIGNvbnN0IGFuY2hvckV2ZW50ID0gY3JlYXRlZEV2ZW50ID8/IGV2ZW50c1swXTtcbiAgaWYgKCFhbmNob3JFdmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gV2FsayBldmVudHMgaW4gb3JkZXIgdG8gZGVyaXZlIHN0YXR1cywgYXR0ZW1wdCBjb3VudCwgYW5kIHRpbWVzdGFtcHMuXG4gIC8vIEhhbmRsZXMgYm90aCBzdGVwX3JldHJ5aW5nIGFuZCBjb25zZWN1dGl2ZSBzdGVwX3N0YXJ0ZWQgYXMgcmV0cnkgc2lnbmFscy5cbiAgbGV0IHN0YXR1czogJ3BlbmRpbmcnIHwgJ3J1bm5pbmcnIHwgJ2NvbXBsZXRlZCcgfCAnZmFpbGVkJyB8ICdjYW5jZWxsZWQnID1cbiAgICAncGVuZGluZyc7XG4gIGxldCBhdHRlbXB0ID0gMDtcbiAgbGV0IHN0YXJ0ZWRBdDogRGF0ZSB8IHVuZGVmaW5lZDtcbiAgbGV0IGNvbXBsZXRlZEF0OiBEYXRlIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgZSBvZiBldmVudHMpIHtcbiAgICBzd2l0Y2ggKGUuZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICdzdGVwX3N0YXJ0ZWQnOlxuICAgICAgICBzdGF0dXMgPSAncnVubmluZyc7XG4gICAgICAgIGF0dGVtcHQgKz0gMTtcbiAgICAgICAgaWYgKCFzdGFydGVkQXQpIHN0YXJ0ZWRBdCA9IGUuY3JlYXRlZEF0O1xuICAgICAgICBjb21wbGV0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGVwX2NvbXBsZXRlZCc6XG4gICAgICAgIHN0YXR1cyA9ICdjb21wbGV0ZWQnO1xuICAgICAgICBjb21wbGV0ZWRBdCA9IGUuY3JlYXRlZEF0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0ZXBfZmFpbGVkJzpcbiAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XG4gICAgICAgIGNvbXBsZXRlZEF0ID0gZS5jcmVhdGVkQXQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RlcF9yZXRyeWluZyc6XG4gICAgICAgIHN0YXR1cyA9ICdwZW5kaW5nJztcbiAgICAgICAgY29tcGxldGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVuc3VyZSBhdCBsZWFzdCBhdHRlbXB0IDEgaWYgd2UgbmV2ZXIgc2F3IHN0ZXBfc3RhcnRlZFxuICBpZiAoYXR0ZW1wdCA9PT0gMCkgYXR0ZW1wdCA9IDE7XG5cbiAgY29uc3QgbGFzdEV2ZW50ID0gZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIHtcbiAgICBzdGVwSWQ6IGFuY2hvckV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gJycsXG4gICAgcnVuSWQ6IGFuY2hvckV2ZW50LnJ1bklkLFxuICAgIHN0ZXBOYW1lOiBjcmVhdGVkRXZlbnQ/LmV2ZW50RGF0YT8uc3RlcE5hbWUgPz8gJycsXG4gICAgc3RhdHVzLFxuICAgIGF0dGVtcHQsXG4gICAgY3JlYXRlZEF0OiBhbmNob3JFdmVudC5jcmVhdGVkQXQsXG4gICAgdXBkYXRlZEF0OiBsYXN0RXZlbnQ/LmNyZWF0ZWRBdCA/PyBhbmNob3JFdmVudC5jcmVhdGVkQXQsXG4gICAgc3RhcnRlZEF0LFxuICAgIGNvbXBsZXRlZEF0LFxuICAgIHNwZWNWZXJzaW9uOiBhbmNob3JFdmVudC5zcGVjVmVyc2lvbixcbiAgfTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgc3RlcCBldmVudHMgdG8gYW4gT3BlblRlbGVtZXRyeSBTcGFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGVwVG9TcGFuKHN0ZXBFdmVudHM6IEV2ZW50W10sIG1heEVuZFRpbWU6IERhdGUpOiBTcGFuIHwgbnVsbCB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRXZlbnRzVG9TdGVwRW50aXR5KHN0ZXBFdmVudHMpO1xuICBpZiAoIXN0ZXApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBwYXJzZWROYW1lID0gcGFyc2VTdGVwTmFtZShTdHJpbmcoc3RlcC5zdGVwTmFtZSkpO1xuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgcmVzb3VyY2U6ICdzdGVwJyBhcyBjb25zdCxcbiAgICBkYXRhOiBzdGVwLFxuICB9O1xuXG4gIGNvbnN0IHJlc291cmNlID0gJ3N0ZXAnO1xuICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoc3RlcC5jb21wbGV0ZWRBdCA/PyBtYXhFbmRUaW1lKTtcblxuICAvLyBJbmNsdWRlIEFMTCBjb3JyZWxhdGVkIGV2ZW50cyBvbiB0aGUgc3BhbiBzbyB0aGUgc2lkZWJhciBkZXRhaWwgdmlld1xuICAvLyBjYW4gZGlzcGxheSB0aGVtLiBUaGUgdGltZWxpbmUgdXNlcyB0aGUgYHNob3dWZXJ0aWNhbExpbmVgIGZsYWcgdG9cbiAgLy8gZGV0ZXJtaW5lIHdoaWNoIGV2ZW50cyBhcHBlYXIgYXMgbWFya2Vycy5cbiAgY29uc3QgZXZlbnRzID0gY29udmVydEV2ZW50c1RvU3BhbkV2ZW50cyhzdGVwRXZlbnRzLCBmYWxzZSk7XG5cbiAgLy8gVXNlIGNyZWF0ZWRBdCBhcyBzcGFuIHN0YXJ0IHRpbWUsIHdpdGggYWN0aXZlU3RhcnRUaW1lIGZvciB3aGVuIGV4ZWN1dGlvbiBiZWdhblxuICAvLyBUaGlzIGFsbG93cyB2aXN1YWxpemF0aW9uIG9mIHRoZSBcInF1ZXVlZFwiIHBlcmlvZCBiZWZvcmUgZXhlY3V0aW9uXG4gIGNvbnN0IHNwYW5TdGFydFRpbWUgPSBuZXcgRGF0ZShzdGVwLmNyZWF0ZWRBdCk7XG4gIGxldCBhY3RpdmVTdGFydFRpbWUgPSBzdGVwLnN0YXJ0ZWRBdCA/IG5ldyBEYXRlKHN0ZXAuc3RhcnRlZEF0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZmlyc3RTdGFydEV2ZW50ID0gc3RlcEV2ZW50cy5maW5kKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9zdGFydGVkJ1xuICApO1xuICBpZiAoZmlyc3RTdGFydEV2ZW50KSB7XG4gICAgLy8gYHN0ZXAuc3RhcnRlZEF0YCBpcyB0aGUgc2VydmVyLXNpZGUgY3JlYXRpb24gdGltZXN0YW1wLCBhbmQgYGV2ZW50LmNyZWF0ZWRBdGAgaXNcbiAgICAvLyB0aGUgY2xpZW50LXNpZGUgY3JlYXRpb24gdGltZXN0YW1wLiBGb3Igbm93LCB0byBhbGlnbiB0aGUgZXZlbnQgbWFya2VyIHdpdGggdGhlXG4gICAgLy8gbGluZSB3ZSBzaG93IGZvciBzdGVwLnN0YXJ0ZWRBdCwgd2Ugb3ZlcndyaXRlIGhlcmUgdG8gYWx3YXlzIHVzZSBjbGllbnQtc2lkZSB0aW1lLlxuICAgIGFjdGl2ZVN0YXJ0VGltZSA9IG5ldyBEYXRlKGZpcnN0U3RhcnRFdmVudC5jcmVhdGVkQXQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzcGFuSWQ6IFN0cmluZyhzdGVwLnN0ZXBJZCksXG4gICAgbmFtZTogcGFyc2VkTmFtZT8uc2hvcnROYW1lID8/IFN0cmluZyhzdGVwLnN0ZXBOYW1lKSxcbiAgICBraW5kOiAxLCAvLyBJTlRFUk5BTCBzcGFuIGtpbmRcbiAgICByZXNvdXJjZSxcbiAgICBsaWJyYXJ5OiBXT1JLRkxPV19MSUJSQVJZLFxuICAgIHN0YXR1czogeyBjb2RlOiAwIH0sXG4gICAgdHJhY2VGbGFnczogMSxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGxpbmtzOiBbXSxcbiAgICBldmVudHMsXG4gICAgc3RhcnRUaW1lOiBkYXRlVG9PdGVsVGltZShzcGFuU3RhcnRUaW1lKSxcbiAgICBlbmRUaW1lOiBkYXRlVG9PdGVsVGltZShlbmRUaW1lKSxcbiAgICBkdXJhdGlvbjogY2FsY3VsYXRlRHVyYXRpb24oc3BhblN0YXJ0VGltZSwgZW5kVGltZSksXG4gICAgLy8gT25seSBzZXQgYWN0aXZlU3RhcnRUaW1lIGlmIGl0IGRpZmZlcnMgZnJvbSBzdGFydFRpbWUgKGkuZS4sIHRoZXJlIHdhcyBhIHF1ZXVlZCBwZXJpb2QpXG4gICAgYWN0aXZlU3RhcnRUaW1lOlxuICAgICAgYWN0aXZlU3RhcnRUaW1lICYmIGFjdGl2ZVN0YXJ0VGltZS5nZXRUaW1lKCkgPiBzcGFuU3RhcnRUaW1lLmdldFRpbWUoKVxuICAgICAgICA/IGRhdGVUb090ZWxUaW1lKGFjdGl2ZVN0YXJ0VGltZSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBob29rRXZlbnRzVG9Ib29rRW50aXR5ID0gKFxuICBldmVudHM6IEV2ZW50W11cbik6IHtcbiAgaG9va0lkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIHJlY2VpdmVkQ291bnQ6IG51bWJlcjtcbiAgbGFzdFJlY2VpdmVkQXQ/OiBEYXRlO1xuICBkaXNwb3NlZEF0PzogRGF0ZTtcbn0gfCBudWxsID0+IHtcbiAgY29uc3QgY3JlYXRlZEV2ZW50ID0gZXZlbnRzLmZpbmQoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnXG4gICk7XG4gIGlmICghY3JlYXRlZEV2ZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHMgPSBldmVudHMuZmlsdGVyKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19yZWNlaXZlZCdcbiAgKTtcbiAgY29uc3QgZGlzcG9zZWRFdmVudHMgPSBldmVudHMuZmlsdGVyKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19kaXNwb3NlZCdcbiAgKTtcbiAgY29uc3QgbGFzdFJlY2VpdmVkRXZlbnQgPSByZWNlaXZlZEV2ZW50cy5hdCgtMSk7XG4gIHJldHVybiB7XG4gICAgaG9va0lkOiBjcmVhdGVkRXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICBydW5JZDogY3JlYXRlZEV2ZW50LnJ1bklkLFxuICAgIHRva2VuOiBjcmVhdGVkRXZlbnQuZXZlbnREYXRhPy50b2tlbixcbiAgICBjcmVhdGVkQXQ6IGNyZWF0ZWRFdmVudC5jcmVhdGVkQXQsXG4gICAgcmVjZWl2ZWRDb3VudDogcmVjZWl2ZWRFdmVudHMubGVuZ3RoLFxuICAgIGxhc3RSZWNlaXZlZEF0OiBsYXN0UmVjZWl2ZWRFdmVudD8uY3JlYXRlZEF0IHx8IHVuZGVmaW5lZCxcbiAgICBkaXNwb3NlZEF0OiBkaXNwb3NlZEV2ZW50cy5hdCgtMSk/LmNyZWF0ZWRBdCB8fCB1bmRlZmluZWQsXG4gIH07XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgd29ya2Zsb3cgSG9vayB0byBhbiBPcGVuVGVsZW1ldHJ5IFNwYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tUb1NwYW4oaG9va0V2ZW50czogRXZlbnRbXSwgbWF4RW5kVGltZTogRGF0ZSk6IFNwYW4gfCBudWxsIHtcbiAgY29uc3QgaG9vayA9IGhvb2tFdmVudHNUb0hvb2tFbnRpdHkoaG9va0V2ZW50cyk7XG4gIGlmICghaG9vaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ29udmVydCBob29rLXJlbGF0ZWQgZXZlbnRzIHRvIHNwYW4gZXZlbnRzXG4gIGNvbnN0IGV2ZW50cyA9IGNvbnZlcnRFdmVudHNUb1NwYW5FdmVudHMoaG9va0V2ZW50cywgZmFsc2UpO1xuXG4gIGNvbnN0IGVuZFRpbWUgPSBob29rLmRpc3Bvc2VkQXQgfHwgbWF4RW5kVGltZTtcblxuICByZXR1cm4ge1xuICAgIHNwYW5JZDogU3RyaW5nKGhvb2suaG9va0lkKSxcbiAgICBuYW1lOiBob29rLnRva2VuID8/IFN0cmluZyhob29rLmhvb2tJZCksXG4gICAga2luZDogMSwgLy8gSU5URVJOQUwgc3BhbiBraW5kXG4gICAgcmVzb3VyY2U6ICdob29rJyxcbiAgICBsaWJyYXJ5OiBXT1JLRkxPV19MSUJSQVJZLFxuICAgIHN0YXR1czogeyBjb2RlOiAxIH0sXG4gICAgdHJhY2VGbGFnczogMSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICByZXNvdXJjZTogJ2hvb2snIGFzIGNvbnN0LFxuICAgICAgZGF0YTogaG9vayxcbiAgICB9LFxuICAgIGxpbmtzOiBbXSxcbiAgICBldmVudHMsXG4gICAgc3RhcnRUaW1lOiBkYXRlVG9PdGVsVGltZShob29rLmNyZWF0ZWRBdCksXG4gICAgZW5kVGltZTogZGF0ZVRvT3RlbFRpbWUoZW5kVGltZSksXG4gICAgZHVyYXRpb246IGNhbGN1bGF0ZUR1cmF0aW9uKGhvb2suY3JlYXRlZEF0LCBlbmRUaW1lKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcm9vdCBzcGFuIGZvciB0aGUgd29ya2Zsb3cgcnVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Ub1NwYW4oXG4gIHJ1bjogV29ya2Zsb3dSdW4sXG4gIHJ1bkV2ZW50czogRXZlbnRbXSxcbiAgbm93VGltZT86IERhdGVcbik6IFNwYW4ge1xuICBjb25zdCBub3cgPSBub3dUaW1lID8/IG5ldyBEYXRlKCk7XG5cbiAgLy8gT25seSBlbWJlZCBpZGVudGlmaWNhdGlvbiBmaWVsZHMg4oCUIG5vdCB0aGUgZnVsbCBvYmplY3Qgd2l0aFxuICAvLyBpbnB1dC9vdXRwdXQvZXJyb3Igd2hpY2ggbWF5IGNvbnRhaW4gbm9uLWNsb25lYWJsZSB0eXBlcy5cbiAgY29uc3QgeyBpbnB1dDogX2ksIG91dHB1dDogX28sIGVycm9yOiBfZSwgLi4ucnVuSWRlbnRpdHkgfSA9IHJ1bjtcbiAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICByZXNvdXJjZTogJ3J1bicgYXMgY29uc3QsXG4gICAgZGF0YTogcnVuSWRlbnRpdHksXG4gIH07XG5cbiAgLy8gVXNlIGNyZWF0ZWRBdCBhcyBzcGFuIHN0YXJ0IHRpbWUsIHdpdGggYWN0aXZlU3RhcnRUaW1lIGZvciB3aGVuIGV4ZWN1dGlvbiBiZWdhblxuICBjb25zdCBzcGFuU3RhcnRUaW1lID0gbmV3IERhdGUocnVuLmNyZWF0ZWRBdCk7XG4gIGNvbnN0IGFjdGl2ZVN0YXJ0VGltZSA9IHJ1bi5zdGFydGVkQXQgPyBuZXcgRGF0ZShydW4uc3RhcnRlZEF0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZW5kVGltZSA9IHJ1bi5jb21wbGV0ZWRBdCA/PyBub3c7XG5cbiAgLy8gQ29udmVydCBydW4tbGV2ZWwgZXZlbnRzIHRvIHNwYW4gZXZlbnRzXG4gIGNvbnN0IGV2ZW50cyA9IGNvbnZlcnRFdmVudHNUb1NwYW5FdmVudHMocnVuRXZlbnRzLCBmYWxzZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzcGFuSWQ6IFN0cmluZyhydW4ucnVuSWQpLFxuICAgIG5hbWU6IFN0cmluZyhwYXJzZVdvcmtmbG93TmFtZShydW4ud29ya2Zsb3dOYW1lKT8uc2hvcnROYW1lID8/ICc/JyksXG4gICAga2luZDogMSwgLy8gSU5URVJOQUwgc3BhbiBraW5kXG4gICAgcmVzb3VyY2U6ICdydW4nLFxuICAgIGxpYnJhcnk6IFdPUktGTE9XX0xJQlJBUlksXG4gICAgc3RhdHVzOiB7IGNvZGU6IDAgfSxcbiAgICB0cmFjZUZsYWdzOiAxLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgbGlua3M6IFtdLFxuICAgIGV2ZW50cyxcbiAgICBzdGFydFRpbWU6IGRhdGVUb090ZWxUaW1lKHNwYW5TdGFydFRpbWUpLFxuICAgIGVuZFRpbWU6IGRhdGVUb090ZWxUaW1lKGVuZFRpbWUpLFxuICAgIGR1cmF0aW9uOiBjYWxjdWxhdGVEdXJhdGlvbihzcGFuU3RhcnRUaW1lLCBlbmRUaW1lKSxcbiAgICAvLyBPbmx5IHNldCBhY3RpdmVTdGFydFRpbWUgaWYgaXQgZGlmZmVycyBmcm9tIHN0YXJ0VGltZSAoaS5lLiwgdGhlcmUgd2FzIGEgcXVldWVkIHBlcmlvZClcbiAgICBhY3RpdmVTdGFydFRpbWU6XG4gICAgICBhY3RpdmVTdGFydFRpbWUgJiYgYWN0aXZlU3RhcnRUaW1lLmdldFRpbWUoKSA+IHNwYW5TdGFydFRpbWUuZ2V0VGltZSgpXG4gICAgICAgID8gZGF0ZVRvT3RlbFRpbWUoYWN0aXZlU3RhcnRUaW1lKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cbiJdfQ==
|
|
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=
|
|
@@ -10,6 +10,21 @@ import type { Span } from '../components/trace-viewer/types';
|
|
|
10
10
|
export declare const isStepEvent: (eventType: string) => boolean;
|
|
11
11
|
export declare const isTimerEvent: (eventType: string) => eventType is "wait_created" | "wait_completed";
|
|
12
12
|
export declare const isHookLifecycleEvent: (eventType: string) => eventType is "hook_created" | "hook_received" | "hook_disposed";
|
|
13
|
+
/**
|
|
14
|
+
* Events that belong to the run root span rather than a child entity span.
|
|
15
|
+
* Mirrors the fallthrough logic in {@link groupEventsByCorrelation}: events
|
|
16
|
+
* without a correlationId (run lifecycle) plus correlated events that aren't
|
|
17
|
+
* step/timer/hook events (e.g. `attr_set`, whose correlationId is a dedup
|
|
18
|
+
* token rather than a child entity ID).
|
|
19
|
+
*/
|
|
20
|
+
export declare const isRunLevelEvent: (event: Event) => boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Filter the raw event list down to the events for a selected span.
|
|
23
|
+
* For the run root span this returns run-level events (see
|
|
24
|
+
* {@link isRunLevelEvent}); for child spans it returns the events
|
|
25
|
+
* correlated to that span's ID.
|
|
26
|
+
*/
|
|
27
|
+
export declare function filterSpanRawEvents(events: Event[], resource: string | undefined, spanId: string | undefined): Event[];
|
|
13
28
|
export type GroupedEvents = {
|
|
14
29
|
eventsByStepId: Map<string, Event[]>;
|
|
15
30
|
runLevelEvents: Event[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-builder.d.ts","sourceRoot":"","sources":["../../src/lib/trace-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAc7D,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,YAAkC,CAAC;AAEhF,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,mDACkB,CAAC;AAEjE,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,oEAGvB,CAAC;
|
|
1
|
+
{"version":3,"file":"trace-builder.d.ts","sourceRoot":"","sources":["../../src/lib/trace-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAc7D,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,YAAkC,CAAC;AAEhF,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,mDACkB,CAAC;AAEjE,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,oEAGvB,CAAC;AAEhC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,KAAK,KAAG,OAIb,CAAC;AAEnC;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,EAAE,EACf,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,KAAK,EAAE,CAMT;AAMD,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,cAAc,EAAE,KAAK,EAAE,CAAC;IACxB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAClC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;CAClC,CAAC;AAeF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAgCvE;AAsED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,EAAE,CAAC;IAClE,iEAAiE;IACjE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,KAAK,EAAE,EACf,GAAG,EAAE,IAAI,GACR,aAAa,CA6Bf"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* converts each group into an OpenTelemetry-style Span, and returns
|
|
6
6
|
* a fully-formed Trace ready for the trace viewer.
|
|
7
7
|
*/
|
|
8
|
-
import { hookToSpan, runToSpan, stepToSpan,
|
|
8
|
+
import { hookToSpan, runToSpan, stepToSpan, WORKFLOW_LIBRARY, waitToSpan, } from '../components/workflow-traces/trace-span-construction';
|
|
9
9
|
import { otelTimeToMs } from '../components/workflow-traces/trace-time-utils';
|
|
10
10
|
// ---------------------------------------------------------------------------
|
|
11
11
|
// Event type classifiers
|
|
@@ -15,6 +15,31 @@ export const isTimerEvent = (eventType) => eventType === 'wait_created' || event
|
|
|
15
15
|
export const isHookLifecycleEvent = (eventType) => eventType === 'hook_received' ||
|
|
16
16
|
eventType === 'hook_created' ||
|
|
17
17
|
eventType === 'hook_disposed';
|
|
18
|
+
/**
|
|
19
|
+
* Events that belong to the run root span rather than a child entity span.
|
|
20
|
+
* Mirrors the fallthrough logic in {@link groupEventsByCorrelation}: events
|
|
21
|
+
* without a correlationId (run lifecycle) plus correlated events that aren't
|
|
22
|
+
* step/timer/hook events (e.g. `attr_set`, whose correlationId is a dedup
|
|
23
|
+
* token rather than a child entity ID).
|
|
24
|
+
*/
|
|
25
|
+
export const isRunLevelEvent = (event) => !event.correlationId ||
|
|
26
|
+
(!isTimerEvent(event.eventType) &&
|
|
27
|
+
!isHookLifecycleEvent(event.eventType) &&
|
|
28
|
+
!isStepEvent(event.eventType));
|
|
29
|
+
/**
|
|
30
|
+
* Filter the raw event list down to the events for a selected span.
|
|
31
|
+
* For the run root span this returns run-level events (see
|
|
32
|
+
* {@link isRunLevelEvent}); for child spans it returns the events
|
|
33
|
+
* correlated to that span's ID.
|
|
34
|
+
*/
|
|
35
|
+
export function filterSpanRawEvents(events, resource, spanId) {
|
|
36
|
+
if (resource === 'run') {
|
|
37
|
+
return events.filter(isRunLevelEvent);
|
|
38
|
+
}
|
|
39
|
+
if (!spanId)
|
|
40
|
+
return [];
|
|
41
|
+
return events.filter((e) => e.correlationId === spanId);
|
|
42
|
+
}
|
|
18
43
|
function pushEvent(map, correlationId, event) {
|
|
19
44
|
const existing = map.get(correlationId);
|
|
20
45
|
if (existing) {
|
|
@@ -127,4 +152,4 @@ export function buildTrace(run, events, now) {
|
|
|
127
152
|
knownDurationMs: Math.max(0, knownDurationMs),
|
|
128
153
|
};
|
|
129
154
|
}
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdHJhY2UtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLGdCQUFnQixHQUNqQixNQUFNLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUU5RSw4RUFBOEU7QUFDOUUseUJBQXlCO0FBQ3pCLDhFQUE4RTtBQUU5RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUNoRCxTQUFTLEtBQUssY0FBYyxJQUFJLFNBQVMsS0FBSyxnQkFBZ0IsQ0FBQztBQUVqRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUN4RCxTQUFTLEtBQUssZUFBZTtJQUM3QixTQUFTLEtBQUssY0FBYztJQUM1QixTQUFTLEtBQUssZUFBZSxDQUFDO0FBYWhDLFNBQVMsU0FBUyxDQUNoQixHQUF5QixFQUN6QixhQUFxQixFQUNyQixLQUFZO0lBRVosTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixPQUFPO0lBQ1QsQ0FBQztJQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHdC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IFdvcmtmbG93UnVuIGFuZCBpdHMgRXZlbnRzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGdyb3VwcyByYXcgZXZlbnRzIGJ5IGNvcnJlbGF0aW9uIElEIGFuZCBlbnRpdHkgdHlwZSxcbiAqIGNvbnZlcnRzIGVhY2ggZ3JvdXAgaW50byBhbiBPcGVuVGVsZW1ldHJ5LXN0eWxlIFNwYW4sIGFuZCByZXR1cm5zXG4gKiBhIGZ1bGx5LWZvcm1lZCBUcmFjZSByZWFkeSBmb3IgdGhlIHRyYWNlIHZpZXdlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IFNwYW4gfSBmcm9tICcuLi9jb21wb25lbnRzL3RyYWNlLXZpZXdlci90eXBlcyc7XG5pbXBvcnQge1xuICBob29rVG9TcGFuLFxuICBydW5Ub1NwYW4sXG4gIHN0ZXBUb1NwYW4sXG4gIHdhaXRUb1NwYW4sXG4gIFdPUktGTE9XX0xJQlJBUlksXG59IGZyb20gJy4uL2NvbXBvbmVudHMvd29ya2Zsb3ctdHJhY2VzL3RyYWNlLXNwYW4tY29uc3RydWN0aW9uJztcbmltcG9ydCB7IG90ZWxUaW1lVG9NcyB9IGZyb20gJy4uL2NvbXBvbmVudHMvd29ya2Zsb3ctdHJhY2VzL3RyYWNlLXRpbWUtdXRpbHMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV2ZW50IHR5cGUgY2xhc3NpZmllcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgaXNTdGVwRXZlbnQgPSAoZXZlbnRUeXBlOiBzdHJpbmcpID0+IGV2ZW50VHlwZS5zdGFydHNXaXRoKCdzdGVwXycpO1xuXG5leHBvcnQgY29uc3QgaXNUaW1lckV2ZW50ID0gKGV2ZW50VHlwZTogc3RyaW5nKSA9PlxuICBldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnIHx8IGV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJztcblxuZXhwb3J0IGNvbnN0IGlzSG9va0xpZmVjeWNsZUV2ZW50ID0gKGV2ZW50VHlwZTogc3RyaW5nKSA9PlxuICBldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJyB8fFxuICBldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnIHx8XG4gIGV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV2ZW50IGdyb3VwaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgR3JvdXBlZEV2ZW50cyA9IHtcbiAgZXZlbnRzQnlTdGVwSWQ6IE1hcDxzdHJpbmcsIEV2ZW50W10+O1xuICBydW5MZXZlbEV2ZW50czogRXZlbnRbXTtcbiAgdGltZXJFdmVudHM6IE1hcDxzdHJpbmcsIEV2ZW50W10+O1xuICBob29rRXZlbnRzOiBNYXA8c3RyaW5nLCBFdmVudFtdPjtcbn07XG5cbmZ1bmN0aW9uIHB1c2hFdmVudChcbiAgbWFwOiBNYXA8c3RyaW5nLCBFdmVudFtdPixcbiAgY29ycmVsYXRpb25JZDogc3RyaW5nLFxuICBldmVudDogRXZlbnRcbikge1xuICBjb25zdCBleGlzdGluZyA9IG1hcC5nZXQoY29ycmVsYXRpb25JZCk7XG4gIGlmIChleGlzdGluZykge1xuICAgIGV4aXN0aW5nLnB1c2goZXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuICBtYXAuc2V0KGNvcnJlbGF0aW9uSWQsIFtldmVudF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBFdmVudHNCeUNvcnJlbGF0aW9uKGV2ZW50czogRXZlbnRbXSk6IEdyb3VwZWRFdmVudHMge1xuICBjb25zdCBldmVudHNCeVN0ZXBJZCA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudFtdPigpO1xuICBjb25zdCBydW5MZXZlbEV2ZW50czogRXZlbnRbXSA9IFtdO1xuICBjb25zdCB0aW1lckV2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudFtdPigpO1xuICBjb25zdCBob29rRXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIEV2ZW50W10+KCk7XG5cbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gZXZlbnQuY29ycmVsYXRpb25JZDtcbiAgICBpZiAoIWNvcnJlbGF0aW9uSWQpIHtcbiAgICAgIHJ1bkxldmVsRXZlbnRzLnB1c2goZXZlbnQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlzVGltZXJFdmVudChldmVudC5ldmVudFR5cGUpKSB7XG4gICAgICBwdXNoRXZlbnQodGltZXJFdmVudHMsIGNvcnJlbGF0aW9uSWQsIGV2ZW50KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpc0hvb2tMaWZlY3ljbGVFdmVudChldmVudC5ldmVudFR5cGUpKSB7XG4gICAgICBwdXNoRXZlbnQoaG9va0V2ZW50cywgY29ycmVsYXRpb25JZCwgZXZlbnQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RlcEV2ZW50KGV2ZW50LmV2ZW50VHlwZSkpIHtcbiAgICAgIHB1c2hFdmVudChldmVudHNCeVN0ZXBJZCwgY29ycmVsYXRpb25JZCwgZXZlbnQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcnVuTGV2ZWxFdmVudHMucHVzaChldmVudCk7XG4gIH1cblxuICByZXR1cm4geyBldmVudHNCeVN0ZXBJZCwgcnVuTGV2ZWxFdmVudHMsIHRpbWVyRXZlbnRzLCBob29rRXZlbnRzIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHJhY2UgY29uc3RydWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbGF0ZXN0IGtub3duIGV2ZW50IHRpbWUgZnJvbSB0aGUgZXZlbnRzIGxpc3QuXG4gKiBBY3RpdmUgKGluLXByb2dyZXNzKSBjaGlsZCBzcGFucyBhcmUgY2FwcGVkIGF0IHRoaXMgdGltZSBpbnN0ZWFkIG9mIGBub3dgLFxuICogc28gdGhleSBvbmx5IGV4dGVuZCBhcyBmYXIgYXMgb3VyIGRhdGEgZ29lcy5cbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUxhdGVzdEtub3duVGltZShldmVudHM6IEV2ZW50W10sIHJ1bjogV29ya2Zsb3dSdW4pOiBEYXRlIHtcbiAgbGV0IGxhdGVzdCA9IG5ldyBEYXRlKHJ1bi5jcmVhdGVkQXQpLmdldFRpbWUoKTtcbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICBjb25zdCB0ID0gbmV3IERhdGUoZXZlbnQuY3JlYXRlZEF0KS5nZXRUaW1lKCk7XG4gICAgaWYgKHQgPiBsYXRlc3QpIGxhdGVzdCA9IHQ7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGxhdGVzdCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3BhbnMoXG4gIHJ1bjogV29ya2Zsb3dSdW4sXG4gIGdyb3VwZWRFdmVudHM6IEdyb3VwZWRFdmVudHMsXG4gIG5vdzogRGF0ZSxcbiAgbGF0ZXN0S25vd25UaW1lOiBEYXRlXG4pIHtcbiAgLy8gQWN0aXZlIGNoaWxkIHNwYW5zIGNhcCBhdCBsYXRlc3RLbm93blRpbWUgc28gdGhleSBkb24ndCBleHRlbmQgaW50b1xuICAvLyB1bmtub3duIHRlcnJpdG9yeS4gRXZlbiB3aGVuIHRoZSBydW4gaXMgY29tcGxldGVkLCB3ZSBtYXkgbm90IGhhdmUgbG9hZGVkXG4gIC8vIGFsbCBldmVudHMgeWV0LCBzbyBhbHdheXMgdXNlIHRoZSBsYXRlc3QgZXZlbnQgd2UndmUgYWN0dWFsbHkgc2Vlbi5cbiAgY29uc3QgY2hpbGRNYXhFbmQgPSBsYXRlc3RLbm93blRpbWU7XG4gIGNvbnN0IHJ1bk1heEVuZCA9IHJ1bi5jb21wbGV0ZWRBdCA/PyBub3c7XG5cbiAgY29uc3Qgc3RlcFNwYW5zID0gQXJyYXkuZnJvbShncm91cGVkRXZlbnRzLmV2ZW50c0J5U3RlcElkLnZhbHVlcygpKVxuICAgIC5tYXAoKGV2ZW50cykgPT4gc3RlcFRvU3BhbihldmVudHMsIGNoaWxkTWF4RW5kKSlcbiAgICAuZmlsdGVyKChzcGFuKTogc3BhbiBpcyBTcGFuID0+IHNwYW4gIT09IG51bGwpO1xuXG4gIGNvbnN0IGhvb2tTcGFucyA9IEFycmF5LmZyb20oZ3JvdXBlZEV2ZW50cy5ob29rRXZlbnRzLnZhbHVlcygpKVxuICAgIC5tYXAoKGV2ZW50cykgPT4gaG9va1RvU3BhbihldmVudHMsIGNoaWxkTWF4RW5kKSlcbiAgICAuZmlsdGVyKChzcGFuKTogc3BhbiBpcyBTcGFuID0+IHNwYW4gIT09IG51bGwpO1xuXG4gIGNvbnN0IHdhaXRTcGFucyA9IEFycmF5LmZyb20oZ3JvdXBlZEV2ZW50cy50aW1lckV2ZW50cy52YWx1ZXMoKSlcbiAgICAubWFwKChldmVudHMpID0+IHdhaXRUb1NwYW4oZXZlbnRzLCBjaGlsZE1heEVuZCwgcnVuTWF4RW5kKSlcbiAgICAuZmlsdGVyKChzcGFuKTogc3BhbiBpcyBTcGFuID0+IHNwYW4gIT09IG51bGwpO1xuXG4gIHJldHVybiB7XG4gICAgcnVuU3BhbjogcnVuVG9TcGFuKHJ1biwgZ3JvdXBlZEV2ZW50cy5ydW5MZXZlbEV2ZW50cywgbm93KSxcbiAgICBzcGFuczogWy4uLnN0ZXBTcGFucywgLi4uaG9va1NwYW5zLCAuLi53YWl0U3BhbnNdLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjYXNjYWRlU3BhbnMocnVuU3BhbjogU3Bhbiwgc3BhbnM6IFNwYW5bXSkge1xuICBjb25zdCBzb3J0ZWRTcGFucyA9IFtcbiAgICBydW5TcGFuLFxuICAgIC4uLnNwYW5zLnNsaWNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgYVN0YXJ0ID0gb3RlbFRpbWVUb01zKGEuc3RhcnRUaW1lKTtcbiAgICAgIGNvbnN0IGJTdGFydCA9IG90ZWxUaW1lVG9NcyhiLnN0YXJ0VGltZSk7XG4gICAgICByZXR1cm4gYVN0YXJ0IC0gYlN0YXJ0O1xuICAgIH0pLFxuICBdO1xuXG4gIHJldHVybiBzb3J0ZWRTcGFucy5tYXAoKHNwYW4sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyZW50U3BhbklkID1cbiAgICAgIGluZGV4ID09PSAwID8gdW5kZWZpbmVkIDogU3RyaW5nKHNvcnRlZFNwYW5zW2luZGV4IC0gMV0uc3BhbklkKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3BhbixcbiAgICAgIHBhcmVudFNwYW5JZCxcbiAgICB9O1xuICB9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFjZVdpdGhNZXRhIHtcbiAgdHJhY2VJZDogc3RyaW5nO1xuICByb290U3BhbklkOiBzdHJpbmc7XG4gIHNwYW5zOiBTcGFuW107XG4gIHJlc291cmNlczogeyBuYW1lOiBzdHJpbmc7IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfVtdO1xuICAvKiogRHVyYXRpb24gaW4gbXMgZnJvbSB0cmFjZSBzdGFydCB0byB0aGUgbGF0ZXN0IGtub3duIGV2ZW50LiAqL1xuICBrbm93bkR1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVHJhY2UoXG4gIHJ1bjogV29ya2Zsb3dSdW4sXG4gIGV2ZW50czogRXZlbnRbXSxcbiAgbm93OiBEYXRlXG4pOiBUcmFjZVdpdGhNZXRhIHtcbiAgY29uc3QgZ3JvdXBlZEV2ZW50cyA9IGdyb3VwRXZlbnRzQnlDb3JyZWxhdGlvbihldmVudHMpO1xuICBjb25zdCBsYXRlc3RLbm93blRpbWUgPSBjb21wdXRlTGF0ZXN0S25vd25UaW1lKGV2ZW50cywgcnVuKTtcbiAgY29uc3QgeyBydW5TcGFuLCBzcGFucyB9ID0gYnVpbGRTcGFucyhcbiAgICBydW4sXG4gICAgZ3JvdXBlZEV2ZW50cyxcbiAgICBub3csXG4gICAgbGF0ZXN0S25vd25UaW1lXG4gICk7XG4gIGNvbnN0IHNvcnRlZENhc2NhZGluZ1NwYW5zID0gY2FzY2FkZVNwYW5zKHJ1blNwYW4sIHNwYW5zKTtcblxuICAvLyBDb21wdXRlIGtub3duIGR1cmF0aW9uIHJlbGF0aXZlIHRvIHRyYWNlIHN0YXJ0XG4gIGNvbnN0IHRyYWNlU3RhcnRNcyA9IG90ZWxUaW1lVG9NcyhydW5TcGFuLnN0YXJ0VGltZSk7XG4gIGNvbnN0IGtub3duRHVyYXRpb25NcyA9IGxhdGVzdEtub3duVGltZS5nZXRUaW1lKCkgLSB0cmFjZVN0YXJ0TXM7XG5cbiAgcmV0dXJuIHtcbiAgICB0cmFjZUlkOiBydW4ucnVuSWQsXG4gICAgcm9vdFNwYW5JZDogcnVuLnJ1bklkLFxuICAgIHNwYW5zOiBzb3J0ZWRDYXNjYWRpbmdTcGFucyxcbiAgICByZXNvdXJjZXM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3dvcmtmbG93JyxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICdzZXJ2aWNlLm5hbWUnOiBXT1JLRkxPV19MSUJSQVJZLm5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0sXG4gICAga25vd25EdXJhdGlvbk1zOiBNYXRoLm1heCgwLCBrbm93bkR1cmF0aW9uTXMpLFxuICB9O1xufVxuIl19
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdHJhY2UtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFVBQVUsR0FDWCxNQUFNLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUU5RSw4RUFBOEU7QUFDOUUseUJBQXlCO0FBQ3pCLDhFQUE4RTtBQUU5RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUNoRCxTQUFTLEtBQUssY0FBYyxJQUFJLFNBQVMsS0FBSyxnQkFBZ0IsQ0FBQztBQUVqRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUN4RCxTQUFTLEtBQUssZUFBZTtJQUM3QixTQUFTLEtBQUssY0FBYztJQUM1QixTQUFTLEtBQUssZUFBZSxDQUFDO0FBRWhDOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQVksRUFBVyxFQUFFLENBQ3ZELENBQUMsS0FBSyxDQUFDLGFBQWE7SUFDcEIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzdCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN0QyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUVuQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsTUFBZSxF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LGVBQWUsQ0FDaEIsQ0FBQztJQUNGLE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUUxRCxpREFBaUQ7SUFDakQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyRCxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsWUFBWSxDQUFDO0lBRWpFLE9BQU87UUFDTCxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUs7UUFDbEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLO1FBQ3JCLEtBQUssRUFBRSxvQkFBb0I7UUFDM0IsU0FBUyxFQUFFO1lBQ1Q7Z0JBQ0UsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFVBQVUsRUFBRTtvQkFDVixjQUFjLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtpQkFDdEM7YUFDRjtTQUNGO1FBQ0QsZUFBZSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQztLQUM5QyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnVpbGRzIGEgY29tcGxldGUgdHJhY2UgZnJvbSBhIFdvcmtmbG93UnVuIGFuZCBpdHMgRXZlbnRzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGdyb3VwcyByYXcgZXZlbnRzIGJ5IGNvcnJlbGF0aW9uIElEIGFuZCBlbnRpdHkgdHlwZSxcbiAqIGNvbnZlcnRzIGVhY2ggZ3JvdXAgaW50byBhbiBPcGVuVGVsZW1ldHJ5LXN0eWxlIFNwYW4sIGFuZCByZXR1cm5zXG4gKiBhIGZ1bGx5LWZvcm1lZCBUcmFjZSByZWFkeSBmb3IgdGhlIHRyYWNlIHZpZXdlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IFNwYW4gfSBmcm9tICcuLi9jb21wb25lbnRzL3RyYWNlLXZpZXdlci90eXBlcyc7XG5pbXBvcnQge1xuICBob29rVG9TcGFuLFxuICBydW5Ub1NwYW4sXG4gIHN0ZXBUb1NwYW4sXG4gIFdPUktGTE9XX0xJQlJBUlksXG4gIHdhaXRUb1NwYW4sXG59IGZyb20gJy4uL2NvbXBvbmVudHMvd29ya2Zsb3ctdHJhY2VzL3RyYWNlLXNwYW4tY29uc3RydWN0aW9uJztcbmltcG9ydCB7IG90ZWxUaW1lVG9NcyB9IGZyb20gJy4uL2NvbXBvbmVudHMvd29ya2Zsb3ctdHJhY2VzL3RyYWNlLXRpbWUtdXRpbHMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV2ZW50IHR5cGUgY2xhc3NpZmllcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgaXNTdGVwRXZlbnQgPSAoZXZlbnRUeXBlOiBzdHJpbmcpID0+IGV2ZW50VHlwZS5zdGFydHNXaXRoKCdzdGVwXycpO1xuXG5leHBvcnQgY29uc3QgaXNUaW1lckV2ZW50ID0gKGV2ZW50VHlwZTogc3RyaW5nKSA9PlxuICBldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnIHx8IGV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJztcblxuZXhwb3J0IGNvbnN0IGlzSG9va0xpZmVjeWNsZUV2ZW50ID0gKGV2ZW50VHlwZTogc3RyaW5nKSA9PlxuICBldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJyB8fFxuICBldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnIHx8XG4gIGV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnO1xuXG4vKipcbiAqIEV2ZW50cyB0aGF0IGJlbG9uZyB0byB0aGUgcnVuIHJvb3Qgc3BhbiByYXRoZXIgdGhhbiBhIGNoaWxkIGVudGl0eSBzcGFuLlxuICogTWlycm9ycyB0aGUgZmFsbHRocm91Z2ggbG9naWMgaW4ge0BsaW5rIGdyb3VwRXZlbnRzQnlDb3JyZWxhdGlvbn06IGV2ZW50c1xuICogd2l0aG91dCBhIGNvcnJlbGF0aW9uSWQgKHJ1biBsaWZlY3ljbGUpIHBsdXMgY29ycmVsYXRlZCBldmVudHMgdGhhdCBhcmVuJ3RcbiAqIHN0ZXAvdGltZXIvaG9vayBldmVudHMgKGUuZy4gYGF0dHJfc2V0YCwgd2hvc2UgY29ycmVsYXRpb25JZCBpcyBhIGRlZHVwXG4gKiB0b2tlbiByYXRoZXIgdGhhbiBhIGNoaWxkIGVudGl0eSBJRCkuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1J1bkxldmVsRXZlbnQgPSAoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiA9PlxuICAhZXZlbnQuY29ycmVsYXRpb25JZCB8fFxuICAoIWlzVGltZXJFdmVudChldmVudC5ldmVudFR5cGUpICYmXG4gICAgIWlzSG9va0xpZmVjeWNsZUV2ZW50KGV2ZW50LmV2ZW50VHlwZSkgJiZcbiAgICAhaXNTdGVwRXZlbnQoZXZlbnQuZXZlbnRUeXBlKSk7XG5cbi8qKlxuICogRmlsdGVyIHRoZSByYXcgZXZlbnQgbGlzdCBkb3duIHRvIHRoZSBldmVudHMgZm9yIGEgc2VsZWN0ZWQgc3Bhbi5cbiAqIEZvciB0aGUgcnVuIHJvb3Qgc3BhbiB0aGlzIHJldHVybnMgcnVuLWxldmVsIGV2ZW50cyAoc2VlXG4gKiB7QGxpbmsgaXNSdW5MZXZlbEV2ZW50fSk7IGZvciBjaGlsZCBzcGFucyBpdCByZXR1cm5zIHRoZSBldmVudHNcbiAqIGNvcnJlbGF0ZWQgdG8gdGhhdCBzcGFuJ3MgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJTcGFuUmF3RXZlbnRzKFxuICBldmVudHM6IEV2ZW50W10sXG4gIHJlc291cmNlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNwYW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBFdmVudFtdIHtcbiAgaWYgKHJlc291cmNlID09PSAncnVuJykge1xuICAgIHJldHVybiBldmVudHMuZmlsdGVyKGlzUnVuTGV2ZWxFdmVudCk7XG4gIH1cbiAgaWYgKCFzcGFuSWQpIHJldHVybiBbXTtcbiAgcmV0dXJuIGV2ZW50cy5maWx0ZXIoKGUpID0+IGUuY29ycmVsYXRpb25JZCA9PT0gc3BhbklkKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFdmVudCBncm91cGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIEdyb3VwZWRFdmVudHMgPSB7XG4gIGV2ZW50c0J5U3RlcElkOiBNYXA8c3RyaW5nLCBFdmVudFtdPjtcbiAgcnVuTGV2ZWxFdmVudHM6IEV2ZW50W107XG4gIHRpbWVyRXZlbnRzOiBNYXA8c3RyaW5nLCBFdmVudFtdPjtcbiAgaG9va0V2ZW50czogTWFwPHN0cmluZywgRXZlbnRbXT47XG59O1xuXG5mdW5jdGlvbiBwdXNoRXZlbnQoXG4gIG1hcDogTWFwPHN0cmluZywgRXZlbnRbXT4sXG4gIGNvcnJlbGF0aW9uSWQ6IHN0cmluZyxcbiAgZXZlbnQ6IEV2ZW50XG4pIHtcbiAgY29uc3QgZXhpc3RpbmcgPSBtYXAuZ2V0KGNvcnJlbGF0aW9uSWQpO1xuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBleGlzdGluZy5wdXNoKGV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cbiAgbWFwLnNldChjb3JyZWxhdGlvbklkLCBbZXZlbnRdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwRXZlbnRzQnlDb3JyZWxhdGlvbihldmVudHM6IEV2ZW50W10pOiBHcm91cGVkRXZlbnRzIHtcbiAgY29uc3QgZXZlbnRzQnlTdGVwSWQgPSBuZXcgTWFwPHN0cmluZywgRXZlbnRbXT4oKTtcbiAgY29uc3QgcnVuTGV2ZWxFdmVudHM6IEV2ZW50W10gPSBbXTtcbiAgY29uc3QgdGltZXJFdmVudHMgPSBuZXcgTWFwPHN0cmluZywgRXZlbnRbXT4oKTtcbiAgY29uc3QgaG9va0V2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudFtdPigpO1xuXG4gIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgY29uc3QgY29ycmVsYXRpb25JZCA9IGV2ZW50LmNvcnJlbGF0aW9uSWQ7XG4gICAgaWYgKCFjb3JyZWxhdGlvbklkKSB7XG4gICAgICBydW5MZXZlbEV2ZW50cy5wdXNoKGV2ZW50KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpc1RpbWVyRXZlbnQoZXZlbnQuZXZlbnRUeXBlKSkge1xuICAgICAgcHVzaEV2ZW50KHRpbWVyRXZlbnRzLCBjb3JyZWxhdGlvbklkLCBldmVudCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb29rTGlmZWN5Y2xlRXZlbnQoZXZlbnQuZXZlbnRUeXBlKSkge1xuICAgICAgcHVzaEV2ZW50KGhvb2tFdmVudHMsIGNvcnJlbGF0aW9uSWQsIGV2ZW50KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpc1N0ZXBFdmVudChldmVudC5ldmVudFR5cGUpKSB7XG4gICAgICBwdXNoRXZlbnQoZXZlbnRzQnlTdGVwSWQsIGNvcnJlbGF0aW9uSWQsIGV2ZW50KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJ1bkxldmVsRXZlbnRzLnB1c2goZXZlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHsgZXZlbnRzQnlTdGVwSWQsIHJ1bkxldmVsRXZlbnRzLCB0aW1lckV2ZW50cywgaG9va0V2ZW50cyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRyYWNlIGNvbnN0cnVjdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGxhdGVzdCBrbm93biBldmVudCB0aW1lIGZyb20gdGhlIGV2ZW50cyBsaXN0LlxuICogQWN0aXZlIChpbi1wcm9ncmVzcykgY2hpbGQgc3BhbnMgYXJlIGNhcHBlZCBhdCB0aGlzIHRpbWUgaW5zdGVhZCBvZiBgbm93YCxcbiAqIHNvIHRoZXkgb25seSBleHRlbmQgYXMgZmFyIGFzIG91ciBkYXRhIGdvZXMuXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVMYXRlc3RLbm93blRpbWUoZXZlbnRzOiBFdmVudFtdLCBydW46IFdvcmtmbG93UnVuKTogRGF0ZSB7XG4gIGxldCBsYXRlc3QgPSBuZXcgRGF0ZShydW4uY3JlYXRlZEF0KS5nZXRUaW1lKCk7XG4gIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgY29uc3QgdCA9IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWRBdCkuZ2V0VGltZSgpO1xuICAgIGlmICh0ID4gbGF0ZXN0KSBsYXRlc3QgPSB0O1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShsYXRlc3QpO1xufVxuXG5mdW5jdGlvbiBidWlsZFNwYW5zKFxuICBydW46IFdvcmtmbG93UnVuLFxuICBncm91cGVkRXZlbnRzOiBHcm91cGVkRXZlbnRzLFxuICBub3c6IERhdGUsXG4gIGxhdGVzdEtub3duVGltZTogRGF0ZVxuKSB7XG4gIC8vIEFjdGl2ZSBjaGlsZCBzcGFucyBjYXAgYXQgbGF0ZXN0S25vd25UaW1lIHNvIHRoZXkgZG9uJ3QgZXh0ZW5kIGludG9cbiAgLy8gdW5rbm93biB0ZXJyaXRvcnkuIEV2ZW4gd2hlbiB0aGUgcnVuIGlzIGNvbXBsZXRlZCwgd2UgbWF5IG5vdCBoYXZlIGxvYWRlZFxuICAvLyBhbGwgZXZlbnRzIHlldCwgc28gYWx3YXlzIHVzZSB0aGUgbGF0ZXN0IGV2ZW50IHdlJ3ZlIGFjdHVhbGx5IHNlZW4uXG4gIGNvbnN0IGNoaWxkTWF4RW5kID0gbGF0ZXN0S25vd25UaW1lO1xuICBjb25zdCBydW5NYXhFbmQgPSBydW4uY29tcGxldGVkQXQgPz8gbm93O1xuXG4gIGNvbnN0IHN0ZXBTcGFucyA9IEFycmF5LmZyb20oZ3JvdXBlZEV2ZW50cy5ldmVudHNCeVN0ZXBJZC52YWx1ZXMoKSlcbiAgICAubWFwKChldmVudHMpID0+IHN0ZXBUb1NwYW4oZXZlbnRzLCBjaGlsZE1heEVuZCkpXG4gICAgLmZpbHRlcigoc3Bhbik6IHNwYW4gaXMgU3BhbiA9PiBzcGFuICE9PSBudWxsKTtcblxuICBjb25zdCBob29rU3BhbnMgPSBBcnJheS5mcm9tKGdyb3VwZWRFdmVudHMuaG9va0V2ZW50cy52YWx1ZXMoKSlcbiAgICAubWFwKChldmVudHMpID0+IGhvb2tUb1NwYW4oZXZlbnRzLCBjaGlsZE1heEVuZCkpXG4gICAgLmZpbHRlcigoc3Bhbik6IHNwYW4gaXMgU3BhbiA9PiBzcGFuICE9PSBudWxsKTtcblxuICBjb25zdCB3YWl0U3BhbnMgPSBBcnJheS5mcm9tKGdyb3VwZWRFdmVudHMudGltZXJFdmVudHMudmFsdWVzKCkpXG4gICAgLm1hcCgoZXZlbnRzKSA9PiB3YWl0VG9TcGFuKGV2ZW50cywgY2hpbGRNYXhFbmQsIHJ1bk1heEVuZCkpXG4gICAgLmZpbHRlcigoc3Bhbik6IHNwYW4gaXMgU3BhbiA9PiBzcGFuICE9PSBudWxsKTtcblxuICByZXR1cm4ge1xuICAgIHJ1blNwYW46IHJ1blRvU3BhbihydW4sIGdyb3VwZWRFdmVudHMucnVuTGV2ZWxFdmVudHMsIG5vdyksXG4gICAgc3BhbnM6IFsuLi5zdGVwU3BhbnMsIC4uLmhvb2tTcGFucywgLi4ud2FpdFNwYW5zXSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2FzY2FkZVNwYW5zKHJ1blNwYW46IFNwYW4sIHNwYW5zOiBTcGFuW10pIHtcbiAgY29uc3Qgc29ydGVkU3BhbnMgPSBbXG4gICAgcnVuU3BhbixcbiAgICAuLi5zcGFucy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFTdGFydCA9IG90ZWxUaW1lVG9NcyhhLnN0YXJ0VGltZSk7XG4gICAgICBjb25zdCBiU3RhcnQgPSBvdGVsVGltZVRvTXMoYi5zdGFydFRpbWUpO1xuICAgICAgcmV0dXJuIGFTdGFydCAtIGJTdGFydDtcbiAgICB9KSxcbiAgXTtcblxuICByZXR1cm4gc29ydGVkU3BhbnMubWFwKChzcGFuLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFNwYW5JZCA9XG4gICAgICBpbmRleCA9PT0gMCA/IHVuZGVmaW5lZCA6IFN0cmluZyhzb3J0ZWRTcGFuc1tpbmRleCAtIDFdLnNwYW5JZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNwYW4sXG4gICAgICBwYXJlbnRTcGFuSWQsXG4gICAgfTtcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2VXaXRoTWV0YSB7XG4gIHRyYWNlSWQ6IHN0cmluZztcbiAgcm9vdFNwYW5JZDogc3RyaW5nO1xuICBzcGFuczogU3BhbltdO1xuICByZXNvdXJjZXM6IHsgbmFtZTogc3RyaW5nOyBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH1bXTtcbiAgLyoqIER1cmF0aW9uIGluIG1zIGZyb20gdHJhY2Ugc3RhcnQgdG8gdGhlIGxhdGVzdCBrbm93biBldmVudC4gKi9cbiAga25vd25EdXJhdGlvbk1zOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRyYWNlKFxuICBydW46IFdvcmtmbG93UnVuLFxuICBldmVudHM6IEV2ZW50W10sXG4gIG5vdzogRGF0ZVxuKTogVHJhY2VXaXRoTWV0YSB7XG4gIGNvbnN0IGdyb3VwZWRFdmVudHMgPSBncm91cEV2ZW50c0J5Q29ycmVsYXRpb24oZXZlbnRzKTtcbiAgY29uc3QgbGF0ZXN0S25vd25UaW1lID0gY29tcHV0ZUxhdGVzdEtub3duVGltZShldmVudHMsIHJ1bik7XG4gIGNvbnN0IHsgcnVuU3Bhbiwgc3BhbnMgfSA9IGJ1aWxkU3BhbnMoXG4gICAgcnVuLFxuICAgIGdyb3VwZWRFdmVudHMsXG4gICAgbm93LFxuICAgIGxhdGVzdEtub3duVGltZVxuICApO1xuICBjb25zdCBzb3J0ZWRDYXNjYWRpbmdTcGFucyA9IGNhc2NhZGVTcGFucyhydW5TcGFuLCBzcGFucyk7XG5cbiAgLy8gQ29tcHV0ZSBrbm93biBkdXJhdGlvbiByZWxhdGl2ZSB0byB0cmFjZSBzdGFydFxuICBjb25zdCB0cmFjZVN0YXJ0TXMgPSBvdGVsVGltZVRvTXMocnVuU3Bhbi5zdGFydFRpbWUpO1xuICBjb25zdCBrbm93bkR1cmF0aW9uTXMgPSBsYXRlc3RLbm93blRpbWUuZ2V0VGltZSgpIC0gdHJhY2VTdGFydE1zO1xuXG4gIHJldHVybiB7XG4gICAgdHJhY2VJZDogcnVuLnJ1bklkLFxuICAgIHJvb3RTcGFuSWQ6IHJ1bi5ydW5JZCxcbiAgICBzcGFuczogc29ydGVkQ2FzY2FkaW5nU3BhbnMsXG4gICAgcmVzb3VyY2VzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd3b3JrZmxvdycsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAnc2VydmljZS5uYW1lJzogV09SS0ZMT1dfTElCUkFSWS5uYW1lLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICAgIGtub3duRHVyYXRpb25NczogTWF0aC5tYXgoMCwga25vd25EdXJhdGlvbk1zKSxcbiAgfTtcbn1cbiJdfQ==
|
package/dist/styles.css
CHANGED
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
* import '@workflow/web-shared/styles.css';
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
+
@custom-variant dark-theme (&:where(.dark-theme, .dark-theme *, .dark, .dark *, [data-theme="dark"], [data-theme="dark"] *));
|
|
16
|
+
@custom-variant light-theme (&:where(.light-theme, .light-theme *, .light, .light *));
|
|
17
|
+
|
|
15
18
|
:root {
|
|
16
19
|
/* Background */
|
|
17
20
|
--ds-background-100: hsl(0, 0%, 100%);
|
|
@@ -103,6 +106,9 @@
|
|
|
103
106
|
|
|
104
107
|
/* Shadows */
|
|
105
108
|
--ds-shadow-small: 0px 1px 2px rgba(0, 0, 0, 0.04);
|
|
109
|
+
--ds-shadow-tooltip:
|
|
110
|
+
0 0 0 1px rgba(0, 0, 0, 0.08), 0px 1px 1px rgba(0, 0, 0, 0.02),
|
|
111
|
+
0px 4px 8px rgba(0, 0, 0, 0.04), 0 0 0 1px var(--ds-background-200);
|
|
106
112
|
}
|
|
107
113
|
|
|
108
114
|
/* Dark theme defaults */
|
|
@@ -187,6 +193,9 @@
|
|
|
187
193
|
--ds-pink-900: hsl(336, 80%, 70%);
|
|
188
194
|
|
|
189
195
|
--ds-shadow-small: 0px 1px 2px rgba(0, 0, 0, 0.3);
|
|
196
|
+
--ds-shadow-tooltip:
|
|
197
|
+
0 0 0 1px rgba(255, 255, 255, 0.145), 0px 1px 1px rgba(0, 0, 0, 0.02),
|
|
198
|
+
0px 4px 8px rgba(0, 0, 0, 0.04), 0 0 0 1px var(--ds-background-200);
|
|
190
199
|
}
|
|
191
200
|
|
|
192
201
|
@theme inline {
|
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.17",
|
|
5
5
|
"private": false,
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"directory": "packages/web-shared"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
+
"@radix-ui/react-slot": "1.1.1",
|
|
41
42
|
"@radix-ui/react-tooltip": "1.2.8",
|
|
42
43
|
"@tailwindcss/postcss": "4",
|
|
43
44
|
"class-variance-authority": "0.7.1",
|
|
@@ -47,15 +48,16 @@
|
|
|
47
48
|
"react": "19.1.0",
|
|
48
49
|
"react-dom": "19.1.0",
|
|
49
50
|
"react-inspector": "9.0.0",
|
|
51
|
+
"react-use-measure": "2.1.1",
|
|
50
52
|
"react-virtuoso": "4.18.1",
|
|
51
53
|
"shiki": "4.0.0",
|
|
52
54
|
"sonner": "2.0.7",
|
|
53
55
|
"streamdown": "2.3.0",
|
|
54
56
|
"tailwind-merge": "3.5.0",
|
|
55
57
|
"tailwindcss": "4",
|
|
56
|
-
"@workflow/core": "5.0.0-beta.
|
|
57
|
-
"@workflow/utils": "5.0.0-beta.
|
|
58
|
-
"@workflow/world": "5.0.0-beta.
|
|
58
|
+
"@workflow/core": "5.0.0-beta.17",
|
|
59
|
+
"@workflow/utils": "5.0.0-beta.4",
|
|
60
|
+
"@workflow/world": "5.0.0-beta.10"
|
|
59
61
|
},
|
|
60
62
|
"devDependencies": {
|
|
61
63
|
"@biomejs/biome": "^2.4.4",
|
|
@@ -65,7 +67,7 @@
|
|
|
65
67
|
"ai": "6.0.116",
|
|
66
68
|
"typescript": "^5.9.3",
|
|
67
69
|
"vitest": "^4.0.18",
|
|
68
|
-
"@workflow/errors": "5.0.0-beta.
|
|
70
|
+
"@workflow/errors": "5.0.0-beta.8",
|
|
69
71
|
"@workflow/tsconfig": "5.0.0-beta.0"
|
|
70
72
|
},
|
|
71
73
|
"scripts": {
|
|
@@ -19,6 +19,8 @@ import {
|
|
|
19
19
|
import { isEncryptedMarker } from '../lib/hydration';
|
|
20
20
|
import { useToast } from '../lib/toast';
|
|
21
21
|
import { formatDuration } from '../lib/utils';
|
|
22
|
+
import { AttrSetEventBlock } from './sidebar/attributes-block';
|
|
23
|
+
import { ContextCardProvider } from './ui/context-card';
|
|
22
24
|
import { DataInspector, DecryptClickContext } from './ui/data-inspector';
|
|
23
25
|
import { DecryptButton } from './ui/decrypt-button';
|
|
24
26
|
import {
|
|
@@ -96,6 +98,10 @@ function getStatusDotColor(eventType: string): string {
|
|
|
96
98
|
if (eventType === 'step_retrying') {
|
|
97
99
|
return 'var(--ds-amber-700)';
|
|
98
100
|
}
|
|
101
|
+
// Attribute changes → teal
|
|
102
|
+
if (eventType === 'attr_set') {
|
|
103
|
+
return 'var(--ds-teal-900)';
|
|
104
|
+
}
|
|
99
105
|
// Completed/succeeded → green
|
|
100
106
|
if (
|
|
101
107
|
eventType === 'step_completed' ||
|
|
@@ -258,7 +264,10 @@ function isRunLevel(eventType: string): boolean {
|
|
|
258
264
|
eventType === 'run_cancelled' ||
|
|
259
265
|
eventType === 'workflow_started' ||
|
|
260
266
|
eventType === 'workflow_completed' ||
|
|
261
|
-
eventType === 'workflow_failed'
|
|
267
|
+
eventType === 'workflow_failed' ||
|
|
268
|
+
// attr_set carries a dedup correlationId rather than a child entity ID,
|
|
269
|
+
// so it groups and labels with the run itself.
|
|
270
|
+
eventType === 'attr_set'
|
|
262
271
|
);
|
|
263
272
|
}
|
|
264
273
|
|
|
@@ -594,6 +603,12 @@ function PayloadBlock({
|
|
|
594
603
|
);
|
|
595
604
|
}
|
|
596
605
|
|
|
606
|
+
// Attribute changes — render the changed keys and the writer instead of
|
|
607
|
+
// the raw JSON payload.
|
|
608
|
+
if (eventType === 'attr_set') {
|
|
609
|
+
return <AttrSetEventBlock data={cleaned} />;
|
|
610
|
+
}
|
|
611
|
+
|
|
597
612
|
return (
|
|
598
613
|
<div className="relative group/payload">
|
|
599
614
|
<div
|
|
@@ -1162,7 +1177,7 @@ function EventRow({
|
|
|
1162
1177
|
// Main component
|
|
1163
1178
|
// ──────────────────────────────────────────────────────────────────────────
|
|
1164
1179
|
|
|
1165
|
-
|
|
1180
|
+
function EventListViewInner({
|
|
1166
1181
|
events,
|
|
1167
1182
|
run,
|
|
1168
1183
|
onLoadEventData,
|
|
@@ -1745,3 +1760,11 @@ export function EventListView({
|
|
|
1745
1760
|
</DecryptClickContext.Provider>
|
|
1746
1761
|
);
|
|
1747
1762
|
}
|
|
1763
|
+
|
|
1764
|
+
export function EventListView(props: EventsListProps) {
|
|
1765
|
+
return (
|
|
1766
|
+
<ContextCardProvider>
|
|
1767
|
+
<EventListViewInner {...props} />
|
|
1768
|
+
</ContextCardProvider>
|
|
1769
|
+
);
|
|
1770
|
+
}
|
|
@@ -4,13 +4,14 @@ import { ArrowLeft, ArrowRight } from 'lucide-react';
|
|
|
4
4
|
import type { CSSProperties, ReactNode } from 'react';
|
|
5
5
|
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
6
6
|
import { cn } from '../../../lib/utils';
|
|
7
|
-
import type { Span } from '../types';
|
|
8
7
|
import {
|
|
9
8
|
formatDuration,
|
|
10
9
|
formatDurationPrecise,
|
|
11
10
|
getHighResInMs,
|
|
12
11
|
} from '../../trace-viewer/util/timing';
|
|
12
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip';
|
|
13
13
|
import { isSpanDimmedBySearch, type SpanSearchResult } from '../search';
|
|
14
|
+
import type { Span } from '../types';
|
|
14
15
|
import type { Segment, SegmentStatus, TimeMarker } from '../utils';
|
|
15
16
|
import {
|
|
16
17
|
computeSpanGaps,
|
|
@@ -18,8 +19,8 @@ import {
|
|
|
18
19
|
getResourceColor,
|
|
19
20
|
getSpanDurationMs,
|
|
20
21
|
} from '../utils';
|
|
21
|
-
import { ROW_HEIGHT_PX, useRowWindow } from './use-row-window';
|
|
22
22
|
import styles from './timeline.module.css';
|
|
23
|
+
import { ROW_HEIGHT_PX, useRowWindow } from './use-row-window';
|
|
23
24
|
|
|
24
25
|
// ---------------------------------------------------------------------------
|
|
25
26
|
// Constants
|
|
@@ -304,6 +305,80 @@ function SegmentBar({ segments }: { segments: VisibleSegment[] }): ReactNode {
|
|
|
304
305
|
);
|
|
305
306
|
}
|
|
306
307
|
|
|
308
|
+
// ---------------------------------------------------------------------------
|
|
309
|
+
// Event markers (attr_set)
|
|
310
|
+
// ---------------------------------------------------------------------------
|
|
311
|
+
|
|
312
|
+
function formatMarkerTime(ms: number): string {
|
|
313
|
+
const date = new Date(ms);
|
|
314
|
+
return (
|
|
315
|
+
date.toLocaleTimeString('en-US', {
|
|
316
|
+
hour: '2-digit',
|
|
317
|
+
minute: '2-digit',
|
|
318
|
+
second: '2-digit',
|
|
319
|
+
hour12: false,
|
|
320
|
+
}) +
|
|
321
|
+
'.' +
|
|
322
|
+
date.getMilliseconds().toString().padStart(3, '0')
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Diamond markers for `attr_set` events on a span's timeline row. Attribute
|
|
328
|
+
* changes are point-in-time events with no duration, so they don't get a
|
|
329
|
+
* status segment — instead they render as small teal diamonds at the moment
|
|
330
|
+
* the attributes were written.
|
|
331
|
+
*/
|
|
332
|
+
function AttrSetMarkers({
|
|
333
|
+
span,
|
|
334
|
+
viewStart,
|
|
335
|
+
viewDuration,
|
|
336
|
+
}: {
|
|
337
|
+
span: Span;
|
|
338
|
+
viewStart: number;
|
|
339
|
+
viewDuration: number;
|
|
340
|
+
}): ReactNode {
|
|
341
|
+
const markers = useMemo(
|
|
342
|
+
() => span.events.filter((e) => e.name === 'attr_set'),
|
|
343
|
+
[span.events]
|
|
344
|
+
);
|
|
345
|
+
|
|
346
|
+
if (markers.length === 0 || viewDuration <= 0) return null;
|
|
347
|
+
|
|
348
|
+
return (
|
|
349
|
+
<>
|
|
350
|
+
{markers.map((event, index) => {
|
|
351
|
+
const timeMs = getHighResInMs(event.timestamp);
|
|
352
|
+
const frac = (timeMs - viewStart) / viewDuration;
|
|
353
|
+
if (frac < 0 || frac > 1) return null;
|
|
354
|
+
|
|
355
|
+
return (
|
|
356
|
+
<Tooltip key={`attr-set-${index}`}>
|
|
357
|
+
<TooltipTrigger asChild>
|
|
358
|
+
<div
|
|
359
|
+
aria-label="Attributes set"
|
|
360
|
+
className="absolute top-1/2 z-10 flex h-4 w-4 -translate-x-1/2 -translate-y-1/2 cursor-pointer items-center justify-center"
|
|
361
|
+
style={{ left: `${frac * 100}%` }}
|
|
362
|
+
>
|
|
363
|
+
<div
|
|
364
|
+
className="h-2 w-2 rotate-45 rounded-[1px] border"
|
|
365
|
+
style={{
|
|
366
|
+
backgroundColor: 'var(--ds-teal-400)',
|
|
367
|
+
borderColor: 'var(--ds-teal-900)',
|
|
368
|
+
}}
|
|
369
|
+
/>
|
|
370
|
+
</div>
|
|
371
|
+
</TooltipTrigger>
|
|
372
|
+
<TooltipContent>
|
|
373
|
+
Attributes set · {formatMarkerTime(timeMs)}
|
|
374
|
+
</TooltipContent>
|
|
375
|
+
</Tooltip>
|
|
376
|
+
);
|
|
377
|
+
})}
|
|
378
|
+
</>
|
|
379
|
+
);
|
|
380
|
+
}
|
|
381
|
+
|
|
307
382
|
// ---------------------------------------------------------------------------
|
|
308
383
|
// TimelineBar
|
|
309
384
|
// ---------------------------------------------------------------------------
|
|
@@ -403,6 +478,11 @@ const TimelineBar = memo(function TimelineBar({
|
|
|
403
478
|
/>
|
|
404
479
|
)}
|
|
405
480
|
</div>
|
|
481
|
+
<AttrSetMarkers
|
|
482
|
+
span={span}
|
|
483
|
+
viewStart={viewStart}
|
|
484
|
+
viewDuration={viewDuration}
|
|
485
|
+
/>
|
|
406
486
|
</div>
|
|
407
487
|
</div>
|
|
408
488
|
);
|
|
@@ -21,17 +21,23 @@ import {
|
|
|
21
21
|
} from 'react';
|
|
22
22
|
import { useLoadMoreOnScroll } from '../../hooks/use-load-more-on-scroll';
|
|
23
23
|
import { useReducedMotion } from '../../hooks/use-reduced-motion';
|
|
24
|
+
import { filterSpanRawEvents } from '../../lib/trace-builder';
|
|
24
25
|
import { ErrorBoundary } from '../error-boundary';
|
|
25
26
|
import {
|
|
26
27
|
EntityDetailPanel,
|
|
27
28
|
type SelectedSpanInfo,
|
|
28
29
|
} from '../sidebar/entity-detail-panel';
|
|
29
30
|
import { useSidebarData } from '../sidebar/sidebar-data-context';
|
|
30
|
-
import type { TraceWithMeta } from './types';
|
|
31
31
|
import { formatDuration, getHighResInMs } from '../trace-viewer/util/timing';
|
|
32
32
|
import { IconButton } from '../ui/icon-button';
|
|
33
|
-
import { Spinner } from '../ui/spinner';
|
|
34
33
|
import { Kbd } from '../ui/kbd';
|
|
34
|
+
import { Spinner } from '../ui/spinner';
|
|
35
|
+
import {
|
|
36
|
+
Tooltip,
|
|
37
|
+
TooltipContent,
|
|
38
|
+
TooltipProvider,
|
|
39
|
+
TooltipTrigger,
|
|
40
|
+
} from '../ui/tooltip';
|
|
35
41
|
import EventList from './components/event-list';
|
|
36
42
|
import { SplitPane } from './components/split-pane';
|
|
37
43
|
import {
|
|
@@ -39,14 +45,9 @@ import {
|
|
|
39
45
|
Timeline,
|
|
40
46
|
TimelineHeader,
|
|
41
47
|
} from './components/timeline';
|
|
42
|
-
import {
|
|
43
|
-
Tooltip,
|
|
44
|
-
TooltipContent,
|
|
45
|
-
TooltipProvider,
|
|
46
|
-
TooltipTrigger,
|
|
47
|
-
} from '../ui/tooltip';
|
|
48
48
|
import { ActiveSpanProvider, useActiveSpan } from './context';
|
|
49
49
|
import { searchSpans } from './search';
|
|
50
|
+
import type { TraceWithMeta } from './types';
|
|
50
51
|
import { computeRootBounds, computeTimeMarkers } from './utils';
|
|
51
52
|
|
|
52
53
|
interface NewTraceViewerProps {
|
|
@@ -145,14 +146,16 @@ function useSelectedSpanInfo(): SelectedSpanInfo | null {
|
|
|
145
146
|
return useMemo(() => {
|
|
146
147
|
if (!activeSpan) return null;
|
|
147
148
|
|
|
148
|
-
const
|
|
149
|
-
const rawEvents =
|
|
150
|
-
|
|
151
|
-
|
|
149
|
+
const resource = activeSpan.attributes?.resource as string | undefined;
|
|
150
|
+
const rawEvents = filterSpanRawEvents(
|
|
151
|
+
sidebar.events,
|
|
152
|
+
resource,
|
|
153
|
+
activeSpan.spanId
|
|
154
|
+
);
|
|
152
155
|
|
|
153
156
|
return {
|
|
154
157
|
data: activeSpan.attributes?.data,
|
|
155
|
-
resource
|
|
158
|
+
resource,
|
|
156
159
|
spanId: activeSpan.spanId,
|
|
157
160
|
rawEvents,
|
|
158
161
|
};
|
|
@@ -459,7 +462,7 @@ function NewTraceViewerContent({
|
|
|
459
462
|
)
|
|
460
463
|
);
|
|
461
464
|
const isMouseWheel = e.deltaMode === 1 || Math.abs(e.deltaY) >= 50;
|
|
462
|
-
const scaleFactor =
|
|
465
|
+
const scaleFactor = 2 ** (dy / (isMouseWheel ? 200 : 60));
|
|
463
466
|
|
|
464
467
|
setViewport((prev) => {
|
|
465
468
|
const prevDuration = prev.end - prev.start;
|