@aws-cdk/toolkit-lib 1.24.0 → 1.25.0
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/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/deploy/index.d.ts +15 -1
- package/lib/actions/deploy/index.js +1 -1
- package/lib/actions/deploy/private/deployment-method.d.ts +5 -9
- package/lib/actions/deploy/private/deployment-method.js +8 -1
- package/lib/actions/diagnose/index.d.ts +89 -0
- package/lib/actions/diagnose/index.js +3 -0
- package/lib/actions/diff/private/helpers.js +12 -15
- package/lib/actions/index.d.ts +2 -0
- package/lib/actions/index.js +3 -1
- package/lib/actions/orphan/index.d.ts +18 -0
- package/lib/actions/orphan/index.js +3 -0
- package/lib/api/aws-auth/sdk.d.ts +2 -1
- package/lib/api/aws-auth/sdk.js +2 -1
- package/lib/api/bootstrap/bootstrap-environment.js +4 -4
- package/lib/api/bootstrap/bootstrap-template.yaml +5 -16
- package/lib/api/bootstrap/deploy-bootstrap.js +9 -1
- package/lib/api/cloud-assembly/stack-selector.d.ts +1 -1
- package/lib/api/cloud-assembly/stack-selector.js +1 -1
- package/lib/api/cloudformation/index.d.ts +1 -0
- package/lib/api/cloudformation/index.js +2 -1
- package/lib/api/cloudformation/logical-id-map.d.ts +24 -0
- package/lib/api/cloudformation/logical-id-map.js +45 -0
- package/lib/api/cloudformation/stack-helpers.d.ts +6 -0
- package/lib/api/cloudformation/stack-helpers.js +12 -1
- package/lib/api/deployments/cfn-api.d.ts +8 -17
- package/lib/api/deployments/cfn-api.js +60 -71
- package/lib/api/deployments/deploy-stack.d.ts +6 -2
- package/lib/api/deployments/deploy-stack.js +42 -61
- package/lib/api/deployments/deployments.d.ts +3 -2
- package/lib/api/deployments/deployments.js +31 -7
- package/lib/api/diagnosing/diagnosis-formatting.d.ts +13 -0
- package/lib/api/diagnosing/diagnosis-formatting.js +139 -0
- package/lib/api/diagnosing/early-validation.d.ts +49 -0
- package/lib/api/diagnosing/early-validation.js +81 -0
- package/lib/api/diagnosing/stack-diagnoser.d.ts +99 -0
- package/lib/api/diagnosing/stack-diagnoser.js +338 -0
- package/lib/api/diagnosing/tree-builder.d.ts +12 -0
- package/lib/api/diagnosing/tree-builder.js +86 -0
- package/lib/api/diagnosing/tree.d.ts +13 -0
- package/lib/api/diagnosing/tree.js +61 -0
- package/lib/api/diff/diff-formatter.js +8 -12
- package/lib/api/drift/drift-formatter.d.ts +0 -1
- package/lib/api/drift/drift-formatter.js +3 -10
- package/lib/api/hotswap/hotswap-deployments.js +14 -2
- package/lib/api/hotswap/hotswap-template-cache.d.ts +19 -0
- package/lib/api/hotswap/hotswap-template-cache.js +96 -0
- package/lib/api/index.d.ts +1 -0
- package/lib/api/index.js +2 -1
- package/lib/api/io/private/messages.d.ts +5 -0
- package/lib/api/io/private/messages.js +23 -1
- package/lib/api/io/toolkit-action.d.ts +1 -1
- package/lib/api/io/toolkit-action.js +1 -1
- package/lib/api/orphan/orphaner.d.ts +75 -0
- package/lib/api/orphan/orphaner.js +246 -0
- package/lib/api/orphan/private/helpers.d.ts +56 -0
- package/lib/api/orphan/private/helpers.js +219 -0
- package/lib/api/orphan/private/index.d.ts +2 -0
- package/lib/api/orphan/private/index.js +18 -0
- package/lib/api/resource-import/importer.d.ts +5 -1
- package/lib/api/resource-import/importer.js +26 -6
- package/lib/api/settings.d.ts +3 -1
- package/lib/api/settings.js +16 -3
- package/lib/api/source-tracing/index.d.ts +2 -0
- package/lib/api/source-tracing/index.js +18 -0
- package/lib/api/source-tracing/private/source-tracing.d.ts +16 -0
- package/lib/api/source-tracing/private/source-tracing.js +8 -0
- package/lib/api/source-tracing/private/stack-source-tracing.d.ts +32 -0
- package/lib/api/source-tracing/private/stack-source-tracing.js +134 -0
- package/lib/api/source-tracing/types.d.ts +9 -0
- package/lib/api/source-tracing/types.js +3 -0
- package/lib/api/stack-events/resource-errors.d.ts +82 -0
- package/lib/api/stack-events/resource-errors.js +129 -0
- package/lib/api/stack-events/stack-activity-monitor.d.ts +2 -29
- package/lib/api/stack-events/stack-activity-monitor.js +5 -94
- package/lib/api/stack-events/stack-event-poller.d.ts +71 -8
- package/lib/api/stack-events/stack-event-poller.js +107 -13
- package/lib/api/work-graph/work-graph.d.ts +4 -0
- package/lib/api/work-graph/work-graph.js +6 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/index_bg.wasm +0 -0
- package/lib/toolkit/toolkit.d.ts +17 -1
- package/lib/toolkit/toolkit.js +194 -57
- package/lib/util/arrays.d.ts +1 -0
- package/lib/util/arrays.js +23 -1
- package/lib/util/type-brands.d.ts +1 -1
- package/lib/util/type-brands.js +1 -1
- package/package.json +11 -11
- package/lib/api/deployments/early-validation.d.ts +0 -19
- package/lib/api/deployments/early-validation.js +0 -57
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { StackEvent } from '@aws-sdk/client-cloudformation';
|
|
2
|
+
import type { ResourceError } from './resource-errors';
|
|
3
|
+
import { ResourceErrors } from './resource-errors';
|
|
2
4
|
import type { ICloudFormationClient } from '../aws-auth/private';
|
|
3
5
|
export interface StackEventPollerProps {
|
|
4
6
|
/**
|
|
@@ -10,20 +12,46 @@ export interface StackEventPollerProps {
|
|
|
10
12
|
*/
|
|
11
13
|
readonly parentStackLogicalIds?: string[];
|
|
12
14
|
/**
|
|
13
|
-
*
|
|
15
|
+
* A configurable algorithm to indicate when we should stop consuming the event stream.
|
|
14
16
|
*
|
|
15
|
-
*
|
|
17
|
+
* The initialPollRange object will be called on the first occurrence of
|
|
18
|
+
* polling. It will be shown all events in a chunk in turn, newest-to-oldest,
|
|
19
|
+
* and should decide the oldest event we're still interested in. We will not
|
|
20
|
+
* go back further consuming the event stream.
|
|
21
|
+
*
|
|
22
|
+
* On subsequent polls, we will use the events we've already seen to decide when to stop
|
|
23
|
+
* polling.
|
|
24
|
+
*/
|
|
25
|
+
readonly initialPollRange: IPollRange;
|
|
26
|
+
}
|
|
27
|
+
export interface IPollRange {
|
|
28
|
+
/**
|
|
29
|
+
* Whether polling should stop on seeing this event
|
|
16
30
|
*/
|
|
17
|
-
|
|
31
|
+
shouldStop(event: ResourceEvent): 'stop-include' | 'stop-exclude' | 'continue';
|
|
32
|
+
}
|
|
33
|
+
export declare abstract class PollRange {
|
|
34
|
+
/**
|
|
35
|
+
* Only include events since than a given time
|
|
36
|
+
*/
|
|
37
|
+
static sinceTimestamp(startTime: number): IPollRange;
|
|
18
38
|
/**
|
|
19
|
-
* Stop
|
|
39
|
+
* Stop when we see the root stack entering this status
|
|
20
40
|
*
|
|
21
41
|
* Should be something like `CREATE_IN_PROGRESS`, `UPDATE_IN_PROGRESS`,
|
|
22
42
|
* `DELETE_IN_PROGRESS, `ROLLBACK_IN_PROGRESS`.
|
|
43
|
+
*/
|
|
44
|
+
static sinceStackStatus(statuses: string[]): IPollRange;
|
|
45
|
+
/**
|
|
46
|
+
* Stop when we see events that belong to a different operation
|
|
23
47
|
*
|
|
24
|
-
*
|
|
48
|
+
* Records the first OperationId, and stops as soon as we see events that don't have it anymore.
|
|
49
|
+
*/
|
|
50
|
+
static mostRecentOperation(): IPollRange;
|
|
51
|
+
/**
|
|
52
|
+
* A poll range decider that always returns 'continue', consuming the entire CFN event stream.
|
|
25
53
|
*/
|
|
26
|
-
|
|
54
|
+
static consumeAll(): IPollRange;
|
|
27
55
|
}
|
|
28
56
|
export interface ResourceEvent {
|
|
29
57
|
/**
|
|
@@ -39,20 +67,55 @@ export interface ResourceEvent {
|
|
|
39
67
|
*
|
|
40
68
|
* @default false
|
|
41
69
|
*/
|
|
42
|
-
readonly
|
|
70
|
+
readonly isRootStackEvent?: boolean;
|
|
43
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Poll for stack events, potentially multiple times as new events come in over time
|
|
74
|
+
*
|
|
75
|
+
* Includes events from nested stacks.
|
|
76
|
+
*
|
|
77
|
+
* Polling may happen in multiple bursts, and every burst consumes events from newest-to-oldest
|
|
78
|
+
* from the stack events API, so events are consumed in the following order:
|
|
79
|
+
*
|
|
80
|
+
* ```
|
|
81
|
+
* CONSUMING
|
|
82
|
+
*
|
|
83
|
+
* stack events (new) z y x w v u t s r q p o n m l k j i h g f e d c b a (old)
|
|
84
|
+
* bursts [ poll() #1 ]
|
|
85
|
+
* [ poll() #2 ] ^
|
|
86
|
+
* [ poll() #3 ] initialPollRange
|
|
87
|
+
* decides to stop here
|
|
88
|
+
* ```
|
|
89
|
+
*
|
|
90
|
+
* Events are sorted old-to-new before being returned, so the events returned by each
|
|
91
|
+
* poll are:
|
|
92
|
+
*
|
|
93
|
+
* ```
|
|
94
|
+
* poll() #1 => [e f g h i j k l]
|
|
95
|
+
* poll() #2 => [m n o p q r s]
|
|
96
|
+
* poll() #3 => [t u v w x y z]
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
*/
|
|
44
100
|
export declare class StackEventPoller {
|
|
45
101
|
private readonly cfn;
|
|
46
102
|
private readonly props;
|
|
103
|
+
/**
|
|
104
|
+
* All events we've seen so far
|
|
105
|
+
*/
|
|
47
106
|
readonly events: ResourceEvent[];
|
|
48
107
|
complete: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* A record of the errors we've seen
|
|
110
|
+
*/
|
|
111
|
+
readonly errors: ResourceErrors;
|
|
49
112
|
private readonly eventIds;
|
|
50
113
|
private readonly nestedStackPollers;
|
|
51
114
|
constructor(cfn: ICloudFormationClient, props: StackEventPollerProps);
|
|
52
115
|
/**
|
|
53
116
|
* From all accumulated events, return only the errors
|
|
54
117
|
*/
|
|
55
|
-
get resourceErrors():
|
|
118
|
+
get resourceErrors(): ReadonlyArray<ResourceError>;
|
|
56
119
|
/**
|
|
57
120
|
* Poll for new stack events
|
|
58
121
|
*
|
|
@@ -1,12 +1,101 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StackEventPoller = void 0;
|
|
3
|
+
exports.StackEventPoller = exports.PollRange = void 0;
|
|
4
|
+
const resource_errors_1 = require("./resource-errors");
|
|
4
5
|
const util_1 = require("../../util");
|
|
6
|
+
class PollRange {
|
|
7
|
+
/**
|
|
8
|
+
* Only include events since than a given time
|
|
9
|
+
*/
|
|
10
|
+
static sinceTimestamp(startTime) {
|
|
11
|
+
return {
|
|
12
|
+
shouldStop(event) {
|
|
13
|
+
return event.event.Timestamp.valueOf() < startTime ? 'stop-exclude' : 'continue';
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Stop when we see the root stack entering this status
|
|
19
|
+
*
|
|
20
|
+
* Should be something like `CREATE_IN_PROGRESS`, `UPDATE_IN_PROGRESS`,
|
|
21
|
+
* `DELETE_IN_PROGRESS, `ROLLBACK_IN_PROGRESS`.
|
|
22
|
+
*/
|
|
23
|
+
static sinceStackStatus(statuses) {
|
|
24
|
+
return {
|
|
25
|
+
shouldStop(event) {
|
|
26
|
+
return event.isRootStackEvent && statuses.includes(event.event.ResourceStatus ?? '') ? 'stop-include' : 'continue';
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Stop when we see events that belong to a different operation
|
|
32
|
+
*
|
|
33
|
+
* Records the first OperationId, and stops as soon as we see events that don't have it anymore.
|
|
34
|
+
*/
|
|
35
|
+
static mostRecentOperation() {
|
|
36
|
+
let operationId;
|
|
37
|
+
return {
|
|
38
|
+
shouldStop(event) {
|
|
39
|
+
if (operationId === undefined) {
|
|
40
|
+
operationId = event.event.OperationId;
|
|
41
|
+
return 'continue';
|
|
42
|
+
}
|
|
43
|
+
return event.event.OperationId === operationId ? 'continue' : 'stop-exclude';
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A poll range decider that always returns 'continue', consuming the entire CFN event stream.
|
|
49
|
+
*/
|
|
50
|
+
static consumeAll() {
|
|
51
|
+
return {
|
|
52
|
+
shouldStop() {
|
|
53
|
+
return 'continue';
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.PollRange = PollRange;
|
|
59
|
+
/**
|
|
60
|
+
* Poll for stack events, potentially multiple times as new events come in over time
|
|
61
|
+
*
|
|
62
|
+
* Includes events from nested stacks.
|
|
63
|
+
*
|
|
64
|
+
* Polling may happen in multiple bursts, and every burst consumes events from newest-to-oldest
|
|
65
|
+
* from the stack events API, so events are consumed in the following order:
|
|
66
|
+
*
|
|
67
|
+
* ```
|
|
68
|
+
* CONSUMING
|
|
69
|
+
*
|
|
70
|
+
* stack events (new) z y x w v u t s r q p o n m l k j i h g f e d c b a (old)
|
|
71
|
+
* bursts [ poll() #1 ]
|
|
72
|
+
* [ poll() #2 ] ^
|
|
73
|
+
* [ poll() #3 ] initialPollRange
|
|
74
|
+
* decides to stop here
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* Events are sorted old-to-new before being returned, so the events returned by each
|
|
78
|
+
* poll are:
|
|
79
|
+
*
|
|
80
|
+
* ```
|
|
81
|
+
* poll() #1 => [e f g h i j k l]
|
|
82
|
+
* poll() #2 => [m n o p q r s]
|
|
83
|
+
* poll() #3 => [t u v w x y z]
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
*/
|
|
5
87
|
class StackEventPoller {
|
|
6
88
|
cfn;
|
|
7
89
|
props;
|
|
90
|
+
/**
|
|
91
|
+
* All events we've seen so far
|
|
92
|
+
*/
|
|
8
93
|
events = [];
|
|
9
94
|
complete = false;
|
|
95
|
+
/**
|
|
96
|
+
* A record of the errors we've seen
|
|
97
|
+
*/
|
|
98
|
+
errors = new resource_errors_1.ResourceErrors();
|
|
10
99
|
eventIds = new Set();
|
|
11
100
|
nestedStackPollers = {};
|
|
12
101
|
constructor(cfn, props) {
|
|
@@ -17,7 +106,7 @@ class StackEventPoller {
|
|
|
17
106
|
* From all accumulated events, return only the errors
|
|
18
107
|
*/
|
|
19
108
|
get resourceErrors() {
|
|
20
|
-
return this.
|
|
109
|
+
return this.errors.all;
|
|
21
110
|
}
|
|
22
111
|
/**
|
|
23
112
|
* Poll for new stack events
|
|
@@ -41,9 +130,13 @@ class StackEventPoller {
|
|
|
41
130
|
// Return what we have so far
|
|
42
131
|
events.sort((a, b) => a.event.Timestamp.valueOf() - b.event.Timestamp.valueOf());
|
|
43
132
|
this.events.push(...events);
|
|
133
|
+
this.errors.update(...events);
|
|
44
134
|
return events;
|
|
45
135
|
}
|
|
46
136
|
async doPoll() {
|
|
137
|
+
// If we already have events and we poll again, we can only get newer events up to
|
|
138
|
+
// events we've already seen. No need to invoke the "oldestEvent" decider again.
|
|
139
|
+
const stopDecider = this.eventIds.size > 0 ? PollRange.consumeAll() : this.props.initialPollRange;
|
|
47
140
|
const events = [];
|
|
48
141
|
try {
|
|
49
142
|
let nextToken;
|
|
@@ -51,26 +144,27 @@ class StackEventPoller {
|
|
|
51
144
|
while (!finished) {
|
|
52
145
|
const page = await this.cfn.describeStackEvents({ StackName: this.props.stackName, NextToken: nextToken });
|
|
53
146
|
for (const event of page?.StackEvents ?? []) {
|
|
54
|
-
// Event from before we were interested in 'em
|
|
55
|
-
if (this.props.startTime !== undefined && event.Timestamp.valueOf() < this.props.startTime) {
|
|
56
|
-
return events;
|
|
57
|
-
}
|
|
58
147
|
// Already seen this one
|
|
59
148
|
if (this.eventIds.has(event.EventId)) {
|
|
60
149
|
return events;
|
|
61
150
|
}
|
|
62
|
-
this.eventIds.add(event.EventId);
|
|
63
151
|
const isParentStackEvent = (0, util_1.isRootStackEvent)(event);
|
|
64
|
-
if (isParentStackEvent && this.props.stackStatuses?.includes(event.ResourceStatus ?? '')) {
|
|
65
|
-
return events;
|
|
66
|
-
}
|
|
67
152
|
// Fresh event
|
|
68
153
|
const resEvent = {
|
|
69
154
|
event: event,
|
|
70
155
|
parentStackLogicalIds: this.props.parentStackLogicalIds ?? [],
|
|
71
|
-
|
|
156
|
+
isRootStackEvent: isParentStackEvent,
|
|
72
157
|
};
|
|
158
|
+
// Make a stop decision
|
|
159
|
+
const stopDecision = stopDecider.shouldStop(resEvent);
|
|
160
|
+
if (stopDecision === 'stop-exclude') {
|
|
161
|
+
return events;
|
|
162
|
+
}
|
|
163
|
+
this.eventIds.add(event.EventId);
|
|
73
164
|
events.push(resEvent);
|
|
165
|
+
if (stopDecision === 'stop-include') {
|
|
166
|
+
return events;
|
|
167
|
+
}
|
|
74
168
|
if (!isParentStackEvent &&
|
|
75
169
|
event.ResourceType === 'AWS::CloudFormation::Stack' &&
|
|
76
170
|
isStackBeginOperationState(event.ResourceStatus)) {
|
|
@@ -111,7 +205,7 @@ class StackEventPoller {
|
|
|
111
205
|
this.nestedStackPollers[logicalId] = new StackEventPoller(this.cfn, {
|
|
112
206
|
stackName: physicalResourceId,
|
|
113
207
|
parentStackLogicalIds: parentStackLogicalIds,
|
|
114
|
-
|
|
208
|
+
initialPollRange: PollRange.sinceTimestamp(event.Timestamp.valueOf()),
|
|
115
209
|
});
|
|
116
210
|
}
|
|
117
211
|
}
|
|
@@ -129,4 +223,4 @@ function isStackBeginOperationState(state) {
|
|
|
129
223
|
function isStackTerminalState(state) {
|
|
130
224
|
return !(state ?? '').endsWith('_IN_PROGRESS');
|
|
131
225
|
}
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stZXZlbnQtcG9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhY2stZXZlbnQtcG9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFDQUFrRTtBQW1EbEUsTUFBYSxnQkFBZ0I7SUFRUjtJQUNBO0lBUkgsTUFBTSxHQUFvQixFQUFFLENBQUM7SUFDdEMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUVoQixRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM3QixrQkFBa0IsR0FBcUMsRUFBRSxDQUFDO0lBRTNFLFlBQ21CLEdBQTBCLEVBQzFCLEtBQTRCO1FBRDVCLFFBQUcsR0FBSCxHQUFHLENBQXVCO1FBQzFCLFVBQUssR0FBTCxLQUFLLENBQXVCO0lBRS9DLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLEtBQUssQ0FBQyxJQUFJO1FBQ2YsTUFBTSxNQUFNLEdBQW9CLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRXBELHVEQUF1RDtRQUN2RCxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQzFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxJQUFJLENBQUMsa0JB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QTBCLENBQUMsS0FBeUI7SUFDM0QsT0FBTztRQUNMLG9CQUFvQjtRQUNwQixvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLDZCQUE2QjtRQUM3QixzQkFBc0I7S0FDdkIsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEtBQXlCO0lBQ3JELE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RhY2tFdmVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UsIGlzUm9vdFN0YWNrRXZlbnQgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgSUNsb3VkRm9ybWF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vYXdzLWF1dGgvcHJpdmF0ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tFdmVudFBvbGxlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayB0byBwb2xsXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSURzIG9mIHBhcmVudCBzdGFja3Mgb2YgdGhpcyByZXNvdXJjZSwgaW4gY2FzZSBvZiByZXNvdXJjZXMgaW4gbmVzdGVkIHN0YWNrc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50U3RhY2tMb2dpY2FsSWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCBmb3IgdGhlIG9sZGVzdCBldmVudCB3ZSdyZSBpbnRlcmVzdGVkIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUmVhZCBhbGwgZXZlbnRzXG4gICAqL1xuICByZWFkb25seSBzdGFydFRpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFN0b3AgcmVhZGluZyB3aGVuIHdlIHNlZSB0aGUgc3RhY2sgZW50ZXJpbmcgdGhpcyBzdGF0dXNcbiAgICpcbiAgICogU2hvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGBDUkVBVEVfSU5fUFJPR1JFU1NgLCBgVVBEQVRFX0lOX1BST0dSRVNTYCxcbiAgICogYERFTEVURV9JTl9QUk9HUkVTUywgYFJPTExCQUNLX0lOX1BST0dSRVNTYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBSZWFkIGFsbCBldmVudHNcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrU3RhdHVzZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUV2ZW50IHtcbiAgLyoqXG4gICAqIFRoZSBTdGFjayBFdmVudCBhcyByZWNlaXZlZCBmcm9tIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICByZWFkb25seSBldmVudDogU3RhY2tFdmVudDtcblxuICAvKipcbiAgICogSURzIG9mIHBhcmVudCBzdGFja3Mgb2YgdGhlIHJlc291cmNlLCBpbiBjYXNlIG9mIHJlc291cmNlcyBpbiBuZXN0ZWQgc3RhY2tzXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZXZlbnQgcmVnYXJkcyB0aGUgcm9vdCBzdGFja1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNTdGFja0V2ZW50PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN0YWNrRXZlbnRQb2xsZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgZXZlbnRzOiBSZXNvdXJjZUV2ZW50W10gPSBbXTtcbiAgcHVibGljIGNvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5lc3RlZFN0YWNrUG9sbGVyczogUmVjb3JkPHN0cmluZywgU3RhY2tFdmVudFBvbGxlcj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFN0YWNrRXZlbnRQb2xsZXJQcm9wcyxcbiAgKSB7XG4gIH1cblxuICAvKipcbiAgICogRnJvbSBhbGwgYWNjdW11bGF0ZWQgZXZlbnRzLCByZXR1cm4gb25seSB0aGUgZXJyb3JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlRXJyb3JzKCk6IFJlc291cmNlRXZlbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRzLmZpbHRlcigoZSkgPT4gZS5ldmVudC5SZXNvdXJjZVN0YXR1cz8uZW5kc1dpdGgoJ19GQUlMRUQnKSAmJiAhZS5pc1N0YWNrRXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGwgZm9yIG5ldyBzdGFjayBldmVudHNcbiAgICpcbiAgICogV2lsbCByZWFkIGFsbCBldmVudHMgdGhhdCBhcmUgYXZhaWxhYmxlIHVwIHVudGlsIHRoZSBvbGRlc3QgZXZlbnRzXG4gICAqIGluZGljYXRlZCBieSB0aGUgY29uc3RydWN0b3IgZmlsdGVycywgb3IgdW50aWwgaXQgZW5jb3VudGVycyBldmVudHMgdGhhdCBpdFxuICAgKiBoYXMgYWxyZWFkeSByZWFkIGJlZm9yZS5cbiAgICpcbiAgICogUmVjdXJzZXMgaW50byBuZXN0ZWQgc3RhY2tzLCBhbmQgcmV0dXJucyBldmVudHMgb2xkLXRvLW5ldy4gTXVsdGlwbGVcbiAgICogaW52b2NhdGlvbnMgdG8gYHBvbGxgIHdpbGwgcmV0dXJuICpuZXdlciogZXZlbnRzIChhbHNvIGluIG9sZC10by1uZXcgb3JkZXIpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHBvbGwoKTogUHJvbWlzZTxSZXNvdXJjZUV2ZW50W10+IHtcbiAgICBjb25zdCBldmVudHM6IFJlc291cmNlRXZlbnRbXSA9IGF3YWl0IHRoaXMuZG9Qb2xsKCk7XG5cbiAgICAvLyBBbHNvIHBvbGwgYWxsIG5lc3RlZCBzdGFja3Mgd2UncmUgY3VycmVudGx5IHRyYWNraW5nXG4gICAgZm9yIChjb25zdCBbbG9naWNhbElkLCBwb2xsZXJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMubmVzdGVkU3RhY2tQb2xsZXJzKSkge1xuICAgICAgZXZlbnRzLnB1c2goLi4uKGF3YWl0IHBvbGxlci5wb2xsKCkpKTtcbiAgICAgIGlmIChwb2xsZXIuY29tcGxldGUpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubmVzdGVkU3RhY2tQb2xsZXJzW2xvZ2ljYWxJZF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHdoYXQgd2UgaGF2ZSBzbyBmYXJcbiAgICBldmVudHMuc29ydCgoYSwgYikgPT4gYS5ldmVudC5UaW1lc3RhbXAhLnZhbHVlT2YoKSAtIGIuZXZlbnQuVGltZXN0YW1wIS52YWx1ZU9mKCkpO1xuICAgIHRoaXMuZXZlbnRzLnB1c2goLi4uZXZlbnRzKTtcbiAgICByZXR1cm4gZXZlbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkb1BvbGwoKTogUHJvbWlzZTxSZXNvdXJjZUV2ZW50W10+IHtcbiAgICBjb25zdCBldmVudHM6IFJlc291cmNlRXZlbnRbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcblxuICAgICAgd2hpbGUgKCFmaW5pc2hlZCkge1xuICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgdGhpcy5jZm4uZGVzY3JpYmVTdGFja0V2ZW50cyh7IFN0YWNrTmFtZTogdGhpcy5wcm9wcy5zdGFja05hbWUsIE5leHRUb2tlbjogbmV4dFRva2VuIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHBhZ2U/LlN0YWNrRXZlbnRzID8/IFtdKSB7XG4gICAgICAgICAgLy8gRXZlbnQgZnJvbSBiZWZvcmUgd2Ugd2VyZSBpbnRlcmVzdGVkIGluICdlbVxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLnN0YXJ0VGltZSAhPT0gdW5kZWZpbmVkICYmIGV2ZW50LlRpbWVzdGFtcCEudmFsdWVPZigpIDwgdGhpcy5wcm9wcy5zdGFydFRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWxyZWFkeSBzZWVuIHRoaXMgb25lXG4gICAgICAgICAgaWYgKHRoaXMuZXZlbnRJZHMuaGFzKGV2ZW50LkV2ZW50SWQhKSkge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50cztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ldmVudElkcy5hZGQoZXZlbnQuRXZlbnRJZCEpO1xuXG4gICAgICAgICAgY29uc3QgaXNQYXJlbnRTdGFja0V2ZW50ID0gaXNSb290U3RhY2tFdmVudChldmVudCk7XG4gICAgICAgICAgaWYgKGlzUGFyZW50U3RhY2tFdmVudCAmJiB0aGlzLnByb3BzLnN0YWNrU3RhdHVzZXM/LmluY2x1ZGVzKGV2ZW50LlJlc291cmNlU3RhdHVzID8/ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50cztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGcmVzaCBldmVudFxuICAgICAgICAgIGNvbnN0IHJlc0V2ZW50OiBSZXNvdXJjZUV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiB0aGlzLnByb3BzLnBhcmVudFN0YWNrTG9naWNhbElkcyA/PyBbXSxcbiAgICAgICAgICAgIGlzU3RhY2tFdmVudDogaXNQYXJlbnRTdGFja0V2ZW50LFxuICAgICAgICAgIH07XG4gICAgICAgICAgZXZlbnRzLnB1c2gocmVzRXZlbnQpO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlzUGFyZW50U3RhY2tFdmVudCAmJlxuICAgICAgICAgICAgICBldmVudC5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycgJiZcbiAgICAgICAgICAgICAgaXNTdGFja0JlZ2luT3BlcmF0aW9uU3RhdGUoZXZlbnQuUmVzb3VyY2VTdGF0dXMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZXZlbnQgaXMgbm90IGZvciBgdGhpc2Agc3RhY2sgYW5kIGhhcyBhIHBoeXNpY2FsIHJlc291cmNlIElkLCByZWN1cnNpdmVseSBjYWxsIGZvciBldmVudHMgaW4gdGhlIG5lc3RlZCBzdGFja1xuICAgICAgICAgICAgdGhpcy50cmFja05lc3RlZFN0YWNrKGV2ZW50LCBbLi4uKHRoaXMucHJvcHMucGFyZW50U3RhY2tMb2dpY2FsSWRzID8/IFtdKSwgZXZlbnQuTG9naWNhbFJlc291cmNlSWQgPz8gJyddKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNQYXJlbnRTdGFja0V2ZW50ICYmIGlzU3RhY2tUZXJtaW5hbFN0YXRlKGV2ZW50LlJlc291cmNlU3RhdHVzKSkge1xuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbmV4dFRva2VuID0gcGFnZT8uTmV4dFRva2VuO1xuICAgICAgICBpZiAobmV4dFRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmICghKGUubmFtZSA9PT0gJ1ZhbGlkYXRpb25FcnJvcicgJiYgZm9ybWF0RXJyb3JNZXNzYWdlKGUpID09PSBgU3RhY2sgWyR7dGhpcy5wcm9wcy5zdGFja05hbWV9XSBkb2VzIG5vdCBleGlzdGApKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiB0aGUgQ1JFQVRFX0lOX1BST0dSRVNTLCBVUERBVEVfSU5fUFJPR1JFU1MsIERFTEVURV9JTl9QUk9HUkVTUyBldmVudCBvZiBhIG5lc3RlZCBzdGFjaywgcG9sbCB0aGUgbmVzdGVkIHN0YWNrIHVwZGF0ZXNcbiAgICovXG4gIHByaXZhdGUgdHJhY2tOZXN0ZWRTdGFjayhldmVudDogU3RhY2tFdmVudCwgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGxvZ2ljYWxJZCA9IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkO1xuICAgIGNvbnN0IHBoeXNpY2FsUmVzb3VyY2VJZCA9IGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZDtcblxuICAgIC8vIFRoZSBDUkVBVEVfSU5fUFJPR1JFU1MgZXZlbnQgZm9yIGEgTmVzdGVkIFN0YWNrIGlzIGVtaXR0ZWQgdHdpY2U7IGZpcnN0IHdpdGhvdXQgYSBQaHlzaWNhbFJlc291cmNlSWRcbiAgICAvLyBhbmQgdGhlbiB3aXRoLiBJZ25vcmUgdGhpcyBldmVudCBpZiB3ZSBkb24ndCBoYXZlIHRoYXQgcHJvcGVydHkgeWV0LlxuICAgIC8vXG4gICAgLy8gKEF0IHRoaXMgcG9pbnQsIEkgYWxzbyBkb24ndCB0cnVzdCB0aGF0IGxvZ2ljYWxJZCBpcyBhbHdheXMgZ29pbmcgdG8gYmUgdGhlcmUgc28gdmFsaWRhdGUgdGhhdCBhcyB3ZWxsKVxuICAgIGlmICghbG9naWNhbElkIHx8ICFwaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubmVzdGVkU3RhY2tQb2xsZXJzW2xvZ2ljYWxJZF0pIHtcbiAgICAgIHRoaXMubmVzdGVkU3RhY2tQb2xsZXJzW2xvZ2ljYWxJZF0gPSBuZXcgU3RhY2tFdmVudFBvbGxlcih0aGlzLmNmbiwge1xuICAgICAgICBzdGFja05hbWU6IHBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICAgICAgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiBwYXJlbnRTdGFja0xvZ2ljYWxJZHMsXG4gICAgICAgIHN0YXJ0VGltZTogZXZlbnQuVGltZXN0YW1wIS52YWx1ZU9mKCksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdGFja0JlZ2luT3BlcmF0aW9uU3RhdGUoc3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gW1xuICAgICdDUkVBVEVfSU5fUFJPR1JFU1MnLFxuICAgICdVUERBVEVfSU5fUFJPR1JFU1MnLFxuICAgICdERUxFVEVfSU5fUFJPR1JFU1MnLFxuICAgICdVUERBVEVfUk9MTEJBQ0tfSU5fUFJPR1JFU1MnLFxuICAgICdST0xMQkFDS19JTl9QUk9HUkVTUycsXG4gIF0uaW5jbHVkZXMoc3RhdGUgPz8gJycpO1xufVxuXG5mdW5jdGlvbiBpc1N0YWNrVGVybWluYWxTdGF0ZShzdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiAhKHN0YXRlID8/ICcnKS5lbmRzV2l0aCgnX0lOX1BST0dSRVNTJyk7XG59XG4iXX0=
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stZXZlbnQtcG9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhY2stZXZlbnQtcG9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHVEQUFtRDtBQUNuRCxxQ0FBa0U7QUFtQ2xFLE1BQXNCLFNBQVM7SUFDN0I7O09BRUc7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQWlCO1FBQzVDLE9BQU87WUFDTCxVQUFVLENBQUMsS0FBSztnQkFDZCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDcEYsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBa0I7UUFDL0MsT0FBTztZQUNMLFVBQVUsQ0FBQyxLQUFLO2dCQUNkLE9BQU8sS0FBSyxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ3JILENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CO1FBQy9CLElBQUksV0FBK0IsQ0FBQztRQUNwQyxPQUFPO1lBQ0wsVUFBVSxDQUFDLEtBQUs7Z0JBQ2QsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzlCLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztvQkFDdEMsT0FBTyxVQUFVLENBQUM7Z0JBQ3BCLENBQUM7Z0JBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxD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LEVBQUUsa0JBQWtCO2dCQUM3QixxQkFBcUIsRUFBRSxxQkFBcUI7Z0JBQzVDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN2RSxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBckpELDRDQXFKQztBQUVELFNBQVMsMEJBQTBCLENBQUMsS0FBeUI7SUFDM0QsT0FBTztRQUNMLG9CQUFvQjtRQUNwQixvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLDZCQUE2QjtRQUM3QixzQkFBc0I7S0FDdkIsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEtBQXlCO0lBQ3JELE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDakQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RhY2tFdmVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlRXJyb3IgfSBmcm9tICcuL3Jlc291cmNlLWVycm9ycyc7XG5pbXBvcnQgeyBSZXNvdXJjZUVycm9ycyB9IGZyb20gJy4vcmVzb3VyY2UtZXJyb3JzJztcbmltcG9ydCB7IGZvcm1hdEVycm9yTWVzc2FnZSwgaXNSb290U3RhY2tFdmVudCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRGb3JtYXRpb25DbGllbnQgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcblxuZXhwb3J0IGludGVyZmFjZSBTdGFja0V2ZW50UG9sbGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRvIHBvbGxcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJRHMgb2YgcGFyZW50IHN0YWNrcyBvZiB0aGlzIHJlc291cmNlLCBpbiBjYXNlIG9mIHJlc291cmNlcyBpbiBuZXN0ZWQgc3RhY2tzXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRTdGFja0xvZ2ljYWxJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBjb25maWd1cmFibGUgYWxnb3JpdGhtIHRvIGluZGljYXRlIHdoZW4gd2Ugc2hvdWxkIHN0b3AgY29uc3VtaW5nIHRoZSBldmVudCBzdHJlYW0uXG4gICAqXG4gICAqIFRoZSBpbml0aWFsUG9sbFJhbmdlIG9iamVjdCB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZlxuICAgKiBwb2xsaW5nLiAgSXQgd2lsbCBiZSBzaG93biBhbGwgZXZlbnRzIGluIGEgY2h1bmsgaW4gdHVybiwgbmV3ZXN0LXRvLW9sZGVzdCxcbiAgICogYW5kIHNob3VsZCBkZWNpZGUgdGhlIG9sZGVzdCBldmVudCB3ZSdyZSBzdGlsbCBpbnRlcmVzdGVkIGluLiBXZSB3aWxsIG5vdFxuICAgKiBnbyBiYWNrIGZ1cnRoZXIgY29uc3VtaW5nIHRoZSBldmVudCBzdHJlYW0uXG4gICAqXG4gICAqIE9uIHN1YnNlcXVlbnQgcG9sbHMsIHdlIHdpbGwgdXNlIHRoZSBldmVudHMgd2UndmUgYWxyZWFkeSBzZWVuIHRvIGRlY2lkZSB3aGVuIHRvIHN0b3BcbiAgICogcG9sbGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGluaXRpYWxQb2xsUmFuZ2U6IElQb2xsUmFuZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBvbGxSYW5nZSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHBvbGxpbmcgc2hvdWxkIHN0b3Agb24gc2VlaW5nIHRoaXMgZXZlbnRcbiAgICovXG4gIHNob3VsZFN0b3AoZXZlbnQ6IFJlc291cmNlRXZlbnQpOiAnc3RvcC1pbmNsdWRlJyB8ICdzdG9wLWV4Y2x1ZGUnIHwgJ2NvbnRpbnVlJztcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvbGxSYW5nZSB7XG4gIC8qKlxuICAgKiBPbmx5IGluY2x1ZGUgZXZlbnRzIHNpbmNlIHRoYW4gYSBnaXZlbiB0aW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNpbmNlVGltZXN0YW1wKHN0YXJ0VGltZTogbnVtYmVyKTogSVBvbGxSYW5nZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3VsZFN0b3AoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LmV2ZW50LlRpbWVzdGFtcCEudmFsdWVPZigpIDwgc3RhcnRUaW1lID8gJ3N0b3AtZXhjbHVkZScgOiAnY29udGludWUnO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3Agd2hlbiB3ZSBzZWUgdGhlIHJvb3Qgc3RhY2sgZW50ZXJpbmcgdGhpcyBzdGF0dXNcbiAgICpcbiAgICogU2hvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGBDUkVBVEVfSU5fUFJPR1JFU1NgLCBgVVBEQVRFX0lOX1BST0dSRVNTYCxcbiAgICogYERFTEVURV9JTl9QUk9HUkVTUywgYFJPTExCQUNLX0lOX1BST0dSRVNTYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2luY2VTdGFja1N0YXR1cyhzdGF0dXNlczogc3RyaW5nW10pOiBJUG9sbFJhbmdlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdWxkU3RvcChldmVudCkge1xuICAgICAgICByZXR1cm4gZXZlbnQuaXNSb290U3RhY2tFdmVudCAmJiBzdGF0dXNlcy5pbmNsdWRlcyhldmVudC5ldmVudC5SZXNvdXJjZVN0YXR1cyA/PyAnJykgPyAnc3RvcC1pbmNsdWRlJyA6ICdjb250aW51ZSc7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB3aGVuIHdlIHNlZSBldmVudHMgdGhhdCBiZWxvbmcgdG8gYSBkaWZmZXJlbnQgb3BlcmF0aW9uXG4gICAqXG4gICAqIFJlY29yZHMgdGhlIGZpcnN0IE9wZXJhdGlvbklkLCBhbmQgc3RvcHMgYXMgc29vbiBhcyB3ZSBzZWUgZXZlbnRzIHRoYXQgZG9uJ3QgaGF2ZSBpdCBhbnltb3JlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtb3N0UmVjZW50T3BlcmF0aW9uKCk6IElQb2xsUmFuZ2Uge1xuICAgIGxldCBvcGVyYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBzaG91bGRTdG9wKGV2ZW50KSB7XG4gICAgICAgIGlmIChvcGVyYXRpb25JZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3BlcmF0aW9uSWQgPSBldmVudC5ldmVudC5PcGVyYXRpb25JZDtcbiAgICAgICAgICByZXR1cm4gJ2NvbnRpbnVlJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBldmVudC5ldmVudC5PcGVyYXRpb25JZCA9PT0gb3BlcmF0aW9uSWQgPyAnY29udGludWUnIDogJ3N0b3AtZXhjbHVkZSc7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQSBwb2xsIHJhbmdlIGRlY2lkZXIgdGhhdCBhbHdheXMgcmV0dXJucyAnY29udGludWUnLCBjb25zdW1pbmcgdGhlIGVudGlyZSBDRk4gZXZlbnQgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb25zdW1lQWxsKCk6IElQb2xsUmFuZ2Uge1xuICAgIHJldHVybiB7XG4gICAgICBzaG91bGRTdG9wKCkge1xuICAgICAgICByZXR1cm4gJ2NvbnRpbnVlJztcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlRXZlbnQge1xuICAvKipcbiAgICogVGhlIFN0YWNrIEV2ZW50IGFzIHJlY2VpdmVkIGZyb20gQ2xvdWRGb3JtYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50OiBTdGFja0V2ZW50O1xuXG4gIC8qKlxuICAgKiBJRHMgb2YgcGFyZW50IHN0YWNrcyBvZiB0aGUgcmVzb3VyY2UsIGluIGNhc2Ugb2YgcmVzb3VyY2VzIGluIG5lc3RlZCBzdGFja3NcbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudFN0YWNrTG9naWNhbElkczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBldmVudCByZWdhcmRzIHRoZSByb290IHN0YWNrXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc1Jvb3RTdGFja0V2ZW50PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQb2xsIGZvciBzdGFjayBldmVudHMsIHBvdGVudGlhbGx5IG11bHRpcGxlIHRpbWVzIGFzIG5ldyBldmVudHMgY29tZSBpbiBvdmVyIHRpbWVcbiAqXG4gKiBJbmNsdWRlcyBldmVudHMgZnJvbSBuZXN0ZWQgc3RhY2tzLlxuICpcbiAqIFBvbGxpbmcgbWF5IGhhcHBlbiBpbiBtdWx0aXBsZSBidXJzdHMsIGFuZCBldmVyeSBidXJzdCBjb25zdW1lcyBldmVudHMgZnJvbSBuZXdlc3QtdG8tb2xkZXN0XG4gKiBmcm9tIHRoZSBzdGFjayBldmVudHMgQVBJLCBzbyBldmVudHMgYXJlIGNvbnN1bWVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6XG4gKlxuICogYGBgXG4gKiBDT05TVU1JTkdcbiAqXG4gKiBzdGFjayBldmVudHMgICAobmV3KSB6IHkgeCB3IHYgdSB0IHMgciBxIHAgbyBuIG0gbCBrIGogaSBoIGcgZiBlIGQgYyBiIGEgKG9sZClcbiAqIGJ1cnN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgICBwb2xsKCkgIzEgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgIHBvbGwoKSAjMiAgIF0gICAgICAgICAgICAgICBeXG4gKiAgICAgICAgICAgICAgICAgICAgIFsgIHBvbGwoKSAjMyAgIF0gICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFBvbGxSYW5nZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaWRlcyB0byBzdG9wIGhlcmVcbiAqIGBgYFxuICpcbiAqIEV2ZW50cyBhcmUgc29ydGVkIG9sZC10by1uZXcgYmVmb3JlIGJlaW5nIHJldHVybmVkLCBzbyB0aGUgZXZlbnRzIHJldHVybmVkIGJ5IGVhY2hcbiAqIHBvbGwgYXJlOlxuICpcbiAqIGBgYFxuICogcG9sbCgpICMxID0+IFtlIGYgZyBoIGkgaiBrIGxdXG4gKiBwb2xsKCkgIzIgPT4gW20gbiBvIHAgcSByIHNdXG4gKiBwb2xsKCkgIzMgPT4gW3QgdSB2IHcgeCB5IHpdXG4gKiBgYGBcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFja0V2ZW50UG9sbGVyIHtcbiAgLyoqXG4gICAqIEFsbCBldmVudHMgd2UndmUgc2VlbiBzbyBmYXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBldmVudHM6IFJlc291cmNlRXZlbnRbXSA9IFtdO1xuICBwdWJsaWMgY29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSByZWNvcmQgb2YgdGhlIGVycm9ycyB3ZSd2ZSBzZWVuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXJyb3JzID0gbmV3IFJlc291cmNlRXJyb3JzKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5lc3RlZFN0YWNrUG9sbGVyczogUmVjb3JkPHN0cmluZywgU3RhY2tFdmVudFBvbGxlcj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFN0YWNrRXZlbnRQb2xsZXJQcm9wcyxcbiAgKSB7XG4gIH1cblxuICAvKipcbiAgICogRnJvbSBhbGwgYWNjdW11bGF0ZWQgZXZlbnRzLCByZXR1cm4gb25seSB0aGUgZXJyb3JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlRXJyb3JzKCk6IFJlYWRvbmx5QXJyYXk8UmVzb3VyY2VFcnJvcj4ge1xuICAgIHJldHVybiB0aGlzLmVycm9ycy5hbGw7XG4gIH1cblxuICAvKipcbiAgICogUG9sbCBmb3IgbmV3IHN0YWNrIGV2ZW50c1xuICAgKlxuICAgKiBXaWxsIHJlYWQgYWxsIGV2ZW50cyB0aGF0IGFyZSBhdmFpbGFibGUgdXAgdW50aWwgdGhlIG9sZGVzdCBldmVudHNcbiAgICogaW5kaWNhdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciBmaWx0ZXJzLCBvciB1bnRpbCBpdCBlbmNvdW50ZXJzIGV2ZW50cyB0aGF0IGl0XG4gICAqIGhhcyBhbHJlYWR5IHJlYWQgYmVmb3JlLlxuICAgKlxuICAgKiBSZWN1cnNlcyBpbnRvIG5lc3RlZCBzdGFja3MsIGFuZCByZXR1cm5zIGV2ZW50cyBvbGQtdG8tbmV3LiBNdWx0aXBsZVxuICAgKiBpbnZvY2F0aW9ucyB0byBgcG9sbGAgd2lsbCByZXR1cm4gKm5ld2VyKiBldmVudHMgKGFsc28gaW4gb2xkLXRvLW5ldyBvcmRlcikuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcG9sbCgpOiBQcm9taXNlPFJlc291cmNlRXZlbnRbXT4ge1xuICAgIGNvbnN0IGV2ZW50czogUmVzb3VyY2VFdmVudFtdID0gYXdhaXQgdGhpcy5kb1BvbGwoKTtcblxuICAgIC8vIEFsc28gcG9sbCBhbGwgbmVzdGVkIHN0YWNrcyB3ZSdyZSBjdXJyZW50bHkgdHJhY2tpbmdcbiAgICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIHBvbGxlcl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5uZXN0ZWRTdGFja1BvbGxlcnMpKSB7XG4gICAgICBldmVudHMucHVzaCguLi4oYXdhaXQgcG9sbGVyLnBvbGwoKSkpO1xuICAgICAgaWYgKHBvbGxlci5jb21wbGV0ZSkge1xuICAgICAgICBkZWxldGUgdGhpcy5uZXN0ZWRTdGFja1BvbGxlcnNbbG9naWNhbElkXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gd2hhdCB3ZSBoYXZlIHNvIGZhclxuICAgIGV2ZW50cy5zb3J0KChhLCBiKSA9PiBhLmV2ZW50LlRpbWVzdGFtcCEudmFsdWVPZigpIC0gYi5ldmVudC5UaW1lc3RhbXAhLnZhbHVlT2YoKSk7XG4gICAgdGhpcy5ldmVudHMucHVzaCguLi5ldmVudHMpO1xuXG4gICAgdGhpcy5lcnJvcnMudXBkYXRlKC4uLmV2ZW50cyk7XG5cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkb1BvbGwoKTogUHJvbWlzZTxSZXNvdXJjZUV2ZW50W10+IHtcbiAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgZXZlbnRzIGFuZCB3ZSBwb2xsIGFnYWluLCB3ZSBjYW4gb25seSBnZXQgbmV3ZXIgZXZlbnRzIHVwIHRvXG4gICAgLy8gZXZlbnRzIHdlJ3ZlIGFscmVhZHkgc2Vlbi4gTm8gbmVlZCB0byBpbnZva2UgdGhlIFwib2xkZXN0RXZlbnRcIiBkZWNpZGVyIGFnYWluLlxuICAgIGNvbnN0IHN0b3BEZWNpZGVyID0gdGhpcy5ldmVudElkcy5zaXplID4gMCA/IFBvbGxSYW5nZS5jb25zdW1lQWxsKCkgOiB0aGlzLnByb3BzLmluaXRpYWxQb2xsUmFuZ2U7XG5cbiAgICBjb25zdCBldmVudHM6IFJlc291cmNlRXZlbnRbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcblxuICAgICAgd2hpbGUgKCFmaW5pc2hlZCkge1xuICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgdGhpcy5jZm4uZGVzY3JpYmVTdGFja0V2ZW50cyh7IFN0YWNrTmFtZTogdGhpcy5wcm9wcy5zdGFja05hbWUsIE5leHRUb2tlbjogbmV4dFRva2VuIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHBhZ2U/LlN0YWNrRXZlbnRzID8/IFtdKSB7XG4gICAgICAgICAgLy8gQWxyZWFkeSBzZWVuIHRoaXMgb25lXG4gICAgICAgICAgaWYgKHRoaXMuZXZlbnRJZHMuaGFzKGV2ZW50LkV2ZW50SWQhKSkge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50cztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpc1BhcmVudFN0YWNrRXZlbnQgPSBpc1Jvb3RTdGFja0V2ZW50KGV2ZW50KTtcbiAgICAgICAgICAvLyBGcmVzaCBldmVudFxuICAgICAgICAgIGNvbnN0IHJlc0V2ZW50OiBSZXNvdXJjZUV2ZW50ID0ge1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcGFyZW50U3RhY2tMb2dpY2FsSWRzOiB0aGlzLnByb3BzLnBhcmVudFN0YWNrTG9naWNhbElkcyA/PyBbXSxcbiAgICAgICAgICAgIGlzUm9vdFN0YWNrRXZlbnQ6IGlzUGFyZW50U3RhY2tFdmVudCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gTWFrZSBhIHN0b3AgZGVjaXNpb25cbiAgICAgICAgICBjb25zdCBzdG9wRGVjaXNpb24gPSBzdG9wRGVjaWRlci5zaG91bGRTdG9wKHJlc0V2ZW50KTtcbiAgICAgICAgICBpZiAoc3RvcERlY2lzaW9uID09PSAnc3RvcC1leGNsdWRlJykge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50cztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmV2ZW50SWRzLmFkZChldmVudC5FdmVudElkISk7XG5cbiAgICAgICAgICBldmVudHMucHVzaChyZXNFdmVudCk7XG5cbiAgICAgICAgICBpZiAoc3RvcERlY2lzaW9uID09PSAnc3RvcC1pbmNsdWRlJykge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50cztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNQYXJlbnRTdGFja0V2ZW50ICYmXG4gICAgICAgICAgICAgIGV2ZW50LlJlc291cmNlVHlwZSA9PT0gJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyAmJlxuICAgICAgICAgICAgICBpc1N0YWNrQmVnaW5PcGVyYXRpb25TdGF0ZShldmVudC5SZXNvdXJjZVN0YXR1cylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBldmVudCBpcyBub3QgZm9yIGB0aGlzYCBzdGFjayBhbmQgaGFzIGEgcGh5c2ljYWwgcmVzb3VyY2UgSWQsIHJlY3Vyc2l2ZWx5IGNhbGwgZm9yIGV2ZW50cyBpbiB0aGUgbmVzdGVkIHN0YWNrXG4gICAgICAgICAgICB0aGlzLnRyYWNrTmVzdGVkU3RhY2soZXZlbnQsIFsuLi4odGhpcy5wcm9wcy5wYXJlbnRTdGFja0xvZ2ljYWxJZHMgPz8gW10pLCBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCA/PyAnJ10pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc1BhcmVudFN0YWNrRXZlbnQgJiYgaXNTdGFja1Rlcm1pbmFsU3RhdGUoZXZlbnQuUmVzb3VyY2VTdGF0dXMpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0VG9rZW4gPSBwYWdlPy5OZXh0VG9rZW47XG4gICAgICAgIGlmIChuZXh0VG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKCEoZS5uYW1lID09PSAnVmFsaWRhdGlvbkVycm9yJyAmJiBmb3JtYXRFcnJvck1lc3NhZ2UoZSkgPT09IGBTdGFjayBbJHt0aGlzLnByb3BzLnN0YWNrTmFtZX1dIGRvZXMgbm90IGV4aXN0YCkpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIHRoZSBDUkVBVEVfSU5fUFJPR1JFU1MsIFVQREFURV9JTl9QUk9HUkVTUywgREVMRVRFX0lOX1BST0dSRVNTIGV2ZW50IG9mIGEgbmVzdGVkIHN0YWNrLCBwb2xsIHRoZSBuZXN0ZWQgc3RhY2sgdXBkYXRlc1xuICAgKi9cbiAgcHJpdmF0ZSB0cmFja05lc3RlZFN0YWNrKGV2ZW50OiBTdGFja0V2ZW50LCBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbG9naWNhbElkID0gZXZlbnQuTG9naWNhbFJlc291cmNlSWQ7XG4gICAgY29uc3QgcGh5c2ljYWxSZXNvdXJjZUlkID0gZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkO1xuXG4gICAgLy8gVGhlIENSRUFURV9JTl9QUk9HUkVTUyBldmVudCBmb3IgYSBOZXN0ZWQgU3RhY2sgaXMgZW1pdHRlZCB0d2ljZTsgZmlyc3Qgd2l0aG91dCBhIFBoeXNpY2FsUmVzb3VyY2VJZFxuICAgIC8vIGFuZCB0aGVuIHdpdGguIElnbm9yZSB0aGlzIGV2ZW50IGlmIHdlIGRvbid0IGhhdmUgdGhhdCBwcm9wZXJ0eSB5ZXQuXG4gICAgLy9cbiAgICAvLyAoQXQgdGhpcyBwb2ludCwgSSBhbHNvIGRvbid0IHRydXN0IHRoYXQgbG9naWNhbElkIGlzIGFsd2F5cyBnb2luZyB0byBiZSB0aGVyZSBzbyB2YWxpZGF0ZSB0aGF0IGFzIHdlbGwpXG4gICAgaWYgKCFsb2dpY2FsSWQgfHwgIXBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5uZXN0ZWRTdGFja1BvbGxlcnNbbG9naWNhbElkXSkge1xuICAgICAgdGhpcy5uZXN0ZWRTdGFja1BvbGxlcnNbbG9naWNhbElkXSA9IG5ldyBTdGFja0V2ZW50UG9sbGVyKHRoaXMuY2ZuLCB7XG4gICAgICAgIHN0YWNrTmFtZTogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgICAgICBwYXJlbnRTdGFja0xvZ2ljYWxJZHM6IHBhcmVudFN0YWNrTG9naWNhbElkcyxcbiAgICAgICAgaW5pdGlhbFBvbGxSYW5nZTogUG9sbFJhbmdlLnNpbmNlVGltZXN0YW1wKGV2ZW50LlRpbWVzdGFtcCEudmFsdWVPZigpKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0YWNrQmVnaW5PcGVyYXRpb25TdGF0ZShzdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiBbXG4gICAgJ0NSRUFURV9JTl9QUk9HUkVTUycsXG4gICAgJ1VQREFURV9JTl9QUk9HUkVTUycsXG4gICAgJ0RFTEVURV9JTl9QUk9HUkVTUycsXG4gICAgJ1VQREFURV9ST0xMQkFDS19JTl9QUk9HUkVTUycsXG4gICAgJ1JPTExCQUNLX0lOX1BST0dSRVNTJyxcbiAgXS5pbmNsdWRlcyhzdGF0ZSA/PyAnJyk7XG59XG5cbmZ1bmN0aW9uIGlzU3RhY2tUZXJtaW5hbFN0YXRlKHN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuICEoc3RhdGUgPz8gJycpLmVuZHNXaXRoKCdfSU5fUFJPR1JFU1MnKTtcbn1cbiJdfQ==
|
|
@@ -2,6 +2,10 @@ import type { WorkNode, StackNode, AssetBuildNode, AssetPublishNode } from './wo
|
|
|
2
2
|
import type { IoHelper } from '../io/private';
|
|
3
3
|
export type Concurrency = number | Record<WorkNode['type'], number>;
|
|
4
4
|
export declare class WorkGraph {
|
|
5
|
+
/**
|
|
6
|
+
* A helper to declare a noop action.
|
|
7
|
+
*/
|
|
8
|
+
static readonly NOOP: (..._: any[]) => Promise<void>;
|
|
5
9
|
readonly nodes: Record<string, WorkNode>;
|
|
6
10
|
private readonly readyPool;
|
|
7
11
|
private readonly lazyDependencies;
|
|
@@ -5,6 +5,11 @@ const work_graph_types_1 = require("./work-graph-types");
|
|
|
5
5
|
const toolkit_error_1 = require("../../toolkit/toolkit-error");
|
|
6
6
|
const util_1 = require("../../util");
|
|
7
7
|
class WorkGraph {
|
|
8
|
+
/**
|
|
9
|
+
* A helper to declare a noop action.
|
|
10
|
+
*/
|
|
11
|
+
static NOOP = async () => {
|
|
12
|
+
};
|
|
8
13
|
nodes;
|
|
9
14
|
readyPool = [];
|
|
10
15
|
lazyDependencies = new Map();
|
|
@@ -359,4 +364,4 @@ function gv(id, attrs) {
|
|
|
359
364
|
function simplifyId(id) {
|
|
360
365
|
return id.replace(/([0-9a-f]{6})[0-9a-f]{6,}/g, '$1');
|
|
361
366
|
}
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndvcmstZ3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseURBQXFEO0FBQ3JELCtEQUEyRDtBQUMzRCxxQ0FBOEM7QUFJOUMsTUFBYSxTQUFTO0lBQ0osS0FBSyxDQUEyQjtJQUMvQixTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUMvQyxRQUFRLENBQVc7SUFFN0IsS0FBSyxDQUFTO0lBRXJCLFlBQW1CLEtBQStCLEVBQUUsUUFBa0I7UUFDcEUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFHLEtBQWlCO1FBQ2xDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLElBQUksNEJBQVksQ0FBQyxpQkFBaUIsRUFBRSw2QkFBNkIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1AsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZ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QUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDbkIsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBSSxFQUFPLEVBQUUsSUFBdUI7SUFDckQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsU0FBUyxFQUFFLENBQUMsRUFBVSxFQUFFLEtBQTBDO0lBQ2hFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVySCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDcEYsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEVBQVU7SUFDNUIsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdvcmtOb2RlLCBTdGFja05vZGUsIEFzc2V0QnVpbGROb2RlLCBBc3NldFB1Ymxpc2hOb2RlIH0gZnJvbSAnLi93b3JrLWdyYXBoLXR5cGVzJztcbmltcG9ydCB7IERlcGxveW1lbnRTdGF0ZSB9IGZyb20gJy4vd29yay1ncmFwaC10eXBlcyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgcGFyYWxsZWxQcm9taXNlcyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuZXhwb3J0IHR5cGUgQ29uY3VycmVuY3kgPSBudW1iZXIgfCBSZWNvcmQ8V29ya05vZGVbJ3R5cGUnXSwgbnVtYmVyPjtcblxuZXhwb3J0IGNsYXNzIFdvcmtHcmFwaCB7XG4gIHB1YmxpYyByZWFkb25seSBub2RlczogUmVjb3JkPHN0cmluZywgV29ya05vZGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWR5UG9vbDogQXJyYXk8V29ya05vZGU+ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF6eURlcGVuZGVuY2llcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgcHVibGljIGVycm9yPzogRXJyb3I7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG5vZGVzOiBSZWNvcmQ8c3RyaW5nLCBXb3JrTm9kZT4sIGlvSGVscGVyOiBJb0hlbHBlcikge1xuICAgIHRoaXMubm9kZXMgPSB7IC4uLm5vZGVzIH07XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICB9XG5cbiAgcHVibGljIGFkZE5vZGVzKC4uLm5vZGVzOiBXb3JrTm9kZVtdKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAodGhpcy5ub2Rlc1tub2RlLmlkXSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdEdXBsaWNhdGVOb2RlSWQnLCBgRHVwbGljYXRlIHVzZSBvZiBub2RlIGlkOiAke25vZGUuaWR9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxkID0gdGhpcy5sYXp5RGVwZW5kZW5jaWVzLmdldChub2RlLmlkKTtcbiAgICAgIGlmIChsZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgbGQpIHtcbiAgICAgICAgICBub2RlLmRlcGVuZGVuY2llcy5hZGQoeCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXp5RGVwZW5kZW5jaWVzLmRlbGV0ZShub2RlLmlkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub2Rlc1tub2RlLmlkXSA9IG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZU5vZGUobm9kZUlkOiBzdHJpbmcgfCBXb3JrTm9kZSkge1xuICAgIGNvbnN0IGlkID0gdHlwZW9mIG5vZGVJZCA9PT0gJ3N0cmluZycgPyBub2RlSWQgOiBub2RlSWQuaWQ7XG4gICAgY29uc3QgcmVtb3ZlZE5vZGUgPSB0aGlzLm5vZGVzW2lkXTtcblxuICAgIHRoaXMubGF6eURlcGVuZGVuY2llcy5kZWxldGUoaWQpO1xuICAgIGRlbGV0ZSB0aGlzLm5vZGVzW2lkXTtcblxuICAgIGlmIChyZW1vdmVkTm9kZSkge1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIE9iamVjdC52YWx1ZXModGhpcy5ub2RlcykpIHtcbiAgICAgICAgbm9kZS5kZXBlbmRlbmNpZXMuZGVsZXRlKHJlbW92ZWROb2RlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBub2RlcyBvZiBhIGdpdmVuIHR5cGVcbiAgICovXG4gIHB1YmxpYyBub2Rlc09mVHlwZTxUIGV4dGVuZHMgV29ya05vZGVbJ3R5cGUnXT4odHlwZTogVCk6IEV4dHJhY3Q8V29ya05vZGUsIHsgdHlwZTogVCB9PltdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIobiA9PiBuLnR5cGUgPT09IHR5cGUpIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIG5vZGVzIHRoYXQgZGVwZW5kIG9uIGEgZ2l2ZW4gbm9kZVxuICAgKi9cbiAgcHVibGljIGRlcGVuZGVlcyhub2RlSWQ6IHN0cmluZyB8IFdvcmtOb2RlKSB7XG4gICAgY29uc3QgaWQgPSB0eXBlb2Ygbm9kZUlkID09PSAnc3RyaW5nJyA/IG5vZGVJZCA6IG5vZGVJZC5pZDtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIobiA9PiBuLmRlcGVuZGVuY2llcy5oYXMoaWQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkZXBlbmRlbmN5LCB0aGF0IG1heSBjb21lIGJlZm9yZSBvciBhZnRlciB0aGUgbm9kZXMgaW52b2x2ZWRcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ub2Rlc1tmcm9tSWRdO1xuICAgIGlmIChub2RlKSB7XG4gICAgICBub2RlLmRlcGVuZGVuY2llcy5hZGQodG9JZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBsYXp5RGVwcyA9IHRoaXMubGF6eURlcGVuZGVuY2llcy5nZXQoZnJvbUlkKTtcbiAgICBpZiAoIWxhenlEZXBzKSB7XG4gICAgICBsYXp5RGVwcyA9IFtdO1xuICAgICAgdGhpcy5sYXp5RGVwZW5kZW5jaWVzLnNldChmcm9tSWQsIGxhenlEZXBzKTtcbiAgICB9XG4gICAgbGF6eURlcHMucHVzaCh0b0lkKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlHZXROb2RlKGlkOiBzdHJpbmcpOiBXb3JrTm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNbaWRdO1xuICB9XG5cbiAgcHVibGljIG5vZGUoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHJldCA9IHRoaXMubm9kZXNbaWRdO1xuICAgIGlmICghcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdOb2RlTm90Rm91bmQnLCBgTm8gbm9kZSB3aXRoIGlkICR7aWR9IGFtb25nICR7T2JqZWN0LmtleXModGhpcy5ub2Rlcyl9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwdWJsaWMgYWJzb3JiKGdyYXBoOiBXb3JrR3JhcGgpIHtcbiAgICB0aGlzLmFkZE5vZGVzKC4uLk9iamVjdC52YWx1ZXMoZ3JhcGgubm9kZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzRmFpbGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLnNvbWUoKG4pID0+IG4uZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuRkFJTEVEKTtcbiAgfVxuXG4gIHB1YmxpYyBkb1BhcmFsbGVsKGNvbmN1cnJlbmN5OiBDb25jdXJyZW5jeSwgYWN0aW9uczogV29ya0dyYXBoQWN0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZvckFsbEFydGlmYWN0cyhjb25jdXJyZW5jeSwgYXN5bmMgKHg6IFdvcmtOb2RlKSA9PiB7XG4gICAgICBzd2l0Y2ggKHgudHlwZSkge1xuICAgICAgICBjYXNlICdzdGFjayc6XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5kZXBsb3lTdGFjayh4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXNzZXQtYnVpbGQnOlxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuYnVpbGRBc3NldCh4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXNzZXQtcHVibGlzaCc6XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5wdWJsaXNoQXNzZXQoeCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhbGwgc3RhY2sgbm9kZXMgaW4gZGVwZW5kZW5jeSBvcmRlciB3aXRoIHRoZSBnaXZlbiBjb25jdXJyZW5jeS5cbiAgICpcbiAgICogVW5saWtlIGBkb1BhcmFsbGVsYCwgdGhpcyBtZXRob2Qgb25seSBoYW5kbGVzIHN0YWNrIG5vZGVzIGFuZCB0YWtlcyBhXG4gICAqIHNpbXBsZSBjYWxsYmFjay4gSW50ZW5kZWQgZm9yIGRlc3Ryb3kgd2hlcmUgdGhlcmUgYXJlIG5vIGFzc2V0IG5vZGVzLlxuICAgKi9cbiAgcHVibGljIHByb2Nlc3NTdGFja3MoY29uY3VycmVuY3k6IG51bWJlciwgZm46IChzdGFja05vZGU6IFN0YWNrTm9kZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHJldHVybiB0aGlzLmZvckFsbEFydGlmYWN0cyhjb25jdXJyZW5jeSwgYXN5bmMgKHg6IFdvcmtOb2RlKSA9PiB7XG4gICAgICBpZiAoeC50eXBlICE9PSAnc3RhY2snKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGZuKHgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2V0IG9mIHVuYmxvY2tlZCBub2Rlc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8UmVhZG9ubHlBcnJheTxXb3JrTm9kZT4+IHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJlYWR5UG9vbCgpO1xuICAgIHJldHVybiB0aGlzLnJlYWR5UG9vbDtcbiAgfVxuXG4gIHByaXZhdGUgZm9yQWxsQXJ0aWZhY3RzKG46IENvbmN1cnJlbmN5LCBmbjogKHg6IFdvcmtOb2RlKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZ3JhcGggPSB0aGlzO1xuXG4gICAgLy8gSWYgJ24nIGlzIGEgbnVtYmVyLCB3ZSBsaW1pdCBhbGwgY29uY3VycmVuY3kgZXF1YWxseSAoZWZmZWN0aXZlbHkgd2Ugd2lsbCBiZSB1c2luZyB0b3RhbE1heClcbiAgICAvLyBJZiAnbicgaXMgYSByZWNvcmQsIHdlIGxpbWl0IGVhY2ggam9iIGluZGVwZW5kZW50bHkgKGVmZmVjdGl2ZWx5IHdlIHdpbGwgYmUgdXNpbmcgbWF4KVxuICAgIGNvbnN0IG1heDogUmVjb3JkPFdvcmtOb2RlWyd0eXBlJ10sIG51bWJlcj4gPSB0eXBlb2YgbiA9PT0gJ251bWJlcicgP1xuICAgICAge1xuICAgICAgICAnYXNzZXQtYnVpbGQnOiBuLFxuICAgICAgICAnYXNzZXQtcHVibGlzaCc6IG4sXG4gICAgICAgICdzdGFjayc6IG4sXG4gICAgICB9IDogbjtcbiAgICBjb25zdCB0b3RhbE1heCA9IHR5cGVvZiBuID09PSAnbnVtYmVyJyA/IG4gOiBzdW0oT2JqZWN0LnZhbHVlcyhuKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKG9rLCBmYWlsKSA9PiB7XG4gICAgICBsZXQgYWN0aXZlOiBSZWNvcmQ8V29ya05vZGVbJ3R5cGUnXSwgbnVtYmVyPiA9IHtcbiAgICAgICAgJ2Fzc2V0LWJ1aWxkJzogMCxcbiAgICAgICAgJ2Fzc2V0LXB1Ymxpc2gnOiAwLFxuICAgICAgICAnc3RhY2snOiAwLFxuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIHRvdGFsQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gc3VtKE9iamVjdC52YWx1ZXMoYWN0aXZlKSk7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0KCk7XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICAgICBncmFwaC51cGRhdGVSZWFkeVBvb2woKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyYXBoLnJlYWR5UG9vbC5sZW5ndGg7ICkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGdyYXBoLnJlYWR5UG9vbFtpXTtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZVtub2RlLnR5cGVdIDwgbWF4W25vZGUudHlwZV0gJiYgdG90YWxBY3RpdmUoKSA8IHRvdGFsTWF4KSB7XG4gICAgICAgICAgICAgIGdyYXBoLnJlYWR5UG9vbC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgIHN0YXJ0T25lKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0b3RhbEFjdGl2ZSgpID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoZ3JhcGguZG9uZSgpKSB7XG4gICAgICAgICAgICAgIG9rKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3YWl0IGZvciBvdGhlciBhY3RpdmUgZGVwbG95cyB0byBmaW5pc2ggYmVmb3JlIGZhaWxpbmdcbiAgICAgICAgICAgIGlmIChncmFwaC5oYXNGYWlsZWQoKSkge1xuICAgICAgICAgICAgICBmYWlsKGdyYXBoLmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgZmFpbChlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0T25lKHg6IFdvcmtOb2RlKSB7XG4gICAgICAgIHguZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkRFUExPWUlORztcbiAgICAgICAgYWN0aXZlW3gudHlwZV0rKztcbiAgICAgICAgdm9pZCBmbih4KVxuICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIGFjdGl2ZVt4LnR5cGVdLS07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBncmFwaC5kZXBsb3llZCh4KTtcbiAgICAgICAgICAgIHN0YXJ0KCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgLy8gQnkgcmVjb3JkaW5nIHRoZSBmYWlsdXJlIGltbWVkaWF0ZWx5IGFzIHRoZSBxdWV1ZWQgdGFzayBleGl0cywgd2UgcHJldmVudCB0aGUgbmV4dFxuICAgICAgICAgICAgLy8gcXVldWVkIHRhc2sgZnJvbSBzdGFydGluZy5cbiAgICAgICAgICAgIGdyYXBoLmZhaWxlZCh4LCBlcnIpO1xuICAgICAgICAgICAgc3RhcnQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5ldmVyeSgobikgPT4gRGVwbG95bWVudFN0YXRlLkNPTVBMRVRFRCA9PT0gbi5kZXBsb3ltZW50U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXBsb3llZChub2RlOiBXb3JrTm9kZSkge1xuICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkNPTVBMRVRFRDtcbiAgfVxuXG4gIHByaXZhdGUgZmFpbGVkKG5vZGU6IFdvcmtOb2RlLCBlcnJvcj86IEVycm9yKSB7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkZBSUxFRDtcbiAgICB0aGlzLnNraXBSZXN0KCk7XG4gICAgdGhpcy5yZWFkeVBvb2wuc3BsaWNlKDApO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBbXG4gICAgICAnZGlncmFwaCBEIHsnLFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXModGhpcy5ub2RlcykuZmxhdE1hcCgoW2lkLCBub2RlXSkgPT4gcmVuZGVyTm9kZShpZCwgbm9kZSkpLFxuICAgICAgJ30nLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBmdW5jdGlvbiByZW5kZXJOb2RlKGlkOiBzdHJpbmcsIG5vZGU6IFdvcmtOb2RlKTogc3RyaW5nW10ge1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICBpZiAobm9kZS5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5DT01QTEVURUQpIHtcbiAgICAgICAgcmV0LnB1c2goYCAgJHtndihpZCwgeyBzdHlsZTogJ2ZpbGxlZCcsIGZpbGxjb2xvcjogJ3llbGxvdycsIGNvbW1lbnQ6IG5vZGUubm90ZSB9KX07YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQucHVzaChgICAke2d2KGlkLCB7IGNvbW1lbnQ6IG5vZGUubm90ZSB9KX07YCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiBub2RlLmRlcGVuZGVuY2llcykge1xuICAgICAgICByZXQucHVzaChgICAke2d2KGlkKX0gLT4gJHtndihkZXApfTtgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSBhbGwgZGVwZW5kZW5jaWVzIGFjdHVhbGx5IGV4aXN0LiBUaGlzIHByb3RlY3RzIGFnYWluc3Qgc2NlbmFyaW9zIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzpcbiAgICogU3RhY2tBIGRlcGVuZHMgb24gU3RhY2tCLCBidXQgU3RhY2tCIGlzIG5vdCBzZWxlY3RlZCB0byBkZXBsb3kuIFRoZSBkZXBlbmRlbmN5IGlzIHJlZHVuZGFudFxuICAgKiBhbmQgd2lsbCBiZSBkcm9wcGVkLlxuICAgKiBUaGlzIGFzc3VtZXMgdGhlIG1hbmlmZXN0IGNvbWVzIHVuY29ycnVwdGVkIHNvIHdlIHdpbGwgbm90IGZhaWwgaWYgYSBkZXBlbmRlbmN5IGlzIG5vdCBmb3VuZC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVVbmF2YWlsYWJsZURlcGVuZGVuY2llcygpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKSkge1xuICAgICAgY29uc3QgcmVtb3ZlRGVwcyA9IEFycmF5LmZyb20obm9kZS5kZXBlbmRlbmNpZXMpLmZpbHRlcigoZGVwKSA9PiB0aGlzLm5vZGVzW2RlcF0gPT09IHVuZGVmaW5lZCk7XG5cbiAgICAgIHJlbW92ZURlcHMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICBub2RlLmRlcGVuZGVuY2llcy5kZWxldGUoZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBhc3NldCBwdWJsaXNoaW5nIHN0ZXBzIGZvciBhc3NldHMgdGhhdCBhcmUgYWxyZWFkeSBwdWJsaXNoZWQsIGFuZCB0aGVuIGJ1aWxkXG4gICAqIHRoYXQgYXJlbid0IHVzZWQgYW55bW9yZS5cbiAgICpcbiAgICogRG8gdGhpcyBpbiBwYXJhbGxlbCwgYmVjYXVzZSB0aGVyZSBtYXkgYmUgYSBsb3Qgb2YgYXNzZXRzIGluIGFuIGFwcGxpY2F0aW9uIChzZWVuIGluIHByYWN0aWNlOiA+MTAwIGFzc2V0cylcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW1vdmVVbm5lY2Vzc2FyeUFzc2V0cyhpc1VubmVjZXNzYXJ5OiAoeDogQXNzZXRQdWJsaXNoTm9kZSkgPT4gUHJvbWlzZTxib29sZWFuPikge1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoJ0NoZWNraW5nIGZvciBwcmV2aW91c2x5IHB1Ymxpc2hlZCBhc3NldHMnKTtcblxuICAgIGNvbnN0IHB1Ymxpc2hlcyA9IHRoaXMubm9kZXNPZlR5cGUoJ2Fzc2V0LXB1Ymxpc2gnKTtcblxuICAgIGNvbnN0IGNsYXNzaWZpZWROb2RlcyA9IGF3YWl0IHBhcmFsbGVsUHJvbWlzZXMoXG4gICAgICA4LFxuICAgICAgcHVibGlzaGVzLm1hcCgoYXNzZXROb2RlKSA9PiBhc3luYygpID0+IFthc3NldE5vZGUsIGF3YWl0IGlzVW5uZWNlc3NhcnkoYXNzZXROb2RlKV0gYXMgY29uc3QpKTtcblxuICAgIGNvbnN0IGFscmVhZHlQdWJsaXNoZWQgPSBjbGFzc2lmaWVkTm9kZXMuZmlsdGVyKChbXywgdW5uZWNlc3NhcnldKSA9PiB1bm5lY2Vzc2FyeSkubWFwKChbYXNzZXROb2RlLCBfXSkgPT4gYXNzZXROb2RlKTtcbiAgICBmb3IgKGNvbnN0IGFzc2V0Tm9kZSBvZiBhbHJlYWR5UHVibGlzaGVkKSB7XG4gICAgICB0aGlzLnJlbW92ZU5vZGUoYXNzZXROb2RlKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke3B1Ymxpc2hlcy5sZW5ndGh9IHRvdGFsIGFzc2V0cywgJHtwdWJsaXNoZXMubGVuZ3RoIC0gYWxyZWFkeVB1Ymxpc2hlZC5sZW5ndGh9IHN0aWxsIG5lZWQgdG8gYmUgcHVibGlzaGVkYCk7XG5cbiAgICAvLyBOb3cgYWxzbyByZW1vdmUgYW55IGFzc2V0IGJ1aWxkIHN0ZXBzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZW0gYW55bW9yZVxuICAgIGNvbnN0IHVudXNlZEJ1aWxkcyA9IHRoaXMubm9kZXNPZlR5cGUoJ2Fzc2V0LWJ1aWxkJykuZmlsdGVyKGJ1aWxkID0+IHRoaXMuZGVwZW5kZWVzKGJ1aWxkKS5sZW5ndGggPT09IDApO1xuICAgIGZvciAoY29uc3QgdW51c2VkQnVpbGQgb2YgdW51c2VkQnVpbGRzKSB7XG4gICAgICB0aGlzLnJlbW92ZU5vZGUodW51c2VkQnVpbGQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUmVhZHlQb29sKCkge1xuICAgIGNvbnN0IGFjdGl2ZUNvdW50ID0gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIoKHgpID0+IHguZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuREVQTE9ZSU5HKS5sZW5ndGg7XG4gICAgY29uc3QgcGVuZGluZ0NvdW50ID0gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIoKHgpID0+IHguZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuUEVORElORykubGVuZ3RoO1xuXG4gICAgY29uc3QgbmV3bHlSZWFkeSA9IE9iamVjdC52YWx1ZXModGhpcy5ub2RlcykuZmlsdGVyKCh4KSA9PlxuICAgICAgeC5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5QRU5ESU5HICYmXG4gICAgICBBcnJheS5mcm9tKHguZGVwZW5kZW5jaWVzKS5ldmVyeSgoaWQpID0+IHRoaXMubm9kZShpZCkuZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuQ09NUExFVEVEKSk7XG5cbiAgICAvLyBBZGQgbmV3bHkgYXZhaWxhYmxlIG5vZGVzIHRvIHRoZSByZWFkeSBwb29sXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5ld2x5UmVhZHkpIHtcbiAgICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLlFVRVVFRDtcbiAgICAgIHRoaXMucmVhZHlQb29sLnB1c2gobm9kZSk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIG5vZGVzIGZyb20gdGhlIHJlYWR5IHBvb2wgdGhhdCBoYXZlIGFscmVhZHkgc3RhcnRlZCBkZXBsb3lpbmdcbiAgICByZXRhaW5Pbmx5KHRoaXMucmVhZHlQb29sLCAobm9kZSkgPT4gbm9kZS5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5RVUVVRUQpO1xuXG4gICAgLy8gU29ydCBieSByZXZlcnNlIHByaW9yaXR5XG4gICAgdGhpcy5yZWFkeVBvb2wuc29ydCgoYSwgYikgPT4gKGIucHJpb3JpdHkgPz8gMCkgLSAoYS5wcmlvcml0eSA/PyAwKSk7XG5cbiAgICBpZiAodGhpcy5yZWFkeVBvb2wubGVuZ3RoID09PSAwICYmIGFjdGl2ZUNvdW50ID09PSAwICYmIHBlbmRpbmdDb3VudCA+IDApIHtcbiAgICAgIGNvbnN0IGN5Y2xlID0gdGhpcy5maW5kQ3ljbGUoKSA/PyBbJ05vIGN5Y2xlIGZvdW5kISddO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgQ3ljbGUgJHtjeWNsZS5qb2luKCcgLT4gJyl9IGluIGdyYXBoICR7dGhpc31gKTtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0RlcGVuZGVuY3lDeWNsZScsIGBVbmFibGUgdG8gbWFrZSBwcm9ncmVzcyBhbnltb3JlLCBkZXBlbmRlbmN5IGN5Y2xlIGJldHdlZW4gcmVtYWluaW5nIGFydGlmYWN0czogJHtjeWNsZS5qb2luKCcgLT4gJyl9IChydW4gd2l0aCAtdnYgZm9yIGZ1bGwgZ3JhcGgpYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBza2lwUmVzdCgpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKSkge1xuICAgICAgaWYgKFtEZXBsb3ltZW50U3RhdGUuUVVFVUVELCBEZXBsb3ltZW50U3RhdGUuUEVORElOR10uaW5jbHVkZXMobm9kZS5kZXBsb3ltZW50U3RhdGUpKSB7XG4gICAgICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLlNLSVBQRUQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgY3ljbGVzIGluIGEgZ3JhcGhcbiAgICpcbiAgICogTm90IHRoZSBmYXN0ZXN0LCBidXQgZWZmZWN0aXZlIGFuZCBzaG91bGQgYmUgcmFyZVxuICAgKi9cbiAgcHVibGljIGZpbmRDeWNsZSgpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIE9iamVjdC5rZXlzKHRoaXMubm9kZXMpKSB7XG4gICAgICBjb25zdCBjeWNsZSA9IHJlY3Vyc2Uobm9kZUlkLCBbbm9kZUlkXSk7XG4gICAgICBpZiAoY3ljbGUpIHtcbiAgICAgICAgcmV0dXJuIGN5Y2xlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzZShub2RlSWQ6IHN0cmluZywgcGF0aDogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAoc2Vlbi5oYXMobm9kZUlkKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygc2VsZi5ub2Rlc1tub2RlSWRdLmRlcGVuZGVuY2llcyA/PyBbXSkge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGF0aC5pbmRleE9mKGRlcCk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4ucGF0aC5zbGljZShpbmRleCksIGRlcF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY3ljbGUgPSByZWN1cnNlKGRlcCwgWy4uLnBhdGgsIGRlcF0pO1xuICAgICAgICAgIGlmIChjeWNsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGN5Y2xlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZWVuLmFkZChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBgZW5kYCBub2RlIGlzIHJlYWNoYWJsZSBmcm9tIHRoZSBgc3RhcnRgIG5vZGUsIGZvbGxvd2luZyB0aGUgZGVwZW5kZW5jeSBhcnJvd3NcbiAgICovXG4gIHB1YmxpYyByZWFjaGFibGUoc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIHJlY3Vyc2Uoc3RhcnQpO1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzZShjdXJyZW50OiBzdHJpbmcpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhjdXJyZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChjdXJyZW50KTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IGVuZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHNlbGYubm9kZXNbY3VycmVudF0uZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGlmIChyZWN1cnNlKGRlcCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtHcmFwaEFjdGlvbnMge1xuICBkZXBsb3lTdGFjazogKHN0YWNrTm9kZTogU3RhY2tOb2RlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBidWlsZEFzc2V0OiAoYXNzZXROb2RlOiBBc3NldEJ1aWxkTm9kZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHVibGlzaEFzc2V0OiAoYXNzZXROb2RlOiBBc3NldFB1Ymxpc2hOb2RlKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5mdW5jdGlvbiBzdW0oeHM6IG51bWJlcltdKSB7XG4gIGxldCByZXQgPSAwO1xuICBmb3IgKGNvbnN0IHggb2YgeHMpIHtcbiAgICByZXQgKz0geDtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiByZXRhaW5Pbmx5PEE+KHhzOiBBW10sIHByZWQ6ICh4OiBBKSA9PiBib29sZWFuKSB7XG4gIHhzLnNwbGljZSgwLCB4cy5sZW5ndGgsIC4uLnhzLmZpbHRlcihwcmVkKSk7XG59XG5cbmZ1bmN0aW9uIGd2KGlkOiBzdHJpbmcsIGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPikge1xuICBjb25zdCBhdHRyU3RyaW5nID0gT2JqZWN0LmVudHJpZXMoYXR0cnMgPz8ge30pLmZsYXRNYXAoKFtrLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkID8gW2Ake2t9PVwiJHt2fVwiYF0gOiBbXSkuam9pbignLCcpO1xuXG4gIHJldHVybiBhdHRyU3RyaW5nID8gYFwiJHtzaW1wbGlmeUlkKGlkKX1cIiBbJHthdHRyU3RyaW5nfV1gIDogYFwiJHtzaW1wbGlmeUlkKGlkKX1cImA7XG59XG5cbmZ1bmN0aW9uIHNpbXBsaWZ5SWQoaWQ6IHN0cmluZykge1xuICByZXR1cm4gaWQucmVwbGFjZSgvKFswLTlhLWZdezZ9KVswLTlhLWZdezYsfS9nLCAnJDEnKTtcbn1cbiJdfQ==
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndvcmstZ3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseURBQXFEO0FBQ3JELCtEQUEyRDtBQUMzRCxxQ0FBOEM7QUFJOUMsTUFBYSxTQUFTO0lBQ3BCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLElBQUksR0FBbUMsS0FBSyxJQUFJLEVBQUU7SUFDekUsQ0FBQyxDQUFDO0lBRWMsS0FBSyxDQUEyQjtJQUMvQixTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUMvQyxRQUFRLENBQVc7SUFFN0IsS0FBSyxDQUFTO0lBRXJCLFlBQW1CLEtBQStCLEVBQUUsUUFBa0I7UUFDcEUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFHLEtBQWlCO1FBQ2xDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLElBQUksNEJBQVksQ0FBQyxpQkFBaUIsRUFBRSw2QkFBNkIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1AsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0Qs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QXNzZXRCdWlsZE5vZGUsIEFzc2V0UHVibGlzaE5vZGUgfSBmcm9tICcuL3dvcmstZ3JhcGgtdHlwZXMnO1xuaW1wb3J0IHsgRGVwbG95bWVudFN0YXRlIH0gZnJvbSAnLi93b3JrLWdyYXBoLXR5cGVzJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBwYXJhbGxlbFByb21pc2VzIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5leHBvcnQgdHlwZSBDb25jdXJyZW5jeSA9IG51bWJlciB8IFJlY29yZDxXb3JrTm9kZVsndHlwZSddLCBudW1iZXI+O1xuXG5leHBvcnQgY2xhc3MgV29ya0dyYXBoIHtcbiAgLyoqXG4gICAqIEEgaGVscGVyIHRvIGRlY2xhcmUgYSBub29wIGFjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9PUDogKC4uLl86IGFueVtdKSA9PiBQcm9taXNlPHZvaWQ+ID0gYXN5bmMgKCkgPT4ge1xuICB9O1xuXG4gIHB1YmxpYyByZWFkb25seSBub2RlczogUmVjb3JkPHN0cmluZywgV29ya05vZGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWR5UG9vbDogQXJyYXk8V29ya05vZGU+ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF6eURlcGVuZGVuY2llcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgcHVibGljIGVycm9yPzogRXJyb3I7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG5vZGVzOiBSZWNvcmQ8c3RyaW5nLCBXb3JrTm9kZT4sIGlvSGVscGVyOiBJb0hlbHBlcikge1xuICAgIHRoaXMubm9kZXMgPSB7IC4uLm5vZGVzIH07XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICB9XG5cbiAgcHVibGljIGFkZE5vZGVzKC4uLm5vZGVzOiBXb3JrTm9kZVtdKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAodGhpcy5ub2Rlc1tub2RlLmlkXSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdEdXBsaWNhdGVOb2RlSWQnLCBgRHVwbGljYXRlIHVzZSBvZiBub2RlIGlkOiAke25vZGUuaWR9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxkID0gdGhpcy5sYXp5RGVwZW5kZW5jaWVzLmdldChub2RlLmlkKTtcbiAgICAgIGlmIChsZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgbGQpIHtcbiAgICAgICAgICBub2RlLmRlcGVuZGVuY2llcy5hZGQoeCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXp5RGVwZW5kZW5jaWVzLmRlbGV0ZShub2RlLmlkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ub2Rlc1tub2RlLmlkXSA9IG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZU5vZGUobm9kZUlkOiBzdHJpbmcgfCBXb3JrTm9kZSkge1xuICAgIGNvbnN0IGlkID0gdHlwZW9mIG5vZGVJZCA9PT0gJ3N0cmluZycgPyBub2RlSWQgOiBub2RlSWQuaWQ7XG4gICAgY29uc3QgcmVtb3ZlZE5vZGUgPSB0aGlzLm5vZGVzW2lkXTtcblxuICAgIHRoaXMubGF6eURlcGVuZGVuY2llcy5kZWxldGUoaWQpO1xuICAgIGRlbGV0ZSB0aGlzLm5vZGVzW2lkXTtcblxuICAgIGlmIChyZW1vdmVkTm9kZSkge1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIE9iamVjdC52YWx1ZXModGhpcy5ub2RlcykpIHtcbiAgICAgICAgbm9kZS5kZXBlbmRlbmNpZXMuZGVsZXRlKHJlbW92ZWROb2RlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBub2RlcyBvZiBhIGdpdmVuIHR5cGVcbiAgICovXG4gIHB1YmxpYyBub2Rlc09mVHlwZTxUIGV4dGVuZHMgV29ya05vZGVbJ3R5cGUnXT4odHlwZTogVCk6IEV4dHJhY3Q8V29ya05vZGUsIHsgdHlwZTogVCB9PltdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIobiA9PiBuLnR5cGUgPT09IHR5cGUpIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIG5vZGVzIHRoYXQgZGVwZW5kIG9uIGEgZ2l2ZW4gbm9kZVxuICAgKi9cbiAgcHVibGljIGRlcGVuZGVlcyhub2RlSWQ6IHN0cmluZyB8IFdvcmtOb2RlKSB7XG4gICAgY29uc3QgaWQgPSB0eXBlb2Ygbm9kZUlkID09PSAnc3RyaW5nJyA/IG5vZGVJZCA6IG5vZGVJZC5pZDtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIobiA9PiBuLmRlcGVuZGVuY2llcy5oYXMoaWQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkZXBlbmRlbmN5LCB0aGF0IG1heSBjb21lIGJlZm9yZSBvciBhZnRlciB0aGUgbm9kZXMgaW52b2x2ZWRcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KGZyb21JZDogc3RyaW5nLCB0b0lkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ub2Rlc1tmcm9tSWRdO1xuICAgIGlmIChub2RlKSB7XG4gICAgICBub2RlLmRlcGVuZGVuY2llcy5hZGQodG9JZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBsYXp5RGVwcyA9IHRoaXMubGF6eURlcGVuZGVuY2llcy5nZXQoZnJvbUlkKTtcbiAgICBpZiAoIWxhenlEZXBzKSB7XG4gICAgICBsYXp5RGVwcyA9IFtdO1xuICAgICAgdGhpcy5sYXp5RGVwZW5kZW5jaWVzLnNldChmcm9tSWQsIGxhenlEZXBzKTtcbiAgICB9XG4gICAgbGF6eURlcHMucHVzaCh0b0lkKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlHZXROb2RlKGlkOiBzdHJpbmcpOiBXb3JrTm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNbaWRdO1xuICB9XG5cbiAgcHVibGljIG5vZGUoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHJldCA9IHRoaXMubm9kZXNbaWRdO1xuICAgIGlmICghcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdOb2RlTm90Rm91bmQnLCBgTm8gbm9kZSB3aXRoIGlkICR7aWR9IGFtb25nICR7T2JqZWN0LmtleXModGhpcy5ub2Rlcyl9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwdWJsaWMgYWJzb3JiKGdyYXBoOiBXb3JrR3JhcGgpIHtcbiAgICB0aGlzLmFkZE5vZGVzKC4uLk9iamVjdC52YWx1ZXMoZ3JhcGgubm9kZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzRmFpbGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLnNvbWUoKG4pID0+IG4uZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuRkFJTEVEKTtcbiAgfVxuXG4gIHB1YmxpYyBkb1BhcmFsbGVsKGNvbmN1cnJlbmN5OiBDb25jdXJyZW5jeSwgYWN0aW9uczogV29ya0dyYXBoQWN0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZvckFsbEFydGlmYWN0cyhjb25jdXJyZW5jeSwgYXN5bmMgKHg6IFdvcmtOb2RlKSA9PiB7XG4gICAgICBzd2l0Y2ggKHgudHlwZSkge1xuICAgICAgICBjYXNlICdzdGFjayc6XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5kZXBsb3lTdGFjayh4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXNzZXQtYnVpbGQnOlxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuYnVpbGRBc3NldCh4KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXNzZXQtcHVibGlzaCc6XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5wdWJsaXNoQXNzZXQoeCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhbGwgc3RhY2sgbm9kZXMgaW4gZGVwZW5kZW5jeSBvcmRlciB3aXRoIHRoZSBnaXZlbiBjb25jdXJyZW5jeS5cbiAgICpcbiAgICogVW5saWtlIGBkb1BhcmFsbGVsYCwgdGhpcyBtZXRob2Qgb25seSBoYW5kbGVzIHN0YWNrIG5vZGVzIGFuZCB0YWtlcyBhXG4gICAqIHNpbXBsZSBjYWxsYmFjay4gSW50ZW5kZWQgZm9yIGRlc3Ryb3kgd2hlcmUgdGhlcmUgYXJlIG5vIGFzc2V0IG5vZGVzLlxuICAgKi9cbiAgcHVibGljIHByb2Nlc3NTdGFja3MoY29uY3VycmVuY3k6IG51bWJlciwgZm46IChzdGFja05vZGU6IFN0YWNrTm9kZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHJldHVybiB0aGlzLmZvckFsbEFydGlmYWN0cyhjb25jdXJyZW5jeSwgYXN5bmMgKHg6IFdvcmtOb2RlKSA9PiB7XG4gICAgICBpZiAoeC50eXBlICE9PSAnc3RhY2snKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGZuKHgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2V0IG9mIHVuYmxvY2tlZCBub2Rlc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8UmVhZG9ubHlBcnJheTxXb3JrTm9kZT4+IHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJlYWR5UG9vbCgpO1xuICAgIHJldHVybiB0aGlzLnJlYWR5UG9vbDtcbiAgfVxuXG4gIHByaXZhdGUgZm9yQWxsQXJ0aWZhY3RzKG46IENvbmN1cnJlbmN5LCBmbjogKHg6IFdvcmtOb2RlKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZ3JhcGggPSB0aGlzO1xuXG4gICAgLy8gSWYgJ24nIGlzIGEgbnVtYmVyLCB3ZSBsaW1pdCBhbGwgY29uY3VycmVuY3kgZXF1YWxseSAoZWZmZWN0aXZlbHkgd2Ugd2lsbCBiZSB1c2luZyB0b3RhbE1heClcbiAgICAvLyBJZiAnbicgaXMgYSByZWNvcmQsIHdlIGxpbWl0IGVhY2ggam9iIGluZGVwZW5kZW50bHkgKGVmZmVjdGl2ZWx5IHdlIHdpbGwgYmUgdXNpbmcgbWF4KVxuICAgIGNvbnN0IG1heDogUmVjb3JkPFdvcmtOb2RlWyd0eXBlJ10sIG51bWJlcj4gPSB0eXBlb2YgbiA9PT0gJ251bWJlcicgP1xuICAgICAge1xuICAgICAgICAnYXNzZXQtYnVpbGQnOiBuLFxuICAgICAgICAnYXNzZXQtcHVibGlzaCc6IG4sXG4gICAgICAgICdzdGFjayc6IG4sXG4gICAgICB9IDogbjtcbiAgICBjb25zdCB0b3RhbE1heCA9IHR5cGVvZiBuID09PSAnbnVtYmVyJyA/IG4gOiBzdW0oT2JqZWN0LnZhbHVlcyhuKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKG9rLCBmYWlsKSA9PiB7XG4gICAgICBsZXQgYWN0aXZlOiBSZWNvcmQ8V29ya05vZGVbJ3R5cGUnXSwgbnVtYmVyPiA9IHtcbiAgICAgICAgJ2Fzc2V0LWJ1aWxkJzogMCxcbiAgICAgICAgJ2Fzc2V0LXB1Ymxpc2gnOiAwLFxuICAgICAgICAnc3RhY2snOiAwLFxuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIHRvdGFsQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gc3VtKE9iamVjdC52YWx1ZXMoYWN0aXZlKSk7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0KCk7XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICAgICBncmFwaC51cGRhdGVSZWFkeVBvb2woKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyYXBoLnJlYWR5UG9vbC5sZW5ndGg7ICkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGdyYXBoLnJlYWR5UG9vbFtpXTtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZVtub2RlLnR5cGVdIDwgbWF4W25vZGUudHlwZV0gJiYgdG90YWxBY3RpdmUoKSA8IHRvdGFsTWF4KSB7XG4gICAgICAgICAgICAgIGdyYXBoLnJlYWR5UG9vbC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgIHN0YXJ0T25lKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0b3RhbEFjdGl2ZSgpID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoZ3JhcGguZG9uZSgpKSB7XG4gICAgICAgICAgICAgIG9rKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3YWl0IGZvciBvdGhlciBhY3RpdmUgZGVwbG95cyB0byBmaW5pc2ggYmVmb3JlIGZhaWxpbmdcbiAgICAgICAgICAgIGlmIChncmFwaC5oYXNGYWlsZWQoKSkge1xuICAgICAgICAgICAgICBmYWlsKGdyYXBoLmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgZmFpbChlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0T25lKHg6IFdvcmtOb2RlKSB7XG4gICAgICAgIHguZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkRFUExPWUlORztcbiAgICAgICAgYWN0aXZlW3gudHlwZV0rKztcbiAgICAgICAgdm9pZCBmbih4KVxuICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIGFjdGl2ZVt4LnR5cGVdLS07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBncmFwaC5kZXBsb3llZCh4KTtcbiAgICAgICAgICAgIHN0YXJ0KCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgLy8gQnkgcmVjb3JkaW5nIHRoZSBmYWlsdXJlIGltbWVkaWF0ZWx5IGFzIHRoZSBxdWV1ZWQgdGFzayBleGl0cywgd2UgcHJldmVudCB0aGUgbmV4dFxuICAgICAgICAgICAgLy8gcXVldWVkIHRhc2sgZnJvbSBzdGFydGluZy5cbiAgICAgICAgICAgIGdyYXBoLmZhaWxlZCh4LCBlcnIpO1xuICAgICAgICAgICAgc3RhcnQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5ldmVyeSgobikgPT4gRGVwbG95bWVudFN0YXRlLkNPTVBMRVRFRCA9PT0gbi5kZXBsb3ltZW50U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXBsb3llZChub2RlOiBXb3JrTm9kZSkge1xuICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkNPTVBMRVRFRDtcbiAgfVxuXG4gIHByaXZhdGUgZmFpbGVkKG5vZGU6IFdvcmtOb2RlLCBlcnJvcj86IEVycm9yKSB7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkZBSUxFRDtcbiAgICB0aGlzLnNraXBSZXN0KCk7XG4gICAgdGhpcy5yZWFkeVBvb2wuc3BsaWNlKDApO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBbXG4gICAgICAnZGlncmFwaCBEIHsnLFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXModGhpcy5ub2RlcykuZmxhdE1hcCgoW2lkLCBub2RlXSkgPT4gcmVuZGVyTm9kZShpZCwgbm9kZSkpLFxuICAgICAgJ30nLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBmdW5jdGlvbiByZW5kZXJOb2RlKGlkOiBzdHJpbmcsIG5vZGU6IFdvcmtOb2RlKTogc3RyaW5nW10ge1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICBpZiAobm9kZS5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5DT01QTEVURUQpIHtcbiAgICAgICAgcmV0LnB1c2goYCAgJHtndihpZCwgeyBzdHlsZTogJ2ZpbGxlZCcsIGZpbGxjb2xvcjogJ3llbGxvdycsIGNvbW1lbnQ6IG5vZGUubm90ZSB9KX07YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQucHVzaChgICAke2d2KGlkLCB7IGNvbW1lbnQ6IG5vZGUubm90ZSB9KX07YCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiBub2RlLmRlcGVuZGVuY2llcykge1xuICAgICAgICByZXQucHVzaChgICAke2d2KGlkKX0gLT4gJHtndihkZXApfTtgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSBhbGwgZGVwZW5kZW5jaWVzIGFjdHVhbGx5IGV4aXN0LiBUaGlzIHByb3RlY3RzIGFnYWluc3Qgc2NlbmFyaW9zIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzpcbiAgICogU3RhY2tBIGRlcGVuZHMgb24gU3RhY2tCLCBidXQgU3RhY2tCIGlzIG5vdCBzZWxlY3RlZCB0byBkZXBsb3kuIFRoZSBkZXBlbmRlbmN5IGlzIHJlZHVuZGFudFxuICAgKiBhbmQgd2lsbCBiZSBkcm9wcGVkLlxuICAgKiBUaGlzIGFzc3VtZXMgdGhlIG1hbmlmZXN0IGNvbWVzIHVuY29ycnVwdGVkIHNvIHdlIHdpbGwgbm90IGZhaWwgaWYgYSBkZXBlbmRlbmN5IGlzIG5vdCBmb3VuZC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVVbmF2YWlsYWJsZURlcGVuZGVuY2llcygpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKSkge1xuICAgICAgY29uc3QgcmVtb3ZlRGVwcyA9IEFycmF5LmZyb20obm9kZS5kZXBlbmRlbmNpZXMpLmZpbHRlcigoZGVwKSA9PiB0aGlzLm5vZGVzW2RlcF0gPT09IHVuZGVmaW5lZCk7XG5cbiAgICAgIHJlbW92ZURlcHMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICBub2RlLmRlcGVuZGVuY2llcy5kZWxldGUoZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBhc3NldCBwdWJsaXNoaW5nIHN0ZXBzIGZvciBhc3NldHMgdGhhdCBhcmUgYWxyZWFkeSBwdWJsaXNoZWQsIGFuZCB0aGVuIGJ1aWxkXG4gICAqIHRoYXQgYXJlbid0IHVzZWQgYW55bW9yZS5cbiAgICpcbiAgICogRG8gdGhpcyBpbiBwYXJhbGxlbCwgYmVjYXVzZSB0aGVyZSBtYXkgYmUgYSBsb3Qgb2YgYXNzZXRzIGluIGFuIGFwcGxpY2F0aW9uIChzZWVuIGluIHByYWN0aWNlOiA+MTAwIGFzc2V0cylcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW1vdmVVbm5lY2Vzc2FyeUFzc2V0cyhpc1VubmVjZXNzYXJ5OiAoeDogQXNzZXRQdWJsaXNoTm9kZSkgPT4gUHJvbWlzZTxib29sZWFuPikge1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMuZGVidWcoJ0NoZWNraW5nIGZvciBwcmV2aW91c2x5IHB1Ymxpc2hlZCBhc3NldHMnKTtcblxuICAgIGNvbnN0IHB1Ymxpc2hlcyA9IHRoaXMubm9kZXNPZlR5cGUoJ2Fzc2V0LXB1Ymxpc2gnKTtcblxuICAgIGNvbnN0IGNsYXNzaWZpZWROb2RlcyA9IGF3YWl0IHBhcmFsbGVsUHJvbWlzZXMoXG4gICAgICA4LFxuICAgICAgcHVibGlzaGVzLm1hcCgoYXNzZXROb2RlKSA9PiBhc3luYygpID0+IFthc3NldE5vZGUsIGF3YWl0IGlzVW5uZWNlc3NhcnkoYXNzZXROb2RlKV0gYXMgY29uc3QpKTtcblxuICAgIGNvbnN0IGFscmVhZHlQdWJsaXNoZWQgPSBjbGFzc2lmaWVkTm9kZXMuZmlsdGVyKChbXywgdW5uZWNlc3NhcnldKSA9PiB1bm5lY2Vzc2FyeSkubWFwKChbYXNzZXROb2RlLCBfXSkgPT4gYXNzZXROb2RlKTtcbiAgICBmb3IgKGNvbnN0IGFzc2V0Tm9kZSBvZiBhbHJlYWR5UHVibGlzaGVkKSB7XG4gICAgICB0aGlzLnJlbW92ZU5vZGUoYXNzZXROb2RlKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLmRlYnVnKGAke3B1Ymxpc2hlcy5sZW5ndGh9IHRvdGFsIGFzc2V0cywgJHtwdWJsaXNoZXMubGVuZ3RoIC0gYWxyZWFkeVB1Ymxpc2hlZC5sZW5ndGh9IHN0aWxsIG5lZWQgdG8gYmUgcHVibGlzaGVkYCk7XG5cbiAgICAvLyBOb3cgYWxzbyByZW1vdmUgYW55IGFzc2V0IGJ1aWxkIHN0ZXBzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZW0gYW55bW9yZVxuICAgIGNvbnN0IHVudXNlZEJ1aWxkcyA9IHRoaXMubm9kZXNPZlR5cGUoJ2Fzc2V0LWJ1aWxkJykuZmlsdGVyKGJ1aWxkID0+IHRoaXMuZGVwZW5kZWVzKGJ1aWxkKS5sZW5ndGggPT09IDApO1xuICAgIGZvciAoY29uc3QgdW51c2VkQnVpbGQgb2YgdW51c2VkQnVpbGRzKSB7XG4gICAgICB0aGlzLnJlbW92ZU5vZGUodW51c2VkQnVpbGQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlUmVhZHlQb29sKCkge1xuICAgIGNvbnN0IGFjdGl2ZUNvdW50ID0gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIoKHgpID0+IHguZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuREVQTE9ZSU5HKS5sZW5ndGg7XG4gICAgY29uc3QgcGVuZGluZ0NvdW50ID0gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIoKHgpID0+IHguZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuUEVORElORykubGVuZ3RoO1xuXG4gICAgY29uc3QgbmV3bHlSZWFkeSA9IE9iamVjdC52YWx1ZXModGhpcy5ub2RlcykuZmlsdGVyKCh4KSA9PlxuICAgICAgeC5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5QRU5ESU5HICYmXG4gICAgICBBcnJheS5mcm9tKHguZGVwZW5kZW5jaWVzKS5ldmVyeSgoaWQpID0+IHRoaXMubm9kZShpZCkuZGVwbG95bWVudFN0YXRlID09PSBEZXBsb3ltZW50U3RhdGUuQ09NUExFVEVEKSk7XG5cbiAgICAvLyBBZGQgbmV3bHkgYXZhaWxhYmxlIG5vZGVzIHRvIHRoZSByZWFkeSBwb29sXG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5ld2x5UmVhZHkpIHtcbiAgICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLlFVRVVFRDtcbiAgICAgIHRoaXMucmVhZHlQb29sLnB1c2gobm9kZSk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIG5vZGVzIGZyb20gdGhlIHJlYWR5IHBvb2wgdGhhdCBoYXZlIGFscmVhZHkgc3RhcnRlZCBkZXBsb3lpbmdcbiAgICByZXRhaW5Pbmx5KHRoaXMucmVhZHlQb29sLCAobm9kZSkgPT4gbm9kZS5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5RVUVVRUQpO1xuXG4gICAgLy8gU29ydCBieSByZXZlcnNlIHByaW9yaXR5XG4gICAgdGhpcy5yZWFkeVBvb2wuc29ydCgoYSwgYikgPT4gKGIucHJpb3JpdHkgPz8gMCkgLSAoYS5wcmlvcml0eSA/PyAwKSk7XG5cbiAgICBpZiAodGhpcy5yZWFkeVBvb2wubGVuZ3RoID09PSAwICYmIGFjdGl2ZUNvdW50ID09PSAwICYmIHBlbmRpbmdDb3VudCA+IDApIHtcbiAgICAgIGNvbnN0IGN5Y2xlID0gdGhpcy5maW5kQ3ljbGUoKSA/PyBbJ05vIGN5Y2xlIGZvdW5kISddO1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgQ3ljbGUgJHtjeWNsZS5qb2luKCcgLT4gJyl9IGluIGdyYXBoICR7dGhpc31gKTtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ0RlcGVuZGVuY3lDeWNsZScsIGBVbmFibGUgdG8gbWFrZSBwcm9ncmVzcyBhbnltb3JlLCBkZXBlbmRlbmN5IGN5Y2xlIGJldHdlZW4gcmVtYWluaW5nIGFydGlmYWN0czogJHtjeWNsZS5qb2luKCcgLT4gJyl9IChydW4gd2l0aCAtdnYgZm9yIGZ1bGwgZ3JhcGgpYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBza2lwUmVzdCgpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKSkge1xuICAgICAgaWYgKFtEZXBsb3ltZW50U3RhdGUuUVVFVUVELCBEZXBsb3ltZW50U3RhdGUuUEVORElOR10uaW5jbHVkZXMobm9kZS5kZXBsb3ltZW50U3RhdGUpKSB7XG4gICAgICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLlNLSVBQRUQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgY3ljbGVzIGluIGEgZ3JhcGhcbiAgICpcbiAgICogTm90IHRoZSBmYXN0ZXN0LCBidXQgZWZmZWN0aXZlIGFuZCBzaG91bGQgYmUgcmFyZVxuICAgKi9cbiAgcHVibGljIGZpbmRDeWNsZSgpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIE9iamVjdC5rZXlzKHRoaXMubm9kZXMpKSB7XG4gICAgICBjb25zdCBjeWNsZSA9IHJlY3Vyc2Uobm9kZUlkLCBbbm9kZUlkXSk7XG4gICAgICBpZiAoY3ljbGUpIHtcbiAgICAgICAgcmV0dXJuIGN5Y2xlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzZShub2RlSWQ6IHN0cmluZywgcGF0aDogc3RyaW5nW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAoc2Vlbi5oYXMobm9kZUlkKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygc2VsZi5ub2Rlc1tub2RlSWRdLmRlcGVuZGVuY2llcyA/PyBbXSkge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGF0aC5pbmRleE9mKGRlcCk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4ucGF0aC5zbGljZShpbmRleCksIGRlcF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY3ljbGUgPSByZWN1cnNlKGRlcCwgWy4uLnBhdGgsIGRlcF0pO1xuICAgICAgICAgIGlmIChjeWNsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGN5Y2xlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZWVuLmFkZChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBgZW5kYCBub2RlIGlzIHJlYWNoYWJsZSBmcm9tIHRoZSBgc3RhcnRgIG5vZGUsIGZvbGxvd2luZyB0aGUgZGVwZW5kZW5jeSBhcnJvd3NcbiAgICovXG4gIHB1YmxpYyByZWFjaGFibGUoc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIHJlY3Vyc2Uoc3RhcnQpO1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzZShjdXJyZW50OiBzdHJpbmcpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhjdXJyZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChjdXJyZW50KTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IGVuZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHNlbGYubm9kZXNbY3VycmVudF0uZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGlmIChyZWN1cnNlKGRlcCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtHcmFwaEFjdGlvbnMge1xuICBkZXBsb3lTdGFjazogKHN0YWNrTm9kZTogU3RhY2tOb2RlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBidWlsZEFzc2V0OiAoYXNzZXROb2RlOiBBc3NldEJ1aWxkTm9kZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHVibGlzaEFzc2V0OiAoYXNzZXROb2RlOiBBc3NldFB1Ymxpc2hOb2RlKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5mdW5jdGlvbiBzdW0oeHM6IG51bWJlcltdKSB7XG4gIGxldCByZXQgPSAwO1xuICBmb3IgKGNvbnN0IHggb2YgeHMpIHtcbiAgICByZXQgKz0geDtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiByZXRhaW5Pbmx5PEE+KHhzOiBBW10sIHByZWQ6ICh4OiBBKSA9PiBib29sZWFuKSB7XG4gIHhzLnNwbGljZSgwLCB4cy5sZW5ndGgsIC4uLnhzLmZpbHRlcihwcmVkKSk7XG59XG5cbmZ1bmN0aW9uIGd2KGlkOiBzdHJpbmcsIGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPikge1xuICBjb25zdCBhdHRyU3RyaW5nID0gT2JqZWN0LmVudHJpZXMoYXR0cnMgPz8ge30pLmZsYXRNYXAoKFtrLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkID8gW2Ake2t9PVwiJHt2fVwiYF0gOiBbXSkuam9pbignLCcpO1xuXG4gIHJldHVybiBhdHRyU3RyaW5nID8gYFwiJHtzaW1wbGlmeUlkKGlkKX1cIiBbJHthdHRyU3RyaW5nfV1gIDogYFwiJHtzaW1wbGlmeUlkKGlkKX1cImA7XG59XG5cbmZ1bmN0aW9uIHNpbXBsaWZ5SWQoaWQ6IHN0cmluZykge1xuICByZXR1cm4gaWQucmVwbGFjZSgvKFswLTlhLWZdezZ9KVswLTlhLWZdezYsfS9nLCAnJDEnKTtcbn1cbiJdfQ==
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -30,4 +30,5 @@ __exportStar(require("./api/cloud-assembly"), exports);
|
|
|
30
30
|
__exportStar(require("./api/io"), exports);
|
|
31
31
|
__exportStar(require("./api/tags"), exports);
|
|
32
32
|
__exportStar(require("./api/plugin"), exports);
|
|
33
|
-
|
|
33
|
+
__exportStar(require("./api/source-tracing"), exports);
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxrQkFBa0I7QUFDbEIsc0NBQW9DO0FBRXBDLGdCQUFnQjtBQUNoQiw0Q0FBMEI7QUFDMUIsMERBQXdDO0FBQ3hDLDRDQUEwQjtBQUMxQiw2Q0FBMkI7QUFFM0Isa0JBQWtCO0FBQ2xCLGlEQUErQjtBQUMvQix1REFBcUM7QUFDckMsMkNBQXlCO0FBQ3pCLDZDQUEyQjtBQUMzQiwrQ0FBNkI7QUFDN0IsdURBQXFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIHRvb2xraXQtbGliXG4gKi9cblxuLy8gUG9seWZpbGxzIGZpcnN0XG5pbXBvcnQgJy4vcHJpdmF0ZS9kaXNwb3NlLXBvbHlmaWxsJztcblxuLy8gVGhlIG1haW4gc2hvd1xuZXhwb3J0ICogZnJvbSAnLi90b29sa2l0JztcbmV4cG9ydCAqIGZyb20gJy4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3BheWxvYWRzJztcblxuLy8gU3VwcG9ydGluZyBhY3RzXG5leHBvcnQgKiBmcm9tICcuL2FwaS9hd3MtYXV0aCc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS9jbG91ZC1hc3NlbWJseSc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS9pbyc7XG5leHBvcnQgKiBmcm9tICcuL2FwaS90YWdzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpL3BsdWdpbic7XG5leHBvcnQgKiBmcm9tICcuL2FwaS9zb3VyY2UtdHJhY2luZyc7XG4iXX0=
|
package/lib/index_bg.wasm
CHANGED
|
Binary file
|
package/lib/toolkit/toolkit.d.ts
CHANGED
|
@@ -4,9 +4,11 @@ import type { DeployResult, DestroyResult, FeatureFlag, RollbackResult } from '.
|
|
|
4
4
|
import type { BootstrapEnvironments, BootstrapOptions, BootstrapResult } from '../actions/bootstrap';
|
|
5
5
|
import { type DeployOptions } from '../actions/deploy';
|
|
6
6
|
import { type DestroyOptions } from '../actions/destroy';
|
|
7
|
+
import type { DiagnoseOptions, DiagnoseResult } from '../actions/diagnose';
|
|
7
8
|
import type { DiffOptions } from '../actions/diff';
|
|
8
9
|
import type { DriftOptions, DriftResult } from '../actions/drift';
|
|
9
10
|
import { type ListOptions } from '../actions/list';
|
|
11
|
+
import type { OrphanOptions } from '../actions/orphan';
|
|
10
12
|
import type { PublishAssetsOptions, PublishAssetsResult } from '../actions/publish-assets';
|
|
11
13
|
import type { RefactorOptions } from '../actions/refactor';
|
|
12
14
|
import { type RollbackOptions } from '../actions/rollback';
|
|
@@ -76,7 +78,7 @@ export interface ToolkitOptions {
|
|
|
76
78
|
* Names of toolkit features that are still under development, and may change in
|
|
77
79
|
* the future.
|
|
78
80
|
*/
|
|
79
|
-
export type UnstableFeature = 'refactor' | 'flags' | 'publish-assets';
|
|
81
|
+
export type UnstableFeature = 'refactor' | 'orphan' | 'flags' | 'publish-assets' | 'diagnose';
|
|
80
82
|
/**
|
|
81
83
|
* The AWS CDK Programmatic Toolkit
|
|
82
84
|
*/
|
|
@@ -136,6 +138,16 @@ export declare class Toolkit extends CloudAssemblySourceBuilder {
|
|
|
136
138
|
* List selected stacks and their dependencies
|
|
137
139
|
*/
|
|
138
140
|
list(cx: ICloudAssemblySource, options?: ListOptions): Promise<StackDetails[]>;
|
|
141
|
+
/**
|
|
142
|
+
* Try to find the root causes for deployment failures of the given stacks.
|
|
143
|
+
*
|
|
144
|
+
* Both emits the diagnosis results over the IO host as they are coming in, as well
|
|
145
|
+
* as returns all of them as the result of the function.
|
|
146
|
+
*
|
|
147
|
+
* NOTE: The Cloud Assembly Source **should** be configured with `debug: true` to add
|
|
148
|
+
* the maximum number of diagnostics.
|
|
149
|
+
*/
|
|
150
|
+
diagnose(cx: ICloudAssemblySource, options?: DiagnoseOptions): Promise<DiagnoseResult>;
|
|
139
151
|
/**
|
|
140
152
|
* Deploy Action
|
|
141
153
|
*
|
|
@@ -165,6 +177,10 @@ export declare class Toolkit extends CloudAssemblySourceBuilder {
|
|
|
165
177
|
* Helper to allow rollback being called as part of the deploy or watch action.
|
|
166
178
|
*/
|
|
167
179
|
private _rollback;
|
|
180
|
+
/**
|
|
181
|
+
* Orphan Action. Detaches resources from a CloudFormation stack without deleting them.
|
|
182
|
+
*/
|
|
183
|
+
orphan(cx: ICloudAssemblySource, options: OrphanOptions): Promise<void>;
|
|
168
184
|
/**
|
|
169
185
|
* Refactor Action. Moves resources from one location (stack + logical ID) to another.
|
|
170
186
|
*/
|