aws-cdk 2.12.0 → 2.13.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/README.md +3 -2
- package/bin/cdk.d.ts +1 -3
- package/bin/cdk.js +3 -511
- package/build-info.json +2 -2
- package/lib/api/aws-auth/sdk.d.ts +2 -0
- package/lib/api/aws-auth/sdk.js +4 -1
- package/lib/api/cxapp/cloud-executable.js +12 -8
- package/lib/api/evaluate-cloudformation-template.js +34 -2
- package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -0
- package/lib/api/hotswap/appsync-mapping-templates.js +69 -0
- package/lib/api/hotswap-deployments.js +3 -1
- package/lib/cli.d.ts +3 -0
- package/lib/cli.js +545 -0
- package/lib/commands/context.d.ts +0 -16
- package/lib/commands/context.js +2 -20
- package/lib/commands/docs.d.ts +0 -13
- package/lib/commands/docs.js +2 -19
- package/lib/commands/doctor.d.ts +0 -5
- package/lib/commands/doctor.js +2 -9
- package/lib/index.d.ts +3 -0
- package/lib/index.js +17 -0
- package/lib/init-templates/v1/app/javascript/README.md +5 -5
- package/lib/init-templates/v1/app/typescript/README.md +7 -7
- package/lib/init-templates/v1/lib/typescript/README.template.md +4 -4
- package/lib/init-templates/v1/sample-app/javascript/README.template.md +7 -6
- package/lib/init-templates/v1/sample-app/typescript/README.template.md +9 -9
- package/lib/init-templates/v2/app/javascript/README.md +5 -5
- package/lib/init-templates/v2/app/typescript/README.md +7 -7
- package/lib/init-templates/v2/lib/typescript/README.template.md +4 -4
- package/lib/init-templates/v2/sample-app/javascript/README.template.md +5 -5
- package/lib/init-templates/v2/sample-app/typescript/README.template.md +7 -7
- package/npm-shrinkwrap.json +75 -31
- package/package.json +11 -11
- package/test/api/cloud-executable.test.js +57 -32
- package/test/api/hotswap/appsync-mapping-templates-hotswap-deployments.test.d.ts +1 -0
- package/test/api/hotswap/appsync-mapping-templates-hotswap-deployments.test.js +336 -0
- package/test/api/hotswap/hotswap-test-setup.d.ts +1 -0
- package/test/api/hotswap/hotswap-test-setup.js +4 -1
- package/test/api/hotswap/state-machine-hotswap-deployments.test.js +72 -1
- package/test/cdk-docs.test.js +4 -7
- package/test/cdk-doctor.test.js +3 -4
- package/test/util/mock-sdk.d.ts +6 -0
- package/test/util/mock-sdk.js +11 -1
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const setup = require("./hotswap-test-setup");
|
|
4
|
+
let hotswapMockSdkProvider;
|
|
5
|
+
let mockUpdateResolver;
|
|
6
|
+
let mockUpdateFunction;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
hotswapMockSdkProvider = setup.setupHotswapTests();
|
|
9
|
+
mockUpdateResolver = jest.fn();
|
|
10
|
+
mockUpdateFunction = jest.fn();
|
|
11
|
+
hotswapMockSdkProvider.stubAppSync({ updateResolver: mockUpdateResolver, updateFunction: mockUpdateFunction });
|
|
12
|
+
});
|
|
13
|
+
test('returns undefined when a new Resolver is added to the Stack', async () => {
|
|
14
|
+
// GIVEN
|
|
15
|
+
const cdkStackArtifact = setup.cdkStackArtifactOf({
|
|
16
|
+
template: {
|
|
17
|
+
Resources: {
|
|
18
|
+
AppSyncResolver: {
|
|
19
|
+
Type: 'AWS::AppSync::Resolver',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
// WHEN
|
|
25
|
+
const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
|
|
26
|
+
// THEN
|
|
27
|
+
expect(deployStackResult).toBeUndefined();
|
|
28
|
+
});
|
|
29
|
+
test('calls the updateResolver() API when it receives only a mapping template difference in a Unit Resolver', async () => {
|
|
30
|
+
// GIVEN
|
|
31
|
+
setup.setCurrentCfnStackTemplate({
|
|
32
|
+
Resources: {
|
|
33
|
+
AppSyncResolver: {
|
|
34
|
+
Type: 'AWS::AppSync::Resolver',
|
|
35
|
+
Properties: {
|
|
36
|
+
ApiId: 'apiId',
|
|
37
|
+
FieldName: 'myField',
|
|
38
|
+
TypeName: 'Query',
|
|
39
|
+
DataSourceName: 'my-datasource',
|
|
40
|
+
Kind: 'UNIT',
|
|
41
|
+
RequestMappingTemplate: '## original request template',
|
|
42
|
+
ResponseMappingTemplate: '## original response template',
|
|
43
|
+
},
|
|
44
|
+
Metadata: {
|
|
45
|
+
'aws:asset:path': 'old-path',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
setup.pushStackResourceSummaries(setup.stackSummaryOf('AppSyncResolver', 'AWS::AppSync::Resolver', 'arn:aws:appsync:us-east-1:111111111111:apis/apiId/types/Query/resolvers/myField'));
|
|
51
|
+
const cdkStackArtifact = setup.cdkStackArtifactOf({
|
|
52
|
+
template: {
|
|
53
|
+
Resources: {
|
|
54
|
+
AppSyncResolver: {
|
|
55
|
+
Type: 'AWS::AppSync::Resolver',
|
|
56
|
+
Properties: {
|
|
57
|
+
ApiId: 'apiId',
|
|
58
|
+
FieldName: 'myField',
|
|
59
|
+
TypeName: 'Query',
|
|
60
|
+
DataSourceName: 'my-datasource',
|
|
61
|
+
Kind: 'UNIT',
|
|
62
|
+
RequestMappingTemplate: '## new request template',
|
|
63
|
+
ResponseMappingTemplate: '## original response template',
|
|
64
|
+
},
|
|
65
|
+
Metadata: {
|
|
66
|
+
'aws:asset:path': 'new-path',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
// WHEN
|
|
73
|
+
const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
|
|
74
|
+
// THEN
|
|
75
|
+
expect(deployStackResult).not.toBeUndefined();
|
|
76
|
+
expect(mockUpdateResolver).toHaveBeenCalledWith({
|
|
77
|
+
apiId: 'apiId',
|
|
78
|
+
dataSourceName: 'my-datasource',
|
|
79
|
+
typeName: 'Query',
|
|
80
|
+
fieldName: 'myField',
|
|
81
|
+
kind: 'UNIT',
|
|
82
|
+
requestMappingTemplate: '## new request template',
|
|
83
|
+
responseMappingTemplate: '## original response template',
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
test('does not call the updateResolver() API when it receives only a mapping template difference in a Pipeline Resolver', async () => {
|
|
87
|
+
// GIVEN
|
|
88
|
+
setup.setCurrentCfnStackTemplate({
|
|
89
|
+
Resources: {
|
|
90
|
+
AppSyncResolver: {
|
|
91
|
+
Type: 'AWS::AppSync::Resolver',
|
|
92
|
+
Properties: {
|
|
93
|
+
ApiId: 'apiId',
|
|
94
|
+
FieldName: 'myField',
|
|
95
|
+
TypeName: 'Query',
|
|
96
|
+
DataSourceName: 'my-datasource',
|
|
97
|
+
Kind: 'PIPELINE',
|
|
98
|
+
PipelineConfig: ['function1'],
|
|
99
|
+
RequestMappingTemplate: '## original request template',
|
|
100
|
+
ResponseMappingTemplate: '## original response template',
|
|
101
|
+
},
|
|
102
|
+
Metadata: {
|
|
103
|
+
'aws:asset:path': 'old-path',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
const cdkStackArtifact = setup.cdkStackArtifactOf({
|
|
109
|
+
template: {
|
|
110
|
+
Resources: {
|
|
111
|
+
AppSyncResolver: {
|
|
112
|
+
Type: 'AWS::AppSync::Resolver',
|
|
113
|
+
Properties: {
|
|
114
|
+
ApiId: 'apiId',
|
|
115
|
+
FieldName: 'myField',
|
|
116
|
+
TypeName: 'Query',
|
|
117
|
+
DataSourceName: 'my-datasource',
|
|
118
|
+
Kind: 'PIPELINE',
|
|
119
|
+
PipelineConfig: ['function1'],
|
|
120
|
+
RequestMappingTemplate: '## new request template',
|
|
121
|
+
ResponseMappingTemplate: '## original response template',
|
|
122
|
+
},
|
|
123
|
+
Metadata: {
|
|
124
|
+
'aws:asset:path': 'new-path',
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
// WHEN
|
|
131
|
+
const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
|
|
132
|
+
// THEN
|
|
133
|
+
expect(deployStackResult).toBeUndefined();
|
|
134
|
+
expect(mockUpdateResolver).not.toHaveBeenCalled();
|
|
135
|
+
});
|
|
136
|
+
test('does not call the updateResolver() API when it receives a change that is not a mapping template difference in a Resolver', async () => {
|
|
137
|
+
// GIVEN
|
|
138
|
+
setup.setCurrentCfnStackTemplate({
|
|
139
|
+
Resources: {
|
|
140
|
+
AppSyncResolver: {
|
|
141
|
+
Type: 'AWS::AppSync::Resolver',
|
|
142
|
+
Properties: {
|
|
143
|
+
RequestMappingTemplate: '## original template',
|
|
144
|
+
FieldName: 'oldField',
|
|
145
|
+
},
|
|
146
|
+
Metadata: {
|
|
147
|
+
'aws:asset:path': 'old-path',
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
const cdkStackArtifact = setup.cdkStackArtifactOf({
|
|
153
|
+
template: {
|
|
154
|
+
Resources: {
|
|
155
|
+
AppSyncResolver: {
|
|
156
|
+
Type: 'AWS::AppSync::Resolver',
|
|
157
|
+
Properties: {
|
|
158
|
+
RequestMappingTemplate: '## new template',
|
|
159
|
+
FieldName: 'newField',
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
// WHEN
|
|
166
|
+
const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
|
|
167
|
+
// THEN
|
|
168
|
+
expect(deployStackResult).toBeUndefined();
|
|
169
|
+
expect(mockUpdateResolver).not.toHaveBeenCalled();
|
|
170
|
+
});
|
|
171
|
+
test('does not call the updateResolver() API when a resource with type that is not AWS::AppSync::Resolver but has the same properties is changed', async () => {
|
|
172
|
+
// GIVEN
|
|
173
|
+
setup.setCurrentCfnStackTemplate({
|
|
174
|
+
Resources: {
|
|
175
|
+
AppSyncResolver: {
|
|
176
|
+
Type: 'AWS::AppSync::NotAResolver',
|
|
177
|
+
Properties: {
|
|
178
|
+
RequestMappingTemplate: '## original template',
|
|
179
|
+
FieldName: 'oldField',
|
|
180
|
+
},
|
|
181
|
+
Metadata: {
|
|
182
|
+
'aws:asset:path': 'old-path',
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
const cdkStackArtifact = setup.cdkStackArtifactOf({
|
|
188
|
+
template: {
|
|
189
|
+
Resources: {
|
|
190
|
+
AppSyncResolver: {
|
|
191
|
+
Type: 'AWS::AppSync::NotAResolver',
|
|
192
|
+
Properties: {
|
|
193
|
+
RequestMappingTemplate: '## new template',
|
|
194
|
+
FieldName: 'newField',
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
// WHEN
|
|
201
|
+
const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
|
|
202
|
+
// THEN
|
|
203
|
+
expect(deployStackResult).toBeUndefined();
|
|
204
|
+
expect(mockUpdateResolver).not.toHaveBeenCalled();
|
|
205
|
+
});
|
|
206
|
+
test('calls the updateFunction() API when it receives only a mapping template difference in a Function', async () => {
|
|
207
|
+
// GIVEN
|
|
208
|
+
const mockListFunctions = jest.fn().mockReturnValue({ functions: [{ name: 'my-function', functionId: 'functionId' }] });
|
|
209
|
+
hotswapMockSdkProvider.stubAppSync({ listFunctions: mockListFunctions, updateFunction: mockUpdateFunction });
|
|
210
|
+
setup.setCurrentCfnStackTemplate({
|
|
211
|
+
Resources: {
|
|
212
|
+
AppSyncFunction: {
|
|
213
|
+
Type: 'AWS::AppSync::FunctionConfiguration',
|
|
214
|
+
Properties: {
|
|
215
|
+
Name: 'my-function',
|
|
216
|
+
ApiId: 'apiId',
|
|
217
|
+
DataSourceName: 'my-datasource',
|
|
218
|
+
FunctionVersion: '2018-05-29',
|
|
219
|
+
RequestMappingTemplate: '## original request template',
|
|
220
|
+
ResponseMappingTemplate: '## original response template',
|
|
221
|
+
},
|
|
222
|
+
Metadata: {
|
|
223
|
+
'aws:asset:path': 'old-path',
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
const cdkStackArtifact = setup.cdkStackArtifactOf({
|
|
229
|
+
template: {
|
|
230
|
+
Resources: {
|
|
231
|
+
AppSyncFunction: {
|
|
232
|
+
Type: 'AWS::AppSync::FunctionConfiguration',
|
|
233
|
+
Properties: {
|
|
234
|
+
Name: 'my-function',
|
|
235
|
+
ApiId: 'apiId',
|
|
236
|
+
DataSourceName: 'my-datasource',
|
|
237
|
+
FunctionVersion: '2018-05-29',
|
|
238
|
+
RequestMappingTemplate: '## original request template',
|
|
239
|
+
ResponseMappingTemplate: '## new response template',
|
|
240
|
+
},
|
|
241
|
+
Metadata: {
|
|
242
|
+
'aws:asset:path': 'new-path',
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
// WHEN
|
|
249
|
+
const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
|
|
250
|
+
// THEN
|
|
251
|
+
expect(deployStackResult).not.toBeUndefined();
|
|
252
|
+
expect(mockUpdateFunction).toHaveBeenCalledWith({
|
|
253
|
+
apiId: 'apiId',
|
|
254
|
+
dataSourceName: 'my-datasource',
|
|
255
|
+
functionId: 'functionId',
|
|
256
|
+
functionVersion: '2018-05-29',
|
|
257
|
+
name: 'my-function',
|
|
258
|
+
requestMappingTemplate: '## original request template',
|
|
259
|
+
responseMappingTemplate: '## new response template',
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
test('does not call the updateFunction() API when it receives a change that is not a mapping template difference in a Function', async () => {
|
|
263
|
+
// GIVEN
|
|
264
|
+
setup.setCurrentCfnStackTemplate({
|
|
265
|
+
Resources: {
|
|
266
|
+
AppSyncFunction: {
|
|
267
|
+
Type: 'AWS::AppSync::FunctionConfiguration',
|
|
268
|
+
Properties: {
|
|
269
|
+
RequestMappingTemplate: '## original template',
|
|
270
|
+
Name: 'my-function',
|
|
271
|
+
DataSourceName: 'my-datasource',
|
|
272
|
+
},
|
|
273
|
+
Metadata: {
|
|
274
|
+
'aws:asset:path': 'old-path',
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
});
|
|
279
|
+
const cdkStackArtifact = setup.cdkStackArtifactOf({
|
|
280
|
+
template: {
|
|
281
|
+
Resources: {
|
|
282
|
+
AppSyncFunction: {
|
|
283
|
+
Type: 'AWS::AppSync::FunctionConfiguration',
|
|
284
|
+
Properties: {
|
|
285
|
+
RequestMappingTemplate: '## new template',
|
|
286
|
+
Name: 'my-function',
|
|
287
|
+
DataSourceName: 'new-datasource',
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
});
|
|
293
|
+
// WHEN
|
|
294
|
+
const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
|
|
295
|
+
// THEN
|
|
296
|
+
expect(deployStackResult).toBeUndefined();
|
|
297
|
+
expect(mockUpdateFunction).not.toHaveBeenCalled();
|
|
298
|
+
});
|
|
299
|
+
test('does not call the updateFunction() API when a resource with type that is not AWS::AppSync::FunctionConfiguration but has the same properties is changed', async () => {
|
|
300
|
+
// GIVEN
|
|
301
|
+
setup.setCurrentCfnStackTemplate({
|
|
302
|
+
Resources: {
|
|
303
|
+
AppSyncFunction: {
|
|
304
|
+
Type: 'AWS::AppSync::NotAFunctionConfiguration',
|
|
305
|
+
Properties: {
|
|
306
|
+
RequestMappingTemplate: '## original template',
|
|
307
|
+
Name: 'my-function',
|
|
308
|
+
DataSourceName: 'my-datasource',
|
|
309
|
+
},
|
|
310
|
+
Metadata: {
|
|
311
|
+
'aws:asset:path': 'old-path',
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
const cdkStackArtifact = setup.cdkStackArtifactOf({
|
|
317
|
+
template: {
|
|
318
|
+
Resources: {
|
|
319
|
+
AppSyncFunction: {
|
|
320
|
+
Type: 'AWS::AppSync::NotAFunctionConfiguration',
|
|
321
|
+
Properties: {
|
|
322
|
+
RequestMappingTemplate: '## new template',
|
|
323
|
+
Name: 'my-resolver',
|
|
324
|
+
DataSourceName: 'my-datasource',
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
// WHEN
|
|
331
|
+
const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
|
|
332
|
+
// THEN
|
|
333
|
+
expect(deployStackResult).toBeUndefined();
|
|
334
|
+
expect(mockUpdateFunction).not.toHaveBeenCalled();
|
|
335
|
+
});
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwc3luYy1tYXBwaW5nLXRlbXBsYXRlcy1ob3Rzd2FwLWRlcGxveW1lbnRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcHBzeW5jLW1hcHBpbmctdGVtcGxhdGVzLWhvdHN3YXAtZGVwbG95bWVudHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDhDQUE4QztBQUU5QyxJQUFJLHNCQUFvRCxDQUFDO0FBQ3pELElBQUksa0JBQTZGLENBQUM7QUFDbEcsSUFBSSxrQkFBNkYsQ0FBQztBQUVsRyxVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2Qsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbkQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQy9CLGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMvQixzQkFBc0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUNqSCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw2REFBNkQsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM3RSxRQUFRO0lBQ1IsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDaEQsUUFBUSxFQUFFO1lBQ1IsU0FBUyxFQUFFO2dCQUNULGVBQWUsRUFBRTtvQkFDZixJQUFJLEVBQUUsd0JBQXdCO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPO0lBQ1AsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFOUYsT0FBTztJQUNQLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFD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LENBQUMsQ0FBQztJQUVILE9BQU87SUFDUCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU5RixPQUFPO0lBQ1AsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDcEQsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBTeW5jIH0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgKiBhcyBzZXR1cCBmcm9tICcuL2hvdHN3YXAtdGVzdC1zZXR1cCc7XG5cbmxldCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyOiBzZXR1cC5Ib3Rzd2FwTW9ja1Nka1Byb3ZpZGVyO1xubGV0IG1vY2tVcGRhdGVSZXNvbHZlcjogKHBhcmFtczogQXBwU3luYy5VcGRhdGVSZXNvbHZlclJlcXVlc3QpID0+IEFwcFN5bmMuVXBkYXRlUmVzb2x2ZXJSZXNwb25zZTtcbmxldCBtb2NrVXBkYXRlRnVuY3Rpb246IChwYXJhbXM6IEFwcFN5bmMuVXBkYXRlRnVuY3Rpb25SZXF1ZXN0KSA9PiBBcHBTeW5jLlVwZGF0ZUZ1bmN0aW9uUmVzcG9uc2U7XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyID0gc2V0dXAuc2V0dXBIb3Rzd2FwVGVzdHMoKTtcbiAgbW9ja1VwZGF0ZVJlc29sdmVyID0gamVzdC5mbigpO1xuICBtb2NrVXBkYXRlRnVuY3Rpb24gPSBqZXN0LmZuKCk7XG4gIGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIuc3R1YkFwcFN5bmMoeyB1cGRhdGVSZXNvbHZlcjogbW9ja1VwZGF0ZVJlc29sdmVyLCB1cGRhdGVGdW5jdGlvbjogbW9ja1VwZGF0ZUZ1bmN0aW9uIH0pO1xufSk7XG5cbnRlc3QoJ3JldHVybnMgdW5kZWZpbmVkIHdoZW4gYSBuZXcgUmVzb2x2ZXIgaXMgYWRkZWQgdG8gdGhlIFN0YWNrJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEFwcFN5bmNSZXNvbHZlcjoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbn0pO1xuXG50ZXN0KCdjYWxscyB0aGUgdXBkYXRlUmVzb2x2ZXIoKSBBUEkgd2hlbiBpdCByZWNlaXZlcyBvbmx5IGEgbWFwcGluZyB0ZW1wbGF0ZSBkaWZmZXJlbmNlIGluIGEgVW5pdCBSZXNvbHZlcicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgQXBwU3luY1Jlc29sdmVyOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIEFwaUlkOiAnYXBpSWQnLFxuICAgICAgICAgIEZpZWxkTmFtZTogJ215RmllbGQnLFxuICAgICAgICAgIFR5cGVOYW1lOiAnUXVlcnknLFxuICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgICAgS2luZDogJ1VOSVQnLFxuICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCByZXF1ZXN0IHRlbXBsYXRlJyxcbiAgICAgICAgICBSZXNwb25zZU1hcHBpbmdUZW1wbGF0ZTogJyMjIG9yaWdpbmFsIHJlc3BvbnNlIHRlbXBsYXRlJyxcbiAgICAgICAgfSxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnb2xkLXBhdGgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgc2V0dXAucHVzaFN0YWNrUmVzb3VyY2VTdW1tYXJpZXMoXG4gICAgc2V0dXAuc3RhY2tTdW1tYXJ5T2YoXG4gICAgICAnQXBwU3luY1Jlc29sdmVyJyxcbiAgICAgICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICdhcm46YXdzOmFwcHN5bmM6dXMtZWFzdC0xOjExMTExMTExMTExMTphcGlzL2FwaUlkL3R5cGVzL1F1ZXJ5L3Jlc29sdmVycy9teUZpZWxkJyxcbiAgICApLFxuICApO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEFwcFN5bmNSZXNvbHZlcjoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBBcGlJZDogJ2FwaUlkJyxcbiAgICAgICAgICAgIEZpZWxkTmFtZTogJ215RmllbGQnLFxuICAgICAgICAgICAgVHlwZU5hbWU6ICdRdWVyeScsXG4gICAgICAgICAgICBEYXRhU291cmNlTmFtZTogJ215LWRhdGFzb3VyY2UnLFxuICAgICAgICAgICAgS2luZDogJ1VOSVQnLFxuICAgICAgICAgICAgUmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogJyMjIG5ldyByZXF1ZXN0IHRlbXBsYXRlJyxcbiAgICAgICAgICAgIFJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiAnIyMgb3JpZ2luYWwgcmVzcG9uc2UgdGVtcGxhdGUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6ICduZXctcGF0aCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlUmVzb2x2ZXIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICBhcGlJZDogJ2FwaUlkJyxcbiAgICBkYXRhU291cmNlTmFtZTogJ215LWRhdGFzb3VyY2UnLFxuICAgIHR5cGVOYW1lOiAnUXVlcnknLFxuICAgIGZpZWxkTmFtZTogJ215RmllbGQnLFxuICAgIGtpbmQ6ICdVTklUJyxcbiAgICByZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgbmV3IHJlcXVlc3QgdGVtcGxhdGUnLFxuICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiAnIyMgb3JpZ2luYWwgcmVzcG9uc2UgdGVtcGxhdGUnLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdkb2VzIG5vdCBjYWxsIHRoZSB1cGRhdGVSZXNvbHZlcigpIEFQSSB3aGVuIGl0IHJlY2VpdmVzIG9ubHkgYSBtYXBwaW5nIHRlbXBsYXRlIGRpZmZlcmVuY2UgaW4gYSBQaXBlbGluZSBSZXNvbHZlcicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgQXBwU3luY1Jlc29sdmVyOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIEFwaUlkOiAnYXBpSWQnLFxuICAgICAgICAgIEZpZWxkTmFtZTogJ215RmllbGQnLFxuICAgICAgICAgIFR5cGVOYW1lOiAnUXVlcnknLFxuICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgICAgS2luZDogJ1BJUEVMSU5FJyxcbiAgICAgICAgICBQaXBlbGluZUNvbmZpZzogWydmdW5jdGlvbjEnXSxcbiAgICAgICAgICBSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgb3JpZ2luYWwgcmVxdWVzdCB0ZW1wbGF0ZScsXG4gICAgICAgICAgUmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCByZXNwb25zZSB0ZW1wbGF0ZScsXG4gICAgICAgIH0sXG4gICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgJ2F3czphc3NldDpwYXRoJzogJ29sZC1wYXRoJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgQXBwU3luY1Jlc29sdmVyOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6QXBwU3luYzo6UmVzb2x2ZXInLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIEFwaUlkOiAnYXBpSWQnLFxuICAgICAgICAgICAgRmllbGROYW1lOiAnbXlGaWVsZCcsXG4gICAgICAgICAgICBUeXBlTmFtZTogJ1F1ZXJ5JyxcbiAgICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgICAgICBLaW5kOiAnUElQRUxJTkUnLFxuICAgICAgICAgICAgUGlwZWxpbmVDb25maWc6IFsnZnVuY3Rpb24xJ10sXG4gICAgICAgICAgICBSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgbmV3IHJlcXVlc3QgdGVtcGxhdGUnLFxuICAgICAgICAgICAgUmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCByZXNwb25zZSB0ZW1wbGF0ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgJ2F3czphc3NldDpwYXRoJzogJ25ldy1wYXRoJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZVJlc29sdmVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2RvZXMgbm90IGNhbGwgdGhlIHVwZGF0ZVJlc29sdmVyKCkgQVBJIHdoZW4gaXQgcmVjZWl2ZXMgYSBjaGFuZ2UgdGhhdCBpcyBub3QgYSBtYXBwaW5nIHRlbXBsYXRlIGRpZmZlcmVuY2UgaW4gYSBSZXNvbHZlcicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgQXBwU3luY1Jlc29sdmVyOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCB0ZW1wbGF0ZScsXG4gICAgICAgICAgRmllbGROYW1lOiAnb2xkRmllbGQnLFxuICAgICAgICB9LFxuICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6ICdvbGQtcGF0aCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEFwcFN5bmNSZXNvbHZlcjoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgbmV3IHRlbXBsYXRlJyxcbiAgICAgICAgICAgIEZpZWxkTmFtZTogJ25ld0ZpZWxkJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZVJlc29sdmVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2RvZXMgbm90IGNhbGwgdGhlIHVwZGF0ZVJlc29sdmVyKCkgQVBJIHdoZW4gYSByZXNvdXJjZSB3aXRoIHR5cGUgdGhhdCBpcyBub3QgQVdTOjpBcHBTeW5jOjpSZXNvbHZlciBidXQgaGFzIHRoZSBzYW1lIHByb3BlcnRpZXMgaXMgY2hhbmdlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgQXBwU3luY1Jlc29sdmVyOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6Ok5vdEFSZXNvbHZlcicsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgb3JpZ2luYWwgdGVtcGxhdGUnLFxuICAgICAgICAgIEZpZWxkTmFtZTogJ29sZEZpZWxkJyxcbiAgICAgICAgfSxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnb2xkLXBhdGgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBBcHBTeW5jUmVzb2x2ZXI6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpBcHBTeW5jOjpOb3RBUmVzb2x2ZXInLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBuZXcgdGVtcGxhdGUnLFxuICAgICAgICAgICAgRmllbGROYW1lOiAnbmV3RmllbGQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0KS50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlUmVzb2x2ZXIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnY2FsbHMgdGhlIHVwZGF0ZUZ1bmN0aW9uKCkgQVBJIHdoZW4gaXQgcmVjZWl2ZXMgb25seSBhIG1hcHBpbmcgdGVtcGxhdGUgZGlmZmVyZW5jZSBpbiBhIEZ1bmN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBtb2NrTGlzdEZ1bmN0aW9ucyA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoeyBmdW5jdGlvbnM6IFt7IG5hbWU6ICdteS1mdW5jdGlvbicsIGZ1bmN0aW9uSWQ6ICdmdW5jdGlvbklkJyB9XSB9KTtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlci5zdHViQXBwU3luYyh7IGxpc3RGdW5jdGlvbnM6IG1vY2tMaXN0RnVuY3Rpb25zLCB1cGRhdGVGdW5jdGlvbjogbW9ja1VwZGF0ZUZ1bmN0aW9uIH0pO1xuXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEFwcFN5bmNGdW5jdGlvbjoge1xuICAgICAgICBUeXBlOiAnQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgICBBcGlJZDogJ2FwaUlkJyxcbiAgICAgICAgICBEYXRhU291cmNlTmFtZTogJ215LWRhdGFzb3VyY2UnLFxuICAgICAgICAgIEZ1bmN0aW9uVmVyc2lvbjogJzIwMTgtMDUtMjknLFxuICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCByZXF1ZXN0IHRlbXBsYXRlJyxcbiAgICAgICAgICBSZXNwb25zZU1hcHBpbmdUZW1wbGF0ZTogJyMjIG9yaWdpbmFsIHJlc3BvbnNlIHRlbXBsYXRlJyxcbiAgICAgICAgfSxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnb2xkLXBhdGgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBBcHBTeW5jRnVuY3Rpb246IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIE5hbWU6ICdteS1mdW5jdGlvbicsXG4gICAgICAgICAgICBBcGlJZDogJ2FwaUlkJyxcbiAgICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgICAgICBGdW5jdGlvblZlcnNpb246ICcyMDE4LTA1LTI5JyxcbiAgICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCByZXF1ZXN0IHRlbXBsYXRlJyxcbiAgICAgICAgICAgIFJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiAnIyMgbmV3IHJlc3BvbnNlIHRlbXBsYXRlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnbmV3LXBhdGgnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0KS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZUZ1bmN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgYXBpSWQ6ICdhcGlJZCcsXG4gICAgZGF0YVNvdXJjZU5hbWU6ICdteS1kYXRhc291cmNlJyxcbiAgICBmdW5jdGlvbklkOiAnZnVuY3Rpb25JZCcsXG4gICAgZnVuY3Rpb25WZXJzaW9uOiAnMjAxOC0wNS0yOScsXG4gICAgbmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICByZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgb3JpZ2luYWwgcmVxdWVzdCB0ZW1wbGF0ZScsXG4gICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6ICcjIyBuZXcgcmVzcG9uc2UgdGVtcGxhdGUnLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdkb2VzIG5vdCBjYWxsIHRoZSB1cGRhdGVGdW5jdGlvbigpIEFQSSB3aGVuIGl0IHJlY2VpdmVzIGEgY2hhbmdlIHRoYXQgaXMgbm90IGEgbWFwcGluZyB0ZW1wbGF0ZSBkaWZmZXJlbmNlIGluIGEgRnVuY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEFwcFN5bmNGdW5jdGlvbjoge1xuICAgICAgICBUeXBlOiAnQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogJyMjIG9yaWdpbmFsIHRlbXBsYXRlJyxcbiAgICAgICAgICBOYW1lOiAnbXktZnVuY3Rpb24nLFxuICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgIH0sXG4gICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgJ2F3czphc3NldDpwYXRoJzogJ29sZC1wYXRoJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgQXBwU3luY0Z1bmN0aW9uOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6QXBwU3luYzo6RnVuY3Rpb25Db25maWd1cmF0aW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgbmV3IHRlbXBsYXRlJyxcbiAgICAgICAgICAgIE5hbWU6ICdteS1mdW5jdGlvbicsXG4gICAgICAgICAgICBEYXRhU291cmNlTmFtZTogJ25ldy1kYXRhc291cmNlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZUZ1bmN0aW9uKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2RvZXMgbm90IGNhbGwgdGhlIHVwZGF0ZUZ1bmN0aW9uKCkgQVBJIHdoZW4gYSByZXNvdXJjZSB3aXRoIHR5cGUgdGhhdCBpcyBub3QgQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24gYnV0IGhhcyB0aGUgc2FtZSBwcm9wZXJ0aWVzIGlzIGNoYW5nZWQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEFwcFN5bmNGdW5jdGlvbjoge1xuICAgICAgICBUeXBlOiAnQVdTOjpBcHBTeW5jOjpOb3RBRnVuY3Rpb25Db25maWd1cmF0aW9uJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCB0ZW1wbGF0ZScsXG4gICAgICAgICAgTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgICBEYXRhU291cmNlTmFtZTogJ215LWRhdGFzb3VyY2UnLFxuICAgICAgICB9LFxuICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6ICdvbGQtcGF0aCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEFwcFN5bmNGdW5jdGlvbjoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6Ok5vdEFGdW5jdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBuZXcgdGVtcGxhdGUnLFxuICAgICAgICAgICAgTmFtZTogJ215LXJlc29sdmVyJyxcbiAgICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVGdW5jdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuIl19
|
|
@@ -25,6 +25,7 @@ export declare class HotswapMockSdkProvider {
|
|
|
25
25
|
[key: string]: any;
|
|
26
26
|
};
|
|
27
27
|
setUpdateProjectMock(mockUpdateProject: (input: codebuild.UpdateProjectInput) => codebuild.UpdateProjectOutput): void;
|
|
28
|
+
stubAppSync(stubs: SyncHandlerSubsetOf<AWS.AppSync>): void;
|
|
28
29
|
setInvokeLambdaMock(mockInvokeLambda: (input: lambda.InvocationRequest) => lambda.InvocationResponse): void;
|
|
29
30
|
stubEcs(stubs: SyncHandlerSubsetOf<AWS.ECS>, additionalProperties?: {
|
|
30
31
|
[key: string]: any;
|
|
@@ -91,6 +91,9 @@ class HotswapMockSdkProvider {
|
|
|
91
91
|
updateProject: mockUpdateProject,
|
|
92
92
|
});
|
|
93
93
|
}
|
|
94
|
+
stubAppSync(stubs) {
|
|
95
|
+
this.mockSdkProvider.stubAppSync(stubs);
|
|
96
|
+
}
|
|
94
97
|
setInvokeLambdaMock(mockInvokeLambda) {
|
|
95
98
|
this.mockSdkProvider.stubLambda({
|
|
96
99
|
invoke: mockInvokeLambda,
|
|
@@ -107,4 +110,4 @@ class HotswapMockSdkProvider {
|
|
|
107
110
|
}
|
|
108
111
|
}
|
|
109
112
|
exports.HotswapMockSdkProvider = HotswapMockSdkProvider;
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC10ZXN0LXNldHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG90c3dhcC10ZXN0LXNldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLG9FQUFvRTtBQUVwRSxxQ0FBMEQ7QUFDMUQsa0RBQTJFO0FBQzNFLDRFQUF1RTtBQUV2RSxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFDdEIsUUFBQSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBRWxDLElBQUksc0JBQThDLENBQUM7QUFDbkQsSUFBSSxlQUF3QyxDQUFDO0FBQzdDLE1BQU0sd0JBQXdCLEdBQTBDLEVBQUUsQ0FBQztBQUUzRSxTQUFnQixpQkFBaUI7SUFDL0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JCLGtCQUFrQjtJQUNsQix3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsc0JBQXNCLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RELGVBQWUsR0FBRyxJQUFJLG1EQUF1QixDQUFDO1FBQzVDLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLE9BQU8sRUFBRSxnQkFBUTtLQUNsQixDQUFDLENBQUM7SUFFSCxPQUFPLHNCQUFzQixDQUFDO0FBQ2hDLENBQUM7QUFYRCw4Q0FXQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLG9CQUFnRCxFQUFFO0lBQ25GLE9BQU8sZ0JBQVMsQ0FBQztRQUNmLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLEdBQUcsaUJBQWlCO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFMRCxnREFLQztBQUVELFNBQWdCLDBCQUEwQixDQUFDLEdBQUcsS0FBNEM7SUFDeEYsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUZELGdFQUVDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQUMsUUFBa0I7SUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLHVGQUF1RjtJQUN0SixlQUFlLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUhELGdFQUdDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLFNBQWlCLEVBQUUsWUFBb0IsRUFBRSxrQkFBMEI7SUFDaEcsT0FBTztRQUNMLGlCQUFpQixFQUFFLFNBQVM7UUFDNUIsa0JBQWtCLEVBQUUsa0JBQWtCO1FBQ3RDLFlBQVksRUFBRSxZQUFZO1FBQzFCLGNBQWMsRUFBRSxpQkFBaUI7UUFDakMsb0JBQW9CLEVBQUUsSUFBSSxJQUFJLEVBQUU7S0FDakMsQ0FBQztBQUNKLENBQUM7QUFSRCx3Q0FRQztBQUVELE1BQWEsc0JBQXNCO0lBR2pDO1FBQ0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLDBCQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDO1lBQ3RDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFO29CQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxVQUFVLG9CQUFvQixTQUFTLEdBQUcsQ0FBQyxDQUFDO2lCQUN6SDtnQkFDRCxPQUFPO29CQUNMLHNCQUFzQixFQUFFLHdCQUF3QjtpQkFDakQsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0seUJBQXlCLENBQzlCLDJCQUFxSDtRQUVySCxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDO1lBQ3JDLGtCQUFrQixFQUFFLDJCQUEyQjtTQUNoRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sVUFBVSxDQUNmLEtBQXNDLEVBQ3RDLFlBQStDLEVBQy9DLHVCQUErQyxFQUFFO1FBRWpELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUNyQyxHQUFHLEVBQUU7Z0JBQ0gsT0FBTyxFQUFFLEVBQUU7YUFDWjtZQUNELFdBQVc7Z0JBQ1QsT0FBTztvQkFDTCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ2xDLFFBQVEsRUFBRSxFQUFFO29CQUNaLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO2lCQUN2QixDQUFDO1lBQ0osQ0FBQztZQUNELEdBQUcsWUFBWTtZQUNmLEdBQUcsb0JBQW9CO1NBQ3hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQ2hFLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxpQkFBeUY7UUFDbkgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7WUFDakMsYUFBYSxFQUFFLGlCQUFpQjtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsZ0JBQWdGO1FBQ3pHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxnQkFBZ0I7U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFtQyxFQUFFLHVCQUErQyxFQUFFO1FBQ25HLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxJQUFrQjtRQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxvQkFBb0IsQ0FDekIsYUFBZ0QsRUFDaEQsY0FBeUMsRUFBRTtRQUUzQyxPQUFPLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDN0csQ0FBQztDQUNGO0FBN0VELHdEQTZFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbiB9IGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgY29kZWJ1aWxkIGZyb20gJ2F3cy1zZGsvY2xpZW50cy9jb2RlYnVpbGQnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1zZGsvY2xpZW50cy9sYW1iZGEnO1xuaW1wb3J0ICogYXMgc3RlcGZ1bmN0aW9ucyBmcm9tICdhd3Mtc2RrL2NsaWVudHMvc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4uLy4uLy4uL2xpYi9hcGknO1xuaW1wb3J0ICogYXMgZGVwbG95bWVudHMgZnJvbSAnLi4vLi4vLi4vbGliL2FwaS9ob3Rzd2FwLWRlcGxveW1lbnRzJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vLi4vbGliL2FwaS91dGlsL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IHRlc3RTdGFjaywgVGVzdFN0YWNrQXJ0aWZhY3QgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IE1vY2tTZGtQcm92aWRlciwgU3luY0hhbmRsZXJTdWJzZXRPZiB9IGZyb20gJy4uLy4uL3V0aWwvbW9jay1zZGsnO1xuaW1wb3J0IHsgRmFrZUNsb3VkZm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuLi9mYWtlLWNsb3VkZm9ybWF0aW9uLXN0YWNrJztcblxuY29uc3QgU1RBQ0tfTkFNRSA9ICd3aXRob3V0ZXJyb3JzJztcbmV4cG9ydCBjb25zdCBTVEFDS19JRCA9ICdzdGFja0lkJztcblxubGV0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXI6IEhvdHN3YXBNb2NrU2RrUHJvdmlkZXI7XG5sZXQgY3VycmVudENmblN0YWNrOiBGYWtlQ2xvdWRmb3JtYXRpb25TdGFjaztcbmNvbnN0IGN1cnJlbnRDZm5TdGFja1Jlc291cmNlczogQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnlbXSA9IFtdO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBIb3Rzd2FwVGVzdHMoKSB7XG4gIGplc3QucmVzZXRBbGxNb2NrcygpO1xuICAvLyBjbGVhciB0aGUgYXJyYXlcbiAgY3VycmVudENmblN0YWNrUmVzb3VyY2VzLnNwbGljZSgwKTtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlciA9IG5ldyBIb3Rzd2FwTW9ja1Nka1Byb3ZpZGVyKCk7XG4gIGN1cnJlbnRDZm5TdGFjayA9IG5ldyBGYWtlQ2xvdWRmb3JtYXRpb25TdGFjayh7XG4gICAgc3RhY2tOYW1lOiBTVEFDS19OQU1FLFxuICAgIHN0YWNrSWQ6IFNUQUNLX0lELFxuICB9KTtcblxuICByZXR1cm4gaG90c3dhcE1vY2tTZGtQcm92aWRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNka1N0YWNrQXJ0aWZhY3RPZih0ZXN0U3RhY2tBcnRpZmFjdDogUGFydGlhbDxUZXN0U3RhY2tBcnRpZmFjdD4gPSB7fSk6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCB7XG4gIHJldHVybiB0ZXN0U3RhY2soe1xuICAgIHN0YWNrTmFtZTogU1RBQ0tfTkFNRSxcbiAgICAuLi50ZXN0U3RhY2tBcnRpZmFjdCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoU3RhY2tSZXNvdXJjZVN1bW1hcmllcyguLi5pdGVtczogQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnlbXSkge1xuICBjdXJyZW50Q2ZuU3RhY2tSZXNvdXJjZXMucHVzaCguLi5pdGVtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGUpIHtcbiAgY29uc3QgdGVtcGxhdGVEZWVwQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUpKTsgLy8gZGVlcCBjb3B5IHRoZSB0ZW1wbGF0ZSwgc28gb3VyIHRlc3RzIGNhbiBtdXRhdGUgb25lIHRlbXBsYXRlIGluc3RlYWQgb2YgY3JlYXRpbmcgdHdvXG4gIGN1cnJlbnRDZm5TdGFjay5zZXRUZW1wbGF0ZSh0ZW1wbGF0ZURlZXBDb3B5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YWNrU3VtbWFyeU9mKGxvZ2ljYWxJZDogc3RyaW5nLCByZXNvdXJjZVR5cGU6IHN0cmluZywgcGh5c2ljYWxSZXNvdXJjZUlkOiBzdHJpbmcpOiBDbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeSB7XG4gIHJldHVybiB7XG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGxvZ2ljYWxJZCxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICBSZXNvdXJjZVR5cGU6IHJlc291cmNlVHlwZSxcbiAgICBSZXNvdXJjZVN0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgTGFzdFVwZGF0ZWRUaW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBIb3Rzd2FwTW9ja1Nka1Byb3ZpZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IG1vY2tTZGtQcm92aWRlcjogTW9ja1Nka1Byb3ZpZGVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyID0gbmV3IE1vY2tTZGtQcm92aWRlcih7IHJlYWxTZGs6IGZhbHNlIH0pO1xuXG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkNsb3VkRm9ybWF0aW9uKHtcbiAgICAgIGxpc3RTdGFja1Jlc291cmNlczogKHsgU3RhY2tOYW1lOiBzdGFja05hbWUgfSkgPT4ge1xuICAgICAgICBpZiAoc3RhY2tOYW1lICE9PSBTVEFDS19OQU1FKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBTdGFjayBuYW1lIGluIGxpc3RTdGFja1Jlc291cmNlcygpIGNhbGwgdG8gYmU6ICcke1NUQUNLX05BTUV9JywgYnV0IHJlY2VpdmVkOiAke3N0YWNrTmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBTdGFja1Jlc291cmNlU3VtbWFyaWVzOiBjdXJyZW50Q2ZuU3RhY2tSZXNvdXJjZXMsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldFVwZGF0ZVN0YXRlTWFjaGluZU1vY2soXG4gICAgbW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uOiAoaW5wdXQ6IHN0ZXBmdW5jdGlvbnMuVXBkYXRlU3RhdGVNYWNoaW5lSW5wdXQpID0+IHN0ZXBmdW5jdGlvbnMuVXBkYXRlU3RhdGVNYWNoaW5lT3V0cHV0LFxuICApIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViU3RlcEZ1bmN0aW9ucyh7XG4gICAgICB1cGRhdGVTdGF0ZU1hY2hpbmU6IG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViTGFtYmRhKFxuICAgIHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5MYW1iZGE+LFxuICAgIHNlcnZpY2VTdHVicz86IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLlNlcnZpY2U+LFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30sXG4gICk6IHZvaWQge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJMYW1iZGEoc3R1YnMsIHtcbiAgICAgIGFwaToge1xuICAgICAgICB3YWl0ZXJzOiB7fSxcbiAgICAgIH0sXG4gICAgICBtYWtlUmVxdWVzdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm9taXNlOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pLFxuICAgICAgICAgIHJlc3BvbnNlOiB7fSxcbiAgICAgICAgICBhZGRMaXN0ZW5lcnM6ICgpID0+IHt9LFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIC4uLnNlcnZpY2VTdHVicyxcbiAgICAgIC4uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldExhbWJkYUFwaVdhaXRlcnMoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuICh0aGlzLm1vY2tTZGtQcm92aWRlci5zZGsubGFtYmRhKCkgYXMgYW55KS5hcGkud2FpdGVycztcbiAgfVxuXG4gIHB1YmxpYyBzZXRVcGRhdGVQcm9qZWN0TW9jayhtb2NrVXBkYXRlUHJvamVjdDogKGlucHV0OiBjb2RlYnVpbGQuVXBkYXRlUHJvamVjdElucHV0KSA9PiBjb2RlYnVpbGQuVXBkYXRlUHJvamVjdE91dHB1dCkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJDb2RlQnVpbGQoe1xuICAgICAgdXBkYXRlUHJvamVjdDogbW9ja1VwZGF0ZVByb2plY3QsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW52b2tlTGFtYmRhTW9jayhtb2NrSW52b2tlTGFtYmRhOiAoaW5wdXQ6IGxhbWJkYS5JbnZvY2F0aW9uUmVxdWVzdCkgPT4gbGFtYmRhLkludm9jYXRpb25SZXNwb25zZSkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJMYW1iZGEoe1xuICAgICAgaW52b2tlOiBtb2NrSW52b2tlTGFtYmRhLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0dWJFY3Moc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkVDUz4sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViRWNzKHN0dWJzLCBhZGRpdGlvbmFsUHJvcGVydGllcyk7XG4gIH1cblxuICBwdWJsaWMgc3R1YkdldEVuZHBvaW50U3VmZml4KHN0dWI6ICgpID0+IHN0cmluZykge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJHZXRFbmRwb2ludFN1ZmZpeChzdHViKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlIb3Rzd2FwRGVwbG95bWVudChcbiAgICBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gICAgYXNzZXRQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBkZXBsb3ltZW50cy50cnlIb3Rzd2FwRGVwbG95bWVudCh0aGlzLm1vY2tTZGtQcm92aWRlciwgYXNzZXRQYXJhbXMsIGN1cnJlbnRDZm5TdGFjaywgc3RhY2tBcnRpZmFjdCk7XG4gIH1cbn1cbiJdfQ==
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC10ZXN0LXNldHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG90c3dhcC10ZXN0LXNldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLG9FQUFvRTtBQUVwRSxxQ0FBMEQ7QUFDMUQsa0RBQTJFO0FBQzNFLDRFQUF1RTtBQUV2RSxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFDdEIsUUFBQSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBRWxDLElBQUksc0JBQThDLENBQUM7QUFDbkQsSUFBSSxlQUF3QyxDQUFDO0FBQzdDLE1BQU0sd0JBQXdCLEdBQTBDLEVBQUUsQ0FBQztBQUUzRSxTQUFnQixpQkFBaUI7SUFDL0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JCLGtCQUFrQjtJQUNsQix3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsc0JBQXNCLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RELGVBQWUsR0FBRyxJQUFJLG1EQUF1QixDQUFDO1FBQzVDLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLE9BQU8sRUFBRSxnQkFBUTtLQUNsQixDQUFDLENBQUM7SUFFSCxPQUFPLHNCQUFzQixDQUFDO0FBQ2hDLENBQUM7QUFYRCw4Q0FXQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLG9CQUFnRCxFQUFFO0lBQ25GLE9BQU8sZ0JBQVMsQ0FBQztRQUNmLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLEdBQUcsaUJBQWlCO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFMRCxnREFLQztBQUVELFNBQWdCLDBCQUEwQixDQUFDLEdBQUcsS0FBNEM7SUFDeEYsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUZELGdFQUVDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQUMsUUFBa0I7SUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxD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QUFvQixDQUN6QixhQUFnRCxFQUNoRCxjQUF5QyxFQUFFO1FBRTNDLE9BQU8sV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM3RyxDQUFDO0NBQ0Y7QUFqRkQsd0RBaUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uIH0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgKiBhcyBjb2RlYnVpbGQgZnJvbSAnYXdzLXNkay9jbGllbnRzL2NvZGVidWlsZCc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLXNkay9jbGllbnRzL2xhbWJkYSc7XG5pbXBvcnQgKiBhcyBzdGVwZnVuY3Rpb25zIGZyb20gJ2F3cy1zZGsvY2xpZW50cy9zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vbGliL2FwaSc7XG5pbXBvcnQgKiBhcyBkZXBsb3ltZW50cyBmcm9tICcuLi8uLi8uLi9saWIvYXBpL2hvdHN3YXAtZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi8uLi8uLi9saWIvYXBpL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgdGVzdFN0YWNrLCBUZXN0U3RhY2tBcnRpZmFjdCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgTW9ja1Nka1Byb3ZpZGVyLCBTeW5jSGFuZGxlclN1YnNldE9mIH0gZnJvbSAnLi4vLi4vdXRpbC9tb2NrLXNkayc7XG5pbXBvcnQgeyBGYWtlQ2xvdWRmb3JtYXRpb25TdGFjayB9IGZyb20gJy4uL2Zha2UtY2xvdWRmb3JtYXRpb24tc3RhY2snO1xuXG5jb25zdCBTVEFDS19OQU1FID0gJ3dpdGhvdXRlcnJvcnMnO1xuZXhwb3J0IGNvbnN0IFNUQUNLX0lEID0gJ3N0YWNrSWQnO1xuXG5sZXQgaG90c3dhcE1vY2tTZGtQcm92aWRlcjogSG90c3dhcE1vY2tTZGtQcm92aWRlcjtcbmxldCBjdXJyZW50Q2ZuU3RhY2s6IEZha2VDbG91ZGZvcm1hdGlvblN0YWNrO1xuY29uc3QgY3VycmVudENmblN0YWNrUmVzb3VyY2VzOiBDbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEhvdHN3YXBUZXN0cygpIHtcbiAgamVzdC5yZXNldEFsbE1vY2tzKCk7XG4gIC8vIGNsZWFyIHRoZSBhcnJheVxuICBjdXJyZW50Q2ZuU3RhY2tSZXNvdXJjZXMuc3BsaWNlKDApO1xuICBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyID0gbmV3IEhvdHN3YXBNb2NrU2RrUHJvdmlkZXIoKTtcbiAgY3VycmVudENmblN0YWNrID0gbmV3IEZha2VDbG91ZGZvcm1hdGlvblN0YWNrKHtcbiAgICBzdGFja05hbWU6IFNUQUNLX05BTUUsXG4gICAgc3RhY2tJZDogU1RBQ0tfSUQsXG4gIH0pO1xuXG4gIHJldHVybiBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2RrU3RhY2tBcnRpZmFjdE9mKHRlc3RTdGFja0FydGlmYWN0OiBQYXJ0aWFsPFRlc3RTdGFja0FydGlmYWN0PiA9IHt9KTogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0IHtcbiAgcmV0dXJuIHRlc3RTdGFjayh7XG4gICAgc3RhY2tOYW1lOiBTVEFDS19OQU1FLFxuICAgIC4uLnRlc3RTdGFja0FydGlmYWN0LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2hTdGFja1Jlc291cmNlU3VtbWFyaWVzKC4uLml0ZW1zOiBDbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdKSB7XG4gIGN1cnJlbnRDZm5TdGFja1Jlc291cmNlcy5wdXNoKC4uLml0ZW1zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZSkge1xuICBjb25zdCB0ZW1wbGF0ZURlZXBDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZSkpOyAvLyBkZWVwIGNvcHkgdGhlIHRlbXBsYXRlLCBzbyBvdXIgdGVzdHMgY2FuIG11dGF0ZSBvbmUgdGVtcGxhdGUgaW5zdGVhZCBvZiBjcmVhdGluZyB0d29cbiAgY3VycmVudENmblN0YWNrLnNldFRlbXBsYXRlKHRlbXBsYXRlRGVlcENvcHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhY2tTdW1tYXJ5T2YobG9naWNhbElkOiBzdHJpbmcsIHJlc291cmNlVHlwZTogc3RyaW5nLCBwaHlzaWNhbFJlc291cmNlSWQ6IHN0cmluZyk6IENsb3VkRm9ybWF0aW9uLlN0YWNrUmVzb3VyY2VTdW1tYXJ5IHtcbiAgcmV0dXJuIHtcbiAgICBMb2dpY2FsUmVzb3VyY2VJZDogbG9naWNhbElkLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgIFJlc291cmNlVHlwZTogcmVzb3VyY2VUeXBlLFxuICAgIFJlc291cmNlU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICBMYXN0VXBkYXRlZFRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEhvdHN3YXBNb2NrU2RrUHJvdmlkZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgbW9ja1Nka1Byb3ZpZGVyOiBNb2NrU2RrUHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIgPSBuZXcgTW9ja1Nka1Byb3ZpZGVyKHsgcmVhbFNkazogZmFsc2UgfSk7XG5cbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgbGlzdFN0YWNrUmVzb3VyY2VzOiAoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KSA9PiB7XG4gICAgICAgIGlmIChzdGFja05hbWUgIT09IFNUQUNLX05BTUUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFN0YWNrIG5hbWUgaW4gbGlzdFN0YWNrUmVzb3VyY2VzKCkgY2FsbCB0byBiZTogJyR7U1RBQ0tfTkFNRX0nLCBidXQgcmVjZWl2ZWQ6ICR7c3RhY2tOYW1lfSdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFN0YWNrUmVzb3VyY2VTdW1tYXJpZXM6IGN1cnJlbnRDZm5TdGFja1Jlc291cmNlcyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VXBkYXRlU3RhdGVNYWNoaW5lTW9jayhcbiAgICBtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb246IChpbnB1dDogc3RlcGZ1bmN0aW9ucy5VcGRhdGVTdGF0ZU1hY2hpbmVJbnB1dCkgPT4gc3RlcGZ1bmN0aW9ucy5VcGRhdGVTdGF0ZU1hY2hpbmVPdXRwdXQsXG4gICkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJTdGVwRnVuY3Rpb25zKHtcbiAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZTogbW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0dWJMYW1iZGEoXG4gICAgc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkxhbWJkYT4sXG4gICAgc2VydmljZVN0dWJzPzogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuU2VydmljZT4sXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkxhbWJkYShzdHVicywge1xuICAgICAgYXBpOiB7XG4gICAgICAgIHdhaXRlcnM6IHt9LFxuICAgICAgfSxcbiAgICAgIG1ha2VSZXF1ZXN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb21pc2U6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSksXG4gICAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgICAgIGFkZExpc3RlbmVyczogKCkgPT4ge30sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLi4uc2VydmljZVN0dWJzLFxuICAgICAgLi4uYWRkaXRpb25hbFByb3BlcnRpZXMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFtYmRhQXBpV2FpdGVycygpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4gKHRoaXMubW9ja1Nka1Byb3ZpZGVyLnNkay5sYW1iZGEoKSBhcyBhbnkpLmFwaS53YWl0ZXJzO1xuICB9XG5cbiAgcHVibGljIHNldFVwZGF0ZVByb2plY3RNb2NrKG1vY2tVcGRhdGVQcm9qZWN0OiAoaW5wdXQ6IGNvZGVidWlsZC5VcGRhdGVQcm9qZWN0SW5wdXQpID0+IGNvZGVidWlsZC5VcGRhdGVQcm9qZWN0T3V0cHV0KSB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkNvZGVCdWlsZCh7XG4gICAgICB1cGRhdGVQcm9qZWN0OiBtb2NrVXBkYXRlUHJvamVjdCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViQXBwU3luYyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQXBwU3luYz4pIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViQXBwU3luYyhzdHVicyk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW52b2tlTGFtYmRhTW9jayhtb2NrSW52b2tlTGFtYmRhOiAoaW5wdXQ6IGxhbWJkYS5JbnZvY2F0aW9uUmVxdWVzdCkgPT4gbGFtYmRhLkludm9jYXRpb25SZXNwb25zZSkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJMYW1iZGEoe1xuICAgICAgaW52b2tlOiBtb2NrSW52b2tlTGFtYmRhLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0dWJFY3Moc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkVDUz4sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViRWNzKHN0dWJzLCBhZGRpdGlvbmFsUHJvcGVydGllcyk7XG4gIH1cblxuICBwdWJsaWMgc3R1YkdldEVuZHBvaW50U3VmZml4KHN0dWI6ICgpID0+IHN0cmluZykge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJHZXRFbmRwb2ludFN1ZmZpeChzdHViKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlIb3Rzd2FwRGVwbG95bWVudChcbiAgICBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gICAgYXNzZXRQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBkZXBsb3ltZW50cy50cnlIb3Rzd2FwRGVwbG95bWVudCh0aGlzLm1vY2tTZGtQcm92aWRlciwgYXNzZXRQYXJhbXMsIGN1cnJlbnRDZm5TdGFjaywgc3RhY2tBcnRpZmFjdCk7XG4gIH1cbn1cbiJdfQ==
|