aws-cdk 2.0.0 → 2.4.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/LICENSE +1 -1
- package/NOTICE +1 -1
- package/README.md +5 -1
- package/bin/cdk.js +5 -3
- package/build-info.json +2 -2
- package/lib/api/aws-auth/sdk-provider.js +11 -21
- package/lib/api/aws-auth/sdk.d.ts +2 -0
- package/lib/api/aws-auth/sdk.js +4 -1
- package/lib/api/bootstrap/bootstrap-template.yaml +4 -1
- package/lib/api/deploy-stack.js +7 -1
- package/lib/api/hotswap/code-build-projects.d.ts +3 -0
- package/lib/api/hotswap/code-build-projects.js +53 -0
- package/lib/api/hotswap/common.d.ts +17 -1
- package/lib/api/hotswap/common.js +30 -6
- package/lib/api/hotswap/ecs-services.js +4 -18
- package/lib/api/hotswap/evaluate-cloudformation-template.d.ts +1 -0
- package/lib/api/hotswap/evaluate-cloudformation-template.js +6 -1
- package/lib/api/hotswap/lambda-functions.d.ts +2 -2
- package/lib/api/hotswap/lambda-functions.js +171 -46
- package/lib/api/hotswap/s3-bucket-deployments.d.ts +8 -0
- package/lib/api/hotswap/s3-bucket-deployments.js +106 -0
- package/lib/api/hotswap/stepfunctions-state-machines.js +11 -7
- package/lib/api/hotswap-deployments.d.ts +0 -7
- package/lib/api/hotswap-deployments.js +86 -12
- package/lib/cdk-toolkit.js +50 -16
- package/lib/commands/docs.js +2 -2
- package/lib/context-providers/index.d.ts +10 -5
- package/lib/context-providers/index.js +32 -19
- package/lib/context-providers/provider.d.ts +1 -0
- package/lib/context-providers/provider.js +6 -1
- package/lib/context-providers/vpcs.js +19 -5
- package/lib/init.js +2 -1
- package/lib/plugin.d.ts +20 -0
- package/lib/plugin.js +28 -1
- package/lib/util/asset-publishing.js +9 -2
- package/lib/util/npm.d.ts +1 -0
- package/lib/util/npm.js +21 -0
- package/lib/version.d.ts +1 -1
- package/lib/version.js +22 -19
- package/npm-shrinkwrap.json +181 -48
- package/package.json +18 -18
- package/test/api/cloud-executable.test.js +3 -3
- package/test/api/hotswap/{lambda-hotswap-deployments.test.d.ts → code-build-projects-hotswap-deployments.test.d.ts} +0 -0
- package/test/api/hotswap/code-build-projects-hotswap-deployments.test.js +576 -0
- package/test/api/hotswap/hotswap-deployments.test.js +4 -2
- package/test/api/hotswap/hotswap-test-setup.d.ts +4 -1
- package/test/api/hotswap/hotswap-test-setup.js +13 -4
- package/test/api/hotswap/lambda-functions-hotswap-deployments.test.d.ts +1 -0
- package/test/api/hotswap/lambda-functions-hotswap-deployments.test.js +502 -0
- package/test/api/hotswap/lambda-versions-aliases-hotswap-deployments.test.d.ts +1 -0
- package/test/api/hotswap/lambda-versions-aliases-hotswap-deployments.test.js +197 -0
- package/test/api/hotswap/s3-bucket-hotswap-deployments.test.d.ts +1 -0
- package/test/api/hotswap/s3-bucket-hotswap-deployments.test.js +678 -0
- package/test/api/hotswap/state-machine-hotswap-deployments.test.js +12 -11
- package/test/cdk-toolkit.test.js +11 -4
- package/test/context-providers/asymmetric-vpcs.test.js +260 -16
- package/test/context-providers/generic.test.js +40 -7
- package/test/context-providers/vpcs.test.js +179 -5
- package/test/init.test.js +5 -4
- package/test/integ/cli/app/app.js +17 -2
- package/test/integ/cli/cli.integtest.js +13 -1
- package/test/integ/helpers/cdk.js +2 -1
- package/test/util/mock-sdk.d.ts +2 -0
- package/test/util/mock-sdk.js +5 -1
- package/test/version.test.js +45 -3
- package/test/api/hotswap/lambda-hotswap-deployments.test.js +0 -418
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const plugin_1 = require("../../lib/plugin");
|
|
3
4
|
const contextproviders = require("../../lib/context-providers");
|
|
4
5
|
const settings_1 = require("../../lib/settings");
|
|
5
6
|
const mock_sdk_1 = require("../util/mock-sdk");
|
|
@@ -7,10 +8,10 @@ const mockSDK = new mock_sdk_1.MockSdkProvider();
|
|
|
7
8
|
const TEST_PROVIDER = 'testprovider';
|
|
8
9
|
test('errors are reported into the context value', async () => {
|
|
9
10
|
// GIVEN
|
|
10
|
-
contextproviders.registerContextProvider(TEST_PROVIDER,
|
|
11
|
+
contextproviders.registerContextProvider(TEST_PROVIDER, {
|
|
11
12
|
async getValue(_) {
|
|
12
13
|
throw new Error('Something went wrong');
|
|
13
|
-
}
|
|
14
|
+
},
|
|
14
15
|
});
|
|
15
16
|
const context = new settings_1.Context();
|
|
16
17
|
// WHEN
|
|
@@ -24,7 +25,7 @@ test('errors are reported into the context value', async () => {
|
|
|
24
25
|
});
|
|
25
26
|
test('lookup role ARN is resolved', async () => {
|
|
26
27
|
// GIVEN
|
|
27
|
-
contextproviders.registerContextProvider(TEST_PROVIDER,
|
|
28
|
+
contextproviders.registerContextProvider(TEST_PROVIDER, {
|
|
28
29
|
async getValue(args) {
|
|
29
30
|
if (args.lookupRoleArn == null) {
|
|
30
31
|
throw new Error('No lookupRoleArn');
|
|
@@ -33,7 +34,7 @@ test('lookup role ARN is resolved', async () => {
|
|
|
33
34
|
throw new Error('Partition not resolved');
|
|
34
35
|
}
|
|
35
36
|
return 'some resolved value';
|
|
36
|
-
}
|
|
37
|
+
},
|
|
37
38
|
});
|
|
38
39
|
const context = new settings_1.Context();
|
|
39
40
|
// WHEN
|
|
@@ -53,10 +54,10 @@ test('lookup role ARN is resolved', async () => {
|
|
|
53
54
|
});
|
|
54
55
|
test('errors are marked transient', async () => {
|
|
55
56
|
// GIVEN
|
|
56
|
-
contextproviders.registerContextProvider(TEST_PROVIDER,
|
|
57
|
+
contextproviders.registerContextProvider(TEST_PROVIDER, {
|
|
57
58
|
async getValue(_) {
|
|
58
59
|
throw new Error('Something went wrong');
|
|
59
|
-
}
|
|
60
|
+
},
|
|
60
61
|
});
|
|
61
62
|
const context = new settings_1.Context();
|
|
62
63
|
// WHEN
|
|
@@ -66,4 +67,36 @@ test('errors are marked transient', async () => {
|
|
|
66
67
|
// THEN - error is marked transient
|
|
67
68
|
expect(context.get('asdf')[settings_1.TRANSIENT_CONTEXT_KEY]).toBeTruthy();
|
|
68
69
|
});
|
|
69
|
-
|
|
70
|
+
test('context provider can be registered using PluginHost', async () => {
|
|
71
|
+
let called = false;
|
|
72
|
+
// GIVEN
|
|
73
|
+
plugin_1.PluginHost.instance.registerContextProviderAlpha(TEST_PROVIDER, {
|
|
74
|
+
async getValue(_) {
|
|
75
|
+
called = true;
|
|
76
|
+
return '';
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
const context = new settings_1.Context();
|
|
80
|
+
// WHEN
|
|
81
|
+
await contextproviders.provideContextValues([
|
|
82
|
+
{ key: 'asdf', props: { account: '1234', region: 'us-east-1' }, provider: TEST_PROVIDER },
|
|
83
|
+
], context, mockSDK);
|
|
84
|
+
// THEN - error is marked transient
|
|
85
|
+
expect(called).toEqual(true);
|
|
86
|
+
});
|
|
87
|
+
test('context provider can be called without account/region', async () => {
|
|
88
|
+
// GIVEN
|
|
89
|
+
plugin_1.PluginHost.instance.registerContextProviderAlpha(TEST_PROVIDER, {
|
|
90
|
+
async getValue(_) {
|
|
91
|
+
return 'yay';
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
const context = new settings_1.Context();
|
|
95
|
+
// WHEN
|
|
96
|
+
await contextproviders.provideContextValues([
|
|
97
|
+
{ key: 'asdf', props: { banana: 'yellow' }, provider: TEST_PROVIDER },
|
|
98
|
+
], context, mockSDK);
|
|
99
|
+
// THEN - error is marked transient
|
|
100
|
+
expect(context.get('asdf')).toEqual('yay');
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2VuZXJpYy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQThDO0FBQzlDLGdFQUFnRTtBQUNoRSxpREFBb0U7QUFDcEUsK0NBQW1EO0FBRW5ELE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQWUsRUFBRSxDQUFDO0FBRXRDLE1BQU0sYUFBYSxHQUFRLGNBQWMsQ0FBQztBQUUxQyxJQUFJLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDNUQsUUFBUTtJQUNSLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLGFBQWEsRUFBRTtRQUN0RCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQXVCO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMxQyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBTyxFQUFFLENBQUM7SUFFOUIsT0FBTztJQUNQLE1BQU0sZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7UUFDMUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUU7S0FDMUYsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFckIsaUNBQWlDO0lBRWpDLGtFQUFrRTtJQUNsRSx5QkFBeUI7SUFDekIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDN0MsUUFBUTtJQUNSLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLGFBQWEs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QUksRUFBRTtJQUN2RSxRQUFRO0lBQ1IsbUJBQVUsQ0FBQyxRQUFRLENBQUMsNEJBQTRCLENBQUMsYUFBYSxFQUFFO1FBQzlELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBdUI7WUFDcEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBTyxFQUFFLENBQUM7SUFFOUIsT0FBTztJQUNQLE1BQU0sZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7UUFDMUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFO0tBQzdFLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXJCLG1DQUFtQztJQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsdWdpbkhvc3QgfSBmcm9tICcuLi8uLi9saWIvcGx1Z2luJztcbmltcG9ydCAqIGFzIGNvbnRleHRwcm92aWRlcnMgZnJvbSAnLi4vLi4vbGliL2NvbnRleHQtcHJvdmlkZXJzJztcbmltcG9ydCB7IENvbnRleHQsIFRSQU5TSUVOVF9DT05URVhUX0tFWSB9IGZyb20gJy4uLy4uL2xpYi9zZXR0aW5ncyc7XG5pbXBvcnQgeyBNb2NrU2RrUHJvdmlkZXIgfSBmcm9tICcuLi91dGlsL21vY2stc2RrJztcblxuY29uc3QgbW9ja1NESyA9IG5ldyBNb2NrU2RrUHJvdmlkZXIoKTtcblxuY29uc3QgVEVTVF9QUk9WSURFUjogYW55ID0gJ3Rlc3Rwcm92aWRlcic7XG5cbnRlc3QoJ2Vycm9ycyBhcmUgcmVwb3J0ZWQgaW50byB0aGUgY29udGV4dCB2YWx1ZScsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29udGV4dHByb3ZpZGVycy5yZWdpc3RlckNvbnRleHRQcm92aWRlcihURVNUX1BST1ZJREVSLCB7XG4gICAgYXN5bmMgZ2V0VmFsdWUoXzoge1trZXk6IHN0cmluZ106IGFueX0pOiBQcm9taXNlPGFueT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21ldGhpbmcgd2VudCB3cm9uZycpO1xuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQoKTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGNvbnRleHRwcm92aWRlcnMucHJvdmlkZUNvbnRleHRWYWx1ZXMoW1xuICAgIHsga2V5OiAnYXNkZicsIHByb3BzOiB7IGFjY291bnQ6ICcxMjM0JywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LCBwcm92aWRlcjogVEVTVF9QUk9WSURFUiB9LFxuICBdLCBjb250ZXh0LCBtb2NrU0RLKTtcblxuICAvLyBUSEVOIC0gZXJyb3IgaXMgbm93IGluIGNvbnRleHRcblxuICAvLyBOT1RFOiBlcnJvciBrZXkgaXMgaW5saW5lZCBoZXJlIGJlY2F1c2UgaXQncyBwYXJ0IG9mIHRoZSBDWC1BUElcbiAgLy8gY29tcGF0aWJpbGl0eSBzdXJmYWNlLlxuICBleHBlY3QoY29udGV4dC5nZXQoJ2FzZGYnKS4kcHJvdmlkZXJFcnJvcikudG9CZSgnU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcbn0pO1xuXG50ZXN0KCdsb29rdXAgcm9sZSBBUk4gaXMgcmVzb2x2ZWQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnRleHRwcm92aWRlcnMucmVnaXN0ZXJDb250ZXh0UHJvdmlkZXIoVEVTVF9QUk9WSURFUiwge1xuICAgIGFzeW5jIGdldFZhbHVlKGFyZ3M6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIGlmIChhcmdzLmxvb2t1cFJvbGVBcm4gPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGxvb2t1cFJvbGVBcm4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZ3MubG9va3VwUm9sZUFybi5pbmNsdWRlcygnJHtBV1M6OlBhcnRpdGlvbn0nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnRpdGlvbiBub3QgcmVzb2x2ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdzb21lIHJlc29sdmVkIHZhbHVlJztcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBjb250ZXh0cHJvdmlkZXJzLnByb3ZpZGVDb250ZXh0VmFsdWVzKFtcbiAgICB7XG4gICAgICBrZXk6ICdhc2RmJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0JyxcbiAgICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICAgICAgbG9va3VwUm9sZUFybjogJ2Fybjoke0FXUzo6UGFydGl0aW9ufTppYW06OjI4MDYxOTk0Nzc5MTpyb2xlL2Nkay1obmI2NTlmZHMtbG9va3VwLXJvbGUtMjgwNjE5OTQ3NzkxLXVzLWVhc3QtMScsXG4gICAgICB9LFxuICAgICAgcHJvdmlkZXI6IFRFU1RfUFJPVklERVIsXG4gICAgfSxcbiAgXSwgY29udGV4dCwgbW9ja1NESyk7XG5cbiAgLy8gVEhFTiAtIFZhbHVlIGdldHMgcmVzb2x2ZWRcbiAgZXhwZWN0KGNvbnRleHQuZ2V0KCdhc2RmJykpLnRvRXF1YWwoJ3NvbWUgcmVzb2x2ZWQgdmFsdWUnKTtcbn0pO1xuXG50ZXN0KCdlcnJvcnMgYXJlIG1hcmtlZCB0cmFuc2llbnQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnRleHRwcm92aWRlcnMucmVnaXN0ZXJDb250ZXh0UHJvdmlkZXIoVEVTVF9QUk9WSURFUiwge1xuICAgIGFzeW5jIGdldFZhbHVlKF86IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBjb250ZXh0cHJvdmlkZXJzLnByb3ZpZGVDb250ZXh0VmFsdWVzKFtcbiAgICB7IGtleTogJ2FzZGYnLCBwcm9wczogeyBhY2NvdW50OiAnMTIzNCcsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSwgcHJvdmlkZXI6IFRFU1RfUFJPVklERVIgfSxcbiAgXSwgY29udGV4dCwgbW9ja1NESyk7XG5cbiAgLy8gVEhFTiAtIGVycm9yIGlzIG1hcmtlZCB0cmFuc2llbnRcbiAgZXhwZWN0KGNvbnRleHQuZ2V0KCdhc2RmJylbVFJBTlNJRU5UX0NPTlRFWFRfS0VZXSkudG9CZVRydXRoeSgpO1xufSk7XG5cbnRlc3QoJ2NvbnRleHQgcHJvdmlkZXIgY2FuIGJlIHJlZ2lzdGVyZWQgdXNpbmcgUGx1Z2luSG9zdCcsIGFzeW5jICgpID0+IHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuXG4gIC8vIEdJVkVOXG4gIFBsdWdpbkhvc3QuaW5zdGFuY2UucmVnaXN0ZXJDb250ZXh0UHJvdmlkZXJBbHBoYShURVNUX1BST1ZJREVSLCB7XG4gICAgYXN5bmMgZ2V0VmFsdWUoXzoge1trZXk6IHN0cmluZ106IGFueX0pOiBQcm9taXNlPGFueT4ge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBjb250ZXh0cHJvdmlkZXJzLnByb3ZpZGVDb250ZXh0VmFsdWVzKFtcbiAgICB7IGtleTogJ2FzZGYnLCBwcm9wczogeyBhY2NvdW50OiAnMTIzNCcsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSwgcHJvdmlkZXI6IFRFU1RfUFJPVklERVIgfSxcbiAgXSwgY29udGV4dCwgbW9ja1NESyk7XG5cbiAgLy8gVEhFTiAtIGVycm9yIGlzIG1hcmtlZCB0cmFuc2llbnRcbiAgZXhwZWN0KGNhbGxlZCkudG9FcXVhbCh0cnVlKTtcbn0pO1xuXG50ZXN0KCdjb250ZXh0IHByb3ZpZGVyIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBhY2NvdW50L3JlZ2lvbicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgUGx1Z2luSG9zdC5pbnN0YW5jZS5yZWdpc3RlckNvbnRleHRQcm92aWRlckFscGhhKFRFU1RfUFJPVklERVIsIHtcbiAgICBhc3luYyBnZXRWYWx1ZShfOiB7W2tleTogc3RyaW5nXTogYW55fSk6IFByb21pc2U8YW55PiB7XG4gICAgICByZXR1cm4gJ3lheSc7XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgY29udGV4dHByb3ZpZGVycy5wcm92aWRlQ29udGV4dFZhbHVlcyhbXG4gICAgeyBrZXk6ICdhc2RmJywgcHJvcHM6IHsgYmFuYW5hOiAneWVsbG93JyB9IGFzIGFueSwgcHJvdmlkZXI6IFRFU1RfUFJPVklERVIgfSxcbiAgXSwgY29udGV4dCwgbW9ja1NESyk7XG5cbiAgLy8gVEhFTiAtIGVycm9yIGlzIG1hcmtlZCB0cmFuc2llbnRcbiAgZXhwZWN0KGNvbnRleHQuZ2V0KCdhc2RmJykpLnRvRXF1YWwoJ3lheScpO1xufSk7XG4iXX0=
|
|
@@ -19,8 +19,42 @@ test('looks up the requested VPC', async () => {
|
|
|
19
19
|
{ SubnetId: 'sub-789012', AvailabilityZone: 'bermuda-triangle-1337', MapPublicIpOnLaunch: false },
|
|
20
20
|
],
|
|
21
21
|
routeTables: [
|
|
22
|
-
{
|
|
23
|
-
|
|
22
|
+
{
|
|
23
|
+
Associations: [{ SubnetId: 'sub-123456' }],
|
|
24
|
+
RouteTableId: 'rtb-123456',
|
|
25
|
+
Routes: [
|
|
26
|
+
{
|
|
27
|
+
DestinationCidrBlock: '1.1.1.1/24',
|
|
28
|
+
GatewayId: 'local',
|
|
29
|
+
Origin: 'CreateRouteTable',
|
|
30
|
+
State: 'active',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
DestinationCidrBlock: '0.0.0.0/0',
|
|
34
|
+
GatewayId: 'igw-xxxxxx',
|
|
35
|
+
Origin: 'CreateRoute',
|
|
36
|
+
State: 'active',
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
Associations: [{ SubnetId: 'sub-789012' }],
|
|
42
|
+
RouteTableId: 'rtb-789012',
|
|
43
|
+
Routes: [
|
|
44
|
+
{
|
|
45
|
+
DestinationCidrBlock: '1.1.2.1/24',
|
|
46
|
+
GatewayId: 'local',
|
|
47
|
+
Origin: 'CreateRouteTable',
|
|
48
|
+
State: 'active',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
DestinationCidrBlock: '0.0.0.0/0',
|
|
52
|
+
NatGatewayId: 'nat-xxxxxx',
|
|
53
|
+
Origin: 'CreateRoute',
|
|
54
|
+
State: 'active',
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
},
|
|
24
58
|
],
|
|
25
59
|
vpnGateways: [{ VpnGatewayId: 'gw-abcdef' }],
|
|
26
60
|
});
|
|
@@ -88,8 +122,42 @@ test('uses the VPC main route table when a subnet has no specific association',
|
|
|
88
122
|
{ SubnetId: 'sub-789012', AvailabilityZone: 'bermuda-triangle-1337', MapPublicIpOnLaunch: false },
|
|
89
123
|
],
|
|
90
124
|
routeTables: [
|
|
91
|
-
{
|
|
92
|
-
|
|
125
|
+
{
|
|
126
|
+
Associations: [{ SubnetId: 'sub-123456' }],
|
|
127
|
+
RouteTableId: 'rtb-123456',
|
|
128
|
+
Routes: [
|
|
129
|
+
{
|
|
130
|
+
DestinationCidrBlock: '1.1.1.1/24',
|
|
131
|
+
GatewayId: 'local',
|
|
132
|
+
Origin: 'CreateRouteTable',
|
|
133
|
+
State: 'active',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
DestinationCidrBlock: '0.0.0.0/0',
|
|
137
|
+
GatewayId: 'igw-xxxxxx',
|
|
138
|
+
Origin: 'CreateRoute',
|
|
139
|
+
State: 'active',
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
Associations: [{ Main: true }],
|
|
145
|
+
RouteTableId: 'rtb-789012',
|
|
146
|
+
Routes: [
|
|
147
|
+
{
|
|
148
|
+
DestinationCidrBlock: '1.1.2.1/24',
|
|
149
|
+
GatewayId: 'local',
|
|
150
|
+
Origin: 'CreateRouteTable',
|
|
151
|
+
State: 'active',
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
DestinationCidrBlock: '0.0.0.0/0',
|
|
155
|
+
NatGatewayId: 'nat-xxxxxx',
|
|
156
|
+
Origin: 'CreateRoute',
|
|
157
|
+
State: 'active',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
},
|
|
93
161
|
],
|
|
94
162
|
vpnGateways: [{ VpnGatewayId: 'gw-abcdef' }],
|
|
95
163
|
});
|
|
@@ -176,6 +244,112 @@ test('Recognize public subnet by route table', async () => {
|
|
|
176
244
|
subnetGroups: undefined,
|
|
177
245
|
});
|
|
178
246
|
});
|
|
247
|
+
test('Recognize private subnet by route table', async () => {
|
|
248
|
+
// GIVEN
|
|
249
|
+
const filter = { foo: 'bar' };
|
|
250
|
+
const provider = new vpcs_1.VpcNetworkContextProviderPlugin(mockSDK);
|
|
251
|
+
mockVpcLookup({
|
|
252
|
+
subnets: [
|
|
253
|
+
{ SubnetId: 'sub-123456', AvailabilityZone: 'bermuda-triangle-1337', MapPublicIpOnLaunch: false },
|
|
254
|
+
],
|
|
255
|
+
routeTables: [
|
|
256
|
+
{
|
|
257
|
+
Associations: [{ SubnetId: 'sub-123456' }],
|
|
258
|
+
RouteTableId: 'rtb-123456',
|
|
259
|
+
Routes: [
|
|
260
|
+
{
|
|
261
|
+
DestinationCidrBlock: '10.0.2.0/26',
|
|
262
|
+
Origin: 'CreateRoute',
|
|
263
|
+
State: 'active',
|
|
264
|
+
VpcPeeringConnectionId: 'pcx-xxxxxx',
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
DestinationCidrBlock: '10.0.1.0/24',
|
|
268
|
+
GatewayId: 'local',
|
|
269
|
+
Origin: 'CreateRouteTable',
|
|
270
|
+
State: 'active',
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
DestinationCidrBlock: '0.0.0.0/0',
|
|
274
|
+
NatGatewayId: 'nat-xxxxxx',
|
|
275
|
+
Origin: 'CreateRoute',
|
|
276
|
+
State: 'active',
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
},
|
|
280
|
+
],
|
|
281
|
+
});
|
|
282
|
+
// WHEN
|
|
283
|
+
const result = await provider.getValue({
|
|
284
|
+
account: '1234',
|
|
285
|
+
region: 'us-east-1',
|
|
286
|
+
filter,
|
|
287
|
+
});
|
|
288
|
+
// THEN
|
|
289
|
+
expect(result).toEqual({
|
|
290
|
+
vpcId: 'vpc-1234567',
|
|
291
|
+
vpcCidrBlock: '1.1.1.1/16',
|
|
292
|
+
availabilityZones: ['bermuda-triangle-1337'],
|
|
293
|
+
isolatedSubnetIds: undefined,
|
|
294
|
+
isolatedSubnetNames: undefined,
|
|
295
|
+
isolatedSubnetRouteTableIds: undefined,
|
|
296
|
+
privateSubnetIds: ['sub-123456'],
|
|
297
|
+
privateSubnetNames: ['Private'],
|
|
298
|
+
privateSubnetRouteTableIds: ['rtb-123456'],
|
|
299
|
+
publicSubnetIds: undefined,
|
|
300
|
+
publicSubnetNames: undefined,
|
|
301
|
+
publicSubnetRouteTableIds: undefined,
|
|
302
|
+
vpnGatewayId: undefined,
|
|
303
|
+
subnetGroups: undefined,
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
test('Recognize isolated subnet by route table', async () => {
|
|
307
|
+
// GIVEN
|
|
308
|
+
const filter = { foo: 'bar' };
|
|
309
|
+
const provider = new vpcs_1.VpcNetworkContextProviderPlugin(mockSDK);
|
|
310
|
+
mockVpcLookup({
|
|
311
|
+
subnets: [
|
|
312
|
+
{ SubnetId: 'sub-123456', AvailabilityZone: 'bermuda-triangle-1337', MapPublicIpOnLaunch: false },
|
|
313
|
+
],
|
|
314
|
+
routeTables: [
|
|
315
|
+
{
|
|
316
|
+
Associations: [{ SubnetId: 'sub-123456' }],
|
|
317
|
+
RouteTableId: 'rtb-123456',
|
|
318
|
+
Routes: [
|
|
319
|
+
{
|
|
320
|
+
DestinationCidrBlock: '10.0.1.0/24',
|
|
321
|
+
GatewayId: 'local',
|
|
322
|
+
Origin: 'CreateRouteTable',
|
|
323
|
+
State: 'active',
|
|
324
|
+
},
|
|
325
|
+
],
|
|
326
|
+
},
|
|
327
|
+
],
|
|
328
|
+
});
|
|
329
|
+
// WHEN
|
|
330
|
+
const result = await provider.getValue({
|
|
331
|
+
account: '1234',
|
|
332
|
+
region: 'us-east-1',
|
|
333
|
+
filter,
|
|
334
|
+
});
|
|
335
|
+
// THEN
|
|
336
|
+
expect(result).toEqual({
|
|
337
|
+
vpcId: 'vpc-1234567',
|
|
338
|
+
vpcCidrBlock: '1.1.1.1/16',
|
|
339
|
+
availabilityZones: ['bermuda-triangle-1337'],
|
|
340
|
+
isolatedSubnetIds: ['sub-123456'],
|
|
341
|
+
isolatedSubnetNames: ['Isolated'],
|
|
342
|
+
isolatedSubnetRouteTableIds: ['rtb-123456'],
|
|
343
|
+
privateSubnetIds: undefined,
|
|
344
|
+
privateSubnetNames: undefined,
|
|
345
|
+
privateSubnetRouteTableIds: undefined,
|
|
346
|
+
publicSubnetIds: undefined,
|
|
347
|
+
publicSubnetNames: undefined,
|
|
348
|
+
publicSubnetRouteTableIds: undefined,
|
|
349
|
+
vpnGatewayId: undefined,
|
|
350
|
+
subnetGroups: undefined,
|
|
351
|
+
});
|
|
352
|
+
});
|
|
179
353
|
function mockVpcLookup(options) {
|
|
180
354
|
const VpcId = 'vpc-1234567';
|
|
181
355
|
AWS.mock('EC2', 'describeVpcs', (params, cb) => {
|
|
@@ -199,4 +373,4 @@ function mockVpcLookup(options) {
|
|
|
199
373
|
return cb(null, { VpnGateways: options.vpnGateways });
|
|
200
374
|
});
|
|
201
375
|
}
|
|
202
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjcy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidnBjcy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0Esb0NBQW9DO0FBQ3BDLDJEQUFtRjtBQUNuRiwrQ0FBbUQ7QUFFbkQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFFdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSwwQkFBZSxFQUFFLENBQUM7QUFJdEMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQ2YsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2QsSUFBSSxFQUFFLENBQUM7QUFDVCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM1QyxRQUFRO0lBQ1IsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxzQ0FBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU5RCxhQUFhLENBQUM7UUFDWixPQUFPLEVBQUU7WUFDUCxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1lBQ2hHLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUU7U0FDbEc7UUFDRCxXQUFXLEVBQUU7WUFDWCxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRTtZQUMxRSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRTtTQUMzRTtRQUNELFdBQVcsRUFBRSxDQUFDLEVB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QUFDLElBQUksQ0FBQyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxNQUEwQyxFQUFFLEVBQWtELEVBQUUsRUFBRTtRQUN4SSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUM3QixFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNsRCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUU7U0FDekMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGF3cyBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrLW1vY2snO1xuaW1wb3J0IHsgVnBjTmV0d29ya0NvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4uLy4uL2xpYi9jb250ZXh0LXByb3ZpZGVycy92cGNzJztcbmltcG9ydCB7IE1vY2tTZGtQcm92aWRlciB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuXG5BV1Muc2V0U0RLKHJlcXVpcmUucmVzb2x2ZSgnYXdzLXNkaycpKTtcblxuY29uc3QgbW9ja1NESyA9IG5ldyBNb2NrU2RrUHJvdmlkZXIoKTtcblxudHlwZSBBd3NDYWxsYmFjazxUPiA9IChlcnI6IEVycm9yIHwgbnVsbCwgdmFsOiBUKSA9PiB2b2lkO1xuXG5hZnRlckVhY2goZG9uZSA9PiB7XG4gIEFXUy5yZXN0b3JlKCk7XG4gIGRvbmUoKTtcbn0pO1xuXG50ZXN0KCdsb29rcyB1cCB0aGUgcmVxdWVzdGVkIFZQQycsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgZmlsdGVyID0geyBmb286ICdiYXInIH07XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IFZwY05ldHdvcmtDb250ZXh0UHJvdmlkZXJQbHVnaW4obW9ja1NESyk7XG5cbiAgbW9ja1ZwY0xvb2t1cCh7XG4gICAgc3VibmV0czogW1xuICAgICAgeyBTdWJuZXRJZDogJ3N1Yi0xMjM0NTYnLCBBdmFpbGFiaWxpdHlab25lOiAnYmVybXVkYS10cmlhbmdsZS0xMzM3JywgTWFwUHVibGljSXBPbkxhdW5jaDogdHJ1ZSB9LFxuICAgICAgeyBTdWJuZXRJZDogJ3N1Yi03ODkwMTInLCBBdmFpbGFiaWxpdHlab25lOiAnYmVybXVkYS10cmlhbmdsZS0xMzM3JywgTWFwUHVibGljSXBPbkxhdW5jaDogZmFsc2UgfSxcbiAgICBdLFxuICAgIHJvdXRlVGFibGVzOiBbXG4gICAgICB7IEFzc29jaWF0aW9uczogW3sgU3VibmV0SWQ6ICdzdWItMTIzNDU2JyB9XSwgUm91dGVUYWJsZUlkOiAncnRiLTEyMzQ1NicgfSxcbiAgICAgIHsgQXNzb2NpYXRpb25zOiBbeyBTdWJuZXRJZDogJ3N1Yi03ODkwMTInIH1dLCBSb3V0ZVRhYmxlSWQ6ICdydGItNzg5MDEyJyB9LFxuICAgIF0sXG4gICAgdnBuR2F0ZXdheXM6IFt7IFZwbkdhdGV3YXlJZDogJ2d3LWFiY2RlZicgfV0sXG5cbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5nZXRWYWx1ZSh7XG4gICAgYWNjb3VudDogJzEyMzQnLFxuICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgZmlsdGVyLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgIHZwY0lkOiAndnBjLTEyMzQ1NjcnLFxuICAgIHZwY0NpZHJCbG9jazogJzEuMS4xLjEvMTYnLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBbJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNyddLFxuICAgIGlzb2xhdGVkU3VibmV0SWRzOiB1bmRlZmluZWQsXG4gICAgaXNvbGF0ZWRTdWJuZXROYW1lczogdW5kZWZpbmVkLFxuICAgIGlzb2xhdGVkU3VibmV0Um91dGVUYWJsZUlkczogdW5kZWZpbmVkLFxuICAgIHByaXZhdGVTdWJuZXRJZHM6IFsnc3ViLTc4OTAxMiddLFxuICAgIHByaXZhdGVTdWJuZXROYW1lczogWydQcml2YXRlJ10sXG4gICAgcHJpdmF0ZVN1Ym5ldFJvdXRlVGFibGVJZHM6IFsncnRiLTc4OTAxMiddLFxuICAgIHB1YmxpY1N1Ym5ldElkczogWydzdWItMTIzNDU2J10sXG4gICAgcHVibGljU3VibmV0TmFtZXM6IFsnUHVibGljJ10sXG4gICAgcHVibGljU3VibmV0Um91dGVUYWJsZUlkczogWydydGItMTIzNDU2J10sXG4gICAgdnBuR2F0ZXdheUlkOiAnZ3ctYWJjZGVmJyxcbiAgICBzdWJuZXRHcm91cHM6IHVuZGVmaW5lZCxcbiAgfSk7XG59KTtcblxudGVzdCgndGhyb3dzIHdoZW4gbm8gc3VjaCBWUEMgaXMgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IGZpbHRlciA9IHsgZm9vOiAnYmFyJyB9O1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBWcGNOZXR3b3JrQ29udGV4dFByb3ZpZGVyUGx1Z2luKG1vY2tTREspO1xuXG4gIEFXUy5tb2NrKCdFQzInLCAnZGVzY3JpYmVWcGNzJywgKHBhcmFtczogYXdzLkVDMi5EZXNjcmliZVZwY3NSZXF1ZXN0LCBjYjogQXdzQ2FsbGJhY2s8YXdzLkVDMi5EZXNjcmliZVZwY3NSZXN1bHQ+KSA9PiB7XG4gICAgZXhwZWN0KHBhcmFtcy5GaWx0ZXJzKS50b0VxdWFsKFt7IE5hbWU6ICdmb28nLCBWYWx1ZXM6IFsnYmFyJ10gfV0pO1xuICAgIHJldHVybiBjYihudWxsLCB7fSk7XG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmdldFZhbHVlKHtcbiAgICBhY2NvdW50OiAnMTIzNCcsXG4gICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICBmaWx0ZXIsXG4gIH0pKS5yZWplY3RzLnRvVGhyb3coL0NvdWxkIG5vdCBmaW5kIGFueSBWUENzIG1hdGNoaW5nLyk7XG59KTtcblxudGVzdCgndGhyb3dzIHdoZW4gbXVsdGlwbGUgVlBDcyBhcmUgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IGZpbHRlciA9IHsgZm9vOiAnYmFyJyB9O1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBWcGNOZXR3b3JrQ29udGV4dFByb3ZpZGVyUGx1Z2luKG1vY2tTREspO1xuXG4gIEFXUy5tb2NrKCdFQzInLCAnZGVzY3JpYmVWcGNzJywgKHBhcmFtczogYXdzLkVDMi5EZXNjcmliZVZwY3NSZXF1ZXN0LCBjYjogQXdzQ2FsbGJhY2s8YXdzLkVDMi5EZXNjcmliZVZwY3NSZXN1bHQ+KSA9PiB7XG4gICAgZXhwZWN0KHBhcmFtcy5GaWx0ZXJzKS50b0VxdWFsKFt7IE5hbWU6ICdmb28nLCBWYWx1ZXM6IFsnYmFyJ10gfV0pO1xuICAgIHJldHVybiBjYihudWxsLCB7IFZwY3M6IFt7IFZwY0lkOiAndnBjLTEnIH0sIHsgVnBjSWQ6ICd2cGMtMicgfV0gfSk7XG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmdldFZhbHVlKHtcbiAgICBhY2NvdW50OiAnMTIzNCcsXG4gICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICBmaWx0ZXIsXG4gIH0pKS5yZWplY3RzLnRvVGhyb3coL0ZvdW5kIDIgVlBDcyBtYXRjaGluZy8pO1xufSk7XG5cbnRlc3QoJ3VzZXMgdGhlIFZQQyBtYWluIHJvdXRlIHRhYmxlIHdoZW4gYSBzdWJuZXQgaGFzIG5vIHNwZWNpZmljIGFzc29jaWF0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBmaWx0ZXIgPSB7IGZvbzogJ2JhcicgfTtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgVnBjTmV0d29ya0NvbnRleHRQcm92aWRlclBsdWdpbihtb2NrU0RLKTtcblxuICBtb2NrVnBjTG9va3VwKHtcbiAgICBzdWJuZXRzOiBbXG4gICAgICB7IFN1Ym5ldElkOiAnc3ViLTEyMzQ1NicsIEF2YWlsYWJpbGl0eVpvbmU6ICdiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLCBNYXBQdWJsaWNJcE9uTGF1bmNoOiB0cnVlIH0sXG4gICAgICB7IFN1Ym5ldElkOiAnc3ViLTc4OTAxMicsIEF2YWlsYWJpbGl0eVpvbmU6ICdiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLCBNYXBQdWJsaWNJcE9uTGF1bmNoOiBmYWxzZSB9LFxuICAgIF0sXG4gICAgcm91dGVUYWJsZXM6IFtcbiAgICAgIHsgQXNzb2NpYXRpb25zOiBbeyBTdWJuZXRJZDogJ3N1Yi0xMjM0NTYnIH1dLCBSb3V0ZVRhYmxlSWQ6ICdydGItMTIzNDU2JyB9LFxuICAgICAgeyBBc3NvY2lhdGlvbnM6IFt7IE1haW46IHRydWUgfV0sIFJvdXRlVGFibGVJZDogJ3J0Yi03ODkwMTInIH0sXG4gICAgXSxcbiAgICB2cG5HYXRld2F5czogW3sgVnBuR2F0ZXdheUlkOiAnZ3ctYWJjZGVmJyB9XSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5nZXRWYWx1ZSh7XG4gICAgYWNjb3VudDogJzEyMzQnLFxuICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgZmlsdGVyLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgIHZwY0lkOiAndnBjLTEyMzQ1NjcnLFxuICAgIHZwY0NpZHJCbG9jazogJzEuMS4xLjEvMTYnLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBbJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNyddLFxuICAgIGlzb2xhdGVkU3VibmV0SWRzOiB1bmRlZmluZWQsXG4gICAgaXNvbGF0ZWRTdWJuZXROYW1lczogdW5kZWZpbmVkLFxuICAgIGlzb2xhdGVkU3VibmV0Um91dGVUYWJsZUlkczogdW5kZWZpbmVkLFxuICAgIHByaXZhdGVTdWJuZXRJZHM6IFsnc3ViLTc4OTAxMiddLFxuICAgIHByaXZhdGVTdWJuZXROYW1lczogWydQcml2YXRlJ10sXG4gICAgcHJpdmF0ZVN1Ym5ldFJvdXRlVGFibGVJZHM6IFsncnRiLTc4OTAxMiddLFxuICAgIHB1YmxpY1N1Ym5ldElkczogWydzdWItMTIzNDU2J10sXG4gICAgcHVibGljU3VibmV0TmFtZXM6IFsnUHVibGljJ10sXG4gICAgcHVibGljU3VibmV0Um91dGVUYWJsZUlkczogWydydGItMTIzNDU2J10sXG4gICAgdnBuR2F0ZXdheUlkOiAnZ3ctYWJjZGVmJyxcbiAgICBzdWJuZXRHcm91cHM6IHVuZGVmaW5lZCxcbiAgfSk7XG59KTtcblxudGVzdCgnUmVjb2duaXplIHB1YmxpYyBzdWJuZXQgYnkgcm91dGUgdGFibGUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IGZpbHRlciA9IHsgZm9vOiAnYmFyJyB9O1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBWcGNOZXR3b3JrQ29udGV4dFByb3ZpZGVyUGx1Z2luKG1vY2tTREspO1xuXG4gIG1vY2tWcGNMb29rdXAoe1xuICAgIHN1Ym5ldHM6IFtcbiAgICAgIHsgU3VibmV0SWQ6ICdzdWItMTIzNDU2JywgQXZhaWxhYmlsaXR5Wm9uZTogJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNycsIE1hcFB1YmxpY0lwT25MYXVuY2g6IGZhbHNlIH0sXG4gICAgXSxcbiAgICByb3V0ZVRhYmxlczogW1xuICAgICAge1xuICAgICAgICBBc3NvY2lhdGlvbnM6IFt7IFN1Ym5ldElkOiAnc3ViLTEyMzQ1NicgfV0sXG4gICAgICAgIFJvdXRlVGFibGVJZDogJ3J0Yi0xMjM0NTYnLFxuICAgICAgICBSb3V0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBEZXN0aW5hdGlvbkNpZHJCbG9jazogJzEwLjAuMi4wLzI2JyxcbiAgICAgICAgICAgIE9yaWdpbjogJ0NyZWF0ZVJvdXRlJyxcbiAgICAgICAgICAgIFN0YXRlOiAnYWN0aXZlJyxcbiAgICAgICAgICAgIFZwY1BlZXJpbmdDb25uZWN0aW9uSWQ6ICdwY3gteHh4eHh4JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQ2lkckJsb2NrOiAnMTAuMC4xLjAvMjQnLFxuICAgICAgICAgICAgR2F0ZXdheUlkOiAnbG9jYWwnLFxuICAgICAgICAgICAgT3JpZ2luOiAnQ3JlYXRlUm91dGVUYWJsZScsXG4gICAgICAgICAgICBTdGF0ZTogJ2FjdGl2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBEZXN0aW5hdGlvbkNpZHJCbG9jazogJzAuMC4wLjAvMCcsXG4gICAgICAgICAgICBHYXRld2F5SWQ6ICdpZ3cteHh4eHh4JyxcbiAgICAgICAgICAgIE9yaWdpbjogJ0NyZWF0ZVJvdXRlJyxcbiAgICAgICAgICAgIFN0YXRlOiAnYWN0aXZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdldFZhbHVlKHtcbiAgICBhY2NvdW50OiAnMTIzNCcsXG4gICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICBmaWx0ZXIsXG4gIH0pO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAgdnBjSWQ6ICd2cGMtMTIzNDU2NycsXG4gICAgdnBjQ2lkckJsb2NrOiAnMS4xLjEuMS8xNicsXG4gICAgYXZhaWxhYmlsaXR5Wm9uZXM6IFsnYmVybXVkYS10cmlhbmdsZS0xMzM3J10sXG4gICAgaXNvbGF0ZWRTdWJuZXRJZHM6IHVuZGVmaW5lZCxcbiAgICBpc29sYXRlZFN1Ym5ldE5hbWVzOiB1bmRlZmluZWQsXG4gICAgaXNvbGF0ZWRTdWJuZXRSb3V0ZVRhYmxlSWRzOiB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZVN1Ym5ldElkczogdW5kZWZpbmVkLFxuICAgIHByaXZhdGVTdWJuZXROYW1lczogdW5kZWZpbmVkLFxuICAgIHByaXZhdGVTdWJuZXRSb3V0ZVRhYmxlSWRzOiB1bmRlZmluZWQsXG4gICAgcHVibGljU3VibmV0SWRzOiBbJ3N1Yi0xMjM0NTYnXSxcbiAgICBwdWJsaWNTdWJuZXROYW1lczogWydQdWJsaWMnXSxcbiAgICBwdWJsaWNTdWJuZXRSb3V0ZVRhYmxlSWRzOiBbJ3J0Yi0xMjM0NTYnXSxcbiAgICB2cG5HYXRld2F5SWQ6IHVuZGVmaW5lZCxcbiAgICBzdWJuZXRHcm91cHM6IHVuZGVmaW5lZCxcbiAgfSk7XG59KTtcblxuaW50ZXJmYWNlIFZwY0xvb2t1cE9wdGlvbnMge1xuICBzdWJuZXRzOiBhd3MuRUMyLlN1Ym5ldFtdO1xuICByb3V0ZVRhYmxlczogYXdzLkVDMi5Sb3V0ZVRhYmxlW107XG4gIHZwbkdhdGV3YXlzPzogYXdzLkVDMi5WcG5HYXRld2F5W107XG59XG5cbmZ1bmN0aW9uIG1vY2tWcGNMb29rdXAob3B0aW9uczogVnBjTG9va3VwT3B0aW9ucykge1xuICBjb25zdCBWcGNJZCA9ICd2cGMtMTIzNDU2Nyc7XG5cbiAgQVdTLm1vY2soJ0VDMicsICdkZXNjcmliZVZwY3MnLCAocGFyYW1zOiBhd3MuRUMyLkRlc2NyaWJlVnBjc1JlcXVlc3QsIGNiOiBBd3NDYWxsYmFjazxhd3MuRUMyLkRlc2NyaWJlVnBjc1Jlc3VsdD4pID0+IHtcbiAgICBleHBlY3QocGFyYW1zLkZpbHRlcnMpLnRvRXF1YWwoW3sgTmFtZTogJ2ZvbycsIFZhbHVlczogWydiYXInXSB9XSk7XG4gICAgcmV0dXJuIGNiKG51bGwsIHsgVnBjczogW3sgVnBjSWQsIENpZHJCbG9jazogJzEuMS4xLjEvMTYnIH1dIH0pO1xuICB9KTtcblxuICBBV1MubW9jaygnRUMyJywgJ2Rlc2NyaWJlU3VibmV0cycsIChwYXJhbXM6IGF3cy5FQzIuRGVzY3JpYmVTdWJuZXRzUmVxdWVzdCwgY2I6IEF3c0NhbGxiYWNrPGF3cy5FQzIuRGVzY3JpYmVTdWJuZXRzUmVzdWx0PikgPT4ge1xuICAgIGV4cGVjdChwYXJhbXMuRmlsdGVycykudG9FcXVhbChbeyBOYW1lOiAndnBjLWlkJywgVmFsdWVzOiBbVnBjSWRdIH1dKTtcbiAgICByZXR1cm4gY2IobnVsbCwgeyBTdWJuZXRzOiBvcHRpb25zLnN1Ym5ldHMgfSk7XG4gIH0pO1xuXG4gIEFXUy5tb2NrKCdFQzInLCAnZGVzY3JpYmVSb3V0ZVRhYmxlcycsIChwYXJhbXM6IGF3cy5FQzIuRGVzY3JpYmVSb3V0ZVRhYmxlc1JlcXVlc3QsIGNiOiBBd3NDYWxsYmFjazxhd3MuRUMyLkRlc2NyaWJlUm91dGVUYWJsZXNSZXN1bHQ+KSA9PiB7XG4gICAgZXhwZWN0KHBhcmFtcy5GaWx0ZXJzKS50b0VxdWFsKFt7IE5hbWU6ICd2cGMtaWQnLCBWYWx1ZXM6IFtWcGNJZF0gfV0pO1xuICAgIHJldHVybiBjYihudWxsLCB7IFJvdXRlVGFibGVzOiBvcHRpb25zLnJvdXRlVGFibGVzIH0pO1xuICB9KTtcblxuICBBV1MubW9jaygnRUMyJywgJ2Rlc2NyaWJlVnBuR2F0ZXdheXMnLCAocGFyYW1zOiBhd3MuRUMyLkRlc2NyaWJlVnBuR2F0ZXdheXNSZXF1ZXN0LCBjYjogQXdzQ2FsbGJhY2s8YXdzLkVDMi5EZXNjcmliZVZwbkdhdGV3YXlzUmVzdWx0PikgPT4ge1xuICAgIGV4cGVjdChwYXJhbXMuRmlsdGVycykudG9FcXVhbChbXG4gICAgICB7IE5hbWU6ICdhdHRhY2htZW50LnZwYy1pZCcsIFZhbHVlczogW1ZwY0lkXSB9LFxuICAgICAgeyBOYW1lOiAnYXR0YWNobWVudC5zdGF0ZScsIFZhbHVlczogWydhdHRhY2hlZCddIH0sXG4gICAgICB7IE5hbWU6ICdzdGF0ZScsIFZhbHVlczogWydhdmFpbGFibGUnXSB9LFxuICAgIF0pO1xuICAgIHJldHVybiBjYihudWxsLCB7IFZwbkdhdGV3YXlzOiBvcHRpb25zLnZwbkdhdGV3YXlzIH0pO1xuICB9KTtcbn1cbiJdfQ==
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjcy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidnBjcy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0Esb0NBQW9DO0FBQ3BDLDJEQUFtRjtBQUNuRiwrQ0FBbUQ7QUFFbkQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFFdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSwwQkFBZSxFQUFFLENBQUM7QUFJdEMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQ2YsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2QsSUFBSSxFQUFFLENBQUM7QUFDVCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM1QyxRQUFRO0lBQ1IsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxzQ0FBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU5RCxhQUFhLENBQUM7UUFDWixPQUFPLEVBQUU7WUFDUCxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1lBQ2hHLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUU7U0FDbEc7UUFDRCxXQUFXLEVBQUU7WUFDWDtnQkFDRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQztnQkFDMUMsWUFBWSxFQUFFLFlBQVk7Z0JBQzFCLE1BQU0sRUFBRTtvQkFDTjt3QkFDRSxvQkFBb0IsRUFBRSxZQUFZO3dCQUNsQyxTQUFTLEVBQUUsT0FBTzt3QkFDbEIsTUFBTSxFQUFFLGtCQUFrQjt3QkFDMUIsS0FBSyxFQUFFLFFB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QUM7UUFDSCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXdzIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGstbW9jayc7XG5pbXBvcnQgeyBWcGNOZXR3b3JrQ29udGV4dFByb3ZpZGVyUGx1Z2luIH0gZnJvbSAnLi4vLi4vbGliL2NvbnRleHQtcHJvdmlkZXJzL3ZwY3MnO1xuaW1wb3J0IHsgTW9ja1Nka1Byb3ZpZGVyIH0gZnJvbSAnLi4vdXRpbC9tb2NrLXNkayc7XG5cbkFXUy5zZXRTREsocmVxdWlyZS5yZXNvbHZlKCdhd3Mtc2RrJykpO1xuXG5jb25zdCBtb2NrU0RLID0gbmV3IE1vY2tTZGtQcm92aWRlcigpO1xuXG50eXBlIEF3c0NhbGxiYWNrPFQ+ID0gKGVycjogRXJyb3IgfCBudWxsLCB2YWw6IFQpID0+IHZvaWQ7XG5cbmFmdGVyRWFjaChkb25lID0+IHtcbiAgQVdTLnJlc3RvcmUoKTtcbiAgZG9uZSgpO1xufSk7XG5cbnRlc3QoJ2xvb2tzIHVwIHRoZSByZXF1ZXN0ZWQgVlBDJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBmaWx0ZXIgPSB7IGZvbzogJ2JhcicgfTtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgVnBjTmV0d29ya0NvbnRleHRQcm92aWRlclBsdWdpbihtb2NrU0RLKTtcblxuICBtb2NrVnBjTG9va3VwKHtcbiAgICBzdWJuZXRzOiBbXG4gICAgICB7IFN1Ym5ldElkOiAnc3ViLTEyMzQ1NicsIEF2YWlsYWJpbGl0eVpvbmU6ICdiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLCBNYXBQdWJsaWNJcE9uTGF1bmNoOiB0cnVlIH0sXG4gICAgICB7IFN1Ym5ldElkOiAnc3ViLTc4OTAxMicsIEF2YWlsYWJpbGl0eVpvbmU6ICdiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLCBNYXBQdWJsaWNJcE9uTGF1bmNoOiBmYWxzZSB9LFxuICAgIF0sXG4gICAgcm91dGVUYWJsZXM6IFtcbiAgICAgIHtcbiAgICAgICAgQXNzb2NpYXRpb25zOiBbeyBTdWJuZXRJZDogJ3N1Yi0xMjM0NTYnIH1dLFxuICAgICAgICBSb3V0ZVRhYmxlSWQ6ICdydGItMTIzNDU2JyxcbiAgICAgICAgUm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgRGVzdGluYXRpb25DaWRyQmxvY2s6ICcxLjEuMS4xLzI0JyxcbiAgICAgICAgICAgIEdhdGV3YXlJZDogJ2xvY2FsJyxcbiAgICAgICAgICAgIE9yaWdpbjogJ0NyZWF0ZVJvdXRlVGFibGUnLFxuICAgICAgICAgICAgU3RhdGU6ICdhY3RpdmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgRGVzdGluYXRpb25DaWRyQmxvY2s6ICcwLjAuMC4wLzAnLFxuICAgICAgICAgICAgR2F0ZXdheUlkOiAnaWd3LXh4eHh4eCcsXG4gICAgICAgICAgICBPcmlnaW46ICdDcmVhdGVSb3V0ZScsXG4gICAgICAgICAgICBTdGF0ZTogJ2FjdGl2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIEFzc29jaWF0aW9uczogW3sgU3VibmV0SWQ6ICdzdWItNzg5MDEyJyB9XSxcbiAgICAgICAgUm91dGVUYWJsZUlkOiAncnRiLTc4OTAxMicsXG4gICAgICAgIFJvdXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQ2lkckJsb2NrOiAnMS4xLjIuMS8yNCcsXG4gICAgICAgICAgICBHYXRld2F5SWQ6ICdsb2NhbCcsXG4gICAgICAgICAgICBPcmlnaW46ICdDcmVhdGVSb3V0ZVRhYmxlJyxcbiAgICAgICAgICAgIFN0YXRlOiAnYWN0aXZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQ2lkckJsb2NrOiAnMC4wLjAuMC8wJyxcbiAgICAgICAgICAgIE5hdEdhdGV3YXlJZDogJ25hdC14eHh4eHgnLFxuICAgICAgICAgICAgT3JpZ2luOiAnQ3JlYXRlUm91dGUnLFxuICAgICAgICAgICAgU3RhdGU6ICdhY3RpdmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgdnBuR2F0ZXdheXM6IFt7IFZwbkdhdGV3YXlJZDogJ2d3LWFiY2RlZicgfV0sXG5cbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5nZXRWYWx1ZSh7XG4gICAgYWNjb3VudDogJzEyMzQnLFxuICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgZmlsdGVyLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgIHZwY0lkOiAndnBjLTEyMzQ1NjcnLFxuICAgIHZwY0NpZHJCbG9jazogJzEuMS4xLjEvMTYnLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBbJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNyddLFxuICAgIGlzb2xhdGVkU3VibmV0SWRzOiB1bmRlZmluZWQsXG4gICAgaXNvbGF0ZWRTdWJuZXROYW1lczogdW5kZWZpbmVkLFxuICAgIGlzb2xhdGVkU3VibmV0Um91dGVUYWJsZUlkczogdW5kZWZpbmVkLFxuICAgIHByaXZhdGVTdWJuZXRJZHM6IFsnc3ViLTc4OTAxMiddLFxuICAgIHByaXZhdGVTdWJuZXROYW1lczogWydQcml2YXRlJ10sXG4gICAgcHJpdmF0ZVN1Ym5ldFJvdXRlVGFibGVJZHM6IFsncnRiLTc4OTAxMiddLFxuICAgIHB1YmxpY1N1Ym5ldElkczogWydzdWItMTIzNDU2J10sXG4gICAgcHVibGljU3VibmV0TmFtZXM6IFsnUHVibGljJ10sXG4gICAgcHVibGljU3VibmV0Um91dGVUYWJsZUlkczogWydydGItMTIzNDU2J10sXG4gICAgdnBuR2F0ZXdheUlkOiAnZ3ctYWJjZGVmJyxcbiAgICBzdWJuZXRHcm91cHM6IHVuZGVmaW5lZCxcbiAgfSk7XG59KTtcblxudGVzdCgndGhyb3dzIHdoZW4gbm8gc3VjaCBWUEMgaXMgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IGZpbHRlciA9IHsgZm9vOiAnYmFyJyB9O1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBWcGNOZXR3b3JrQ29udGV4dFByb3ZpZGVyUGx1Z2luKG1vY2tTREspO1xuXG4gIEFXUy5tb2NrKCdFQzInLCAnZGVzY3JpYmVWcGNzJywgKHBhcmFtczogYXdzLkVDMi5EZXNjcmliZVZwY3NSZXF1ZXN0LCBjYjogQXdzQ2FsbGJhY2s8YXdzLkVDMi5EZXNjcmliZVZwY3NSZXN1bHQ+KSA9PiB7XG4gICAgZXhwZWN0KHBhcmFtcy5GaWx0ZXJzKS50b0VxdWFsKFt7IE5hbWU6ICdmb28nLCBWYWx1ZXM6IFsnYmFyJ10gfV0pO1xuICAgIHJldHVybiBjYihudWxsLCB7fSk7XG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmdldFZhbHVlKHtcbiAgICBhY2NvdW50OiAnMTIzNCcsXG4gICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICBmaWx0ZXIsXG4gIH0pKS5yZWplY3RzLnRvVGhyb3coL0NvdWxkIG5vdCBmaW5kIGFueSBWUENzIG1hdGNoaW5nLyk7XG59KTtcblxudGVzdCgndGhyb3dzIHdoZW4gbXVsdGlwbGUgVlBDcyBhcmUgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IGZpbHRlciA9IHsgZm9vOiAnYmFyJyB9O1xuICBjb25zdCBwcm92aWRlciA9IG5ldyBWcGNOZXR3b3JrQ29udGV4dFByb3ZpZGVyUGx1Z2luKG1vY2tTREspO1xuXG4gIEFXUy5tb2NrKCdFQzInLCAnZGVzY3JpYmVWcGNzJywgKHBhcmFtczogYXdzLkVDMi5EZXNjcmliZVZwY3NSZXF1ZXN0LCBjYjogQXdzQ2FsbGJhY2s8YXdzLkVDMi5EZXNjcmliZVZwY3NSZXN1bHQ+KSA9PiB7XG4gICAgZXhwZWN0KHBhcmFtcy5GaWx0ZXJzKS50b0VxdWFsKFt7IE5hbWU6ICdmb28nLCBWYWx1ZXM6IFsnYmFyJ10gfV0pO1xuICAgIHJldHVybiBjYihudWxsLCB7IFZwY3M6IFt7IFZwY0lkOiAndnBjLTEnIH0sIHsgVnBjSWQ6ICd2cGMtMicgfV0gfSk7XG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmdldFZhbHVlKHtcbiAgICBhY2NvdW50OiAnMTIzNCcsXG4gICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICBmaWx0ZXIsXG4gIH0pKS5yZWplY3RzLnRvVGhyb3coL0ZvdW5kIDIgVlBDcyBtYXRjaGluZy8pO1xufSk7XG5cbnRlc3QoJ3VzZXMgdGhlIFZQQyBtYWluIHJvdXRlIHRhYmxlIHdoZW4gYSBzdWJuZXQgaGFzIG5vIHNwZWNpZmljIGFzc29jaWF0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBmaWx0ZXIgPSB7IGZvbzogJ2JhcicgfTtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgVnBjTmV0d29ya0NvbnRleHRQcm92aWRlclBsdWdpbihtb2NrU0RLKTtcblxuICBtb2NrVnBjTG9va3VwKHtcbiAgICBzdWJuZXRzOiBbXG4gICAgICB7IFN1Ym5ldElkOiAnc3ViLTEyMzQ1NicsIEF2YWlsYWJpbGl0eVpvbmU6ICdiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLCBNYXBQdWJsaWNJcE9uTGF1bmNoOiB0cnVlIH0sXG4gICAgICB7IFN1Ym5ldElkOiAnc3ViLTc4OTAxMicsIEF2YWlsYWJpbGl0eVpvbmU6ICdiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLCBNYXBQdWJsaWNJcE9uTGF1bmNoOiBmYWxzZSB9LFxuICAgIF0sXG4gICAgcm91dGVUYWJsZXM6IFtcbiAgICAgIHtcbiAgICAgICAgQXNzb2NpYXRpb25zOiBbeyBTdWJuZXRJZDogJ3N1Yi0xMjM0NTYnIH1dLFxuICAgICAgICBSb3V0ZVRhYmxlSWQ6ICdydGItMTIzNDU2JyxcbiAgICAgICAgUm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgRGVzdGluYXRpb25DaWRyQmxvY2s6ICcxLjEuMS4xLzI0JyxcbiAgICAgICAgICAgIEdhdGV3YXlJZDogJ2xvY2FsJyxcbiAgICAgICAgICAgIE9yaWdpbjogJ0NyZWF0ZVJvdXRlVGFibGUnLFxuICAgICAgICAgICAgU3RhdGU6ICdhY3RpdmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgRGVzdGluYXRpb25DaWRyQmxvY2s6ICcwLjAuMC4wLzAnLFxuICAgICAgICAgICAgR2F0ZXdheUlkOiAnaWd3LXh4eHh4eCcsXG4gICAgICAgICAgICBPcmlnaW46ICdDcmVhdGVSb3V0ZScsXG4gICAgICAgICAgICBTdGF0ZTogJ2FjdGl2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIEFzc29jaWF0aW9uczogW3sgTWFpbjogdHJ1ZSB9XSxcbiAgICAgICAgUm91dGVUYWJsZUlkOiAncnRiLTc4OTAxMicsXG4gICAgICAgIFJvdXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQ2lkckJsb2NrOiAnMS4xLjIuMS8yNCcsXG4gICAgICAgICAgICBHYXRld2F5SWQ6ICdsb2NhbCcsXG4gICAgICAgICAgICBPcmlnaW46ICdDcmVhdGVSb3V0ZVRhYmxlJyxcbiAgICAgICAgICAgIFN0YXRlOiAnYWN0aXZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQ2lkckJsb2NrOiAnMC4wLjAuMC8wJyxcbiAgICAgICAgICAgIE5hdEdhdGV3YXlJZDogJ25hdC14eHh4eHgnLFxuICAgICAgICAgICAgT3JpZ2luOiAnQ3JlYXRlUm91dGUnLFxuICAgICAgICAgICAgU3RhdGU6ICdhY3RpdmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgdnBuR2F0ZXdheXM6IFt7IFZwbkdhdGV3YXlJZDogJ2d3LWFiY2RlZicgfV0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZ2V0VmFsdWUoe1xuICAgIGFjY291bnQ6ICcxMjM0JyxcbiAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgIGZpbHRlcixcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICB2cGNJZDogJ3ZwYy0xMjM0NTY3JyxcbiAgICB2cGNDaWRyQmxvY2s6ICcxLjEuMS4xLzE2JyxcbiAgICBhdmFpbGFiaWxpdHlab25lczogWydiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnXSxcbiAgICBpc29sYXRlZFN1Ym5ldElkczogdW5kZWZpbmVkLFxuICAgIGlzb2xhdGVkU3VibmV0TmFtZXM6IHVuZGVmaW5lZCxcbiAgICBpc29sYXRlZFN1Ym5ldFJvdXRlVGFibGVJZHM6IHVuZGVmaW5lZCxcbiAgICBwcml2YXRlU3VibmV0SWRzOiBbJ3N1Yi03ODkwMTInXSxcbiAgICBwcml2YXRlU3VibmV0TmFtZXM6IFsnUHJpdmF0ZSddLFxuICAgIHByaXZhdGVTdWJuZXRSb3V0ZVRhYmxlSWRzOiBbJ3J0Yi03ODkwMTInXSxcbiAgICBwdWJsaWNTdWJuZXRJZHM6IFsnc3ViLTEyMzQ1NiddLFxuICAgIHB1YmxpY1N1Ym5ldE5hbWVzOiBbJ1B1YmxpYyddLFxuICAgIHB1YmxpY1N1Ym5ldFJvdXRlVGFibGVJZHM6IFsncnRiLTEyMzQ1NiddLFxuICAgIHZwbkdhdGV3YXlJZDogJ2d3LWFiY2RlZicsXG4gICAgc3VibmV0R3JvdXBzOiB1bmRlZmluZWQsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1JlY29nbml6ZSBwdWJsaWMgc3VibmV0IGJ5IHJvdXRlIHRhYmxlJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBmaWx0ZXIgPSB7IGZvbzogJ2JhcicgfTtcbiAgY29uc3QgcHJvdmlkZXIgPSBuZXcgVnBjTmV0d29ya0NvbnRleHRQcm92aWRlclBsdWdpbihtb2NrU0RLKTtcblxuICBtb2NrVnBjTG9va3VwKHtcbiAgICBzdWJuZXRzOiBbXG4gICAgICB7IFN1Ym5ldElkOiAnc3ViLTEyMzQ1NicsIEF2YWlsYWJpbGl0eVpvbmU6ICdiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnLCBNYXBQdWJsaWNJcE9uTGF1bmNoOiBmYWxzZSB9LFxuICAgIF0sXG4gICAgcm91dGVUYWJsZXM6IFtcbiAgICAgIHtcbiAgICAgICAgQXNzb2NpYXRpb25zOiBbeyBTdWJuZXRJZDogJ3N1Yi0xMjM0NTYnIH1dLFxuICAgICAgICBSb3V0ZVRhYmxlSWQ6ICdydGItMTIzNDU2JyxcbiAgICAgICAgUm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgRGVzdGluYXRpb25DaWRyQmxvY2s6ICcxMC4wLjIuMC8yNicsXG4gICAgICAgICAgICBPcmlnaW46ICdDcmVhdGVSb3V0ZScsXG4gICAgICAgICAgICBTdGF0ZTogJ2FjdGl2ZScsXG4gICAgICAgICAgICBWcGNQZWVyaW5nQ29ubmVjdGlvbklkOiAncGN4LXh4eHh4eCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBEZXN0aW5hdGlvbkNpZHJCbG9jazogJzEwLjAuMS4wLzI0JyxcbiAgICAgICAgICAgIEdhdGV3YXlJZDogJ2xvY2FsJyxcbiAgICAgICAgICAgIE9yaWdpbjogJ0NyZWF0ZVJvdXRlVGFibGUnLFxuICAgICAgICAgICAgU3RhdGU6ICdhY3RpdmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgRGVzdGluYXRpb25DaWRyQmxvY2s6ICcwLjAuMC4wLzAnLFxuICAgICAgICAgICAgR2F0ZXdheUlkOiAnaWd3LXh4eHh4eCcsXG4gICAgICAgICAgICBPcmlnaW46ICdDcmVhdGVSb3V0ZScsXG4gICAgICAgICAgICBTdGF0ZTogJ2FjdGl2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5nZXRWYWx1ZSh7XG4gICAgYWNjb3VudDogJzEyMzQnLFxuICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgZmlsdGVyLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgIHZwY0lkOiAndnBjLTEyMzQ1NjcnLFxuICAgIHZwY0NpZHJCbG9jazogJzEuMS4xLjEvMTYnLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBbJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNyddLFxuICAgIGlzb2xhdGVkU3VibmV0SWRzOiB1bmRlZmluZWQsXG4gICAgaXNvbGF0ZWRTdWJuZXROYW1lczogdW5kZWZpbmVkLFxuICAgIGlzb2xhdGVkU3VibmV0Um91dGVUYWJsZUlkczogdW5kZWZpbmVkLFxuICAgIHByaXZhdGVTdWJuZXRJZHM6IHVuZGVmaW5lZCxcbiAgICBwcml2YXRlU3VibmV0TmFtZXM6IHVuZGVmaW5lZCxcbiAgICBwcml2YXRlU3VibmV0Um91dGVUYWJsZUlkczogdW5kZWZpbmVkLFxuICAgIHB1YmxpY1N1Ym5ldElkczogWydzdWItMTIzNDU2J10sXG4gICAgcHVibGljU3VibmV0TmFtZXM6IFsnUHVibGljJ10sXG4gICAgcHVibGljU3VibmV0Um91dGVUYWJsZUlkczogWydydGItMTIzNDU2J10sXG4gICAgdnBuR2F0ZXdheUlkOiB1bmRlZmluZWQsXG4gICAgc3VibmV0R3JvdXBzOiB1bmRlZmluZWQsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1JlY29nbml6ZSBwcml2YXRlIHN1Ym5ldCBieSByb3V0ZSB0YWJsZScsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgZmlsdGVyID0geyBmb286ICdiYXInIH07XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IFZwY05ldHdvcmtDb250ZXh0UHJvdmlkZXJQbHVnaW4obW9ja1NESyk7XG5cbiAgbW9ja1ZwY0xvb2t1cCh7XG4gICAgc3VibmV0czogW1xuICAgICAgeyBTdWJuZXRJZDogJ3N1Yi0xMjM0NTYnLCBBdmFpbGFiaWxpdHlab25lOiAnYmVybXVkYS10cmlhbmdsZS0xMzM3JywgTWFwUHVibGljSXBPbkxhdW5jaDogZmFsc2UgfSxcbiAgICBdLFxuICAgIHJvdXRlVGFibGVzOiBbXG4gICAgICB7XG4gICAgICAgIEFzc29jaWF0aW9uczogW3sgU3VibmV0SWQ6ICdzdWItMTIzNDU2JyB9XSxcbiAgICAgICAgUm91dGVUYWJsZUlkOiAncnRiLTEyMzQ1NicsXG4gICAgICAgIFJvdXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQ2lkckJsb2NrOiAnMTAuMC4yLjAvMjYnLFxuICAgICAgICAgICAgT3JpZ2luOiAnQ3JlYXRlUm91dGUnLFxuICAgICAgICAgICAgU3RhdGU6ICdhY3RpdmUnLFxuICAgICAgICAgICAgVnBjUGVlcmluZ0Nvbm5lY3Rpb25JZDogJ3BjeC14eHh4eHgnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgRGVzdGluYXRpb25DaWRyQmxvY2s6ICcxMC4wLjEuMC8yNCcsXG4gICAgICAgICAgICBHYXRld2F5SWQ6ICdsb2NhbCcsXG4gICAgICAgICAgICBPcmlnaW46ICdDcmVhdGVSb3V0ZVRhYmxlJyxcbiAgICAgICAgICAgIFN0YXRlOiAnYWN0aXZlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQ2lkckJsb2NrOiAnMC4wLjAuMC8wJyxcbiAgICAgICAgICAgIE5hdEdhdGV3YXlJZDogJ25hdC14eHh4eHgnLFxuICAgICAgICAgICAgT3JpZ2luOiAnQ3JlYXRlUm91dGUnLFxuICAgICAgICAgICAgU3RhdGU6ICdhY3RpdmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZ2V0VmFsdWUoe1xuICAgIGFjY291bnQ6ICcxMjM0JyxcbiAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgIGZpbHRlcixcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICB2cGNJZDogJ3ZwYy0xMjM0NTY3JyxcbiAgICB2cGNDaWRyQmxvY2s6ICcxLjEuMS4xLzE2JyxcbiAgICBhdmFpbGFiaWxpdHlab25lczogWydiZXJtdWRhLXRyaWFuZ2xlLTEzMzcnXSxcbiAgICBpc29sYXRlZFN1Ym5ldElkczogdW5kZWZpbmVkLFxuICAgIGlzb2xhdGVkU3VibmV0TmFtZXM6IHVuZGVmaW5lZCxcbiAgICBpc29sYXRlZFN1Ym5ldFJvdXRlVGFibGVJZHM6IHVuZGVmaW5lZCxcbiAgICBwcml2YXRlU3VibmV0SWRzOiBbJ3N1Yi0xMjM0NTYnXSxcbiAgICBwcml2YXRlU3VibmV0TmFtZXM6IFsnUHJpdmF0ZSddLFxuICAgIHByaXZhdGVTdWJuZXRSb3V0ZVRhYmxlSWRzOiBbJ3J0Yi0xMjM0NTYnXSxcbiAgICBwdWJsaWNTdWJuZXRJZHM6IHVuZGVmaW5lZCxcbiAgICBwdWJsaWNTdWJuZXROYW1lczogdW5kZWZpbmVkLFxuICAgIHB1YmxpY1N1Ym5ldFJvdXRlVGFibGVJZHM6IHVuZGVmaW5lZCxcbiAgICB2cG5HYXRld2F5SWQ6IHVuZGVmaW5lZCxcbiAgICBzdWJuZXRHcm91cHM6IHVuZGVmaW5lZCxcbiAgfSk7XG59KTtcblxudGVzdCgnUmVjb2duaXplIGlzb2xhdGVkIHN1Ym5ldCBieSByb3V0ZSB0YWJsZScsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgZmlsdGVyID0geyBmb286ICdiYXInIH07XG4gIGNvbnN0IHByb3ZpZGVyID0gbmV3IFZwY05ldHdvcmtDb250ZXh0UHJvdmlkZXJQbHVnaW4obW9ja1NESyk7XG5cbiAgbW9ja1ZwY0xvb2t1cCh7XG4gICAgc3VibmV0czogW1xuICAgICAgeyBTdWJuZXRJZDogJ3N1Yi0xMjM0NTYnLCBBdmFpbGFiaWxpdHlab25lOiAnYmVybXVkYS10cmlhbmdsZS0xMzM3JywgTWFwUHVibGljSXBPbkxhdW5jaDogZmFsc2UgfSxcbiAgICBdLFxuICAgIHJvdXRlVGFibGVzOiBbXG4gICAgICB7XG4gICAgICAgIEFzc29jaWF0aW9uczogW3sgU3VibmV0SWQ6ICdzdWItMTIzNDU2JyB9XSxcbiAgICAgICAgUm91dGVUYWJsZUlkOiAncnRiLTEyMzQ1NicsXG4gICAgICAgIFJvdXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIERlc3RpbmF0aW9uQ2lkckJsb2NrOiAnMTAuMC4xLjAvMjQnLFxuICAgICAgICAgICAgR2F0ZXdheUlkOiAnbG9jYWwnLFxuICAgICAgICAgICAgT3JpZ2luOiAnQ3JlYXRlUm91dGVUYWJsZScsXG4gICAgICAgICAgICBTdGF0ZTogJ2FjdGl2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5nZXRWYWx1ZSh7XG4gICAgYWNjb3VudDogJzEyMzQnLFxuICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgZmlsdGVyLFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgIHZwY0lkOiAndnBjLTEyMzQ1NjcnLFxuICAgIHZwY0NpZHJCbG9jazogJzEuMS4xLjEvMTYnLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBbJ2Jlcm11ZGEtdHJpYW5nbGUtMTMzNyddLFxuICAgIGlzb2xhdGVkU3VibmV0SWRzOiBbJ3N1Yi0xMjM0NTYnXSxcbiAgICBpc29sYXRlZFN1Ym5ldE5hbWVzOiBbJ0lzb2xhdGVkJ10sXG4gICAgaXNvbGF0ZWRTdWJuZXRSb3V0ZVRhYmxlSWRzOiBbJ3J0Yi0xMjM0NTYnXSxcbiAgICBwcml2YXRlU3VibmV0SWRzOiB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZVN1Ym5ldE5hbWVzOiB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZVN1Ym5ldFJvdXRlVGFibGVJZHM6IHVuZGVmaW5lZCxcbiAgICBwdWJsaWNTdWJuZXRJZHM6IHVuZGVmaW5lZCxcbiAgICBwdWJsaWNTdWJuZXROYW1lczogdW5kZWZpbmVkLFxuICAgIHB1YmxpY1N1Ym5ldFJvdXRlVGFibGVJZHM6IHVuZGVmaW5lZCxcbiAgICB2cG5HYXRld2F5SWQ6IHVuZGVmaW5lZCxcbiAgICBzdWJuZXRHcm91cHM6IHVuZGVmaW5lZCxcbiAgfSk7XG59KTtcblxuaW50ZXJmYWNlIFZwY0xvb2t1cE9wdGlvbnMge1xuICBzdWJuZXRzOiBhd3MuRUMyLlN1Ym5ldFtdO1xuICByb3V0ZVRhYmxlczogYXdzLkVDMi5Sb3V0ZVRhYmxlW107XG4gIHZwbkdhdGV3YXlzPzogYXdzLkVDMi5WcG5HYXRld2F5W107XG59XG5cbmZ1bmN0aW9uIG1vY2tWcGNMb29rdXAob3B0aW9uczogVnBjTG9va3VwT3B0aW9ucykge1xuICBjb25zdCBWcGNJZCA9ICd2cGMtMTIzNDU2Nyc7XG5cbiAgQVdTLm1vY2soJ0VDMicsICdkZXNjcmliZVZwY3MnLCAocGFyYW1zOiBhd3MuRUMyLkRlc2NyaWJlVnBjc1JlcXVlc3QsIGNiOiBBd3NDYWxsYmFjazxhd3MuRUMyLkRlc2NyaWJlVnBjc1Jlc3VsdD4pID0+IHtcbiAgICBleHBlY3QocGFyYW1zLkZpbHRlcnMpLnRvRXF1YWwoW3sgTmFtZTogJ2ZvbycsIFZhbHVlczogWydiYXInXSB9XSk7XG4gICAgcmV0dXJuIGNiKG51bGwsIHsgVnBjczogW3sgVnBjSWQsIENpZHJCbG9jazogJzEuMS4xLjEvMTYnIH1dIH0pO1xuICB9KTtcblxuICBBV1MubW9jaygnRUMyJywgJ2Rlc2NyaWJlU3VibmV0cycsIChwYXJhbXM6IGF3cy5FQzIuRGVzY3JpYmVTdWJuZXRzUmVxdWVzdCwgY2I6IEF3c0NhbGxiYWNrPGF3cy5FQzIuRGVzY3JpYmVTdWJuZXRzUmVzdWx0PikgPT4ge1xuICAgIGV4cGVjdChwYXJhbXMuRmlsdGVycykudG9FcXVhbChbeyBOYW1lOiAndnBjLWlkJywgVmFsdWVzOiBbVnBjSWRdIH1dKTtcbiAgICByZXR1cm4gY2IobnVsbCwgeyBTdWJuZXRzOiBvcHRpb25zLnN1Ym5ldHMgfSk7XG4gIH0pO1xuXG4gIEFXUy5tb2NrKCdFQzInLCAnZGVzY3JpYmVSb3V0ZVRhYmxlcycsIChwYXJhbXM6IGF3cy5FQzIuRGVzY3JpYmVSb3V0ZVRhYmxlc1JlcXVlc3QsIGNiOiBBd3NDYWxsYmFjazxhd3MuRUMyLkRlc2NyaWJlUm91dGVUYWJsZXNSZXN1bHQ+KSA9PiB7XG4gICAgZXhwZWN0KHBhcmFtcy5GaWx0ZXJzKS50b0VxdWFsKFt7IE5hbWU6ICd2cGMtaWQnLCBWYWx1ZXM6IFtWcGNJZF0gfV0pO1xuICAgIHJldHVybiBjYihudWxsLCB7IFJvdXRlVGFibGVzOiBvcHRpb25zLnJvdXRlVGFibGVzIH0pO1xuICB9KTtcblxuICBBV1MubW9jaygnRUMyJywgJ2Rlc2NyaWJlVnBuR2F0ZXdheXMnLCAocGFyYW1zOiBhd3MuRUMyLkRlc2NyaWJlVnBuR2F0ZXdheXNSZXF1ZXN0LCBjYjogQXdzQ2FsbGJhY2s8YXdzLkVDMi5EZXNjcmliZVZwbkdhdGV3YXlzUmVzdWx0PikgPT4ge1xuICAgIGV4cGVjdChwYXJhbXMuRmlsdGVycykudG9FcXVhbChbXG4gICAgICB7IE5hbWU6ICdhdHRhY2htZW50LnZwYy1pZCcsIFZhbHVlczogW1ZwY0lkXSB9LFxuICAgICAgeyBOYW1lOiAnYXR0YWNobWVudC5zdGF0ZScsIFZhbHVlczogWydhdHRhY2hlZCddIH0sXG4gICAgICB7IE5hbWU6ICdzdGF0ZScsIFZhbHVlczogWydhdmFpbGFibGUnXSB9LFxuICAgIF0pO1xuICAgIHJldHVybiBjYihudWxsLCB7IFZwbkdhdGV3YXlzOiBvcHRpb25zLnZwbkdhdGV3YXlzIH0pO1xuICB9KTtcbn1cbiJdfQ==
|
package/test/init.test.js
CHANGED
|
@@ -56,6 +56,7 @@ describe.each(['1', '2'])('v%s tests', (majorVersion) => {
|
|
|
56
56
|
for (const templ of await init_1.availableInitTemplates()) {
|
|
57
57
|
for (const lang of templ.languages) {
|
|
58
58
|
await withTempDir(async (tmpDir) => {
|
|
59
|
+
var _a;
|
|
59
60
|
await init_1.cliInit(templ.name, lang,
|
|
60
61
|
/* canUseNetwork */ false,
|
|
61
62
|
/* generateOnly */ true, tmpDir);
|
|
@@ -65,9 +66,9 @@ describe.each(['1', '2'])('v%s tests', (majorVersion) => {
|
|
|
65
66
|
}
|
|
66
67
|
const config = await fs.readJson(path.join(tmpDir, 'cdk.json'));
|
|
67
68
|
const context = config.context || {};
|
|
68
|
-
for (const [key,
|
|
69
|
-
|
|
70
|
-
expect(
|
|
69
|
+
for (const [key, actual] of Object.entries(context)) {
|
|
70
|
+
expect(key in cxapi.FUTURE_FLAGS || key in cxapi.NEW_PROJECT_DEFAULT_CONTEXT).toBeTruthy();
|
|
71
|
+
expect((_a = cxapi.FUTURE_FLAGS[key]) !== null && _a !== void 0 ? _a : cxapi.NEW_PROJECT_DEFAULT_CONTEXT[key]).toEqual(actual);
|
|
71
72
|
}
|
|
72
73
|
// assert that expired future flags are not part of the cdk.json
|
|
73
74
|
Object.keys(context).forEach(k => {
|
|
@@ -154,4 +155,4 @@ async function recursiveListFiles(rdir) {
|
|
|
154
155
|
}
|
|
155
156
|
}
|
|
156
157
|
}
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5pdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7R0FJRztBQUNILElBQUksZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCO0NBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBRUoseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qix5Q0FBeUM7QUFDekMsK0JBQStCO0FBQy9CLHNDQUE4RDtBQUU5RCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7SUFDdEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLGdCQUFnQixHQUFHLEdBQUcsWUFBWSxNQUFNLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMvRCxNQUFNLGNBQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEYsd0VBQXdFO1FBQ3hFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMzRCxNQUFNLGNBQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEYsd0VBQXdFO1FBQ3hFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMzRCxNQUFNLGNBQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEYsd0VBQXdFO1FBQ3hFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVB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QUMsQ0FBQzthQUNwQjtTQUNGO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBpbml0IHRlbXBsYXRlcyByZWx5IG9uIHBhcnNpbmcgdGhlIGN1cnJlbnQgbWFqb3IgdmVyc2lvbiB0byBmaW5kIHRoZSBjb3JyZWN0IHRlbXBsYXRlIGRpcmVjdG9yeS5cbiAqIER1cmluZyB0ZXN0cywgdGhlIGN1cnJlbnQgcGFja2FnZSB2ZXJzaW9uIGlzICcwLjAuMCcsIHJhdGhlciB0aGFuIGEgc3BlY2lmaWMgdmVyc2lvbi5cbiAqIFRoZSBiZWxvdyBtb2NrcyB0aGUgdmVyc2lvbk51bWJlciB0byByZXR1cm4gdGhlIG1ham9yIHZlcnNpb24gKGFuZCBzbyBpbml0IHRlbXBsYXRlIHZlcnNpb24pIHNwZWNpZmllZC5cbiAqL1xubGV0IG1vY2tNYWpvclZlcnNpb24gPSAnMS4wLjAnO1xuamVzdC5tb2NrKCcuLi9saWIvdmVyc2lvbicsICgpID0+ICh7XG4gIHZlcnNpb25OdW1iZXI6ICgpID0+IG1vY2tNYWpvclZlcnNpb24sXG59KSk7XG5cbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgYXZhaWxhYmxlSW5pdFRlbXBsYXRlcywgY2xpSW5pdCB9IGZyb20gJy4uL2xpYi9pbml0JztcblxuZGVzY3JpYmUuZWFjaChbJzEnLCAnMiddKSgndiVzIHRlc3RzJywgKG1ham9yVmVyc2lvbikgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBtb2NrTWFqb3JWZXJzaW9uID0gYCR7bWFqb3JWZXJzaW9ufS4wLjBgO1xuICAgIGplc3QucmVzZXRBbGxNb2NrcygpO1xuICB9KTtcblxuICBjbGlUZXN0KCdjcmVhdGUgYSBUeXBlU2NyaXB0IGxpYnJhcnkgcHJvamVjdCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnbGliJywgJ3R5cGVzY3JpcHQnLCBmYWxzZSwgdW5kZWZpbmVkIC8qIGNhblVzZU5ldHdvcmsgKi8sIHdvcmtEaXIpO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCBwYWNrYWdlLmpzb24gYW5kIGxpYi8gZ290IGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdwYWNrYWdlLmpzb24nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ2xpYicpKSkudG9CZVRydXRoeSgpO1xuICB9KTtcblxuICBjbGlUZXN0KCdjcmVhdGUgYSBUeXBlU2NyaXB0IGFwcCBwcm9qZWN0JywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAndHlwZXNjcmlwdCcsIGZhbHNlLCB1bmRlZmluZWQgLyogY2FuVXNlTmV0d29yayAqLywgd29ya0Rpcik7XG5cbiAgICAvLyBDaGVjayB0aGF0IHBhY2thZ2UuanNvbiBhbmQgYmluLyBnb3QgY3JlYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ3BhY2thZ2UuanNvbicpKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAnYmluJykpKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIGNsaVRlc3QoJ2NyZWF0ZSBhIEphdmFTY3JpcHQgYXBwIHByb2plY3QnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICdqYXZhc2NyaXB0JywgZmFsc2UsIHVuZGVmaW5lZCAvKiBjYW5Vc2VOZXR3b3JrICovLCB3b3JrRGlyKTtcblxuICAgIC8vIENoZWNrIHRoYXQgcGFja2FnZS5qc29uIGFuZCBiaW4vIGdvdCBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAncGFja2FnZS5qc29uJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdiaW4nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJy5naXQnKSkpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnLS1nZW5lcmF0ZS1vbmx5IHNob3VsZCBza2lwIGdpdCBpbml0JywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAnamF2YXNjcmlwdCcsIGZhbHNlLCB0cnVlLCB3b3JrRGlyKTtcblxuICAgIC8vIENoZWNrIHRoYXQgcGFja2FnZS5qc29uIGFuZCBiaW4vIGdvdCBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAncGFja2FnZS5qc29uJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdiaW4nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJy5naXQnKSkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICBjbGlUZXN0KCdnaXQgZGlyZWN0b3J5IGRvZXMgbm90IHRocm93IG9mZiB0aGUgaW5pdGVyIScsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgZnMubWtkaXJTeW5jKHBhdGguam9pbih3b3JrRGlyLCAnLmdpdCcpKTtcblxuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICd0eXBlc2NyaXB0JywgZmFsc2UsIHVuZGVmaW5lZCAvKiBjYW5Vc2VOZXR3b3JrICovLCB3b3JrRGlyKTtcblxuICAgIC8vIENoZWNrIHRoYXQgcGFja2FnZS5qc29uIGFuZCBiaW4vIGdvdCBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAncGFja2FnZS5qc29uJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdiaW4nKSkpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG5cbiAgdGVzdCgndmVyaWZ5IFwiZnV0dXJlIGZsYWdzXCIgYXJlIGFkZGVkIHRvIGNkay5qc29uJywgYXN5bmMgKCkgPT4ge1xuXG4gICAgZm9yIChjb25zdCB0ZW1wbCBvZiBhd2FpdCBhdmFpbGFibGVJbml0VGVtcGxhdGVzKCkpIHtcbiAgICAgIGZvciAoY29uc3QgbGFuZyBvZiB0ZW1wbC5sYW5ndWFnZXMpIHtcbiAgICAgICAgYXdhaXQgd2l0aFRlbXBEaXIoYXN5bmMgdG1wRGlyID0+IHtcbiAgICAgICAgICBhd2FpdCBjbGlJbml0KHRlbXBsLm5hbWUsIGxhbmcsXG4gICAgICAgICAgICAvKiBjYW5Vc2VOZXR3b3JrICovIGZhbHNlLFxuICAgICAgICAgICAgLyogZ2VuZXJhdGVPbmx5ICovIHRydWUsXG4gICAgICAgICAgICB0bXBEaXIpO1xuXG4gICAgICAgICAgLy8gb2sgaWYgdGVtcGxhdGUgZG9lc24ndCBoYXZlIGEgY2RrLmpzb24gZmlsZSAoZS5nLiB0aGUgXCJsaWJcIiB0ZW1wbGF0ZSlcbiAgICAgICAgICBpZiAoIWF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHRtcERpciwgJ2Nkay5qc29uJykpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgZnMucmVhZEpzb24ocGF0aC5qb2luKHRtcERpciwgJ2Nkay5qc29uJykpO1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb25maWcuY29udGV4dCB8fCB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGV4cGVjdGVkXSBvZiBPYmplY3QuZW50cmllcyhjb250ZXh0KSkge1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsID0gY3hhcGkuRlVUVVJFX0ZMQUdTW2tleV07XG4gICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBhc3NlcnQgdGhhdCBleHBpcmVkIGZ1dHVyZSBmbGFncyBhcmUgbm90IHBhcnQgb2YgdGhlIGNkay5qc29uXG4gICAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChjeGFwaS5GVVRVUkVfRkxBR1NfRVhQSVJFRC5pbmNsdWRlcyhrKSkudG9FcXVhbChmYWxzZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgLy8gVGhpcyBpcyBhIGxvdCB0byB0ZXN0LCBhbmQgaXQgY2FuIGJlIHNsb3ctaXNoLCBlc3BlY2lhbGx5IHdoZW4gcmFuIHdpdGggb3RoZXIgdGVzdHMuXG4gIDMwXzAwMCk7XG59KTtcblxuZGVzY3JpYmUoJ2NvbnN0cnVjdHMgdmVyc2lvbicsICgpID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgbW9ja01ham9yVmVyc2lvbiA9ICcyLjAuMCc7XG4gICAgamVzdC5yZXNldEFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGNsaVRlc3QoJ2phdmEnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICdqYXZhJywgZmFsc2UsIHRydWUsIHdvcmtEaXIpO1xuXG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdwb20ueG1sJykpKS50b0JlVHJ1dGh5KCk7XG5cbiAgICBjb25zdCBwb20gPSAoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKHdvcmtEaXIsICdwb20ueG1sJyksICd1dGY4JykpLnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHBvbS5tYXAobGluZSA9PiBsaW5lLm1hdGNoKC9cXDxjb25zdHJ1Y3RzXFwudmVyc2lvblxcPiguKilcXDxcXC9jb25zdHJ1Y3RzXFwudmVyc2lvblxcPi8pKVxuICAgICAgLmZpbHRlcihsID0+IGwpO1xuXG4gICAgZXhwZWN0KG1hdGNoZXMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgIG1hdGNoZXMuZm9yRWFjaChtID0+IHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBtICYmIG1bMV07XG4gICAgICBleHBlY3QodmVyc2lvbikudG9NYXRjaCgvXFxbMTBcXC5bXFxkXStcXC5bXFxkXSssMTFcXC4wXFwuMFxcKS8pO1xuICAgIH0pO1xuICB9KTtcblxuICBjbGlUZXN0KCcuTkVUJywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAnY3NoYXJwJywgZmFsc2UsIHRydWUsIHdvcmtEaXIpO1xuXG4gICAgY29uc3QgY3Nwcm9qRmlsZSA9IChhd2FpdCByZWN1cnNpdmVMaXN0RmlsZXMod29ya0RpcikpLmZpbHRlcihmID0+IGYuZW5kc1dpdGgoJy5jc3Byb2onKSlbMF07XG4gICAgZXhwZWN0KGNzcHJvakZpbGUpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICBjb25zdCBjc3Byb2ogPSAoYXdhaXQgZnMucmVhZEZpbGUoY3Nwcm9qRmlsZSwgJ3V0ZjgnKSkuc3BsaXQoL1xccj9cXG4vKTtcblxuICAgIGV4cGVjdChjc3Byb2opLnRvQ29udGFpbkVxdWFsKGV4cGVjdC5zdHJpbmdNYXRjaGluZygvXFw8UGFja2FnZVJlZmVyZW5jZSBJbmNsdWRlPVwiQ29uc3RydWN0c1wiIFZlcnNpb249XCJcXFsxMFxcLi4qLDExXFwuLipcXClcIi8pKTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnUHl0aG9uJywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAncHl0aG9uJywgZmFsc2UsIHRydWUsIHdvcmtEaXIpO1xuXG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdyZXF1aXJlbWVudHMudHh0JykpKS50b0JlVHJ1dGh5KCk7XG4gICAgY29uc3Qgc2V0dXBQeSA9IChhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4od29ya0RpciwgJ3JlcXVpcmVtZW50cy50eHQnKSwgJ3V0ZjgnKSkuc3BsaXQoL1xccj9cXG4vKTtcbiAgICAvLyByZXR1cm4gUmVnRXhwTWF0Y2hBcnJheSAocmVzdWx0IG9mIGxpbmUubWF0Y2goKSkgZm9yIGV2ZXJ5IGxpbmVzIHRoYXQgbWF0Y2ggcmUuXG4gICAgY29uc3QgbWF0Y2hlcyA9IHNldHVwUHkubWFwKGxpbmUgPT4gbGluZS5tYXRjaCgvXmNvbnN0cnVjdHMoLiopLykpXG4gICAgICAuZmlsdGVyKGwgPT4gbCk7XG5cbiAgICBleHBlY3QobWF0Y2hlcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgbWF0Y2hlcy5mb3JFYWNoKG0gPT4ge1xuICAgICAgY29uc3QgdmVyc2lvbiA9IG0gJiYgbVsxXTtcbiAgICAgIGV4cGVjdCh2ZXJzaW9uKS50b01hdGNoKC8+PTEwXFwuXFxkK1xcLlxcZCw8MTFcXC4wXFwuMC8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG50ZXN0KCd3aGVuIG5vIHZlcnNpb24gbnVtYmVyIGlzIHByZXNlbnQgKGUuZy4sIGxvY2FsIGRldmVsb3BtZW50KSwgdGhlIHYxIHRlbXBsYXRlcyBhcmUgY2hvc2VuIGJ5IGRlZmF1bHQnLCBhc3luYyAoKSA9PiB7XG4gIG1vY2tNYWpvclZlcnNpb24gPSAnMC4wLjAnO1xuICBqZXN0LnJlc2V0QWxsTW9ja3MoKTtcblxuICBleHBlY3QoKGF3YWl0IGF2YWlsYWJsZUluaXRUZW1wbGF0ZXMoKSkubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMCk7XG59KTtcblxuZnVuY3Rpb24gY2xpVGVzdChuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IChkaXI6IHN0cmluZykgPT4gdm9pZCB8IFByb21pc2U8YW55Pik6IHZvaWQge1xuICB0ZXN0KG5hbWUsICgpID0+IHdpdGhUZW1wRGlyKGhhbmRsZXIpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2l0aFRlbXBEaXIoY2I6IChkaXI6IHN0cmluZykgPT4gdm9pZCB8IFByb21pc2U8YW55Pikge1xuICBjb25zdCB0bXBEaXIgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2F3cy1jZGstdGVzdCcpKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjYih0bXBEaXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJlbW92ZSh0bXBEaXIpO1xuICB9XG59XG5cbi8qKlxuICogTGlzdCBhbGwgZmlsZXMgdW5kZXJuZWF0aCBkaXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVjdXJzaXZlTGlzdEZpbGVzKHJkaXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgYXdhaXQgcmVjdXJzZShyZGlyKTtcbiAgcmV0dXJuIHJldDtcblxuICBhc3luYyBmdW5jdGlvbiByZWN1cnNlKGRpcjogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGF3YWl0IGZzLnJlYWRkaXIoZGlyKSkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKTtcbiAgICAgIGlmICgoYXdhaXQgZnMuc3RhdChmdWxsUGF0aCkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgYXdhaXQgcmVjdXJzZShmdWxsUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQucHVzaChmdWxsUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5pdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7R0FJRztBQUNILElBQUksZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCO0NBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBRUoseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qix5Q0FBeUM7QUFDekMsK0JBQStCO0FBQy9CLHNDQUE4RDtBQUU5RCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7SUFDdEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLGdCQUFnQixHQUFHLEdBQUcsWUFBWSxNQUFNLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMvRCxNQUFNLGNBQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEYsd0VBQXdFO1FBQ3hFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMzRCxNQUFNLGNBQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEYsd0VBQXdFO1FBQ3hFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMzRCxNQUFNLGNBQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEYsd0VBQXdFO1FBQ3hFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVB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QUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQzNDLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDcEI7U0FDRjtJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgaW5pdCB0ZW1wbGF0ZXMgcmVseSBvbiBwYXJzaW5nIHRoZSBjdXJyZW50IG1ham9yIHZlcnNpb24gdG8gZmluZCB0aGUgY29ycmVjdCB0ZW1wbGF0ZSBkaXJlY3RvcnkuXG4gKiBEdXJpbmcgdGVzdHMsIHRoZSBjdXJyZW50IHBhY2thZ2UgdmVyc2lvbiBpcyAnMC4wLjAnLCByYXRoZXIgdGhhbiBhIHNwZWNpZmljIHZlcnNpb24uXG4gKiBUaGUgYmVsb3cgbW9ja3MgdGhlIHZlcnNpb25OdW1iZXIgdG8gcmV0dXJuIHRoZSBtYWpvciB2ZXJzaW9uIChhbmQgc28gaW5pdCB0ZW1wbGF0ZSB2ZXJzaW9uKSBzcGVjaWZpZWQuXG4gKi9cbmxldCBtb2NrTWFqb3JWZXJzaW9uID0gJzEuMC4wJztcbmplc3QubW9jaygnLi4vbGliL3ZlcnNpb24nLCAoKSA9PiAoe1xuICB2ZXJzaW9uTnVtYmVyOiAoKSA9PiBtb2NrTWFqb3JWZXJzaW9uLFxufSkpO1xuXG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGF2YWlsYWJsZUluaXRUZW1wbGF0ZXMsIGNsaUluaXQgfSBmcm9tICcuLi9saWIvaW5pdCc7XG5cbmRlc2NyaWJlLmVhY2goWycxJywgJzInXSkoJ3YlcyB0ZXN0cycsIChtYWpvclZlcnNpb24pID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgbW9ja01ham9yVmVyc2lvbiA9IGAke21ham9yVmVyc2lvbn0uMC4wYDtcbiAgICBqZXN0LnJlc2V0QWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnY3JlYXRlIGEgVHlwZVNjcmlwdCBsaWJyYXJ5IHByb2plY3QnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2xpYicsICd0eXBlc2NyaXB0JywgZmFsc2UsIHVuZGVmaW5lZCAvKiBjYW5Vc2VOZXR3b3JrICovLCB3b3JrRGlyKTtcblxuICAgIC8vIENoZWNrIHRoYXQgcGFja2FnZS5qc29uIGFuZCBsaWIvIGdvdCBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAncGFja2FnZS5qc29uJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdsaWInKSkpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnY3JlYXRlIGEgVHlwZVNjcmlwdCBhcHAgcHJvamVjdCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ3R5cGVzY3JpcHQnLCBmYWxzZSwgdW5kZWZpbmVkIC8qIGNhblVzZU5ldHdvcmsgKi8sIHdvcmtEaXIpO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCBwYWNrYWdlLmpzb24gYW5kIGJpbi8gZ290IGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICdwYWNrYWdlLmpzb24nKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ2JpbicpKSkudG9CZVRydXRoeSgpO1xuICB9KTtcblxuICBjbGlUZXN0KCdjcmVhdGUgYSBKYXZhU2NyaXB0IGFwcCBwcm9qZWN0JywgYXN5bmMgKHdvcmtEaXIpID0+IHtcbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAnamF2YXNjcmlwdCcsIGZhbHNlLCB1bmRlZmluZWQgLyogY2FuVXNlTmV0d29yayAqLywgd29ya0Rpcik7XG5cbiAgICAvLyBDaGVjayB0aGF0IHBhY2thZ2UuanNvbiBhbmQgYmluLyBnb3QgY3JlYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ3BhY2thZ2UuanNvbicpKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAnYmluJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICcuZ2l0JykpKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIGNsaVRlc3QoJy0tZ2VuZXJhdGUtb25seSBzaG91bGQgc2tpcCBnaXQgaW5pdCcsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ2phdmFzY3JpcHQnLCBmYWxzZSwgdHJ1ZSwgd29ya0Rpcik7XG5cbiAgICAvLyBDaGVjayB0aGF0IHBhY2thZ2UuanNvbiBhbmQgYmluLyBnb3QgY3JlYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ3BhY2thZ2UuanNvbicpKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAnYmluJykpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGF3YWl0IGZzLnBhdGhFeGlzdHMocGF0aC5qb2luKHdvcmtEaXIsICcuZ2l0JykpKS50b0JlRmFsc3koKTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnZ2l0IGRpcmVjdG9yeSBkb2VzIG5vdCB0aHJvdyBvZmYgdGhlIGluaXRlciEnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGZzLm1rZGlyU3luYyhwYXRoLmpvaW4od29ya0RpciwgJy5naXQnKSk7XG5cbiAgICBhd2FpdCBjbGlJbml0KCdhcHAnLCAndHlwZXNjcmlwdCcsIGZhbHNlLCB1bmRlZmluZWQgLyogY2FuVXNlTmV0d29yayAqLywgd29ya0Rpcik7XG5cbiAgICAvLyBDaGVjayB0aGF0IHBhY2thZ2UuanNvbiBhbmQgYmluLyBnb3QgY3JlYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ3BhY2thZ2UuanNvbicpKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih3b3JrRGlyLCAnYmluJykpKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3ZlcmlmeSBcImZ1dHVyZSBmbGFnc1wiIGFyZSBhZGRlZCB0byBjZGsuanNvbicsIGFzeW5jICgpID0+IHtcblxuICAgIGZvciAoY29uc3QgdGVtcGwgb2YgYXdhaXQgYXZhaWxhYmxlSW5pdFRlbXBsYXRlcygpKSB7XG4gICAgICBmb3IgKGNvbnN0IGxhbmcgb2YgdGVtcGwubGFuZ3VhZ2VzKSB7XG4gICAgICAgIGF3YWl0IHdpdGhUZW1wRGlyKGFzeW5jIHRtcERpciA9PiB7XG4gICAgICAgICAgYXdhaXQgY2xpSW5pdCh0ZW1wbC5uYW1lLCBsYW5nLFxuICAgICAgICAgICAgLyogY2FuVXNlTmV0d29yayAqLyBmYWxzZSxcbiAgICAgICAgICAgIC8qIGdlbmVyYXRlT25seSAqLyB0cnVlLFxuICAgICAgICAgICAgdG1wRGlyKTtcblxuICAgICAgICAgIC8vIG9rIGlmIHRlbXBsYXRlIGRvZXNuJ3QgaGF2ZSBhIGNkay5qc29uIGZpbGUgKGUuZy4gdGhlIFwibGliXCIgdGVtcGxhdGUpXG4gICAgICAgICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih0bXBEaXIsICdjZGsuanNvbicpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGZzLnJlYWRKc29uKHBhdGguam9pbih0bXBEaXIsICdjZGsuanNvbicpKTtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gY29uZmlnLmNvbnRleHQgfHwge307XG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCBhY3R1YWxdIG9mIE9iamVjdC5lbnRyaWVzKGNvbnRleHQpKSB7XG4gICAgICAgICAgICBleHBlY3Qoa2V5IGluIGN4YXBpLkZVVFVSRV9GTEFHUyB8fCBrZXkgaW4gY3hhcGkuTkVXX1BST0pFQ1RfREVGQVVMVF9DT05URVhUKS50b0JlVHJ1dGh5KCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChjeGFwaS5GVVRVUkVfRkxBR1Nba2V5XSA/PyBjeGFwaS5ORVdfUFJPSkVDVF9ERUZBVUxUX0NPTlRFWFRba2V5XSkudG9FcXVhbChhY3R1YWwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGFzc2VydCB0aGF0IGV4cGlyZWQgZnV0dXJlIGZsYWdzIGFyZSBub3QgcGFydCBvZiB0aGUgY2RrLmpzb25cbiAgICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KGN4YXBpLkZVVFVSRV9GTEFHU19FWFBJUkVELmluY2x1ZGVzKGspKS50b0VxdWFsKGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICAvLyBUaGlzIGlzIGEgbG90IHRvIHRlc3QsIGFuZCBpdCBjYW4gYmUgc2xvdy1pc2gsIGVzcGVjaWFsbHkgd2hlbiByYW4gd2l0aCBvdGhlciB0ZXN0cy5cbiAgMzBfMDAwKTtcbn0pO1xuXG5kZXNjcmliZSgnY29uc3RydWN0cyB2ZXJzaW9uJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBtb2NrTWFqb3JWZXJzaW9uID0gJzIuMC4wJztcbiAgICBqZXN0LnJlc2V0QWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgY2xpVGVzdCgnamF2YScsIGFzeW5jICh3b3JrRGlyKSA9PiB7XG4gICAgYXdhaXQgY2xpSW5pdCgnYXBwJywgJ2phdmEnLCBmYWxzZSwgdHJ1ZSwgd29ya0Rpcik7XG5cbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ3BvbS54bWwnKSkpLnRvQmVUcnV0aHkoKTtcblxuICAgIGNvbnN0IHBvbSA9IChhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4od29ya0RpciwgJ3BvbS54bWwnKSwgJ3V0ZjgnKSkuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBjb25zdCBtYXRjaGVzID0gcG9tLm1hcChsaW5lID0+IGxpbmUubWF0Y2goL1xcPGNvbnN0cnVjdHNcXC52ZXJzaW9uXFw+KC4qKVxcPFxcL2NvbnN0cnVjdHNcXC52ZXJzaW9uXFw+LykpXG4gICAgICAuZmlsdGVyKGwgPT4gbCk7XG5cbiAgICBleHBlY3QobWF0Y2hlcy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgbWF0Y2hlcy5mb3JFYWNoKG0gPT4ge1xuICAgICAgY29uc3QgdmVyc2lvbiA9IG0gJiYgbVsxXTtcbiAgICAgIGV4cGVjdCh2ZXJzaW9uKS50b01hdGNoKC9cXFsxMFxcLltcXGRdK1xcLltcXGRdKywxMVxcLjBcXC4wXFwpLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNsaVRlc3QoJy5ORVQnLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICdjc2hhcnAnLCBmYWxzZSwgdHJ1ZSwgd29ya0Rpcik7XG5cbiAgICBjb25zdCBjc3Byb2pGaWxlID0gKGF3YWl0IHJlY3Vyc2l2ZUxpc3RGaWxlcyh3b3JrRGlyKSkuZmlsdGVyKGYgPT4gZi5lbmRzV2l0aCgnLmNzcHJvaicpKVswXTtcbiAgICBleHBlY3QoY3Nwcm9qRmlsZSkudG9CZURlZmluZWQoKTtcblxuICAgIGNvbnN0IGNzcHJvaiA9IChhd2FpdCBmcy5yZWFkRmlsZShjc3Byb2pGaWxlLCAndXRmOCcpKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gICAgZXhwZWN0KGNzcHJvaikudG9Db250YWluRXF1YWwoZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9cXDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9XCJDb25zdHJ1Y3RzXCIgVmVyc2lvbj1cIlxcWzEwXFwuLiosMTFcXC4uKlxcKVwiLykpO1xuICB9KTtcblxuICBjbGlUZXN0KCdQeXRob24nLCBhc3luYyAod29ya0RpcikgPT4ge1xuICAgIGF3YWl0IGNsaUluaXQoJ2FwcCcsICdweXRob24nLCBmYWxzZSwgdHJ1ZSwgd29ya0Rpcik7XG5cbiAgICBleHBlY3QoYXdhaXQgZnMucGF0aEV4aXN0cyhwYXRoLmpvaW4od29ya0RpciwgJ3JlcXVpcmVtZW50cy50eHQnKSkpLnRvQmVUcnV0aHkoKTtcbiAgICBjb25zdCBzZXR1cFB5ID0gKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbih3b3JrRGlyLCAncmVxdWlyZW1lbnRzLnR4dCcpLCAndXRmOCcpKS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIC8vIHJldHVybiBSZWdFeHBNYXRjaEFycmF5IChyZXN1bHQgb2YgbGluZS5tYXRjaCgpKSBmb3IgZXZlcnkgbGluZXMgdGhhdCBtYXRjaCByZS5cbiAgICBjb25zdCBtYXRjaGVzID0gc2V0dXBQeS5tYXAobGluZSA9PiBsaW5lLm1hdGNoKC9eY29uc3RydWN0cyguKikvKSlcbiAgICAgIC5maWx0ZXIobCA9PiBsKTtcblxuICAgIGV4cGVjdChtYXRjaGVzLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICBtYXRjaGVzLmZvckVhY2gobSA9PiB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gbSAmJiBtWzFdO1xuICAgICAgZXhwZWN0KHZlcnNpb24pLnRvTWF0Y2goLz49MTBcXC5cXGQrXFwuXFxkLDwxMVxcLjBcXC4wLyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbnRlc3QoJ3doZW4gbm8gdmVyc2lvbiBudW1iZXIgaXMgcHJlc2VudCAoZS5nLiwgbG9jYWwgZGV2ZWxvcG1lbnQpLCB0aGUgdjEgdGVtcGxhdGVzIGFyZSBjaG9zZW4gYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgbW9ja01ham9yVmVyc2lvbiA9ICcwLjAuMCc7XG4gIGplc3QucmVzZXRBbGxNb2NrcygpO1xuXG4gIGV4cGVjdCgoYXdhaXQgYXZhaWxhYmxlSW5pdFRlbXBsYXRlcygpKS5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbn0pO1xuXG5mdW5jdGlvbiBjbGlUZXN0KG5hbWU6IHN0cmluZywgaGFuZGxlcjogKGRpcjogc3RyaW5nKSA9PiB2b2lkIHwgUHJvbWlzZTxhbnk+KTogdm9pZCB7XG4gIHRlc3QobmFtZSwgKCkgPT4gd2l0aFRlbXBEaXIoaGFuZGxlcikpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3aXRoVGVtcERpcihjYjogKGRpcjogc3RyaW5nKSA9PiB2b2lkIHwgUHJvbWlzZTxhbnk+KSB7XG4gIGNvbnN0IHRtcERpciA9IGF3YWl0IGZzLm1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnYXdzLWNkay10ZXN0JykpO1xuICB0cnkge1xuICAgIGF3YWl0IGNiKHRtcERpcik7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmVtb3ZlKHRtcERpcik7XG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0IGFsbCBmaWxlcyB1bmRlcm5lYXRoIGRpclxuICovXG5hc3luYyBmdW5jdGlvbiByZWN1cnNpdmVMaXN0RmlsZXMocmRpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBhd2FpdCByZWN1cnNlKHJkaXIpO1xuICByZXR1cm4gcmV0O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlY3Vyc2UoZGlyOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgYXdhaXQgZnMucmVhZGRpcihkaXIpKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIG5hbWUpO1xuICAgICAgaWYgKChhd2FpdCBmcy5zdGF0KGZ1bGxQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBhd2FpdCByZWN1cnNlKGZ1bGxQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5wdXNoKGZ1bGxQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -4,6 +4,7 @@ var constructs = require('constructs');
|
|
|
4
4
|
if (process.env.PACKAGE_LAYOUT_VERSION === '1') {
|
|
5
5
|
var cdk = require('@aws-cdk/core');
|
|
6
6
|
var ec2 = require('@aws-cdk/aws-ec2');
|
|
7
|
+
var s3 = require('@aws-cdk/aws-s3');
|
|
7
8
|
var ssm = require('@aws-cdk/aws-ssm');
|
|
8
9
|
var iam = require('@aws-cdk/aws-iam');
|
|
9
10
|
var sns = require('@aws-cdk/aws-sns');
|
|
@@ -13,6 +14,7 @@ if (process.env.PACKAGE_LAYOUT_VERSION === '1') {
|
|
|
13
14
|
var cdk = require('aws-cdk-lib');
|
|
14
15
|
var {
|
|
15
16
|
aws_ec2: ec2,
|
|
17
|
+
aws_s3: s3,
|
|
16
18
|
aws_ssm: ssm,
|
|
17
19
|
aws_iam: iam,
|
|
18
20
|
aws_sns: sns,
|
|
@@ -109,7 +111,7 @@ class OutputsStack extends cdk.Stack {
|
|
|
109
111
|
constructor(parent, id, props) {
|
|
110
112
|
super(parent, id, props);
|
|
111
113
|
|
|
112
|
-
const topic =
|
|
114
|
+
const topic = new sns.Topic(this, 'MyOutput', {
|
|
113
115
|
topicName: `${cdk.Stack.of(this).stackName}MyTopic`
|
|
114
116
|
});
|
|
115
117
|
|
|
@@ -299,6 +301,17 @@ class StageUsingContext extends cdk.Stage {
|
|
|
299
301
|
}
|
|
300
302
|
}
|
|
301
303
|
|
|
304
|
+
class BuiltinLambdaStack extends cdk.Stack {
|
|
305
|
+
constructor(parent, id, props) {
|
|
306
|
+
super(parent, id, props);
|
|
307
|
+
|
|
308
|
+
new s3.Bucket(this, 'Bucket', {
|
|
309
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
310
|
+
autoDeleteObjects: true, // will deploy a Nodejs lambda backed custom resource
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
302
315
|
const app = new cdk.App();
|
|
303
316
|
|
|
304
317
|
const defaultEnv = {
|
|
@@ -339,7 +352,7 @@ switch (stackSet) {
|
|
|
339
352
|
if (process.env.ENABLE_VPC_TESTING === 'DEFINE')
|
|
340
353
|
new DefineVpcStack(app, `${stackPrefix}-define-vpc`, { env });
|
|
341
354
|
if (process.env.ENABLE_VPC_TESTING === 'IMPORT')
|
|
342
|
-
|
|
355
|
+
new ImportVpcStack(app, `${stackPrefix}-import-vpc`, { env });
|
|
343
356
|
}
|
|
344
357
|
|
|
345
358
|
new ConditionalResourceStack(app, `${stackPrefix}-conditional-resource`)
|
|
@@ -352,6 +365,8 @@ switch (stackSet) {
|
|
|
352
365
|
});
|
|
353
366
|
|
|
354
367
|
new SomeStage(app, `${stackPrefix}-stage`);
|
|
368
|
+
|
|
369
|
+
new BuiltinLambdaStack(app, `${stackPrefix}-builtin-lambda-function`);
|
|
355
370
|
break;
|
|
356
371
|
|
|
357
372
|
case 'stage-using-context':
|