@aws-solutions-constructs/core 2.99.0 → 2.100.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.
Files changed (39) hide show
  1. package/.jsii +8 -9
  2. package/index.d.ts +1 -0
  3. package/index.js +2 -1
  4. package/lib/constructs-feature-flags.d.ts +2 -0
  5. package/lib/constructs-feature-flags.js +12 -6
  6. package/lib/validation.d.ts +60 -0
  7. package/lib/validation.js +594 -0
  8. package/nohoist.sh +6 -1
  9. package/package.json +4 -5
  10. package/test/alb-helper.test.js +14 -14
  11. package/test/apigateway-helper.test.js +4 -4
  12. package/test/bedrock-inference-helper.test.js +2 -2
  13. package/test/cloudfront-distribution-s3-helper.test.js +8 -8
  14. package/test/constructs-feature-flags.test.js +10 -3
  15. package/test/dynamo-table.test.js +4 -4
  16. package/test/elasticsearch-helper.test.js +2 -2
  17. package/test/eventbridge-helper.test.js +2 -2
  18. package/test/fargate-helper.test.js +9 -9
  19. package/test/glue-job-helper.test.js +4 -4
  20. package/test/kendra-helper.test.js +6 -6
  21. package/test/kinesis-streams-helper.test.js +2 -2
  22. package/test/lambda-helper.test.js +5 -5
  23. package/test/opensearch-helper.test.js +2 -2
  24. package/test/override-warning-service.test.js +13 -13
  25. package/test/pipes-helper.test.js +12 -12
  26. package/test/s3-bucket.test.js +5 -5
  27. package/test/sagemaker-helper.test.js +7 -7
  28. package/test/secretsmanager-helper.test.js +2 -2
  29. package/test/sns-helper.test.js +7 -7
  30. package/test/sqs-helper.test.js +13 -13
  31. package/test/step-function-helper.test.js +6 -6
  32. package/test/test-helper.d.ts +1 -1
  33. package/test/test-helper.js +1 -1
  34. package/test/utils.test.js +9 -9
  35. package/test/validation.test.d.ts +13 -0
  36. package/test/validation.test.js +218 -0
  37. package/test/vpc-helper.test.js +6 -6
  38. package/test/waf-helper.test.js +2 -2
  39. package/test/websocket-api-helper.test.js +4 -4
