aws-cdk 2.1020.2 → 2.1022.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 +100 -55
- package/THIRD_PARTY_LICENSES +65 -65
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/api/refactor.d.ts +1 -0
- package/lib/api/refactor.js +8 -0
- package/lib/cli/cdk-toolkit.d.ts +19 -21
- package/lib/cli/cdk-toolkit.js +145 -141
- package/lib/cli/cli-config.js +19 -13
- package/lib/cli/cli-type-registry.json +29 -12
- package/lib/cli/cli.js +76 -22
- package/lib/cli/convert-to-user-input.js +16 -6
- package/lib/cli/display-version.d.ts +11 -0
- package/lib/cli/display-version.js +101 -0
- package/lib/cli/io-host/cli-io-host.d.ts +11 -11
- package/lib/cli/io-host/cli-io-host.js +68 -24
- package/lib/cli/parse-command-line-arguments.js +29 -11
- package/lib/cli/platform-warnings.d.ts +2 -1
- package/lib/cli/platform-warnings.js +3 -4
- package/lib/cli/telemetry/collect-telemetry.d.ts +5 -0
- package/lib/cli/telemetry/collect-telemetry.js +15 -0
- package/lib/cli/telemetry/endpoint-sink.d.ts +1 -2
- package/lib/cli/telemetry/endpoint-sink.js +4 -3
- package/lib/cli/telemetry/error.d.ts +2 -0
- package/lib/cli/telemetry/error.js +16 -0
- package/lib/cli/telemetry/feature-flags.d.ts +96 -0
- package/lib/cli/telemetry/feature-flags.js +103 -0
- package/lib/cli/telemetry/file-sink.js +8 -12
- package/lib/cli/telemetry/installation-id.d.ts +5 -0
- package/lib/cli/telemetry/installation-id.js +47 -0
- package/lib/cli/telemetry/library-version.d.ts +2 -0
- package/lib/cli/telemetry/library-version.js +30 -0
- package/lib/cli/telemetry/messages.d.ts +40 -0
- package/lib/cli/telemetry/messages.js +65 -0
- package/lib/cli/telemetry/sanitation.d.ts +100 -0
- package/lib/cli/telemetry/sanitation.js +79 -0
- package/lib/cli/telemetry/schema.d.ts +47 -19
- package/lib/cli/telemetry/schema.js +10 -1
- package/lib/cli/telemetry/session.d.ts +33 -0
- package/lib/cli/telemetry/session.js +130 -0
- package/lib/cli/user-configuration.d.ts +14 -4
- package/lib/cli/user-configuration.js +42 -30
- package/lib/cli/user-input.d.ts +31 -13
- package/lib/cli/user-input.js +1 -1
- package/lib/cli/util/ci.d.ts +5 -0
- package/lib/cli/util/ci.js +11 -0
- package/lib/cli/util/yargs-helpers.d.ts +1 -1
- package/lib/cli/util/yargs-helpers.js +7 -7
- package/lib/cli/version.d.ts +2 -12
- package/lib/cli/version.js +5 -103
- package/lib/commands/context.d.ts +10 -5
- package/lib/commands/context.js +35 -35
- package/lib/commands/docs.d.ts +6 -1
- package/lib/commands/docs.js +20 -19
- package/lib/commands/doctor.d.ts +4 -1
- package/lib/commands/doctor.js +17 -17
- package/lib/commands/flags.d.ts +3 -0
- package/lib/commands/flags.js +43 -0
- package/lib/commands/init/init-hooks.d.ts +2 -1
- package/lib/commands/init/init-hooks.js +6 -6
- package/lib/commands/init/init.d.ts +4 -2
- package/lib/commands/init/init.js +56 -54
- package/lib/commands/init/os.d.ts +2 -1
- package/lib/commands/init/os.js +3 -4
- package/lib/commands/list-stacks.js +8 -2
- package/lib/commands/migrate.d.ts +6 -17
- package/lib/commands/migrate.js +28 -29
- package/lib/cxapp/cloud-assembly.js +1 -1
- package/lib/cxapp/cloud-executable.js +41 -26
- package/lib/index.d.ts +1 -1
- package/lib/index.js +46764 -31086
- package/lib/index_bg.wasm +0 -0
- package/lib/init-templates/.init-version.json +1 -1
- package/lib/init-templates/.recommended-feature-flags.json +1 -0
- package/lib/{legacy-aws-auth.d.ts → legacy/aws-auth.d.ts} +1 -1
- package/lib/legacy/aws-auth.js +47 -0
- package/lib/legacy/configuration.d.ts +82 -0
- package/lib/legacy/configuration.js +321 -0
- package/lib/legacy/index.d.ts +19 -0
- package/lib/{legacy-exports-source.js → legacy/index.js} +23 -23
- package/lib/{legacy-logging-source.d.ts → legacy/logging.d.ts} +50 -0
- package/lib/legacy/logging.js +154 -0
- package/lib/legacy/types.js +3 -0
- package/lib/legacy-exports.d.ts +4 -3
- package/lib/legacy-exports.js +4 -1
- package/package.json +15 -15
- package/lib/legacy-aws-auth.js +0 -47
- package/lib/legacy-exports-source.d.ts +0 -18
- package/lib/legacy-logging-source.js +0 -107
- package/lib/legacy-types.js +0 -3
- package/lib/logging.d.ts +0 -99
- package/lib/logging.js +0 -146
- /package/lib/{legacy-types.d.ts → legacy/types.d.ts} +0 -0
package/lib/index_bg.wasm
CHANGED
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"aws-cdk-lib": "2.
|
|
1
|
+
{"aws-cdk-lib": "2.206.0", "constructs": "^10.0.0"}
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": true,
|
|
52
52
|
"@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault": false,
|
|
53
53
|
"@aws-cdk/aws-s3:keepNotificationInImportedBucket": false,
|
|
54
|
+
"@aws-cdk/core:explicitStackTags": true,
|
|
54
55
|
"@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature": false,
|
|
55
56
|
"@aws-cdk/aws-ecs:disableEcsImdsBlocking": true,
|
|
56
57
|
"@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions": true,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AwsCredentialIdentityProvider, Logger, NodeHttpHandlerOptions } from '@smithy/types';
|
|
2
|
-
import { SdkProvider as SdkProviderCurrentVersion } from '
|
|
2
|
+
import { SdkProvider as SdkProviderCurrentVersion } from '../api/aws-auth';
|
|
3
3
|
/**
|
|
4
4
|
* @deprecated
|
|
5
5
|
*/
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SdkProvider = void 0;
|
|
4
|
+
exports.cached = cached;
|
|
5
|
+
exports.enableTracing = enableTracing;
|
|
6
|
+
const aws_auth_1 = require("../api/aws-auth");
|
|
7
|
+
const io_host_1 = require("../cli/io-host");
|
|
8
|
+
const singleton_plugin_host_1 = require("../cli/singleton-plugin-host");
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated
|
|
11
|
+
*/
|
|
12
|
+
function cached(obj, sym, fn) {
|
|
13
|
+
if (!(sym in obj)) {
|
|
14
|
+
obj[sym] = fn();
|
|
15
|
+
}
|
|
16
|
+
return obj[sym];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Enable tracing in the CDK
|
|
20
|
+
*
|
|
21
|
+
* @deprecated cannot be enabled from outside the CDK
|
|
22
|
+
*/
|
|
23
|
+
function enableTracing(_enabled) {
|
|
24
|
+
// noop
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated
|
|
28
|
+
*/
|
|
29
|
+
class SdkProvider {
|
|
30
|
+
static async withAwsCliCompatibleDefaults(options = {}) {
|
|
31
|
+
return aws_auth_1.SdkProvider.withAwsCliCompatibleDefaults({
|
|
32
|
+
...options,
|
|
33
|
+
ioHelper: io_host_1.CliIoHost.instance().asIoHelper(),
|
|
34
|
+
pluginHost: singleton_plugin_host_1.GLOBAL_PLUGIN_HOST,
|
|
35
|
+
}, options.profile);
|
|
36
|
+
}
|
|
37
|
+
constructor(defaultCredentialProvider, defaultRegion, requestHandler = {}, logger) {
|
|
38
|
+
return new aws_auth_1.SdkProvider(defaultCredentialProvider, defaultRegion, {
|
|
39
|
+
pluginHost: singleton_plugin_host_1.GLOBAL_PLUGIN_HOST,
|
|
40
|
+
ioHelper: io_host_1.CliIoHost.instance().asIoHelper(),
|
|
41
|
+
requestHandler: requestHandler, // this is fine it's passed through to the SDK
|
|
42
|
+
logger,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.SdkProvider = SdkProvider;
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWF1dGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnQkEsd0JBS0M7QUF1QkQsc0NBRUM7QUFyQ0QsOENBQTJFO0FBQzNFLDRDQUEyQztBQUMzQyx3RUFBa0U7QUFFbEU7O0dBRUc7QUFDSCxTQUFnQixNQUFNLENBQXNCLEdBQU0sRUFBRSxHQUFXLEVBQUUsRUFBVztJQUMxRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQixHQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUNELE9BQVEsR0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFrQkQ7Ozs7R0FJRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxRQUFpQjtJQUM3QyxPQUFPO0FBQ1QsQ0FBQztBQTZDRDs7R0FFRztBQUNILE1BQWEsV0FBVztJQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsVUFBOEIsRUFBRTtRQUMvRSxPQUFPLHNCQUF5QixDQUFDLDRCQUE0QixDQUFDO1lBQzVELEdBQUcsT0FBTztZQUNWLFFBQVEsRUFBRSxtQkFBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUMzQyxVQUFVLEVBQUUsMENBQWtCO1NBQy9CLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxZQUNFLHlCQUF3RCxFQUN4RCxhQUFxQixFQUNyQixpQkFBeUMsRUFBRSxFQUMzQyxNQUFlO1FBRWYsT0FBTyxJQUFJLHNCQUF5QixDQUFDLHlCQUF5QixFQUFFLGFBQWEsRUFBRTtZQUM3RSxVQUFVLEVBQUUsMENBQWtCO1lBQzlCLFFBQVEsRUFBRSxtQkFBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUMzQyxjQUFjLEVBQUUsY0FBcUIsRUFBRSw4Q0FBOEM7WUFDckYsTUFBTTtTQUNQLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXRCRCxrQ0FzQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGlzIGEgbGVnYWN5IHdyYXBwZXIgZm9yIGNvZGUgZnJvbSB0aGUgYXdzLWF1dGggdGhhdCB3ZSB3YW50IHRvIGtlZXAgdGhlIHNpZ25hdHVyZXMgaW50YWN0XG4vLyBXZSBnZW5lcmFsbHkgdXNlIHR3byBkaWZmZXJlbnQgcGF0dGVybnMgaGVyZTpcbi8vIC0gbWFrZSBhIGNvcHkgb2YgdGhlIG9sZCBjb2RlIGFzIGlzXG4vLyAtIHdyYXAgdGhlIG9sZCBjb2RlIGFuZCBhZGQgYSBkZXByZWNhdGlvbiB3YXJuaW5nXG4vLyAtIG1ha2UgYSBuby1vcCBjb3B5IHRoYXQgcHJlc2VydmVzIHRoZSBwcmV2aW91cyBpbnRlcmZhY2UgYnV0IGRvZXNuJ3QgZG8gYW55dGhpbmdcbi8vIFRoaXMgd2F5IHdlIGNhbiBrZWVwIHRoZSBvbGQgY29kZSBydW5uaW5nIHVudGlsIHRoZSBuZXcgY29kZSBpcyBmdWxseSByZWFkeVxuLy8gYW5kIGNhbiBiZSB1c2VkIGJ5IHRoZSB1c2VycyB0aGF0IGFyZSByZWFkeSB0byBtaWdyYXRlXG4vLyBUaGUgb2xkIGNvZGUgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgYXdzLWNka1xuaW1wb3J0IHR5cGUgeyBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlciwgTG9nZ2VyLCBOb2RlSHR0cEhhbmRsZXJPcHRpb25zIH0gZnJvbSAnQHNtaXRoeS90eXBlcyc7XG5pbXBvcnQgeyBTZGtQcm92aWRlciBhcyBTZGtQcm92aWRlckN1cnJlbnRWZXJzaW9uIH0gZnJvbSAnLi4vYXBpL2F3cy1hdXRoJztcbmltcG9ydCB7IENsaUlvSG9zdCB9IGZyb20gJy4uL2NsaS9pby1ob3N0JztcbmltcG9ydCB7IEdMT0JBTF9QTFVHSU5fSE9TVCB9IGZyb20gJy4uL2NsaS9zaW5nbGV0b24tcGx1Z2luLWhvc3QnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZWQ8QSBleHRlbmRzIG9iamVjdCwgQj4ob2JqOiBBLCBzeW06IHN5bWJvbCwgZm46ICgpID0+IEIpOiBCIHtcbiAgaWYgKCEoc3ltIGluIG9iaikpIHtcbiAgICAob2JqIGFzIGFueSlbc3ltXSA9IGZuKCk7XG4gIH1cbiAgcmV0dXJuIChvYmogYXMgYW55KVtzeW1dO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dFByb3ZpZGVyUGx1Z2luIHtcbiAgZ2V0VmFsdWUoYXJnczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IFByb21pc2U8YW55Pjtcbn1cblxuLyoqXG4gKiBBbiBBV1MgYWNjb3VudFxuICogQGRlcHJlY2F0ZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50IHtcbiAgcmVhZG9ubHkgYWNjb3VudElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuYWJsZSB0cmFjaW5nIGluIHRoZSBDREtcbiAqXG4gKiBAZGVwcmVjYXRlZCBjYW5ub3QgYmUgZW5hYmxlZCBmcm9tIG91dHNpZGUgdGhlIENES1xuICovXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlVHJhY2luZyhfZW5hYmxlZDogYm9vbGVhbikge1xuICAvLyBub29wXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgaW5kaXZpZHVhbCBTREtzXG4gKiBAZGVwcmVjYXRlZFxuICovXG5pbnRlcmZhY2UgU2RrSHR0cE9wdGlvbnMge1xuICAvKipcbiAgICogUHJveHkgYWRkcmVzcyB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gcHJveHlcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5QWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwYXRoIHRvIGEgY2VydGlmaWNhdGUgYnVuZGxlIHRoYXQgY29udGFpbnMgYSBjZXJ0IHRvIGJlIHRydXN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGNlcnRpZmljYXRlIGJ1bmRsZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FCdW5kbGVQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBkZWZhdWx0IFNESyBwcm92aWRlclxuICogQGRlcHJlY2F0ZWRcbiAqL1xuaW50ZXJmYWNlIFNka1Byb3ZpZGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQcm9maWxlIHRvIHJlYWQgZnJvbSB+Ly5hd3NcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwcm9maWxlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIVFRQIG9wdGlvbnMgZm9yIFNES1xuICAgKi9cbiAgcmVhZG9ubHkgaHR0cE9wdGlvbnM/OiBTZGtIdHRwT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIGxvZ2dlciBmb3Igc2RrIGNhbGxzLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBTZGtQcm92aWRlciB7XG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgd2l0aEF3c0NsaUNvbXBhdGlibGVEZWZhdWx0cyhvcHRpb25zOiBTZGtQcm92aWRlck9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBTZGtQcm92aWRlckN1cnJlbnRWZXJzaW9uLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGlvSGVscGVyOiBDbGlJb0hvc3QuaW5zdGFuY2UoKS5hc0lvSGVscGVyKCksXG4gICAgICBwbHVnaW5Ib3N0OiBHTE9CQUxfUExVR0lOX0hPU1QsXG4gICAgfSwgb3B0aW9ucy5wcm9maWxlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBkZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyOiBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlcixcbiAgICBkZWZhdWx0UmVnaW9uOiBzdHJpbmcsXG4gICAgcmVxdWVzdEhhbmRsZXI6IE5vZGVIdHRwSGFuZGxlck9wdGlvbnMgPSB7fSxcbiAgICBsb2dnZXI/OiBMb2dnZXIsXG4gICkge1xuICAgIHJldHVybiBuZXcgU2RrUHJvdmlkZXJDdXJyZW50VmVyc2lvbihkZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyLCBkZWZhdWx0UmVnaW9uLCB7XG4gICAgICBwbHVnaW5Ib3N0OiBHTE9CQUxfUExVR0lOX0hPU1QsXG4gICAgICBpb0hlbHBlcjogQ2xpSW9Ib3N0Lmluc3RhbmNlKCkuYXNJb0hlbHBlcigpLFxuICAgICAgcmVxdWVzdEhhbmRsZXI6IHJlcXVlc3RIYW5kbGVyIGFzIGFueSwgLy8gdGhpcyBpcyBmaW5lIGl0J3MgcGFzc2VkIHRocm91Z2ggdG8gdGhlIFNES1xuICAgICAgbG9nZ2VyLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Context } from '../api/context';
|
|
2
|
+
import { Settings } from '../api/settings';
|
|
3
|
+
export declare const PROJECT_CONTEXT = "cdk.context.json";
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated
|
|
6
|
+
*/
|
|
7
|
+
export declare enum Command {
|
|
8
|
+
LS = "ls",
|
|
9
|
+
LIST = "list",
|
|
10
|
+
DIFF = "diff",
|
|
11
|
+
BOOTSTRAP = "bootstrap",
|
|
12
|
+
DEPLOY = "deploy",
|
|
13
|
+
DESTROY = "destroy",
|
|
14
|
+
SYNTHESIZE = "synthesize",
|
|
15
|
+
SYNTH = "synth",
|
|
16
|
+
METADATA = "metadata",
|
|
17
|
+
INIT = "init",
|
|
18
|
+
VERSION = "version",
|
|
19
|
+
WATCH = "watch",
|
|
20
|
+
GC = "gc",
|
|
21
|
+
ROLLBACK = "rollback",
|
|
22
|
+
IMPORT = "import",
|
|
23
|
+
ACKNOWLEDGE = "acknowledge",
|
|
24
|
+
ACK = "ack",
|
|
25
|
+
NOTICES = "notices",
|
|
26
|
+
MIGRATE = "migrate",
|
|
27
|
+
CONTEXT = "context",
|
|
28
|
+
DOCS = "docs",
|
|
29
|
+
DOC = "doc",
|
|
30
|
+
DOCTOR = "doctor",
|
|
31
|
+
REFACTOR = "refactor",
|
|
32
|
+
DRIFT = "drift",
|
|
33
|
+
CLI_TELEMETRY = "cli-telemetry"
|
|
34
|
+
}
|
|
35
|
+
type Arguments = {
|
|
36
|
+
readonly _: [Command, ...string[]];
|
|
37
|
+
readonly exclusively?: boolean;
|
|
38
|
+
readonly STACKS?: string[];
|
|
39
|
+
readonly lookups?: boolean;
|
|
40
|
+
readonly [name: string]: unknown;
|
|
41
|
+
};
|
|
42
|
+
interface ConfigurationProps {
|
|
43
|
+
/**
|
|
44
|
+
* Configuration passed via command line arguments
|
|
45
|
+
*
|
|
46
|
+
* @default - Nothing passed
|
|
47
|
+
*/
|
|
48
|
+
readonly commandLineArguments?: Arguments;
|
|
49
|
+
/**
|
|
50
|
+
* Whether or not to use context from `.cdk.json` in user home directory
|
|
51
|
+
*
|
|
52
|
+
* @default true
|
|
53
|
+
*/
|
|
54
|
+
readonly readUserContext?: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* All sources of settings combined
|
|
58
|
+
* @deprecated
|
|
59
|
+
*/
|
|
60
|
+
export declare class Configuration {
|
|
61
|
+
private readonly props;
|
|
62
|
+
settings: Settings;
|
|
63
|
+
context: Context;
|
|
64
|
+
readonly defaultConfig: Settings;
|
|
65
|
+
private readonly commandLineArguments;
|
|
66
|
+
private readonly commandLineContext;
|
|
67
|
+
private _projectConfig?;
|
|
68
|
+
private _projectContext?;
|
|
69
|
+
private loaded;
|
|
70
|
+
constructor(props?: ConfigurationProps);
|
|
71
|
+
private get projectConfig();
|
|
72
|
+
get projectContext(): Settings;
|
|
73
|
+
/**
|
|
74
|
+
* Load all config
|
|
75
|
+
*/
|
|
76
|
+
load(): Promise<this>;
|
|
77
|
+
/**
|
|
78
|
+
* Save the project context
|
|
79
|
+
*/
|
|
80
|
+
saveContext(): Promise<this>;
|
|
81
|
+
}
|
|
82
|
+
export {};
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Configuration = exports.Command = exports.PROJECT_CONTEXT = void 0;
|
|
4
|
+
const os = require("os");
|
|
5
|
+
const fs_path = require("path");
|
|
6
|
+
const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
|
|
7
|
+
const fs = require("fs-extra");
|
|
8
|
+
const logging_1 = require("./logging");
|
|
9
|
+
const context_1 = require("../api/context");
|
|
10
|
+
const settings_1 = require("../api/settings");
|
|
11
|
+
exports.PROJECT_CONTEXT = 'cdk.context.json';
|
|
12
|
+
const PROJECT_CONFIG = 'cdk.json';
|
|
13
|
+
const USER_DEFAULTS = '~/.cdk.json';
|
|
14
|
+
const CONTEXT_KEY = 'context';
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated
|
|
17
|
+
*/
|
|
18
|
+
var Command;
|
|
19
|
+
(function (Command) {
|
|
20
|
+
Command["LS"] = "ls";
|
|
21
|
+
Command["LIST"] = "list";
|
|
22
|
+
Command["DIFF"] = "diff";
|
|
23
|
+
Command["BOOTSTRAP"] = "bootstrap";
|
|
24
|
+
Command["DEPLOY"] = "deploy";
|
|
25
|
+
Command["DESTROY"] = "destroy";
|
|
26
|
+
Command["SYNTHESIZE"] = "synthesize";
|
|
27
|
+
Command["SYNTH"] = "synth";
|
|
28
|
+
Command["METADATA"] = "metadata";
|
|
29
|
+
Command["INIT"] = "init";
|
|
30
|
+
Command["VERSION"] = "version";
|
|
31
|
+
Command["WATCH"] = "watch";
|
|
32
|
+
Command["GC"] = "gc";
|
|
33
|
+
Command["ROLLBACK"] = "rollback";
|
|
34
|
+
Command["IMPORT"] = "import";
|
|
35
|
+
Command["ACKNOWLEDGE"] = "acknowledge";
|
|
36
|
+
Command["ACK"] = "ack";
|
|
37
|
+
Command["NOTICES"] = "notices";
|
|
38
|
+
Command["MIGRATE"] = "migrate";
|
|
39
|
+
Command["CONTEXT"] = "context";
|
|
40
|
+
Command["DOCS"] = "docs";
|
|
41
|
+
Command["DOC"] = "doc";
|
|
42
|
+
Command["DOCTOR"] = "doctor";
|
|
43
|
+
Command["REFACTOR"] = "refactor";
|
|
44
|
+
Command["DRIFT"] = "drift";
|
|
45
|
+
Command["CLI_TELEMETRY"] = "cli-telemetry";
|
|
46
|
+
})(Command || (exports.Command = Command = {}));
|
|
47
|
+
const BUNDLING_COMMANDS = [
|
|
48
|
+
Command.DEPLOY,
|
|
49
|
+
Command.DIFF,
|
|
50
|
+
Command.SYNTH,
|
|
51
|
+
Command.SYNTHESIZE,
|
|
52
|
+
Command.WATCH,
|
|
53
|
+
Command.IMPORT,
|
|
54
|
+
];
|
|
55
|
+
/**
|
|
56
|
+
* All sources of settings combined
|
|
57
|
+
* @deprecated
|
|
58
|
+
*/
|
|
59
|
+
class Configuration {
|
|
60
|
+
constructor(props = {}) {
|
|
61
|
+
this.props = props;
|
|
62
|
+
this.settings = new settings_1.Settings();
|
|
63
|
+
this.context = new context_1.Context();
|
|
64
|
+
this.defaultConfig = new settings_1.Settings({
|
|
65
|
+
versionReporting: true,
|
|
66
|
+
assetMetadata: true,
|
|
67
|
+
pathMetadata: true,
|
|
68
|
+
output: 'cdk.out',
|
|
69
|
+
});
|
|
70
|
+
this.loaded = false;
|
|
71
|
+
this.commandLineArguments = props.commandLineArguments
|
|
72
|
+
? commandLineArgumentsToSettings(props.commandLineArguments)
|
|
73
|
+
: new settings_1.Settings();
|
|
74
|
+
this.commandLineContext = this.commandLineArguments
|
|
75
|
+
.subSettings([CONTEXT_KEY])
|
|
76
|
+
.makeReadOnly();
|
|
77
|
+
}
|
|
78
|
+
get projectConfig() {
|
|
79
|
+
if (!this._projectConfig) {
|
|
80
|
+
throw new toolkit_lib_1.ToolkitError('#load has not been called yet!');
|
|
81
|
+
}
|
|
82
|
+
return this._projectConfig;
|
|
83
|
+
}
|
|
84
|
+
get projectContext() {
|
|
85
|
+
if (!this._projectContext) {
|
|
86
|
+
throw new toolkit_lib_1.ToolkitError('#load has not been called yet!');
|
|
87
|
+
}
|
|
88
|
+
return this._projectContext;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Load all config
|
|
92
|
+
*/
|
|
93
|
+
async load() {
|
|
94
|
+
const userConfig = await loadAndLog(USER_DEFAULTS);
|
|
95
|
+
this._projectConfig = await loadAndLog(PROJECT_CONFIG);
|
|
96
|
+
this._projectContext = await loadAndLog(exports.PROJECT_CONTEXT);
|
|
97
|
+
// @todo cannot currently be disabled by cli users
|
|
98
|
+
const readUserContext = this.props.readUserContext ?? true;
|
|
99
|
+
if (userConfig.get(['build'])) {
|
|
100
|
+
throw new toolkit_lib_1.ToolkitError('The `build` key cannot be specified in the user config (~/.cdk.json), specify it in the project config (cdk.json) instead');
|
|
101
|
+
}
|
|
102
|
+
const contextSources = [
|
|
103
|
+
{ bag: this.commandLineContext },
|
|
104
|
+
{
|
|
105
|
+
fileName: PROJECT_CONFIG,
|
|
106
|
+
bag: this.projectConfig.subSettings([CONTEXT_KEY]).makeReadOnly(),
|
|
107
|
+
},
|
|
108
|
+
{ fileName: exports.PROJECT_CONTEXT, bag: this.projectContext },
|
|
109
|
+
];
|
|
110
|
+
if (readUserContext) {
|
|
111
|
+
contextSources.push({
|
|
112
|
+
fileName: USER_DEFAULTS,
|
|
113
|
+
bag: userConfig.subSettings([CONTEXT_KEY]).makeReadOnly(),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
this.context = new context_1.Context(...contextSources);
|
|
117
|
+
// Build settings from what's left
|
|
118
|
+
this.settings = this.defaultConfig
|
|
119
|
+
.merge(userConfig)
|
|
120
|
+
.merge(this.projectConfig)
|
|
121
|
+
.merge(this.commandLineArguments)
|
|
122
|
+
.makeReadOnly();
|
|
123
|
+
(0, logging_1.debug)('merged settings:', this.settings.all);
|
|
124
|
+
this.loaded = true;
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Save the project context
|
|
129
|
+
*/
|
|
130
|
+
async saveContext() {
|
|
131
|
+
if (!this.loaded) {
|
|
132
|
+
return this;
|
|
133
|
+
} // Avoid overwriting files with nothing
|
|
134
|
+
await this.projectContext.save(exports.PROJECT_CONTEXT);
|
|
135
|
+
return this;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.Configuration = Configuration;
|
|
139
|
+
async function loadAndLog(fileName) {
|
|
140
|
+
const ret = await settingsFromFile(fileName);
|
|
141
|
+
if (!ret.empty) {
|
|
142
|
+
(0, logging_1.debug)(fileName + ':', JSON.stringify(ret.all, undefined, 2));
|
|
143
|
+
}
|
|
144
|
+
return ret;
|
|
145
|
+
}
|
|
146
|
+
async function settingsFromFile(fileName) {
|
|
147
|
+
let settings;
|
|
148
|
+
const expanded = expandHomeDir(fileName);
|
|
149
|
+
if (await fs.pathExists(expanded)) {
|
|
150
|
+
const data = await fs.readJson(expanded);
|
|
151
|
+
settings = new settings_1.Settings(data);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
settings = new settings_1.Settings();
|
|
155
|
+
}
|
|
156
|
+
// See https://github.com/aws/aws-cdk/issues/59
|
|
157
|
+
prohibitContextKeys(settings, ['default-account', 'default-region'], fileName);
|
|
158
|
+
warnAboutContextKey(settings, 'aws:', fileName);
|
|
159
|
+
return settings;
|
|
160
|
+
}
|
|
161
|
+
function prohibitContextKeys(settings, keys, fileName) {
|
|
162
|
+
const context = settings.get(['context']);
|
|
163
|
+
if (!context || typeof context !== 'object') {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
for (const key of keys) {
|
|
167
|
+
if (key in context) {
|
|
168
|
+
throw new toolkit_lib_1.ToolkitError(`The 'context.${key}' key was found in ${fs_path.resolve(fileName)}, but it is no longer supported. Please remove it.`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function warnAboutContextKey(settings, prefix, fileName) {
|
|
173
|
+
const context = settings.get(['context']);
|
|
174
|
+
if (!context || typeof context !== 'object') {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
for (const contextKey of Object.keys(context)) {
|
|
178
|
+
if (contextKey.startsWith(prefix)) {
|
|
179
|
+
(0, logging_1.warning)(`A reserved context key ('context.${prefix}') key was found in ${fs_path.resolve(fileName)}, it might cause surprising behavior and should be removed.`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function expandHomeDir(x) {
|
|
184
|
+
if (x.startsWith('~')) {
|
|
185
|
+
return fs_path.join(os.homedir(), x.slice(1));
|
|
186
|
+
}
|
|
187
|
+
return x;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Parse CLI arguments into Settings
|
|
191
|
+
*
|
|
192
|
+
* CLI arguments in must be accessed in the CLI code via
|
|
193
|
+
* `configuration.settings.get(['argName'])` instead of via `args.argName`.
|
|
194
|
+
*
|
|
195
|
+
* The advantage is that they can be configured via `cdk.json` and
|
|
196
|
+
* `$HOME/.cdk.json`. Arguments not listed below and accessed via this object
|
|
197
|
+
* can only be specified on the command line.
|
|
198
|
+
*
|
|
199
|
+
* @param argv - the received CLI arguments.
|
|
200
|
+
* @returns a new Settings object.
|
|
201
|
+
*/
|
|
202
|
+
function commandLineArgumentsToSettings(argv) {
|
|
203
|
+
const context = parseStringContextListToObject(argv);
|
|
204
|
+
const tags = parseStringTagsListToObject(expectStringList(argv.tags));
|
|
205
|
+
// Determine bundling stacks
|
|
206
|
+
let bundlingStacks;
|
|
207
|
+
if (BUNDLING_COMMANDS.includes(argv._[0])) {
|
|
208
|
+
// If we deploy, diff, synth or watch a list of stacks exclusively we skip
|
|
209
|
+
// bundling for all other stacks.
|
|
210
|
+
bundlingStacks = argv.exclusively ? argv.STACKS ?? ['**'] : ['**'];
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
// Skip bundling for all stacks
|
|
214
|
+
bundlingStacks = [];
|
|
215
|
+
}
|
|
216
|
+
return new settings_1.Settings({
|
|
217
|
+
app: argv.app,
|
|
218
|
+
browser: argv.browser,
|
|
219
|
+
build: argv.build,
|
|
220
|
+
caBundlePath: argv.caBundlePath,
|
|
221
|
+
context,
|
|
222
|
+
debug: argv.debug,
|
|
223
|
+
tags,
|
|
224
|
+
language: argv.language,
|
|
225
|
+
pathMetadata: argv.pathMetadata,
|
|
226
|
+
assetMetadata: argv.assetMetadata,
|
|
227
|
+
profile: argv.profile,
|
|
228
|
+
plugin: argv.plugin,
|
|
229
|
+
requireApproval: argv.requireApproval,
|
|
230
|
+
toolkitStackName: argv.toolkitStackName,
|
|
231
|
+
toolkitBucket: {
|
|
232
|
+
bucketName: argv.bootstrapBucketName,
|
|
233
|
+
kmsKeyId: argv.bootstrapKmsKeyId,
|
|
234
|
+
},
|
|
235
|
+
versionReporting: argv.versionReporting,
|
|
236
|
+
staging: argv.staging,
|
|
237
|
+
output: argv.output,
|
|
238
|
+
outputsFile: argv.outputsFile,
|
|
239
|
+
progress: argv.progress,
|
|
240
|
+
proxy: argv.proxy,
|
|
241
|
+
bundlingStacks,
|
|
242
|
+
lookups: argv.lookups,
|
|
243
|
+
rollback: argv.rollback,
|
|
244
|
+
notices: argv.notices,
|
|
245
|
+
assetParallelism: argv['asset-parallelism'],
|
|
246
|
+
assetPrebuild: argv['asset-prebuild'],
|
|
247
|
+
ignoreNoStacks: argv['ignore-no-stacks'],
|
|
248
|
+
hotswap: {
|
|
249
|
+
ecs: {
|
|
250
|
+
minimumHealthyPercent: argv.hotswapEcsMinimumHealthyPercent,
|
|
251
|
+
maximumHealthyPercent: argv.hotswapEcsMaximumHealthyPercent,
|
|
252
|
+
stabilizationTimeoutSeconds: argv.hotswapEcsStabilizationTimeoutSeconds,
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
unstable: argv.unstable,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
function expectStringList(x) {
|
|
259
|
+
if (x === undefined) {
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
if (!Array.isArray(x)) {
|
|
263
|
+
throw new toolkit_lib_1.ToolkitError(`Expected array, got '${x}'`);
|
|
264
|
+
}
|
|
265
|
+
const nonStrings = x.filter((e) => typeof e !== 'string');
|
|
266
|
+
if (nonStrings.length > 0) {
|
|
267
|
+
throw new toolkit_lib_1.ToolkitError(`Expected list of strings, found ${nonStrings}`);
|
|
268
|
+
}
|
|
269
|
+
return x;
|
|
270
|
+
}
|
|
271
|
+
function parseStringContextListToObject(argv) {
|
|
272
|
+
const context = {};
|
|
273
|
+
for (const assignment of argv.context || []) {
|
|
274
|
+
const parts = assignment.split(/=(.*)/, 2);
|
|
275
|
+
if (parts.length === 2) {
|
|
276
|
+
(0, logging_1.debug)('CLI argument context: %s=%s', parts[0], parts[1]);
|
|
277
|
+
if (parts[0].match(/^aws:.+/)) {
|
|
278
|
+
throw new toolkit_lib_1.ToolkitError(`User-provided context cannot use keys prefixed with 'aws:', but ${parts[0]} was provided.`);
|
|
279
|
+
}
|
|
280
|
+
context[parts[0]] = parts[1];
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
(0, logging_1.warning)('Context argument is not an assignment (key=value): %s', assignment);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return context;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Parse tags out of arguments
|
|
290
|
+
*
|
|
291
|
+
* Return undefined if no tags were provided, return an empty array if only empty
|
|
292
|
+
* strings were provided
|
|
293
|
+
*/
|
|
294
|
+
function parseStringTagsListToObject(argTags) {
|
|
295
|
+
if (argTags === undefined) {
|
|
296
|
+
return undefined;
|
|
297
|
+
}
|
|
298
|
+
if (argTags.length === 0) {
|
|
299
|
+
return undefined;
|
|
300
|
+
}
|
|
301
|
+
const nonEmptyTags = argTags.filter((t) => t !== '');
|
|
302
|
+
if (nonEmptyTags.length === 0) {
|
|
303
|
+
return [];
|
|
304
|
+
}
|
|
305
|
+
const tags = [];
|
|
306
|
+
for (const assignment of nonEmptyTags) {
|
|
307
|
+
const parts = assignment.split(/=(.*)/, 2);
|
|
308
|
+
if (parts.length === 2) {
|
|
309
|
+
(0, logging_1.debug)('CLI argument tags: %s=%s', parts[0], parts[1]);
|
|
310
|
+
tags.push({
|
|
311
|
+
Key: parts[0],
|
|
312
|
+
Value: parts[1],
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
(0, logging_1.warning)('Tags argument is not an assignment (key=value): %s', assignment);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return tags.length > 0 ? tags : undefined;
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQXlCO0FBQ3pCLGdDQUFnQztBQUNoQyxzREFBb0Q7QUFDcEQsK0JBQStCO0FBQy9CLHVDQUEyQztBQUMzQyw0Q0FBeUM7QUFDekMsOENBQTJDO0FBRzlCLFFBQUEsZUFBZSxHQUFHLGtCQUFrQixDQUFDO0FBQ2xELE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBRTlCOztHQUVHO0FBQ0gsSUFBWSxPQTJCWDtBQTNCRCxXQUFZLE9BQU87SUFDakIsb0JBQVMsQ0FBQTtJQUNULHdCQUFhLENBQUE7SUFDYix3QkFBYSxDQUFBO0lBQ2Isa0NBQXVCLENBQUE7SUFDdkIsNEJBQWlCLENBQUE7SUFDakIsOEJBQW1CLENBQUE7SUFDbkIsb0NBQXlCLENBQUE7SUFDekIsMEJBQWUsQ0FBQTtJQUNmLGdDQUFxQixDQUFBO0lBQ3JCLHdCQUFhLENBQUE7SUFDYiw4QkFBbUIsQ0FBQTtJQUNuQiwwQkFBZSxDQUFBO0lBQ2Ysb0JBQVMsQ0FBQTtJQUNULGdDQUFxQixDQUFBO0lBQ3JCLDRCQUFpQixDQUFBO0lBQ2pCLHNDQUEyQixDQUFBO0lBQzNCLHNCQUFXLENBQUE7SUFDWCw4QkFBbUIsQ0FBQTtJQUNuQiw4QkFBbUIsQ0FBQTtJQUNuQiw4QkFBbUIsQ0FBQTtJQUNuQix3QkFBYSxDQUFBO0lBQ2Isc0JBQVcsQ0FBQTtJQUNYLDRCQUFpQixDQUFBO0lBQ2pCLGdDQUFxQixDQUFBO0lBQ3JCLDBCQUFlLENBQUE7SUFDZiwwQ0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBM0JXLE9BQU8sdUJBQVAsT0FBTyxRQTJCbEI7QUFFRCxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLE9BQU8sQ0FBQyxNQUFN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SUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQztJQUV2QixLQUFLLE1BQU0sVUFBVSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFBLGVBQUssRUFBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDUixHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDYixLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNoQixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUEsaUJBQU8sRUFBQyxvREFBb0QsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RSxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBmc19wYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgZGVidWcsIHdhcm5pbmcgfSBmcm9tICcuL2xvZ2dpbmcnO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4uL2FwaS9jb250ZXh0JztcbmltcG9ydCB7IFNldHRpbmdzIH0gZnJvbSAnLi4vYXBpL3NldHRpbmdzJztcbmltcG9ydCB0eXBlIHsgVGFnIH0gZnJvbSAnLi4vYXBpL3RhZ3MnO1xuXG5leHBvcnQgY29uc3QgUFJPSkVDVF9DT05URVhUID0gJ2Nkay5jb250ZXh0Lmpzb24nO1xuY29uc3QgUFJPSkVDVF9DT05GSUcgPSAnY2RrLmpzb24nO1xuY29uc3QgVVNFUl9ERUZBVUxUUyA9ICd+Ly5jZGsuanNvbic7XG5jb25zdCBDT05URVhUX0tFWSA9ICdjb250ZXh0JztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICovXG5leHBvcnQgZW51bSBDb21tYW5kIHtcbiAgTFMgPSAnbHMnLFxuICBMSVNUID0gJ2xpc3QnLFxuICBESUZGID0gJ2RpZmYnLFxuICBCT09UU1RSQVAgPSAnYm9vdHN0cmFwJyxcbiAgREVQTE9ZID0gJ2RlcGxveScsXG4gIERFU1RST1kgPSAnZGVzdHJveScsXG4gIFNZTlRIRVNJWkUgPSAnc3ludGhlc2l6ZScsXG4gIFNZTlRIID0gJ3N5bnRoJyxcbiAgTUVUQURBVEEgPSAnbWV0YWRhdGEnLFxuICBJTklUID0gJ2luaXQnLFxuICBWRVJTSU9OID0gJ3ZlcnNpb24nLFxuICBXQVRDSCA9ICd3YXRjaCcsXG4gIEdDID0gJ2djJyxcbiAgUk9MTEJBQ0sgPSAncm9sbGJhY2snLFxuICBJTVBPUlQgPSAnaW1wb3J0JyxcbiAgQUNLTk9XTEVER0UgPSAnYWNrbm93bGVkZ2UnLFxuICBBQ0sgPSAnYWNrJyxcbiAgTk9USUNFUyA9ICdub3RpY2VzJyxcbiAgTUlHUkFURSA9ICdtaWdyYXRlJyxcbiAgQ09OVEVYVCA9ICdjb250ZXh0JyxcbiAgRE9DUyA9ICdkb2NzJyxcbiAgRE9DID0gJ2RvYycsXG4gIERPQ1RPUiA9ICdkb2N0b3InLFxuICBSRUZBQ1RPUiA9ICdyZWZhY3RvcicsXG4gIERSSUZUID0gJ2RyaWZ0JyxcbiAgQ0xJX1RFTEVNRVRSWSA9ICdjbGktdGVsZW1ldHJ5Jyxcbn1cblxuY29uc3QgQlVORExJTkdfQ09NTUFORFMgPSBbXG4gIENvbW1hbmQuREVQTE9ZLFxuICBDb21tYW5kLkRJRkYsXG4gIENvbW1hbmQuU1lOVEgsXG4gIENvbW1hbmQuU1lOVEhFU0laRSxcbiAgQ29tbWFuZC5XQVRDSCxcbiAgQ29tbWFuZC5JTVBPUlQsXG5dO1xuXG50eXBlIEFyZ3VtZW50cyA9IHtcbiAgcmVhZG9ubHkgXzogW0NvbW1hbmQsIC4uLnN0cmluZ1tdXTtcbiAgcmVhZG9ubHkgZXhjbHVzaXZlbHk/OiBib29sZWFuO1xuICByZWFkb25seSBTVEFDS1M/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgbG9va3Vwcz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IFtuYW1lOiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuaW50ZXJmYWNlIENvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIHBhc3NlZCB2aWEgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vdGhpbmcgcGFzc2VkXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kTGluZUFyZ3VtZW50cz86IEFyZ3VtZW50cztcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gdXNlIGNvbnRleHQgZnJvbSBgLmNkay5qc29uYCBpbiB1c2VyIGhvbWUgZGlyZWN0b3J5XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRVc2VyQ29udGV4dD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQWxsIHNvdXJjZXMgb2Ygc2V0dGluZ3MgY29tYmluZWRcbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKCk7XG4gIHB1YmxpYyBjb250ZXh0ID0gbmV3IENvbnRleHQoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdENvbmZpZyA9IG5ldyBTZXR0aW5ncyh7XG4gICAgdmVyc2lvblJlcG9ydGluZzogdHJ1ZSxcbiAgICBhc3NldE1ldGFkYXRhOiB0cnVlLFxuICAgIHBhdGhNZXRhZGF0YTogdHJ1ZSxcbiAgICBvdXRwdXQ6ICdjZGsub3V0JyxcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kTGluZUFyZ3VtZW50czogU2V0dGluZ3M7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZExpbmVDb250ZXh0OiBTZXR0aW5ncztcbiAgcHJpdmF0ZSBfcHJvamVjdENvbmZpZz86IFNldHRpbmdzO1xuICBwcml2YXRlIF9wcm9qZWN0Q29udGV4dD86IFNldHRpbmdzO1xuICBwcml2YXRlIGxvYWRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IENvbmZpZ3VyYXRpb25Qcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5jb21tYW5kTGluZUFyZ3VtZW50cyA9IHByb3BzLmNvbW1hbmRMaW5lQXJndW1lbnRzXG4gICAgICA/IGNvbW1hbmRMaW5lQXJndW1lbnRzVG9TZXR0aW5ncyhwcm9wcy5jb21tYW5kTGluZUFyZ3VtZW50cylcbiAgICAgIDogbmV3IFNldHRpbmdzKCk7XG4gICAgdGhpcy5jb21tYW5kTGluZUNvbnRleHQgPSB0aGlzLmNvbW1hbmRMaW5lQXJndW1lbnRzXG4gICAgICAuc3ViU2V0dGluZ3MoW0NPTlRFWFRfS0VZXSlcbiAgICAgIC5tYWtlUmVhZE9ubHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHByb2plY3RDb25maWcoKSB7XG4gICAgaWYgKCF0aGlzLl9wcm9qZWN0Q29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCcjbG9hZCBoYXMgbm90IGJlZW4gY2FsbGVkIHlldCEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Byb2plY3RDb25maWc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByb2plY3RDb250ZXh0KCkge1xuICAgIGlmICghdGhpcy5fcHJvamVjdENvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJyNsb2FkIGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0IScpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdENvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhbGwgY29uZmlnXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHRoaXM+IHtcbiAgICBjb25zdCB1c2VyQ29uZmlnID0gYXdhaXQgbG9hZEFuZExvZyhVU0VSX0RFRkFVTFRTKTtcbiAgICB0aGlzLl9wcm9qZWN0Q29uZmlnID0gYXdhaXQgbG9hZEFuZExvZyhQUk9KRUNUX0NPTkZJRyk7XG4gICAgdGhpcy5fcHJvamVjdENvbnRleHQgPSBhd2FpdCBsb2FkQW5kTG9nKFBST0pFQ1RfQ09OVEVYVCk7XG5cbiAgICAvLyBAdG9kbyBjYW5ub3QgY3VycmVudGx5IGJlIGRpc2FibGVkIGJ5IGNsaSB1c2Vyc1xuICAgIGNvbnN0IHJlYWRVc2VyQ29udGV4dCA9IHRoaXMucHJvcHMucmVhZFVzZXJDb250ZXh0ID8/IHRydWU7XG5cbiAgICBpZiAodXNlckNvbmZpZy5nZXQoWydidWlsZCddKSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgJ1RoZSBgYnVpbGRgIGtleSBjYW5ub3QgYmUgc3BlY2lmaWVkIGluIHRoZSB1c2VyIGNvbmZpZyAofi8uY2RrLmpzb24pLCBzcGVjaWZ5IGl0IGluIHRoZSBwcm9qZWN0IGNvbmZpZyAoY2RrLmpzb24pIGluc3RlYWQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0U291cmNlcyA9IFtcbiAgICAgIHsgYmFnOiB0aGlzLmNvbW1hbmRMaW5lQ29udGV4dCB9LFxuICAgICAge1xuICAgICAgICBmaWxlTmFtZTogUFJPSkVDVF9DT05GSUcsXG4gICAgICAgIGJhZzogdGhpcy5wcm9qZWN0Q29uZmlnLnN1YlNldHRpbmdzKFtDT05URVhUX0tFWV0pLm1ha2VSZWFkT25seSgpLFxuICAgICAgfSxcbiAgICAgIHsgZmlsZU5hbWU6IFBST0pFQ1RfQ09OVEVYVCwgYmFnOiB0aGlzLnByb2plY3RDb250ZXh0IH0sXG4gICAgXTtcbiAgICBpZiAocmVhZFVzZXJDb250ZXh0KSB7XG4gICAgICBjb250ZXh0U291cmNlcy5wdXNoKHtcbiAgICAgICAgZmlsZU5hbWU6IFVTRVJfREVGQVVMVFMsXG4gICAgICAgIGJhZzogdXNlckNvbmZpZy5zdWJTZXR0aW5ncyhbQ09OVEVYVF9LRVldKS5tYWtlUmVhZE9ubHkoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KC4uLmNvbnRleHRTb3VyY2VzKTtcblxuICAgIC8vIEJ1aWxkIHNldHRpbmdzIGZyb20gd2hhdCdzIGxlZnRcbiAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5kZWZhdWx0Q29uZmlnXG4gICAgICAubWVyZ2UodXNlckNvbmZpZylcbiAgICAgIC5tZXJnZSh0aGlzLnByb2plY3RDb25maWcpXG4gICAgICAubWVyZ2UodGhpcy5jb21tYW5kTGluZUFyZ3VtZW50cylcbiAgICAgIC5tYWtlUmVhZE9ubHkoKTtcblxuICAgIGRlYnVnKCdtZXJnZWQgc2V0dGluZ3M6JywgdGhpcy5zZXR0aW5ncy5hbGwpO1xuXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgcHJvamVjdCBjb250ZXh0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZUNvbnRleHQoKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgaWYgKCF0aGlzLmxvYWRlZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSAvLyBBdm9pZCBvdmVyd3JpdGluZyBmaWxlcyB3aXRoIG5vdGhpbmdcblxuICAgIGF3YWl0IHRoaXMucHJvamVjdENvbnRleHQuc2F2ZShQUk9KRUNUX0NPTlRFWFQpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZEFuZExvZyhmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxTZXR0aW5ncz4ge1xuICBjb25zdCByZXQgPSBhd2FpdCBzZXR0aW5nc0Zyb21GaWxlKGZpbGVOYW1lKTtcbiAgaWYgKCFyZXQuZW1wdHkpIHtcbiAgICBkZWJ1ZyhmaWxlTmFtZSArICc6JywgSlNPTi5zdHJpbmdpZnkocmV0LmFsbCwgdW5kZWZpbmVkLCAyKSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dGluZ3NGcm9tRmlsZShmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxTZXR0aW5ncz4ge1xuICBsZXQgc2V0dGluZ3M7XG4gIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kSG9tZURpcihmaWxlTmFtZSk7XG4gIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKGV4cGFuZGVkKSkge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmcy5yZWFkSnNvbihleHBhbmRlZCk7XG4gICAgc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3MoZGF0YSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3MoKTtcbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzU5XG4gIHByb2hpYml0Q29udGV4dEtleXMoc2V0dGluZ3MsIFsnZGVmYXVsdC1hY2NvdW50JywgJ2RlZmF1bHQtcmVnaW9uJ10sIGZpbGVOYW1lKTtcbiAgd2FybkFib3V0Q29udGV4dEtleShzZXR0aW5ncywgJ2F3czonLCBmaWxlTmFtZSk7XG5cbiAgcmV0dXJuIHNldHRpbmdzO1xufVxuXG5mdW5jdGlvbiBwcm9oaWJpdENvbnRleHRLZXlzKHNldHRpbmdzOiBTZXR0aW5ncywga2V5czogc3RyaW5nW10sIGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgY29udGV4dCA9IHNldHRpbmdzLmdldChbJ2NvbnRleHQnXSk7XG4gIGlmICghY29udGV4dCB8fCB0eXBlb2YgY29udGV4dCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgaWYgKGtleSBpbiBjb250ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICBgVGhlICdjb250ZXh0LiR7a2V5fScga2V5IHdhcyBmb3VuZCBpbiAke2ZzX3BhdGgucmVzb2x2ZShcbiAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgKX0sIGJ1dCBpdCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgcmVtb3ZlIGl0LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRDb250ZXh0S2V5KHNldHRpbmdzOiBTZXR0aW5ncywgcHJlZml4OiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgY29udGV4dCA9IHNldHRpbmdzLmdldChbJ2NvbnRleHQnXSk7XG4gIGlmICghY29udGV4dCB8fCB0eXBlb2YgY29udGV4dCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IGNvbnRleHRLZXkgb2YgT2JqZWN0LmtleXMoY29udGV4dCkpIHtcbiAgICBpZiAoY29udGV4dEtleS5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgIHdhcm5pbmcoXG4gICAgICAgIGBBIHJlc2VydmVkIGNvbnRleHQga2V5ICgnY29udGV4dC4ke3ByZWZpeH0nKSBrZXkgd2FzIGZvdW5kIGluICR7ZnNfcGF0aC5yZXNvbHZlKFxuICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICApfSwgaXQgbWlnaHQgY2F1c2Ugc3VycHJpc2luZyBiZWhhdmlvciBhbmQgc2hvdWxkIGJlIHJlbW92ZWQuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4cGFuZEhvbWVEaXIoeDogc3RyaW5nKSB7XG4gIGlmICh4LnN0YXJ0c1dpdGgoJ34nKSkge1xuICAgIHJldHVybiBmc19wYXRoLmpvaW4ob3MuaG9tZWRpcigpLCB4LnNsaWNlKDEpKTtcbiAgfVxuICByZXR1cm4geDtcbn1cblxuLyoqXG4gKiBQYXJzZSBDTEkgYXJndW1lbnRzIGludG8gU2V0dGluZ3NcbiAqXG4gKiBDTEkgYXJndW1lbnRzIGluIG11c3QgYmUgYWNjZXNzZWQgaW4gdGhlIENMSSBjb2RlIHZpYVxuICogYGNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnYXJnTmFtZSddKWAgaW5zdGVhZCBvZiB2aWEgYGFyZ3MuYXJnTmFtZWAuXG4gKlxuICogVGhlIGFkdmFudGFnZSBpcyB0aGF0IHRoZXkgY2FuIGJlIGNvbmZpZ3VyZWQgdmlhIGBjZGsuanNvbmAgYW5kXG4gKiBgJEhPTUUvLmNkay5qc29uYC4gQXJndW1lbnRzIG5vdCBsaXN0ZWQgYmVsb3cgYW5kIGFjY2Vzc2VkIHZpYSB0aGlzIG9iamVjdFxuICogY2FuIG9ubHkgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4gKlxuICogQHBhcmFtIGFyZ3YgLSB0aGUgcmVjZWl2ZWQgQ0xJIGFyZ3VtZW50cy5cbiAqIEByZXR1cm5zIGEgbmV3IFNldHRpbmdzIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY29tbWFuZExpbmVBcmd1bWVudHNUb1NldHRpbmdzKGFyZ3Y6IEFyZ3VtZW50cyk6IFNldHRpbmdzIHtcbiAgY29uc3QgY29udGV4dCA9IHBhcnNlU3RyaW5nQ29udGV4dExpc3RUb09iamVjdChhcmd2KTtcbiAgY29uc3QgdGFncyA9IHBhcnNlU3RyaW5nVGFnc0xpc3RUb09iamVjdChleHBlY3RTdHJpbmdMaXN0KGFyZ3YudGFncykpO1xuXG4gIC8vIERldGVybWluZSBidW5kbGluZyBzdGFja3NcbiAgbGV0IGJ1bmRsaW5nU3RhY2tzOiBzdHJpbmdbXTtcbiAgaWYgKEJVTkRMSU5HX0NPTU1BTkRTLmluY2x1ZGVzKGFyZ3YuX1swXSkpIHtcbiAgICAvLyBJZiB3ZSBkZXBsb3ksIGRpZmYsIHN5bnRoIG9yIHdhdGNoIGEgbGlzdCBvZiBzdGFja3MgZXhjbHVzaXZlbHkgd2Ugc2tpcFxuICAgIC8vIGJ1bmRsaW5nIGZvciBhbGwgb3RoZXIgc3RhY2tzLlxuICAgIGJ1bmRsaW5nU3RhY2tzID0gYXJndi5leGNsdXNpdmVseSA/IGFyZ3YuU1RBQ0tTID8/IFsnKionXSA6IFsnKionXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTa2lwIGJ1bmRsaW5nIGZvciBhbGwgc3RhY2tzXG4gICAgYnVuZGxpbmdTdGFja3MgPSBbXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2V0dGluZ3Moe1xuICAgIGFwcDogYXJndi5hcHAsXG4gICAgYnJvd3NlcjogYXJndi5icm93c2VyLFxuICAgIGJ1aWxkOiBhcmd2LmJ1aWxkLFxuICAgIGNhQnVuZGxlUGF0aDogYXJndi5jYUJ1bmRsZVBhdGgsXG4gICAgY29udGV4dCxcbiAgICBkZWJ1ZzogYXJndi5kZWJ1ZyxcbiAgICB0YWdzLFxuICAgIGxhbmd1YWdlOiBhcmd2Lmxhbmd1YWdlLFxuICAgIHBhdGhNZXRhZGF0YTogYXJndi5wYXRoTWV0YWRhdGEsXG4gICAgYXNzZXRNZXRhZGF0YTogYXJndi5hc3NldE1ldGFkYXRhLFxuICAgIHByb2ZpbGU6IGFyZ3YucHJvZmlsZSxcbiAgICBwbHVnaW46IGFyZ3YucGx1Z2luLFxuICAgIHJlcXVpcmVBcHByb3ZhbDogYXJndi5yZXF1aXJlQXBwcm92YWwsXG4gICAgdG9vbGtpdFN0YWNrTmFtZTogYXJndi50b29sa2l0U3RhY2tOYW1lLFxuICAgIHRvb2xraXRCdWNrZXQ6IHtcbiAgICAgIGJ1Y2tldE5hbWU6IGFyZ3YuYm9vdHN0cmFwQnVja2V0TmFtZSxcbiAgICAgIGttc0tleUlkOiBhcmd2LmJvb3RzdHJhcEttc0tleUlkLFxuICAgIH0sXG4gICAgdmVyc2lvblJlcG9ydGluZzogYXJndi52ZXJzaW9uUmVwb3J0aW5nLFxuICAgIHN0YWdpbmc6IGFyZ3Yuc3RhZ2luZyxcbiAgICBvdXRwdXQ6IGFyZ3Yub3V0cHV0LFxuICAgIG91dHB1dHNGaWxlOiBhcmd2Lm91dHB1dHNGaWxlLFxuICAgIHByb2dyZXNzOiBhcmd2LnByb2dyZXNzLFxuICAgIHByb3h5OiBhcmd2LnByb3h5LFxuICAgIGJ1bmRsaW5nU3RhY2tzLFxuICAgIGxvb2t1cHM6IGFyZ3YubG9va3VwcyxcbiAgICByb2xsYmFjazogYXJndi5yb2xsYmFjayxcbiAgICBub3RpY2VzOiBhcmd2Lm5vdGljZXMsXG4gICAgYXNzZXRQYXJhbGxlbGlzbTogYXJndlsnYXNzZXQtcGFyYWxsZWxpc20nXSxcbiAgICBhc3NldFByZWJ1aWxkOiBhcmd2Wydhc3NldC1wcmVidWlsZCddLFxuICAgIGlnbm9yZU5vU3RhY2tzOiBhcmd2WydpZ25vcmUtbm8tc3RhY2tzJ10sXG4gICAgaG90c3dhcDoge1xuICAgICAgZWNzOiB7XG4gICAgICAgIG1pbmltdW1IZWFsdGh5UGVyY2VudDogYXJndi5ob3Rzd2FwRWNzTWluaW11bUhlYWx0aHlQZXJjZW50LFxuICAgICAgICBtYXhpbXVtSGVhbHRoeVBlcmNlbnQ6IGFyZ3YuaG90c3dhcEVjc01heGltdW1IZWFsdGh5UGVyY2VudCxcbiAgICAgICAgc3RhYmlsaXphdGlvblRpbWVvdXRTZWNvbmRzOiBhcmd2LmhvdHN3YXBFY3NTdGFiaWxpemF0aW9uVGltZW91dFNlY29uZHMsXG4gICAgICB9LFxuICAgIH0sXG4gICAgdW5zdGFibGU6IGFyZ3YudW5zdGFibGUsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBleHBlY3RTdHJpbmdMaXN0KHg6IHVua25vd24pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYEV4cGVjdGVkIGFycmF5LCBnb3QgJyR7eH0nYCk7XG4gIH1cbiAgY29uc3Qgbm9uU3RyaW5ncyA9IHguZmlsdGVyKChlKSA9PiB0eXBlb2YgZSAhPT0gJ3N0cmluZycpO1xuICBpZiAobm9uU3RyaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgRXhwZWN0ZWQgbGlzdCBvZiBzdHJpbmdzLCBmb3VuZCAke25vblN0cmluZ3N9YCk7XG4gIH1cbiAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nQ29udGV4dExpc3RUb09iamVjdChhcmd2OiBBcmd1bWVudHMpOiBhbnkge1xuICBjb25zdCBjb250ZXh0OiBhbnkgPSB7fTtcblxuICBmb3IgKGNvbnN0IGFzc2lnbm1lbnQgb2YgKGFyZ3YgYXMgYW55KS5jb250ZXh0IHx8IFtdKSB7XG4gICAgY29uc3QgcGFydHMgPSBhc3NpZ25tZW50LnNwbGl0KC89KC4qKS8sIDIpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIGRlYnVnKCdDTEkgYXJndW1lbnQgY29udGV4dDogJXM9JXMnLCBwYXJ0c1swXSwgcGFydHNbMV0pO1xuICAgICAgaWYgKHBhcnRzWzBdLm1hdGNoKC9eYXdzOi4rLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgICBgVXNlci1wcm92aWRlZCBjb250ZXh0IGNhbm5vdCB1c2Uga2V5cyBwcmVmaXhlZCB3aXRoICdhd3M6JywgYnV0ICR7cGFydHNbMF19IHdhcyBwcm92aWRlZC5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29udGV4dFtwYXJ0c1swXV0gPSBwYXJ0c1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybmluZyhcbiAgICAgICAgJ0NvbnRleHQgYXJndW1lbnQgaXMgbm90IGFuIGFzc2lnbm1lbnQgKGtleT12YWx1ZSk6ICVzJyxcbiAgICAgICAgYXNzaWdubWVudCxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG4vKipcbiAqIFBhcnNlIHRhZ3Mgb3V0IG9mIGFyZ3VtZW50c1xuICpcbiAqIFJldHVybiB1bmRlZmluZWQgaWYgbm8gdGFncyB3ZXJlIHByb3ZpZGVkLCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgaWYgb25seSBlbXB0eVxuICogc3RyaW5ncyB3ZXJlIHByb3ZpZGVkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nVGFnc0xpc3RUb09iamVjdChcbiAgYXJnVGFnczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4pOiBUYWdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChhcmdUYWdzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChhcmdUYWdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgbm9uRW1wdHlUYWdzID0gYXJnVGFncy5maWx0ZXIoKHQpID0+IHQgIT09ICcnKTtcbiAgaWYgKG5vbkVtcHR5VGFncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB0YWdzOiBUYWdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYXNzaWdubWVudCBvZiBub25FbXB0eVRhZ3MpIHtcbiAgICBjb25zdCBwYXJ0cyA9IGFzc2lnbm1lbnQuc3BsaXQoLz0oLiopLywgMik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgZGVidWcoJ0NMSSBhcmd1bWVudCB0YWdzOiAlcz0lcycsIHBhcnRzWzBdLCBwYXJ0c1sxXSk7XG4gICAgICB0YWdzLnB1c2goe1xuICAgICAgICBLZXk6IHBhcnRzWzBdLFxuICAgICAgICBWYWx1ZTogcGFydHNbMV0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2FybmluZygnVGFncyBhcmd1bWVudCBpcyBub3QgYW4gYXNzaWdubWVudCAoa2V5PXZhbHVlKTogJXMnLCBhc3NpZ25tZW50KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhZ3MubGVuZ3RoID4gMCA/IHRhZ3MgOiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type * from './types';
|
|
2
|
+
export * from './logging';
|
|
3
|
+
export * from './aws-auth';
|
|
4
|
+
export { Command, Configuration, PROJECT_CONTEXT } from './configuration';
|
|
5
|
+
export { CfnEvaluationException } from '../api/cloudformation';
|
|
6
|
+
export { Deployments } from '../api/deployments';
|
|
7
|
+
export { deployStack } from '../api-private';
|
|
8
|
+
export { PluginHost } from '../api/plugin';
|
|
9
|
+
export { Settings } from '../api/settings';
|
|
10
|
+
export { Bootstrapper } from '../api/bootstrap';
|
|
11
|
+
export { CloudExecutable, execProgram } from '../cxapp';
|
|
12
|
+
export { cli, exec } from '../cli/cli';
|
|
13
|
+
export { cliRootDir as rootDir } from '../cli/root-dir';
|
|
14
|
+
export { formatAsBanner } from '../cli/util/console-formatters';
|
|
15
|
+
export { versionNumber } from '../cli/version';
|
|
16
|
+
export { RequireApproval } from '@aws-cdk/cloud-assembly-schema';
|
|
17
|
+
export { availableInitTemplates } from '../commands/init';
|
|
18
|
+
export { aliases, command, describe } from '../commands/docs';
|
|
19
|
+
export { deepClone, flatten, ifDefined, isArray, isEmpty, numberFromBool, partition, padLeft as leftPad, contentHash, deepMerge, lowerCaseFirstCharacter } from '../util';
|