@workflow/builders 5.0.0-beta.13 → 5.0.0-beta.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +70 -10
- package/dist/constants.d.ts +34 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +56 -10
- package/dist/constants.test.d.ts +2 -0
- package/dist/constants.test.d.ts.map +1 -0
- package/dist/constants.test.js +33 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/module-specifier.d.ts +20 -2
- package/dist/module-specifier.d.ts.map +1 -1
- package/dist/module-specifier.js +45 -8
- package/dist/module-specifier.test.js +25 -3
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +44 -4
- package/dist/swc-esbuild-plugin.test.js +67 -1
- package/package.json +2 -2
package/dist/constants.d.ts
CHANGED
|
@@ -1,7 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Creates a queue trigger configuration for the workflow handler.
|
|
3
3
|
* Handles both workflow orchestration and step execution on the same route.
|
|
4
|
-
* Background steps are queued back to
|
|
4
|
+
* Background steps are queued back to the workflow topic with a stepId.
|
|
5
|
+
*
|
|
6
|
+
* When `namespace` is provided, the trigger topic is scoped to avoid
|
|
7
|
+
* collisions with other frameworks or direct Workflow SDK usage in the
|
|
8
|
+
* same deployment.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // default: topic = '__wkf_workflow_*'
|
|
12
|
+
* createWorkflowQueueTrigger()
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* // namespaced: topic = '__custom_wkf_workflow_*'
|
|
16
|
+
* createWorkflowQueueTrigger({ namespace: 'custom' })
|
|
17
|
+
*/
|
|
18
|
+
export declare function createWorkflowQueueTrigger(options?: {
|
|
19
|
+
namespace?: string;
|
|
20
|
+
}): {
|
|
21
|
+
type: "queue/v2beta";
|
|
22
|
+
topic: string;
|
|
23
|
+
consumer: string;
|
|
24
|
+
retryAfterSeconds: number;
|
|
25
|
+
initialDelaySeconds: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Creates the optional second argument for generated `workflowEntrypoint()`
|
|
29
|
+
* calls. The namespace is resolved while building so generated route files do
|
|
30
|
+
* not need `WORKFLOW_QUEUE_NAMESPACE` at runtime.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createWorkflowEntrypointOptionsCode(options?: {
|
|
33
|
+
namespace?: string;
|
|
34
|
+
}): string;
|
|
35
|
+
/**
|
|
36
|
+
* Default queue trigger (no namespace). Backward compatible.
|
|
5
37
|
*/
|
|
6
38
|
export declare const WORKFLOW_QUEUE_TRIGGER: {
|
|
7
39
|
type: "queue/v2beta";
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;EAU1E;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CAAC,OAAO,CAAC,EAAE;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,UAWA;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;CAA+B,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -1,13 +1,59 @@
|
|
|
1
|
+
const QUEUE_NAMESPACE_PATTERN = /^[a-z][a-z0-9]*$/;
|
|
2
|
+
function resolveQueueNamespace(namespace) {
|
|
3
|
+
return namespace ?? process.env.WORKFLOW_QUEUE_NAMESPACE ?? undefined;
|
|
4
|
+
}
|
|
5
|
+
function getQueueTopicPrefix(kind, namespace) {
|
|
6
|
+
if (namespace !== undefined) {
|
|
7
|
+
if (!QUEUE_NAMESPACE_PATTERN.test(namespace)) {
|
|
8
|
+
throw new Error(`Invalid queue namespace "${namespace}": must be lowercase alphanumeric, starting with a letter`);
|
|
9
|
+
}
|
|
10
|
+
return `__${namespace}_wkf_${kind}_`;
|
|
11
|
+
}
|
|
12
|
+
return `__wkf_${kind}_`;
|
|
13
|
+
}
|
|
1
14
|
/**
|
|
2
|
-
*
|
|
15
|
+
* Creates a queue trigger configuration for the workflow handler.
|
|
3
16
|
* Handles both workflow orchestration and step execution on the same route.
|
|
4
|
-
* Background steps are queued back to
|
|
17
|
+
* Background steps are queued back to the workflow topic with a stepId.
|
|
18
|
+
*
|
|
19
|
+
* When `namespace` is provided, the trigger topic is scoped to avoid
|
|
20
|
+
* collisions with other frameworks or direct Workflow SDK usage in the
|
|
21
|
+
* same deployment.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* // default: topic = '__wkf_workflow_*'
|
|
25
|
+
* createWorkflowQueueTrigger()
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* // namespaced: topic = '__custom_wkf_workflow_*'
|
|
29
|
+
* createWorkflowQueueTrigger({ namespace: 'custom' })
|
|
5
30
|
*/
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
31
|
+
export function createWorkflowQueueTrigger(options) {
|
|
32
|
+
const namespace = resolveQueueNamespace(options?.namespace);
|
|
33
|
+
return {
|
|
34
|
+
type: 'queue/v2beta',
|
|
35
|
+
topic: `${getQueueTopicPrefix('workflow', namespace)}*`,
|
|
36
|
+
consumer: 'default',
|
|
37
|
+
retryAfterSeconds: 5, // Delay between retries (default: 60)
|
|
38
|
+
initialDelaySeconds: 0, // Initial delay before first delivery (default: 0)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Creates the optional second argument for generated `workflowEntrypoint()`
|
|
43
|
+
* calls. The namespace is resolved while building so generated route files do
|
|
44
|
+
* not need `WORKFLOW_QUEUE_NAMESPACE` at runtime.
|
|
45
|
+
*/
|
|
46
|
+
export function createWorkflowEntrypointOptionsCode(options) {
|
|
47
|
+
const namespace = resolveQueueNamespace(options?.namespace);
|
|
48
|
+
if (!namespace) {
|
|
49
|
+
return '';
|
|
50
|
+
}
|
|
51
|
+
// Reuse prefix construction for namespace validation.
|
|
52
|
+
getQueueTopicPrefix('workflow', namespace);
|
|
53
|
+
return `, { namespace: ${JSON.stringify(namespace)} }`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Default queue trigger (no namespace). Backward compatible.
|
|
57
|
+
*/
|
|
58
|
+
export const WORKFLOW_QUEUE_TRIGGER = createWorkflowQueueTrigger();
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixDQUFDO0FBRW5ELFNBQVMscUJBQXFCLENBQUMsU0FBa0I7SUFDL0MsT0FBTyxTQUFTLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxTQUFTLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsSUFBeUIsRUFBRSxTQUFrQjtJQUN4RSxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FDYiw0QkFBNEIsU0FBUywyREFBMkQsQ0FDakcsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLEtBQUssU0FBUyxRQUFRLElBQUksR0FBRyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLFNBQVMsSUFBSSxHQUFHLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLE9BQWdDO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUU1RCxPQUFPO1FBQ0wsSUFBSSxFQUFFLGNBQXVCO1FBQzdCLEtBQUssRUFBRSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsR0FBRztRQUN2RCxRQUFRLEVBQUUsU0FBUztRQUNuQixpQkFBaUIsRUFBRSxDQUFDLEVBQUUsc0NBQXNDO1FBQzVELG1CQUFtQixFQUFFLENBQUMsRUFBRSxtREFBbUQ7S0FDNUUsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1DQUFtQyxDQUFDLE9BRW5EO0lBQ0MsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRTVELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFM0MsT0FBTyxrQkFBa0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0FBQ3pELENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLDBCQUEwQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBRVUVVRV9OQU1FU1BBQ0VfUEFUVEVSTiA9IC9eW2Etel1bYS16MC05XSokLztcblxuZnVuY3Rpb24gcmVzb2x2ZVF1ZXVlTmFtZXNwYWNlKG5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBuYW1lc3BhY2UgPz8gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFID8/IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0UXVldWVUb3BpY1ByZWZpeChraW5kOiAnd29ya2Zsb3cnIHwgJ3N0ZXAnLCBuYW1lc3BhY2U/OiBzdHJpbmcpIHtcbiAgaWYgKG5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFRVUVVRV9OQU1FU1BBQ0VfUEFUVEVSTi50ZXN0KG5hbWVzcGFjZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcXVldWUgbmFtZXNwYWNlIFwiJHtuYW1lc3BhY2V9XCI6IG11c3QgYmUgbG93ZXJjYXNlIGFscGhhbnVtZXJpYywgc3RhcnRpbmcgd2l0aCBhIGxldHRlcmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBfXyR7bmFtZXNwYWNlfV93a2ZfJHtraW5kfV9gO1xuICB9XG5cbiAgcmV0dXJuIGBfX3drZl8ke2tpbmR9X2A7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHF1ZXVlIHRyaWdnZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIHdvcmtmbG93IGhhbmRsZXIuXG4gKiBIYW5kbGVzIGJvdGggd29ya2Zsb3cgb3JjaGVzdHJhdGlvbiBhbmQgc3RlcCBleGVjdXRpb24gb24gdGhlIHNhbWUgcm91dGUuXG4gKiBCYWNrZ3JvdW5kIHN0ZXBzIGFyZSBxdWV1ZWQgYmFjayB0byB0aGUgd29ya2Zsb3cgdG9waWMgd2l0aCBhIHN0ZXBJZC5cbiAqXG4gKiBXaGVuIGBuYW1lc3BhY2VgIGlzIHByb3ZpZGVkLCB0aGUgdHJpZ2dlciB0b3BpYyBpcyBzY29wZWQgdG8gYXZvaWRcbiAqIGNvbGxpc2lvbnMgd2l0aCBvdGhlciBmcmFtZXdvcmtzIG9yIGRpcmVjdCBXb3JrZmxvdyBTREsgdXNhZ2UgaW4gdGhlXG4gKiBzYW1lIGRlcGxveW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGRlZmF1bHQ6IHRvcGljID0gJ19fd2tmX3dvcmtmbG93XyonXG4gKiBjcmVhdGVXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIG5hbWVzcGFjZWQ6IHRvcGljID0gJ19fY3VzdG9tX3drZl93b3JrZmxvd18qJ1xuICogY3JlYXRlV29ya2Zsb3dRdWV1ZVRyaWdnZXIoeyBuYW1lc3BhY2U6ICdjdXN0b20nIH0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JrZmxvd1F1ZXVlVHJpZ2dlcihvcHRpb25zPzogeyBuYW1lc3BhY2U/OiBzdHJpbmcgfSkge1xuICBjb25zdCBuYW1lc3BhY2UgPSByZXNvbHZlUXVldWVOYW1lc3BhY2Uob3B0aW9ucz8ubmFtZXNwYWNlKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdxdWV1ZS92MmJldGEnIGFzIGNvbnN0LFxuICAgIHRvcGljOiBgJHtnZXRRdWV1ZVRvcGljUHJlZml4KCd3b3JrZmxvdycsIG5hbWVzcGFjZSl9KmAsXG4gICAgY29uc3VtZXI6ICdkZWZhdWx0JyxcbiAgICByZXRyeUFmdGVyU2Vjb25kczogNSwgLy8gRGVsYXkgYmV0d2VlbiByZXRyaWVzIChkZWZhdWx0OiA2MClcbiAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiAwLCAvLyBJbml0aWFsIGRlbGF5IGJlZm9yZSBmaXJzdCBkZWxpdmVyeSAoZGVmYXVsdDogMClcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgZm9yIGdlbmVyYXRlZCBgd29ya2Zsb3dFbnRyeXBvaW50KClgXG4gKiBjYWxscy4gVGhlIG5hbWVzcGFjZSBpcyByZXNvbHZlZCB3aGlsZSBidWlsZGluZyBzbyBnZW5lcmF0ZWQgcm91dGUgZmlsZXMgZG9cbiAqIG5vdCBuZWVkIGBXT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0VgIGF0IHJ1bnRpbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZShvcHRpb25zPzoge1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59KSB7XG4gIGNvbnN0IG5hbWVzcGFjZSA9IHJlc29sdmVRdWV1ZU5hbWVzcGFjZShvcHRpb25zPy5uYW1lc3BhY2UpO1xuXG4gIGlmICghbmFtZXNwYWNlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8gUmV1c2UgcHJlZml4IGNvbnN0cnVjdGlvbiBmb3IgbmFtZXNwYWNlIHZhbGlkYXRpb24uXG4gIGdldFF1ZXVlVG9waWNQcmVmaXgoJ3dvcmtmbG93JywgbmFtZXNwYWNlKTtcblxuICByZXR1cm4gYCwgeyBuYW1lc3BhY2U6ICR7SlNPTi5zdHJpbmdpZnkobmFtZXNwYWNlKX0gfWA7XG59XG5cbi8qKlxuICogRGVmYXVsdCBxdWV1ZSB0cmlnZ2VyIChubyBuYW1lc3BhY2UpLiBCYWNrd2FyZCBjb21wYXRpYmxlLlxuICovXG5leHBvcnQgY29uc3QgV09SS0ZMT1dfUVVFVUVfVFJJR0dFUiA9IGNyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyKCk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.test.d.ts","sourceRoot":"","sources":["../src/constants.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
2
|
+
import { createWorkflowEntrypointOptionsCode, createWorkflowQueueTrigger, } from './constants.js';
|
|
3
|
+
describe('createWorkflowQueueTrigger', () => {
|
|
4
|
+
afterEach(() => {
|
|
5
|
+
delete process.env.WORKFLOW_QUEUE_NAMESPACE;
|
|
6
|
+
});
|
|
7
|
+
it('uses the default workflow topic without a namespace', () => {
|
|
8
|
+
expect(createWorkflowQueueTrigger().topic).toBe('__wkf_workflow_*');
|
|
9
|
+
});
|
|
10
|
+
it('uses an explicit namespace when provided', () => {
|
|
11
|
+
expect(createWorkflowQueueTrigger({ namespace: 'custom' }).topic).toBe('__custom_wkf_workflow_*');
|
|
12
|
+
});
|
|
13
|
+
it('uses WORKFLOW_QUEUE_NAMESPACE when no explicit namespace is provided', () => {
|
|
14
|
+
process.env.WORKFLOW_QUEUE_NAMESPACE = 'custom';
|
|
15
|
+
expect(createWorkflowQueueTrigger().topic).toBe('__custom_wkf_workflow_*');
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
describe('createWorkflowEntrypointOptionsCode', () => {
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
delete process.env.WORKFLOW_QUEUE_NAMESPACE;
|
|
21
|
+
});
|
|
22
|
+
it('omits runtime options without a namespace', () => {
|
|
23
|
+
expect(createWorkflowEntrypointOptionsCode()).toBe('');
|
|
24
|
+
});
|
|
25
|
+
it('inlines an explicit namespace', () => {
|
|
26
|
+
expect(createWorkflowEntrypointOptionsCode({ namespace: 'custom' })).toBe(', { namespace: "custom" }');
|
|
27
|
+
});
|
|
28
|
+
it('inlines WORKFLOW_QUEUE_NAMESPACE at build time', () => {
|
|
29
|
+
process.env.WORKFLOW_QUEUE_NAMESPACE = 'custom';
|
|
30
|
+
expect(createWorkflowEntrypointOptionsCode()).toBe(', { namespace: "custom" }');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3RhbnRzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsbUNBQW1DLEVBQ25DLDBCQUEwQixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7SUFDMUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7UUFDN0QsTUFBTSxDQUFDLDBCQUEwQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMENBQTBDLEVBQUUsR0FBRyxFQUFFO1FBQ2xELE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDcEUseUJBQXlCLENBQzFCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxHQUFHLEVBQUU7UUFDOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsR0FBRyxRQUFRLENBQUM7UUFFaEQsTUFBTSxDQUFDLDBCQUEwQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0UsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUU7SUFDbkQsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7UUFDbkQsTUFBTSxDQUFDLG1DQUFtQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN2RSwyQkFBMkIsQ0FDNUIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtRQUN4RCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixHQUFHLFFBQVEsQ0FBQztRQUVoRCxNQUFNLENBQUMsbUNBQW1DLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDaEQsMkJBQTJCLENBQzVCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJFYWNoLCBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQge1xuICBjcmVhdGVXb3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZSxcbiAgY3JlYXRlV29ya2Zsb3dRdWV1ZVRyaWdnZXIsXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuZGVzY3JpYmUoJ2NyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5XT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0U7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHRoZSBkZWZhdWx0IHdvcmtmbG93IHRvcGljIHdpdGhvdXQgYSBuYW1lc3BhY2UnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyKCkudG9waWMpLnRvQmUoJ19fd2tmX3dvcmtmbG93XyonKTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgYW4gZXhwbGljaXQgbmFtZXNwYWNlIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyKHsgbmFtZXNwYWNlOiAnY3VzdG9tJyB9KS50b3BpYykudG9CZShcbiAgICAgICdfX2N1c3RvbV93a2Zfd29ya2Zsb3dfKidcbiAgICApO1xuICB9KTtcblxuICBpdCgndXNlcyBXT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0Ugd2hlbiBubyBleHBsaWNpdCBuYW1lc3BhY2UgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFID0gJ2N1c3RvbSc7XG5cbiAgICBleHBlY3QoY3JlYXRlV29ya2Zsb3dRdWV1ZVRyaWdnZXIoKS50b3BpYykudG9CZSgnX19jdXN0b21fd2tmX3dvcmtmbG93XyonKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2NyZWF0ZVdvcmtmbG93RW50cnlwb2ludE9wdGlvbnNDb2RlJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5XT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0U7XG4gIH0pO1xuXG4gIGl0KCdvbWl0cyBydW50aW1lIG9wdGlvbnMgd2l0aG91dCBhIG5hbWVzcGFjZScsICgpID0+IHtcbiAgICBleHBlY3QoY3JlYXRlV29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUoKSkudG9CZSgnJyk7XG4gIH0pO1xuXG4gIGl0KCdpbmxpbmVzIGFuIGV4cGxpY2l0IG5hbWVzcGFjZScsICgpID0+IHtcbiAgICBleHBlY3QoY3JlYXRlV29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUoeyBuYW1lc3BhY2U6ICdjdXN0b20nIH0pKS50b0JlKFxuICAgICAgJywgeyBuYW1lc3BhY2U6IFwiY3VzdG9tXCIgfSdcbiAgICApO1xuICB9KTtcblxuICBpdCgnaW5saW5lcyBXT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0UgYXQgYnVpbGQgdGltZScsICgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0UgPSAnY3VzdG9tJztcblxuICAgIGV4cGVjdChjcmVhdGVXb3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZSgpKS50b0JlKFxuICAgICAgJywgeyBuYW1lc3BhY2U6IFwiY3VzdG9tXCIgfSdcbiAgICApO1xuICB9KTtcbn0pO1xuIl19
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { applySwcTransform } from './apply-swc-transform.js';
|
|
|
3
3
|
export { BaseBuilder } from './base-builder.js';
|
|
4
4
|
export { createBuildQueue } from './build-queue.js';
|
|
5
5
|
export { createBaseBuilderConfig, type DecoratorOptions, type DecoratorOptionsWithConfigPath, getDecoratorOptionsForDirectory, getDecoratorOptionsForDirectoryWithConfigPath, } from './config-helpers.js';
|
|
6
|
-
export { WORKFLOW_QUEUE_TRIGGER } from './constants.js';
|
|
6
|
+
export { createWorkflowEntrypointOptionsCode, createWorkflowQueueTrigger, WORKFLOW_QUEUE_TRIGGER, } from './constants.js';
|
|
7
7
|
export { createDiscoverEntriesPlugin } from './discover-entries-esbuild-plugin.js';
|
|
8
8
|
export { clearModuleSpecifierCache, getImportPath, type ImportPathResult, type ModuleSpecifierResult, resolveModuleSpecifier, } from './module-specifier.js';
|
|
9
9
|
export { createNodeModuleErrorPlugin } from './node-module-esbuild-plugin.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,8BAA8B,EACnC,+BAA+B,EAC/B,6CAA6C,GAC9C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,8BAA8B,EACnC,+BAA+B,EAC/B,6CAA6C,GAC9C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EACL,yBAAyB,EACzB,eAAe,GAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ export { applySwcTransform } from './apply-swc-transform.js';
|
|
|
2
2
|
export { BaseBuilder } from './base-builder.js';
|
|
3
3
|
export { createBuildQueue } from './build-queue.js';
|
|
4
4
|
export { createBaseBuilderConfig, getDecoratorOptionsForDirectory, getDecoratorOptionsForDirectoryWithConfigPath, } from './config-helpers.js';
|
|
5
|
-
export { WORKFLOW_QUEUE_TRIGGER } from './constants.js';
|
|
5
|
+
export { createWorkflowEntrypointOptionsCode, createWorkflowQueueTrigger, WORKFLOW_QUEUE_TRIGGER, } from './constants.js';
|
|
6
6
|
export { createDiscoverEntriesPlugin } from './discover-entries-esbuild-plugin.js';
|
|
7
7
|
export { clearModuleSpecifierCache, getImportPath, resolveModuleSpecifier, } from './module-specifier.js';
|
|
8
8
|
export { createNodeModuleErrorPlugin } from './node-module-esbuild-plugin.js';
|
|
@@ -15,4 +15,4 @@ export { detectWorkflowPatterns, generatedWorkflowPathPattern, isGeneratedWorkfl
|
|
|
15
15
|
export { isValidBuildTarget, validBuildTargets } from './types.js';
|
|
16
16
|
export { VercelBuildOutputAPIBuilder } from './vercel-build-output-api.js';
|
|
17
17
|
export { resolveWorkflowAliasRelativePath } from './workflow-alias.js';
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFDTCx1QkFBdUIsRUFHdkIsK0JBQStCLEVBQy9CLDZDQUE2QyxHQUM5QyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxtQ0FBbUMsRUFDbkMsMEJBQTBCLEVBQzFCLHNCQUFzQixHQUN2QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25GLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsYUFBYSxFQUdiLHNCQUFzQixHQUN2QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsZUFBZSxHQUNoQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBR3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLGNBQWMsRUFDZCxrQkFBa0IsRUFFbEIsMEJBQTBCLEVBQzFCLDBCQUEwQixHQUMzQixNQUFNLHNCQUFzQixDQUFDO0FBVTlCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNuRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgV29ya2Zsb3dNYW5pZmVzdCB9IGZyb20gJy4vYXBwbHktc3djLXRyYW5zZm9ybS5qcyc7XG5leHBvcnQgeyBhcHBseVN3Y1RyYW5zZm9ybSB9IGZyb20gJy4vYXBwbHktc3djLXRyYW5zZm9ybS5qcyc7XG5leHBvcnQgeyBCYXNlQnVpbGRlciB9IGZyb20gJy4vYmFzZS1idWlsZGVyLmpzJztcbmV4cG9ydCB7IGNyZWF0ZUJ1aWxkUXVldWUgfSBmcm9tICcuL2J1aWxkLXF1ZXVlLmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZUJhc2VCdWlsZGVyQ29uZmlnLFxuICB0eXBlIERlY29yYXRvck9wdGlvbnMsXG4gIHR5cGUgRGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoLFxuICBnZXREZWNvcmF0b3JPcHRpb25zRm9yRGlyZWN0b3J5LFxuICBnZXREZWNvcmF0b3JPcHRpb25zRm9yRGlyZWN0b3J5V2l0aENvbmZpZ1BhdGgsXG59IGZyb20gJy4vY29uZmlnLWhlbHBlcnMuanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlV29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUsXG4gIGNyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyLFxuICBXT1JLRkxPV19RVUVVRV9UUklHR0VSLFxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5leHBvcnQgeyBjcmVhdGVEaXNjb3ZlckVudHJpZXNQbHVnaW4gfSBmcm9tICcuL2Rpc2NvdmVyLWVudHJpZXMtZXNidWlsZC1wbHVnaW4uanMnO1xuZXhwb3J0IHtcbiAgY2xlYXJNb2R1bGVTcGVjaWZpZXJDYWNoZSxcbiAgZ2V0SW1wb3J0UGF0aCxcbiAgdHlwZSBJbXBvcnRQYXRoUmVzdWx0LFxuICB0eXBlIE1vZHVsZVNwZWNpZmllclJlc3VsdCxcbiAgcmVzb2x2ZU1vZHVsZVNwZWNpZmllcixcbn0gZnJvbSAnLi9tb2R1bGUtc3BlY2lmaWVyLmpzJztcbmV4cG9ydCB7IGNyZWF0ZU5vZGVNb2R1bGVFcnJvclBsdWdpbiB9IGZyb20gJy4vbm9kZS1tb2R1bGUtZXNidWlsZC1wbHVnaW4uanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlUHNldWRvUGFja2FnZVBsdWdpbixcbiAgUFNFVURPX1BBQ0tBR0VTLFxufSBmcm9tICcuL3BzZXVkby1wYWNrYWdlLWVzYnVpbGQtcGx1Z2luLmpzJztcbmV4cG9ydCB7IE5PUk1BTElaRV9SRVFVRVNUX0NPREUgfSBmcm9tICcuL3JlcXVlc3QtY29udmVydGVyLmpzJztcbmV4cG9ydCB7XG4gIGFuYWx5emVTZXJkZUNvbXBsaWFuY2UsXG4gIGV4dHJhY3RDbGFzc0VudHJpZXMsXG4gIHR5cGUgU2VyZGVDaGVja1Jlc3VsdCxcbiAgdHlwZSBTZXJkZUNsYXNzQ2hlY2tSZXN1bHQsXG59IGZyb20gJy4vc2VyZGUtY2hlY2tlci5qcyc7XG5leHBvcnQgeyBTdGFuZGFsb25lQnVpbGRlciB9IGZyb20gJy4vc3RhbmRhbG9uZS5qcyc7XG5leHBvcnQgeyBjcmVhdGVTd2NQbHVnaW4gfSBmcm9tICcuL3N3Yy1lc2J1aWxkLXBsdWdpbi5qcyc7XG5leHBvcnQge1xuICBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zLFxuICBnZW5lcmF0ZWRXb3JrZmxvd1BhdGhQYXR0ZXJuLFxuICBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZSxcbiAgc2hvdWxkVHJhbnNmb3JtRmlsZSxcbiAgdHVyYm9wYWNrQ29udGVudFBhdHRlcm4sXG4gIHVzZVN0ZXBQYXR0ZXJuLFxuICB1c2VXb3JrZmxvd1BhdHRlcm4sXG4gIHR5cGUgV29ya2Zsb3dQYXR0ZXJuTWF0Y2gsXG4gIHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLFxuICB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybixcbn0gZnJvbSAnLi90cmFuc2Zvcm0tdXRpbHMuanMnO1xuZXhwb3J0IHR5cGUge1xuICBBc3Ryb0NvbmZpZyxcbiAgQnVpbGRUYXJnZXQsXG4gIE5leHRDb25maWcsXG4gIFN0YW5kYWxvbmVDb25maWcsXG4gIFN2ZWx0ZUtpdENvbmZpZyxcbiAgVmVyY2VsQnVpbGRPdXRwdXRDb25maWcsXG4gIFdvcmtmbG93Q29uZmlnLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmV4cG9ydCB7IGlzVmFsaWRCdWlsZFRhcmdldCwgdmFsaWRCdWlsZFRhcmdldHMgfSBmcm9tICcuL3R5cGVzLmpzJztcbmV4cG9ydCB7IFZlcmNlbEJ1aWxkT3V0cHV0QVBJQnVpbGRlciB9IGZyb20gJy4vdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkuanMnO1xuZXhwb3J0IHsgcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGggfSBmcm9tICcuL3dvcmtmbG93LWFsaWFzLmpzJztcbiJdfQ==
|
|
@@ -28,16 +28,34 @@ export interface ModuleSpecifierResult {
|
|
|
28
28
|
* // => { moduleSpecifier: 'workflow/internal/builtins@4.0.0' }
|
|
29
29
|
*
|
|
30
30
|
* @example
|
|
31
|
-
* //
|
|
32
|
-
* resolveModuleSpecifier('/project/packages/shared/src/
|
|
31
|
+
* // Exported root file in workspace package
|
|
32
|
+
* resolveModuleSpecifier('/project/packages/shared/src/index.ts', '/project')
|
|
33
33
|
* // => { moduleSpecifier: '@myorg/shared@0.0.0' }
|
|
34
34
|
*
|
|
35
35
|
* @example
|
|
36
|
+
* // Non-exported / deep package file
|
|
37
|
+
* resolveModuleSpecifier('/project/packages/shared/src/internal/foo.ts', '/project')
|
|
38
|
+
* // => { moduleSpecifier: undefined }
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
36
41
|
* // Local app file
|
|
37
42
|
* resolveModuleSpecifier('/project/src/workflows/order.ts', '/project')
|
|
38
43
|
* // => { moduleSpecifier: undefined }
|
|
39
44
|
*/
|
|
40
45
|
export declare function resolveModuleSpecifier(filePath: string, projectRoot: string): ModuleSpecifierResult;
|
|
46
|
+
/**
|
|
47
|
+
* Strip the trailing "@<version>" suffix from a module specifier produced by
|
|
48
|
+
* `resolveModuleSpecifier`, leaving the bare `name` or `name/subpath` form.
|
|
49
|
+
*
|
|
50
|
+
* Use this when you want to compare or dedupe specifiers across versions
|
|
51
|
+
* (e.g. treating `@workflow/ai/agent@5.0.0-beta.4` and
|
|
52
|
+
* `@workflow/ai/agent@5.0.0-beta.5` as the same logical module).
|
|
53
|
+
*
|
|
54
|
+
* Colocated with `resolveModuleSpecifier` so the construction and parsing
|
|
55
|
+
* stay in sync — see the `${pkg.name}${subpath}@${pkg.version}` and
|
|
56
|
+
* `${pkg.name}@${pkg.version}` paths above.
|
|
57
|
+
*/
|
|
58
|
+
export declare function stripPackageVersion(specifier: string): string;
|
|
41
59
|
/**
|
|
42
60
|
* Clear the package.json cache. Useful for testing or when package.json files may have changed.
|
|
43
61
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-specifier.d.ts","sourceRoot":"","sources":["../src/module-specifier.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAoTD
|
|
1
|
+
{"version":3,"file":"module-specifier.d.ts","sourceRoot":"","sources":["../src/module-specifier.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAoTD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,qBAAqB,CA6CvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAM7D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD;AA0HD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,gBAAgB,CA6DlB"}
|
package/dist/module-specifier.js
CHANGED
|
@@ -267,11 +267,16 @@ function isWorkspacePackage(filePath, projectRoot) {
|
|
|
267
267
|
* // => { moduleSpecifier: 'workflow/internal/builtins@4.0.0' }
|
|
268
268
|
*
|
|
269
269
|
* @example
|
|
270
|
-
* //
|
|
271
|
-
* resolveModuleSpecifier('/project/packages/shared/src/
|
|
270
|
+
* // Exported root file in workspace package
|
|
271
|
+
* resolveModuleSpecifier('/project/packages/shared/src/index.ts', '/project')
|
|
272
272
|
* // => { moduleSpecifier: '@myorg/shared@0.0.0' }
|
|
273
273
|
*
|
|
274
274
|
* @example
|
|
275
|
+
* // Non-exported / deep package file
|
|
276
|
+
* resolveModuleSpecifier('/project/packages/shared/src/internal/foo.ts', '/project')
|
|
277
|
+
* // => { moduleSpecifier: undefined }
|
|
278
|
+
*
|
|
279
|
+
* @example
|
|
275
280
|
* // Local app file
|
|
276
281
|
* resolveModuleSpecifier('/project/src/workflows/order.ts', '/project')
|
|
277
282
|
* // => { moduleSpecifier: undefined }
|
|
@@ -294,14 +299,46 @@ export function resolveModuleSpecifier(filePath, projectRoot) {
|
|
|
294
299
|
const subpath = resolveExportSubpath(filePath, pkg, {
|
|
295
300
|
allowSourceFallback: true,
|
|
296
301
|
});
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
302
|
+
if (subpath) {
|
|
303
|
+
return {
|
|
304
|
+
moduleSpecifier: `${pkg.name}${subpath}@${pkg.version}`,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
if (isRootEntrypointFile(filePath, pkg)) {
|
|
308
|
+
return {
|
|
309
|
+
moduleSpecifier: `${pkg.name}@${pkg.version}`,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
// Non-exported package file (deep import that isn't reachable as a
|
|
313
|
+
// package specifier). Returning undefined makes the SWC plugin fall back
|
|
314
|
+
// to the relative file path, which keeps IDs unique per file. Previously
|
|
315
|
+
// every non-exported file collapsed to "name@version", causing same-named
|
|
316
|
+
// step/workflow functions in different files to silently overwrite each
|
|
317
|
+
// other at runtime registration; the build-time duplicate-ID check now
|
|
318
|
+
// also catches that class of collision.
|
|
301
319
|
return {
|
|
302
|
-
moduleSpecifier:
|
|
320
|
+
moduleSpecifier: undefined,
|
|
303
321
|
};
|
|
304
322
|
}
|
|
323
|
+
/**
|
|
324
|
+
* Strip the trailing "@<version>" suffix from a module specifier produced by
|
|
325
|
+
* `resolveModuleSpecifier`, leaving the bare `name` or `name/subpath` form.
|
|
326
|
+
*
|
|
327
|
+
* Use this when you want to compare or dedupe specifiers across versions
|
|
328
|
+
* (e.g. treating `@workflow/ai/agent@5.0.0-beta.4` and
|
|
329
|
+
* `@workflow/ai/agent@5.0.0-beta.5` as the same logical module).
|
|
330
|
+
*
|
|
331
|
+
* Colocated with `resolveModuleSpecifier` so the construction and parsing
|
|
332
|
+
* stay in sync — see the `${pkg.name}${subpath}@${pkg.version}` and
|
|
333
|
+
* `${pkg.name}@${pkg.version}` paths above.
|
|
334
|
+
*/
|
|
335
|
+
export function stripPackageVersion(specifier) {
|
|
336
|
+
// The version is always the final segment after the last "@". Constrain
|
|
337
|
+
// matching to characters that can't appear in a package name or subpath
|
|
338
|
+
// (no "/", no nested "@") so scoped packages like `@workflow/ai@1.0.0`
|
|
339
|
+
// keep their leading "@workflow/ai".
|
|
340
|
+
return specifier.replace(/@[^/@]+$/, '');
|
|
341
|
+
}
|
|
305
342
|
/**
|
|
306
343
|
* Clear the package.json cache. Useful for testing or when package.json files may have changed.
|
|
307
344
|
*/
|
|
@@ -483,4 +520,4 @@ export function getImportPath(filePath, projectRoot) {
|
|
|
483
520
|
isPackage: false,
|
|
484
521
|
};
|
|
485
522
|
}
|
|
486
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLXNwZWNpZmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tb2R1bGUtc3BlY2lmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBMkJsRTs7O0dBR0c7QUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO0FBRS9EOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWdCO0lBQ3ZDLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU1QixnRUFBZ0U7SUFDaEUsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO0lBRWpDLG1EQUFtRDtJQUNuRCxPQUFPLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QixvQkFBb0I7UUFDcEIsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLG1FQUFtRTtZQUNuRSxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNyQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV0QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFD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QUFVLEVBQUUsb0JBQW9CLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQztvQkFDdkQsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTztnQkFDTCxVQUFVLEVBQUUsR0FBRyxDQUFDLElBQUk7Z0JBQ3BCLFNBQVMsRUFBRSxJQUFJO2FBQ2hCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxPQUFPO1FBQ0wsVUFBVSxFQUFFLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7UUFDdkQsU0FBUyxFQUFFLEtBQUs7S0FDakIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlbGF0aXZlLCByZXNvbHZlLCBzZXAgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFJlc3VsdCBvZiByZXNvbHZpbmcgYSBtb2R1bGUgc3BlY2lmaWVyIGZvciBhIGZpbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlU3BlY2lmaWVyUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBtb2R1bGUgc3BlY2lmaWVyIHRvIHVzZSBmb3IgSUQgZ2VuZXJhdGlvbi5cbiAgICogLSBGb3IgcGFja2FnZXM6IFwie25hbWV9QHt2ZXJzaW9ufVwiIG9yIFwie25hbWV9L3tzdWJwYXRofUB7dmVyc2lvbn1cIlxuICAgKiAgIChlLmcuLCBcInBvaW50QDEuMC4wXCIsIFwiQG15b3JnL3NoYXJlZEAyLjAuMFwiLCBcIndvcmtmbG93L2ludGVybmFsL2J1aWx0aW5zQDQuMC4wXCIpXG4gICAqIC0gRm9yIGxvY2FsIGZpbGVzOiB1bmRlZmluZWQgKHBsdWdpbiB3aWxsIHVzZSBkZWZhdWx0IFwiLi9yZWxhdGl2ZS9wYXRoXCIgZm9ybWF0KVxuICAgKi9cbiAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyc2VkIHBhY2thZ2UuanNvbiBkYXRhIHdpdGggZGlyZWN0b3J5IGluZm9ybWF0aW9uLlxuICovXG5pbnRlcmZhY2UgUGFja2FnZUluZm8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZGlyOiBzdHJpbmc7XG4gIGV4cG9ydHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbWFpbj86IHN0cmluZztcbiAgbW9kdWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENhY2hlIGZvciBwYWNrYWdlLmpzb24gbG9va3VwcyB0byBhdm9pZCByZXBlYXRlZCBmaWxlc3lzdGVtIHJlYWRzLlxuICogTWFwcyBkaXJlY3RvcnkgcGF0aCB0byBwYXJzZWQgcGFja2FnZS5qc29uIGluZm8gb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKi9cbmNvbnN0IHBhY2thZ2VKc29uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgUGFja2FnZUluZm8gfCBudWxsPigpO1xuXG4vKipcbiAqIEZpbmQgYW5kIHJlYWQgdGhlIG5lYXJlc3QgcGFja2FnZS5qc29uIGZvciBhIGdpdmVuIGZpbGUgcGF0aC5cbiAqIFJlc3VsdHMgYXJlIGNhY2hlZCBmb3IgcGVyZm9ybWFuY2UuXG4gKi9cbmZ1bmN0aW9uIGZpbmRQYWNrYWdlSnNvbihmaWxlUGF0aDogc3RyaW5nKTogUGFja2FnZUluZm8gfCBudWxsIHtcbiAgbGV0IGRpciA9IGRpcm5hbWUoZmlsZVBhdGgpO1xuXG4gIC8vIFRyYWNrIGRpcmVjdG9yaWVzIHdlJ3ZlIHZpc2l0ZWQgc28gd2UgY2FuIGJhY2stZmlsbCB0aGUgY2FjaGVcbiAgY29uc3QgdmlzaXRlZERpcnM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gV2FsayB1cCB0aGUgZGlyZWN0b3J5IHRyZWUgdW50aWwgd2UgaGl0IHRoZSByb290XG4gIHdoaWxlIChkaXIgIT09IGRpcm5hbWUoZGlyKSkge1xuICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgY29uc3QgY2FjaGVkID0gcGFja2FnZUpzb25DYWNoZS5nZXQoZGlyKTtcbiAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEJhY2stZmlsbCBjYWNoZSBmb3IgYWxsIHZpc2l0ZWQgZGlyZWN0b3JpZXMgd2l0aCB0aGUgc2FtZSByZXN1bHRcbiAgICAgIGZvciAoY29uc3QgdmlzaXRlZERpciBvZiB2aXNpdGVkRGlycykge1xuICAgICAgICBwYWNrYWdlSnNvbkNhY2hlLnNldCh2aXNpdGVkRGlyLCBjYWNoZWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG5cbiAgICB2aXNpdGVkRGlycy5wdXNoKGRpcik7XG5cbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBqb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmIChleGlzdHNTeW5jKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgICAgaWYgKHBhcnNlZC5uYW1lICYmIHBhcnNlZC52ZXJzaW9uKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBQYWNrYWdlSW5mbyA9IHtcbiAgICAgICAgICAgIG5hbWU6IHBhcnNlZC5uYW1lLFxuICAgICAgICAgICAgdmVyc2lvbjogcGFyc2VkLnZlcnNpb24sXG4gICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICBleHBvcnRzOiBwYXJzZWQuZXhwb3J0cyxcbiAgICAgICAgICAgIG1haW46IHBhcnNlZC5tYWluLFxuICAgICAgICAgICAgbW9kdWxlOiBwYXJzZWQubW9kdWxlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gQ2FjaGUgdGhlIHJlc3VsdCBmb3IgdGhpcyBkaXJlY3RvcnkgYW5kIGFsbCB2aXNpdGVkIGRpcmVjdG9yaWVzXG4gICAgICAgICAgcGFja2FnZUpzb25DYWNoZS5zZXQoZGlyLCByZXN1bHQpO1xuICAgICAgICAgIGZvciAoY29uc3QgdmlzaXRlZERpciBvZiB2aXNpdGVkRGlycykge1xuICAgICAgICAgICAgcGFja2FnZUpzb25DYWNoZS5zZXQodmlzaXRlZERpciwgcmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEludmFsaWQgSlNPTiBvciBtaXNzaW5nIGZpZWxkcywgY29udGludWUgc2VhcmNoaW5nXG4gICAgICB9XG4gICAgfVxuXG4gICAgZGlyID0gZGlybmFtZShkaXIpO1xuICB9XG5cbiAgLy8gTm8gcGFja2FnZS5qc29uIGZvdW5kIC0gY2FjaGUgbnVsbCBmb3IgYWxsIHZpc2l0ZWQgZGlyZWN0b3JpZXNcbiAgZm9yIChjb25zdCB2aXNpdGVkRGlyIG9mIHZpc2l0ZWREaXJzKSB7XG4gICAgcGFja2FnZUpzb25DYWNoZS5zZXQodmlzaXRlZERpciwgbnVsbCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBleHBvcnQgc3VicGF0aCBmb3IgYSBmaWxlIHdpdGhpbiBhIHBhY2thZ2UuXG4gKiBMb29rcyB1cCB0aGUgcGFja2FnZS5qc29uIGV4cG9ydHMgZmllbGQgdG8gZmluZCB3aGljaCBzdWJwYXRoIG1hcHMgdG8gdGhlIGZpbGUuXG4gKlxuICogQHBhcmFtIGZpbGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZVxuICogQHBhcmFtIHBrZyAtIFBhY2thZ2UgaW5mbyBmcm9tIGZpbmRQYWNrYWdlSnNvblxuICogQHJldHVybnMgVGhlIHN1YnBhdGggKGUuZy4sIFwiL2ludGVybmFsL2J1aWx0aW5zXCIpIG9yIGVtcHR5IHN0cmluZyBmb3Igcm9vdCBleHBvcnRcbiAqL1xuZnVuY3Rpb24gdG9QYWNrYWdlUmVsYXRpdmVQYXRoKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBwa2c6IFBhY2thZ2VJbmZvXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVQYXRoID0gZmlsZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBjb25zdCBub3JtYWxpemVkUGtnRGlyID0gcGtnLmRpci5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGlmICghbm9ybWFsaXplZEZpbGVQYXRoLnN0YXJ0c1dpdGgobm9ybWFsaXplZFBrZ0RpciArICcvJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkRmlsZVBhdGguc3Vic3RyaW5nKG5vcm1hbGl6ZWRQa2dEaXIubGVuZ3RoICsgMSk7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUZhbGxiYWNrRXhwb3J0VGFyZ2V0cyhyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZmFsbGJhY2tUYXJnZXRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGV4dGVuc2lvbkZhbGxiYWNrczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAgICcudHMnOiBbJy5qcyddLFxuICAgICcudHN4JzogWycuanMnXSxcbiAgICAnLm10cyc6IFsnLm1qcyddLFxuICAgICcuY3RzJzogWycuY2pzJ10sXG4gICAgJy5qc3gnOiBbJy5qcyddLFxuICB9O1xuXG4gIGNvbnN0IGV4dGVuc2lvbk1hdGNoID0gcmVsYXRpdmVQYXRoLm1hdGNoKC8oXFwuW14uL1xcXFxdKykkLyk7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGV4dGVuc2lvbk1hdGNoPy5bMV0/LnRvTG93ZXJDYXNlKCk7XG4gIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcGF0aFdpdGhvdXRFeHRlbnNpb24gPSByZWxhdGl2ZVBhdGguc2xpY2UoMCwgLWV4dGVuc2lvbi5sZW5ndGgpO1xuICBjb25zdCBleHRlbnNpb25UYXJnZXRzID0gZXh0ZW5zaW9uRmFsbGJhY2tzW2V4dGVuc2lvbl0gPz8gW107XG4gIGZvciAoY29uc3QgZmFsbGJhY2tFeHRlbnNpb24gb2YgZXh0ZW5zaW9uVGFyZ2V0cykge1xuICAgIGZhbGxiYWNrVGFyZ2V0cy5hZGQoYCR7cGF0aFdpdGhvdXRFeHRlbnNpb259JHtmYWxsYmFja0V4dGVuc2lvbn1gKTtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnc3JjLycpKSB7XG4gICAgY29uc3QgZGlzdFBhdGhXaXRob3V0UHJlZml4ID0gcmVsYXRpdmVQYXRoLnNsaWNlKCdzcmMvJy5sZW5ndGgpO1xuICAgIGZvciAoY29uc3QgZmFsbGJhY2tFeHRlbnNpb24gb2YgZXh0ZW5zaW9uVGFyZ2V0cykge1xuICAgICAgZmFsbGJhY2tUYXJnZXRzLmFkZChcbiAgICAgICAgYGRpc3QvJHtkaXN0UGF0aFdpdGhvdXRQcmVmaXguc2xpY2UoMCwgLWV4dGVuc2lvbi5sZW5ndGgpfSR7ZmFsbGJhY2tFeHRlbnNpb259YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gQXJyYXkuZnJvbShmYWxsYmFja1RhcmdldHMpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRXhwb3J0U3VicGF0aChcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcGtnOiBQYWNrYWdlSW5mbyxcbiAgb3B0aW9ucz86IHsgYWxsb3dTb3VyY2VGYWxsYmFjaz86IGJvb2xlYW4gfVxuKTogc3RyaW5nIHtcbiAgaWYgKCFwa2cuZXhwb3J0cyB8fCB0eXBlb2YgcGtnLmV4cG9ydHMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgcmVsYXRpdmVQYXRoID0gdG9QYWNrYWdlUmVsYXRpdmVQYXRoKGZpbGVQYXRoLCBwa2cpO1xuICBpZiAoIXJlbGF0aXZlUGF0aCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNvbXBhcmFibGVUYXJnZXRzID0gbmV3IFNldChbYC4vJHtyZWxhdGl2ZVBhdGh9YF0pO1xuICBpZiAob3B0aW9ucz8uYWxsb3dTb3VyY2VGYWxsYmFjaykge1xuICAgIGZvciAoY29uc3QgZmFsbGJhY2tUYXJnZXQgb2YgZ2V0U291cmNlRmFsbGJhY2tFeHBvcnRUYXJnZXRzKHJlbGF0aXZlUGF0aCkpIHtcbiAgICAgIGNvbXBhcmFibGVUYXJnZXRzLmFkZChgLi8ke2ZhbGxiYWNrVGFyZ2V0fWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlYXJjaCB0aHJvdWdoIGV4cG9ydHMgdG8gZmluZCBhIG1hdGNoaW5nIHN1YnBhdGhcbiAgZm9yIChjb25zdCBbc3VicGF0aCwgdGFyZ2V0XSBvZiBPYmplY3QuZW50cmllcyhwa2cuZXhwb3J0cykpIHtcbiAgICBjb25zdCByZXNvbHZlZFRhcmdldCA9IHJlc29sdmVFeHBvcnRUYXJnZXQodGFyZ2V0KTtcbiAgICBpZiAoXG4gICAgICByZXNvbHZlZFRhcmdldCAmJlxuICAgICAgY29tcGFyYWJsZVRhcmdldHMuaGFzKG5vcm1hbGl6ZUV4cG9ydFBhdGgocmVzb2x2ZWRUYXJnZXQpKVxuICAgICkge1xuICAgICAgLy8gRm91bmQgYSBtYXRjaCAtIHJldHVybiB0aGUgc3VicGF0aCB3aXRob3V0IHRoZSBsZWFkaW5nIFwiLlwiXG4gICAgICAvLyBlLmcuLCBcIi4vaW50ZXJuYWwvYnVpbHRpbnNcIiAtPiBcIi9pbnRlcm5hbC9idWlsdGluc1wiXG4gICAgICByZXR1cm4gc3VicGF0aCA9PT0gJy4nID8gJycgOiBzdWJwYXRoLnN1YnN0cmluZygxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBleHBvcnQgdGFyZ2V0IHRvIGEgZmlsZSBwYXRoLCBoYW5kbGluZyBjb25kaXRpb25hbCBleHBvcnRzIGFuZCBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFeHBvcnRUYXJnZXQodGFyZ2V0OiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvLyBIYW5kbGUgYXJyYXkgZXhwb3J0cyAoZmFsbGJhY2sgY2hhaW5zKVxuICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRhcmdldCkge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlRXhwb3J0VGFyZ2V0KGl0ZW0pO1xuICAgICAgaWYgKHJlc29sdmVkKSByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0Jykge1xuICAgIC8vIENvbmRpdGlvbmFsIGV4cG9ydCAtIHRyeSBjb21tb24gY29uZGl0aW9ucyBpbiBvcmRlciBvZiBwcmVmZXJlbmNlXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IFsnd29ya2Zsb3cnLCAnZGVmYXVsdCcsICdyZXF1aXJlJywgJ2ltcG9ydCcsICdub2RlJ107XG4gICAgZm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xuICAgICAgY29uc3QgdmFsdWUgPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtjb25kaXRpb25dO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgLy8gSGFuZGxlIG5lc3RlZCBjb25kaXRpb25hbHMgb3IgYXJyYXlzXG4gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBuZXN0ZWQgPSByZXNvbHZlRXhwb3J0VGFyZ2V0KHZhbHVlKTtcbiAgICAgICAgaWYgKG5lc3RlZCkgcmV0dXJuIG5lc3RlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYW4gZXhwb3J0IHBhdGggZm9yIGNvbXBhcmlzb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV4cG9ydFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gRW5zdXJlIGl0IHN0YXJ0cyB3aXRoIC4vXG4gIGlmICghcGF0aC5zdGFydHNXaXRoKCcuLycpKSB7XG4gICAgcmV0dXJuICcuLycgKyBwYXRoO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgZmlsZSBwYXRoIGlzIGluc2lkZSBub2RlX21vZHVsZXMuXG4gKi9cbmZ1bmN0aW9uIGlzSW5Ob2RlTW9kdWxlcyhmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gZmlsZVBhdGguc3BsaXQoc2VwKS5qb2luKCcvJyk7XG4gIHJldHVybiBub3JtYWxpemVkUGF0aC5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKTtcbn1cblxuLyoqXG4gKiBDYWNoZSBmb3IgcHJvamVjdCBkZXBlbmRlbmNpZXMgdG8gYXZvaWQgcmVwZWF0ZWQgZmlsZXN5c3RlbSByZWFkcy5cbiAqIE1hcHMgcHJvamVjdCByb290IHRvIHNldCBvZiBkZXBlbmRlbmN5IHBhY2thZ2UgbmFtZXMuXG4gKi9cbmNvbnN0IHByb2plY3REZXBzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG5cbi8qKlxuICogR2V0IGFsbCBkZXBlbmRlbmNpZXMgKGluY2x1ZGluZyBkZXZEZXBlbmRlbmNpZXMpIGZvciBhIHByb2plY3QuXG4gKi9cbmZ1bmN0aW9uIGdldFByb2plY3REZXBlbmRlbmNpZXMocHJvamVjdFJvb3Q6IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgY2FjaGVkID0gcHJvamVjdERlcHNDYWNoZS5nZXQocHJvamVjdFJvb3QpO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuXG4gIGNvbnN0IGRlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgcGtnUGF0aCA9IGpvaW4ocHJvamVjdFJvb3QsICdwYWNrYWdlLmpzb24nKTtcblxuICBpZiAoZXhpc3RzU3luYyhwa2dQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGYtOCcpO1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuICAgICAgLy8gQ29sbGVjdCBhbGwgZGVwZW5kZW5jeSB0eXBlc1xuICAgICAgZm9yIChjb25zdCBkZXBUeXBlIG9mIFtcbiAgICAgICAgJ2RlcGVuZGVuY2llcycsXG4gICAgICAgICdkZXZEZXBlbmRlbmNpZXMnLFxuICAgICAgICAncGVlckRlcGVuZGVuY2llcycsXG4gICAgICAgICdvcHRpb25hbERlcGVuZGVuY2llcycsXG4gICAgICBdKSB7XG4gICAgICAgIGNvbnN0IGRlcE9iaiA9IHBhcnNlZFtkZXBUeXBlXTtcbiAgICAgICAgaWYgKGRlcE9iaiAmJiB0eXBlb2YgZGVwT2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhkZXBPYmopKSB7XG4gICAgICAgICAgICBkZXBzLmFkZChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEludmFsaWQgSlNPTiBvciBmaWxlIG5vdCByZWFkYWJsZVxuICAgIH1cbiAgfVxuXG4gIHByb2plY3REZXBzQ2FjaGUuc2V0KHByb2plY3RSb290LCBkZXBzKTtcbiAgcmV0dXJuIGRlcHM7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBmaWxlIHBhdGggaXMgaW5zaWRlIGEgd29ya3NwYWNlIHBhY2thZ2UgdGhhdCBpcyBhIGRlcGVuZGVuY3kgb2YgdGhlIHByb2plY3QuXG4gKiBUaGlzIGlzIGEgaGV1cmlzdGljIC0gd2UgY2hlY2sgaWYgdGhlIGZpbGUgaXMgaW4gYSBkaXJlY3Rvcnkgd2l0aCBhIHBhY2thZ2UuanNvblxuICogdGhhdCBoYXMgYSBcIm5hbWVcIiBmaWVsZCwgaXMgTk9UIGluIG5vZGVfbW9kdWxlcywgYW5kIGlzIGxpc3RlZCBhcyBhIGRlcGVuZGVuY3lcbiAqIG9mIHRoZSBwcm9qZWN0LlxuICovXG5mdW5jdGlvbiBpc1dvcmtzcGFjZVBhY2thZ2UoZmlsZVBhdGg6IHN0cmluZywgcHJvamVjdFJvb3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoaXNJbk5vZGVNb2R1bGVzKGZpbGVQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHBrZyA9IGZpbmRQYWNrYWdlSnNvbihmaWxlUGF0aCk7XG4gIGlmICghcGtnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHBhY2thZ2UuanNvbiBpcyBub3QgdGhlIHJvb3QgcGFja2FnZS5qc29uXG4gIC8vIFVzZSByZXNvbHZlKCkgdG8gbm9ybWFsaXplIHBhdGhzIGZvciBjcm9zcy1wbGF0Zm9ybSBjb21wYXJpc29uXG4gIGNvbnN0IHJvb3RQa2dEaXIgPSByZXNvbHZlKHByb2plY3RSb290KTtcbiAgY29uc3QgcGtnRGlyID0gcmVzb2x2ZShwa2cuZGlyKTtcblxuICAvLyBJZiB0aGUgcGFja2FnZSBkaXJlY3RvcnkgaXMgdGhlIHByb2plY3Qgcm9vdCwgaXQncyBub3QgYSB3b3Jrc3BhY2UgcGFja2FnZVxuICBpZiAocGtnRGlyID09PSByb290UGtnRGlyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRm91bmQgYSBwYWNrYWdlLmpzb24gdGhhdCdzIG5vdCB0aGUgcm9vdC5cbiAgLy8gT25seSB0cmVhdCBpdCBhcyBhIHdvcmtzcGFjZSBwYWNrYWdlIGlmIGl0J3MgYWN0dWFsbHkgYSBkZXBlbmRlbmN5XG4gIC8vIG9mIHRoZSBjdXJyZW50IHByb2plY3QuIFRoaXMgcHJldmVudHMgc2libGluZyBhcHBzIGluIGEgbW9ub3JlcG9cbiAgLy8gZnJvbSBiZWluZyBpbmNvcnJlY3RseSB0cmVhdGVkIGFzIGltcG9ydGFibGUgcGFja2FnZXMuXG4gIGNvbnN0IHByb2plY3REZXBzID0gZ2V0UHJvamVjdERlcGVuZGVuY2llcyhwcm9qZWN0Um9vdCk7XG4gIHJldHVybiBwcm9qZWN0RGVwcy5oYXMocGtnLm5hbWUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIG1vZHVsZSBzcGVjaWZpZXIgZm9yIGEgZmlsZS5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlIGJlaW5nIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0gcHJvamVjdFJvb3QgLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwcm9qZWN0IHJvb3QgKHVzdWFsbHkgcHJvY2Vzcy5jd2QoKSlcbiAqIEByZXR1cm5zIFRoZSBtb2R1bGUgc3BlY2lmaWVyIHJlc3VsdFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGaWxlIGluIG5vZGVfbW9kdWxlcyAocm9vdCBleHBvcnQpXG4gKiByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKCcvcHJvamVjdC9ub2RlX21vZHVsZXMvcG9pbnQvZGlzdC9pbmRleC5qcycsICcvcHJvamVjdCcpXG4gKiAvLyA9PiB7IG1vZHVsZVNwZWNpZmllcjogJ3BvaW50QDEuMC4wJyB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZpbGUgaW4gbm9kZV9tb2R1bGVzIChzdWJwYXRoIGV4cG9ydClcbiAqIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoJy9wcm9qZWN0L25vZGVfbW9kdWxlcy93b3JrZmxvdy9kaXN0L2ludGVybmFsL2J1aWx0aW5zLmpzJywgJy9wcm9qZWN0JylcbiAqIC8vID0+IHsgbW9kdWxlU3BlY2lmaWVyOiAnd29ya2Zsb3cvaW50ZXJuYWwvYnVpbHRpbnNANC4wLjAnIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRmlsZSBpbiB3b3Jrc3BhY2UgcGFja2FnZVxuICogcmVzb2x2ZU1vZHVsZVNwZWNpZmllcignL3Byb2plY3QvcGFja2FnZXMvc2hhcmVkL3NyYy91dGlscy50cycsICcvcHJvamVjdCcpXG4gKiAvLyA9PiB7IG1vZHVsZVNwZWNpZmllcjogJ0BteW9yZy9zaGFyZWRAMC4wLjAnIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTG9jYWwgYXBwIGZpbGVcbiAqIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoJy9wcm9qZWN0L3NyYy93b3JrZmxvd3Mvb3JkZXIudHMnLCAnL3Byb2plY3QnKVxuICogLy8gPT4geyBtb2R1bGVTcGVjaWZpZXI6IHVuZGVmaW5lZCB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nXG4pOiBNb2R1bGVTcGVjaWZpZXJSZXN1bHQge1xuICAvLyBDaGVjayBpZiBmaWxlIGlzIGluIG5vZGVfbW9kdWxlcyBvciBhIHdvcmtzcGFjZSBwYWNrYWdlXG4gIGNvbnN0IGluTm9kZU1vZHVsZXMgPSBpc0luTm9kZU1vZHVsZXMoZmlsZVBhdGgpO1xuICBjb25zdCBpbldvcmtzcGFjZSA9XG4gICAgIWluTm9kZU1vZHVsZXMgJiYgaXNXb3Jrc3BhY2VQYWNrYWdlKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCk7XG5cbiAgaWYgKCFpbk5vZGVNb2R1bGVzICYmICFpbldvcmtzcGFjZSkge1xuICAgIC8vIExvY2FsIGFwcCBmaWxlIC0gdXNlIGRlZmF1bHQgcmVsYXRpdmUgcGF0aCBmb3JtYXRcbiAgICByZXR1cm4geyBtb2R1bGVTcGVjaWZpZXI6IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgLy8gRmluZCB0aGUgcGFja2FnZS5qc29uIGZvciB0aGlzIGZpbGVcbiAgY29uc3QgcGtnID0gZmluZFBhY2thZ2VKc29uKGZpbGVQYXRoKTtcbiAgaWYgKCFwa2cpIHtcbiAgICAvLyBDb3VsZG4ndCBmaW5kIHBhY2thZ2UuanNvbiAtIGZhbGwgYmFjayB0byBkZWZhdWx0XG4gICAgcmV0dXJuIHsgbW9kdWxlU3BlY2lmaWVyOiB1bmRlZmluZWQgfTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgdGhlIGV4cG9ydCBzdWJwYXRoIChlLmcuLCBcIi9pbnRlcm5hbC9idWlsdGluc1wiIGZvciBcIndvcmtmbG93L2ludGVybmFsL2J1aWx0aW5zXCIpXG4gIGNvbnN0IHN1YnBhdGggPSByZXNvbHZlRXhwb3J0U3VicGF0aChmaWxlUGF0aCwgcGtnLCB7XG4gICAgYWxsb3dTb3VyY2VGYWxsYmFjazogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gUmV0dXJuIHRoZSBtb2R1bGUgc3BlY2lmaWVyIGFzIFwibmFtZS9zdWJwYXRoQHZlcnNpb25cIiBvciBcIm5hbWVAdmVyc2lvblwiXG4gIGNvbnN0IHNwZWNpZmllciA9IHN1YnBhdGhcbiAgICA/IGAke3BrZy5uYW1lfSR7c3VicGF0aH1AJHtwa2cudmVyc2lvbn1gXG4gICAgOiBgJHtwa2cubmFtZX1AJHtwa2cudmVyc2lvbn1gO1xuXG4gIHJldHVybiB7XG4gICAgbW9kdWxlU3BlY2lmaWVyOiBzcGVjaWZpZXIsXG4gIH07XG59XG5cbi8qKlxuICogQ2xlYXIgdGhlIHBhY2thZ2UuanNvbiBjYWNoZS4gVXNlZnVsIGZvciB0ZXN0aW5nIG9yIHdoZW4gcGFja2FnZS5qc29uIGZpbGVzIG1heSBoYXZlIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhck1vZHVsZVNwZWNpZmllckNhY2hlKCk6IHZvaWQge1xuICBwYWNrYWdlSnNvbkNhY2hlLmNsZWFyKCk7XG4gIHByb2plY3REZXBzQ2FjaGUuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgZmlsZSBwYXRoIHRvIGEgcmVsYXRpdmUgaW1wb3J0IHBhdGggZnJvbSBwcm9qZWN0IHJvb3QuXG4gKi9cbmZ1bmN0aW9uIHRvUmVsYXRpdmVJbXBvcnRQYXRoKGZpbGVQYXRoOiBzdHJpbmcsIHByb2plY3RSb290OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkUHJvamVjdFJvb3QgPSBwcm9qZWN0Um9vdC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRGaWxlUGF0aCA9IGZpbGVQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICBsZXQgcmVsYXRpdmVQYXRoOiBzdHJpbmc7XG4gIGlmIChub3JtYWxpemVkRmlsZVBhdGguc3RhcnRzV2l0aChub3JtYWxpemVkUHJvamVjdFJvb3QgKyAnLycpKSB7XG4gICAgcmVsYXRpdmVQYXRoID0gbm9ybWFsaXplZEZpbGVQYXRoLnN1YnN0cmluZyhcbiAgICAgIG5vcm1hbGl6ZWRQcm9qZWN0Um9vdC5sZW5ndGggKyAxXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGaWxlIGlzIG91dHNpZGUgcHJvamVjdCByb290LCB1c2UgdGhlIGZ1bGwgcGF0aCBzZWdtZW50cyBhZnRlciBjb21tb24gYW5jZXN0b3JcbiAgICByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShwcm9qZWN0Um9vdCwgZmlsZVBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfVxuXG4gIC8vIEVuc3VyZSByZWxhdGl2ZSBwYXRocyBzdGFydCB3aXRoIC4vXG4gIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cblxuICByZXR1cm4gcmVsYXRpdmVQYXRoO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHBhY2thZ2UgZXhwb3J0cyBpbmNsdWRlIGEgcm9vdCBlbnRyeSAoXCIuXCIpLlxuICogU3RyaW5nL2FycmF5L2NvbmRpdGlvbmFsIG9iamVjdCBleHBvcnRzIGFyZSBhbGwgY29uc2lkZXJlZCByb290IGV4cG9ydHMuXG4gKi9cbmZ1bmN0aW9uIGhhc1Jvb3RFeHBvcnQoZXhwb3J0c0ZpZWxkOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZXhwb3J0c0ZpZWxkID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGV4cG9ydHNGaWVsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghZXhwb3J0c0ZpZWxkIHx8IHR5cGVvZiBleHBvcnRzRmllbGQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHNGaWVsZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gIC8vIENvbmRpdGlvbmFsIGV4cG9ydHMgb2JqZWN0IChlLmcuIHsgXCJpbXBvcnRcIjogXCIuLi5cIiwgXCJkZWZhdWx0XCI6IFwiLi4uXCIgfSlcbiAgLy8gcmVwcmVzZW50cyB0aGUgcm9vdCBleHBvcnQuXG4gIGlmIChrZXlzLmxlbmd0aCA+IDAgJiYga2V5cy5ldmVyeSgoa2V5KSA9PiAha2V5LnN0YXJ0c1dpdGgoJy4nKSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAnLicgaW4gKGV4cG9ydHNGaWVsZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgcGFja2FnZSB0YXJnZXQgcGF0aCB0byBhIGNvbXBhcmFibGUgcGFja2FnZS1yZWxhdGl2ZSBwYXRoLlxuICogUmV0dXJucyBudWxsIGZvciBpbnZhbGlkL3Vuc3VwcG9ydGVkIHBhdGhzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYWNrYWdlVGFyZ2V0UGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCcuLycpKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQuc3Vic3RyaW5nKDIpO1xuICB9XG4gIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBub3JtYWxpemVkLnN1YnN0cmluZygxKTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgZmlsZVBhdGggaXMgdGhlIHBhY2thZ2Ugcm9vdCBlbnRyeXBvaW50LlxuICogVGhpcyBjaGVja3Mgcm9vdCBleHBvcnRzIGZpcnN0LCB0aGVuIG1haW4vbW9kdWxlL2luZGV4IGZhbGxiYWNrcyB3aGVuIGV4cG9ydHMgYXJlIGFic2VudC5cbiAqL1xuZnVuY3Rpb24gaXNSb290RW50cnlwb2ludEZpbGUoZmlsZVBhdGg6IHN0cmluZywgcGtnOiBQYWNrYWdlSW5mbyk6IGJvb2xlYW4ge1xuICBjb25zdCBub3JtYWxpemVkRmlsZVBhdGggPSBmaWxlUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQa2dEaXIgPSBwa2cuZGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICBpZiAoIW5vcm1hbGl6ZWRGaWxlUGF0aC5zdGFydHNXaXRoKG5vcm1hbGl6ZWRQa2dEaXIgKyAnLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IG5vcm1hbGl6ZWRGaWxlUGF0aC5zdWJzdHJpbmcoXG4gICAgbm9ybWFsaXplZFBrZ0Rpci5sZW5ndGggKyAxXG4gICk7XG5cbiAgaWYgKHBrZy5leHBvcnRzKSB7XG4gICAgbGV0IHJvb3RUYXJnZXQ6IHVua25vd247XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgcGtnLmV4cG9ydHMgPT09ICdvYmplY3QnICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShwa2cuZXhwb3J0cykgJiZcbiAgICAgICcuJyBpbiBwa2cuZXhwb3J0c1xuICAgICkge1xuICAgICAgcm9vdFRhcmdldCA9IChwa2cuZXhwb3J0cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJy4nXTtcbiAgICB9IGVsc2UgaWYgKGhhc1Jvb3RFeHBvcnQocGtnLmV4cG9ydHMpKSB7XG4gICAgICByb290VGFyZ2V0ID0gcGtnLmV4cG9ydHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZFRhcmdldCA9IHJlc29sdmVFeHBvcnRUYXJnZXQocm9vdFRhcmdldCk7XG4gICAgaWYgKCFyZXNvbHZlZFRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXQgPSBub3JtYWxpemVQYWNrYWdlVGFyZ2V0UGF0aChyZXNvbHZlZFRhcmdldCk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRUYXJnZXQgPT09IHJlbGF0aXZlRmlsZVBhdGg7XG4gIH1cblxuICBjb25zdCByb290Q2FuZGlkYXRlcyA9IFtcbiAgICBwa2cubW9kdWxlLFxuICAgIHBrZy5tYWluLFxuICAgICdpbmRleC5qcycsXG4gICAgJ2luZGV4Lm1qcycsXG4gICAgJ2luZGV4LmNqcycsXG4gICAgJ2luZGV4LnRzJyxcbiAgICAnaW5kZXgubXRzJyxcbiAgICAnaW5kZXguY3RzJyxcbiAgXVxuICAgIC5maWx0ZXIoKGNhbmRpZGF0ZSk6IGNhbmRpZGF0ZSBpcyBzdHJpbmcgPT4gdHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ3N0cmluZycpXG4gICAgLm1hcCgoY2FuZGlkYXRlKSA9PiBub3JtYWxpemVQYWNrYWdlVGFyZ2V0UGF0aChjYW5kaWRhdGUpKVxuICAgIC5maWx0ZXIoKGNhbmRpZGF0ZSk6IGNhbmRpZGF0ZSBpcyBzdHJpbmcgPT4gY2FuZGlkYXRlICE9PSBudWxsKTtcblxuICByZXR1cm4gcm9vdENhbmRpZGF0ZXMuaW5jbHVkZXMocmVsYXRpdmVGaWxlUGF0aCk7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHJlc29sdmluZyBhbiBpbXBvcnQgcGF0aCBmb3IgYSBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFBhdGhSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGltcG9ydCBwYXRoIHRvIHVzZS5cbiAgICogLSBGb3Igd29ya3NwYWNlIHBhY2thZ2VzOiB0aGUgcGFja2FnZSBuYW1lIChlLmcuLCBcIkBteW9yZy9zaGFyZWRcIilcbiAgICogLSBGb3Igbm9kZV9tb2R1bGVzIHBhY2thZ2VzOiB0aGUgcGFja2FnZSBuYW1lXG4gICAqIC0gRm9yIGxvY2FsIGZpbGVzOiBhIHJlbGF0aXZlIHBhdGggKGUuZy4sIFwiLi9zcmMvd29ya2Zsb3dzL29yZGVyLnRzXCIpXG4gICAqL1xuICBpbXBvcnRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBmaWxlIGlzIGZyb20gYSBwYWNrYWdlICh3b3Jrc3BhY2Ugb3Igbm9kZV9tb2R1bGVzKS5cbiAgICogV2hlbiB0cnVlLCB0aGUgaW1wb3J0IHNob3VsZCBnbyB0aHJvdWdoIHBhY2thZ2UgcmVzb2x1dGlvbiB3aGljaCByZXNwZWN0cyBleHBvcnQgY29uZGl0aW9ucy5cbiAgICovXG4gIGlzUGFja2FnZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGltcG9ydCBwYXRoIHRvIHVzZSBmb3IgYSBmaWxlIGluIGEgYnVuZGxlJ3MgdmlydHVhbCBlbnRyeS5cbiAqXG4gKiBGb3Igd29ya3NwYWNlIHBhY2thZ2VzIGFuZCBub2RlX21vZHVsZXMgcGFja2FnZXMsIHJldHVybnMgdGhlIHBhY2thZ2UgbmFtZVxuICogc28gdGhhdCBidW5kbGVyIHJlc29sdXRpb24gd2lsbCByZXNwZWN0IHBhY2thZ2UuanNvbiBleHBvcnRzIGFuZCBjb25kaXRpb25zLlxuICpcbiAqIEZvciBsb2NhbCBhcHAgZmlsZXMsIHJldHVybnMgYSByZWxhdGl2ZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcbiAqIEBwYXJhbSBwcm9qZWN0Um9vdCAtIEFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdFxuICogQHJldHVybnMgVGhlIGltcG9ydCBwYXRoIGFuZCB3aGV0aGVyIGl0J3MgYSBwYWNrYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdvcmtzcGFjZSBwYWNrYWdlXG4gKiBnZXRJbXBvcnRQYXRoKCcvcHJvamVjdC9wYWNrYWdlcy9zaGFyZWQvc3JjL2luZGV4LnRzJywgJy9wcm9qZWN0JylcbiAqIC8vID0+IHsgaW1wb3J0UGF0aDogJ0BteW9yZy9zaGFyZWQnLCBpc1BhY2thZ2U6IHRydWUgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBMb2NhbCBhcHAgZmlsZVxuICogZ2V0SW1wb3J0UGF0aCgnL3Byb2plY3Qvc3JjL3dvcmtmbG93cy9vcmRlci50cycsICcvcHJvamVjdCcpXG4gKiAvLyA9PiB7IGltcG9ydFBhdGg6ICcuL3NyYy93b3JrZmxvd3Mvb3JkZXIudHMnLCBpc1BhY2thZ2U6IGZhbHNlIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltcG9ydFBhdGgoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmdcbik6IEltcG9ydFBhdGhSZXN1bHQge1xuICAvLyBDaGVjayBpZiBmaWxlIGlzIGluIG5vZGVfbW9kdWxlcyBvciBhIHdvcmtzcGFjZSBwYWNrYWdlXG4gIGNvbnN0IGluTm9kZU1vZHVsZXMgPSBpc0luTm9kZU1vZHVsZXMoZmlsZVBhdGgpO1xuICBjb25zdCBpbldvcmtzcGFjZSA9XG4gICAgIWluTm9kZU1vZHVsZXMgJiYgaXNXb3Jrc3BhY2VQYWNrYWdlKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCk7XG5cbiAgaWYgKGluTm9kZU1vZHVsZXMgfHwgaW5Xb3Jrc3BhY2UpIHtcbiAgICAvLyBGaW5kIHRoZSBwYWNrYWdlLmpzb24gZm9yIHRoaXMgZmlsZVxuICAgIGNvbnN0IHBrZyA9IGZpbmRQYWNrYWdlSnNvbihmaWxlUGF0aCk7XG4gICAgaWYgKHBrZykge1xuICAgICAgY29uc3QgaXNEaXJlY3RQcm9qZWN0RGVwZW5kZW5jeSA9IGdldFByb2plY3REZXBlbmRlbmNpZXMocHJvamVjdFJvb3QpLmhhcyhcbiAgICAgICAgcGtnLm5hbWVcbiAgICAgICk7XG4gICAgICBjb25zdCBjYW5Vc2VQYWNrYWdlU3BlY2lmaWVyID0gaW5Xb3Jrc3BhY2UgfHwgaXNEaXJlY3RQcm9qZWN0RGVwZW5kZW5jeTtcblxuICAgICAgLy8gRm9yIHRyYW5zaXRpdmUgbm9kZV9tb2R1bGVzIGRlcGVuZGVuY2llcyB1bmRlciBzdHJpY3QgcGFja2FnZSBtYW5hZ2Vyc1xuICAgICAgLy8gKGZvciBleGFtcGxlLCBwbnBtKSwgaW1wb3J0aW5nIGJ5IHBhY2thZ2UgbmFtZSBjYW4gZmFpbC4gVXNlIGEgZGlyZWN0XG4gICAgICAvLyBmaWxlIHBhdGggaW1wb3J0IGluIHRob3NlIGNhc2VzLlxuICAgICAgaWYgKCFjYW5Vc2VQYWNrYWdlU3BlY2lmaWVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW1wb3J0UGF0aDogdG9SZWxhdGl2ZUltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSxcbiAgICAgICAgICBpc1BhY2thZ2U6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVmZXIgYSBwYWNrYWdlIHN1YnBhdGggaW1wb3J0IHdoZW4gdGhpcyBmaWxlIG1hcHMgdG8gYW4gZXhwb3J0LlxuICAgICAgLy8gVGhpcyBwcmVzZXJ2ZXMgdGhlIGV4YWN0IG1vZHVsZSBiZWluZyBidW5kbGVkIHdoaWxlIHN0aWxsIHJlc3BlY3RpbmdcbiAgICAgIC8vIHBhY2thZ2UgZXhwb3J0IGNvbmRpdGlvbnMuXG4gICAgICAvLyBOb3RlOiByZXNvbHZlRXhwb3J0U3VicGF0aCByZXR1cm5zIFwiXCIgZm9yIGJvdGggcm9vdCBcIi5cIiBtYXRjaGVzIGFuZFxuICAgICAgLy8gbm8gbWF0Y2g7IHJvb3QgZW50cnlwb2ludHMgYXJlIGludGVudGlvbmFsbHkgaGFuZGxlZCBiZWxvdyB2aWFcbiAgICAgIC8vIGlzUm9vdEVudHJ5cG9pbnRGaWxlKCkuXG4gICAgICBjb25zdCBzdWJwYXRoID0gcmVzb2x2ZUV4cG9ydFN1YnBhdGgoZmlsZVBhdGgsIHBrZyk7XG4gICAgICBpZiAoc3VicGF0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGltcG9ydFBhdGg6IGAke3BrZy5uYW1lfSR7c3VicGF0aH1gLFxuICAgICAgICAgIGlzUGFja2FnZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBpbXBvcnQgcGFja2FnZSByb290IHdoZW4gdGhpcyBmaWxlIGlzIHRoZSByb290IGVudHJ5cG9pbnQuXG4gICAgICAvLyBGb3IgZGVlcC9pbnRlcm5hbCBmaWxlcywgZmFsbCBiYWNrIHRvIGRpcmVjdCByZWxhdGl2ZSBpbXBvcnRzIHNvIHdlXG4gICAgICAvLyBkb24ndCBhY2NpZGVudGFsbHkgaW1wb3J0IGEgbm9uLWV4aXN0ZW50IG9yIGRpZmZlcmVudCBtb2R1bGUuXG4gICAgICBpZiAoIWlzUm9vdEVudHJ5cG9pbnRGaWxlKGZpbGVQYXRoLCBwa2cpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW1wb3J0UGF0aDogdG9SZWxhdGl2ZUltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSxcbiAgICAgICAgICBpc1BhY2thZ2U6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbXBvcnRQYXRoOiBwa2cubmFtZSxcbiAgICAgICAgaXNQYWNrYWdlOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBMb2NhbCBhcHAgZmlsZSAtIHVzZSByZWxhdGl2ZSBwYXRoXG4gIHJldHVybiB7XG4gICAgaW1wb3J0UGF0aDogdG9SZWxhdGl2ZUltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSxcbiAgICBpc1BhY2thZ2U6IGZhbHNlLFxuICB9O1xufVxuIl19
|
|
523
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLXNwZWNpZmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tb2R1bGUtc3BlY2lmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBMkJsRTs7O0dBR0c7QUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO0FBRS9EOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWdCO0lBQ3ZDLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU1QixnRUFBZ0U7SUFDaEUsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO0lBRWpDLG1EQUFtRDtJQUNuRCxPQUFPLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QixvQkFBb0I7UUFDcEIsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLG1FQUFtRTtZQUNuRSxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNyQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV0QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFD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QUF1RTtZQUN2RSw2QkFBNkI7WUFDN0Isc0VBQXNFO1lBQ3RFLGlFQUFpRTtZQUNqRSwwQkFBMEI7WUFDMUIsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osT0FBTztvQkFDTCxVQUFVLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sRUFBRTtvQkFDbkMsU0FBUyxFQUFFLElBQUk7aUJBQ2hCLENBQUM7WUFDSixDQUFDO1lBRUQsa0VBQWtFO1lBQ2xFLHNFQUFzRTtZQUN0RSxnRUFBZ0U7WUFDaEUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxPQUFPO29CQUNMLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDO29CQUN2RCxTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPO2dCQUNMLFVBQVUsRUFBRSxHQUFHLENBQUMsSUFBSTtnQkFDcEIsU0FBUyxFQUFFLElBQUk7YUFDaEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLE9BQU87UUFDTCxVQUFVLEVBQUUsb0JBQW9CLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQztRQUN2RCxTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVsYXRpdmUsIHJlc29sdmUsIHNlcCB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbi8qKlxuICogUmVzdWx0IG9mIHJlc29sdmluZyBhIG1vZHVsZSBzcGVjaWZpZXIgZm9yIGEgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVTcGVjaWZpZXJSZXN1bHQge1xuICAvKipcbiAgICogVGhlIG1vZHVsZSBzcGVjaWZpZXIgdG8gdXNlIGZvciBJRCBnZW5lcmF0aW9uLlxuICAgKiAtIEZvciBwYWNrYWdlczogXCJ7bmFtZX1Ae3ZlcnNpb259XCIgb3IgXCJ7bmFtZX0ve3N1YnBhdGh9QHt2ZXJzaW9ufVwiXG4gICAqICAgKGUuZy4sIFwicG9pbnRAMS4wLjBcIiwgXCJAbXlvcmcvc2hhcmVkQDIuMC4wXCIsIFwid29ya2Zsb3cvaW50ZXJuYWwvYnVpbHRpbnNANC4wLjBcIilcbiAgICogLSBGb3IgbG9jYWwgZmlsZXM6IHVuZGVmaW5lZCAocGx1Z2luIHdpbGwgdXNlIGRlZmF1bHQgXCIuL3JlbGF0aXZlL3BhdGhcIiBmb3JtYXQpXG4gICAqL1xuICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBQYXJzZWQgcGFja2FnZS5qc29uIGRhdGEgd2l0aCBkaXJlY3RvcnkgaW5mb3JtYXRpb24uXG4gKi9cbmludGVyZmFjZSBQYWNrYWdlSW5mbyB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBkaXI6IHN0cmluZztcbiAgZXhwb3J0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtYWluPzogc3RyaW5nO1xuICBtb2R1bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2FjaGUgZm9yIHBhY2thZ2UuanNvbiBsb29rdXBzIHRvIGF2b2lkIHJlcGVhdGVkIGZpbGVzeXN0ZW0gcmVhZHMuXG4gKiBNYXBzIGRpcmVjdG9yeSBwYXRoIHRvIHBhcnNlZCBwYWNrYWdlLmpzb24gaW5mbyBvciBudWxsIGlmIG5vdCBmb3VuZC5cbiAqL1xuY29uc3QgcGFja2FnZUpzb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQYWNrYWdlSW5mbyB8IG51bGw+KCk7XG5cbi8qKlxuICogRmluZCBhbmQgcmVhZCB0aGUgbmVhcmVzdCBwYWNrYWdlLmpzb24gZm9yIGEgZ2l2ZW4gZmlsZSBwYXRoLlxuICogUmVzdWx0cyBhcmUgY2FjaGVkIGZvciBwZXJmb3JtYW5jZS5cbiAqL1xuZnVuY3Rpb24gZmluZFBhY2thZ2VKc29uKGZpbGVQYXRoOiBzdHJpbmcpOiBQYWNrYWdlSW5mbyB8IG51bGwge1xuICBsZXQgZGlyID0gZGlybmFtZShmaWxlUGF0aCk7XG5cbiAgLy8gVHJhY2sgZGlyZWN0b3JpZXMgd2UndmUgdmlzaXRlZCBzbyB3ZSBjYW4gYmFjay1maWxsIHRoZSBjYWNoZVxuICBjb25zdCB2aXNpdGVkRGlyczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBXYWxrIHVwIHRoZSBkaXJlY3RvcnkgdHJlZSB1bnRpbCB3ZSBoaXQgdGhlIHJvb3RcbiAgd2hpbGUgKGRpciAhPT0gZGlybmFtZShkaXIpKSB7XG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICBjb25zdCBjYWNoZWQgPSBwYWNrYWdlSnNvbkNhY2hlLmdldChkaXIpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQmFjay1maWxsIGNhY2hlIGZvciBhbGwgdmlzaXRlZCBkaXJlY3RvcmllcyB3aXRoIHRoZSBzYW1lIHJlc3VsdFxuICAgICAgZm9yIChjb25zdCB2aXNpdGVkRGlyIG9mIHZpc2l0ZWREaXJzKSB7XG4gICAgICAgIHBhY2thZ2VKc29uQ2FjaGUuc2V0KHZpc2l0ZWREaXIsIGNhY2hlZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cblxuICAgIHZpc2l0ZWREaXJzLnB1c2goZGlyKTtcblxuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGpvaW4oZGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgaWYgKGV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgICBpZiAocGFyc2VkLm5hbWUgJiYgcGFyc2VkLnZlcnNpb24pIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IFBhY2thZ2VJbmZvID0ge1xuICAgICAgICAgICAgbmFtZTogcGFyc2VkLm5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9uOiBwYXJzZWQudmVyc2lvbixcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIGV4cG9ydHM6IHBhcnNlZC5leHBvcnRzLFxuICAgICAgICAgICAgbWFpbjogcGFyc2VkLm1haW4sXG4gICAgICAgICAgICBtb2R1bGU6IHBhcnNlZC5tb2R1bGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBDYWNoZSB0aGUgcmVzdWx0IGZvciB0aGlzIGRpcmVjdG9yeSBhbmQgYWxsIHZpc2l0ZWQgZGlyZWN0b3JpZXNcbiAgICAgICAgICBwYWNrYWdlSnNvbkNhY2hlLnNldChkaXIsIHJlc3VsdCk7XG4gICAgICAgICAgZm9yIChjb25zdCB2aXNpdGVkRGlyIG9mIHZpc2l0ZWREaXJzKSB7XG4gICAgICAgICAgICBwYWNrYWdlSnNvbkNhY2hlLnNldCh2aXNpdGVkRGlyLCByZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSW52YWxpZCBKU09OIG9yIG1pc3NpbmcgZmllbGRzLCBjb250aW51ZSBzZWFyY2hpbmdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkaXIgPSBkaXJuYW1lKGRpcik7XG4gIH1cblxuICAvLyBObyBwYWNrYWdlLmpzb24gZm91bmQgLSBjYWNoZSBudWxsIGZvciBhbGwgdmlzaXRlZCBkaXJlY3Rvcmllc1xuICBmb3IgKGNvbnN0IHZpc2l0ZWREaXIgb2YgdmlzaXRlZERpcnMpIHtcbiAgICBwYWNrYWdlSnNvbkNhY2hlLnNldCh2aXNpdGVkRGlyLCBudWxsKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGV4cG9ydCBzdWJwYXRoIGZvciBhIGZpbGUgd2l0aGluIGEgcGFja2FnZS5cbiAqIExvb2tzIHVwIHRoZSBwYWNrYWdlLmpzb24gZXhwb3J0cyBmaWVsZCB0byBmaW5kIHdoaWNoIHN1YnBhdGggbWFwcyB0byB0aGUgZmlsZS5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlXG4gKiBAcGFyYW0gcGtnIC0gUGFja2FnZSBpbmZvIGZyb20gZmluZFBhY2thZ2VKc29uXG4gKiBAcmV0dXJucyBUaGUgc3VicGF0aCAoZS5nLiwgXCIvaW50ZXJuYWwvYnVpbHRpbnNcIikgb3IgZW1wdHkgc3RyaW5nIGZvciByb290IGV4cG9ydFxuICovXG5mdW5jdGlvbiB0b1BhY2thZ2VSZWxhdGl2ZVBhdGgoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHBrZzogUGFja2FnZUluZm9cbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBub3JtYWxpemVkRmlsZVBhdGggPSBmaWxlUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQa2dEaXIgPSBwa2cuZGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgaWYgKCFub3JtYWxpemVkRmlsZVBhdGguc3RhcnRzV2l0aChub3JtYWxpemVkUGtnRGlyICsgJy8nKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRGaWxlUGF0aC5zdWJzdHJpbmcobm9ybWFsaXplZFBrZ0Rpci5sZW5ndGggKyAxKTtcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlRmFsbGJhY2tFeHBvcnRUYXJnZXRzKHJlbGF0aXZlUGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBmYWxsYmFja1RhcmdldHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgZXh0ZW5zaW9uRmFsbGJhY2tzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgJy50cyc6IFsnLmpzJ10sXG4gICAgJy50c3gnOiBbJy5qcyddLFxuICAgICcubXRzJzogWycubWpzJ10sXG4gICAgJy5jdHMnOiBbJy5janMnXSxcbiAgICAnLmpzeCc6IFsnLmpzJ10sXG4gIH07XG5cbiAgY29uc3QgZXh0ZW5zaW9uTWF0Y2ggPSByZWxhdGl2ZVBhdGgubWF0Y2goLyhcXC5bXi4vXFxcXF0rKSQvKTtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uTWF0Y2g/LlsxXT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBwYXRoV2l0aG91dEV4dGVuc2lvbiA9IHJlbGF0aXZlUGF0aC5zbGljZSgwLCAtZXh0ZW5zaW9uLmxlbmd0aCk7XG4gIGNvbnN0IGV4dGVuc2lvblRhcmdldHMgPSBleHRlbnNpb25GYWxsYmFja3NbZXh0ZW5zaW9uXSA/PyBbXTtcbiAgZm9yIChjb25zdCBmYWxsYmFja0V4dGVuc2lvbiBvZiBleHRlbnNpb25UYXJnZXRzKSB7XG4gICAgZmFsbGJhY2tUYXJnZXRzLmFkZChgJHtwYXRoV2l0aG91dEV4dGVuc2lvbn0ke2ZhbGxiYWNrRXh0ZW5zaW9ufWApO1xuICB9XG5cbiAgaWYgKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCdzcmMvJykpIHtcbiAgICBjb25zdCBkaXN0UGF0aFdpdGhvdXRQcmVmaXggPSByZWxhdGl2ZVBhdGguc2xpY2UoJ3NyYy8nLmxlbmd0aCk7XG4gICAgZm9yIChjb25zdCBmYWxsYmFja0V4dGVuc2lvbiBvZiBleHRlbnNpb25UYXJnZXRzKSB7XG4gICAgICBmYWxsYmFja1RhcmdldHMuYWRkKFxuICAgICAgICBgZGlzdC8ke2Rpc3RQYXRoV2l0aG91dFByZWZpeC5zbGljZSgwLCAtZXh0ZW5zaW9uLmxlbmd0aCl9JHtmYWxsYmFja0V4dGVuc2lvbn1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGZhbGxiYWNrVGFyZ2V0cyk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVFeHBvcnRTdWJwYXRoKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBwa2c6IFBhY2thZ2VJbmZvLFxuICBvcHRpb25zPzogeyBhbGxvd1NvdXJjZUZhbGxiYWNrPzogYm9vbGVhbiB9XG4pOiBzdHJpbmcge1xuICBpZiAoIXBrZy5leHBvcnRzIHx8IHR5cGVvZiBwa2cuZXhwb3J0cyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCByZWxhdGl2ZVBhdGggPSB0b1BhY2thZ2VSZWxhdGl2ZVBhdGgoZmlsZVBhdGgsIHBrZyk7XG4gIGlmICghcmVsYXRpdmVQYXRoKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY29tcGFyYWJsZVRhcmdldHMgPSBuZXcgU2V0KFtgLi8ke3JlbGF0aXZlUGF0aH1gXSk7XG4gIGlmIChvcHRpb25zPy5hbGxvd1NvdXJjZUZhbGxiYWNrKSB7XG4gICAgZm9yIChjb25zdCBmYWxsYmFja1RhcmdldCBvZiBnZXRTb3VyY2VGYWxsYmFja0V4cG9ydFRhcmdldHMocmVsYXRpdmVQYXRoKSkge1xuICAgICAgY29tcGFyYWJsZVRhcmdldHMuYWRkKGAuLyR7ZmFsbGJhY2tUYXJnZXR9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2VhcmNoIHRocm91Z2ggZXhwb3J0cyB0byBmaW5kIGEgbWF0Y2hpbmcgc3VicGF0aFxuICBmb3IgKGNvbnN0IFtzdWJwYXRoLCB0YXJnZXRdIG9mIE9iamVjdC5lbnRyaWVzKHBrZy5leHBvcnRzKSkge1xuICAgIGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gcmVzb2x2ZUV4cG9ydFRhcmdldCh0YXJnZXQpO1xuICAgIGlmIChcbiAgICAgIHJlc29sdmVkVGFyZ2V0ICYmXG4gICAgICBjb21wYXJhYmxlVGFyZ2V0cy5oYXMobm9ybWFsaXplRXhwb3J0UGF0aChyZXNvbHZlZFRhcmdldCkpXG4gICAgKSB7XG4gICAgICAvLyBGb3VuZCBhIG1hdGNoIC0gcmV0dXJuIHRoZSBzdWJwYXRoIHdpdGhvdXQgdGhlIGxlYWRpbmcgXCIuXCJcbiAgICAgIC8vIGUuZy4sIFwiLi9pbnRlcm5hbC9idWlsdGluc1wiIC0+IFwiL2ludGVybmFsL2J1aWx0aW5zXCJcbiAgICAgIHJldHVybiBzdWJwYXRoID09PSAnLicgPyAnJyA6IHN1YnBhdGguc3Vic3RyaW5nKDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFuIGV4cG9ydCB0YXJnZXQgdG8gYSBmaWxlIHBhdGgsIGhhbmRsaW5nIGNvbmRpdGlvbmFsIGV4cG9ydHMgYW5kIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUV4cG9ydFRhcmdldCh0YXJnZXQ6IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8vIEhhbmRsZSBhcnJheSBleHBvcnRzIChmYWxsYmFjayBjaGFpbnMpXG4gIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGFyZ2V0KSB7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVFeHBvcnRUYXJnZXQoaXRlbSk7XG4gICAgICBpZiAocmVzb2x2ZWQpIHJldHVybiByZXNvbHZlZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gQ29uZGl0aW9uYWwgZXhwb3J0IC0gdHJ5IGNvbW1vbiBjb25kaXRpb25zIGluIG9yZGVyIG9mIHByZWZlcmVuY2VcbiAgICBjb25zdCBjb25kaXRpb25zID0gWyd3b3JrZmxvdycsICdkZWZhdWx0JywgJ3JlcXVpcmUnLCAnaW1wb3J0JywgJ25vZGUnXTtcbiAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICh0YXJnZXQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2NvbmRpdGlvbl07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBIYW5kbGUgbmVzdGVkIGNvbmRpdGlvbmFscyBvciBhcnJheXNcbiAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZCA9IHJlc29sdmVFeHBvcnRUYXJnZXQodmFsdWUpO1xuICAgICAgICBpZiAobmVzdGVkKSByZXR1cm4gbmVzdGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbiBleHBvcnQgcGF0aCBmb3IgY29tcGFyaXNvbi5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRXhwb3J0UGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBFbnN1cmUgaXQgc3RhcnRzIHdpdGggLi9cbiAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICByZXR1cm4gJy4vJyArIHBhdGg7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBmaWxlIHBhdGggaXMgaW5zaWRlIG5vZGVfbW9kdWxlcy5cbiAqL1xuZnVuY3Rpb24gaXNJbk5vZGVNb2R1bGVzKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBmaWxlUGF0aC5zcGxpdChzZXApLmpvaW4oJy8nKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpO1xufVxuXG4vKipcbiAqIENhY2hlIGZvciBwcm9qZWN0IGRlcGVuZGVuY2llcyB0byBhdm9pZCByZXBlYXRlZCBmaWxlc3lzdGVtIHJlYWRzLlxuICogTWFwcyBwcm9qZWN0IHJvb3QgdG8gc2V0IG9mIGRlcGVuZGVuY3kgcGFja2FnZSBuYW1lcy5cbiAqL1xuY29uc3QgcHJvamVjdERlcHNDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuLyoqXG4gKiBHZXQgYWxsIGRlcGVuZGVuY2llcyAoaW5jbHVkaW5nIGRldkRlcGVuZGVuY2llcykgZm9yIGEgcHJvamVjdC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvamVjdERlcGVuZGVuY2llcyhwcm9qZWN0Um9vdDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCBjYWNoZWQgPSBwcm9qZWN0RGVwc0NhY2hlLmdldChwcm9qZWN0Um9vdCk7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgY29uc3QgZGVwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBwa2dQYXRoID0gam9pbihwcm9qZWN0Um9vdCwgJ3BhY2thZ2UuanNvbicpO1xuXG4gIGlmIChleGlzdHNTeW5jKHBrZ1BhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMocGtnUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gICAgICAvLyBDb2xsZWN0IGFsbCBkZXBlbmRlbmN5IHR5cGVzXG4gICAgICBmb3IgKGNvbnN0IGRlcFR5cGUgb2YgW1xuICAgICAgICAnZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgJ2RldkRlcGVuZGVuY2llcycsXG4gICAgICAgICdwZWVyRGVwZW5kZW5jaWVzJyxcbiAgICAgICAgJ29wdGlvbmFsRGVwZW5kZW5jaWVzJyxcbiAgICAgIF0pIHtcbiAgICAgICAgY29uc3QgZGVwT2JqID0gcGFyc2VkW2RlcFR5cGVdO1xuICAgICAgICBpZiAoZGVwT2JqICYmIHR5cGVvZiBkZXBPYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGRlcE9iaikpIHtcbiAgICAgICAgICAgIGRlcHMuYWRkKG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSW52YWxpZCBKU09OIG9yIGZpbGUgbm90IHJlYWRhYmxlXG4gICAgfVxuICB9XG5cbiAgcHJvamVjdERlcHNDYWNoZS5zZXQocHJvamVjdFJvb3QsIGRlcHMpO1xuICByZXR1cm4gZGVwcztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGZpbGUgcGF0aCBpcyBpbnNpZGUgYSB3b3Jrc3BhY2UgcGFja2FnZSB0aGF0IGlzIGEgZGVwZW5kZW5jeSBvZiB0aGUgcHJvamVjdC5cbiAqIFRoaXMgaXMgYSBoZXVyaXN0aWMgLSB3ZSBjaGVjayBpZiB0aGUgZmlsZSBpcyBpbiBhIGRpcmVjdG9yeSB3aXRoIGEgcGFja2FnZS5qc29uXG4gKiB0aGF0IGhhcyBhIFwibmFtZVwiIGZpZWxkLCBpcyBOT1QgaW4gbm9kZV9tb2R1bGVzLCBhbmQgaXMgbGlzdGVkIGFzIGEgZGVwZW5kZW5jeVxuICogb2YgdGhlIHByb2plY3QuXG4gKi9cbmZ1bmN0aW9uIGlzV29ya3NwYWNlUGFja2FnZShmaWxlUGF0aDogc3RyaW5nLCBwcm9qZWN0Um9vdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChpc0luTm9kZU1vZHVsZXMoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcGtnID0gZmluZFBhY2thZ2VKc29uKGZpbGVQYXRoKTtcbiAgaWYgKCFwa2cpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcGFja2FnZS5qc29uIGlzIG5vdCB0aGUgcm9vdCBwYWNrYWdlLmpzb25cbiAgLy8gVXNlIHJlc29sdmUoKSB0byBub3JtYWxpemUgcGF0aHMgZm9yIGNyb3NzLXBsYXRmb3JtIGNvbXBhcmlzb25cbiAgY29uc3Qgcm9vdFBrZ0RpciA9IHJlc29sdmUocHJvamVjdFJvb3QpO1xuICBjb25zdCBwa2dEaXIgPSByZXNvbHZlKHBrZy5kaXIpO1xuXG4gIC8vIElmIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSBpcyB0aGUgcHJvamVjdCByb290LCBpdCdzIG5vdCBhIHdvcmtzcGFjZSBwYWNrYWdlXG4gIGlmIChwa2dEaXIgPT09IHJvb3RQa2dEaXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBGb3VuZCBhIHBhY2thZ2UuanNvbiB0aGF0J3Mgbm90IHRoZSByb290LlxuICAvLyBPbmx5IHRyZWF0IGl0IGFzIGEgd29ya3NwYWNlIHBhY2thZ2UgaWYgaXQncyBhY3R1YWxseSBhIGRlcGVuZGVuY3lcbiAgLy8gb2YgdGhlIGN1cnJlbnQgcHJvamVjdC4gVGhpcyBwcmV2ZW50cyBzaWJsaW5nIGFwcHMgaW4gYSBtb25vcmVwb1xuICAvLyBmcm9tIGJlaW5nIGluY29ycmVjdGx5IHRyZWF0ZWQgYXMgaW1wb3J0YWJsZSBwYWNrYWdlcy5cbiAgY29uc3QgcHJvamVjdERlcHMgPSBnZXRQcm9qZWN0RGVwZW5kZW5jaWVzKHByb2plY3RSb290KTtcbiAgcmV0dXJuIHByb2plY3REZXBzLmhhcyhwa2cubmFtZSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbW9kdWxlIHNwZWNpZmllciBmb3IgYSBmaWxlLlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUgYmVpbmcgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSBwcm9qZWN0Um9vdCAtIEFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdCAodXN1YWxseSBwcm9jZXNzLmN3ZCgpKVxuICogQHJldHVybnMgVGhlIG1vZHVsZSBzcGVjaWZpZXIgcmVzdWx0XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZpbGUgaW4gbm9kZV9tb2R1bGVzIChyb290IGV4cG9ydClcbiAqIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoJy9wcm9qZWN0L25vZGVfbW9kdWxlcy9wb2ludC9kaXN0L2luZGV4LmpzJywgJy9wcm9qZWN0JylcbiAqIC8vID0+IHsgbW9kdWxlU3BlY2lmaWVyOiAncG9pbnRAMS4wLjAnIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRmlsZSBpbiBub2RlX21vZHVsZXMgKHN1YnBhdGggZXhwb3J0KVxuICogcmVzb2x2ZU1vZHVsZVNwZWNpZmllcignL3Byb2plY3Qvbm9kZV9tb2R1bGVzL3dvcmtmbG93L2Rpc3QvaW50ZXJuYWwvYnVpbHRpbnMuanMnLCAnL3Byb2plY3QnKVxuICogLy8gPT4geyBtb2R1bGVTcGVjaWZpZXI6ICd3b3JrZmxvdy9pbnRlcm5hbC9idWlsdGluc0A0LjAuMCcgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFeHBvcnRlZCByb290IGZpbGUgaW4gd29ya3NwYWNlIHBhY2thZ2VcbiAqIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoJy9wcm9qZWN0L3BhY2thZ2VzL3NoYXJlZC9zcmMvaW5kZXgudHMnLCAnL3Byb2plY3QnKVxuICogLy8gPT4geyBtb2R1bGVTcGVjaWZpZXI6ICdAbXlvcmcvc2hhcmVkQDAuMC4wJyB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE5vbi1leHBvcnRlZCAvIGRlZXAgcGFja2FnZSBmaWxlXG4gKiByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKCcvcHJvamVjdC9wYWNrYWdlcy9zaGFyZWQvc3JjL2ludGVybmFsL2Zvby50cycsICcvcHJvamVjdCcpXG4gKiAvLyA9PiB7IG1vZHVsZVNwZWNpZmllcjogdW5kZWZpbmVkIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTG9jYWwgYXBwIGZpbGVcbiAqIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoJy9wcm9qZWN0L3NyYy93b3JrZmxvd3Mvb3JkZXIudHMnLCAnL3Byb2plY3QnKVxuICogLy8gPT4geyBtb2R1bGVTcGVjaWZpZXI6IHVuZGVmaW5lZCB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nXG4pOiBNb2R1bGVTcGVjaWZpZXJSZXN1bHQge1xuICAvLyBDaGVjayBpZiBmaWxlIGlzIGluIG5vZGVfbW9kdWxlcyBvciBhIHdvcmtzcGFjZSBwYWNrYWdlXG4gIGNvbnN0IGluTm9kZU1vZHVsZXMgPSBpc0luTm9kZU1vZHVsZXMoZmlsZVBhdGgpO1xuICBjb25zdCBpbldvcmtzcGFjZSA9XG4gICAgIWluTm9kZU1vZHVsZXMgJiYgaXNXb3Jrc3BhY2VQYWNrYWdlKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCk7XG5cbiAgaWYgKCFpbk5vZGVNb2R1bGVzICYmICFpbldvcmtzcGFjZSkge1xuICAgIC8vIExvY2FsIGFwcCBmaWxlIC0gdXNlIGRlZmF1bHQgcmVsYXRpdmUgcGF0aCBmb3JtYXRcbiAgICByZXR1cm4geyBtb2R1bGVTcGVjaWZpZXI6IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgLy8gRmluZCB0aGUgcGFja2FnZS5qc29uIGZvciB0aGlzIGZpbGVcbiAgY29uc3QgcGtnID0gZmluZFBhY2thZ2VKc29uKGZpbGVQYXRoKTtcbiAgaWYgKCFwa2cpIHtcbiAgICAvLyBDb3VsZG4ndCBmaW5kIHBhY2thZ2UuanNvbiAtIGZhbGwgYmFjayB0byBkZWZhdWx0XG4gICAgcmV0dXJuIHsgbW9kdWxlU3BlY2lmaWVyOiB1bmRlZmluZWQgfTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgdGhlIGV4cG9ydCBzdWJwYXRoIChlLmcuLCBcIi9pbnRlcm5hbC9idWlsdGluc1wiIGZvciBcIndvcmtmbG93L2ludGVybmFsL2J1aWx0aW5zXCIpXG4gIGNvbnN0IHN1YnBhdGggPSByZXNvbHZlRXhwb3J0U3VicGF0aChmaWxlUGF0aCwgcGtnLCB7XG4gICAgYWxsb3dTb3VyY2VGYWxsYmFjazogdHJ1ZSxcbiAgfSk7XG5cbiAgaWYgKHN1YnBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kdWxlU3BlY2lmaWVyOiBgJHtwa2cubmFtZX0ke3N1YnBhdGh9QCR7cGtnLnZlcnNpb259YCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlzUm9vdEVudHJ5cG9pbnRGaWxlKGZpbGVQYXRoLCBwa2cpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZHVsZVNwZWNpZmllcjogYCR7cGtnLm5hbWV9QCR7cGtnLnZlcnNpb259YCxcbiAgICB9O1xuICB9XG5cbiAgLy8gTm9uLWV4cG9ydGVkIHBhY2thZ2UgZmlsZSAoZGVlcCBpbXBvcnQgdGhhdCBpc24ndCByZWFjaGFibGUgYXMgYVxuICAvLyBwYWNrYWdlIHNwZWNpZmllcikuIFJldHVybmluZyB1bmRlZmluZWQgbWFrZXMgdGhlIFNXQyBwbHVnaW4gZmFsbCBiYWNrXG4gIC8vIHRvIHRoZSByZWxhdGl2ZSBmaWxlIHBhdGgsIHdoaWNoIGtlZXBzIElEcyB1bmlxdWUgcGVyIGZpbGUuIFByZXZpb3VzbHlcbiAgLy8gZXZlcnkgbm9uLWV4cG9ydGVkIGZpbGUgY29sbGFwc2VkIHRvIFwibmFtZUB2ZXJzaW9uXCIsIGNhdXNpbmcgc2FtZS1uYW1lZFxuICAvLyBzdGVwL3dvcmtmbG93IGZ1bmN0aW9ucyBpbiBkaWZmZXJlbnQgZmlsZXMgdG8gc2lsZW50bHkgb3ZlcndyaXRlIGVhY2hcbiAgLy8gb3RoZXIgYXQgcnVudGltZSByZWdpc3RyYXRpb247IHRoZSBidWlsZC10aW1lIGR1cGxpY2F0ZS1JRCBjaGVjayBub3dcbiAgLy8gYWxzbyBjYXRjaGVzIHRoYXQgY2xhc3Mgb2YgY29sbGlzaW9uLlxuICByZXR1cm4ge1xuICAgIG1vZHVsZVNwZWNpZmllcjogdW5kZWZpbmVkLFxuICB9O1xufVxuXG4vKipcbiAqIFN0cmlwIHRoZSB0cmFpbGluZyBcIkA8dmVyc2lvbj5cIiBzdWZmaXggZnJvbSBhIG1vZHVsZSBzcGVjaWZpZXIgcHJvZHVjZWQgYnlcbiAqIGByZXNvbHZlTW9kdWxlU3BlY2lmaWVyYCwgbGVhdmluZyB0aGUgYmFyZSBgbmFtZWAgb3IgYG5hbWUvc3VicGF0aGAgZm9ybS5cbiAqXG4gKiBVc2UgdGhpcyB3aGVuIHlvdSB3YW50IHRvIGNvbXBhcmUgb3IgZGVkdXBlIHNwZWNpZmllcnMgYWNyb3NzIHZlcnNpb25zXG4gKiAoZS5nLiB0cmVhdGluZyBgQHdvcmtmbG93L2FpL2FnZW50QDUuMC4wLWJldGEuNGAgYW5kXG4gKiBgQHdvcmtmbG93L2FpL2FnZW50QDUuMC4wLWJldGEuNWAgYXMgdGhlIHNhbWUgbG9naWNhbCBtb2R1bGUpLlxuICpcbiAqIENvbG9jYXRlZCB3aXRoIGByZXNvbHZlTW9kdWxlU3BlY2lmaWVyYCBzbyB0aGUgY29uc3RydWN0aW9uIGFuZCBwYXJzaW5nXG4gKiBzdGF5IGluIHN5bmMg4oCUIHNlZSB0aGUgYCR7cGtnLm5hbWV9JHtzdWJwYXRofUAke3BrZy52ZXJzaW9ufWAgYW5kXG4gKiBgJHtwa2cubmFtZX1AJHtwa2cudmVyc2lvbn1gIHBhdGhzIGFib3ZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBQYWNrYWdlVmVyc2lvbihzcGVjaWZpZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFRoZSB2ZXJzaW9uIGlzIGFsd2F5cyB0aGUgZmluYWwgc2VnbWVudCBhZnRlciB0aGUgbGFzdCBcIkBcIi4gQ29uc3RyYWluXG4gIC8vIG1hdGNoaW5nIHRvIGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBhcHBlYXIgaW4gYSBwYWNrYWdlIG5hbWUgb3Igc3VicGF0aFxuICAvLyAobm8gXCIvXCIsIG5vIG5lc3RlZCBcIkBcIikgc28gc2NvcGVkIHBhY2thZ2VzIGxpa2UgYEB3b3JrZmxvdy9haUAxLjAuMGBcbiAgLy8ga2VlcCB0aGVpciBsZWFkaW5nIFwiQHdvcmtmbG93L2FpXCIuXG4gIHJldHVybiBzcGVjaWZpZXIucmVwbGFjZSgvQFteL0BdKyQvLCAnJyk7XG59XG5cbi8qKlxuICogQ2xlYXIgdGhlIHBhY2thZ2UuanNvbiBjYWNoZS4gVXNlZnVsIGZvciB0ZXN0aW5nIG9yIHdoZW4gcGFja2FnZS5qc29uIGZpbGVzIG1heSBoYXZlIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhck1vZHVsZVNwZWNpZmllckNhY2hlKCk6IHZvaWQge1xuICBwYWNrYWdlSnNvbkNhY2hlLmNsZWFyKCk7XG4gIHByb2plY3REZXBzQ2FjaGUuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgZmlsZSBwYXRoIHRvIGEgcmVsYXRpdmUgaW1wb3J0IHBhdGggZnJvbSBwcm9qZWN0IHJvb3QuXG4gKi9cbmZ1bmN0aW9uIHRvUmVsYXRpdmVJbXBvcnRQYXRoKGZpbGVQYXRoOiBzdHJpbmcsIHByb2plY3RSb290OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkUHJvamVjdFJvb3QgPSBwcm9qZWN0Um9vdC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRGaWxlUGF0aCA9IGZpbGVQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICBsZXQgcmVsYXRpdmVQYXRoOiBzdHJpbmc7XG4gIGlmIChub3JtYWxpemVkRmlsZVBhdGguc3RhcnRzV2l0aChub3JtYWxpemVkUHJvamVjdFJvb3QgKyAnLycpKSB7XG4gICAgcmVsYXRpdmVQYXRoID0gbm9ybWFsaXplZEZpbGVQYXRoLnN1YnN0cmluZyhcbiAgICAgIG5vcm1hbGl6ZWRQcm9qZWN0Um9vdC5sZW5ndGggKyAxXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGaWxlIGlzIG91dHNpZGUgcHJvamVjdCByb290LCB1c2UgdGhlIGZ1bGwgcGF0aCBzZWdtZW50cyBhZnRlciBjb21tb24gYW5jZXN0b3JcbiAgICByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShwcm9qZWN0Um9vdCwgZmlsZVBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfVxuXG4gIC8vIEVuc3VyZSByZWxhdGl2ZSBwYXRocyBzdGFydCB3aXRoIC4vXG4gIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cblxuICByZXR1cm4gcmVsYXRpdmVQYXRoO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHBhY2thZ2UgZXhwb3J0cyBpbmNsdWRlIGEgcm9vdCBlbnRyeSAoXCIuXCIpLlxuICogU3RyaW5nL2FycmF5L2NvbmRpdGlvbmFsIG9iamVjdCBleHBvcnRzIGFyZSBhbGwgY29uc2lkZXJlZCByb290IGV4cG9ydHMuXG4gKi9cbmZ1bmN0aW9uIGhhc1Jvb3RFeHBvcnQoZXhwb3J0c0ZpZWxkOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZXhwb3J0c0ZpZWxkID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGV4cG9ydHNGaWVsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghZXhwb3J0c0ZpZWxkIHx8IHR5cGVvZiBleHBvcnRzRmllbGQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHNGaWVsZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gIC8vIENvbmRpdGlvbmFsIGV4cG9ydHMgb2JqZWN0IChlLmcuIHsgXCJpbXBvcnRcIjogXCIuLi5cIiwgXCJkZWZhdWx0XCI6IFwiLi4uXCIgfSlcbiAgLy8gcmVwcmVzZW50cyB0aGUgcm9vdCBleHBvcnQuXG4gIGlmIChrZXlzLmxlbmd0aCA+IDAgJiYga2V5cy5ldmVyeSgoa2V5KSA9PiAha2V5LnN0YXJ0c1dpdGgoJy4nKSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAnLicgaW4gKGV4cG9ydHNGaWVsZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgcGFja2FnZSB0YXJnZXQgcGF0aCB0byBhIGNvbXBhcmFibGUgcGFja2FnZS1yZWxhdGl2ZSBwYXRoLlxuICogUmV0dXJucyBudWxsIGZvciBpbnZhbGlkL3Vuc3VwcG9ydGVkIHBhdGhzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYWNrYWdlVGFyZ2V0UGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCcuLycpKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQuc3Vic3RyaW5nKDIpO1xuICB9XG4gIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBub3JtYWxpemVkLnN1YnN0cmluZygxKTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgZmlsZVBhdGggaXMgdGhlIHBhY2thZ2Ugcm9vdCBlbnRyeXBvaW50LlxuICogVGhpcyBjaGVja3Mgcm9vdCBleHBvcnRzIGZpcnN0LCB0aGVuIG1haW4vbW9kdWxlL2luZGV4IGZhbGxiYWNrcyB3aGVuIGV4cG9ydHMgYXJlIGFic2VudC5cbiAqL1xuZnVuY3Rpb24gaXNSb290RW50cnlwb2ludEZpbGUoZmlsZVBhdGg6IHN0cmluZywgcGtnOiBQYWNrYWdlSW5mbyk6IGJvb2xlYW4ge1xuICBjb25zdCBub3JtYWxpemVkRmlsZVBhdGggPSBmaWxlUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQa2dEaXIgPSBwa2cuZGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICBpZiAoIW5vcm1hbGl6ZWRGaWxlUGF0aC5zdGFydHNXaXRoKG5vcm1hbGl6ZWRQa2dEaXIgKyAnLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IG5vcm1hbGl6ZWRGaWxlUGF0aC5zdWJzdHJpbmcoXG4gICAgbm9ybWFsaXplZFBrZ0Rpci5sZW5ndGggKyAxXG4gICk7XG5cbiAgaWYgKHBrZy5leHBvcnRzKSB7XG4gICAgbGV0IHJvb3RUYXJnZXQ6IHVua25vd247XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgcGtnLmV4cG9ydHMgPT09ICdvYmplY3QnICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShwa2cuZXhwb3J0cykgJiZcbiAgICAgICcuJyBpbiBwa2cuZXhwb3J0c1xuICAgICkge1xuICAgICAgcm9vdFRhcmdldCA9IChwa2cuZXhwb3J0cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJy4nXTtcbiAgICB9IGVsc2UgaWYgKGhhc1Jvb3RFeHBvcnQocGtnLmV4cG9ydHMpKSB7XG4gICAgICByb290VGFyZ2V0ID0gcGtnLmV4cG9ydHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZFRhcmdldCA9IHJlc29sdmVFeHBvcnRUYXJnZXQocm9vdFRhcmdldCk7XG4gICAgaWYgKCFyZXNvbHZlZFRhcmdldCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXQgPSBub3JtYWxpemVQYWNrYWdlVGFyZ2V0UGF0aChyZXNvbHZlZFRhcmdldCk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRUYXJnZXQgPT09IHJlbGF0aXZlRmlsZVBhdGg7XG4gIH1cblxuICBjb25zdCByb290Q2FuZGlkYXRlcyA9IFtcbiAgICBwa2cubW9kdWxlLFxuICAgIHBrZy5tYWluLFxuICAgICdpbmRleC5qcycsXG4gICAgJ2luZGV4Lm1qcycsXG4gICAgJ2luZGV4LmNqcycsXG4gICAgJ2luZGV4LnRzJyxcbiAgICAnaW5kZXgubXRzJyxcbiAgICAnaW5kZXguY3RzJyxcbiAgXVxuICAgIC5maWx0ZXIoKGNhbmRpZGF0ZSk6IGNhbmRpZGF0ZSBpcyBzdHJpbmcgPT4gdHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ3N0cmluZycpXG4gICAgLm1hcCgoY2FuZGlkYXRlKSA9PiBub3JtYWxpemVQYWNrYWdlVGFyZ2V0UGF0aChjYW5kaWRhdGUpKVxuICAgIC5maWx0ZXIoKGNhbmRpZGF0ZSk6IGNhbmRpZGF0ZSBpcyBzdHJpbmcgPT4gY2FuZGlkYXRlICE9PSBudWxsKTtcblxuICByZXR1cm4gcm9vdENhbmRpZGF0ZXMuaW5jbHVkZXMocmVsYXRpdmVGaWxlUGF0aCk7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHJlc29sdmluZyBhbiBpbXBvcnQgcGF0aCBmb3IgYSBmaWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFBhdGhSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGltcG9ydCBwYXRoIHRvIHVzZS5cbiAgICogLSBGb3Igd29ya3NwYWNlIHBhY2thZ2VzOiB0aGUgcGFja2FnZSBuYW1lIChlLmcuLCBcIkBteW9yZy9zaGFyZWRcIilcbiAgICogLSBGb3Igbm9kZV9tb2R1bGVzIHBhY2thZ2VzOiB0aGUgcGFja2FnZSBuYW1lXG4gICAqIC0gRm9yIGxvY2FsIGZpbGVzOiBhIHJlbGF0aXZlIHBhdGggKGUuZy4sIFwiLi9zcmMvd29ya2Zsb3dzL29yZGVyLnRzXCIpXG4gICAqL1xuICBpbXBvcnRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBmaWxlIGlzIGZyb20gYSBwYWNrYWdlICh3b3Jrc3BhY2Ugb3Igbm9kZV9tb2R1bGVzKS5cbiAgICogV2hlbiB0cnVlLCB0aGUgaW1wb3J0IHNob3VsZCBnbyB0aHJvdWdoIHBhY2thZ2UgcmVzb2x1dGlvbiB3aGljaCByZXNwZWN0cyBleHBvcnQgY29uZGl0aW9ucy5cbiAgICovXG4gIGlzUGFja2FnZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGltcG9ydCBwYXRoIHRvIHVzZSBmb3IgYSBmaWxlIGluIGEgYnVuZGxlJ3MgdmlydHVhbCBlbnRyeS5cbiAqXG4gKiBGb3Igd29ya3NwYWNlIHBhY2thZ2VzIGFuZCBub2RlX21vZHVsZXMgcGFja2FnZXMsIHJldHVybnMgdGhlIHBhY2thZ2UgbmFtZVxuICogc28gdGhhdCBidW5kbGVyIHJlc29sdXRpb24gd2lsbCByZXNwZWN0IHBhY2thZ2UuanNvbiBleHBvcnRzIGFuZCBjb25kaXRpb25zLlxuICpcbiAqIEZvciBsb2NhbCBhcHAgZmlsZXMsIHJldHVybnMgYSByZWxhdGl2ZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVcbiAqIEBwYXJhbSBwcm9qZWN0Um9vdCAtIEFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3Qgcm9vdFxuICogQHJldHVybnMgVGhlIGltcG9ydCBwYXRoIGFuZCB3aGV0aGVyIGl0J3MgYSBwYWNrYWdlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdvcmtzcGFjZSBwYWNrYWdlXG4gKiBnZXRJbXBvcnRQYXRoKCcvcHJvamVjdC9wYWNrYWdlcy9zaGFyZWQvc3JjL2luZGV4LnRzJywgJy9wcm9qZWN0JylcbiAqIC8vID0+IHsgaW1wb3J0UGF0aDogJ0BteW9yZy9zaGFyZWQnLCBpc1BhY2thZ2U6IHRydWUgfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBMb2NhbCBhcHAgZmlsZVxuICogZ2V0SW1wb3J0UGF0aCgnL3Byb2plY3Qvc3JjL3dvcmtmbG93cy9vcmRlci50cycsICcvcHJvamVjdCcpXG4gKiAvLyA9PiB7IGltcG9ydFBhdGg6ICcuL3NyYy93b3JrZmxvd3Mvb3JkZXIudHMnLCBpc1BhY2thZ2U6IGZhbHNlIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltcG9ydFBhdGgoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmdcbik6IEltcG9ydFBhdGhSZXN1bHQge1xuICAvLyBDaGVjayBpZiBmaWxlIGlzIGluIG5vZGVfbW9kdWxlcyBvciBhIHdvcmtzcGFjZSBwYWNrYWdlXG4gIGNvbnN0IGluTm9kZU1vZHVsZXMgPSBpc0luTm9kZU1vZHVsZXMoZmlsZVBhdGgpO1xuICBjb25zdCBpbldvcmtzcGFjZSA9XG4gICAgIWluTm9kZU1vZHVsZXMgJiYgaXNXb3Jrc3BhY2VQYWNrYWdlKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCk7XG5cbiAgaWYgKGluTm9kZU1vZHVsZXMgfHwgaW5Xb3Jrc3BhY2UpIHtcbiAgICAvLyBGaW5kIHRoZSBwYWNrYWdlLmpzb24gZm9yIHRoaXMgZmlsZVxuICAgIGNvbnN0IHBrZyA9IGZpbmRQYWNrYWdlSnNvbihmaWxlUGF0aCk7XG4gICAgaWYgKHBrZykge1xuICAgICAgY29uc3QgaXNEaXJlY3RQcm9qZWN0RGVwZW5kZW5jeSA9IGdldFByb2plY3REZXBlbmRlbmNpZXMocHJvamVjdFJvb3QpLmhhcyhcbiAgICAgICAgcGtnLm5hbWVcbiAgICAgICk7XG4gICAgICBjb25zdCBjYW5Vc2VQYWNrYWdlU3BlY2lmaWVyID0gaW5Xb3Jrc3BhY2UgfHwgaXNEaXJlY3RQcm9qZWN0RGVwZW5kZW5jeTtcblxuICAgICAgLy8gRm9yIHRyYW5zaXRpdmUgbm9kZV9tb2R1bGVzIGRlcGVuZGVuY2llcyB1bmRlciBzdHJpY3QgcGFja2FnZSBtYW5hZ2Vyc1xuICAgICAgLy8gKGZvciBleGFtcGxlLCBwbnBtKSwgaW1wb3J0aW5nIGJ5IHBhY2thZ2UgbmFtZSBjYW4gZmFpbC4gVXNlIGEgZGlyZWN0XG4gICAgICAvLyBmaWxlIHBhdGggaW1wb3J0IGluIHRob3NlIGNhc2VzLlxuICAgICAgaWYgKCFjYW5Vc2VQYWNrYWdlU3BlY2lmaWVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW1wb3J0UGF0aDogdG9SZWxhdGl2ZUltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSxcbiAgICAgICAgICBpc1BhY2thZ2U6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVmZXIgYSBwYWNrYWdlIHN1YnBhdGggaW1wb3J0IHdoZW4gdGhpcyBmaWxlIG1hcHMgdG8gYW4gZXhwb3J0LlxuICAgICAgLy8gVGhpcyBwcmVzZXJ2ZXMgdGhlIGV4YWN0IG1vZHVsZSBiZWluZyBidW5kbGVkIHdoaWxlIHN0aWxsIHJlc3BlY3RpbmdcbiAgICAgIC8vIHBhY2thZ2UgZXhwb3J0IGNvbmRpdGlvbnMuXG4gICAgICAvLyBOb3RlOiByZXNvbHZlRXhwb3J0U3VicGF0aCByZXR1cm5zIFwiXCIgZm9yIGJvdGggcm9vdCBcIi5cIiBtYXRjaGVzIGFuZFxuICAgICAgLy8gbm8gbWF0Y2g7IHJvb3QgZW50cnlwb2ludHMgYXJlIGludGVudGlvbmFsbHkgaGFuZGxlZCBiZWxvdyB2aWFcbiAgICAgIC8vIGlzUm9vdEVudHJ5cG9pbnRGaWxlKCkuXG4gICAgICBjb25zdCBzdWJwYXRoID0gcmVzb2x2ZUV4cG9ydFN1YnBhdGgoZmlsZVBhdGgsIHBrZyk7XG4gICAgICBpZiAoc3VicGF0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGltcG9ydFBhdGg6IGAke3BrZy5uYW1lfSR7c3VicGF0aH1gLFxuICAgICAgICAgIGlzUGFja2FnZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBpbXBvcnQgcGFja2FnZSByb290IHdoZW4gdGhpcyBmaWxlIGlzIHRoZSByb290IGVudHJ5cG9pbnQuXG4gICAgICAvLyBGb3IgZGVlcC9pbnRlcm5hbCBmaWxlcywgZmFsbCBiYWNrIHRvIGRpcmVjdCByZWxhdGl2ZSBpbXBvcnRzIHNvIHdlXG4gICAgICAvLyBkb24ndCBhY2NpZGVudGFsbHkgaW1wb3J0IGEgbm9uLWV4aXN0ZW50IG9yIGRpZmZlcmVudCBtb2R1bGUuXG4gICAgICBpZiAoIWlzUm9vdEVudHJ5cG9pbnRGaWxlKGZpbGVQYXRoLCBwa2cpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW1wb3J0UGF0aDogdG9SZWxhdGl2ZUltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSxcbiAgICAgICAgICBpc1BhY2thZ2U6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbXBvcnRQYXRoOiBwa2cubmFtZSxcbiAgICAgICAgaXNQYWNrYWdlOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBMb2NhbCBhcHAgZmlsZSAtIHVzZSByZWxhdGl2ZSBwYXRoXG4gIHJldHVybiB7XG4gICAgaW1wb3J0UGF0aDogdG9SZWxhdGl2ZUltcG9ydFBhdGgoZmlsZVBhdGgsIHByb2plY3RSb290KSxcbiAgICBpc1BhY2thZ2U6IGZhbHNlLFxuICB9O1xufVxuIl19
|