@@ -0,0 +1,594 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.validCfnWebACLProps = exports.validPrivateHostedZoneProps = exports.validCfnModelProps = exports.validVpcProps = exports.validKeyProps = exports.validCfnDataSourceProps = exports.validCfnIndexProps = exports.validCfnCacheClusterProps = exports.validKinesisEventSourceProps = exports.validCfnJobProps = exports.validStreamProps = exports.validCfnDeliveryStreamProps = exports.validCfnPipeProps = exports.validDynamoEventSourceProps = exports.validUserPoolClientProps = exports.validDistributionProps = exports.validRestApiProps = exports.validLambdaRestApiProps = exports.validFargateServiceProps = exports.validFargateTaskDefinitionProps = exports.validContainerDefinitionProps = exports.validApplicationListenerProps = exports.validApplicationLoadBalancerProps = void 0;
16
+ exports.ValidateProps = ValidateProps;
17
+ exports.ValidateApplicationLoadBalancerProps = ValidateApplicationLoadBalancerProps;
18
+ exports.ValidateApplicationListenerProps = ValidateApplicationListenerProps;
19
+ exports.ValidateContainerDefinitionProps = ValidateContainerDefinitionProps;
20
+ exports.ValidateFargateTaskDefinitionProps = ValidateFargateTaskDefinitionProps;
21
+ exports.ValidateFargateServiceProps = ValidateFargateServiceProps;
22
+ exports.ValidateLambdaRestApiProps = ValidateLambdaRestApiProps;
23
+ exports.ValidateRestApiProps = ValidateRestApiProps;
24
+ exports.ValidateDistributionProps = ValidateDistributionProps;
25
+ exports.ValidateUserPoolClientProps = ValidateUserPoolClientProps;
26
+ exports.ValidateDynamoEventSourceProps = ValidateDynamoEventSourceProps;
27
+ exports.ValidateCfnPipeProps = ValidateCfnPipeProps;
28
+ exports.ValidateCfnDeliveryStreamProps = ValidateCfnDeliveryStreamProps;
29
+ exports.ValidateStreamProps = ValidateStreamProps;
30
+ exports.ValidateCfnJobProps = ValidateCfnJobProps;
31
+ exports.ValidateKinesisEventSourceProps = ValidateKinesisEventSourceProps;
32
+ exports.ValidateCfnCacheClusterProps = ValidateCfnCacheClusterProps;
33
+ exports.ValidateCfnIndexProps = ValidateCfnIndexProps;
34
+ exports.ValidateCfnDataSourceProps = ValidateCfnDataSourceProps;
35
+ exports.ValidateKeyProps = ValidateKeyProps;
36
+ exports.ValidateVpcProps = ValidateVpcProps;
37
+ exports.ValidateCfnModelProps = ValidateCfnModelProps;
38
+ exports.ValidatePrivateHostedZoneProps = ValidatePrivateHostedZoneProps;
39
+ exports.ValidateCfnWebACLProps = ValidateCfnWebACLProps;
40
+ const cdk = require("aws-cdk-lib");
41
+ const constructs_feature_flags_1 = require("./constructs-feature-flags");
42
+ // ApplicationLoadBalancerProps from aws-cdk-lib/aws-elasticloadbalancingv2
43
+ exports.validApplicationLoadBalancerProps = new Set([
44
+ 'clientKeepAlive',
45
+ 'crossZoneEnabled',
46
+ 'deletionProtection',
47
+ 'denyAllIgwTraffic',
48
+ 'desyncMitigationMode',
49
+ 'dropInvalidHeaderFields',
50
+ 'http2Enabled',
51
+ 'idleTimeout',
52
+ 'internetFacing',
53
+ 'ipAddressType',
54
+ 'loadBalancerName',
55
+ 'minimumCapacityUnit',
56
+ 'preserveHostHeader',
57
+ 'preserveXffClientPort',
58
+ 'securityGroup',
59
+ 'vpc',
60
+ 'vpcSubnets',
61
+ 'wafFailOpen',
62
+ 'xAmznTlsVersionAndCipherSuiteHeaders',
63
+ 'xffHeaderProcessingMode'
64
+ ]);
65
+ // ApplicationListenerProps from aws-cdk-lib/aws-elasticloadbalancingv2
66
+ exports.validApplicationListenerProps = new Set([
67
+ 'certificates',
68
+ 'defaultAction',
69
+ 'defaultTargetGroups',
70
+ 'loadBalancer',
71
+ 'mutualAuthentication',
72
+ 'open',
73
+ 'port',
74
+ 'protocol',
75
+ 'sslPolicy'
76
+ ]);
77
+ // ContainerDefinitionProps from aws-cdk-lib/aws-ecs
78
+ exports.validContainerDefinitionProps = new Set([
79
+ 'command',
80
+ 'containerName',
81
+ 'cpu',
82
+ 'credentialSpecs',
83
+ 'disableNetworking',
84
+ 'dnsSearchDomains',
85
+ 'dnsServers',
86
+ 'dockerLabels',
87
+ 'dockerSecurityOptions',
88
+ 'enableRestartPolicy',
89
+ 'entryPoint',
90
+ 'environment',
91
+ 'environmentFiles',
92
+ 'essential',
93
+ 'extraHosts',
94
+ 'gpuCount',
95
+ 'healthCheck',
96
+ 'hostname',
97
+ 'image',
98
+ 'inferenceAcceleratorResources',
99
+ 'interactive',
100
+ 'linuxParameters',
101
+ 'logging',
102
+ 'memoryLimitMiB',
103
+ 'memoryReservationMiB',
104
+ 'portMappings',
105
+ 'privileged',
106
+ 'pseudoTerminal',
107
+ 'readonlyRootFilesystem',
108
+ 'restartAttemptPeriod',
109
+ 'restartIgnoredExitCodes',
110
+ 'secrets',
111
+ 'startTimeout',
112
+ 'stopTimeout',
113
+ 'systemControls',
114
+ 'taskDefinition',
115
+ 'ulimits',
116
+ 'user',
117
+ 'versionConsistency',
118
+ 'workingDirectory'
119
+ ]);
120
+ // FargateTaskDefinitionProps from aws-cdk-lib/aws-ecs
121
+ exports.validFargateTaskDefinitionProps = new Set([
122
+ 'cpu',
123
+ 'enableFaultInjection',
124
+ 'ephemeralStorageGiB',
125
+ 'executionRole',
126
+ 'family',
127
+ 'memoryLimitMiB',
128
+ 'pidMode',
129
+ 'proxyConfiguration',
130
+ 'runtimePlatform',
131
+ 'taskRole',
132
+ 'volumes'
133
+ ]);
134
+ // FargateServiceProps from aws-cdk-lib/aws-ecs
135
+ exports.validFargateServiceProps = new Set([
136
+ 'assignPublicIp',
137
+ 'availabilityZoneRebalancing',
138
+ 'bakeTime',
139
+ 'canaryConfiguration',
140
+ 'capacityProviderStrategies',
141
+ 'circuitBreaker',
142
+ 'cloudMapOptions',
143
+ 'cluster',
144
+ 'deploymentAlarms',
145
+ 'deploymentController',
146
+ 'deploymentStrategy',
147
+ 'desiredCount',
148
+ 'enableECSManagedTags',
149
+ 'enableExecuteCommand',
150
+ 'healthCheckGracePeriod',
151
+ 'lifecycleHooks',
152
+ 'linearConfiguration',
153
+ 'maxHealthyPercent',
154
+ 'minHealthyPercent',
155
+ 'platformVersion',
156
+ 'propagateTags',
157
+ 'securityGroups',
158
+ 'serviceConnectConfiguration',
159
+ 'serviceName',
160
+ 'taskDefinition',
161
+ 'taskDefinitionRevision',
162
+ 'volumeConfigurations',
163
+ 'vpcSubnets'
164
+ ]);
165
+ // LambdaRestApiProps from aws-cdk-lib/aws-apigateway
166
+ exports.validLambdaRestApiProps = new Set([
167
+ 'apiKeySourceType',
168
+ 'binaryMediaTypes',
169
+ 'cloneFrom',
170
+ 'cloudWatchRole',
171
+ 'cloudWatchRoleRemovalPolicy',
172
+ 'defaultCorsPreflightOptions',
173
+ 'defaultIntegration',
174
+ 'defaultMethodOptions',
175
+ 'deploy',
176
+ 'deployOptions',
177
+ 'description',
178
+ 'disableExecuteApiEndpoint',
179
+ 'domainName',
180
+ 'endpointConfiguration',
181
+ 'endpointExportName',
182
+ 'endpointTypes',
183
+ 'failOnWarnings',
184
+ 'handler',
185
+ 'integrationOptions',
186
+ 'minCompressionSize',
187
+ 'minimumCompressionSize',
188
+ 'parameters',
189
+ 'policy',
190
+ 'proxy',
191
+ 'restApiName',
192
+ 'retainDeployments'
193
+ ]);
194
+ // RestApiProps from aws-cdk-lib/aws-apigateway
195
+ exports.validRestApiProps = new Set([
196
+ 'apiKeySourceType',
197
+ 'binaryMediaTypes',
198
+ 'cloneFrom',
199
+ 'cloudWatchRole',
200
+ 'cloudWatchRoleRemovalPolicy',
201
+ 'defaultCorsPreflightOptions',
202
+ 'defaultIntegration',
203
+ 'defaultMethodOptions',
204
+ 'deploy',
205
+ 'deployOptions',
206
+ 'description',
207
+ 'disableExecuteApiEndpoint',
208
+ 'domainName',
209
+ 'endpointConfiguration',
210
+ 'endpointExportName',
211
+ 'endpointTypes',
212
+ 'failOnWarnings',
213
+ 'minCompressionSize',
214
+ 'minimumCompressionSize',
215
+ 'parameters',
216
+ 'policy',
217
+ 'restApiName',
218
+ 'retainDeployments'
219
+ ]);
220
+ // DistributionProps from aws-cdk-lib/aws-cloudfront
221
+ exports.validDistributionProps = new Set([
222
+ 'additionalBehaviors',
223
+ 'certificate',
224
+ 'comment',
225
+ 'defaultBehavior',
226
+ 'defaultRootObject',
227
+ 'domainNames',
228
+ 'enableIpv6',
229
+ 'enableLogging',
230
+ 'enabled',
231
+ 'errorResponses',
232
+ 'geoRestriction',
233
+ 'httpVersion',
234
+ 'logBucket',
235
+ 'logFilePrefix',
236
+ 'logIncludesCookies',
237
+ 'minimumProtocolVersion',
238
+ 'priceClass',
239
+ 'publishAdditionalMetrics',
240
+ 'sslSupportMethod',
241
+ 'webAclId'
242
+ ]);
243
+ // UserPoolClientProps from aws-cdk-lib/aws-cognito
244
+ exports.validUserPoolClientProps = new Set([
245
+ 'accessTokenValidity',
246
+ 'analytics',
247
+ 'authFlows',
248
+ 'authSessionValidity',
249
+ 'disableOAuth',
250
+ 'enablePropagateAdditionalUserContextData',
251
+ 'enableTokenRevocation',
252
+ 'generateSecret',
253
+ 'idTokenValidity',
254
+ 'oAuth',
255
+ 'preventUserExistenceErrors',
256
+ 'readAttributes',
257
+ 'refreshTokenRotationGracePeriod',
258
+ 'refreshTokenValidity',
259
+ 'supportedIdentityProviders',
260
+ 'userPool',
261
+ 'userPoolClientName',
262
+ 'writeAttributes'
263
+ ]);
264
+ // DynamoEventSourceProps from aws-cdk-lib/aws-lambda-event-sources
265
+ exports.validDynamoEventSourceProps = new Set([
266
+ 'batchSize',
267
+ 'bisectBatchOnError',
268
+ 'enabled',
269
+ 'filterEncryption',
270
+ 'filters',
271
+ 'maxBatchingWindow',
272
+ 'maxRecordAge',
273
+ 'metricsConfig',
274
+ 'onFailure',
275
+ 'parallelizationFactor',
276
+ 'provisionedPollerConfig',
277
+ 'reportBatchItemFailures',
278
+ 'retryAttempts',
279
+ 'startingPosition',
280
+ 'tumblingWindow'
281
+ ]);
282
+ // CfnPipeProps from aws-cdk-lib/aws-pipes
283
+ exports.validCfnPipeProps = new Set([
284
+ 'description',
285
+ 'desiredState',
286
+ 'enrichment',
287
+ 'enrichmentParameters',
288
+ 'kmsKeyIdentifier',
289
+ 'logConfiguration',
290
+ 'name',
291
+ 'roleArn',
292
+ 'source',
293
+ 'sourceParameters',
294
+ 'tags',
295
+ 'target',
296
+ 'targetParameters'
297
+ ]);
298
+ // CfnDeliveryStreamProps from aws-cdk-lib/aws-kinesisfirehose
299
+ exports.validCfnDeliveryStreamProps = new Set([
300
+ 'amazonOpenSearchServerlessDestinationConfiguration',
301
+ 'amazonopensearchserviceDestinationConfiguration',
302
+ 'databaseSourceConfiguration',
303
+ 'deliveryStreamEncryptionConfigurationInput',
304
+ 'deliveryStreamName',
305
+ 'deliveryStreamType',
306
+ 'directPutSourceConfiguration',
307
+ 'elasticsearchDestinationConfiguration',
308
+ 'extendedS3DestinationConfiguration',
309
+ 'httpEndpointDestinationConfiguration',
310
+ 'icebergDestinationConfiguration',
311
+ 'kinesisStreamSourceConfiguration',
312
+ 'mskSourceConfiguration',
313
+ 'redshiftDestinationConfiguration',
314
+ 's3DestinationConfiguration',
315
+ 'snowflakeDestinationConfiguration',
316
+ 'splunkDestinationConfiguration',
317
+ 'tags'
318
+ ]);
319
+ // StreamProps from aws-cdk-lib/aws-kinesis
320
+ exports.validStreamProps = new Set([
321
+ 'encryption',
322
+ 'encryptionKey',
323
+ 'removalPolicy',
324
+ 'retentionPeriod',
325
+ 'shardCount',
326
+ 'shardLevelMetrics',
327
+ 'streamMode',
328
+ 'streamName'
329
+ ]);
330
+ // CfnJobProps from aws-cdk-lib/aws-glue
331
+ exports.validCfnJobProps = new Set([
332
+ 'allocatedCapacity',
333
+ 'command',
334
+ 'connections',
335
+ 'defaultArguments',
336
+ 'description',
337
+ 'executionClass',
338
+ 'executionProperty',
339
+ 'glueVersion',
340
+ 'jobMode',
341
+ 'jobRunQueuingEnabled',
342
+ 'logUri',
343
+ 'maintenanceWindow',
344
+ 'maxCapacity',
345
+ 'maxRetries',
346
+ 'name',
347
+ 'nonOverridableArguments',
348
+ 'notificationProperty',
349
+ 'numberOfWorkers',
350
+ 'role',
351
+ 'securityConfiguration',
352
+ 'tags',
353
+ 'timeout',
354
+ 'workerType'
355
+ ]);
356
+ // KinesisEventSourceProps from aws-cdk-lib/aws-lambda-event-sources
357
+ exports.validKinesisEventSourceProps = new Set([
358
+ 'batchSize',
359
+ 'bisectBatchOnError',
360
+ 'enabled',
361
+ 'filterEncryption',
362
+ 'filters',
363
+ 'maxBatchingWindow',
364
+ 'maxRecordAge',
365
+ 'metricsConfig',
366
+ 'onFailure',
367
+ 'parallelizationFactor',
368
+ 'provisionedPollerConfig',
369
+ 'reportBatchItemFailures',
370
+ 'retryAttempts',
371
+ 'startingPosition',
372
+ 'startingPositionTimestamp',
373
+ 'tumblingWindow'
374
+ ]);
375
+ // CfnCacheClusterProps from aws-cdk-lib/aws-elasticache
376
+ exports.validCfnCacheClusterProps = new Set([
377
+ 'autoMinorVersionUpgrade',
378
+ 'azMode',
379
+ 'cacheNodeType',
380
+ 'cacheParameterGroupName',
381
+ 'cacheSecurityGroupNames',
382
+ 'cacheSubnetGroupName',
383
+ 'clusterName',
384
+ 'engine',
385
+ 'engineVersion',
386
+ 'ipDiscovery',
387
+ 'logDeliveryConfigurations',
388
+ 'networkType',
389
+ 'notificationTopicArn',
390
+ 'numCacheNodes',
391
+ 'port',
392
+ 'preferredAvailabilityZone',
393
+ 'preferredAvailabilityZones',
394
+ 'preferredMaintenanceWindow',
395
+ 'snapshotArns',
396
+ 'snapshotName',
397
+ 'snapshotRetentionLimit',
398
+ 'snapshotWindow',
399
+ 'tags',
400
+ 'transitEncryptionEnabled',
401
+ 'vpcSecurityGroupIds'
402
+ ]);
403
+ // CfnIndexProps from aws-cdk-lib/aws-kendra
404
+ exports.validCfnIndexProps = new Set([
405
+ 'capacityUnits',
406
+ 'description',
407
+ 'documentMetadataConfigurations',
408
+ 'edition',
409
+ 'name',
410
+ 'roleArn',
411
+ 'serverSideEncryptionConfiguration',
412
+ 'tags',
413
+ 'userContextPolicy',
414
+ 'userTokenConfigurations'
415
+ ]);
416
+ // CfnDataSourceProps from aws-cdk-lib/aws-kendra
417
+ exports.validCfnDataSourceProps = new Set([
418
+ 'customDocumentEnrichmentConfiguration',
419
+ 'dataSourceConfiguration',
420
+ 'description',
421
+ 'indexId',
422
+ 'languageCode',
423
+ 'name',
424
+ 'roleArn',
425
+ 'schedule',
426
+ 'tags',
427
+ 'type'
428
+ ]);
429
+ // KeyProps from aws-cdk-lib/aws-kms
430
+ exports.validKeyProps = new Set([
431
+ 'admins',
432
+ 'alias',
433
+ 'description',
434
+ 'enableKeyRotation',
435
+ 'enabled',
436
+ 'keySpec',
437
+ 'keyUsage',
438
+ 'multiRegion',
439
+ 'pendingWindow',
440
+ 'policy',
441
+ 'removalPolicy',
442
+ 'rotationPeriod'
443
+ ]);
444
+ // VpcProps from aws-cdk-lib/aws-ec2
445
+ exports.validVpcProps = new Set([
446
+ 'availabilityZones',
447
+ 'cidr',
448
+ 'createInternetGateway',
449
+ 'defaultInstanceTenancy',
450
+ 'enableDnsHostnames',
451
+ 'enableDnsSupport',
452
+ 'flowLogs',
453
+ 'gatewayEndpoints',
454
+ 'ipAddresses',
455
+ 'ipProtocol',
456
+ 'ipv6Addresses',
457
+ 'maxAzs',
458
+ 'natGatewayProvider',
459
+ 'natGatewaySubnets',
460
+ 'natGateways',
461
+ 'reservedAzs',
462
+ 'restrictDefaultSecurityGroup',
463
+ 'subnetConfiguration',
464
+ 'vpcName',
465
+ 'vpnConnections',
466
+ 'vpnGateway',
467
+ 'vpnGatewayAsn',
468
+ 'vpnRoutePropagation'
469
+ ]);
470
+ // CfnModelProps from aws-cdk-lib/aws-sagemaker
471
+ exports.validCfnModelProps = new Set([
472
+ 'containers',
473
+ 'enableNetworkIsolation',
474
+ 'executionRoleArn',
475
+ 'inferenceExecutionConfig',
476
+ 'modelName',
477
+ 'primaryContainer',
478
+ 'tags',
479
+ 'vpcConfig'
480
+ ]);
481
+ // PrivateHostedZoneProps from aws-cdk-lib/aws-route53
482
+ exports.validPrivateHostedZoneProps = new Set([
483
+ 'addTrailingDot',
484
+ 'comment',
485
+ 'queryLogsLogGroupArn',
486
+ 'vpc',
487
+ 'zoneName'
488
+ ]);
489
+ // CfnWebACLProps from aws-cdk-lib/aws-wafv2
490
+ exports.validCfnWebACLProps = new Set([
491
+ 'applicationConfig',
492
+ 'associationConfig',
493
+ 'captchaConfig',
494
+ 'challengeConfig',
495
+ 'customResponseBodies',
496
+ 'dataProtectionConfig',
497
+ 'defaultAction',
498
+ 'description',
499
+ 'name',
500
+ 'onSourceDDoSProtectionConfig',
501
+ 'rules',
502
+ 'scope',
503
+ 'tags',
504
+ 'tokenDomains',
505
+ 'visibilityConfig'
506
+ ]);
507
+ // Shared validation implementation
508
+ // Scope is required for feature flag checking
509
+ // Target can be undefined - validation is skipped if target is undefined
510
+ function ValidateProps(scope, target, validProps, propsTypeName) {
511
+ // Check if validation is disabled via feature flag
512
+ if (cdk.FeatureFlags.of(scope).isEnabled(constructs_feature_flags_1.DISABLE_PROPERTY_VALIDATION)) {
513
+ return;
514
+ }
515
+ if (!target) {
516
+ return;
517
+ }
518
+ for (const key in target) {
519
+ if (!validProps.has(key)) {
520
+ throw new Error(`ERROR - ${key} is not a valid property of ${propsTypeName}`);
521
+ }
522
+ }
523
+ }
524
+ // Validation functions
525
+ function ValidateApplicationLoadBalancerProps(scope, target) {
526
+ ValidateProps(scope, target, exports.validApplicationLoadBalancerProps, 'ApplicationLoadBalancerProps');
527
+ }
528
+ function ValidateApplicationListenerProps(scope, target) {
529
+ ValidateProps(scope, target, exports.validApplicationListenerProps, 'ApplicationListenerProps');
530
+ }
531
+ function ValidateContainerDefinitionProps(scope, target) {
532
+ ValidateProps(scope, target, exports.validContainerDefinitionProps, 'ContainerDefinitionProps');
533
+ }
534
+ function ValidateFargateTaskDefinitionProps(scope, target) {
535
+ ValidateProps(scope, target, exports.validFargateTaskDefinitionProps, 'FargateTaskDefinitionProps');
536
+ }
537
+ function ValidateFargateServiceProps(scope, target) {
538
+ ValidateProps(scope, target, exports.validFargateServiceProps, 'FargateServiceProps');
539
+ }
540
+ function ValidateLambdaRestApiProps(scope, target) {
541
+ ValidateProps(scope, target, exports.validLambdaRestApiProps, 'LambdaRestApiProps');
542
+ }
543
+ function ValidateRestApiProps(scope, target) {
544
+ ValidateProps(scope, target, exports.validRestApiProps, 'RestApiProps');
545
+ }
546
+ function ValidateDistributionProps(scope, target) {
547
+ ValidateProps(scope, target, exports.validDistributionProps, 'DistributionProps');
548
+ }
549
+ function ValidateUserPoolClientProps(scope, target) {
550
+ ValidateProps(scope, target, exports.validUserPoolClientProps, 'UserPoolClientProps');
551
+ }
552
+ function ValidateDynamoEventSourceProps(scope, target) {
553
+ ValidateProps(scope, target, exports.validDynamoEventSourceProps, 'DynamoEventSourceProps');
554
+ }
555
+ function ValidateCfnPipeProps(scope, target) {
556
+ ValidateProps(scope, target, exports.validCfnPipeProps, 'CfnPipeProps');
557
+ }
558
+ function ValidateCfnDeliveryStreamProps(scope, target) {
559
+ ValidateProps(scope, target, exports.validCfnDeliveryStreamProps, 'CfnDeliveryStreamProps');
560
+ }
561
+ function ValidateStreamProps(scope, target) {
562
+ ValidateProps(scope, target, exports.validStreamProps, 'StreamProps');
563
+ }
564
+ function ValidateCfnJobProps(scope, target) {
565
+ ValidateProps(scope, target, exports.validCfnJobProps, 'CfnJobProps');
566
+ }
567
+ function ValidateKinesisEventSourceProps(scope, target) {
568
+ ValidateProps(scope, target, exports.validKinesisEventSourceProps, 'KinesisEventSourceProps');
569
+ }
570
+ function ValidateCfnCacheClusterProps(scope, target) {
571
+ ValidateProps(scope, target, exports.validCfnCacheClusterProps, 'CfnCacheClusterProps');
572
+ }
573
+ function ValidateCfnIndexProps(scope, target) {
574
+ ValidateProps(scope, target, exports.validCfnIndexProps, 'CfnIndexProps');
575
+ }
576
+ function ValidateCfnDataSourceProps(scope, target) {
577
+ ValidateProps(scope, target, exports.validCfnDataSourceProps, 'CfnDataSourceProps');
578
+ }
579
+ function ValidateKeyProps(scope, target) {
580
+ ValidateProps(scope, target, exports.validKeyProps, 'KeyProps');
581
+ }
582
+ function ValidateVpcProps(scope, target) {
583
+ ValidateProps(scope, target, exports.validVpcProps, 'VpcProps');
584
+ }
585
+ function ValidateCfnModelProps(scope, target) {
586
+ ValidateProps(scope, target, exports.validCfnModelProps, 'CfnModelProps');
587
+ }
588
+ function ValidatePrivateHostedZoneProps(scope, target) {
589
+ ValidateProps(scope, target, exports.validPrivateHostedZoneProps, 'PrivateHostedZoneProps');
590
+ }
591
+ function ValidateCfnWebACLProps(scope, target) {
592
+ ValidateProps(scope, target, exports.validCfnWebACLProps, 'CfnWebACLProps');
593
+ }
594
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUEyZkgsc0NBYUM7QUFHRCxvRkFFQztBQUVELDRFQUVDO0FBRUQsNEVBRUM7QUFFRCxnRkFFQztBQUVELGtFQUVDO0FBRUQsZ0VBRUM7QUFFRCxvREFFQztBQUVELDhEQUVDO0FBRUQsa0VBRUM7QUFFRCx3RUFFQztBQUVELG9EQUVDO0FBRUQsd0VBRUM7QUFFRCxrREFFQztBQUVELGtEQUVDO0FBRUQsMEVBRUM7QUFFRCxvRUFFQztBQUVELHNEQUVDO0FBRUQsZ0VBRUM7QUFFRCw0Q0FFQztBQUVELDRDQUVDO0FBRUQsc0RBRUM7QUFFRCx3RUFFQztBQUVELHdEQUVDO0FBeGxCRCxtQ0FBbUM7QUFDbkMseUVBQXlFO0FBRXpFLDJFQUEyRTtBQUM5RCxRQUFBLGlDQUFpQyxHQUFnQixJQUFJLEdBQUcsQ0FBQztJQUNwRSxpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsc0JBQXNCO0lBQ3RCLHlCQUF5QjtJQUN6QixjQUFjO0lBQ2QsYUFBYTtJQUNiLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2Ysa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLGVBQWU7SUFDZixLQUFLO0lBQ0wsWUFBWTtJQUNaLGFBQWE7SUFDYixzQ0FBc0M7SUFDdEMseUJBQXlCO0NBQzFCLENBQUMsQ0FBQztBQUVILHVFQUF1RTtBQUMxRCxRQUFBLDZCQUE2QixHQUFnQixJQUFJLEdBQUcsQ0FBQztJQUNoRSxjQUFjO0lBQ2QsZUFBZTtJQUNmLHFCQUFxQjtJQUNyQixjQUFjO0lBQ2Qsc0JBQXNCO0lBQ3RCLE1BQU07SUFDTixNQUFNO0lBQ04sVUFBVTtJQUNWLFdBQVc7Q0FDWixDQUFDLENBQUM7QUFFSCxvREFBb0Q7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Q3ZFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLCtCQUF1QixFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLEtBQWdCLEVBQUUsTUFBWTtJQUM3RCxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxxQkFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFnQixFQUFFLE1BQVk7SUFDN0QsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUscUJBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsS0FBZ0IsRUFBRSxNQUFZO0lBQ2xFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLDBCQUFrQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFnQiw4QkFBOEIsQ0FBQyxLQUFnQixFQUFFLE1BQVk7SUFDM0UsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsbUNBQTJCLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQUMsS0FBZ0IsRUFBRSxNQUFZO0lBQ25FLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLDJCQUFtQixFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBzY3JpcHRzL2dlbmVyYXRlLXZhbGlkYXRpb24udHNcbi8vIERvIG5vdCBlZGl0IG1hbnVhbGx5IC0gcnVuICducG0gcnVuIGdlbmVyYXRlOnZhbGlkYXRpb24nIGZyb20gdGhlIHNvdXJjZS9zY3JpcHRzIGZvbGRlciB0byByZWdlbmVyYXRlXG4vL1xuLy8gVGhpcyBmaWxlIGVuY29kZXMgdGhlIENESyBQcm9wcyBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgaW50byBkYXRhIHN0cnVjdHVyZXMgdGhhdFxuLy8gY2FuIGJlIHVzZWQgYXQgcnVudGltZSB0byB2YWxpZGF0ZSB0aGUgYXR0cmlidXRlcyBvZiBpbmNvbWluZyBDREsgUHJvcHMgb2JqZWN0cyxcbi8vIHNpbmNlIHRoZSB1c2Ugb2YgfCBhbnkgaW4gdGhlIGRlZmluaXRpb25zIHByZXZlbnRzIHZhbGlkYXRpb24gYXQgdHJhbnNwaWxhdGlvbiB0aW1lXG4vL1xuLy8gSXQgYWxzbyBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB3aWxsIHBlcmZvcm0gdGhlIHZhbGlkYXRpb24gb24gZWFjaCBQcm9wcyBvYmplY3QgdHlwZVxuLy8gcGFyc2VkXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IERJU0FCTEVfUFJPUEVSVFlfVkFMSURBVElPTiB9IGZyb20gJy4vY29uc3RydWN0cy1mZWF0dXJlLWZsYWdzJztcblxuLy8gQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJQcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXG5leHBvcnQgY29uc3QgdmFsaWRBcHBsaWNhdGlvbkxvYWRCYWxhbmNlclByb3BzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnY2xpZW50S2VlcEFsaXZlJyxcbiAgJ2Nyb3NzWm9uZUVuYWJsZWQnLFxuICAnZGVsZXRpb25Qcm90ZWN0aW9uJyxcbiAgJ2RlbnlBbGxJZ3dUcmFmZmljJyxcbiAgJ2Rlc3luY01pdGlnYXRpb25Nb2RlJyxcbiAgJ2Ryb3BJbnZhbGlkSGVhZGVyRmllbGRzJyxcbiAgJ2h0dHAyRW5hYmxlZCcsXG4gICdpZGxlVGltZW91dCcsXG4gICdpbnRlcm5ldEZhY2luZycsXG4gICdpcEFkZHJlc3NUeXBlJyxcbiAgJ2xvYWRCYWxhbmNlck5hbWUnLFxuICAnbWluaW11bUNhcGFjaXR5VW5pdCcsXG4gICdwcmVzZXJ2ZUhvc3RIZWFkZXInLFxuICAncHJlc2VydmVYZmZDbGllbnRQb3J0JyxcbiAgJ3NlY3VyaXR5R3JvdXAnLFxuICAndnBjJyxcbiAgJ3ZwY1N1Ym5ldHMnLFxuICAnd2FmRmFpbE9wZW4nLFxuICAneEFtem5UbHNWZXJzaW9uQW5kQ2lwaGVyU3VpdGVIZWFkZXJzJyxcbiAgJ3hmZkhlYWRlclByb2Nlc3NpbmdNb2RlJ1xuXSk7XG5cbi8vIEFwcGxpY2F0aW9uTGlzdGVuZXJQcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXG5leHBvcnQgY29uc3QgdmFsaWRBcHBsaWNhdGlvbkxpc3RlbmVyUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdjZXJ0aWZpY2F0ZXMnLFxuICAnZGVmYXVsdEFjdGlvbicsXG4gICdkZWZhdWx0VGFyZ2V0R3JvdXBzJyxcbiAgJ2xvYWRCYWxhbmNlcicsXG4gICdtdXR1YWxBdXRoZW50aWNhdGlvbicsXG4gICdvcGVuJyxcbiAgJ3BvcnQnLFxuICAncHJvdG9jb2wnLFxuICAnc3NsUG9saWN5J1xuXSk7XG5cbi8vIENvbnRhaW5lckRlZmluaXRpb25Qcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1lY3NcbmV4cG9ydCBjb25zdCB2YWxpZENvbnRhaW5lckRlZmluaXRpb25Qcm9wczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgJ2NvbW1hbmQnLFxuICAnY29udGFpbmVyTmFtZScsXG4gICdjcHUnLFxuICAnY3JlZGVudGlhbFNwZWNzJyxcbiAgJ2Rpc2FibGVOZXR3b3JraW5nJyxcbiAgJ2Ruc1NlYXJjaERvbWFpbnMnLFxuICAnZG5zU2VydmVycycsXG4gICdkb2NrZXJMYWJlbHMnLFxuICAnZG9ja2VyU2VjdXJpdHlPcHRpb25zJyxcbiAgJ2VuYWJsZVJlc3RhcnRQb2xpY3knLFxuICAnZW50cnlQb2ludCcsXG4gICdlbnZpcm9ubWVudCcsXG4gICdlbnZpcm9ubWVudEZpbGVzJyxcbiAgJ2Vzc2VudGlhbCcsXG4gICdleHRyYUhvc3RzJyxcbiAgJ2dwdUNvdW50JyxcbiAgJ2hlYWx0aENoZWNrJyxcbiAgJ2hvc3RuYW1lJyxcbiAgJ2ltYWdlJyxcbiAgJ2luZmVyZW5jZUFjY2VsZXJhdG9yUmVzb3VyY2VzJyxcbiAgJ2ludGVyYWN0aXZlJyxcbiAgJ2xpbnV4UGFyYW1ldGVycycsXG4gICdsb2dnaW5nJyxcbiAgJ21lbW9yeUxpbWl0TWlCJyxcbiAgJ21lbW9yeVJlc2VydmF0aW9uTWlCJyxcbiAgJ3BvcnRNYXBwaW5ncycsXG4gICdwcml2aWxlZ2VkJyxcbiAgJ3BzZXVkb1Rlcm1pbmFsJyxcbiAgJ3JlYWRvbmx5Um9vdEZpbGVzeXN0ZW0nLFxuICAncmVzdGFydEF0dGVtcHRQZXJpb2QnLFxuICAncmVzdGFydElnbm9yZWRFeGl0Q29kZXMnLFxuICAnc2VjcmV0cycsXG4gICdzdGFydFRpbWVvdXQnLFxuICAnc3RvcFRpbWVvdXQnLFxuICAnc3lzdGVtQ29udHJvbHMnLFxuICAndGFza0RlZmluaXRpb24nLFxuICAndWxpbWl0cycsXG4gICd1c2VyJyxcbiAgJ3ZlcnNpb25Db25zaXN0ZW5jeScsXG4gICd3b3JraW5nRGlyZWN0b3J5J1xuXSk7XG5cbi8vIEZhcmdhdGVUYXNrRGVmaW5pdGlvblByb3BzIGZyb20gYXdzLWNkay1saWIvYXdzLWVjc1xuZXhwb3J0IGNvbnN0IHZhbGlkRmFyZ2F0ZVRhc2tEZWZpbml0aW9uUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdjcHUnLFxuICAnZW5hYmxlRmF1bHRJbmplY3Rpb24nLFxuICAnZXBoZW1lcmFsU3RvcmFnZUdpQicsXG4gICdleGVjdXRpb25Sb2xlJyxcbiAgJ2ZhbWlseScsXG4gICdtZW1vcnlMaW1pdE1pQicsXG4gICdwaWRNb2RlJyxcbiAgJ3Byb3h5Q29uZmlndXJhdGlvbicsXG4gICdydW50aW1lUGxhdGZvcm0nLFxuICAndGFza1JvbGUnLFxuICAndm9sdW1lcydcbl0pO1xuXG4vLyBGYXJnYXRlU2VydmljZVByb3BzIGZyb20gYXdzLWNkay1saWIvYXdzLWVjc1xuZXhwb3J0IGNvbnN0IHZhbGlkRmFyZ2F0ZVNlcnZpY2VQcm9wczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgJ2Fzc2lnblB1YmxpY0lwJyxcbiAgJ2F2YWlsYWJpbGl0eVpvbmVSZWJhbGFuY2luZycsXG4gICdiYWtlVGltZScsXG4gICdjYW5hcnlDb25maWd1cmF0aW9uJyxcbiAgJ2NhcGFjaXR5UHJvdmlkZXJTdHJhdGVnaWVzJyxcbiAgJ2NpcmN1aXRCcmVha2VyJyxcbiAgJ2Nsb3VkTWFwT3B0aW9ucycsXG4gICdjbHVzdGVyJyxcbiAgJ2RlcGxveW1lbnRBbGFybXMnLFxuICAnZGVwbG95bWVudENvbnRyb2xsZXInLFxuICAnZGVwbG95bWVudFN0cmF0ZWd5JyxcbiAgJ2Rlc2lyZWRDb3VudCcsXG4gICdlbmFibGVFQ1NNYW5hZ2VkVGFncycsXG4gICdlbmFibGVFeGVjdXRlQ29tbWFuZCcsXG4gICdoZWFsdGhDaGVja0dyYWNlUGVyaW9kJyxcbiAgJ2xpZmVjeWNsZUhvb2tzJyxcbiAgJ2xpbmVhckNvbmZpZ3VyYXRpb24nLFxuICAnbWF4SGVhbHRoeVBlcmNlbnQnLFxuICAnbWluSGVhbHRoeVBlcmNlbnQnLFxuICAncGxhdGZvcm1WZXJzaW9uJyxcbiAgJ3Byb3BhZ2F0ZVRhZ3MnLFxuICAnc2VjdXJpdHlHcm91cHMnLFxuICAnc2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uJyxcbiAgJ3NlcnZpY2VOYW1lJyxcbiAgJ3Rhc2tEZWZpbml0aW9uJyxcbiAgJ3Rhc2tEZWZpbml0aW9uUmV2aXNpb24nLFxuICAndm9sdW1lQ29uZmlndXJhdGlvbnMnLFxuICAndnBjU3VibmV0cydcbl0pO1xuXG4vLyBMYW1iZGFSZXN0QXBpUHJvcHMgZnJvbSBhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheVxuZXhwb3J0IGNvbnN0IHZhbGlkTGFtYmRhUmVzdEFwaVByb3BzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnYXBpS2V5U291cmNlVHlwZScsXG4gICdiaW5hcnlNZWRpYVR5cGVzJyxcbiAgJ2Nsb25lRnJvbScsXG4gICdjbG91ZFdhdGNoUm9sZScsXG4gICdjbG91ZFdhdGNoUm9sZVJlbW92YWxQb2xpY3knLFxuICAnZGVmYXVsdENvcnNQcmVmbGlnaHRPcHRpb25zJyxcbiAgJ2RlZmF1bHRJbnRlZ3JhdGlvbicsXG4gICdkZWZhdWx0TWV0aG9kT3B0aW9ucycsXG4gICdkZXBsb3knLFxuICAnZGVwbG95T3B0aW9ucycsXG4gICdkZXNjcmlwdGlvbicsXG4gICdkaXNhYmxlRXhlY3V0ZUFwaUVuZHBvaW50JyxcbiAgJ2RvbWFpbk5hbWUnLFxuICAnZW5kcG9pbnRDb25maWd1cmF0aW9uJyxcbiAgJ2VuZHBvaW50RXhwb3J0TmFtZScsXG4gICdlbmRwb2ludFR5cGVzJyxcbiAgJ2ZhaWxPbldhcm5pbmdzJyxcbiAgJ2hhbmRsZXInLFxuICAnaW50ZWdyYXRpb25PcHRpb25zJyxcbiAgJ21pbkNvbXByZXNzaW9uU2l6ZScsXG4gICdtaW5pbXVtQ29tcHJlc3Npb25TaXplJyxcbiAgJ3BhcmFtZXRlcnMnLFxuICAncG9saWN5JyxcbiAgJ3Byb3h5JyxcbiAgJ3Jlc3RBcGlOYW1lJyxcbiAgJ3JldGFpbkRlcGxveW1lbnRzJ1xuXSk7XG5cbi8vIFJlc3RBcGlQcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5XG5leHBvcnQgY29uc3QgdmFsaWRSZXN0QXBpUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdhcGlLZXlTb3VyY2VUeXBlJyxcbiAgJ2JpbmFyeU1lZGlhVHlwZXMnLFxuICAnY2xvbmVGcm9tJyxcbiAgJ2Nsb3VkV2F0Y2hSb2xlJyxcbiAgJ2Nsb3VkV2F0Y2hSb2xlUmVtb3ZhbFBvbGljeScsXG4gICdkZWZhdWx0Q29yc1ByZWZsaWdodE9wdGlvbnMnLFxuICAnZGVmYXVsdEludGVncmF0aW9uJyxcbiAgJ2RlZmF1bHRNZXRob2RPcHRpb25zJyxcbiAgJ2RlcGxveScsXG4gICdkZXBsb3lPcHRpb25zJyxcbiAgJ2Rlc2NyaXB0aW9uJyxcbiAgJ2Rpc2FibGVFeGVjdXRlQXBpRW5kcG9pbnQnLFxuICAnZG9tYWluTmFtZScsXG4gICdlbmRwb2ludENvbmZpZ3VyYXRpb24nLFxuICAnZW5kcG9pbnRFeHBvcnROYW1lJyxcbiAgJ2VuZHBvaW50VHlwZXMnLFxuICAnZmFpbE9uV2FybmluZ3MnLFxuICAnbWluQ29tcHJlc3Npb25TaXplJyxcbiAgJ21pbmltdW1Db21wcmVzc2lvblNpemUnLFxuICAncGFyYW1ldGVycycsXG4gICdwb2xpY3knLFxuICAncmVzdEFwaU5hbWUnLFxuICAncmV0YWluRGVwbG95bWVudHMnXG5dKTtcblxuLy8gRGlzdHJpYnV0aW9uUHJvcHMgZnJvbSBhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFxuZXhwb3J0IGNvbnN0IHZhbGlkRGlzdHJpYnV0aW9uUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdhZGRpdGlvbmFsQmVoYXZpb3JzJyxcbiAgJ2NlcnRpZmljYXRlJyxcbiAgJ2NvbW1lbnQnLFxuICAnZGVmYXVsdEJlaGF2aW9yJyxcbiAgJ2RlZmF1bHRSb290T2JqZWN0JyxcbiAgJ2RvbWFpbk5hbWVzJyxcbiAgJ2VuYWJsZUlwdjYnLFxuICAnZW5hYmxlTG9nZ2luZycsXG4gICdlbmFibGVkJyxcbiAgJ2Vycm9yUmVzcG9uc2VzJyxcbiAgJ2dlb1Jlc3RyaWN0aW9uJyxcbiAgJ2h0dHBWZXJzaW9uJyxcbiAgJ2xvZ0J1Y2tldCcsXG4gICdsb2dGaWxlUHJlZml4JyxcbiAgJ2xvZ0luY2x1ZGVzQ29va2llcycsXG4gICdtaW5pbXVtUHJvdG9jb2xWZXJzaW9uJyxcbiAgJ3ByaWNlQ2xhc3MnLFxuICAncHVibGlzaEFkZGl0aW9uYWxNZXRyaWNzJyxcbiAgJ3NzbFN1cHBvcnRNZXRob2QnLFxuICAnd2ViQWNsSWQnXG5dKTtcblxuLy8gVXNlclBvb2xDbGllbnRQcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1jb2duaXRvXG5leHBvcnQgY29uc3QgdmFsaWRVc2VyUG9vbENsaWVudFByb3BzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnYWNjZXNzVG9rZW5WYWxpZGl0eScsXG4gICdhbmFseXRpY3MnLFxuICAnYXV0aEZsb3dzJyxcbiAgJ2F1dGhTZXNzaW9uVmFsaWRpdHknLFxuICAnZGlzYWJsZU9BdXRoJyxcbiAgJ2VuYWJsZVByb3BhZ2F0ZUFkZGl0aW9uYWxVc2VyQ29udGV4dERhdGEnLFxuICAnZW5hYmxlVG9rZW5SZXZvY2F0aW9uJyxcbiAgJ2dlbmVyYXRlU2VjcmV0JyxcbiAgJ2lkVG9rZW5WYWxpZGl0eScsXG4gICdvQXV0aCcsXG4gICdwcmV2ZW50VXNlckV4aXN0ZW5jZUVycm9ycycsXG4gICdyZWFkQXR0cmlidXRlcycsXG4gICdyZWZyZXNoVG9rZW5Sb3RhdGlvbkdyYWNlUGVyaW9kJyxcbiAgJ3JlZnJlc2hUb2tlblZhbGlkaXR5JyxcbiAgJ3N1cHBvcnRlZElkZW50aXR5UHJvdmlkZXJzJyxcbiAgJ3VzZXJQb29sJyxcbiAgJ3VzZXJQb29sQ2xpZW50TmFtZScsXG4gICd3cml0ZUF0dHJpYnV0ZXMnXG5dKTtcblxuLy8gRHluYW1vRXZlbnRTb3VyY2VQcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlc1xuZXhwb3J0IGNvbnN0IHZhbGlkRHluYW1vRXZlbnRTb3VyY2VQcm9wczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgJ2JhdGNoU2l6ZScsXG4gICdiaXNlY3RCYXRjaE9uRXJyb3InLFxuICAnZW5hYmxlZCcsXG4gICdmaWx0ZXJFbmNyeXB0aW9uJyxcbiAgJ2ZpbHRlcnMnLFxuICAnbWF4QmF0Y2hpbmdXaW5kb3cnLFxuICAnbWF4UmVjb3JkQWdlJyxcbiAgJ21ldHJpY3NDb25maWcnLFxuICAnb25GYWlsdXJlJyxcbiAgJ3BhcmFsbGVsaXphdGlvbkZhY3RvcicsXG4gICdwcm92aXNpb25lZFBvbGxlckNvbmZpZycsXG4gICdyZXBvcnRCYXRjaEl0ZW1GYWlsdXJlcycsXG4gICdyZXRyeUF0dGVtcHRzJyxcbiAgJ3N0YXJ0aW5nUG9zaXRpb24nLFxuICAndHVtYmxpbmdXaW5kb3cnXG5dKTtcblxuLy8gQ2ZuUGlwZVByb3BzIGZyb20gYXdzLWNkay1saWIvYXdzLXBpcGVzXG5leHBvcnQgY29uc3QgdmFsaWRDZm5QaXBlUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdkZXNjcmlwdGlvbicsXG4gICdkZXNpcmVkU3RhdGUnLFxuICAnZW5yaWNobWVudCcsXG4gICdlbnJpY2htZW50UGFyYW1ldGVycycsXG4gICdrbXNLZXlJZGVudGlmaWVyJyxcbiAgJ2xvZ0NvbmZpZ3VyYXRpb24nLFxuICAnbmFtZScsXG4gICdyb2xlQXJuJyxcbiAgJ3NvdXJjZScsXG4gICdzb3VyY2VQYXJhbWV0ZXJzJyxcbiAgJ3RhZ3MnLFxuICAndGFyZ2V0JyxcbiAgJ3RhcmdldFBhcmFtZXRlcnMnXG5dKTtcblxuLy8gQ2ZuRGVsaXZlcnlTdHJlYW1Qcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1raW5lc2lzZmlyZWhvc2VcbmV4cG9ydCBjb25zdCB2YWxpZENmbkRlbGl2ZXJ5U3RyZWFtUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdhbWF6b25PcGVuU2VhcmNoU2VydmVybGVzc0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbicsXG4gICdhbWF6b25vcGVuc2VhcmNoc2VydmljZURlc3RpbmF0aW9uQ29uZmlndXJhdGlvbicsXG4gICdkYXRhYmFzZVNvdXJjZUNvbmZpZ3VyYXRpb24nLFxuICAnZGVsaXZlcnlTdHJlYW1FbmNyeXB0aW9uQ29uZmlndXJhdGlvbklucHV0JyxcbiAgJ2RlbGl2ZXJ5U3RyZWFtTmFtZScsXG4gICdkZWxpdmVyeVN0cmVhbVR5cGUnLFxuICAnZGlyZWN0UHV0U291cmNlQ29uZmlndXJhdGlvbicsXG4gICdlbGFzdGljc2VhcmNoRGVzdGluYXRpb25Db25maWd1cmF0aW9uJyxcbiAgJ2V4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAnaHR0cEVuZHBvaW50RGVzdGluYXRpb25Db25maWd1cmF0aW9uJyxcbiAgJ2ljZWJlcmdEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAna2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb24nLFxuICAnbXNrU291cmNlQ29uZmlndXJhdGlvbicsXG4gICdyZWRzaGlmdERlc3RpbmF0aW9uQ29uZmlndXJhdGlvbicsXG4gICdzM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbicsXG4gICdzbm93Zmxha2VEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAnc3BsdW5rRGVzdGluYXRpb25Db25maWd1cmF0aW9uJyxcbiAgJ3RhZ3MnXG5dKTtcblxuLy8gU3RyZWFtUHJvcHMgZnJvbSBhd3MtY2RrLWxpYi9hd3Mta2luZXNpc1xuZXhwb3J0IGNvbnN0IHZhbGlkU3RyZWFtUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdlbmNyeXB0aW9uJyxcbiAgJ2VuY3J5cHRpb25LZXknLFxuICAncmVtb3ZhbFBvbGljeScsXG4gICdyZXRlbnRpb25QZXJpb2QnLFxuICAnc2hhcmRDb3VudCcsXG4gICdzaGFyZExldmVsTWV0cmljcycsXG4gICdzdHJlYW1Nb2RlJyxcbiAgJ3N0cmVhbU5hbWUnXG5dKTtcblxuLy8gQ2ZuSm9iUHJvcHMgZnJvbSBhd3MtY2RrLWxpYi9hd3MtZ2x1ZVxuZXhwb3J0IGNvbnN0IHZhbGlkQ2ZuSm9iUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdhbGxvY2F0ZWRDYXBhY2l0eScsXG4gICdjb21tYW5kJyxcbiAgJ2Nvbm5lY3Rpb25zJyxcbiAgJ2RlZmF1bHRBcmd1bWVudHMnLFxuICAnZGVzY3JpcHRpb24nLFxuICAnZXhlY3V0aW9uQ2xhc3MnLFxuICAnZXhlY3V0aW9uUHJvcGVydHknLFxuICAnZ2x1ZVZlcnNpb24nLFxuICAnam9iTW9kZScsXG4gICdqb2JSdW5RdWV1aW5nRW5hYmxlZCcsXG4gICdsb2dVcmknLFxuICAnbWFpbnRlbmFuY2VXaW5kb3cnLFxuICAnbWF4Q2FwYWNpdHknLFxuICAnbWF4UmV0cmllcycsXG4gICduYW1lJyxcbiAgJ25vbk92ZXJyaWRhYmxlQXJndW1lbnRzJyxcbiAgJ25vdGlmaWNhdGlvblByb3BlcnR5JyxcbiAgJ251bWJlck9mV29ya2VycycsXG4gICdyb2xlJyxcbiAgJ3NlY3VyaXR5Q29uZmlndXJhdGlvbicsXG4gICd0YWdzJyxcbiAgJ3RpbWVvdXQnLFxuICAnd29ya2VyVHlwZSdcbl0pO1xuXG4vLyBLaW5lc2lzRXZlbnRTb3VyY2VQcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlc1xuZXhwb3J0IGNvbnN0IHZhbGlkS2luZXNpc0V2ZW50U291cmNlUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdiYXRjaFNpemUnLFxuICAnYmlzZWN0QmF0Y2hPbkVycm9yJyxcbiAgJ2VuYWJsZWQnLFxuICAnZmlsdGVyRW5jcnlwdGlvbicsXG4gICdmaWx0ZXJzJyxcbiAgJ21heEJhdGNoaW5nV2luZG93JyxcbiAgJ21heFJlY29yZEFnZScsXG4gICdtZXRyaWNzQ29uZmlnJyxcbiAgJ29uRmFpbHVyZScsXG4gICdwYXJhbGxlbGl6YXRpb25GYWN0b3InLFxuICAncHJvdmlzaW9uZWRQb2xsZXJDb25maWcnLFxuICAncmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXMnLFxuICAncmV0cnlBdHRlbXB0cycsXG4gICdzdGFydGluZ1Bvc2l0aW9uJyxcbiAgJ3N0YXJ0aW5nUG9zaXRpb25UaW1lc3RhbXAnLFxuICAndHVtYmxpbmdXaW5kb3cnXG5dKTtcblxuLy8gQ2ZuQ2FjaGVDbHVzdGVyUHJvcHMgZnJvbSBhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2FjaGVcbmV4cG9ydCBjb25zdCB2YWxpZENmbkNhY2hlQ2x1c3RlclByb3BzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnYXV0b01pbm9yVmVyc2lvblVwZ3JhZGUnLFxuICAnYXpNb2RlJyxcbiAgJ2NhY2hlTm9kZVR5cGUnLFxuICAnY2FjaGVQYXJhbWV0ZXJHcm91cE5hbWUnLFxuICAnY2FjaGVTZWN1cml0eUdyb3VwTmFtZXMnLFxuICAnY2FjaGVTdWJuZXRHcm91cE5hbWUnLFxuICAnY2x1c3Rlck5hbWUnLFxuICAnZW5naW5lJyxcbiAgJ2VuZ2luZVZlcnNpb24nLFxuICAnaXBEaXNjb3ZlcnknLFxuICAnbG9nRGVsaXZlcnlDb25maWd1cmF0aW9ucycsXG4gICduZXR3b3JrVHlwZScsXG4gICdub3RpZmljYXRpb25Ub3BpY0FybicsXG4gICdudW1DYWNoZU5vZGVzJyxcbiAgJ3BvcnQnLFxuICAncHJlZmVycmVkQXZhaWxhYmlsaXR5Wm9uZScsXG4gICdwcmVmZXJyZWRBdmFpbGFiaWxpdHlab25lcycsXG4gICdwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdycsXG4gICdzbmFwc2hvdEFybnMnLFxuICAnc25hcHNob3ROYW1lJyxcbiAgJ3NuYXBzaG90UmV0ZW50aW9uTGltaXQnLFxuICAnc25hcHNob3RXaW5kb3cnLFxuICAndGFncycsXG4gICd0cmFuc2l0RW5jcnlwdGlvbkVuYWJsZWQnLFxuICAndnBjU2VjdXJpdHlHcm91cElkcydcbl0pO1xuXG4vLyBDZm5JbmRleFByb3BzIGZyb20gYXdzLWNkay1saWIvYXdzLWtlbmRyYVxuZXhwb3J0IGNvbnN0IHZhbGlkQ2ZuSW5kZXhQcm9wczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgJ2NhcGFjaXR5VW5pdHMnLFxuICAnZGVzY3JpcHRpb24nLFxuICAnZG9jdW1lbnRNZXRhZGF0YUNvbmZpZ3VyYXRpb25zJyxcbiAgJ2VkaXRpb24nLFxuICAnbmFtZScsXG4gICdyb2xlQXJuJyxcbiAgJ3NlcnZlclNpZGVFbmNyeXB0aW9uQ29uZmlndXJhdGlvbicsXG4gICd0YWdzJyxcbiAgJ3VzZXJDb250ZXh0UG9saWN5JyxcbiAgJ3VzZXJUb2tlbkNvbmZpZ3VyYXRpb25zJ1xuXSk7XG5cbi8vIENmbkRhdGFTb3VyY2VQcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1rZW5kcmFcbmV4cG9ydCBjb25zdCB2YWxpZENmbkRhdGFTb3VyY2VQcm9wczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgJ2N1c3RvbURvY3VtZW50RW5yaWNobWVudENvbmZpZ3VyYXRpb24nLFxuICAnZGF0YVNvdXJjZUNvbmZpZ3VyYXRpb24nLFxuICAnZGVzY3JpcHRpb24nLFxuICAnaW5kZXhJZCcsXG4gICdsYW5ndWFnZUNvZGUnLFxuICAnbmFtZScsXG4gICdyb2xlQXJuJyxcbiAgJ3NjaGVkdWxlJyxcbiAgJ3RhZ3MnLFxuICAndHlwZSdcbl0pO1xuXG4vLyBLZXlQcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1rbXNcbmV4cG9ydCBjb25zdCB2YWxpZEtleVByb3BzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnYWRtaW5zJyxcbiAgJ2FsaWFzJyxcbiAgJ2Rlc2NyaXB0aW9uJyxcbiAgJ2VuYWJsZUtleVJvdGF0aW9uJyxcbiAgJ2VuYWJsZWQnLFxuICAna2V5U3BlYycsXG4gICdrZXlVc2FnZScsXG4gICdtdWx0aVJlZ2lvbicsXG4gICdwZW5kaW5nV2luZG93JyxcbiAgJ3BvbGljeScsXG4gICdyZW1vdmFsUG9saWN5JyxcbiAgJ3JvdGF0aW9uUGVyaW9kJ1xuXSk7XG5cbi8vIFZwY1Byb3BzIGZyb20gYXdzLWNkay1saWIvYXdzLWVjMlxuZXhwb3J0IGNvbnN0IHZhbGlkVnBjUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdhdmFpbGFiaWxpdHlab25lcycsXG4gICdjaWRyJyxcbiAgJ2NyZWF0ZUludGVybmV0R2F0ZXdheScsXG4gICdkZWZhdWx0SW5zdGFuY2VUZW5hbmN5JyxcbiAgJ2VuYWJsZURuc0hvc3RuYW1lcycsXG4gICdlbmFibGVEbnNTdXBwb3J0JyxcbiAgJ2Zsb3dMb2dzJyxcbiAgJ2dhdGV3YXlFbmRwb2ludHMnLFxuICAnaXBBZGRyZXNzZXMnLFxuICAnaXBQcm90b2NvbCcsXG4gICdpcHY2QWRkcmVzc2VzJyxcbiAgJ21heEF6cycsXG4gICduYXRHYXRld2F5UHJvdmlkZXInLFxuICAnbmF0R2F0ZXdheVN1Ym5ldHMnLFxuICAnbmF0R2F0ZXdheXMnLFxuICAncmVzZXJ2ZWRBenMnLFxuICAncmVzdHJpY3REZWZhdWx0U2VjdXJpdHlHcm91cCcsXG4gICdzdWJuZXRDb25maWd1cmF0aW9uJyxcbiAgJ3ZwY05hbWUnLFxuICAndnBuQ29ubmVjdGlvbnMnLFxuICAndnBuR2F0ZXdheScsXG4gICd2cG5HYXRld2F5QXNuJyxcbiAgJ3ZwblJvdXRlUHJvcGFnYXRpb24nXG5dKTtcblxuLy8gQ2ZuTW9kZWxQcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1zYWdlbWFrZXJcbmV4cG9ydCBjb25zdCB2YWxpZENmbk1vZGVsUHJvcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdjb250YWluZXJzJyxcbiAgJ2VuYWJsZU5ldHdvcmtJc29sYXRpb24nLFxuICAnZXhlY3V0aW9uUm9sZUFybicsXG4gICdpbmZlcmVuY2VFeGVjdXRpb25Db25maWcnLFxuICAnbW9kZWxOYW1lJyxcbiAgJ3ByaW1hcnlDb250YWluZXInLFxuICAndGFncycsXG4gICd2cGNDb25maWcnXG5dKTtcblxuLy8gUHJpdmF0ZUhvc3RlZFpvbmVQcm9wcyBmcm9tIGF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXG5leHBvcnQgY29uc3QgdmFsaWRQcml2YXRlSG9zdGVkWm9uZVByb3BzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnYWRkVHJhaWxpbmdEb3QnLFxuICAnY29tbWVudCcsXG4gICdxdWVyeUxvZ3NMb2dHcm91cEFybicsXG4gICd2cGMnLFxuICAnem9uZU5hbWUnXG5dKTtcblxuLy8gQ2ZuV2ViQUNMUHJvcHMgZnJvbSBhd3MtY2RrLWxpYi9hd3Mtd2FmdjJcbmV4cG9ydCBjb25zdCB2YWxpZENmbldlYkFDTFByb3BzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnYXBwbGljYXRpb25Db25maWcnLFxuICAnYXNzb2NpYXRpb25Db25maWcnLFxuICAnY2FwdGNoYUNvbmZpZycsXG4gICdjaGFsbGVuZ2VDb25maWcnLFxuICAnY3VzdG9tUmVzcG9uc2VCb2RpZXMnLFxuICAnZGF0YVByb3RlY3Rpb25Db25maWcnLFxuICAnZGVmYXVsdEFjdGlvbicsXG4gICdkZXNjcmlwdGlvbicsXG4gICduYW1lJyxcbiAgJ29uU291cmNlRERvU1Byb3RlY3Rpb25Db25maWcnLFxuICAncnVsZXMnLFxuICAnc2NvcGUnLFxuICAndGFncycsXG4gICd0b2tlbkRvbWFpbnMnLFxuICAndmlzaWJpbGl0eUNvbmZpZydcbl0pO1xuXG4vLyBTaGFyZWQgdmFsaWRhdGlvbiBpbXBsZW1lbnRhdGlvblxuLy8gU2NvcGUgaXMgcmVxdWlyZWQgZm9yIGZlYXR1cmUgZmxhZyBjaGVja2luZ1xuLy8gVGFyZ2V0IGNhbiBiZSB1bmRlZmluZWQgLSB2YWxpZGF0aW9uIGlzIHNraXBwZWQgaWYgdGFyZ2V0IGlzIHVuZGVmaW5lZFxuZXhwb3J0IGZ1bmN0aW9uIFZhbGlkYXRlUHJvcHMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0OiBhbnkgfCB1bmRlZmluZWQsIHZhbGlkUHJvcHM6IFNldDxzdHJpbmc+LCBwcm9wc1R5cGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgLy8gQ2hlY2sgaWYgdmFsaWRhdGlvbiBpcyBkaXNhYmxlZCB2aWEgZmVhdHVyZSBmbGFnXG4gIGlmIChjZGsuRmVhdHVyZUZsYWdzLm9mKHNjb3BlKS5pc0VuYWJsZWQoRElTQUJMRV9QUk9QRVJUWV9WQUxJREFUSU9OKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBpbiB0YXJnZXQpIHtcbiAgICBpZiAoIXZhbGlkUHJvcHMuaGFzKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRVJST1IgLSAke2tleX0gaXMgbm90IGEgdmFsaWQgcHJvcGVydHkgb2YgJHtwcm9wc1R5cGVOYW1lfWApO1xuICAgIH1cbiAgfVxufVxuXG4vLyBWYWxpZGF0aW9uIGZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIFZhbGlkYXRlQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJQcm9wcyhzY29wZTogQ29uc3RydWN0LCB0YXJnZXQ/OiBhbnkpOiB2b2lkIHtcbiAgVmFsaWRhdGVQcm9wcyhzY29wZSwgdGFyZ2V0LCB2YWxpZEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyUHJvcHMsICdBcHBsaWNhdGlvbkxvYWRCYWxhbmNlclByb3BzJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWYWxpZGF0ZUFwcGxpY2F0aW9uTGlzdGVuZXJQcm9wcyhzY29wZTogQ29uc3RydWN0LCB0YXJnZXQ/OiBhbnkpOiB2b2lkIHtcbiAgVmFsaWRhdGVQcm9wcyhzY29wZSwgdGFyZ2V0LCB2YWxpZEFwcGxpY2F0aW9uTGlzdGVuZXJQcm9wcywgJ0FwcGxpY2F0aW9uTGlzdGVuZXJQcm9wcycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVmFsaWRhdGVDb250YWluZXJEZWZpbml0aW9uUHJvcHMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0PzogYW55KTogdm9pZCB7XG4gIFZhbGlkYXRlUHJvcHMoc2NvcGUsIHRhcmdldCwgdmFsaWRDb250YWluZXJEZWZpbml0aW9uUHJvcHMsICdDb250YWluZXJEZWZpbml0aW9uUHJvcHMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFZhbGlkYXRlRmFyZ2F0ZVRhc2tEZWZpbml0aW9uUHJvcHMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0PzogYW55KTogdm9pZCB7XG4gIFZhbGlkYXRlUHJvcHMoc2NvcGUsIHRhcmdldCwgdmFsaWRGYXJnYXRlVGFza0RlZmluaXRpb25Qcm9wcywgJ0ZhcmdhdGVUYXNrRGVmaW5pdGlvblByb3BzJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWYWxpZGF0ZUZhcmdhdGVTZXJ2aWNlUHJvcHMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0PzogYW55KTogdm9pZCB7XG4gIFZhbGlkYXRlUHJvcHMoc2NvcGUsIHRhcmdldCwgdmFsaWRGYXJnYXRlU2VydmljZVByb3BzLCAnRmFyZ2F0ZVNlcnZpY2VQcm9wcycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVmFsaWRhdGVMYW1iZGFSZXN0QXBpUHJvcHMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0PzogYW55KTogdm9pZCB7XG4gIFZhbGlkYXRlUHJvcHMoc2NvcGUsIHRhcmdldCwgdmFsaWRMYW1iZGFSZXN0QXBpUHJvcHMsICdMYW1iZGFSZXN0QXBpUHJvcHMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFZhbGlkYXRlUmVzdEFwaVByb3BzKHNjb3BlOiBDb25zdHJ1Y3QsIHRhcmdldD86IGFueSk6IHZvaWQge1xuICBWYWxpZGF0ZVByb3BzKHNjb3BlLCB0YXJnZXQsIHZhbGlkUmVzdEFwaVByb3BzLCAnUmVzdEFwaVByb3BzJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWYWxpZGF0ZURpc3RyaWJ1dGlvblByb3BzKHNjb3BlOiBDb25zdHJ1Y3QsIHRhcmdldD86IGFueSk6IHZvaWQge1xuICBWYWxpZGF0ZVByb3BzKHNjb3BlLCB0YXJnZXQsIHZhbGlkRGlzdHJpYnV0aW9uUHJvcHMsICdEaXN0cmlidXRpb25Qcm9wcycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVmFsaWRhdGVVc2VyUG9vbENsaWVudFByb3BzKHNjb3BlOiBDb25zdHJ1Y3QsIHRhcmdldD86IGFueSk6IHZvaWQge1xuICBWYWxpZGF0ZVByb3BzKHNjb3BlLCB0YXJnZXQsIHZhbGlkVXNlclBvb2xDbGllbnRQcm9wcywgJ1VzZXJQb29sQ2xpZW50UHJvcHMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFZhbGlkYXRlRHluYW1vRXZlbnRTb3VyY2VQcm9wcyhzY29wZTogQ29uc3RydWN0LCB0YXJnZXQ/OiBhbnkpOiB2b2lkIHtcbiAgVmFsaWRhdGVQcm9wcyhzY29wZSwgdGFyZ2V0LCB2YWxpZER5bmFtb0V2ZW50U291cmNlUHJvcHMsICdEeW5hbW9FdmVudFNvdXJjZVByb3BzJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWYWxpZGF0ZUNmblBpcGVQcm9wcyhzY29wZTogQ29uc3RydWN0LCB0YXJnZXQ/OiBhbnkpOiB2b2lkIHtcbiAgVmFsaWRhdGVQcm9wcyhzY29wZSwgdGFyZ2V0LCB2YWxpZENmblBpcGVQcm9wcywgJ0NmblBpcGVQcm9wcycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVmFsaWRhdGVDZm5EZWxpdmVyeVN0cmVhbVByb3BzKHNjb3BlOiBDb25zdHJ1Y3QsIHRhcmdldD86IGFueSk6IHZvaWQge1xuICBWYWxpZGF0ZVByb3BzKHNjb3BlLCB0YXJnZXQsIHZhbGlkQ2ZuRGVsaXZlcnlTdHJlYW1Qcm9wcywgJ0NmbkRlbGl2ZXJ5U3RyZWFtUHJvcHMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFZhbGlkYXRlU3RyZWFtUHJvcHMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0PzogYW55KTogdm9pZCB7XG4gIFZhbGlkYXRlUHJvcHMoc2NvcGUsIHRhcmdldCwgdmFsaWRTdHJlYW1Qcm9wcywgJ1N0cmVhbVByb3BzJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWYWxpZGF0ZUNmbkpvYlByb3BzKHNjb3BlOiBDb25zdHJ1Y3QsIHRhcmdldD86IGFueSk6IHZvaWQge1xuICBWYWxpZGF0ZVByb3BzKHNjb3BlLCB0YXJnZXQsIHZhbGlkQ2ZuSm9iUHJvcHMsICdDZm5Kb2JQcm9wcycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVmFsaWRhdGVLaW5lc2lzRXZlbnRTb3VyY2VQcm9wcyhzY29wZTogQ29uc3RydWN0LCB0YXJnZXQ/OiBhbnkpOiB2b2lkIHtcbiAgVmFsaWRhdGVQcm9wcyhzY29wZSwgdGFyZ2V0LCB2YWxpZEtpbmVzaXNFdmVudFNvdXJjZVByb3BzLCAnS2luZXNpc0V2ZW50U291cmNlUHJvcHMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFZhbGlkYXRlQ2ZuQ2FjaGVDbHVzdGVyUHJvcHMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0PzogYW55KTogdm9pZCB7XG4gIFZhbGlkYXRlUHJvcHMoc2NvcGUsIHRhcmdldCwgdmFsaWRDZm5DYWNoZUNsdXN0ZXJQcm9wcywgJ0NmbkNhY2hlQ2x1c3RlclByb3BzJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWYWxpZGF0ZUNmbkluZGV4UHJvcHMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0PzogYW55KTogdm9pZCB7XG4gIFZhbGlkYXRlUHJvcHMoc2NvcGUsIHRhcmdldCwgdmFsaWRDZm5JbmRleFByb3BzLCAnQ2ZuSW5kZXhQcm9wcycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVmFsaWRhdGVDZm5EYXRhU291cmNlUHJvcHMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0PzogYW55KTogdm9pZCB7XG4gIFZhbGlkYXRlUHJvcHMoc2NvcGUsIHRhcmdldCwgdmFsaWRDZm5EYXRhU291cmNlUHJvcHMsICdDZm5EYXRhU291cmNlUHJvcHMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFZhbGlkYXRlS2V5UHJvcHMoc2NvcGU6IENvbnN0cnVjdCwgdGFyZ2V0PzogYW55KTogdm9pZCB7XG4gIFZhbGlkYXRlUHJvcHMoc2NvcGUsIHRhcmdldCwgdmFsaWRLZXlQcm9wcywgJ0tleVByb3BzJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWYWxpZGF0ZVZwY1Byb3BzKHNjb3BlOiBDb25zdHJ1Y3QsIHRhcmdldD86IGFueSk6IHZvaWQge1xuICBWYWxpZGF0ZVByb3BzKHNjb3BlLCB0YXJnZXQsIHZhbGlkVnBjUHJvcHMsICdWcGNQcm9wcycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVmFsaWRhdGVDZm5Nb2RlbFByb3BzKHNjb3BlOiBDb25zdHJ1Y3QsIHRhcmdldD86IGFueSk6IHZvaWQge1xuICBWYWxpZGF0ZVByb3BzKHNjb3BlLCB0YXJnZXQsIHZhbGlkQ2ZuTW9kZWxQcm9wcywgJ0Nmbk1vZGVsUHJvcHMnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFZhbGlkYXRlUHJpdmF0ZUhvc3RlZFpvbmVQcm9wcyhzY29wZTogQ29uc3RydWN0LCB0YXJnZXQ/OiBhbnkpOiB2b2lkIHtcbiAgVmFsaWRhdGVQcm9wcyhzY29wZSwgdGFyZ2V0LCB2YWxpZFByaXZhdGVIb3N0ZWRab25lUHJvcHMsICdQcml2YXRlSG9zdGVkWm9uZVByb3BzJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWYWxpZGF0ZUNmbldlYkFDTFByb3BzKHNjb3BlOiBDb25zdHJ1Y3QsIHRhcmdldD86IGFueSk6IHZvaWQge1xuICBWYWxpZGF0ZVByb3BzKHNjb3BlLCB0YXJnZXQsIHZhbGlkQ2ZuV2ViQUNMUHJvcHMsICdDZm5XZWJBQ0xQcm9wcycpO1xufVxuIl19
package/nohoist.sh CHANGED
@@ -4,7 +4,12 @@ deepmerge
4
4
  npmlog
5
5
  "
6
6
 
7
- mkdir node_modules
7
+ if [ ! -d "node_modules" ]; then
8
+ echo "Error: node_modules folder does not exist."
9
+ echo "deployment/v2/bootstrap.sh must be run before this script"
10
+ exit 1
11
+ fi
12
+
8
13
  for package in $packagess; do
9
14
  echo "Installing $package"
10
15
  cp -r ../../../node_modules/$package ./node_modules/