deployable-awscdk-app-ts 0.1.679 → 0.1.681

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/.jsii CHANGED
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "constructs": "^10.4.2",
14
- "projen": "^0.98.0"
14
+ "projen": "^0.98.1"
15
15
  },
16
16
  "dependencyClosure": {
17
17
  "constructs": {
@@ -114,7 +114,7 @@
114
114
  "deployable-awscdk-app-ts.utils": {
115
115
  "locationInModule": {
116
116
  "filename": "src/index.ts",
117
- "line": 9
117
+ "line": 8
118
118
  },
119
119
  "symbolId": "src/utils:"
120
120
  }
@@ -135,7 +135,7 @@
135
135
  "kind": "interface",
136
136
  "locationInModule": {
137
137
  "filename": "src/types.ts",
138
- "line": 100
138
+ "line": 111
139
139
  },
140
140
  "name": "AWSCredentials",
141
141
  "properties": [
@@ -149,7 +149,7 @@
149
149
  "immutable": true,
150
150
  "locationInModule": {
151
151
  "filename": "src/types.ts",
152
- "line": 128
152
+ "line": 139
153
153
  },
154
154
  "name": "region",
155
155
  "type": {
@@ -166,7 +166,7 @@
166
166
  "immutable": true,
167
167
  "locationInModule": {
168
168
  "filename": "src/types.ts",
169
- "line": 105
169
+ "line": 116
170
170
  },
171
171
  "name": "accessKeyIdSecretName",
172
172
  "optional": true,
@@ -184,7 +184,7 @@
184
184
  "immutable": true,
185
185
  "locationInModule": {
186
186
  "filename": "src/types.ts",
187
- "line": 122
187
+ "line": 133
188
188
  },
189
189
  "name": "assumeRoleDurationSeconds",
190
190
  "optional": true,
@@ -201,7 +201,7 @@
201
201
  "immutable": true,
202
202
  "locationInModule": {
203
203
  "filename": "src/types.ts",
204
- "line": 116
204
+ "line": 127
205
205
  },
206
206
  "name": "roleToAssume",
207
207
  "optional": true,
@@ -219,7 +219,7 @@
219
219
  "immutable": true,
220
220
  "locationInModule": {
221
221
  "filename": "src/types.ts",
222
- "line": 111
222
+ "line": 122
223
223
  },
224
224
  "name": "secretAccessKeySecretName",
225
225
  "optional": true,
@@ -230,6 +230,34 @@
230
230
  ],
231
231
  "symbolId": "src/types:AWSCredentials"
232
232
  },
233
+ "deployable-awscdk-app-ts.DeployJobStrategy": {
234
+ "assembly": "deployable-awscdk-app-ts",
235
+ "docs": {
236
+ "stability": "stable"
237
+ },
238
+ "fqn": "deployable-awscdk-app-ts.DeployJobStrategy",
239
+ "kind": "enum",
240
+ "locationInModule": {
241
+ "filename": "src/types.ts",
242
+ "line": 26
243
+ },
244
+ "members": [
245
+ {
246
+ "docs": {
247
+ "stability": "stable"
248
+ },
249
+ "name": "MATRIX"
250
+ },
251
+ {
252
+ "docs": {
253
+ "stability": "stable"
254
+ },
255
+ "name": "MULTI_JOB"
256
+ }
257
+ ],
258
+ "name": "DeployJobStrategy",
259
+ "symbolId": "src/types:DeployJobStrategy"
260
+ },
233
261
  "deployable-awscdk-app-ts.DeployOptions": {
234
262
  "assembly": "deployable-awscdk-app-ts",
235
263
  "datatype": true,
@@ -240,7 +268,7 @@
240
268
  "kind": "interface",
241
269
  "locationInModule": {
242
270
  "filename": "src/types.ts",
243
- "line": 26
271
+ "line": 31
244
272
  },
245
273
  "name": "DeployOptions",
246
274
  "properties": [
@@ -253,7 +281,7 @@
253
281
  "immutable": true,
254
282
  "locationInModule": {
255
283
  "filename": "src/types.ts",
256
- "line": 30
284
+ "line": 35
257
285
  },
258
286
  "name": "environments",
259
287
  "type": {
@@ -275,7 +303,7 @@
275
303
  "immutable": true,
276
304
  "locationInModule": {
277
305
  "filename": "src/types.ts",
278
- "line": 56
306
+ "line": 61
279
307
  },
280
308
  "name": "environmentVariableName",
281
309
  "optional": true,
@@ -283,6 +311,24 @@
283
311
  "primitive": "string"
284
312
  }
285
313
  },
314
+ {
315
+ "abstract": true,
316
+ "docs": {
317
+ "default": "\"matrix\"",
318
+ "stability": "stable",
319
+ "summary": "Deployment job strategy, whether to use a matrix job or multiple jobs for each environment."
320
+ },
321
+ "immutable": true,
322
+ "locationInModule": {
323
+ "filename": "src/types.ts",
324
+ "line": 80
325
+ },
326
+ "name": "jobStrategy",
327
+ "optional": true,
328
+ "type": {
329
+ "fqn": "deployable-awscdk-app-ts.DeployJobStrategy"
330
+ }
331
+ },
286
332
  {
287
333
  "abstract": true,
288
334
  "docs": {
@@ -294,7 +340,7 @@
294
340
  "immutable": true,
295
341
  "locationInModule": {
296
342
  "filename": "src/types.ts",
297
- "line": 69
343
+ "line": 74
298
344
  },
299
345
  "name": "method",
300
346
  "optional": true,
@@ -313,7 +359,7 @@
313
359
  "immutable": true,
314
360
  "locationInModule": {
315
361
  "filename": "src/types.ts",
316
- "line": 49
362
+ "line": 54
317
363
  },
318
364
  "name": "npmConfigEnvironment",
319
365
  "optional": true,
@@ -332,7 +378,7 @@
332
378
  "immutable": true,
333
379
  "locationInModule": {
334
380
  "filename": "src/types.ts",
335
- "line": 38
381
+ "line": 43
336
382
  },
337
383
  "name": "stackPattern",
338
384
  "optional": true,
@@ -350,7 +396,7 @@
350
396
  "immutable": true,
351
397
  "locationInModule": {
352
398
  "filename": "src/types.ts",
353
- "line": 63
399
+ "line": 68
354
400
  },
355
401
  "name": "taskToRunPreInstall",
356
402
  "optional": true,
@@ -388,7 +434,7 @@
388
434
  "kind": "class",
389
435
  "locationInModule": {
390
436
  "filename": "src/index.ts",
391
- "line": 11
437
+ "line": 10
392
438
  },
393
439
  "methods": [
394
440
  {
@@ -398,7 +444,7 @@
398
444
  },
399
445
  "locationInModule": {
400
446
  "filename": "src/index.ts",
401
- "line": 86
447
+ "line": 88
402
448
  },
403
449
  "name": "addEnvironments",
404
450
  "parameters": [
@@ -423,7 +469,7 @@
423
469
  },
424
470
  "locationInModule": {
425
471
  "filename": "src/index.ts",
426
- "line": 70
472
+ "line": 72
427
473
  },
428
474
  "name": "synth",
429
475
  "overrides": "projen.Project"
@@ -435,7 +481,7 @@
435
481
  },
436
482
  "locationInModule": {
437
483
  "filename": "src/index.ts",
438
- "line": 102
484
+ "line": 104
439
485
  },
440
486
  "name": "updatePostDeployWorkflowScriptToEnvironments",
441
487
  "parameters": [
@@ -472,7 +518,7 @@
472
518
  },
473
519
  "locationInModule": {
474
520
  "filename": "src/index.ts",
475
- "line": 119
521
+ "line": 121
476
522
  },
477
523
  "name": "updatePreDeployWorkflowScriptToEnvironments",
478
524
  "parameters": [
@@ -513,7 +559,7 @@
513
559
  "immutable": true,
514
560
  "locationInModule": {
515
561
  "filename": "src/index.ts",
516
- "line": 16
562
+ "line": 15
517
563
  },
518
564
  "name": "deployWorkflowTask",
519
565
  "type": {
@@ -529,7 +575,7 @@
529
575
  "immutable": true,
530
576
  "locationInModule": {
531
577
  "filename": "src/index.ts",
532
- "line": 62
578
+ "line": 64
533
579
  },
534
580
  "name": "majorNodeVersion",
535
581
  "type": {
@@ -542,7 +588,7 @@
542
588
  },
543
589
  "locationInModule": {
544
590
  "filename": "src/index.ts",
545
- "line": 22
591
+ "line": 21
546
592
  },
547
593
  "name": "deployOptions",
548
594
  "protected": true,
@@ -637,7 +683,7 @@
637
683
  "kind": "interface",
638
684
  "locationInModule": {
639
685
  "filename": "src/types.ts",
640
- "line": 72
686
+ "line": 83
641
687
  },
642
688
  "name": "EnvironmentOptions",
643
689
  "properties": [
@@ -650,7 +696,7 @@
650
696
  "immutable": true,
651
697
  "locationInModule": {
652
698
  "filename": "src/types.ts",
653
- "line": 81
699
+ "line": 92
654
700
  },
655
701
  "name": "awsCredentials",
656
702
  "type": {
@@ -666,7 +712,7 @@
666
712
  "immutable": true,
667
713
  "locationInModule": {
668
714
  "filename": "src/types.ts",
669
- "line": 76
715
+ "line": 87
670
716
  },
671
717
  "name": "name",
672
718
  "type": {
@@ -683,7 +729,7 @@
683
729
  "immutable": true,
684
730
  "locationInModule": {
685
731
  "filename": "src/types.ts",
686
- "line": 89
732
+ "line": 100
687
733
  },
688
734
  "name": "postDeployWorkflowScript",
689
735
  "optional": true,
@@ -701,7 +747,7 @@
701
747
  "immutable": true,
702
748
  "locationInModule": {
703
749
  "filename": "src/types.ts",
704
- "line": 97
750
+ "line": 108
705
751
  },
706
752
  "name": "preDeployWorkflowScript",
707
753
  "optional": true,
@@ -713,6 +759,6 @@
713
759
  "symbolId": "src/types:EnvironmentOptions"
714
760
  }
715
761
  },
716
- "version": "0.1.679",
717
- "fingerprint": "7DQ2lXcbpweUq8sjwhuh+pmZkWdREzz3J2PNZj/4fSY="
762
+ "version": "0.1.681",
763
+ "fingerprint": "okbs8piBZlb7xwaUhykMiE9B6uXh2DGYFaMyty1h3Eo="
718
764
  }
package/API.md CHANGED
@@ -4588,6 +4588,7 @@ const deployOptions: DeployOptions = { ... }
4588
4588
  | --- | --- | --- |
4589
4589
  | <code><a href="#deployable-awscdk-app-ts.DeployOptions.property.environments">environments</a></code> | <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions">EnvironmentOptions</a>[]</code> | Environment settings to deploy to. |
4590
4590
  | <code><a href="#deployable-awscdk-app-ts.DeployOptions.property.environmentVariableName">environmentVariableName</a></code> | <code>string</code> | Name of the environment variable used to set the deploy environment name. |
4591
+ | <code><a href="#deployable-awscdk-app-ts.DeployOptions.property.jobStrategy">jobStrategy</a></code> | <code><a href="#deployable-awscdk-app-ts.DeployJobStrategy">DeployJobStrategy</a></code> | Deployment job strategy, whether to use a matrix job or multiple jobs for each environment. |
4591
4592
  | <code><a href="#deployable-awscdk-app-ts.DeployOptions.property.method">method</a></code> | <code>string</code> | How to perform the deployment. |
4592
4593
  | <code><a href="#deployable-awscdk-app-ts.DeployOptions.property.npmConfigEnvironment">npmConfigEnvironment</a></code> | <code>string</code> | npm config name to set as the environment name This might be useful in deployment process. |
4593
4594
  | <code><a href="#deployable-awscdk-app-ts.DeployOptions.property.stackPattern">stackPattern</a></code> | <code>string</code> | Regex for stacks to be deployed. |
@@ -4620,6 +4621,19 @@ Name of the environment variable used to set the deploy environment name.
4620
4621
 
4621
4622
  ---
4622
4623
 
4624
+ ##### `jobStrategy`<sup>Optional</sup> <a name="jobStrategy" id="deployable-awscdk-app-ts.DeployOptions.property.jobStrategy"></a>
4625
+
4626
+ ```typescript
4627
+ public readonly jobStrategy: DeployJobStrategy;
4628
+ ```
4629
+
4630
+ - *Type:* <a href="#deployable-awscdk-app-ts.DeployJobStrategy">DeployJobStrategy</a>
4631
+ - *Default:* "matrix"
4632
+
4633
+ Deployment job strategy, whether to use a matrix job or multiple jobs for each environment.
4634
+
4635
+ ---
4636
+
4623
4637
  ##### `method`<sup>Optional</sup> <a name="method" id="deployable-awscdk-app-ts.DeployOptions.property.method"></a>
4624
4638
 
4625
4639
  ```typescript
@@ -4765,3 +4779,25 @@ The script/task to run before deployment of the environment in the workflow If n
4765
4779
 
4766
4780
 
4767
4781
 
4782
+ ## Enums <a name="Enums" id="Enums"></a>
4783
+
4784
+ ### DeployJobStrategy <a name="DeployJobStrategy" id="deployable-awscdk-app-ts.DeployJobStrategy"></a>
4785
+
4786
+ #### Members <a name="Members" id="Members"></a>
4787
+
4788
+ | **Name** | **Description** |
4789
+ | --- | --- |
4790
+ | <code><a href="#deployable-awscdk-app-ts.DeployJobStrategy.MATRIX">MATRIX</a></code> | *No description.* |
4791
+ | <code><a href="#deployable-awscdk-app-ts.DeployJobStrategy.MULTI_JOB">MULTI_JOB</a></code> | *No description.* |
4792
+
4793
+ ---
4794
+
4795
+ ##### `MATRIX` <a name="MATRIX" id="deployable-awscdk-app-ts.DeployJobStrategy.MATRIX"></a>
4796
+
4797
+ ---
4798
+
4799
+
4800
+ ##### `MULTI_JOB` <a name="MULTI_JOB" id="deployable-awscdk-app-ts.DeployJobStrategy.MULTI_JOB"></a>
4801
+
4802
+ ---
4803
+
package/lib/index.d.ts CHANGED
@@ -13,6 +13,7 @@ export declare class DeployableAwsCdkTypeScriptApp extends awscdk.AwsCdkTypeScri
13
13
  private readonly workflowNodeVersion?;
14
14
  protected deployOptions: DeployOptions;
15
15
  private readonly codeArtifactOptions?;
16
+ private readonly deployJobStrategy;
16
17
  constructor(options: DeployableAwsCdkTypeScriptAppOptions);
17
18
  /**
18
19
  * return the major node version set for the project
package/lib/index.js CHANGED
@@ -18,9 +18,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.DeployableAwsCdkTypeScriptApp = exports.utils = void 0;
19
19
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
20
20
  const projen_1 = require("projen");
21
- const workflows_model_1 = require("projen/lib/github/workflows-model");
22
- const javascript_1 = require("projen/lib/javascript");
23
- const steps = require("./steps");
21
+ const steps_1 = require("./steps");
22
+ const types_1 = require("./types");
24
23
  const utils_1 = require("./utils");
25
24
  __exportStar(require("./types"), exports);
26
25
  exports.utils = require("./utils");
@@ -37,6 +36,7 @@ class DeployableAwsCdkTypeScriptApp extends projen_1.awscdk.AwsCdkTypeScriptApp
37
36
  this.workflowNodeVersion = options.workflowNodeVersion;
38
37
  this.deployOptions = options.deployOptions ?? { environments: [] };
39
38
  this.codeArtifactOptions = options.codeArtifactOptions;
39
+ this.deployJobStrategy = this.deployOptions.jobStrategy ?? types_1.DeployJobStrategy.MATRIX;
40
40
  this.addDevDeps('deployable-awscdk-app-ts');
41
41
  if (!deployable) {
42
42
  this.logger.warn('The project is explicitly set to not release, make sure this is desired setting');
@@ -128,85 +128,18 @@ class DeployableAwsCdkTypeScriptApp extends projen_1.awscdk.AwsCdkTypeScriptApp
128
128
  this.updateEnvironments(newEnvironments);
129
129
  }
130
130
  addDeployJobs() {
131
- if (this.deployOptions.environments.length === 0) {
132
- this.logger.warn('The project does not have any environment set, make sure this is desired setting');
133
- }
134
- const include = this.deployOptions.environments.map(environmentOptions => {
135
- const { awsCredentials } = environmentOptions;
136
- const assumeRole = awsCredentials.roleToAssume ? 'true' : 'false';
137
- const assumeRoleSettings = awsCredentials.roleToAssume ? {
138
- roleToAssume: awsCredentials.roleToAssume,
139
- assumeRoleDurationSeconds: awsCredentials.assumeRoleDurationSeconds || 900,
140
- } : undefined;
141
- const accessKeyIdSecretName = awsCredentials.accessKeyIdSecretName ?? 'AWS_ACCESS_KEY_ID';
142
- const secretAccessKeySecretName = awsCredentials.secretAccessKeySecretName ?? 'AWS_SECRET_ACCESS_KEY';
143
- const hasPostDeployTask = environmentOptions.postDeployWorkflowScript ? 'true' : 'false';
144
- const hasPreDeployTask = environmentOptions.preDeployWorkflowScript ? 'true' : 'false';
145
- return {
146
- environment: environmentOptions.name,
147
- accessKeyIdSecretName,
148
- secretAccessKeySecretName,
149
- region: awsCredentials.region,
150
- assumeRole,
151
- hasPostDeployTask,
152
- postDeploymentScript: environmentOptions.postDeployWorkflowScript || '',
153
- hasPreDeployTask,
154
- preDeploymentScript: environmentOptions.preDeployWorkflowScript || '',
155
- ...assumeRoleSettings,
156
- };
131
+ const stepFactory = new steps_1.DeployableAwsCdkTypeScriptAppStepsFactory(this, {
132
+ authProvider: this.codeArtifactOptions?.authProvider,
133
+ checkActiveDeployment: this.checkActiveDeployment,
134
+ deployOptions: this.deployOptions,
135
+ preInstallTaskName: this.deployOptions.taskToRunPreInstall,
136
+ npmConfigEnvironment: this.deployOptions.npmConfigEnvironment,
137
+ jobStrategy: this.deployJobStrategy,
157
138
  });
158
- const deployJobEnv = this.deployOptions.environmentVariableName ? {
159
- [this.deployOptions.environmentVariableName]: '${{ matrix.environment }}',
160
- } : undefined;
161
- const jobDefinition = {
162
- runsOn: ['ubuntu-latest'],
163
- concurrency: {
164
- 'group': '${{ matrix.environment }}-deploy',
165
- 'cancel-in-progress': false,
166
- },
167
- needs: [
168
- 'release_github',
169
- ],
170
- permissions: {
171
- contents: workflows_model_1.JobPermission.READ,
172
- deployments: workflows_model_1.JobPermission.READ,
173
- idToken: this.codeArtifactOptions?.authProvider === javascript_1.CodeArtifactAuthProvider.GITHUB_OIDC ? workflows_model_1.JobPermission.WRITE : undefined,
174
- },
175
- strategy: {
176
- maxParallel: 1,
177
- matrix: {
178
- domain: {
179
- environment: include.map(e => e.environment),
180
- },
181
- include,
182
- },
183
- },
184
- environment: {
185
- name: '${{ matrix.environment }}',
186
- },
187
- env: deployJobEnv,
188
- steps: [],
189
- };
190
- jobDefinition.steps.push(steps.checkoutStep());
191
- const { taskToRunPreInstall } = this.deployOptions;
192
- if (taskToRunPreInstall) {
193
- jobDefinition.steps.push(steps.preInstallDependenciesStep(taskToRunPreInstall, this.checkActiveDeployment));
194
- }
195
- jobDefinition.steps.push(...this.package.project.renderWorkflowSetup());
196
- if (this.checkActiveDeployment) {
197
- jobDefinition.steps.push(steps.checkActiveDeploymentStep());
198
- }
199
- jobDefinition.steps.push(...steps.setAwsCredentialsSteps(this.checkActiveDeployment, this.codeArtifactOptions?.authProvider));
200
- if (this.deployOptions.npmConfigEnvironment) {
201
- jobDefinition.steps.push(steps.setNpmConfig(this.deployOptions.npmConfigEnvironment, '${{ matrix.environment }}', this.checkActiveDeployment));
202
- }
203
- jobDefinition.steps.push(steps.preDeploymentStep(this.checkActiveDeployment, this.package.packageManager));
204
- jobDefinition.steps.push(steps.deploymentStep(this.checkActiveDeployment, this.package.packageManager));
205
- jobDefinition.steps.push(steps.postDeploymentStep(this.checkActiveDeployment, this.package.packageManager));
206
- this.release?.addJobs({ deploy: jobDefinition });
139
+ this.release?.addJobs(stepFactory.deploymentJobs);
207
140
  }
208
141
  }
209
142
  exports.DeployableAwsCdkTypeScriptApp = DeployableAwsCdkTypeScriptApp;
210
143
  _a = JSII_RTTI_SYMBOL_1;
211
- DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.679" };
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnRDtBQUNoRCx1RUFBdUU7QUFDdkUsc0RBQW1HO0FBQ25HLGlDQUFpQztBQUVqQyxtQ0FBOEM7QUFFOUMsMENBQXdCO0FBQ3hCLG1DQUFpQztBQUVqQyxNQUFhLDZCQUE4QixTQUFRLGVBQU0sQ0FBQyxtQkFBbUI7SUFjM0UsWUFBWSxPQUE2QztRQUN2RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztRQUMzQyxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixPQUFPLEVBQUUsVUFBVTtTQUNwQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDO1FBQ25ELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLElBQUksS0FBSyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7UUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ25FLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7UUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlGQUFpRixDQUFDLENBQUM7UUFBQSxDQUFDO1FBRXZILElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIs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QUFDLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQUEsQ0FBQztRQUU5RixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFFOUgsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFBQSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUFBLENBQUM7UUFFOUwsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDM0csYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRTVHLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFFbkQsQ0FBQzs7QUEvTUgsc0VBZ05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzY2RrLCBUYXNrLCBUZXh0RmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBKb2IsIEpvYlBlcm1pc3Npb24gfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwnO1xuaW1wb3J0IHsgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLCBDb2RlQXJ0aWZhY3RPcHRpb25zLCBOb2RlUHJvamVjdCB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgKiBhcyBzdGVwcyBmcm9tICcuL3N0ZXBzJztcbmltcG9ydCB7IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucywgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnRPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRNYWpvck5vZGVWZXJzaW9uIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogYXMgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcCBleHRlbmRzIGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwIHtcblxuICAvKipcbiAgICogVGFzayB0byBkZXBsb3kgeW91ciBhcHAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVwbG95V29ya2Zsb3dUYXNrOiBUYXNrO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95YWJsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBnZW5lcmF0ZU52bXJjOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd05vZGVWZXJzaW9uPzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZGVwbG95T3B0aW9uczogRGVwbG95T3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlQXJ0aWZhY3RPcHRpb25zPzogQ29kZUFydGlmYWN0T3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMpIHtcbiAgICBjb25zdCBkZXBsb3lhYmxlID0gb3B0aW9ucy5yZWxlYXNlID8/IHRydWU7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHJlbGVhc2U6IGRlcGxveWFibGUsXG4gICAgfSk7XG4gICAgdGhpcy5kZXBsb3lhYmxlID0gZGVwbG95YWJsZTtcbiAgICB0aGlzLmdlbmVyYXRlTnZtcmMgPSBvcHRpb25zLmdlbmVyYXRlTnZtcmMgPz8gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA9IG9wdGlvbnMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8/IGZhbHNlO1xuICAgIHRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9IG9wdGlvbnMud29ya2Zsb3dOb2RlVmVyc2lvbjtcbiAgICB0aGlzLmRlcGxveU9wdGlvbnMgPSBvcHRpb25zLmRlcGxveU9wdGlvbnMgPz8geyBlbnZpcm9ubWVudHM6IFtdIH07XG4gICAgdGhpcy5jb2RlQXJ0aWZhY3RPcHRpb25zID0gb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zO1xuICAgIHRoaXMuYWRkRGV2RGVwcygnZGVwbG95YWJsZS1hd3NjZGstYXBwLXRzJyk7XG5cbiAgICBpZiAoIWRlcGxveWFibGUpIHt0aGlzLmxvZ2dlci53YXJuKCdUaGUgcHJvamVjdCBpcyBleHBsaWNpdGx5IHNldCB0byBub3QgcmVsZWFzZSwgbWFrZSBzdXJlIHRoaXMgaXMgZGVzaXJlZCBzZXR0aW5nJyk7fVxuXG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVOdm1yYyAmJiAhdGhpcy53b3JrZmxvd05vZGVWZXJzaW9uKSB7dGhpcy53b3JrZmxvd05vZGVWZXJzaW9uID0gJzE0LjE4LjEnO31cblxuICAgIGlmICh0aGlzLmRlcGxveU9wdGlvbnMubnBtQ29uZmlnRW52aXJvbm1lbnQgJiYgdGhpcy5tYWpvck5vZGVWZXJzaW9uID49IDE4KSB7dGhyb3cgbmV3IEVycm9yKGBucG1Db25maWdFbnZpcm9ubWVudCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub2RlIHZlcnNpb25zIGFib3ZlIHZlcnNpb24gMTguIEN1cnJlbnQgdmVyc2lvbiBpcyAke3RoaXMubm9kZVZlcnNpb259YCk7fVxuXG4gICAgY29uc3QgZGVwbG95QXJndW1lbnQgPSB0aGlzLmRlcGxveU9wdGlvbnMuc3RhY2tQYXR0ZXJuID8gYCAke3RoaXMuZGVwbG95T3B0aW9ucy5zdGFja1BhdHRlcm59YDogJyc7XG4gICAgY29uc3QgZGVwbG95Q29tbWFuZCA9IGBjZGsgZGVwbG95JHtkZXBsb3lBcmd1bWVudH0gJHt0aGlzLmdldE1ldGhvZEFyZ3VtZW50KCl9IC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlcmA7XG4gICAgY29uc3QgcmVxdWlyZWRFbnYgPSB0aGlzLmRlcGxveU9wdGlvbnMubnBtQ29uZmlnRW52aXJvbm1lbnQgPyBbYG5wbV9jb25maWdfJHt0aGlzLmRlcGxveU9wdGlvbnMubnBtQ29uZmlnRW52aXJvbm1lbnR9YF0gOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZXBsb3lXb3JrZmxvd1Rhc2sgPSB0aGlzLmFkZFRhc2soJ2RlcGxveTp3b3JrZmxvdycsIHtcbiAgICAgIHJlcXVpcmVkRW52LFxuICAgICAgZXhlYzogZGVwbG95Q29tbWFuZCxcbiAgICB9KTtcbiAgICB0aGlzLmFkZFRhc2soJ2RlcGxveTpob3Rzd2FwJywge1xuICAgICAgcmVxdWlyZWRFbnYsXG4gICAgICBleGVjOiBgJHtkZXBsb3lDb21tYW5kfSAtLWhvdHN3YXBgLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgbWFqb3Igbm9kZSB2ZXJzaW9uIHNldCBmb3IgdGhlIHByb2plY3RcbiAgICogQGRlZmF1bHQgMTZcbiAgICovXG4gIGdldCBtYWpvck5vZGVWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGdldE1ham9yTm9kZVZlcnNpb24odGhpcy5ub2RlVmVyc2lvbik7XG4gIH1cblxuICBwcml2YXRlIGdldE1ldGhvZEFyZ3VtZW50KCkge1xuICAgIHJldHVybiBgLS1tZXRob2QgJHt0aGlzLmRlcGxveU9wdGlvbnMubWV0aG9kID8/ICdjaGFuZ2Utc2V0J31gO1xuICB9XG5cbiAgc3ludGgoKSB7XG4gICAgaWYgKHRoaXMuZGVwbG95YWJsZSkge3RoaXMuYWRkRGVwbG95Sm9icygpO31cblxuICAgIGlmICh0aGlzLmdlbmVyYXRlTnZtcmMpIHtcbiAgICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnLm52bXJjJywge1xuICAgICAgICBsaW5lczogW3RoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA/PyAnJ10sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdXBlci5zeW50aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgZW52aXJvbm1lbnRzIHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKiBAcGFyYW0gaXRlbXMgbGlzdCBvZiBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqL1xuICBhZGRFbnZpcm9ubWVudHMoLi4uaXRlbXM6IEVudmlyb25tZW50T3B0aW9uc1tdKSB7XG4gICAgdGhpcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5wdXNoKC4uLml0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRW52aXJvbm1lbnRzKG5ld0Vudmlyb25tZW50czogRW52aXJvbm1lbnRPcHRpb25zW10pIHtcbiAgICB0aGlzLmRlcGxveU9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBlbnZpcm9ubWVudHM6IG5ld0Vudmlyb25tZW50cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCBmb3IgZW52aXJvbm1lbnRzXG4gICAqIEBwYXJhbSBzY3JpcHQgdGhlIHNjcmlwdCB0byBiZSBhZGRlZCwgZm9yIGV4YW1wbGUgXCJwb3N0OmRlcGxveVwiXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudE5hbWVGaWx0ZXIgdGhlIG5hbWUgb2YgZW52aXJvbm1lbnRzIHRvIGFkZCB0aGUgc2NyaXB0cyB0bywgaWYgbm90IHByb3ZpZGVkIG9yIGVtcHR5IHdpbGwgdXBkYXRlIGFsbFxuICAgKi9cbiAgdXBkYXRlUG9zdERlcGxveVdvcmtmbG93U2NyaXB0VG9FbnZpcm9ubWVudHMoc2NyaXB0OiBzdHJpbmcsIGVudmlyb25tZW50TmFtZUZpbHRlcj86IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbmV3RW52aXJvbm1lbnRzID0gdGhpcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5tYXAoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgaWYgKGVudmlyb25tZW50TmFtZUZpbHRlciAmJiBlbnZpcm9ubWVudE5hbWVGaWx0ZXIubGVuZ3RoID4gMCAmJiAhZW52aXJvbm1lbnROYW1lRmlsdGVyLmluY2x1ZGVzKGVudmlyb25tZW50Lm5hbWUpKSB7cmV0dXJuIGVudmlyb25tZW50O31cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZW52aXJvbm1lbnQsXG4gICAgICAgIHBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdDogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHByZURlcGxveVdvcmtmbG93U2NyaXB0IGZvciBlbnZpcm9ubWVudHNcbiAgICogQHBhcmFtIHNjcmlwdCB0aGUgc2NyaXB0IHRvIGJlIGFkZGVkLCBmb3IgZXhhbXBsZSBcInByZTpkZXBsb3lcIlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lRmlsdGVyIHRoZSBuYW1lIG9mIGVudmlyb25tZW50cyB0byBhZGQgdGhlIHNjcmlwdHMgdG8sIGlmIG5vdCBwcm92aWRlZCBvciBlbXB0eSB3aWxsIHVwZGF0ZSBhbGxcbiAgICovXG4gIHVwZGF0ZVByZURlcGxveVdvcmtmbG93U2NyaXB0VG9FbnZpcm9ubWVudHMoc2NyaXB0OiBzdHJpbmcsIGVudmlyb25tZW50TmFtZUZpbHRlcj86IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgbmV3RW52aXJvbm1lbnRzID0gdGhpcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5tYXAoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgaWYgKGVudmlyb25tZW50TmFtZUZpbHRlciAmJiBlbnZpcm9ubWVudE5hbWVGaWx0ZXIubGVuZ3RoID4gMCAmJiAhZW52aXJvbm1lbnROYW1lRmlsdGVyLmluY2x1ZGVzKGVudmlyb25tZW50Lm5hbWUpKSB7cmV0dXJuIGVudmlyb25tZW50O31cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZW52aXJvbm1lbnQsXG4gICAgICAgIHByZURlcGxveVdvcmtmbG93U2NyaXB0OiBzY3JpcHQsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRW52aXJvbm1lbnRzKG5ld0Vudmlyb25tZW50cyk7XG4gIH1cblxuICBwcml2YXRlIGFkZERlcGxveUpvYnMoKSB7XG5cbiAgICBpZiAodGhpcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5sZW5ndGggPT09IDApIHt0aGlzLmxvZ2dlci53YXJuKCdUaGUgcHJvamVjdCBkb2VzIG5vdCBoYXZlIGFueSBlbnZpcm9ubWVudCBzZXQsIG1ha2Ugc3VyZSB0aGlzIGlzIGRlc2lyZWQgc2V0dGluZycpO31cblxuICAgIGNvbnN0IGluY2x1ZGUgPSB0aGlzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLm1hcChlbnZpcm9ubWVudE9wdGlvbnMgPT4ge1xuICAgICAgY29uc3QgeyBhd3NDcmVkZW50aWFscyB9ID0gZW52aXJvbm1lbnRPcHRpb25zO1xuXG4gICAgICBjb25zdCBhc3N1bWVSb2xlID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgY29uc3QgYXNzdW1lUm9sZVNldHRpbmdzID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8ge1xuICAgICAgICByb2xlVG9Bc3N1bWU6IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kczogYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB8fCA5MDAsXG4gICAgICB9OiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGFjY2Vzc0tleUlkU2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnO1xuICAgICAgY29uc3Qgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWSc7XG5cbiAgICAgIGNvbnN0IGhhc1Bvc3REZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgICBjb25zdCBoYXNQcmVEZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnByZURlcGxveVdvcmtmbG93U2NyaXB0ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50T3B0aW9ucy5uYW1lLFxuICAgICAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWUsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUsXG4gICAgICAgIHJlZ2lvbjogYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICAgICBhc3N1bWVSb2xlLFxuICAgICAgICBoYXNQb3N0RGVwbG95VGFzayxcbiAgICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgICAgIGhhc1ByZURlcGxveVRhc2ssXG4gICAgICAgIHByZURlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICAgICAgLi4uYXNzdW1lUm9sZVNldHRpbmdzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlcGxveUpvYkVudiA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFt0aGlzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBjb25jdXJyZW5jeToge1xuICAgICAgICAnZ3JvdXAnOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fS1kZXBsb3knLFxuICAgICAgICAnY2FuY2VsLWluLXByb2dyZXNzJzogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbmVlZHM6IFtcbiAgICAgICAgJ3JlbGVhc2VfZ2l0aHViJyxcbiAgICAgIF0sXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBkZXBsb3ltZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBpZFRva2VuOiB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlciA9PT0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBzdHJhdGVneToge1xuICAgICAgICBtYXhQYXJhbGxlbDogMSxcbiAgICAgICAgbWF0cml4OiB7XG4gICAgICAgICAgZG9tYWluOiB7XG4gICAgICAgICAgICBlbnZpcm9ubWVudDogaW5jbHVkZS5tYXAoZSA9PiBlLmVudmlyb25tZW50KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluY2x1ZGUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbmFtZTogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nLFxuICAgICAgfSxcbiAgICAgIGVudjogZGVwbG95Sm9iRW52LFxuICAgICAgc3RlcHM6IFtdLFxuICAgIH07XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc3RlcHMuY2hlY2tvdXRTdGVwKCkpO1xuXG4gICAgY29uc3QgeyB0YXNrVG9SdW5QcmVJbnN0YWxsIH0gPSB0aGlzLmRlcGxveU9wdGlvbnM7XG4gICAgaWYgKHRhc2tUb1J1blByZUluc3RhbGwpIHtqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc3RlcHMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAodGFza1RvUnVuUHJlSW5zdGFsbCwgdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQpKTt9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4uKHRoaXMucGFja2FnZS5wcm9qZWN0IGFzIE5vZGVQcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuXG4gICAgaWYgKHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50KSB7am9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHN0ZXBzLmNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXAoKSk7fVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLnN0ZXBzLnNldEF3c0NyZWRlbnRpYWxzU3RlcHModGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsIHRoaXMuY29kZUFydGlmYWN0T3B0aW9ucz8uYXV0aFByb3ZpZGVyKSk7XG5cbiAgICBpZiAodGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50KSB7am9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHN0ZXBzLnNldE5wbUNvbmZpZyh0aGlzLmRlcGxveU9wdGlvbnMubnBtQ29uZmlnRW52aXJvbm1lbnQsICcke3sgbWF0cml4LmVudmlyb25tZW50IH19JywgdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQpKTt9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc3RlcHMucHJlRGVwbG95bWVudFN0ZXAodGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsIHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlcikpO1xuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChzdGVwcy5kZXBsb3ltZW50U3RlcCh0aGlzLmNoZWNrQWN0aXZlRGVwbG95bWVudCwgdGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyKSk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHN0ZXBzLnBvc3REZXBsb3ltZW50U3RlcCh0aGlzLmNoZWNrQWN0aXZlRGVwbG95bWVudCwgdGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyKSk7XG5cbiAgICB0aGlzLnJlbGVhc2U/LmFkZEpvYnMoeyBkZXBsb3k6IGpvYkRlZmluaXRpb24gfSk7XG5cbiAgfVxufSJdfQ==
144
+ DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.681" };
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFnRDtBQUVoRCxtQ0FBb0U7QUFDcEUsbUNBQXFIO0FBQ3JILG1DQUE4QztBQUU5QywwQ0FBd0I7QUFDeEIsbUNBQWlDO0FBRWpDLE1BQWEsNkJBQThCLFNBQVEsZUFBTSxDQUFDLG1CQUFtQjtJQWUzRSxZQUFZLE9BQTZDO1FBQ3ZELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQzNDLEtBQUssQ0FBQztZQUNKLEdBQUcsT0FBTztZQUNWLE9BQU8sRUFBRSxVQUFVO1NBQ3BCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUM7UUFDbkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLENBQUM7UUFDcEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLElBQUkseUJBQWlCLENBQUMsTUFBTSxDQUFDO1FBRXBGLElBQUksQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpRkFBaUYsQ0FBQyxD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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NjZGssIFRhc2ssIFRleHRGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IENvZGVBcnRpZmFjdE9wdGlvbnMgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuaW1wb3J0IHsgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkgfSBmcm9tICcuL3N0ZXBzJztcbmltcG9ydCB7IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucywgRGVwbG95Sm9iU3RyYXRlZ3ksIERlcGxveU9wdGlvbnMsIEVudmlyb25tZW50T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0TWFqb3JOb2RlVmVyc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHAgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCB7XG5cbiAgLyoqXG4gICAqIFRhc2sgdG8gZGVwbG95IHlvdXIgYXBwLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlcGxveVdvcmtmbG93VGFzazogVGFzaztcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlcGxveWFibGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2VuZXJhdGVOdm1yYzogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGVja0FjdGl2ZURlcGxveW1lbnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dOb2RlVmVyc2lvbj86IHN0cmluZztcbiAgcHJvdGVjdGVkIGRlcGxveU9wdGlvbnM6IERlcGxveU9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZUFydGlmYWN0T3B0aW9ucz86IENvZGVBcnRpZmFjdE9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95Sm9iU3RyYXRlZ3k6IERlcGxveUpvYlN0cmF0ZWd5O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwT3B0aW9ucykge1xuICAgIGNvbnN0IGRlcGxveWFibGUgPSBvcHRpb25zLnJlbGVhc2UgPz8gdHJ1ZTtcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcmVsZWFzZTogZGVwbG95YWJsZSxcbiAgICB9KTtcbiAgICB0aGlzLmRlcGxveWFibGUgPSBkZXBsb3lhYmxlO1xuICAgIHRoaXMuZ2VuZXJhdGVOdm1yYyA9IG9wdGlvbnMuZ2VuZXJhdGVOdm1yYyA/PyB0cnVlO1xuICAgIHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID0gb3B0aW9ucy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPz8gZmFsc2U7XG4gICAgdGhpcy53b3JrZmxvd05vZGVWZXJzaW9uID0gb3B0aW9ucy53b3JrZmxvd05vZGVWZXJzaW9uO1xuICAgIHRoaXMuZGVwbG95T3B0aW9ucyA9IG9wdGlvbnMuZGVwbG95T3B0aW9ucyA/PyB7IGVudmlyb25tZW50czogW10gfTtcbiAgICB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnMgPSBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM7XG4gICAgdGhpcy5kZXBsb3lKb2JTdHJhdGVneSA9IHRoaXMuZGVwbG95T3B0aW9ucy5qb2JTdHJhdGVneSA/PyBEZXBsb3lKb2JTdHJhdGVneS5NQVRSSVg7XG5cbiAgICB0aGlzLmFkZERldkRlcHMoJ2RlcGxveWFibGUtYXdzY2RrLWFwcC10cycpO1xuXG4gICAgaWYgKCFkZXBsb3lhYmxlKSB7dGhpcy5sb2dnZXIud2FybignVGhlIHByb2plY3QgaXMgZXhwbGljaXRseSBzZXQgdG8gbm90IHJlbGVhc2UsIG1ha2Ugc3VyZSB0aGlzIGlzIGRlc2lyZWQgc2V0dGluZycpO31cblxuICAgIGlmICh0aGlzLmdlbmVyYXRlTnZtcmMgJiYgIXRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbikge3RoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9ICcxNC4xOC4xJzt9XG5cbiAgICBpZiAodGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ICYmIHRoaXMubWFqb3JOb2RlVmVyc2lvbiA+PSAxOCkge3Rocm93IG5ldyBFcnJvcihgbnBtQ29uZmlnRW52aXJvbm1lbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm9kZSB2ZXJzaW9ucyBhYm92ZSB2ZXJzaW9uIDE4LiBDdXJyZW50IHZlcnNpb24gaXMgJHt0aGlzLm5vZGVWZXJzaW9ufWApO31cblxuICAgIGNvbnN0IGRlcGxveUFyZ3VtZW50ID0gdGhpcy5kZXBsb3lPcHRpb25zLnN0YWNrUGF0dGVybiA/IGAgJHt0aGlzLmRlcGxveU9wdGlvbnMuc3RhY2tQYXR0ZXJufWA6ICcnO1xuICAgIGNvbnN0IGRlcGxveUNvbW1hbmQgPSBgY2RrIGRlcGxveSR7ZGVwbG95QXJndW1lbnR9ICR7dGhpcy5nZXRNZXRob2RBcmd1bWVudCgpfSAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXJgO1xuICAgIGNvbnN0IHJlcXVpcmVkRW52ID0gdGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ID8gW2BucG1fY29uZmlnXyR7dGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50fWBdIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVwbG95V29ya2Zsb3dUYXNrID0gdGhpcy5hZGRUYXNrKCdkZXBsb3k6d29ya2Zsb3cnLCB7XG4gICAgICByZXF1aXJlZEVudixcbiAgICAgIGV4ZWM6IGRlcGxveUNvbW1hbmQsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRUYXNrKCdkZXBsb3k6aG90c3dhcCcsIHtcbiAgICAgIHJlcXVpcmVkRW52LFxuICAgICAgZXhlYzogYCR7ZGVwbG95Q29tbWFuZH0gLS1ob3Rzd2FwYCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIG1ham9yIG5vZGUgdmVyc2lvbiBzZXQgZm9yIHRoZSBwcm9qZWN0XG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBnZXQgbWFqb3JOb2RlVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiBnZXRNYWpvck5vZGVWZXJzaW9uKHRoaXMubm9kZVZlcnNpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRob2RBcmd1bWVudCgpIHtcbiAgICByZXR1cm4gYC0tbWV0aG9kICR7dGhpcy5kZXBsb3lPcHRpb25zLm1ldGhvZCA/PyAnY2hhbmdlLXNldCd9YDtcbiAgfVxuXG4gIHN5bnRoKCkge1xuICAgIGlmICh0aGlzLmRlcGxveWFibGUpIHt0aGlzLmFkZERlcGxveUpvYnMoKTt9XG5cbiAgICBpZiAodGhpcy5nZW5lcmF0ZU52bXJjKSB7XG4gICAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5udm1yYycsIHtcbiAgICAgICAgbGluZXM6IFt0aGlzLndvcmtmbG93Tm9kZVZlcnNpb24gPz8gJyddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3VwZXIuc3ludGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IGVudmlyb25tZW50cyB0byB0aGUgYXBwbGljYXRpb25cbiAgICogQHBhcmFtIGl0ZW1zIGxpc3Qgb2YgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKi9cbiAgYWRkRW52aXJvbm1lbnRzKC4uLml0ZW1zOiBFbnZpcm9ubWVudE9wdGlvbnNbXSkge1xuICAgIHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMucHVzaCguLi5pdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHM6IEVudmlyb25tZW50T3B0aW9uc1tdKSB7XG4gICAgdGhpcy5kZXBsb3lPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5kZXBsb3lPcHRpb25zLFxuICAgICAgZW52aXJvbm1lbnRzOiBuZXdFbnZpcm9ubWVudHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgZm9yIGVudmlyb25tZW50c1xuICAgKiBAcGFyYW0gc2NyaXB0IHRoZSBzY3JpcHQgdG8gYmUgYWRkZWQsIGZvciBleGFtcGxlIFwicG9zdDpkZXBsb3lcIlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lRmlsdGVyIHRoZSBuYW1lIG9mIGVudmlyb25tZW50cyB0byBhZGQgdGhlIHNjcmlwdHMgdG8sIGlmIG5vdCBwcm92aWRlZCBvciBlbXB0eSB3aWxsIHVwZGF0ZSBhbGxcbiAgICovXG4gIHVwZGF0ZVBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQ6IHNjcmlwdCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVFbnZpcm9ubWVudHMobmV3RW52aXJvbm1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCBmb3IgZW52aXJvbm1lbnRzXG4gICAqIEBwYXJhbSBzY3JpcHQgdGhlIHNjcmlwdCB0byBiZSBhZGRlZCwgZm9yIGV4YW1wbGUgXCJwcmU6ZGVwbG95XCJcbiAgICogQHBhcmFtIGVudmlyb25tZW50TmFtZUZpbHRlciB0aGUgbmFtZSBvZiBlbnZpcm9ubWVudHMgdG8gYWRkIHRoZSBzY3JpcHRzIHRvLCBpZiBub3QgcHJvdmlkZWQgb3IgZW1wdHkgd2lsbCB1cGRhdGUgYWxsXG4gICAqL1xuICB1cGRhdGVQcmVEZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdDogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZXBsb3lKb2JzKCkge1xuXG4gICAgY29uc3Qgc3RlcEZhY3RvcnkgPSBuZXcgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkodGhpcywge1xuICAgICAgYXV0aFByb3ZpZGVyOiB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlcixcbiAgICAgIGNoZWNrQWN0aXZlRGVwbG95bWVudDogdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsXG4gICAgICBkZXBsb3lPcHRpb25zOiB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBwcmVJbnN0YWxsVGFza05hbWU6IHRoaXMuZGVwbG95T3B0aW9ucy50YXNrVG9SdW5QcmVJbnN0YWxsLFxuICAgICAgbnBtQ29uZmlnRW52aXJvbm1lbnQ6IHRoaXMuZGVwbG95T3B0aW9ucy5ucG1Db25maWdFbnZpcm9ubWVudCxcbiAgICAgIGpvYlN0cmF0ZWd5OiB0aGlzLmRlcGxveUpvYlN0cmF0ZWd5LFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWxlYXNlPy5hZGRKb2JzKHN0ZXBGYWN0b3J5LmRlcGxveW1lbnRKb2JzKTtcbiAgfVxufSJdfQ==