aws-cdk 2.1113.0 → 2.1114.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/THIRD_PARTY_LICENSES +94 -1336
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/cli/cdk-toolkit.js +33 -32
- package/lib/cli/cli-config.js +2 -2
- package/lib/cli/cli-type-registry.json +1 -1
- package/lib/cli/cli.js +15 -15
- package/lib/cli/display-version.js +2 -2
- package/lib/cli/io-host/cli-io-host.js +5 -5
- package/lib/cli/parse-command-line-arguments.js +2 -2
- package/lib/cli/root-dir.js +2 -2
- package/lib/cli/telemetry/error.d.ts +15 -2
- package/lib/cli/telemetry/error.js +63 -11
- package/lib/cli/telemetry/schema.d.ts +1 -8
- package/lib/cli/telemetry/schema.js +1 -10
- package/lib/cli/telemetry/session.js +4 -4
- package/lib/cli/telemetry/sink/endpoint-sink.js +3 -3
- package/lib/cli/telemetry/sink/file-sink.js +2 -2
- package/lib/cli/telemetry/sink/funnel.js +2 -2
- package/lib/cli/user-configuration.js +8 -8
- package/lib/cli/user-input.d.ts +1 -1
- package/lib/cli/user-input.js +1 -1
- package/lib/cli/util/npm.js +3 -3
- package/lib/commands/context.js +5 -5
- package/lib/commands/init/init-hooks.js +2 -2
- package/lib/commands/init/init.js +18 -18
- package/lib/commands/init/os.js +2 -2
- package/lib/commands/migrate.js +14 -14
- package/lib/cxapp/cloud-assembly.js +5 -5
- package/lib/cxapp/cloud-executable.js +3 -3
- package/lib/cxapp/environments.js +3 -3
- package/lib/cxapp/exec.js +20 -38
- package/lib/index.d.ts +0 -1
- package/lib/index.js +42265 -46230
- package/package.json +7 -38
- package/lib/legacy/aws-auth.d.ts +0 -74
- package/lib/legacy/aws-auth.js +0 -47
- package/lib/legacy/configuration.d.ts +0 -82
- package/lib/legacy/configuration.js +0 -322
- package/lib/legacy/index.d.ts +0 -19
- package/lib/legacy/index.js +0 -77
- package/lib/legacy/logging.d.ts +0 -82
- package/lib/legacy/logging.js +0 -154
- package/lib/legacy/types.d.ts +0 -31
- package/lib/legacy/types.js +0 -3
- package/lib/legacy-exports.d.ts +0 -8
- package/lib/legacy-exports.js +0 -51
package/package.json
CHANGED
|
@@ -80,12 +80,12 @@
|
|
|
80
80
|
"ts-mock-imports": "^1.3.19",
|
|
81
81
|
"typescript": "5.9",
|
|
82
82
|
"xml-js": "^1.6.11",
|
|
83
|
-
"@aws-cdk/cdk-assets-lib": "^1.4.
|
|
84
|
-
"@aws-cdk/cloud-assembly-api": "2.2.
|
|
85
|
-
"@aws-cdk/cloud-assembly-schema": ">=53.
|
|
83
|
+
"@aws-cdk/cdk-assets-lib": "^1.4.2",
|
|
84
|
+
"@aws-cdk/cloud-assembly-api": "2.2.1",
|
|
85
|
+
"@aws-cdk/cloud-assembly-schema": ">=53.8.0",
|
|
86
86
|
"@aws-cdk/cloudformation-diff": "2.186.0",
|
|
87
87
|
"@aws-cdk/cx-api": "^2",
|
|
88
|
-
"@aws-cdk/toolkit-lib": "^1.19.
|
|
88
|
+
"@aws-cdk/toolkit-lib": "^1.19.2",
|
|
89
89
|
"@aws-sdk/client-appsync": "^3",
|
|
90
90
|
"@aws-sdk/client-bedrock-agentcore-control": "^3",
|
|
91
91
|
"@aws-sdk/client-cloudcontrol": "^3",
|
|
@@ -111,6 +111,7 @@
|
|
|
111
111
|
"@smithy/middleware-endpoint": "^4.4.23",
|
|
112
112
|
"@smithy/property-provider": "^4.2.11",
|
|
113
113
|
"@smithy/shared-ini-file-loader": "^4.4.6",
|
|
114
|
+
"@smithy/smithy-client": "^4.12.7",
|
|
114
115
|
"@smithy/types": "^4.13.0",
|
|
115
116
|
"@smithy/util-retry": "^4.2.11",
|
|
116
117
|
"@smithy/util-waiter": "^4.2.11",
|
|
@@ -149,44 +150,12 @@
|
|
|
149
150
|
"publishConfig": {
|
|
150
151
|
"access": "public"
|
|
151
152
|
},
|
|
152
|
-
"version": "2.
|
|
153
|
+
"version": "2.1114.0",
|
|
153
154
|
"types": "lib/index.d.ts",
|
|
154
155
|
"exports": {
|
|
155
156
|
"./package.json": "./package.json",
|
|
156
157
|
"./build-info.json": "./build-info.json",
|
|
157
|
-
".": "./lib/
|
|
158
|
-
"./bin/cdk": "./bin/cdk",
|
|
159
|
-
"./lib/api/bootstrap/bootstrap-template.yaml": "./lib/api/bootstrap/bootstrap-template.yaml",
|
|
160
|
-
"./lib/util": "./lib/legacy-exports.js",
|
|
161
|
-
"./lib": "./lib/legacy-exports.js",
|
|
162
|
-
"./lib/api/plugin": "./lib/legacy-exports.js",
|
|
163
|
-
"./lib/util/content-hash": "./lib/legacy-exports.js",
|
|
164
|
-
"./lib/settings": "./lib/legacy-exports.js",
|
|
165
|
-
"./lib/api/bootstrap": "./lib/legacy-exports.js",
|
|
166
|
-
"./lib/api/cxapp/cloud-assembly": "./lib/legacy-exports.js",
|
|
167
|
-
"./lib/api/cxapp/cloud-executable": "./lib/legacy-exports.js",
|
|
168
|
-
"./lib/api/cxapp/exec": "./lib/legacy-exports.js",
|
|
169
|
-
"./lib/diff": "./lib/legacy-exports.js",
|
|
170
|
-
"./lib/api/util/string-manipulation": "./lib/legacy-exports.js",
|
|
171
|
-
"./lib/util/console-formatters": "./lib/legacy-exports.js",
|
|
172
|
-
"./lib/util/tracing": "./lib/legacy-exports.js",
|
|
173
|
-
"./lib/commands/docs": "./lib/legacy-exports.js",
|
|
174
|
-
"./lib/api/hotswap/common": "./lib/legacy-exports.js",
|
|
175
|
-
"./lib/util/objects": "./lib/legacy-exports.js",
|
|
176
|
-
"./lib/api/deployments": "./lib/legacy-exports.js",
|
|
177
|
-
"./lib/util/directories": "./lib/legacy-exports.js",
|
|
178
|
-
"./lib/version": "./lib/legacy-exports.js",
|
|
179
|
-
"./lib/init": "./lib/legacy-exports.js",
|
|
180
|
-
"./lib/api/aws-auth/cached": "./lib/legacy-exports.js",
|
|
181
|
-
"./lib/api/deploy-stack": "./lib/legacy-exports.js",
|
|
182
|
-
"./lib/api/evaluate-cloudformation-template": "./lib/legacy-exports.js",
|
|
183
|
-
"./lib/api/aws-auth/credential-plugins": "./lib/legacy-exports.js",
|
|
184
|
-
"./lib/api/aws-auth/awscli-compatible": "./lib/legacy-exports.js",
|
|
185
|
-
"./lib/notices": "./lib/legacy-exports.js",
|
|
186
|
-
"./lib/index": "./lib/legacy-exports.js",
|
|
187
|
-
"./lib/api/aws-auth/index.js": "./lib/legacy-exports.js",
|
|
188
|
-
"./lib/api/aws-auth": "./lib/legacy-exports.js",
|
|
189
|
-
"./lib/logging": "./lib/legacy-exports.js"
|
|
158
|
+
"./lib/api/bootstrap/bootstrap-template.yaml": "./lib/api/bootstrap/bootstrap-template.yaml"
|
|
190
159
|
},
|
|
191
160
|
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
|
|
192
161
|
}
|
package/lib/legacy/aws-auth.d.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import type { AwsCredentialIdentityProvider, Logger, NodeHttpHandlerOptions } from '@smithy/types';
|
|
2
|
-
import { SdkProvider as SdkProviderCurrentVersion } from '../api/aws-auth';
|
|
3
|
-
/**
|
|
4
|
-
* @deprecated
|
|
5
|
-
*/
|
|
6
|
-
export declare function cached<A extends object, B>(obj: A, sym: symbol, fn: () => B): B;
|
|
7
|
-
/**
|
|
8
|
-
* @deprecated
|
|
9
|
-
*/
|
|
10
|
-
export interface ContextProviderPlugin {
|
|
11
|
-
getValue(args: {
|
|
12
|
-
[key: string]: any;
|
|
13
|
-
}): Promise<any>;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* An AWS account
|
|
17
|
-
* @deprecated
|
|
18
|
-
*/
|
|
19
|
-
export interface Account {
|
|
20
|
-
readonly accountId: string;
|
|
21
|
-
readonly partition: string;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Enable tracing in the CDK
|
|
25
|
-
*
|
|
26
|
-
* @deprecated cannot be enabled from outside the CDK
|
|
27
|
-
*/
|
|
28
|
-
export declare function enableTracing(_enabled: boolean): void;
|
|
29
|
-
/**
|
|
30
|
-
* Options for individual SDKs
|
|
31
|
-
* @deprecated
|
|
32
|
-
*/
|
|
33
|
-
interface SdkHttpOptions {
|
|
34
|
-
/**
|
|
35
|
-
* Proxy address to use
|
|
36
|
-
*
|
|
37
|
-
* @default No proxy
|
|
38
|
-
*/
|
|
39
|
-
readonly proxyAddress?: string;
|
|
40
|
-
/**
|
|
41
|
-
* A path to a certificate bundle that contains a cert to be trusted.
|
|
42
|
-
*
|
|
43
|
-
* @default No certificate bundle
|
|
44
|
-
*/
|
|
45
|
-
readonly caBundlePath?: string;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Options for the default SDK provider
|
|
49
|
-
* @deprecated
|
|
50
|
-
*/
|
|
51
|
-
interface SdkProviderOptions {
|
|
52
|
-
/**
|
|
53
|
-
* Profile to read from ~/.aws
|
|
54
|
-
*
|
|
55
|
-
* @default - No profile
|
|
56
|
-
*/
|
|
57
|
-
readonly profile?: string;
|
|
58
|
-
/**
|
|
59
|
-
* HTTP options for SDK
|
|
60
|
-
*/
|
|
61
|
-
readonly httpOptions?: SdkHttpOptions;
|
|
62
|
-
/**
|
|
63
|
-
* The logger for sdk calls.
|
|
64
|
-
*/
|
|
65
|
-
readonly logger?: Logger;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* @deprecated
|
|
69
|
-
*/
|
|
70
|
-
export declare class SdkProvider {
|
|
71
|
-
static withAwsCliCompatibleDefaults(options?: SdkProviderOptions): Promise<SdkProviderCurrentVersion>;
|
|
72
|
-
constructor(defaultCredentialProvider: AwsCredentialIdentityProvider, defaultRegion: string, requestHandler?: NodeHttpHandlerOptions, logger?: Logger);
|
|
73
|
-
}
|
|
74
|
-
export {};
|
package/lib/legacy/aws-auth.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
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=
|
|
@@ -1,82 +0,0 @@
|
|
|
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 {};
|
|
@@ -1,322 +0,0 @@
|
|
|
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
|
-
assetBuildConcurrency: argv['asset-build-concurrency'],
|
|
247
|
-
assetPrebuild: argv['asset-prebuild'],
|
|
248
|
-
ignoreNoStacks: argv['ignore-no-stacks'],
|
|
249
|
-
hotswap: {
|
|
250
|
-
ecs: {
|
|
251
|
-
minimumHealthyPercent: argv.hotswapEcsMinimumHealthyPercent,
|
|
252
|
-
maximumHealthyPercent: argv.hotswapEcsMaximumHealthyPercent,
|
|
253
|
-
stabilizationTimeoutSeconds: argv.hotswapEcsStabilizationTimeoutSeconds,
|
|
254
|
-
},
|
|
255
|
-
},
|
|
256
|
-
unstable: argv.unstable,
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
function expectStringList(x) {
|
|
260
|
-
if (x === undefined) {
|
|
261
|
-
return undefined;
|
|
262
|
-
}
|
|
263
|
-
if (!Array.isArray(x)) {
|
|
264
|
-
throw new toolkit_lib_1.ToolkitError(`Expected array, got '${x}'`);
|
|
265
|
-
}
|
|
266
|
-
const nonStrings = x.filter((e) => typeof e !== 'string');
|
|
267
|
-
if (nonStrings.length > 0) {
|
|
268
|
-
throw new toolkit_lib_1.ToolkitError(`Expected list of strings, found ${nonStrings}`);
|
|
269
|
-
}
|
|
270
|
-
return x;
|
|
271
|
-
}
|
|
272
|
-
function parseStringContextListToObject(argv) {
|
|
273
|
-
const context = {};
|
|
274
|
-
for (const assignment of argv.context || []) {
|
|
275
|
-
const parts = assignment.split(/=(.*)/, 2);
|
|
276
|
-
if (parts.length === 2) {
|
|
277
|
-
(0, logging_1.debug)('CLI argument context: %s=%s', parts[0], parts[1]);
|
|
278
|
-
if (parts[0].match(/^aws:.+/)) {
|
|
279
|
-
throw new toolkit_lib_1.ToolkitError(`User-provided context cannot use keys prefixed with 'aws:', but ${parts[0]} was provided.`);
|
|
280
|
-
}
|
|
281
|
-
context[parts[0]] = parts[1];
|
|
282
|
-
}
|
|
283
|
-
else {
|
|
284
|
-
(0, logging_1.warning)('Context argument is not an assignment (key=value): %s', assignment);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
return context;
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Parse tags out of arguments
|
|
291
|
-
*
|
|
292
|
-
* Return undefined if no tags were provided, return an empty array if only empty
|
|
293
|
-
* strings were provided
|
|
294
|
-
*/
|
|
295
|
-
function parseStringTagsListToObject(argTags) {
|
|
296
|
-
if (argTags === undefined) {
|
|
297
|
-
return undefined;
|
|
298
|
-
}
|
|
299
|
-
if (argTags.length === 0) {
|
|
300
|
-
return undefined;
|
|
301
|
-
}
|
|
302
|
-
const nonEmptyTags = argTags.filter((t) => t !== '');
|
|
303
|
-
if (nonEmptyTags.length === 0) {
|
|
304
|
-
return [];
|
|
305
|
-
}
|
|
306
|
-
const tags = [];
|
|
307
|
-
for (const assignment of nonEmptyTags) {
|
|
308
|
-
const parts = assignment.split(/=(.*)/, 2);
|
|
309
|
-
if (parts.length === 2) {
|
|
310
|
-
(0, logging_1.debug)('CLI argument tags: %s=%s', parts[0], parts[1]);
|
|
311
|
-
tags.push({
|
|
312
|
-
Key: parts[0],
|
|
313
|
-
Value: parts[1],
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
else {
|
|
317
|
-
(0, logging_1.warning)('Tags argument is not an assignment (key=value): %s', assignment);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
return tags.length > 0 ? tags : undefined;
|
|
321
|
-
}
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQXlCO0FBQ3pCLGdDQUFnQztBQUNoQyxzREFBb0Q7QUFDcEQsK0JBQStCO0FBQy9CLHVDQUEyQztBQUMzQyw0Q0FBeUM7QUFDekMsOENBQTJDO0FBRzlCLFFBQUEsZUFBZSxHQUFHLGtCQUFrQixDQUFDO0FBQ2xELE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBRTlCOztHQUVHO0FBQ0gsSUFBWSxPQTJCWDtBQTNCRCxXQUFZLE9BQU87SUFDakIsb0JBQVMsQ0FBQTtJQUNULHdCQUFhLENBQUE7SUFDYix3QkFBYSxDQUFBO0lBQ2Isa0NBQXVCLENBQUE7SUFDdkIsNEJBQWlCLENBQUE7SUFDakIsOEJBQW1CLENBQUE7SUFDbkIsb0NBQXlCLENBQUE7SUFDekIsMEJBQWUsQ0FBQTtJQUNmLGdDQUFxQixDQUFBO0lBQ3JCLHdCQUFhLENBQUE7SUFDYiw4QkFBbUIsQ0FBQTtJQUNuQiwwQkFBZSxDQUFBO0lBQ2Ysb0JBQVMsQ0FBQTtJQUNULGdDQUFxQixDQUFBO0lBQ3JCLDRCQUFpQixDQUFBO0lBQ2pCLHNDQUEyQixDQUFBO0lBQzNCLHNCQUFXLENBQUE7SUFDWCw4QkFBbUIsQ0FBQTtJQUNuQiw4QkFBbUIsQ0FBQTtJQUNuQiw4QkFBbUIsQ0FBQTtJQUNuQix3QkFBYSxDQUFBO0lBQ2Isc0JBQVcsQ0FBQTtJQUNYLDRCQUFpQixDQUFBO0lBQ2pCLGdDQUFxQixDQUFBO0lBQ3JCLDBCQUFlLENBQUE7SUFDZiwwQ0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBM0JXLE9BQU8sdUJBQVAsT0FBTyxRQTJCbEI7QUFFRCxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLE9BQU8sQ0FBQyxNQUFN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QUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLElBQUksR0FBVSxFQUFFLENBQUM7SUFFdkIsS0FBSyxNQUFNLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBQSxlQUFLLEVBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ1IsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDaEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFBLGlCQUFPLEVBQUMsb0RBQW9ELEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgZnNfcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGRlYnVnLCB3YXJuaW5nIH0gZnJvbSAnLi9sb2dnaW5nJztcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICcuLi9hcGkvY29udGV4dCc7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gJy4uL2FwaS9zZXR0aW5ncyc7XG5pbXBvcnQgdHlwZSB7IFRhZyB9IGZyb20gJy4uL2FwaS90YWdzJztcblxuZXhwb3J0IGNvbnN0IFBST0pFQ1RfQ09OVEVYVCA9ICdjZGsuY29udGV4dC5qc29uJztcbmNvbnN0IFBST0pFQ1RfQ09ORklHID0gJ2Nkay5qc29uJztcbmNvbnN0IFVTRVJfREVGQVVMVFMgPSAnfi8uY2RrLmpzb24nO1xuY29uc3QgQ09OVEVYVF9LRVkgPSAnY29udGV4dCc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqL1xuZXhwb3J0IGVudW0gQ29tbWFuZCB7XG4gIExTID0gJ2xzJyxcbiAgTElTVCA9ICdsaXN0JyxcbiAgRElGRiA9ICdkaWZmJyxcbiAgQk9PVFNUUkFQID0gJ2Jvb3RzdHJhcCcsXG4gIERFUExPWSA9ICdkZXBsb3knLFxuICBERVNUUk9ZID0gJ2Rlc3Ryb3knLFxuICBTWU5USEVTSVpFID0gJ3N5bnRoZXNpemUnLFxuICBTWU5USCA9ICdzeW50aCcsXG4gIE1FVEFEQVRBID0gJ21ldGFkYXRhJyxcbiAgSU5JVCA9ICdpbml0JyxcbiAgVkVSU0lPTiA9ICd2ZXJzaW9uJyxcbiAgV0FUQ0ggPSAnd2F0Y2gnLFxuICBHQyA9ICdnYycsXG4gIFJPTExCQUNLID0gJ3JvbGxiYWNrJyxcbiAgSU1QT1JUID0gJ2ltcG9ydCcsXG4gIEFDS05PV0xFREdFID0gJ2Fja25vd2xlZGdlJyxcbiAgQUNLID0gJ2FjaycsXG4gIE5PVElDRVMgPSAnbm90aWNlcycsXG4gIE1JR1JBVEUgPSAnbWlncmF0ZScsXG4gIENPTlRFWFQgPSAnY29udGV4dCcsXG4gIERPQ1MgPSAnZG9jcycsXG4gIERPQyA9ICdkb2MnLFxuICBET0NUT1IgPSAnZG9jdG9yJyxcbiAgUkVGQUNUT1IgPSAncmVmYWN0b3InLFxuICBEUklGVCA9ICdkcmlmdCcsXG4gIENMSV9URUxFTUVUUlkgPSAnY2xpLXRlbGVtZXRyeScsXG59XG5cbmNvbnN0IEJVTkRMSU5HX0NPTU1BTkRTID0gW1xuICBDb21tYW5kLkRFUExPWSxcbiAgQ29tbWFuZC5ESUZGLFxuICBDb21tYW5kLlNZTlRILFxuICBDb21tYW5kLlNZTlRIRVNJWkUsXG4gIENvbW1hbmQuV0FUQ0gsXG4gIENvbW1hbmQuSU1QT1JULFxuXTtcblxudHlwZSBBcmd1bWVudHMgPSB7XG4gIHJlYWRvbmx5IF86IFtDb21tYW5kLCAuLi5zdHJpbmdbXV07XG4gIHJlYWRvbmx5IGV4Y2x1c2l2ZWx5PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgU1RBQ0tTPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGxvb2t1cHM/OiBib29sZWFuO1xuICByZWFkb25seSBbbmFtZTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmludGVyZmFjZSBDb25maWd1cmF0aW9uUHJvcHMge1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBwYXNzZWQgdmlhIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb3RoaW5nIHBhc3NlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZExpbmVBcmd1bWVudHM/OiBBcmd1bWVudHM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHVzZSBjb250ZXh0IGZyb20gYC5jZGsuanNvbmAgaW4gdXNlciBob21lIGRpcmVjdG9yeVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZWFkVXNlckNvbnRleHQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFsbCBzb3VyY2VzIG9mIHNldHRpbmdzIGNvbWJpbmVkXG4gKiBAZGVwcmVjYXRlZFxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbiB7XG4gIHB1YmxpYyBzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncygpO1xuICBwdWJsaWMgY29udGV4dCA9IG5ldyBDb250ZXh0KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRDb25maWcgPSBuZXcgU2V0dGluZ3Moe1xuICAgIHZlcnNpb25SZXBvcnRpbmc6IHRydWUsXG4gICAgYXNzZXRNZXRhZGF0YTogdHJ1ZSxcbiAgICBwYXRoTWV0YWRhdGE6IHRydWUsXG4gICAgb3V0cHV0OiAnY2RrLm91dCcsXG4gIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZExpbmVBcmd1bWVudHM6IFNldHRpbmdzO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbW1hbmRMaW5lQ29udGV4dDogU2V0dGluZ3M7XG4gIHByaXZhdGUgX3Byb2plY3RDb25maWc/OiBTZXR0aW5ncztcbiAgcHJpdmF0ZSBfcHJvamVjdENvbnRleHQ/OiBTZXR0aW5ncztcbiAgcHJpdmF0ZSBsb2FkZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBDb25maWd1cmF0aW9uUHJvcHMgPSB7fSkge1xuICAgIHRoaXMuY29tbWFuZExpbmVBcmd1bWVudHMgPSBwcm9wcy5jb21tYW5kTGluZUFyZ3VtZW50c1xuICAgICAgPyBjb21tYW5kTGluZUFyZ3VtZW50c1RvU2V0dGluZ3MocHJvcHMuY29tbWFuZExpbmVBcmd1bWVudHMpXG4gICAgICA6IG5ldyBTZXR0aW5ncygpO1xuICAgIHRoaXMuY29tbWFuZExpbmVDb250ZXh0ID0gdGhpcy5jb21tYW5kTGluZUFyZ3VtZW50c1xuICAgICAgLnN1YlNldHRpbmdzKFtDT05URVhUX0tFWV0pXG4gICAgICAubWFrZVJlYWRPbmx5KCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBwcm9qZWN0Q29uZmlnKCkge1xuICAgIGlmICghdGhpcy5fcHJvamVjdENvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignI2xvYWQgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQhJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9wcm9qZWN0Q29uZmlnO1xuICB9XG5cbiAgcHVibGljIGdldCBwcm9qZWN0Q29udGV4dCgpIHtcbiAgICBpZiAoIXRoaXMuX3Byb2plY3RDb250ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCcjbG9hZCBoYXMgbm90IGJlZW4gY2FsbGVkIHlldCEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Byb2plY3RDb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYWxsIGNvbmZpZ1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgY29uc3QgdXNlckNvbmZpZyA9IGF3YWl0IGxvYWRBbmRMb2coVVNFUl9ERUZBVUxUUyk7XG4gICAgdGhpcy5fcHJvamVjdENvbmZpZyA9IGF3YWl0IGxvYWRBbmRMb2coUFJPSkVDVF9DT05GSUcpO1xuICAgIHRoaXMuX3Byb2plY3RDb250ZXh0ID0gYXdhaXQgbG9hZEFuZExvZyhQUk9KRUNUX0NPTlRFWFQpO1xuXG4gICAgLy8gQHRvZG8gY2Fubm90IGN1cnJlbnRseSBiZSBkaXNhYmxlZCBieSBjbGkgdXNlcnNcbiAgICBjb25zdCByZWFkVXNlckNvbnRleHQgPSB0aGlzLnByb3BzLnJlYWRVc2VyQ29udGV4dCA/PyB0cnVlO1xuXG4gICAgaWYgKHVzZXJDb25maWcuZ2V0KFsnYnVpbGQnXSkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICdUaGUgYGJ1aWxkYCBrZXkgY2Fubm90IGJlIHNwZWNpZmllZCBpbiB0aGUgdXNlciBjb25maWcgKH4vLmNkay5qc29uKSwgc3BlY2lmeSBpdCBpbiB0aGUgcHJvamVjdCBjb25maWcgKGNkay5qc29uKSBpbnN0ZWFkJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dFNvdXJjZXMgPSBbXG4gICAgICB7IGJhZzogdGhpcy5jb21tYW5kTGluZUNvbnRleHQgfSxcbiAgICAgIHtcbiAgICAgICAgZmlsZU5hbWU6IFBST0pFQ1RfQ09ORklHLFxuICAgICAgICBiYWc6IHRoaXMucHJvamVjdENvbmZpZy5zdWJTZXR0aW5ncyhbQ09OVEVYVF9LRVldKS5tYWtlUmVhZE9ubHkoKSxcbiAgICAgIH0sXG4gICAgICB7IGZpbGVOYW1lOiBQUk9KRUNUX0NPTlRFWFQsIGJhZzogdGhpcy5wcm9qZWN0Q29udGV4dCB9LFxuICAgIF07XG4gICAgaWYgKHJlYWRVc2VyQ29udGV4dCkge1xuICAgICAgY29udGV4dFNvdXJjZXMucHVzaCh7XG4gICAgICAgIGZpbGVOYW1lOiBVU0VSX0RFRkFVTFRTLFxuICAgICAgICBiYWc6IHVzZXJDb25maWcuc3ViU2V0dGluZ3MoW0NPTlRFWFRfS0VZXSkubWFrZVJlYWRPbmx5KCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgQ29udGV4dCguLi5jb250ZXh0U291cmNlcyk7XG5cbiAgICAvLyBCdWlsZCBzZXR0aW5ncyBmcm9tIHdoYXQncyBsZWZ0XG4gICAgdGhpcy5zZXR0aW5ncyA9IHRoaXMuZGVmYXVsdENvbmZpZ1xuICAgICAgLm1lcmdlKHVzZXJDb25maWcpXG4gICAgICAubWVyZ2UodGhpcy5wcm9qZWN0Q29uZmlnKVxuICAgICAgLm1lcmdlKHRoaXMuY29tbWFuZExpbmVBcmd1bWVudHMpXG4gICAgICAubWFrZVJlYWRPbmx5KCk7XG5cbiAgICBkZWJ1ZygnbWVyZ2VkIHNldHRpbmdzOicsIHRoaXMuc2V0dGluZ3MuYWxsKTtcblxuICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIHByb2plY3QgY29udGV4dFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNhdmVDb250ZXh0KCk6IFByb21pc2U8dGhpcz4ge1xuICAgIGlmICghdGhpcy5sb2FkZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gLy8gQXZvaWQgb3ZlcndyaXRpbmcgZmlsZXMgd2l0aCBub3RoaW5nXG5cbiAgICBhd2FpdCB0aGlzLnByb2plY3RDb250ZXh0LnNhdmUoUFJPSkVDVF9DT05URVhUKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRBbmRMb2coZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8U2V0dGluZ3M+IHtcbiAgY29uc3QgcmV0ID0gYXdhaXQgc2V0dGluZ3NGcm9tRmlsZShmaWxlTmFtZSk7XG4gIGlmICghcmV0LmVtcHR5KSB7XG4gICAgZGVidWcoZmlsZU5hbWUgKyAnOicsIEpTT04uc3RyaW5naWZ5KHJldC5hbGwsIHVuZGVmaW5lZCwgMikpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldHRpbmdzRnJvbUZpbGUoZmlsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8U2V0dGluZ3M+IHtcbiAgbGV0IHNldHRpbmdzO1xuICBjb25zdCBleHBhbmRlZCA9IGV4cGFuZEhvbWVEaXIoZmlsZU5hbWUpO1xuICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhleHBhbmRlZCkpIHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZnMucmVhZEpzb24oZXhwYW5kZWQpO1xuICAgIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIHNldHRpbmdzID0gbmV3IFNldHRpbmdzKCk7XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy81OVxuICBwcm9oaWJpdENvbnRleHRLZXlzKHNldHRpbmdzLCBbJ2RlZmF1bHQtYWNjb3VudCcsICdkZWZhdWx0LXJlZ2lvbiddLCBmaWxlTmFtZSk7XG4gIHdhcm5BYm91dENvbnRleHRLZXkoc2V0dGluZ3MsICdhd3M6JywgZmlsZU5hbWUpO1xuXG4gIHJldHVybiBzZXR0aW5ncztcbn1cblxuZnVuY3Rpb24gcHJvaGliaXRDb250ZXh0S2V5cyhzZXR0aW5nczogU2V0dGluZ3MsIGtleXM6IHN0cmluZ1tdLCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBzZXR0aW5ncy5nZXQoWydjb250ZXh0J10pO1xuICBpZiAoIWNvbnRleHQgfHwgdHlwZW9mIGNvbnRleHQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmIChrZXkgaW4gY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgYFRoZSAnY29udGV4dC4ke2tleX0nIGtleSB3YXMgZm91bmQgaW4gJHtmc19wYXRoLnJlc29sdmUoXG4gICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICl9LCBidXQgaXQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHJlbW92ZSBpdC5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybkFib3V0Q29udGV4dEtleShzZXR0aW5nczogU2V0dGluZ3MsIHByZWZpeDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBzZXR0aW5ncy5nZXQoWydjb250ZXh0J10pO1xuICBpZiAoIWNvbnRleHQgfHwgdHlwZW9mIGNvbnRleHQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCBjb250ZXh0S2V5IG9mIE9iamVjdC5rZXlzKGNvbnRleHQpKSB7XG4gICAgaWYgKGNvbnRleHRLZXkuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICB3YXJuaW5nKFxuICAgICAgICBgQSByZXNlcnZlZCBjb250ZXh0IGtleSAoJ2NvbnRleHQuJHtwcmVmaXh9Jykga2V5IHdhcyBmb3VuZCBpbiAke2ZzX3BhdGgucmVzb2x2ZShcbiAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgKX0sIGl0IG1pZ2h0IGNhdXNlIHN1cnByaXNpbmcgYmVoYXZpb3IgYW5kIHNob3VsZCBiZSByZW1vdmVkLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBleHBhbmRIb21lRGlyKHg6IHN0cmluZykge1xuICBpZiAoeC5zdGFydHNXaXRoKCd+JykpIHtcbiAgICByZXR1cm4gZnNfcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgeC5zbGljZSgxKSk7XG4gIH1cbiAgcmV0dXJuIHg7XG59XG5cbi8qKlxuICogUGFyc2UgQ0xJIGFyZ3VtZW50cyBpbnRvIFNldHRpbmdzXG4gKlxuICogQ0xJIGFyZ3VtZW50cyBpbiBtdXN0IGJlIGFjY2Vzc2VkIGluIHRoZSBDTEkgY29kZSB2aWFcbiAqIGBjb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2FyZ05hbWUnXSlgIGluc3RlYWQgb2YgdmlhIGBhcmdzLmFyZ05hbWVgLlxuICpcbiAqIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCB0aGV5IGNhbiBiZSBjb25maWd1cmVkIHZpYSBgY2RrLmpzb25gIGFuZFxuICogYCRIT01FLy5jZGsuanNvbmAuIEFyZ3VtZW50cyBub3QgbGlzdGVkIGJlbG93IGFuZCBhY2Nlc3NlZCB2aWEgdGhpcyBvYmplY3RcbiAqIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLlxuICpcbiAqIEBwYXJhbSBhcmd2IC0gdGhlIHJlY2VpdmVkIENMSSBhcmd1bWVudHMuXG4gKiBAcmV0dXJucyBhIG5ldyBTZXR0aW5ncyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNvbW1hbmRMaW5lQXJndW1lbnRzVG9TZXR0aW5ncyhhcmd2OiBBcmd1bWVudHMpOiBTZXR0aW5ncyB7XG4gIGNvbnN0IGNvbnRleHQgPSBwYXJzZVN0cmluZ0NvbnRleHRMaXN0VG9PYmplY3QoYXJndik7XG4gIGNvbnN0IHRhZ3MgPSBwYXJzZVN0cmluZ1RhZ3NMaXN0VG9PYmplY3QoZXhwZWN0U3RyaW5nTGlzdChhcmd2LnRhZ3MpKTtcblxuICAvLyBEZXRlcm1pbmUgYnVuZGxpbmcgc3RhY2tzXG4gIGxldCBidW5kbGluZ1N0YWNrczogc3RyaW5nW107XG4gIGlmIChCVU5ETElOR19DT01NQU5EUy5pbmNsdWRlcyhhcmd2Ll9bMF0pKSB7XG4gICAgLy8gSWYgd2UgZGVwbG95LCBkaWZmLCBzeW50aCBvciB3YXRjaCBhIGxpc3Qgb2Ygc3RhY2tzIGV4Y2x1c2l2ZWx5IHdlIHNraXBcbiAgICAvLyBidW5kbGluZyBmb3IgYWxsIG90aGVyIHN0YWNrcy5cbiAgICBidW5kbGluZ1N0YWNrcyA9IGFyZ3YuZXhjbHVzaXZlbHkgPyBhcmd2LlNUQUNLUyA/PyBbJyoqJ10gOiBbJyoqJ107XG4gIH0gZWxzZSB7XG4gICAgLy8gU2tpcCBidW5kbGluZyBmb3IgYWxsIHN0YWNrc1xuICAgIGJ1bmRsaW5nU3RhY2tzID0gW107XG4gIH1cblxuICByZXR1cm4gbmV3IFNldHRpbmdzKHtcbiAgICBhcHA6IGFyZ3YuYXBwLFxuICAgIGJyb3dzZXI6IGFyZ3YuYnJvd3NlcixcbiAgICBidWlsZDogYXJndi5idWlsZCxcbiAgICBjYUJ1bmRsZVBhdGg6IGFyZ3YuY2FCdW5kbGVQYXRoLFxuICAgIGNvbnRleHQsXG4gICAgZGVidWc6IGFyZ3YuZGVidWcsXG4gICAgdGFncyxcbiAgICBsYW5ndWFnZTogYXJndi5sYW5ndWFnZSxcbiAgICBwYXRoTWV0YWRhdGE6IGFyZ3YucGF0aE1ldGFkYXRhLFxuICAgIGFzc2V0TWV0YWRhdGE6IGFyZ3YuYXNzZXRNZXRhZGF0YSxcbiAgICBwcm9maWxlOiBhcmd2LnByb2ZpbGUsXG4gICAgcGx1Z2luOiBhcmd2LnBsdWdpbixcbiAgICByZXF1aXJlQXBwcm92YWw6IGFyZ3YucmVxdWlyZUFwcHJvdmFsLFxuICAgIHRvb2xraXRTdGFja05hbWU6IGFyZ3YudG9vbGtpdFN0YWNrTmFtZSxcbiAgICB0b29sa2l0QnVja2V0OiB7XG4gICAgICBidWNrZXROYW1lOiBhcmd2LmJvb3RzdHJhcEJ1Y2tldE5hbWUsXG4gICAgICBrbXNLZXlJZDogYXJndi5ib290c3RyYXBLbXNLZXlJZCxcbiAgICB9LFxuICAgIHZlcnNpb25SZXBvcnRpbmc6IGFyZ3YudmVyc2lvblJlcG9ydGluZyxcbiAgICBzdGFnaW5nOiBhcmd2LnN0YWdpbmcsXG4gICAgb3V0cHV0OiBhcmd2Lm91dHB1dCxcbiAgICBvdXRwdXRzRmlsZTogYXJndi5vdXRwdXRzRmlsZSxcbiAgICBwcm9ncmVzczogYXJndi5wcm9ncmVzcyxcbiAgICBwcm94eTogYXJndi5wcm94eSxcbiAgICBidW5kbGluZ1N0YWNrcyxcbiAgICBsb29rdXBzOiBhcmd2Lmxvb2t1cHMsXG4gICAgcm9sbGJhY2s6IGFyZ3Yucm9sbGJhY2ssXG4gICAgbm90aWNlczogYXJndi5ub3RpY2VzLFxuICAgIGFzc2V0UGFyYWxsZWxpc206IGFyZ3ZbJ2Fzc2V0LXBhcmFsbGVsaXNtJ10sXG4gICAgYXNzZXRCdWlsZENvbmN1cnJlbmN5OiBhcmd2Wydhc3NldC1idWlsZC1jb25jdXJyZW5jeSddLFxuICAgIGFzc2V0UHJlYnVpbGQ6IGFyZ3ZbJ2Fzc2V0LXByZWJ1aWxkJ10sXG4gICAgaWdub3JlTm9TdGFja3M6IGFyZ3ZbJ2lnbm9yZS1uby1zdGFja3MnXSxcbiAgICBob3Rzd2FwOiB7XG4gICAgICBlY3M6IHtcbiAgICAgICAgbWluaW11bUhlYWx0aHlQZXJjZW50OiBhcmd2LmhvdHN3YXBFY3NNaW5pbXVtSGVhbHRoeVBlcmNlbnQsXG4gICAgICAgIG1heGltdW1IZWFsdGh5UGVyY2VudDogYXJndi5ob3Rzd2FwRWNzTWF4aW11bUhlYWx0aHlQZXJjZW50LFxuICAgICAgICBzdGFiaWxpemF0aW9uVGltZW91dFNlY29uZHM6IGFyZ3YuaG90c3dhcEVjc1N0YWJpbGl6YXRpb25UaW1lb3V0U2Vjb25kcyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB1bnN0YWJsZTogYXJndi51bnN0YWJsZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4cGVjdFN0cmluZ0xpc3QoeDogdW5rbm93bik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgRXhwZWN0ZWQgYXJyYXksIGdvdCAnJHt4fSdgKTtcbiAgfVxuICBjb25zdCBub25TdHJpbmdzID0geC5maWx0ZXIoKGUpID0+IHR5cGVvZiBlICE9PSAnc3RyaW5nJyk7XG4gIGlmIChub25TdHJpbmdzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBFeHBlY3RlZCBsaXN0IG9mIHN0cmluZ3MsIGZvdW5kICR7bm9uU3RyaW5nc31gKTtcbiAgfVxuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHJpbmdDb250ZXh0TGlzdFRvT2JqZWN0KGFyZ3Y6IEFyZ3VtZW50cyk6IGFueSB7XG4gIGNvbnN0IGNvbnRleHQ6IGFueSA9IHt9O1xuXG4gIGZvciAoY29uc3QgYXNzaWdubWVudCBvZiAoYXJndiBhcyBhbnkpLmNvbnRleHQgfHwgW10pIHtcbiAgICBjb25zdCBwYXJ0cyA9IGFzc2lnbm1lbnQuc3BsaXQoLz0oLiopLywgMik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgZGVidWcoJ0NMSSBhcmd1bWVudCBjb250ZXh0OiAlcz0lcycsIHBhcnRzWzBdLCBwYXJ0c1sxXSk7XG4gICAgICBpZiAocGFydHNbMF0ubWF0Y2goL15hd3M6LisvKSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgIGBVc2VyLXByb3ZpZGVkIGNvbnRleHQgY2Fubm90IHVzZSBrZXlzIHByZWZpeGVkIHdpdGggJ2F3czonLCBidXQgJHtwYXJ0c1swXX0gd2FzIHByb3ZpZGVkLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb250ZXh0W3BhcnRzWzBdXSA9IHBhcnRzWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuaW5nKFxuICAgICAgICAnQ29udGV4dCBhcmd1bWVudCBpcyBub3QgYW4gYXNzaWdubWVudCAoa2V5PXZhbHVlKTogJXMnLFxuICAgICAgICBhc3NpZ25tZW50LFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbi8qKlxuICogUGFyc2UgdGFncyBvdXQgb2YgYXJndW1lbnRzXG4gKlxuICogUmV0dXJuIHVuZGVmaW5lZCBpZiBubyB0YWdzIHdlcmUgcHJvdmlkZWQsIHJldHVybiBhbiBlbXB0eSBhcnJheSBpZiBvbmx5IGVtcHR5XG4gKiBzdHJpbmdzIHdlcmUgcHJvdmlkZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdHJpbmdUYWdzTGlzdFRvT2JqZWN0KFxuICBhcmdUYWdzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbik6IFRhZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGFyZ1RhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGFyZ1RhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBub25FbXB0eVRhZ3MgPSBhcmdUYWdzLmZpbHRlcigodCkgPT4gdCAhPT0gJycpO1xuICBpZiAobm9uRW1wdHlUYWdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHRhZ3M6IFRhZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIG5vbkVtcHR5VGFncykge1xuICAgIGNvbnN0IHBhcnRzID0gYXNzaWdubWVudC5zcGxpdCgvPSguKikvLCAyKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICBkZWJ1ZygnQ0xJIGFyZ3VtZW50IHRhZ3M6ICVzPSVzJywgcGFydHNbMF0sIHBhcnRzWzFdKTtcbiAgICAgIHRhZ3MucHVzaCh7XG4gICAgICAgIEtleTogcGFydHNbMF0sXG4gICAgICAgIFZhbHVlOiBwYXJ0c1sxXSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuaW5nKCdUYWdzIGFyZ3VtZW50IGlzIG5vdCBhbiBhc3NpZ25tZW50IChrZXk9dmFsdWUpOiAlcycsIGFzc2lnbm1lbnQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGFncy5sZW5ndGggPiAwID8gdGFncyA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|