@workflow/world-local 5.0.0-beta.24 → 5.0.0-beta.25
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/fs.d.ts.map +1 -1
- package/dist/fs.js +26 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -1
- package/dist/storage/events-storage.d.ts.map +1 -1
- package/dist/storage/events-storage.js +15 -1
- package/dist/storage/helpers.d.ts.map +1 -1
- package/dist/storage/helpers.js +23 -20
- package/dist/storage/hook-index.d.ts +50 -0
- package/dist/storage/hook-index.d.ts.map +1 -0
- package/dist/storage/hook-index.js +259 -0
- package/dist/storage/hooks-storage.d.ts.map +1 -1
- package/dist/storage/hooks-storage.js +80 -74
- package/dist/storage/runs-storage.d.ts.map +1 -1
- package/dist/storage/runs-storage.js +6 -3
- package/package.json +2 -2
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { HookNotFoundError } from '@workflow/errors';
|
|
3
|
-
import {
|
|
3
|
+
import { HookSchema, isTerminalWorkflowRunStatus, WorkflowRunSchema, } from '@workflow/world';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { DEFAULT_RESOLVE_DATA_OPTION } from '../config.js';
|
|
6
|
-
import { assertSafeEntityId, deleteJSON,
|
|
6
|
+
import { assertSafeEntityId, deleteJSON, jsonReplacer, listJSONFiles, paginatedFileSystemQuery, readJSON, readJSONWithFallback, taggedPath, UnsafeEntityIdError, writeExclusive, } from '../fs.js';
|
|
7
7
|
import { filterHookData } from './filters.js';
|
|
8
|
-
import { hashToken, hookRecoveryMarkerPath, isHookDisposalCommitted, releaseHookTokenClaimIfOwnedBy, } from './helpers.js';
|
|
9
|
-
|
|
10
|
-
return tag ? isUntagged(fileId) || hasTag(fileId, tag) : isUntagged(fileId);
|
|
11
|
-
}
|
|
8
|
+
import { hashToken, hookRecoveryMarkerPath, hookTokenClaimPath, isHookDisposalCommitted, releaseHookTokenClaimIfOwnedBy, } from './helpers.js';
|
|
9
|
+
import { deleteHookByRunMarkerFile, ensureHookIndexes, findNewestIndexedHookCreatedEvent, listHookByRunMarkers, writeHookByRunMarker, } from './hook-index.js';
|
|
12
10
|
function getHookCreatedToken(event) {
|
|
13
11
|
if (event.eventType !== 'hook_created')
|
|
14
12
|
return undefined;
|
|
@@ -36,53 +34,26 @@ function isMatchingHookCreatedEvent(event, matches) {
|
|
|
36
34
|
typeof event.correlationId === 'string' &&
|
|
37
35
|
matches(event));
|
|
38
36
|
}
|
|
39
|
-
function closesLiveHook(event, liveEvent) {
|
|
40
|
-
if (event.runId !== liveEvent.runId)
|
|
41
|
-
return false;
|
|
42
|
-
return ((event.eventType === 'hook_disposed' &&
|
|
43
|
-
event.correlationId === liveEvent.correlationId) ||
|
|
44
|
-
isTerminalRunEventType(event.eventType));
|
|
45
|
-
}
|
|
46
|
-
async function readEventForHookScan(filePath) {
|
|
47
|
-
try {
|
|
48
|
-
return await readJSON(filePath, EventSchema);
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
if (error instanceof SyntaxError || error instanceof z.ZodError) {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
throw error;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
37
|
async function isTerminalRunCache(basedir, runId, tag) {
|
|
58
38
|
const run = await readJSONWithFallback(basedir, 'runs', runId, WorkflowRunSchema, tag);
|
|
59
39
|
return run ? isTerminalWorkflowRunStatus(run.status) : false;
|
|
60
40
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
let liveEvent = null;
|
|
76
|
-
for (const event of events) {
|
|
77
|
-
if (isMatchingHookCreatedEvent(event, matches)) {
|
|
78
|
-
liveEvent = event;
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
if (liveEvent && closesLiveHook(event, liveEvent)) {
|
|
82
|
-
liveEvent = null;
|
|
83
|
-
}
|
|
41
|
+
/**
|
|
42
|
+
* Find the live `hook_created` event for a token or hookId via the
|
|
43
|
+
* durable hook indexes (instead of scanning the whole event log).
|
|
44
|
+
*
|
|
45
|
+
* The liveness checks below subsume the old scan's in-log closure
|
|
46
|
+
* replay: the dispose lock is written before `hook_disposed` is
|
|
47
|
+
* appended, the run entity is terminal before any terminal run event
|
|
48
|
+
* is appended, and neither is ever deleted — so any closure visible
|
|
49
|
+
* in the log is also visible to these checks.
|
|
50
|
+
*/
|
|
51
|
+
async function findLiveHookCreatedEvent(basedir, index, matches, tag) {
|
|
52
|
+
const newest = await findNewestIndexedHookCreatedEvent(basedir, index, (event) => isMatchingHookCreatedEvent(event, matches), tag);
|
|
53
|
+
if (!newest || !isMatchingHookCreatedEvent(newest, matches)) {
|
|
54
|
+
return null;
|
|
84
55
|
}
|
|
85
|
-
if (
|
|
56
|
+
if (await isTerminalRunCache(basedir, newest.runId, tag)) {
|
|
86
57
|
return null;
|
|
87
58
|
}
|
|
88
59
|
// A committed disposal (dispose lock on disk) closes the hook even when
|
|
@@ -90,11 +61,10 @@ async function findLiveHookCreatedEvent(basedir, matches, tag) {
|
|
|
90
61
|
// writes the lock, releases the token claim and hook entity, and only
|
|
91
62
|
// then appends the event. Rebuilding the caches from the log in that
|
|
92
63
|
// window would resurrect a claim for a hook that is being torn down.
|
|
93
|
-
if (
|
|
94
|
-
(await isHookDisposalCommitted(basedir, liveEvent.correlationId, tag))) {
|
|
64
|
+
if (await isHookDisposalCommitted(basedir, newest.correlationId, tag)) {
|
|
95
65
|
return null;
|
|
96
66
|
}
|
|
97
|
-
return
|
|
67
|
+
return newest;
|
|
98
68
|
}
|
|
99
69
|
async function restoreHookCachesFromEvent(basedir, event, tag) {
|
|
100
70
|
const hook = hookFromCreatedEvent(event);
|
|
@@ -105,15 +75,17 @@ async function restoreHookCachesFromEvent(basedir, event, tag) {
|
|
|
105
75
|
runId: hook.runId,
|
|
106
76
|
eventId: event.eventId,
|
|
107
77
|
}));
|
|
78
|
+
// Marker before entity (see hook-index.ts crash-ordering invariant).
|
|
79
|
+
await writeHookByRunMarker(basedir, hook.runId, hook.hookId, tag);
|
|
108
80
|
await writeExclusive(taggedPath(basedir, 'hooks', hook.hookId, tag), JSON.stringify(hook, jsonReplacer, 2));
|
|
109
81
|
return hook;
|
|
110
82
|
}
|
|
111
83
|
export async function rebuildLiveHookByTokenFromEventLog(basedir, token, tag) {
|
|
112
|
-
const event = await findLiveHookCreatedEvent(basedir, (candidate) => getHookCreatedToken(candidate) === token, tag);
|
|
84
|
+
const event = await findLiveHookCreatedEvent(basedir, { kind: 'token', token }, (candidate) => getHookCreatedToken(candidate) === token, tag);
|
|
113
85
|
return event ? restoreHookCachesFromEvent(basedir, event, tag) : null;
|
|
114
86
|
}
|
|
115
87
|
async function rebuildLiveHookByIdFromEventLog(basedir, hookId, tag) {
|
|
116
|
-
const event = await findLiveHookCreatedEvent(basedir, (candidate) => candidate.correlationId === hookId, tag);
|
|
88
|
+
const event = await findLiveHookCreatedEvent(basedir, { kind: 'id', hookId }, (candidate) => candidate.correlationId === hookId, tag);
|
|
117
89
|
return event ? restoreHookCachesFromEvent(basedir, event, tag) : null;
|
|
118
90
|
}
|
|
119
91
|
/**
|
|
@@ -121,8 +93,35 @@ async function rebuildLiveHookByIdFromEventLog(basedir, hookId, tag) {
|
|
|
121
93
|
* Implements the Storage['hooks'] interface with hook CRUD operations.
|
|
122
94
|
*/
|
|
123
95
|
export function createHooksStorage(basedir, tag) {
|
|
124
|
-
|
|
96
|
+
const TokenClaimPointerSchema = z.object({
|
|
97
|
+
hookId: z.string().optional(),
|
|
98
|
+
});
|
|
125
99
|
async function findHookByToken(token) {
|
|
100
|
+
// Fast path: the token claim file points at the owning hookId.
|
|
101
|
+
let claim = null;
|
|
102
|
+
try {
|
|
103
|
+
claim = await readJSON(hookTokenClaimPath(basedir, token), TokenClaimPointerSchema);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
if (!(error instanceof SyntaxError || error instanceof z.ZodError)) {
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (claim?.hookId) {
|
|
111
|
+
try {
|
|
112
|
+
const hook = await readJSONWithFallback(basedir, 'hooks', claim.hookId, HookSchema, tag);
|
|
113
|
+
if (hook && hook.token === token) {
|
|
114
|
+
return { ...hook, isWebhook: hook.isWebhook ?? true };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (!UnsafeEntityIdError.is(error)) {
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Slow path for legacy states (e.g. a lost claim file while the
|
|
124
|
+
// entity is still on disk).
|
|
126
125
|
const hooksDir = path.join(basedir, 'hooks');
|
|
127
126
|
const files = await listJSONFiles(hooksDir);
|
|
128
127
|
for (const file of files) {
|
|
@@ -194,26 +193,33 @@ export function createHooksStorage(basedir, tag) {
|
|
|
194
193
|
* Called when a run reaches a terminal state.
|
|
195
194
|
*/
|
|
196
195
|
export async function deleteAllHooksForRun(basedir, runId) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
196
|
+
// Discover this run's hooks via by-run markers (a prefix readdir)
|
|
197
|
+
// instead of reading every live hook entity in the world.
|
|
198
|
+
await ensureHookIndexes(basedir);
|
|
199
|
+
for (const marker of await listHookByRunMarkers(basedir, runId)) {
|
|
200
|
+
if (marker.hookId) {
|
|
201
|
+
let hook = null;
|
|
202
|
+
let hookPath = null;
|
|
203
|
+
try {
|
|
204
|
+
hookPath = taggedPath(basedir, 'hooks', marker.hookId, marker.tag);
|
|
205
|
+
hook = await readJSON(hookPath, HookSchema);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
if (!UnsafeEntityIdError.is(error) &&
|
|
209
|
+
!(error instanceof SyntaxError || error instanceof z.ZodError)) {
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (hook && hookPath && hook.runId === runId) {
|
|
214
|
+
// Release the claim only if it still points at this hook — a
|
|
215
|
+
// claimant may already hold a fresh claim for the token (see
|
|
216
|
+
// `isHookTokenClaimReleasable`).
|
|
217
|
+
await releaseHookTokenClaimIfOwnedBy(basedir, hook.token, hook.runId, hook.hookId);
|
|
218
|
+
await deleteJSON(hookRecoveryMarkerPath(basedir, hook.token, hook.runId, hook.hookId));
|
|
219
|
+
await deleteJSON(hookPath);
|
|
220
|
+
}
|
|
216
221
|
}
|
|
222
|
+
await deleteHookByRunMarkerFile(basedir, marker.fileId);
|
|
217
223
|
}
|
|
218
224
|
}
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3Mtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL2hvb2tzLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBVXJELE9BQU8sRUFDTCxXQUFXLEVBQ1gsVUFBVSxFQUNWLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0IsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0QsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixZQUFZLEVBQ1osYUFBYSxFQUNiLHdCQUF3QixFQUN4QixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3BCLFVBQVUsRUFDVixjQUFjLEdBQ2YsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsU0FBUyxFQUNULHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsOEJBQThCLEdBQy9CLE1BQU0sY0FBYyxDQUFDO0FBRXRCLFNBQVMsY0FBYyxDQUFDLE1BQWMsRUFBRSxHQUF1QjtJQUM3RCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFZO0lBQ3ZDLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxjQUFjO1FBQUUsT0FBTyxTQUFT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QXNCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQ3JFLENBQUM7WUFDRixNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgSG9va05vdEZvdW5kRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB0eXBlIHtcbiAgRXZlbnQsXG4gIEdldEhvb2tQYXJhbXMsXG4gIEhvb2ssXG4gIEhvb2tDcmVhdGVkRXZlbnQsXG4gIExpc3RIb29rc1BhcmFtcyxcbiAgUGFnaW5hdGVkUmVzcG9uc2UsXG4gIFN0b3JhZ2UsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQge1xuICBFdmVudFNjaGVtYSxcbiAgSG9va1NjaGVtYSxcbiAgaXNUZXJtaW5hbFJ1bkV2ZW50VHlwZSxcbiAgaXNUZXJtaW5hbFdvcmtmbG93UnVuU3RhdHVzLFxuICBXb3JrZmxvd1J1blNjaGVtYSxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OIH0gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7XG4gIGFzc2VydFNhZmVFbnRpdHlJZCxcbiAgZGVsZXRlSlNPTixcbiAgaGFzVGFnLFxuICBpc1VudGFnZ2VkLFxuICBqc29uUmVwbGFjZXIsXG4gIGxpc3RKU09ORmlsZXMsXG4gIHBhZ2luYXRlZEZpbGVTeXN0ZW1RdWVyeSxcbiAgcmVhZEpTT04sXG4gIHJlYWRKU09OV2l0aEZhbGxiYWNrLFxuICB0YWdnZWRQYXRoLFxuICB3cml0ZUV4Y2x1c2l2ZSxcbn0gZnJvbSAnLi4vZnMuanMnO1xuaW1wb3J0IHsgZmlsdGVySG9va0RhdGEgfSBmcm9tICcuL2ZpbHRlcnMuanMnO1xuaW1wb3J0IHtcbiAgaGFzaFRva2VuLFxuICBob29rUmVjb3ZlcnlNYXJrZXJQYXRoLFxuICBpc0hvb2tEaXNwb3NhbENvbW1pdHRlZCxcbiAgcmVsZWFzZUhvb2tUb2tlbkNsYWltSWZPd25lZEJ5LFxufSBmcm9tICcuL2hlbHBlcnMuanMnO1xuXG5mdW5jdGlvbiBpc1Zpc2libGVUb1RhZyhmaWxlSWQ6IHN0cmluZywgdGFnOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhZyA/IGlzVW50YWdnZWQoZmlsZUlkKSB8fCBoYXNUYWcoZmlsZUlkLCB0YWcpIDogaXNVbnRhZ2dlZChmaWxlSWQpO1xufVxuXG5mdW5jdGlvbiBnZXRIb29rQ3JlYXRlZFRva2VuKGV2ZW50OiBFdmVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChldmVudC5ldmVudFR5cGUgIT09ICdob29rX2NyZWF0ZWQnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB0b2tlbiA9IChldmVudC5ldmVudERhdGEgYXMgeyB0b2tlbj86IHVua25vd24gfSkudG9rZW47XG4gIHJldHVybiB0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnID8gdG9rZW4gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhvb2tGcm9tQ3JlYXRlZEV2ZW50KGV2ZW50OiBFdmVudCAmIEhvb2tDcmVhdGVkRXZlbnQpOiBIb29rIHtcbiAgY29uc3QgeyB0b2tlbiwgbWV0YWRhdGEsIGlzV2ViaG9vaywgaXNTeXN0ZW0gfSA9IGV2ZW50LmV2ZW50RGF0YTtcbiAgcmV0dXJuIHtcbiAgICBydW5JZDogZXZlbnQucnVuSWQsXG4gICAgaG9va0lkOiBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgIHRva2VuLFxuICAgIG1ldGFkYXRhLFxuICAgIG93bmVySWQ6ICdsb2NhbC1vd25lcicsXG4gICAgcHJvamVjdElkOiAnbG9jYWwtcHJvamVjdCcsXG4gICAgZW52aXJvbm1lbnQ6ICdsb2NhbCcsXG4gICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgc3BlY1ZlcnNpb246IGV2ZW50LnNwZWNWZXJzaW9uLFxuICAgIGlzV2ViaG9vazogaXNXZWJob29rID8/IHRydWUsXG4gICAgaXNTeXN0ZW06IGlzU3lzdGVtID8/IGZhbHNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc01hdGNoaW5nSG9va0NyZWF0ZWRFdmVudChcbiAgZXZlbnQ6IEV2ZW50LFxuICBtYXRjaGVzOiAoZXZlbnQ6IEV2ZW50KSA9PiBib29sZWFuXG4pOiBldmVudCBpcyBFdmVudCAmIEhvb2tDcmVhdGVkRXZlbnQge1xuICByZXR1cm4gKFxuICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfY3JlYXRlZCcgJiZcbiAgICB0eXBlb2YgZXZlbnQuY29ycmVsYXRpb25JZCA9PT0gJ3N0cmluZycgJiZcbiAgICBtYXRjaGVzKGV2ZW50KVxuICApO1xufVxuXG5mdW5jdGlvbiBjbG9zZXNMaXZlSG9vayhcbiAgZXZlbnQ6IEV2ZW50LFxuICBsaXZlRXZlbnQ6IEV2ZW50ICYgSG9va0NyZWF0ZWRFdmVudFxuKTogYm9vbGVhbiB7XG4gIGlmIChldmVudC5ydW5JZCAhPT0gbGl2ZUV2ZW50LnJ1bklkKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAoXG4gICAgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnICYmXG4gICAgICBldmVudC5jb3JyZWxhdGlvbklkID09PSBsaXZlRXZlbnQuY29ycmVsYXRpb25JZCkgfHxcbiAgICBpc1Rlcm1pbmFsUnVuRXZlbnRUeXBlKGV2ZW50LmV2ZW50VHlwZSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEV2ZW50Rm9ySG9va1NjYW4oZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8RXZlbnQgfCBudWxsPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRKU09OKGZpbGVQYXRoLCBFdmVudFNjaGVtYSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNUZXJtaW5hbFJ1bkNhY2hlKFxuICBiYXNlZGlyOiBzdHJpbmcsXG4gIHJ1bklkOiBzdHJpbmcsXG4gIHRhZz86IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJ1biA9IGF3YWl0IHJlYWRKU09OV2l0aEZhbGxiYWNrKFxuICAgIGJhc2VkaXIsXG4gICAgJ3J1bnMnLFxuICAgIHJ1bklkLFxuICAgIFdvcmtmbG93UnVuU2NoZW1hLFxuICAgIHRhZ1xuICApO1xuICByZXR1cm4gcnVuID8gaXNUZXJtaW5hbFdvcmtmbG93UnVuU3RhdHVzKHJ1bi5zdGF0dXMpIDogZmFsc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRMaXZlSG9va0NyZWF0ZWRFdmVudChcbiAgYmFzZWRpcjogc3RyaW5nLFxuICBtYXRjaGVzOiAoZXZlbnQ6IEV2ZW50KSA9PiBib29sZWFuLFxuICB0YWc/OiBzdHJpbmdcbik6IFByb21pc2U8KEV2ZW50ICYgSG9va0NyZWF0ZWRFdmVudCkgfCBudWxsPiB7XG4gIGNvbnN0IGV2ZW50c0RpciA9IHBhdGguam9pbihiYXNlZGlyLCAnZXZlbnRzJyk7XG4gIGNvbnN0IGV2ZW50czogRXZlbnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZmlsZUlkIG9mIGF3YWl0IGxpc3RKU09ORmlsZXMoZXZlbnRzRGlyKSkge1xuICAgIGlmICghaXNWaXNpYmxlVG9UYWcoZmlsZUlkLCB0YWcpKSBjb250aW51ZTtcbiAgICBjb25zdCBldmVudCA9IGF3YWl0IHJlYWRFdmVudEZvckhvb2tTY2FuKFxuICAgICAgcGF0aC5qb2luKGV2ZW50c0RpciwgYCR7ZmlsZUlkfS5qc29uYClcbiAgICApO1xuICAgIGlmIChldmVudCkgZXZlbnRzLnB1c2goZXZlbnQpO1xuICB9XG5cbiAgZXZlbnRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBieVRpbWUgPSBhLmNyZWF0ZWRBdC5nZXRUaW1lKCkgLSBiLmNyZWF0ZWRBdC5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGJ5VGltZSA9PT0gMCA/IGEuZXZlbnRJZC5sb2NhbGVDb21wYXJlKGIuZXZlbnRJZCkgOiBieVRpbWU7XG4gIH0pO1xuXG4gIGxldCBsaXZlRXZlbnQ6IChFdmVudCAmIEhvb2tDcmVhdGVkRXZlbnQpIHwgbnVsbCA9IG51bGw7XG4gIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgaWYgKGlzTWF0Y2hpbmdIb29rQ3JlYXRlZEV2ZW50KGV2ZW50LCBtYXRjaGVzKSkge1xuICAgICAgbGl2ZUV2ZW50ID0gZXZlbnQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobGl2ZUV2ZW50ICYmIGNsb3Nlc0xpdmVIb29rKGV2ZW50LCBsaXZlRXZlbnQpKSB7XG4gICAgICBsaXZlRXZlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsaXZlRXZlbnQgJiYgKGF3YWl0IGlzVGVybWluYWxSdW5DYWNoZShiYXNlZGlyLCBsaXZlRXZlbnQucnVuSWQsIHRhZykpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBIGNvbW1pdHRlZCBkaXNwb3NhbCAoZGlzcG9zZSBsb2NrIG9uIGRpc2spIGNsb3NlcyB0aGUgaG9vayBldmVuIHdoZW5cbiAgLy8gaXRzIGBob29rX2Rpc3Bvc2VkYCBldmVudCBoYXMgbm90IGxhbmRlZCBpbiB0aGUgbG9nIHlldCDigJQgdGhlIGRpc3Bvc2VyXG4gIC8vIHdyaXRlcyB0aGUgbG9jaywgcmVsZWFzZXMgdGhlIHRva2VuIGNsYWltIGFuZCBob29rIGVudGl0eSwgYW5kIG9ubHlcbiAgLy8gdGhlbiBhcHBlbmRzIHRoZSBldmVudC4gUmVidWlsZGluZyB0aGUgY2FjaGVzIGZyb20gdGhlIGxvZyBpbiB0aGF0XG4gIC8vIHdpbmRvdyB3b3VsZCByZXN1cnJlY3QgYSBjbGFpbSBmb3IgYSBob29rIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxuICBpZiAoXG4gICAgbGl2ZUV2ZW50ICYmXG4gICAgKGF3YWl0IGlzSG9va0Rpc3Bvc2FsQ29tbWl0dGVkKGJhc2VkaXIsIGxpdmVFdmVudC5jb3JyZWxhdGlvbklkLCB0YWcpKVxuICApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBsaXZlRXZlbnQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVIb29rQ2FjaGVzRnJvbUV2ZW50KFxuICBiYXNlZGlyOiBzdHJpbmcsXG4gIGV2ZW50OiBFdmVudCAmIEhvb2tDcmVhdGVkRXZlbnQsXG4gIHRhZz86IHN0cmluZ1xuKTogUHJvbWlzZTxIb29rPiB7XG4gIGNvbnN0IGhvb2sgPSBob29rRnJvbUNyZWF0ZWRFdmVudChldmVudCk7XG5cbiAgY29uc3QgY2xhaW1QYXRoID0gcGF0aC5qb2luKFxuICAgIGJhc2VkaXIsXG4gICAgJ2hvb2tzJyxcbiAgICAndG9rZW5zJyxcbiAgICBgJHtoYXNoVG9rZW4oaG9vay50b2tlbil9Lmpzb25gXG4gICk7XG4gIGF3YWl0IHdyaXRlRXhjbHVzaXZlKFxuICAgIGNsYWltUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICB0b2tlbjogaG9vay50b2tlbixcbiAgICAgIGhvb2tJZDogaG9vay5ob29rSWQsXG4gICAgICBydW5JZDogaG9vay5ydW5JZCxcbiAgICAgIGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgfSlcbiAgKTtcbiAgYXdhaXQgd3JpdGVFeGNsdXNpdmUoXG4gICAgdGFnZ2VkUGF0aChiYXNlZGlyLCAnaG9va3MnLCBob29rLmhvb2tJZCwgdGFnKSxcbiAgICBKU09OLnN0cmluZ2lmeShob29rLCBqc29uUmVwbGFjZXIsIDIpXG4gICk7XG5cbiAgcmV0dXJuIGhvb2s7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWJ1aWxkTGl2ZUhvb2tCeVRva2VuRnJvbUV2ZW50TG9nKFxuICBiYXNlZGlyOiBzdHJpbmcsXG4gIHRva2VuOiBzdHJpbmcsXG4gIHRhZz86IHN0cmluZ1xuKTogUHJvbWlzZTxIb29rIHwgbnVsbD4ge1xuICBjb25zdCBldmVudCA9IGF3YWl0IGZpbmRMaXZlSG9va0NyZWF0ZWRFdmVudChcbiAgICBiYXNlZGlyLFxuICAgIChjYW5kaWRhdGUpID0+IGdldEhvb2tDcmVhdGVkVG9rZW4oY2FuZGlkYXRlKSA9PT0gdG9rZW4sXG4gICAgdGFnXG4gICk7XG4gIHJldHVybiBldmVudCA/IHJlc3RvcmVIb29rQ2FjaGVzRnJvbUV2ZW50KGJhc2VkaXIsIGV2ZW50LCB0YWcpIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVidWlsZExpdmVIb29rQnlJZEZyb21FdmVudExvZyhcbiAgYmFzZWRpcjogc3RyaW5nLFxuICBob29rSWQ6IHN0cmluZyxcbiAgdGFnPzogc3RyaW5nXG4pOiBQcm9taXNlPEhvb2sgfCBudWxsPiB7XG4gIGNvbnN0IGV2ZW50ID0gYXdhaXQgZmluZExpdmVIb29rQ3JlYXRlZEV2ZW50KFxuICAgIGJhc2VkaXIsXG4gICAgKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmNvcnJlbGF0aW9uSWQgPT09IGhvb2tJZCxcbiAgICB0YWdcbiAgKTtcbiAgcmV0dXJuIGV2ZW50ID8gcmVzdG9yZUhvb2tDYWNoZXNGcm9tRXZlbnQoYmFzZWRpciwgZXZlbnQsIHRhZykgOiBudWxsO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBob29rcyBzdG9yYWdlIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBmaWxlc3lzdGVtLlxuICogSW1wbGVtZW50cyB0aGUgU3RvcmFnZVsnaG9va3MnXSBpbnRlcmZhY2Ugd2l0aCBob29rIENSVUQgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhvb2tzU3RvcmFnZShcbiAgYmFzZWRpcjogc3RyaW5nLFxuICB0YWc/OiBzdHJpbmdcbik6IFN0b3JhZ2VbJ2hvb2tzJ10ge1xuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBhIGhvb2sgYnkgdG9rZW4gKHNoYXJlZCBiZXR3ZWVuIGdldEJ5VG9rZW4pXG4gIGFzeW5jIGZ1bmN0aW9uIGZpbmRIb29rQnlUb2tlbih0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxIb29rIHwgbnVsbD4ge1xuICAgIGNvbnN0IGhvb2tzRGlyID0gcGF0aC5qb2luKGJhc2VkaXIsICdob29rcycpO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgbGlzdEpTT05GaWxlcyhob29rc0Rpcik7XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGhvb2tQYXRoID0gcGF0aC5qb2luKGhvb2tzRGlyLCBgJHtmaWxlfS5qc29uYCk7XG4gICAgICBjb25zdCBob29rID0gYXdhaXQgcmVhZEpTT04oaG9va1BhdGgsIEhvb2tTY2hlbWEpO1xuICAgICAgaWYgKGhvb2sgJiYgaG9vay50b2tlbiA9PT0gdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uaG9vaywgaXNXZWJob29rOiBob29rLmlzV2ViaG9vayA/PyB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXQoaG9va0lkOiBzdHJpbmcsIHBhcmFtcz86IEdldEhvb2tQYXJhbXMpOiBQcm9taXNlPEhvb2s+IHtcbiAgICBhc3NlcnRTYWZlRW50aXR5SWQoJ2hvb2tJZCcsIGhvb2tJZCk7XG4gICAgY29uc3QgaG9vayA9IGF3YWl0IHJlYWRKU09OV2l0aEZhbGxiYWNrKFxuICAgICAgYmFzZWRpcixcbiAgICAgICdob29rcycsXG4gICAgICBob29rSWQsXG4gICAgICBIb29rU2NoZW1hLFxuICAgICAgdGFnXG4gICAgKTtcbiAgICBpZiAoIWhvb2spIHtcbiAgICAgIGNvbnN0IHJlYnVpbHQgPSBhd2FpdCByZWJ1aWxkTGl2ZUhvb2tCeUlkRnJvbUV2ZW50TG9nKFxuICAgICAgICBiYXNlZGlyLFxuICAgICAgICBob29rSWQsXG4gICAgICAgIHRhZ1xuICAgICAgKTtcbiAgICAgIGlmICghcmVidWlsdCkge1xuICAgICAgICB0aHJvdyBuZXcgSG9va05vdEZvdW5kRXJyb3IoaG9va0lkKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc29sdmVEYXRhID0gcGFyYW1zPy5yZXNvbHZlRGF0YSB8fCBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT047XG4gICAgICByZXR1cm4gZmlsdGVySG9va0RhdGEoXG4gICAgICAgIHsgLi4ucmVidWlsdCwgaXNXZWJob29rOiByZWJ1aWx0LmlzV2ViaG9vayA/PyB0cnVlIH0sXG4gICAgICAgIHJlc29sdmVEYXRhXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcz8ucmVzb2x2ZURhdGEgfHwgREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OO1xuICAgIHJldHVybiBmaWx0ZXJIb29rRGF0YShcbiAgICAgIHsgLi4uaG9vaywgaXNXZWJob29rOiBob29rLmlzV2ViaG9vayA/PyB0cnVlIH0sXG4gICAgICByZXNvbHZlRGF0YVxuICAgICk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRCeVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPEhvb2s+IHtcbiAgICBjb25zdCBob29rID1cbiAgICAgIChhd2FpdCBmaW5kSG9va0J5VG9rZW4odG9rZW4pKSA/P1xuICAgICAgKGF3YWl0IHJlYnVpbGRMaXZlSG9va0J5VG9rZW5Gcm9tRXZlbnRMb2coYmFzZWRpciwgdG9rZW4sIHRhZykpO1xuICAgIGlmICghaG9vaykge1xuICAgICAgdGhyb3cgbmV3IEhvb2tOb3RGb3VuZEVycm9yKHRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIGhvb2s7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBsaXN0KFxuICAgIHBhcmFtczogTGlzdEhvb2tzUGFyYW1zXG4gICk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8SG9vaz4+IHtcbiAgICBjb25zdCBob29rc0RpciA9IHBhdGguam9pbihiYXNlZGlyLCAnaG9va3MnKTtcbiAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcy5yZXNvbHZlRGF0YSB8fCBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT047XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYWdpbmF0ZWRGaWxlU3lzdGVtUXVlcnkoe1xuICAgICAgZGlyZWN0b3J5OiBob29rc0RpcixcbiAgICAgIHNjaGVtYTogSG9va1NjaGVtYSxcbiAgICAgIHNvcnRPcmRlcjogcGFyYW1zLnBhZ2luYXRpb24/LnNvcnRPcmRlciA/PyAnYXNjJyxcbiAgICAgIGxpbWl0OiBwYXJhbXMucGFnaW5hdGlvbj8ubGltaXQsXG4gICAgICBjdXJzb3I6IHBhcmFtcy5wYWdpbmF0aW9uPy5jdXJzb3IsXG4gICAgICBmaWxlUHJlZml4OiB1bmRlZmluZWQsIC8vIEhvb2tzIGRvbid0IGhhdmUgVUxJRHMsIHNvIHdlIGNhbid0IG9wdGltaXplIGJ5IGZpbGVuYW1lXG4gICAgICBmaWx0ZXI6IChob29rKSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBieSBydW5JZCBpZiBwcm92aWRlZFxuICAgICAgICBpZiAocGFyYW1zLnJ1bklkICYmIGhvb2sucnVuSWQgIT09IHBhcmFtcy5ydW5JZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBnZXRDcmVhdGVkQXQ6ICgpID0+IHtcbiAgICAgICAgLy8gSG9vayBmaWxlcyBkb24ndCBoYXZlIFVMSUQgdGltZXN0YW1wcyBpbiBmaWxlbmFtZSwgc28gcmV0dXJuIG51bGxcbiAgICAgICAgLy8gdG8gc2tpcCB0aGUgZmlsZW5hbWUtYmFzZWQgb3B0aW1pemF0aW9uIGFuZCBkZWZlciB0byBKU09OLWJhc2VkXG4gICAgICAgIC8vIGN1cnNvciBmaWx0ZXJpbmcgd2hpY2ggdXNlcyB0aGUgYWN0dWFsIGNyZWF0ZWRBdCBmcm9tIHRoZSBmaWxlLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICBnZXRJZDogKGhvb2spID0+IGhvb2suaG9va0lkLFxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBkYXRhIGFmdGVyIHBhZ2luYXRpb25cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzdWx0LFxuICAgICAgZGF0YTogcmVzdWx0LmRhdGEubWFwKChob29rKSA9PiBmaWx0ZXJIb29rRGF0YShob29rLCByZXNvbHZlRGF0YSkpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4geyBnZXQsIGdldEJ5VG9rZW4sIGxpc3QgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGVsZXRlIGFsbCBob29rcyBhc3NvY2lhdGVkIHdpdGggYSB3b3JrZmxvdyBydW4uXG4gKiBDYWxsZWQgd2hlbiBhIHJ1biByZWFjaGVzIGEgdGVybWluYWwgc3RhdGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVBbGxIb29rc0ZvclJ1bihcbiAgYmFzZWRpcjogc3RyaW5nLFxuICBydW5JZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaG9va3NEaXIgPSBwYXRoLmpvaW4oYmFzZWRpciwgJ2hvb2tzJyk7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgbGlzdEpTT05GaWxlcyhob29rc0Rpcik7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgaG9va1BhdGggPSBwYXRoLmpvaW4oaG9va3NEaXIsIGAke2ZpbGV9Lmpzb25gKTtcbiAgICBjb25zdCBob29rID0gYXdhaXQgcmVhZEpTT04oaG9va1BhdGgsIEhvb2tTY2hlbWEpO1xuICAgIGlmIChob29rICYmIGhvb2sucnVuSWQgPT09IHJ1bklkKSB7XG4gICAgICAvLyBSZWxlYXNlIHRoZSB0b2tlbiBjbGFpbSB0byBmcmVlIHVwIHRoZSB0b2tlbiDigJQgYnV0IG9ubHkgaWYgaXRcbiAgICAgIC8vIHN0aWxsIHBvaW50cyBhdCB0aGlzIGhvb2s6IGEgY2xhaW1hbnQgbWF5IGhhdmUgZm9yY2UtcmVsZWFzZWRcbiAgICAgIC8vIHRoZSB0ZXJtaW5hbCBydW4ncyBzdGFsZSBjbGFpbSBhbHJlYWR5IChzZWVcbiAgICAgIC8vIGBpc0hvb2tUb2tlbkNsYWltUmVsZWFzYWJsZWApIGFuZCBob2xkIGEgZnJlc2ggY2xhaW0gb2YgaXRzXG4gICAgICAvLyBvd24sIHdoaWNoIGFuIHVuY29uZGl0aW9uYWwgZGVsZXRlIHdvdWxkIGRlc3Ryb3kuIEFsc28gZGVsZXRlXG4gICAgICAvLyB0aGUgcmVjb3ZlcnkgbWFya2VyIChpZiBhbnkpIGZvciBkaXNrIGh5Z2llbmUuIFRoZVxuICAgICAgLy8gbWFya2VyJ3MgZmlsZW5hbWUgaGFzaCBpbmNsdWRlcyBgKHRva2VuLCBydW5JZCwgaG9va0lkKWAgc29cbiAgICAgIC8vIGEgbGVha2VkIG1hcmtlciBjYW4gbmV2ZXIgY29ycnVwdCBhIGRpZmZlcmVudCBsaWZldGltZSDigJQgYnV0XG4gICAgICAvLyBjbGVhbmluZyBpdCB1cCBoZXJlIGtlZXBzIHRoZSB0b2tlbnMvIGRpcmVjdG9yeSBmcm9tXG4gICAgICAvLyBhY2N1bXVsYXRpbmcgcmVjb3ZlcmVkLWhvb2sgc2lkZWNhcnMgb3ZlciB0aW1lLlxuICAgICAgYXdhaXQgcmVsZWFzZUhvb2tUb2tlbkNsYWltSWZPd25lZEJ5KFxuICAgICAgICBiYXNlZGlyLFxuICAgICAgICBob29rLnRva2VuLFxuICAgICAgICBob29rLnJ1bklkLFxuICAgICAgICBob29rLmhvb2tJZFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGRlbGV0ZUpTT04oXG4gICAgICAgIGhvb2tSZWNvdmVyeU1hcmtlclBhdGgoYmFzZWRpciwgaG9vay50b2tlbiwgaG9vay5ydW5JZCwgaG9vay5ob29rSWQpXG4gICAgICApO1xuICAgICAgYXdhaXQgZGVsZXRlSlNPTihob29rUGF0aCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3Mtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL2hvb2tzLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBVXJELE9BQU8sRUFDTCxVQUFVLEVBQ1YsMkJBQTJCLEVBQzNCLGlCQUFpQixHQUNsQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLFlBQVksRUFDWixhQUFhLEVBQ2Isd0JBQXdCLEVBQ3hCLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixjQUFjLEdBQ2YsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsU0FBUyxFQUNULHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLDhCQUE4QixHQUMvQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixpQ0FBaUMsRUFDakMsb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLFNBQVMsbUJBQW1CLENBQUMsS0FBWTtJQUN2QyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssY0FBYztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3pELE1BQU0sS0FBSyxHQUFJLEtBQUssQ0FBQyxTQUFpQyxDQUFDLEtBQUssQ0FBQztJQUM3RCxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FB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QUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUNyRSxDQUFDO2dCQUNGLE1BQU0sVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IEhvb2tOb3RGb3VuZEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7XG4gIEV2ZW50LFxuICBHZXRIb29rUGFyYW1zLFxuICBIb29rLFxuICBIb29rQ3JlYXRlZEV2ZW50LFxuICBMaXN0SG9va3NQYXJhbXMsXG4gIFBhZ2luYXRlZFJlc3BvbnNlLFxuICBTdG9yYWdlLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHtcbiAgSG9va1NjaGVtYSxcbiAgaXNUZXJtaW5hbFdvcmtmbG93UnVuU3RhdHVzLFxuICBXb3JrZmxvd1J1blNjaGVtYSxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OIH0gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7XG4gIGFzc2VydFNhZmVFbnRpdHlJZCxcbiAgZGVsZXRlSlNPTixcbiAganNvblJlcGxhY2VyLFxuICBsaXN0SlNPTkZpbGVzLFxuICBwYWdpbmF0ZWRGaWxlU3lzdGVtUXVlcnksXG4gIHJlYWRKU09OLFxuICByZWFkSlNPTldpdGhGYWxsYmFjayxcbiAgdGFnZ2VkUGF0aCxcbiAgVW5zYWZlRW50aXR5SWRFcnJvcixcbiAgd3JpdGVFeGNsdXNpdmUsXG59IGZyb20gJy4uL2ZzLmpzJztcbmltcG9ydCB7IGZpbHRlckhvb2tEYXRhIH0gZnJvbSAnLi9maWx0ZXJzLmpzJztcbmltcG9ydCB7XG4gIGhhc2hUb2tlbixcbiAgaG9va1JlY292ZXJ5TWFya2VyUGF0aCxcbiAgaG9va1Rva2VuQ2xhaW1QYXRoLFxuICBpc0hvb2tEaXNwb3NhbENvbW1pdHRlZCxcbiAgcmVsZWFzZUhvb2tUb2tlbkNsYWltSWZPd25lZEJ5LFxufSBmcm9tICcuL2hlbHBlcnMuanMnO1xuaW1wb3J0IHtcbiAgZGVsZXRlSG9va0J5UnVuTWFya2VyRmlsZSxcbiAgZW5zdXJlSG9va0luZGV4ZXMsXG4gIGZpbmROZXdlc3RJbmRleGVkSG9va0NyZWF0ZWRFdmVudCxcbiAgbGlzdEhvb2tCeVJ1bk1hcmtlcnMsXG4gIHdyaXRlSG9va0J5UnVuTWFya2VyLFxufSBmcm9tICcuL2hvb2staW5kZXguanMnO1xuXG5mdW5jdGlvbiBnZXRIb29rQ3JlYXRlZFRva2VuKGV2ZW50OiBFdmVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChldmVudC5ldmVudFR5cGUgIT09ICdob29rX2NyZWF0ZWQnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB0b2tlbiA9IChldmVudC5ldmVudERhdGEgYXMgeyB0b2tlbj86IHVua25vd24gfSkudG9rZW47XG4gIHJldHVybiB0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnID8gdG9rZW4gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhvb2tGcm9tQ3JlYXRlZEV2ZW50KGV2ZW50OiBFdmVudCAmIEhvb2tDcmVhdGVkRXZlbnQpOiBIb29rIHtcbiAgY29uc3QgeyB0b2tlbiwgbWV0YWRhdGEsIGlzV2ViaG9vaywgaXNTeXN0ZW0gfSA9IGV2ZW50LmV2ZW50RGF0YTtcbiAgcmV0dXJuIHtcbiAgICBydW5JZDogZXZlbnQucnVuSWQsXG4gICAgaG9va0lkOiBldmVudC5jb3JyZWxhdGlvbklkLFxuICAgIHRva2VuLFxuICAgIG1ldGFkYXRhLFxuICAgIG93bmVySWQ6ICdsb2NhbC1vd25lcicsXG4gICAgcHJvamVjdElkOiAnbG9jYWwtcHJvamVjdCcsXG4gICAgZW52aXJvbm1lbnQ6ICdsb2NhbCcsXG4gICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgc3BlY1ZlcnNpb246IGV2ZW50LnNwZWNWZXJzaW9uLFxuICAgIGlzV2ViaG9vazogaXNXZWJob29rID8/IHRydWUsXG4gICAgaXNTeXN0ZW06IGlzU3lzdGVtID8/IGZhbHNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc01hdGNoaW5nSG9va0NyZWF0ZWRFdmVudChcbiAgZXZlbnQ6IEV2ZW50LFxuICBtYXRjaGVzOiAoZXZlbnQ6IEV2ZW50KSA9PiBib29sZWFuXG4pOiBldmVudCBpcyBFdmVudCAmIEhvb2tDcmVhdGVkRXZlbnQge1xuICByZXR1cm4gKFxuICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfY3JlYXRlZCcgJiZcbiAgICB0eXBlb2YgZXZlbnQuY29ycmVsYXRpb25JZCA9PT0gJ3N0cmluZycgJiZcbiAgICBtYXRjaGVzKGV2ZW50KVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc1Rlcm1pbmFsUnVuQ2FjaGUoXG4gIGJhc2VkaXI6IHN0cmluZyxcbiAgcnVuSWQ6IHN0cmluZyxcbiAgdGFnPzogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcnVuID0gYXdhaXQgcmVhZEpTT05XaXRoRmFsbGJhY2soXG4gICAgYmFzZWRpcixcbiAgICAncnVucycsXG4gICAgcnVuSWQsXG4gICAgV29ya2Zsb3dSdW5TY2hlbWEsXG4gICAgdGFnXG4gICk7XG4gIHJldHVybiBydW4gPyBpc1Rlcm1pbmFsV29ya2Zsb3dSdW5TdGF0dXMocnVuLnN0YXR1cykgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBsaXZlIGBob29rX2NyZWF0ZWRgIGV2ZW50IGZvciBhIHRva2VuIG9yIGhvb2tJZCB2aWEgdGhlXG4gKiBkdXJhYmxlIGhvb2sgaW5kZXhlcyAoaW5zdGVhZCBvZiBzY2FubmluZyB0aGUgd2hvbGUgZXZlbnQgbG9nKS5cbiAqXG4gKiBUaGUgbGl2ZW5lc3MgY2hlY2tzIGJlbG93IHN1YnN1bWUgdGhlIG9sZCBzY2FuJ3MgaW4tbG9nIGNsb3N1cmVcbiAqIHJlcGxheTogdGhlIGRpc3Bvc2UgbG9jayBpcyB3cml0dGVuIGJlZm9yZSBgaG9va19kaXNwb3NlZGAgaXNcbiAqIGFwcGVuZGVkLCB0aGUgcnVuIGVudGl0eSBpcyB0ZXJtaW5hbCBiZWZvcmUgYW55IHRlcm1pbmFsIHJ1biBldmVudFxuICogaXMgYXBwZW5kZWQsIGFuZCBuZWl0aGVyIGlzIGV2ZXIgZGVsZXRlZCDigJQgc28gYW55IGNsb3N1cmUgdmlzaWJsZVxuICogaW4gdGhlIGxvZyBpcyBhbHNvIHZpc2libGUgdG8gdGhlc2UgY2hlY2tzLlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kTGl2ZUhvb2tDcmVhdGVkRXZlbnQoXG4gIGJhc2VkaXI6IHN0cmluZyxcbiAgaW5kZXg6IHsga2luZDogJ3Rva2VuJzsgdG9rZW46IHN0cmluZyB9IHwgeyBraW5kOiAnaWQnOyBob29rSWQ6IHN0cmluZyB9LFxuICBtYXRjaGVzOiAoZXZlbnQ6IEV2ZW50KSA9PiBib29sZWFuLFxuICB0YWc/OiBzdHJpbmdcbik6IFByb21pc2U8KEV2ZW50ICYgSG9va0NyZWF0ZWRFdmVudCkgfCBudWxsPiB7XG4gIGNvbnN0IG5ld2VzdCA9IGF3YWl0IGZpbmROZXdlc3RJbmRleGVkSG9va0NyZWF0ZWRFdmVudChcbiAgICBiYXNlZGlyLFxuICAgIGluZGV4LFxuICAgIChldmVudCkgPT4gaXNNYXRjaGluZ0hvb2tDcmVhdGVkRXZlbnQoZXZlbnQsIG1hdGNoZXMpLFxuICAgIHRhZ1xuICApO1xuICBpZiAoIW5ld2VzdCB8fCAhaXNNYXRjaGluZ0hvb2tDcmVhdGVkRXZlbnQobmV3ZXN0LCBtYXRjaGVzKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGF3YWl0IGlzVGVybWluYWxSdW5DYWNoZShiYXNlZGlyLCBuZXdlc3QucnVuSWQsIHRhZykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEEgY29tbWl0dGVkIGRpc3Bvc2FsIChkaXNwb3NlIGxvY2sgb24gZGlzaykgY2xvc2VzIHRoZSBob29rIGV2ZW4gd2hlblxuICAvLyBpdHMgYGhvb2tfZGlzcG9zZWRgIGV2ZW50IGhhcyBub3QgbGFuZGVkIGluIHRoZSBsb2cgeWV0IOKAlCB0aGUgZGlzcG9zZXJcbiAgLy8gd3JpdGVzIHRoZSBsb2NrLCByZWxlYXNlcyB0aGUgdG9rZW4gY2xhaW0gYW5kIGhvb2sgZW50aXR5LCBhbmQgb25seVxuICAvLyB0aGVuIGFwcGVuZHMgdGhlIGV2ZW50LiBSZWJ1aWxkaW5nIHRoZSBjYWNoZXMgZnJvbSB0aGUgbG9nIGluIHRoYXRcbiAgLy8gd2luZG93IHdvdWxkIHJlc3VycmVjdCBhIGNsYWltIGZvciBhIGhvb2sgdGhhdCBpcyBiZWluZyB0b3JuIGRvd24uXG4gIGlmIChhd2FpdCBpc0hvb2tEaXNwb3NhbENvbW1pdHRlZChiYXNlZGlyLCBuZXdlc3QuY29ycmVsYXRpb25JZCwgdGFnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ld2VzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzdG9yZUhvb2tDYWNoZXNGcm9tRXZlbnQoXG4gIGJhc2VkaXI6IHN0cmluZyxcbiAgZXZlbnQ6IEV2ZW50ICYgSG9va0NyZWF0ZWRFdmVudCxcbiAgdGFnPzogc3RyaW5nXG4pOiBQcm9taXNlPEhvb2s+IHtcbiAgY29uc3QgaG9vayA9IGhvb2tGcm9tQ3JlYXRlZEV2ZW50KGV2ZW50KTtcblxuICBjb25zdCBjbGFpbVBhdGggPSBwYXRoLmpvaW4oXG4gICAgYmFzZWRpcixcbiAgICAnaG9va3MnLFxuICAgICd0b2tlbnMnLFxuICAgIGAke2hhc2hUb2tlbihob29rLnRva2VuKX0uanNvbmBcbiAgKTtcbiAgYXdhaXQgd3JpdGVFeGNsdXNpdmUoXG4gICAgY2xhaW1QYXRoLFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHRva2VuOiBob29rLnRva2VuLFxuICAgICAgaG9va0lkOiBob29rLmhvb2tJZCxcbiAgICAgIHJ1bklkOiBob29rLnJ1bklkLFxuICAgICAgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCxcbiAgICB9KVxuICApO1xuICAvLyBNYXJrZXIgYmVmb3JlIGVudGl0eSAoc2VlIGhvb2staW5kZXgudHMgY3Jhc2gtb3JkZXJpbmcgaW52YXJpYW50KS5cbiAgYXdhaXQgd3JpdGVIb29rQnlSdW5NYXJrZXIoYmFzZWRpciwgaG9vay5ydW5JZCwgaG9vay5ob29rSWQsIHRhZyk7XG4gIGF3YWl0IHdyaXRlRXhjbHVzaXZlKFxuICAgIHRhZ2dlZFBhdGgoYmFzZWRpciwgJ2hvb2tzJywgaG9vay5ob29rSWQsIHRhZyksXG4gICAgSlNPTi5zdHJpbmdpZnkoaG9vaywganNvblJlcGxhY2VyLCAyKVxuICApO1xuXG4gIHJldHVybiBob29rO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVidWlsZExpdmVIb29rQnlUb2tlbkZyb21FdmVudExvZyhcbiAgYmFzZWRpcjogc3RyaW5nLFxuICB0b2tlbjogc3RyaW5nLFxuICB0YWc/OiBzdHJpbmdcbik6IFByb21pc2U8SG9vayB8IG51bGw+IHtcbiAgY29uc3QgZXZlbnQgPSBhd2FpdCBmaW5kTGl2ZUhvb2tDcmVhdGVkRXZlbnQoXG4gICAgYmFzZWRpcixcbiAgICB7IGtpbmQ6ICd0b2tlbicsIHRva2VuIH0sXG4gICAgKGNhbmRpZGF0ZSkgPT4gZ2V0SG9va0NyZWF0ZWRUb2tlbihjYW5kaWRhdGUpID09PSB0b2tlbixcbiAgICB0YWdcbiAgKTtcbiAgcmV0dXJuIGV2ZW50ID8gcmVzdG9yZUhvb2tDYWNoZXNGcm9tRXZlbnQoYmFzZWRpciwgZXZlbnQsIHRhZykgOiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWJ1aWxkTGl2ZUhvb2tCeUlkRnJvbUV2ZW50TG9nKFxuICBiYXNlZGlyOiBzdHJpbmcsXG4gIGhvb2tJZDogc3RyaW5nLFxuICB0YWc/OiBzdHJpbmdcbik6IFByb21pc2U8SG9vayB8IG51bGw+IHtcbiAgY29uc3QgZXZlbnQgPSBhd2FpdCBmaW5kTGl2ZUhvb2tDcmVhdGVkRXZlbnQoXG4gICAgYmFzZWRpcixcbiAgICB7IGtpbmQ6ICdpZCcsIGhvb2tJZCB9LFxuICAgIChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5jb3JyZWxhdGlvbklkID09PSBob29rSWQsXG4gICAgdGFnXG4gICk7XG4gIHJldHVybiBldmVudCA/IHJlc3RvcmVIb29rQ2FjaGVzRnJvbUV2ZW50KGJhc2VkaXIsIGV2ZW50LCB0YWcpIDogbnVsbDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgaG9va3Mgc3RvcmFnZSBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgZmlsZXN5c3RlbS5cbiAqIEltcGxlbWVudHMgdGhlIFN0b3JhZ2VbJ2hvb2tzJ10gaW50ZXJmYWNlIHdpdGggaG9vayBDUlVEIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIb29rc1N0b3JhZ2UoXG4gIGJhc2VkaXI6IHN0cmluZyxcbiAgdGFnPzogc3RyaW5nXG4pOiBTdG9yYWdlWydob29rcyddIHtcbiAgY29uc3QgVG9rZW5DbGFpbVBvaW50ZXJTY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgaG9va0lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGZpbmRIb29rQnlUb2tlbih0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxIb29rIHwgbnVsbD4ge1xuICAgIC8vIEZhc3QgcGF0aDogdGhlIHRva2VuIGNsYWltIGZpbGUgcG9pbnRzIGF0IHRoZSBvd25pbmcgaG9va0lkLlxuICAgIGxldCBjbGFpbTogei5pbmZlcjx0eXBlb2YgVG9rZW5DbGFpbVBvaW50ZXJTY2hlbWE+IHwgbnVsbCA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNsYWltID0gYXdhaXQgcmVhZEpTT04oXG4gICAgICAgIGhvb2tUb2tlbkNsYWltUGF0aChiYXNlZGlyLCB0b2tlbiksXG4gICAgICAgIFRva2VuQ2xhaW1Qb2ludGVyU2NoZW1hXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yIHx8IGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjbGFpbT8uaG9va0lkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBob29rID0gYXdhaXQgcmVhZEpTT05XaXRoRmFsbGJhY2soXG4gICAgICAgICAgYmFzZWRpcixcbiAgICAgICAgICAnaG9va3MnLFxuICAgICAgICAgIGNsYWltLmhvb2tJZCxcbiAgICAgICAgICBIb29rU2NoZW1hLFxuICAgICAgICAgIHRhZ1xuICAgICAgICApO1xuICAgICAgICBpZiAoaG9vayAmJiBob29rLnRva2VuID09PSB0b2tlbikge1xuICAgICAgICAgIHJldHVybiB7IC4uLmhvb2ssIGlzV2ViaG9vazogaG9vay5pc1dlYmhvb2sgPz8gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIVVuc2FmZUVudGl0eUlkRXJyb3IuaXMoZXJyb3IpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTbG93IHBhdGggZm9yIGxlZ2FjeSBzdGF0ZXMgKGUuZy4gYSBsb3N0IGNsYWltIGZpbGUgd2hpbGUgdGhlXG4gICAgLy8gZW50aXR5IGlzIHN0aWxsIG9uIGRpc2spLlxuICAgIGNvbnN0IGhvb2tzRGlyID0gcGF0aC5qb2luKGJhc2VkaXIsICdob29rcycpO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgbGlzdEpTT05GaWxlcyhob29rc0Rpcik7XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IGhvb2tQYXRoID0gcGF0aC5qb2luKGhvb2tzRGlyLCBgJHtmaWxlfS5qc29uYCk7XG4gICAgICBjb25zdCBob29rID0gYXdhaXQgcmVhZEpTT04oaG9va1BhdGgsIEhvb2tTY2hlbWEpO1xuICAgICAgaWYgKGhvb2sgJiYgaG9vay50b2tlbiA9PT0gdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uaG9vaywgaXNXZWJob29rOiBob29rLmlzV2ViaG9vayA/PyB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXQoaG9va0lkOiBzdHJpbmcsIHBhcmFtcz86IEdldEhvb2tQYXJhbXMpOiBQcm9taXNlPEhvb2s+IHtcbiAgICBhc3NlcnRTYWZlRW50aXR5SWQoJ2hvb2tJZCcsIGhvb2tJZCk7XG4gICAgY29uc3QgaG9vayA9IGF3YWl0IHJlYWRKU09OV2l0aEZhbGxiYWNrKFxuICAgICAgYmFzZWRpcixcbiAgICAgICdob29rcycsXG4gICAgICBob29rSWQsXG4gICAgICBIb29rU2NoZW1hLFxuICAgICAgdGFnXG4gICAgKTtcbiAgICBpZiAoIWhvb2spIHtcbiAgICAgIGNvbnN0IHJlYnVpbHQgPSBhd2FpdCByZWJ1aWxkTGl2ZUhvb2tCeUlkRnJvbUV2ZW50TG9nKFxuICAgICAgICBiYXNlZGlyLFxuICAgICAgICBob29rSWQsXG4gICAgICAgIHRhZ1xuICAgICAgKTtcbiAgICAgIGlmICghcmVidWlsdCkge1xuICAgICAgICB0aHJvdyBuZXcgSG9va05vdEZvdW5kRXJyb3IoaG9va0lkKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc29sdmVEYXRhID0gcGFyYW1zPy5yZXNvbHZlRGF0YSB8fCBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT047XG4gICAgICByZXR1cm4gZmlsdGVySG9va0RhdGEoXG4gICAgICAgIHsgLi4ucmVidWlsdCwgaXNXZWJob29rOiByZWJ1aWx0LmlzV2ViaG9vayA/PyB0cnVlIH0sXG4gICAgICAgIHJlc29sdmVEYXRhXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcz8ucmVzb2x2ZURhdGEgfHwgREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OO1xuICAgIHJldHVybiBmaWx0ZXJIb29rRGF0YShcbiAgICAgIHsgLi4uaG9vaywgaXNXZWJob29rOiBob29rLmlzV2ViaG9vayA/PyB0cnVlIH0sXG4gICAgICByZXNvbHZlRGF0YVxuICAgICk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBnZXRCeVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPEhvb2s+IHtcbiAgICBjb25zdCBob29rID1cbiAgICAgIChhd2FpdCBmaW5kSG9va0J5VG9rZW4odG9rZW4pKSA/P1xuICAgICAgKGF3YWl0IHJlYnVpbGRMaXZlSG9va0J5VG9rZW5Gcm9tRXZlbnRMb2coYmFzZWRpciwgdG9rZW4sIHRhZykpO1xuICAgIGlmICghaG9vaykge1xuICAgICAgdGhyb3cgbmV3IEhvb2tOb3RGb3VuZEVycm9yKHRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIGhvb2s7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBsaXN0KFxuICAgIHBhcmFtczogTGlzdEhvb2tzUGFyYW1zXG4gICk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8SG9vaz4+IHtcbiAgICBjb25zdCBob29rc0RpciA9IHBhdGguam9pbihiYXNlZGlyLCAnaG9va3MnKTtcbiAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcy5yZXNvbHZlRGF0YSB8fCBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT047XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYWdpbmF0ZWRGaWxlU3lzdGVtUXVlcnkoe1xuICAgICAgZGlyZWN0b3J5OiBob29rc0RpcixcbiAgICAgIHNjaGVtYTogSG9va1NjaGVtYSxcbiAgICAgIHNvcnRPcmRlcjogcGFyYW1zLnBhZ2luYXRpb24/LnNvcnRPcmRlciA/PyAnYXNjJyxcbiAgICAgIGxpbWl0OiBwYXJhbXMucGFnaW5hdGlvbj8ubGltaXQsXG4gICAgICBjdXJzb3I6IHBhcmFtcy5wYWdpbmF0aW9uPy5jdXJzb3IsXG4gICAgICBmaWxlUHJlZml4OiB1bmRlZmluZWQsIC8vIEhvb2tzIGRvbid0IGhhdmUgVUxJRHMsIHNvIHdlIGNhbid0IG9wdGltaXplIGJ5IGZpbGVuYW1lXG4gICAgICBmaWx0ZXI6IChob29rKSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBieSBydW5JZCBpZiBwcm92aWRlZFxuICAgICAgICBpZiAocGFyYW1zLnJ1bklkICYmIGhvb2sucnVuSWQgIT09IHBhcmFtcy5ydW5JZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBnZXRDcmVhdGVkQXQ6ICgpID0+IHtcbiAgICAgICAgLy8gSG9vayBmaWxlcyBkb24ndCBoYXZlIFVMSUQgdGltZXN0YW1wcyBpbiBmaWxlbmFtZSwgc28gcmV0dXJuIG51bGxcbiAgICAgICAgLy8gdG8gc2tpcCB0aGUgZmlsZW5hbWUtYmFzZWQgb3B0aW1pemF0aW9uIGFuZCBkZWZlciB0byBKU09OLWJhc2VkXG4gICAgICAgIC8vIGN1cnNvciBmaWx0ZXJpbmcgd2hpY2ggdXNlcyB0aGUgYWN0dWFsIGNyZWF0ZWRBdCBmcm9tIHRoZSBmaWxlLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG4gICAgICBnZXRJZDogKGhvb2spID0+IGhvb2suaG9va0lkLFxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBkYXRhIGFmdGVyIHBhZ2luYXRpb25cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzdWx0LFxuICAgICAgZGF0YTogcmVzdWx0LmRhdGEubWFwKChob29rKSA9PiBmaWx0ZXJIb29rRGF0YShob29rLCByZXNvbHZlRGF0YSkpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4geyBnZXQsIGdldEJ5VG9rZW4sIGxpc3QgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGVsZXRlIGFsbCBob29rcyBhc3NvY2lhdGVkIHdpdGggYSB3b3JrZmxvdyBydW4uXG4gKiBDYWxsZWQgd2hlbiBhIHJ1biByZWFjaGVzIGEgdGVybWluYWwgc3RhdGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVBbGxIb29rc0ZvclJ1bihcbiAgYmFzZWRpcjogc3RyaW5nLFxuICBydW5JZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gRGlzY292ZXIgdGhpcyBydW4ncyBob29rcyB2aWEgYnktcnVuIG1hcmtlcnMgKGEgcHJlZml4IHJlYWRkaXIpXG4gIC8vIGluc3RlYWQgb2YgcmVhZGluZyBldmVyeSBsaXZlIGhvb2sgZW50aXR5IGluIHRoZSB3b3JsZC5cbiAgYXdhaXQgZW5zdXJlSG9va0luZGV4ZXMoYmFzZWRpcik7XG5cbiAgZm9yIChjb25zdCBtYXJrZXIgb2YgYXdhaXQgbGlzdEhvb2tCeVJ1bk1hcmtlcnMoYmFzZWRpciwgcnVuSWQpKSB7XG4gICAgaWYgKG1hcmtlci5ob29rSWQpIHtcbiAgICAgIGxldCBob29rOiBIb29rIHwgbnVsbCA9IG51bGw7XG4gICAgICBsZXQgaG9va1BhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaG9va1BhdGggPSB0YWdnZWRQYXRoKGJhc2VkaXIsICdob29rcycsIG1hcmtlci5ob29rSWQsIG1hcmtlci50YWcpO1xuICAgICAgICBob29rID0gYXdhaXQgcmVhZEpTT04oaG9va1BhdGgsIEhvb2tTY2hlbWEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFVbnNhZmVFbnRpdHlJZEVycm9yLmlzKGVycm9yKSAmJlxuICAgICAgICAgICEoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaG9vayAmJiBob29rUGF0aCAmJiBob29rLnJ1bklkID09PSBydW5JZCkge1xuICAgICAgICAvLyBSZWxlYXNlIHRoZSBjbGFpbSBvbmx5IGlmIGl0IHN0aWxsIHBvaW50cyBhdCB0aGlzIGhvb2sg4oCUIGFcbiAgICAgICAgLy8gY2xhaW1hbnQgbWF5IGFscmVhZHkgaG9sZCBhIGZyZXNoIGNsYWltIGZvciB0aGUgdG9rZW4gKHNlZVxuICAgICAgICAvLyBgaXNIb29rVG9rZW5DbGFpbVJlbGVhc2FibGVgKS5cbiAgICAgICAgYXdhaXQgcmVsZWFzZUhvb2tUb2tlbkNsYWltSWZPd25lZEJ5KFxuICAgICAgICAgIGJhc2VkaXIsXG4gICAgICAgICAgaG9vay50b2tlbixcbiAgICAgICAgICBob29rLnJ1bklkLFxuICAgICAgICAgIGhvb2suaG9va0lkXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IGRlbGV0ZUpTT04oXG4gICAgICAgICAgaG9va1JlY292ZXJ5TWFya2VyUGF0aChiYXNlZGlyLCBob29rLnRva2VuLCBob29rLnJ1bklkLCBob29rLmhvb2tJZClcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgZGVsZXRlSlNPTihob29rUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IGRlbGV0ZUhvb2tCeVJ1bk1hcmtlckZpbGUoYmFzZWRpciwgbWFya2VyLmZpbGVJZCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runs-storage.d.ts","sourceRoot":"","sources":["../../src/storage/runs-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,+BAA+B,EAC/B,sBAAsB,EACtB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAkBzB;;;;;GAKG;AACH,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB;IACzE,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,EAAE;QACJ,CACE,MAAM,EAAE,2BAA2B,GAAG;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,GAC5D,OAAO,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACtD,CACE,MAAM,CAAC,EAAE,2BAA2B,GAAG;YAAE,WAAW,CAAC,EAAE,KAAK,CAAA;SAAE,GAC7D,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3C,CACE,MAAM,CAAC,EAAE,2BAA2B,GACnC,OAAO,CAAC,iBAAiB,CAAC,WAAW,GAAG,sBAAsB,CAAC,CAAC,CAAC;KACrE,CAAC;IACF,yBAAyB,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE;QAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC9C,OAAO,CAAC,+BAA+B,CAAC,CAAC;CAC7C;AAiBD,wBAAgB,eAAe,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,gBAAgB,
|
|
1
|
+
{"version":3,"file":"runs-storage.d.ts","sourceRoot":"","sources":["../../src/storage/runs-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,+BAA+B,EAC/B,sBAAsB,EACtB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAkBzB;;;;;GAKG;AACH,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB;IACzE,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,EAAE;QACJ,CACE,MAAM,EAAE,2BAA2B,GAAG;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE,GAC5D,OAAO,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACtD,CACE,MAAM,CAAC,EAAE,2BAA2B,GAAG;YAAE,WAAW,CAAC,EAAE,KAAK,CAAA;SAAE,GAC7D,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3C,CACE,MAAM,CAAC,EAAE,2BAA2B,GACnC,OAAO,CAAC,iBAAiB,CAAC,WAAW,GAAG,sBAAsB,CAAC,CAAC,CAAC;KACrE,CAAC;IACF,yBAAyB,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE;QAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;KAAE,GAC9C,OAAO,CAAC,+BAA+B,CAAC,CAAC;CAC7C;AAiBD,wBAAgB,eAAe,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,gBAAgB,CA4GlB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { WorkflowRunNotFoundError } from '@workflow/errors';
|
|
3
|
-
import {
|
|
3
|
+
import { AttributeValidationError, applyAttributeChanges, validateAttributeChanges, WorkflowRunSchema, } from '@workflow/world';
|
|
4
4
|
import { DEFAULT_RESOLVE_DATA_OPTION } from '../config.js';
|
|
5
5
|
import { assertSafeEntityId, paginatedFileSystemQuery, readJSONWithFallback, taggedPath, writeJSON, } from '../fs.js';
|
|
6
6
|
import { filterRunData } from './filters.js';
|
|
@@ -71,7 +71,10 @@ export function createRunsStorage(basedir, tag) {
|
|
|
71
71
|
return true;
|
|
72
72
|
},
|
|
73
73
|
sortOrder: params?.pagination?.sortOrder ?? 'desc',
|
|
74
|
-
|
|
74
|
+
// Each page pays a full directory scan, so larger default pages
|
|
75
|
+
// keep unpaginated consumers (e.g. startup recovery) cheap over
|
|
76
|
+
// large run histories.
|
|
77
|
+
limit: params?.pagination?.limit ?? 200,
|
|
75
78
|
cursor: params?.pagination?.cursor,
|
|
76
79
|
getCreatedAt: getObjectCreatedAt('wrun'),
|
|
77
80
|
getId: (run) => run.runId,
|
|
@@ -127,4 +130,4 @@ export function createRunsStorage(basedir, tag) {
|
|
|
127
130
|
},
|
|
128
131
|
};
|
|
129
132
|
}
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVucy1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JhZ2UvcnVucy1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVU1RCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsU0FBUyxHQUNWLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBZ0NsRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztBQUV6RCxNQUFNLFVBQVUsZUFBZSxDQUM3QixHQUFXLEVBQ1gsRUFBb0I7SUFFcEIsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBMEIsRUFBRSxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDdkIsSUFBSSxJQUFJO1lBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNwQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLFlBQVksQ0FB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LENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFO29CQUNuRSxTQUFTLEVBQUUsSUFBSTtpQkFDaEIsQ0FBQyxDQUFDO2dCQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7XG4gIEF0dHJpYnV0ZUNoYW5nZSxcbiAgRXhwZXJpbWVudGFsU2V0QXR0cmlidXRlc1Jlc3VsdCxcbiAgTGlzdFdvcmtmbG93UnVuc1BhcmFtcyxcbiAgUGFnaW5hdGVkUmVzcG9uc2UsXG4gIFN0b3JhZ2UsXG4gIFdvcmtmbG93UnVuLFxuICBXb3JrZmxvd1J1bldpdGhvdXREYXRhLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHtcbiAgYXBwbHlBdHRyaWJ1dGVDaGFuZ2VzLFxuICBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IsXG4gIHZhbGlkYXRlQXR0cmlidXRlQ2hhbmdlcyxcbiAgV29ya2Zsb3dSdW5TY2hlbWEsXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBERUZBVUxUX1JFU09MVkVfREFUQV9PUFRJT04gfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtcbiAgYXNzZXJ0U2FmZUVudGl0eUlkLFxuICBwYWdpbmF0ZWRGaWxlU3lzdGVtUXVlcnksXG4gIHJlYWRKU09OV2l0aEZhbGxiYWNrLFxuICB0YWdnZWRQYXRoLFxuICB3cml0ZUpTT04sXG59IGZyb20gJy4uL2ZzLmpzJztcbmltcG9ydCB7IGZpbHRlclJ1bkRhdGEgfSBmcm9tICcuL2ZpbHRlcnMuanMnO1xuaW1wb3J0IHsgZ2V0T2JqZWN0Q3JlYXRlZEF0IH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBleHRlbnNpb24gb2YgYExpc3RXb3JrZmxvd1J1bnNQYXJhbXNgIHRoYXQgYWRkcyBhIGBmaWxlSWRGaWx0ZXJgXG4gKiBmb3Igc2NvcGluZyBxdWVyaWVzIGJ5IHJhdyBmaWxlbmFtZSAoZS5nLiwgYnkgdGFnIHN1ZmZpeCkuIEtlcHQgb3V0IG9mIHRoZVxuICogcHVibGljIGBTdG9yYWdlWydydW5zJ11bJ2xpc3QnXWAgc3VyZmFjZSDigJQgY29uc3VtZXJzIG9mIGBAd29ya2Zsb3cvd29ybGRgXG4gKiBtdXN0IG5vdCBzZWUgdGhpcyBvcHRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxMaXN0V29ya2Zsb3dSdW5zUGFyYW1zIGV4dGVuZHMgTGlzdFdvcmtmbG93UnVuc1BhcmFtcyB7XG4gIGZpbGVJZEZpbHRlcj86IChmaWxlSWQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFJ1bnNTdG9yYWdlIHtcbiAgZ2V0OiBTdG9yYWdlWydydW5zJ11bJ2dldCddO1xuICBsaXN0OiB7XG4gICAgKFxuICAgICAgcGFyYW1zOiBMb2NhbExpc3RXb3JrZmxvd1J1bnNQYXJhbXMgJiB7IHJlc29sdmVEYXRhOiAnbm9uZScgfVxuICAgICk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8V29ya2Zsb3dSdW5XaXRob3V0RGF0YT4+O1xuICAgIChcbiAgICAgIHBhcmFtcz86IExvY2FsTGlzdFdvcmtmbG93UnVuc1BhcmFtcyAmIHsgcmVzb2x2ZURhdGE/OiAnYWxsJyB9XG4gICAgKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXNwb25zZTxXb3JrZmxvd1J1bj4+O1xuICAgIChcbiAgICAgIHBhcmFtcz86IExvY2FsTGlzdFdvcmtmbG93UnVuc1BhcmFtc1xuICAgICk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8V29ya2Zsb3dSdW4gfCBXb3JrZmxvd1J1bldpdGhvdXREYXRhPj47XG4gIH07XG4gIGV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXMoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjaGFuZ2VzOiBBdHRyaWJ1dGVDaGFuZ2VbXSxcbiAgICBvcHRpb25zPzogeyBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcz86IGJvb2xlYW4gfVxuICApOiBQcm9taXNlPEV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNSZXN1bHQ+O1xufVxuXG4vKipcbiAqIFBlci1ydW4gaW4tcHJvY2VzcyBhc3luYyBtdXRleC4gU2VyaWFsaXplcyBjb25jdXJyZW50IHdyaXRlcyB0aGF0XG4gKiB0b3VjaCB0aGUgc2FtZSBydW4gSlNPTiBmaWxlIOKAlCBib3RoIGF0dHJpYnV0ZSB3cml0ZXMgdmlhXG4gKiBgZXhwZXJpbWVudGFsU2V0QXR0cmlidXRlc2AgYW5kIHJ1bi1saWZlY3ljbGUgd3JpdGVzIChydW5fc3RhcnRlZCxcbiAqIHJ1bl9jb21wbGV0ZWQsIHJ1bl9mYWlsZWQsIHJ1bl9jYW5jZWxsZWQpIGFjcXVpcmUgaXQuIFdpdGhvdXQgdGhlXG4gKiBzaGFyZWQgbG9jaywgYW4gYXR0cmlidXRlIHdyaXRlIHRoYXQgbGFuZHMgYmV0d2VlbiBhIGxpZmVjeWNsZVxuICogaGFuZGxlcidzIHJlYWQgYW5kIHdyaXRlIHdvdWxkIGJlIHNpbGVudGx5IG92ZXJ3cml0dGVuIGJ5IHRoZVxuICogbGlmZWN5Y2xlIHdyaXRlJ3Mgc3RhbGUgYXR0cmlidXRlIHNuYXBzaG90LlxuICpcbiAqIExpZmVjeWNsZSB3cml0ZXJzIGFjcXVpcmUgdGhlIGxvY2sgYW5kIHJlLXJlYWQgdGhlIHJ1biBmaWxlIGluc2lkZVxuICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gdG8gcGljayB1cCBhbnkgYXR0cmlidXRlcyB0aGF0IGxhbmRlZCBzaW5jZVxuICogdGhlaXIgcHJlLXZhbGlkYXRpb24gcmVhZC5cbiAqL1xuY29uc3QgcnVuRmlsZUxvY2tzID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUnVuRmlsZUxvY2s8VD4oXG4gIGtleTogc3RyaW5nLFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHByZXYgPSBydW5GaWxlTG9ja3MuZ2V0KGtleSk7XG4gIGNvbnN0IHRhc2tCb3g6IHsgdGFzaz86IFByb21pc2U8VD4gfSA9IHt9O1xuICBjb25zdCB0YXNrID0gKGFzeW5jICgpID0+IHtcbiAgICBpZiAocHJldikgYXdhaXQgcHJldi5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHJ1bkZpbGVMb2Nrcy5nZXQoa2V5KSA9PT0gdGFza0JveC50YXNrKSB7XG4gICAgICAgIHJ1bkZpbGVMb2Nrcy5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pKCk7XG4gIHRhc2tCb3gudGFzayA9IHRhc2s7XG4gIHJ1bkZpbGVMb2Nrcy5zZXQoa2V5LCB0YXNrKTtcbiAgcmV0dXJuIHRhc2s7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgcnVucyBzdG9yYWdlIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBmaWxlc3lzdGVtLlxuICogSW1wbGVtZW50cyB0aGUgU3RvcmFnZVsncnVucyddIGludGVyZmFjZSB3aXRoIGdldCBhbmQgbGlzdCBvcGVyYXRpb25zLFxuICogcGx1cyBhbiBpbnRlcm5hbCBgZmlsZUlkRmlsdGVyYCBvbiBgbGlzdGAgZm9yIHRhZy1zY29wZWQgcmVjb3ZlcnkgcXVlcmllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJ1bnNTdG9yYWdlKFxuICBiYXNlZGlyOiBzdHJpbmcsXG4gIHRhZz86IHN0cmluZ1xuKTogTG9jYWxSdW5zU3RvcmFnZSB7XG4gIHJldHVybiB7XG4gICAgZ2V0OiAoYXN5bmMgKGlkOiBzdHJpbmcsIHBhcmFtcz86IGFueSkgPT4ge1xuICAgICAgYXNzZXJ0U2FmZUVudGl0eUlkKCdydW5JZCcsIGlkKTtcbiAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHJlYWRKU09OV2l0aEZhbGxiYWNrKFxuICAgICAgICBiYXNlZGlyLFxuICAgICAgICAncnVucycsXG4gICAgICAgIGlkLFxuICAgICAgICBXb3JrZmxvd1J1blNjaGVtYSxcbiAgICAgICAgdGFnXG4gICAgICApO1xuICAgICAgaWYgKCFydW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuTm90Rm91bmRFcnJvcihpZCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcz8ucmVzb2x2ZURhdGEgPz8gREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OO1xuICAgICAgcmV0dXJuIGZpbHRlclJ1bkRhdGEocnVuLCByZXNvbHZlRGF0YSk7XG4gICAgfSkgYXMgU3RvcmFnZVsncnVucyddWydnZXQnXSxcblxuICAgIGxpc3Q6IChhc3luYyAocGFyYW1zPzogTG9jYWxMaXN0V29ya2Zsb3dSdW5zUGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCByZXNvbHZlRGF0YSA9IHBhcmFtcz8ucmVzb2x2ZURhdGEgPz8gREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFnaW5hdGVkRmlsZVN5c3RlbVF1ZXJ5KHtcbiAgICAgICAgZGlyZWN0b3J5OiBwYXRoLmpvaW4oYmFzZWRpciwgJ3J1bnMnKSxcbiAgICAgICAgc2NoZW1hOiBXb3JrZmxvd1J1blNjaGVtYSxcbiAgICAgICAgZmlsZUlkRmlsdGVyOiBwYXJhbXM/LmZpbGVJZEZpbHRlcixcbiAgICAgICAgZmlsdGVyOiAocnVuKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyYW1zPy53b3JrZmxvd05hbWUgJiZcbiAgICAgICAgICAgIHJ1bi53b3JrZmxvd05hbWUgIT09IHBhcmFtcy53b3JrZmxvd05hbWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmFtcz8uc3RhdHVzICYmIHJ1bi5zdGF0dXMgIT09IHBhcmFtcy5zdGF0dXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNvcnRPcmRlcjogcGFyYW1zPy5wYWdpbmF0aW9uPy5zb3J0T3JkZXIgPz8gJ2Rlc2MnLFxuICAgICAgICBsaW1pdDogcGFyYW1zPy5wYWdpbmF0aW9uPy5saW1pdCxcbiAgICAgICAgY3Vyc29yOiBwYXJhbXM/LnBhZ2luYXRpb24/LmN1cnNvcixcbiAgICAgICAgZ2V0Q3JlYXRlZEF0OiBnZXRPYmplY3RDcmVhdGVkQXQoJ3dydW4nKSxcbiAgICAgICAgZ2V0SWQ6IChydW4pID0+IHJ1bi5ydW5JZCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiByZXNvbHZlRGF0YSBpcyBcIm5vbmVcIiwgcmVwbGFjZSBpbnB1dC9vdXRwdXQgd2l0aCB1bmRlZmluZWRcbiAgICAgIGlmIChyZXNvbHZlRGF0YSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLm1hcCgocnVuKSA9PiAoe1xuICAgICAgICAgICAgLi4ucnVuLFxuICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG91dHB1dDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0pKSBhcyBXb3JrZmxvd1J1bldpdGhvdXREYXRhW10sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkgYXMgTG9jYWxSdW5zU3RvcmFnZVsnbGlzdCddLFxuXG4gICAgZXhwZXJpbWVudGFsU2V0QXR0cmlidXRlczogYXN5bmMgKHJ1bklkLCBjaGFuZ2VzLCBvcHRpb25zKSA9PiB7XG4gICAgICBhc3NlcnRTYWZlRW50aXR5SWQoJ3J1bklkJywgcnVuSWQpO1xuXG4gICAgICByZXR1cm4gd2l0aFJ1bkZpbGVMb2NrKHJ1bklkLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHJlYWRKU09OV2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGJhc2VkaXIsXG4gICAgICAgICAgJ3J1bnMnLFxuICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgIFdvcmtmbG93UnVuU2NoZW1hLFxuICAgICAgICAgIHRhZ1xuICAgICAgICApO1xuICAgICAgICBpZiAoIXJ1bikge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IocnVuSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VydmVyLXNpZGUgdmFsaWRhdGlvbi4gVGhlIFNESyB2YWxpZGF0ZXMgYmVmb3JlIHNlbmRpbmcsIGJ1dFxuICAgICAgICAvLyB0aGUgd29ybGQgaXMgdGhlIGZpbmFsIGF1dGhvcml0eSDigJQgcmUtY2hlY2sgc28gZGlyZWN0IGNhbGxlcnNcbiAgICAgICAgLy8gKHRlc3RzLCBvdGhlciBjb25zdW1lcnMpIGNhbm5vdCBieXBhc3MgdGhlIGxpbWl0cy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWxpZGF0ZUF0dHJpYnV0ZUNoYW5nZXMoY2hhbmdlcywge1xuICAgICAgICAgICAgZXhpc3RpbmdLZXlzOiBPYmplY3Qua2V5cyhydW4uYXR0cmlidXRlcyA/PyB7fSksXG4gICAgICAgICAgICBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogb3B0aW9ucz8uYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIFJlLXRocm93IGFzIGEgcGxhaW4gZXJyb3I7IGNhbGxlcnMgKHRoZSBTREspIHdyYXAgYXNcbiAgICAgICAgICAgIC8vIEZhdGFsRXJyb3Igb24gdGhlaXIgc2lkZS5cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV4dEF0dHJpYnV0ZXMgPSBhcHBseUF0dHJpYnV0ZUNoYW5nZXMocnVuLmF0dHJpYnV0ZXMsIGNoYW5nZXMpO1xuICAgICAgICBjb25zdCB1cGRhdGVkUnVuID0ge1xuICAgICAgICAgIC4uLnJ1bixcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBuZXh0QXR0cmlidXRlcyxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgd3JpdGVKU09OKHRhZ2dlZFBhdGgoYmFzZWRpciwgJ3J1bnMnLCBydW5JZCwgdGFnKSwgdXBkYXRlZFJ1biwge1xuICAgICAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgYXR0cmlidXRlczogbmV4dEF0dHJpYnV0ZXMgfTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVucy1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3JhZ2UvcnVucy1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVU1RCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixVQUFVLEVBQ1YsU0FBUyxHQUNWLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBZ0NsRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztBQUV6RCxNQUFNLFVBQVUsZUFBZSxDQUM3QixHQUFXLEVBQ1gsRUFBb0I7SUFFcEIsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBMEIsRUFBRSxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDdkIsSUFBSSxJQUFJO1lBQUUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNwQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLFlBQVksQ0FB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SUFBSSxJQUFJLEVBQUU7aUJBQ3RCLENBQUM7Z0JBRUYsTUFBTSxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRTtvQkFDbkUsU0FBUyxFQUFFLElBQUk7aUJBQ2hCLENBQUMsQ0FBQztnQkFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IFdvcmtmbG93UnVuTm90Rm91bmRFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHR5cGUge1xuICBBdHRyaWJ1dGVDaGFuZ2UsXG4gIEV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNSZXN1bHQsXG4gIExpc3RXb3JrZmxvd1J1bnNQYXJhbXMsXG4gIFBhZ2luYXRlZFJlc3BvbnNlLFxuICBTdG9yYWdlLFxuICBXb3JrZmxvd1J1bixcbiAgV29ya2Zsb3dSdW5XaXRob3V0RGF0YSxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZVZhbGlkYXRpb25FcnJvcixcbiAgYXBwbHlBdHRyaWJ1dGVDaGFuZ2VzLFxuICB2YWxpZGF0ZUF0dHJpYnV0ZUNoYW5nZXMsXG4gIFdvcmtmbG93UnVuU2NoZW1hLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgREVGQVVMVF9SRVNPTFZFX0RBVEFfT1BUSU9OIH0gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7XG4gIGFzc2VydFNhZmVFbnRpdHlJZCxcbiAgcGFnaW5hdGVkRmlsZVN5c3RlbVF1ZXJ5LFxuICByZWFkSlNPTldpdGhGYWxsYmFjayxcbiAgdGFnZ2VkUGF0aCxcbiAgd3JpdGVKU09OLFxufSBmcm9tICcuLi9mcy5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJSdW5EYXRhIH0gZnJvbSAnLi9maWx0ZXJzLmpzJztcbmltcG9ydCB7IGdldE9iamVjdENyZWF0ZWRBdCB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5cbi8qKlxuICogSW50ZXJuYWwgZXh0ZW5zaW9uIG9mIGBMaXN0V29ya2Zsb3dSdW5zUGFyYW1zYCB0aGF0IGFkZHMgYSBgZmlsZUlkRmlsdGVyYFxuICogZm9yIHNjb3BpbmcgcXVlcmllcyBieSByYXcgZmlsZW5hbWUgKGUuZy4sIGJ5IHRhZyBzdWZmaXgpLiBLZXB0IG91dCBvZiB0aGVcbiAqIHB1YmxpYyBgU3RvcmFnZVsncnVucyddWydsaXN0J11gIHN1cmZhY2Ug4oCUIGNvbnN1bWVycyBvZiBgQHdvcmtmbG93L3dvcmxkYFxuICogbXVzdCBub3Qgc2VlIHRoaXMgb3B0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsTGlzdFdvcmtmbG93UnVuc1BhcmFtcyBleHRlbmRzIExpc3RXb3JrZmxvd1J1bnNQYXJhbXMge1xuICBmaWxlSWRGaWx0ZXI/OiAoZmlsZUlkOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxSdW5zU3RvcmFnZSB7XG4gIGdldDogU3RvcmFnZVsncnVucyddWydnZXQnXTtcbiAgbGlzdDoge1xuICAgIChcbiAgICAgIHBhcmFtczogTG9jYWxMaXN0V29ya2Zsb3dSdW5zUGFyYW1zICYgeyByZXNvbHZlRGF0YTogJ25vbmUnIH1cbiAgICApOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPFdvcmtmbG93UnVuV2l0aG91dERhdGE+PjtcbiAgICAoXG4gICAgICBwYXJhbXM/OiBMb2NhbExpc3RXb3JrZmxvd1J1bnNQYXJhbXMgJiB7IHJlc29sdmVEYXRhPzogJ2FsbCcgfVxuICAgICk6IFByb21pc2U8UGFnaW5hdGVkUmVzcG9uc2U8V29ya2Zsb3dSdW4+PjtcbiAgICAoXG4gICAgICBwYXJhbXM/OiBMb2NhbExpc3RXb3JrZmxvd1J1bnNQYXJhbXNcbiAgICApOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPFdvcmtmbG93UnVuIHwgV29ya2Zsb3dSdW5XaXRob3V0RGF0YT4+O1xuICB9O1xuICBleHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzKFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgY2hhbmdlczogQXR0cmlidXRlQ2hhbmdlW10sXG4gICAgb3B0aW9ucz86IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM/OiBib29sZWFuIH1cbiAgKTogUHJvbWlzZTxFeHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzUmVzdWx0Pjtcbn1cblxuLyoqXG4gKiBQZXItcnVuIGluLXByb2Nlc3MgYXN5bmMgbXV0ZXguIFNlcmlhbGl6ZXMgY29uY3VycmVudCB3cml0ZXMgdGhhdFxuICogdG91Y2ggdGhlIHNhbWUgcnVuIEpTT04gZmlsZSDigJQgYm90aCBhdHRyaWJ1dGUgd3JpdGVzIHZpYVxuICogYGV4cGVyaW1lbnRhbFNldEF0dHJpYnV0ZXNgIGFuZCBydW4tbGlmZWN5Y2xlIHdyaXRlcyAocnVuX3N0YXJ0ZWQsXG4gKiBydW5fY29tcGxldGVkLCBydW5fZmFpbGVkLCBydW5fY2FuY2VsbGVkKSBhY3F1aXJlIGl0LiBXaXRob3V0IHRoZVxuICogc2hhcmVkIGxvY2ssIGFuIGF0dHJpYnV0ZSB3cml0ZSB0aGF0IGxhbmRzIGJldHdlZW4gYSBsaWZlY3ljbGVcbiAqIGhhbmRsZXIncyByZWFkIGFuZCB3cml0ZSB3b3VsZCBiZSBzaWxlbnRseSBvdmVyd3JpdHRlbiBieSB0aGVcbiAqIGxpZmVjeWNsZSB3cml0ZSdzIHN0YWxlIGF0dHJpYnV0ZSBzbmFwc2hvdC5cbiAqXG4gKiBMaWZlY3ljbGUgd3JpdGVycyBhY3F1aXJlIHRoZSBsb2NrIGFuZCByZS1yZWFkIHRoZSBydW4gZmlsZSBpbnNpZGVcbiAqIHRoZSBjcml0aWNhbCBzZWN0aW9uIHRvIHBpY2sgdXAgYW55IGF0dHJpYnV0ZXMgdGhhdCBsYW5kZWQgc2luY2VcbiAqIHRoZWlyIHByZS12YWxpZGF0aW9uIHJlYWQuXG4gKi9cbmNvbnN0IHJ1bkZpbGVMb2NrcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJ1bkZpbGVMb2NrPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgZm46ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBwcmV2ID0gcnVuRmlsZUxvY2tzLmdldChrZXkpO1xuICBjb25zdCB0YXNrQm94OiB7IHRhc2s/OiBQcm9taXNlPFQ+IH0gPSB7fTtcbiAgY29uc3QgdGFzayA9IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKHByZXYpIGF3YWl0IHByZXYuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChydW5GaWxlTG9ja3MuZ2V0KGtleSkgPT09IHRhc2tCb3gudGFzaykge1xuICAgICAgICBydW5GaWxlTG9ja3MuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9KSgpO1xuICB0YXNrQm94LnRhc2sgPSB0YXNrO1xuICBydW5GaWxlTG9ja3Muc2V0KGtleSwgdGFzayk7XG4gIHJldHVybiB0YXNrO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHJ1bnMgc3RvcmFnZSBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgZmlsZXN5c3RlbS5cbiAqIEltcGxlbWVudHMgdGhlIFN0b3JhZ2VbJ3J1bnMnXSBpbnRlcmZhY2Ugd2l0aCBnZXQgYW5kIGxpc3Qgb3BlcmF0aW9ucyxcbiAqIHBsdXMgYW4gaW50ZXJuYWwgYGZpbGVJZEZpbHRlcmAgb24gYGxpc3RgIGZvciB0YWctc2NvcGVkIHJlY292ZXJ5IHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdW5zU3RvcmFnZShcbiAgYmFzZWRpcjogc3RyaW5nLFxuICB0YWc/OiBzdHJpbmdcbik6IExvY2FsUnVuc1N0b3JhZ2Uge1xuICByZXR1cm4ge1xuICAgIGdldDogKGFzeW5jIChpZDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpID0+IHtcbiAgICAgIGFzc2VydFNhZmVFbnRpdHlJZCgncnVuSWQnLCBpZCk7XG4gICAgICBjb25zdCBydW4gPSBhd2FpdCByZWFkSlNPTldpdGhGYWxsYmFjayhcbiAgICAgICAgYmFzZWRpcixcbiAgICAgICAgJ3J1bnMnLFxuICAgICAgICBpZCxcbiAgICAgICAgV29ya2Zsb3dSdW5TY2hlbWEsXG4gICAgICAgIHRhZ1xuICAgICAgKTtcbiAgICAgIGlmICghcnVuKSB7XG4gICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IoaWQpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzb2x2ZURhdGEgPSBwYXJhbXM/LnJlc29sdmVEYXRhID8/IERFRkFVTFRfUkVTT0xWRV9EQVRBX09QVElPTjtcbiAgICAgIHJldHVybiBmaWx0ZXJSdW5EYXRhKHJ1biwgcmVzb2x2ZURhdGEpO1xuICAgIH0pIGFzIFN0b3JhZ2VbJ3J1bnMnXVsnZ2V0J10sXG5cbiAgICBsaXN0OiAoYXN5bmMgKHBhcmFtcz86IExvY2FsTGlzdFdvcmtmbG93UnVuc1BhcmFtcykgPT4ge1xuICAgICAgY29uc3QgcmVzb2x2ZURhdGEgPSBwYXJhbXM/LnJlc29sdmVEYXRhID8/IERFRkFVTFRfUkVTT0xWRV9EQVRBX09QVElPTjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBhZ2luYXRlZEZpbGVTeXN0ZW1RdWVyeSh7XG4gICAgICAgIGRpcmVjdG9yeTogcGF0aC5qb2luKGJhc2VkaXIsICdydW5zJyksXG4gICAgICAgIHNjaGVtYTogV29ya2Zsb3dSdW5TY2hlbWEsXG4gICAgICAgIGZpbGVJZEZpbHRlcjogcGFyYW1zPy5maWxlSWRGaWx0ZXIsXG4gICAgICAgIGZpbHRlcjogKHJ1bikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmFtcz8ud29ya2Zsb3dOYW1lICYmXG4gICAgICAgICAgICBydW4ud29ya2Zsb3dOYW1lICE9PSBwYXJhbXMud29ya2Zsb3dOYW1lXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXJhbXM/LnN0YXR1cyAmJiBydW4uc3RhdHVzICE9PSBwYXJhbXMuc3RhdHVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBzb3J0T3JkZXI6IHBhcmFtcz8ucGFnaW5hdGlvbj8uc29ydE9yZGVyID8/ICdkZXNjJyxcbiAgICAgICAgLy8gRWFjaCBwYWdlIHBheXMgYSBmdWxsIGRpcmVjdG9yeSBzY2FuLCBzbyBsYXJnZXIgZGVmYXVsdCBwYWdlc1xuICAgICAgICAvLyBrZWVwIHVucGFnaW5hdGVkIGNvbnN1bWVycyAoZS5nLiBzdGFydHVwIHJlY292ZXJ5KSBjaGVhcCBvdmVyXG4gICAgICAgIC8vIGxhcmdlIHJ1biBoaXN0b3JpZXMuXG4gICAgICAgIGxpbWl0OiBwYXJhbXM/LnBhZ2luYXRpb24/LmxpbWl0ID8/IDIwMCxcbiAgICAgICAgY3Vyc29yOiBwYXJhbXM/LnBhZ2luYXRpb24/LmN1cnNvcixcbiAgICAgICAgZ2V0Q3JlYXRlZEF0OiBnZXRPYmplY3RDcmVhdGVkQXQoJ3dydW4nKSxcbiAgICAgICAgZ2V0SWQ6IChydW4pID0+IHJ1bi5ydW5JZCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiByZXNvbHZlRGF0YSBpcyBcIm5vbmVcIiwgcmVwbGFjZSBpbnB1dC9vdXRwdXQgd2l0aCB1bmRlZmluZWRcbiAgICAgIGlmIChyZXNvbHZlRGF0YSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhLm1hcCgocnVuKSA9PiAoe1xuICAgICAgICAgICAgLi4ucnVuLFxuICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG91dHB1dDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0pKSBhcyBXb3JrZmxvd1J1bldpdGhvdXREYXRhW10sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkgYXMgTG9jYWxSdW5zU3RvcmFnZVsnbGlzdCddLFxuXG4gICAgZXhwZXJpbWVudGFsU2V0QXR0cmlidXRlczogYXN5bmMgKHJ1bklkLCBjaGFuZ2VzLCBvcHRpb25zKSA9PiB7XG4gICAgICBhc3NlcnRTYWZlRW50aXR5SWQoJ3J1bklkJywgcnVuSWQpO1xuXG4gICAgICByZXR1cm4gd2l0aFJ1bkZpbGVMb2NrKHJ1bklkLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHJlYWRKU09OV2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGJhc2VkaXIsXG4gICAgICAgICAgJ3J1bnMnLFxuICAgICAgICAgIHJ1bklkLFxuICAgICAgICAgIFdvcmtmbG93UnVuU2NoZW1hLFxuICAgICAgICAgIHRhZ1xuICAgICAgICApO1xuICAgICAgICBpZiAoIXJ1bikge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IocnVuSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VydmVyLXNpZGUgdmFsaWRhdGlvbi4gVGhlIFNESyB2YWxpZGF0ZXMgYmVmb3JlIHNlbmRpbmcsIGJ1dFxuICAgICAgICAvLyB0aGUgd29ybGQgaXMgdGhlIGZpbmFsIGF1dGhvcml0eSDigJQgcmUtY2hlY2sgc28gZGlyZWN0IGNhbGxlcnNcbiAgICAgICAgLy8gKHRlc3RzLCBvdGhlciBjb25zdW1lcnMpIGNhbm5vdCBieXBhc3MgdGhlIGxpbWl0cy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWxpZGF0ZUF0dHJpYnV0ZUNoYW5nZXMoY2hhbmdlcywge1xuICAgICAgICAgICAgZXhpc3RpbmdLZXlzOiBPYmplY3Qua2V5cyhydW4uYXR0cmlidXRlcyA/PyB7fSksXG4gICAgICAgICAgICBhbGxvd1Jlc2VydmVkQXR0cmlidXRlczogb3B0aW9ucz8uYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIFJlLXRocm93IGFzIGEgcGxhaW4gZXJyb3I7IGNhbGxlcnMgKHRoZSBTREspIHdyYXAgYXNcbiAgICAgICAgICAgIC8vIEZhdGFsRXJyb3Igb24gdGhlaXIgc2lkZS5cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV4dEF0dHJpYnV0ZXMgPSBhcHBseUF0dHJpYnV0ZUNoYW5nZXMocnVuLmF0dHJpYnV0ZXMsIGNoYW5nZXMpO1xuICAgICAgICBjb25zdCB1cGRhdGVkUnVuID0ge1xuICAgICAgICAgIC4uLnJ1bixcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBuZXh0QXR0cmlidXRlcyxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgd3JpdGVKU09OKHRhZ2dlZFBhdGgoYmFzZWRpciwgJ3J1bnMnLCBydW5JZCwgdGFnKSwgdXBkYXRlZFJ1biwge1xuICAgICAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgYXR0cmlidXRlczogbmV4dEF0dHJpYnV0ZXMgfTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/world-local",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.25",
|
|
4
4
|
"description": "Local development World implementation for Workflow SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"zod": "~4.3.6",
|
|
31
31
|
"@workflow/errors": "5.0.0-beta.10",
|
|
32
32
|
"@workflow/utils": "5.0.0-beta.6",
|
|
33
|
-
"@workflow/world": "5.0.0-beta.
|
|
33
|
+
"@workflow/world": "5.0.0-beta.17"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@opentelemetry/api": "1.9.0",
|