aws-cdk
Version:
CDK Toolkit, the command line tool for CDK apps
113 lines • 18.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable import/order */
const os = require("os");
const path = require("path");
const fs = require("fs-extra");
const settings_1 = require("../lib/settings");
const state = {};
beforeAll(async () => {
state.previousWorkingDir = process.cwd();
state.tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'aws-cdk-test'));
// eslint-disable-next-line no-console
console.log('Temporary working directory:', state.tempDir);
process.chdir(state.tempDir);
});
afterAll(async () => {
// eslint-disable-next-line no-console
console.log('Switching back to', state.previousWorkingDir, 'cleaning up', state.tempDir);
process.chdir(state.previousWorkingDir);
await fs.remove(state.tempDir);
});
test('load context from both files if available', async () => {
// GIVEN
await fs.writeJSON('cdk.context.json', { foo: 'bar' });
await fs.writeJSON('cdk.json', { context: { boo: 'far' } });
// WHEN
const config = await new settings_1.Configuration({ readUserContext: false }).load();
// THEN
expect(config.context.get('foo')).toBe('bar');
expect(config.context.get('boo')).toBe('far');
});
test('deleted context disappears from new file', async () => {
// GIVEN
await fs.writeJSON('cdk.context.json', { foo: 'bar' });
await fs.writeJSON('cdk.json', { context: { foo: 'bar' } });
const config = await new settings_1.Configuration({ readUserContext: false }).load();
// WHEN
config.context.unset('foo');
await config.saveContext();
// THEN
expect(await fs.readJSON('cdk.context.json')).toEqual({});
expect(await fs.readJSON('cdk.json')).toEqual({ context: { foo: 'bar' } });
});
test('clear deletes from new file', async () => {
// GIVEN
await fs.writeJSON('cdk.context.json', { foo: 'bar' });
await fs.writeJSON('cdk.json', { context: { boo: 'far' } });
const config = await new settings_1.Configuration({ readUserContext: false }).load();
// WHEN
config.context.clear();
await config.saveContext();
// THEN
expect(await fs.readJSON('cdk.context.json')).toEqual({});
expect(await fs.readJSON('cdk.json')).toEqual({ context: { boo: 'far' } });
});
test('context is preserved in the location from which it is read', async () => {
// GIVEN
await fs.writeJSON('cdk.json', { context: { 'boo:boo': 'far' } });
const config = await new settings_1.Configuration({ readUserContext: false }).load();
// WHEN
expect(config.context.all).toEqual({ 'boo:boo': 'far' });
await config.saveContext();
// THEN
expect(await fs.readJSON('cdk.context.json')).toEqual({});
expect(await fs.readJSON('cdk.json')).toEqual({ context: { 'boo:boo': 'far' } });
});
test('surive no context in old file', async () => {
// GIVEN
await fs.writeJSON('cdk.json', {});
await fs.writeJSON('cdk.context.json', { boo: 'far' });
const config = await new settings_1.Configuration({ readUserContext: false }).load();
// WHEN
expect(config.context.all).toEqual({ boo: 'far' });
await config.saveContext();
// THEN
expect(await fs.readJSON('cdk.context.json')).toEqual({ boo: 'far' });
});
test('command line context is merged with stored context', async () => {
// GIVEN
await fs.writeJSON('cdk.context.json', { boo: 'far' });
const config = await new settings_1.Configuration({
readUserContext: false,
commandLineArguments: {
context: ['foo=bar'],
_: ['command'],
},
}).load();
// WHEN
expect(config.context.all).toEqual({ foo: 'bar', boo: 'far' });
});
test('can save and load', async () => {
// GIVEN
const config1 = await new settings_1.Configuration({ readUserContext: false }).load();
config1.context.set('some_key', 'some_value');
await config1.saveContext();
expect(config1.context.get('some_key')).toEqual('some_value');
// WHEN
const config2 = await new settings_1.Configuration({ readUserContext: false }).load();
// THEN
expect(config2.context.get('some_key')).toEqual('some_value');
});
test('transient values arent saved to disk', async () => {
// GIVEN
const config1 = await new settings_1.Configuration({ readUserContext: false }).load();
config1.context.set('some_key', { [settings_1.TRANSIENT_CONTEXT_KEY]: true, value: 'some_value' });
await config1.saveContext();
expect(config1.context.get('some_key').value).toEqual('some_value');
// WHEN
const config2 = await new settings_1.Configuration({ readUserContext: false }).load();
// THEN
expect(config2.context.get('some_key')).toEqual(undefined);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29udGV4dC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLDhDQUF1RTtBQUV2RSxNQUFNLEtBQUssR0FHUCxFQUFFLENBQUM7QUFFUCxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDbkIsS0FBSyxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6QyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLHNDQUFzQztJQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNsQixzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBbUIsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBUSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDM0QsUUFBUTtJQUNSLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTVELE9BQU87SUFDUCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksd0JBQWEsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRTFFLE9BQU87SUFDUCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzFELFFBQVE7SUFDUixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksd0JBQWEsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRTFFLE9BQU87SUFDUCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixNQUFNLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUUzQixPQUFPO0lBQ1AsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFELE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzdDLFFBQVE7SUFDUixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksd0JBQWEsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRTFFLE9BQU87SUFDUCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRTNCLE9BQU87SUFDUCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUQsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsNERBQTRELEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDNUUsUUFBUTtJQUNSLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSx3QkFBYSxDQUFDLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFMUUsT0FBTztJQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRTNCLE9BQU87SUFDUCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUQsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkYsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsK0JBQStCLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDL0MsUUFBUTtJQUNSLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRyxDQUFDLENBQUM7SUFDcEMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLHdCQUFhLENBQUMsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUUxRSxPQUFPO0lBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbkQsTUFBTSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFM0IsT0FBTztJQUNQLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLG9EQUFvRCxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ3BFLFFBQVE7SUFDUixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksd0JBQWEsQ0FBQztRQUNyQyxlQUFlLEVBQUUsS0FBSztRQUN0QixvQkFBb0IsRUFBRTtZQUNwQixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDcEIsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDO1NBQ1I7S0FDVCxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFVixPQUFPO0lBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLElBQUksRUFBRTtJQUNuQyxRQUFRO0lBQ1IsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLHdCQUFhLENBQUMsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzRSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUMsTUFBTSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTlELE9BQU87SUFDUCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksd0JBQWEsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRTNFLE9BQU87SUFDUCxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDdEQsUUFBUTtJQUNSLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSx3QkFBYSxDQUFDLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0UsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxnQ0FBcUIsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUN4RixNQUFNLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM1QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXBFLE9BQU87SUFDUCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksd0JBQWEsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRTNFLE9BQU87SUFDUCxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvb3JkZXIgKi9cbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uLCBUUkFOU0lFTlRfQ09OVEVYVF9LRVkgfSBmcm9tICcuLi9saWIvc2V0dGluZ3MnO1xuXG5jb25zdCBzdGF0ZToge1xuICBwcmV2aW91c1dvcmtpbmdEaXI/OiBzdHJpbmc7XG4gIHRlbXBEaXI/OiBzdHJpbmc7XG59ID0ge307XG5cbmJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gIHN0YXRlLnByZXZpb3VzV29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gIHN0YXRlLnRlbXBEaXIgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2F3cy1jZGstdGVzdCcpKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5sb2coJ1RlbXBvcmFyeSB3b3JraW5nIGRpcmVjdG9yeTonLCBzdGF0ZS50ZW1wRGlyKTtcbiAgcHJvY2Vzcy5jaGRpcihzdGF0ZS50ZW1wRGlyKTtcbn0pO1xuXG5hZnRlckFsbChhc3luYyAoKSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUubG9nKCdTd2l0Y2hpbmcgYmFjayB0bycsIHN0YXRlLnByZXZpb3VzV29ya2luZ0RpciwgJ2NsZWFuaW5nIHVwJywgc3RhdGUudGVtcERpcik7XG4gIHByb2Nlc3MuY2hkaXIoc3RhdGUucHJldmlvdXNXb3JraW5nRGlyISk7XG4gIGF3YWl0IGZzLnJlbW92ZShzdGF0ZS50ZW1wRGlyISk7XG59KTtcblxudGVzdCgnbG9hZCBjb250ZXh0IGZyb20gYm90aCBmaWxlcyBpZiBhdmFpbGFibGUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGF3YWl0IGZzLndyaXRlSlNPTignY2RrLmNvbnRleHQuanNvbicsIHsgZm9vOiAnYmFyJyB9KTtcbiAgYXdhaXQgZnMud3JpdGVKU09OKCdjZGsuanNvbicsIHsgY29udGV4dDogeyBib286ICdmYXInIH0gfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBjb25maWcgPSBhd2FpdCBuZXcgQ29uZmlndXJhdGlvbih7IHJlYWRVc2VyQ29udGV4dDogZmFsc2UgfSkubG9hZCgpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGNvbmZpZy5jb250ZXh0LmdldCgnZm9vJykpLnRvQmUoJ2JhcicpO1xuICBleHBlY3QoY29uZmlnLmNvbnRleHQuZ2V0KCdib28nKSkudG9CZSgnZmFyJyk7XG59KTtcblxudGVzdCgnZGVsZXRlZCBjb250ZXh0IGRpc2FwcGVhcnMgZnJvbSBuZXcgZmlsZScsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgYXdhaXQgZnMud3JpdGVKU09OKCdjZGsuY29udGV4dC5qc29uJywgeyBmb286ICdiYXInIH0pO1xuICBhd2FpdCBmcy53cml0ZUpTT04oJ2Nkay5qc29uJywgeyBjb250ZXh0OiB7IGZvbzogJ2JhcicgfSB9KTtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgbmV3IENvbmZpZ3VyYXRpb24oeyByZWFkVXNlckNvbnRleHQ6IGZhbHNlIH0pLmxvYWQoKTtcblxuICAvLyBXSEVOXG4gIGNvbmZpZy5jb250ZXh0LnVuc2V0KCdmb28nKTtcbiAgYXdhaXQgY29uZmlnLnNhdmVDb250ZXh0KCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoYXdhaXQgZnMucmVhZEpTT04oJ2Nkay5jb250ZXh0Lmpzb24nKSkudG9FcXVhbCh7fSk7XG4gIGV4cGVjdChhd2FpdCBmcy5yZWFkSlNPTignY2RrLmpzb24nKSkudG9FcXVhbCh7IGNvbnRleHQ6IHsgZm9vOiAnYmFyJyB9IH0pO1xufSk7XG5cbnRlc3QoJ2NsZWFyIGRlbGV0ZXMgZnJvbSBuZXcgZmlsZScsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgYXdhaXQgZnMud3JpdGVKU09OKCdjZGsuY29udGV4dC5qc29uJywgeyBmb286ICdiYXInIH0pO1xuICBhd2FpdCBmcy53cml0ZUpTT04oJ2Nkay5qc29uJywgeyBjb250ZXh0OiB7IGJvbzogJ2ZhcicgfSB9KTtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgbmV3IENvbmZpZ3VyYXRpb24oeyByZWFkVXNlckNvbnRleHQ6IGZhbHNlIH0pLmxvYWQoKTtcblxuICAvLyBXSEVOXG4gIGNvbmZpZy5jb250ZXh0LmNsZWFyKCk7XG4gIGF3YWl0IGNvbmZpZy5zYXZlQ29udGV4dCgpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGF3YWl0IGZzLnJlYWRKU09OKCdjZGsuY29udGV4dC5qc29uJykpLnRvRXF1YWwoe30pO1xuICBleHBlY3QoYXdhaXQgZnMucmVhZEpTT04oJ2Nkay5qc29uJykpLnRvRXF1YWwoeyBjb250ZXh0OiB7IGJvbzogJ2ZhcicgfSB9KTtcbn0pO1xuXG50ZXN0KCdjb250ZXh0IGlzIHByZXNlcnZlZCBpbiB0aGUgbG9jYXRpb24gZnJvbSB3aGljaCBpdCBpcyByZWFkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBhd2FpdCBmcy53cml0ZUpTT04oJ2Nkay5qc29uJywgeyBjb250ZXh0OiB7ICdib286Ym9vJzogJ2ZhcicgfSB9KTtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgbmV3IENvbmZpZ3VyYXRpb24oeyByZWFkVXNlckNvbnRleHQ6IGZhbHNlIH0pLmxvYWQoKTtcblxuICAvLyBXSEVOXG4gIGV4cGVjdChjb25maWcuY29udGV4dC5hbGwpLnRvRXF1YWwoeyAnYm9vOmJvbyc6ICdmYXInIH0pO1xuICBhd2FpdCBjb25maWcuc2F2ZUNvbnRleHQoKTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChhd2FpdCBmcy5yZWFkSlNPTignY2RrLmNvbnRleHQuanNvbicpKS50b0VxdWFsKHt9KTtcbiAgZXhwZWN0KGF3YWl0IGZzLnJlYWRKU09OKCdjZGsuanNvbicpKS50b0VxdWFsKHsgY29udGV4dDogeyAnYm9vOmJvbyc6ICdmYXInIH0gfSk7XG59KTtcblxudGVzdCgnc3VyaXZlIG5vIGNvbnRleHQgaW4gb2xkIGZpbGUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGF3YWl0IGZzLndyaXRlSlNPTignY2RrLmpzb24nLCB7IH0pO1xuICBhd2FpdCBmcy53cml0ZUpTT04oJ2Nkay5jb250ZXh0Lmpzb24nLCB7IGJvbzogJ2ZhcicgfSk7XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IG5ldyBDb25maWd1cmF0aW9uKHsgcmVhZFVzZXJDb250ZXh0OiBmYWxzZSB9KS5sb2FkKCk7XG5cbiAgLy8gV0hFTlxuICBleHBlY3QoY29uZmlnLmNvbnRleHQuYWxsKS50b0VxdWFsKHsgYm9vOiAnZmFyJyB9KTtcbiAgYXdhaXQgY29uZmlnLnNhdmVDb250ZXh0KCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoYXdhaXQgZnMucmVhZEpTT04oJ2Nkay5jb250ZXh0Lmpzb24nKSkudG9FcXVhbCh7IGJvbzogJ2ZhcicgfSk7XG59KTtcblxudGVzdCgnY29tbWFuZCBsaW5lIGNvbnRleHQgaXMgbWVyZ2VkIHdpdGggc3RvcmVkIGNvbnRleHQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGF3YWl0IGZzLndyaXRlSlNPTignY2RrLmNvbnRleHQuanNvbicsIHsgYm9vOiAnZmFyJyB9KTtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgbmV3IENvbmZpZ3VyYXRpb24oe1xuICAgIHJlYWRVc2VyQ29udGV4dDogZmFsc2UsXG4gICAgY29tbWFuZExpbmVBcmd1bWVudHM6IHtcbiAgICAgIGNvbnRleHQ6IFsnZm9vPWJhciddLFxuICAgICAgXzogWydjb21tYW5kJ10sXG4gICAgfSBhcyBhbnksXG4gIH0pLmxvYWQoKTtcblxuICAvLyBXSEVOXG4gIGV4cGVjdChjb25maWcuY29udGV4dC5hbGwpLnRvRXF1YWwoeyBmb286ICdiYXInLCBib286ICdmYXInIH0pO1xufSk7XG5cbnRlc3QoJ2NhbiBzYXZlIGFuZCBsb2FkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBjb25maWcxID0gYXdhaXQgbmV3IENvbmZpZ3VyYXRpb24oeyByZWFkVXNlckNvbnRleHQ6IGZhbHNlIH0pLmxvYWQoKTtcbiAgY29uZmlnMS5jb250ZXh0LnNldCgnc29tZV9rZXknLCAnc29tZV92YWx1ZScpO1xuICBhd2FpdCBjb25maWcxLnNhdmVDb250ZXh0KCk7XG4gIGV4cGVjdChjb25maWcxLmNvbnRleHQuZ2V0KCdzb21lX2tleScpKS50b0VxdWFsKCdzb21lX3ZhbHVlJyk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBjb25maWcyID0gYXdhaXQgbmV3IENvbmZpZ3VyYXRpb24oeyByZWFkVXNlckNvbnRleHQ6IGZhbHNlIH0pLmxvYWQoKTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjb25maWcyLmNvbnRleHQuZ2V0KCdzb21lX2tleScpKS50b0VxdWFsKCdzb21lX3ZhbHVlJyk7XG59KTtcblxudGVzdCgndHJhbnNpZW50IHZhbHVlcyBhcmVudCBzYXZlZCB0byBkaXNrJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBjb25maWcxID0gYXdhaXQgbmV3IENvbmZpZ3VyYXRpb24oeyByZWFkVXNlckNvbnRleHQ6IGZhbHNlIH0pLmxvYWQoKTtcbiAgY29uZmlnMS5jb250ZXh0LnNldCgnc29tZV9rZXknLCB7IFtUUkFOU0lFTlRfQ09OVEVYVF9LRVldOiB0cnVlLCB2YWx1ZTogJ3NvbWVfdmFsdWUnIH0pO1xuICBhd2FpdCBjb25maWcxLnNhdmVDb250ZXh0KCk7XG4gIGV4cGVjdChjb25maWcxLmNvbnRleHQuZ2V0KCdzb21lX2tleScpLnZhbHVlKS50b0VxdWFsKCdzb21lX3ZhbHVlJyk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBjb25maWcyID0gYXdhaXQgbmV3IENvbmZpZ3VyYXRpb24oeyByZWFkVXNlckNvbnRleHQ6IGZhbHNlIH0pLmxvYWQoKTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChjb25maWcyLmNvbnRleHQuZ2V0KCdzb21lX2tleScpKS50b0VxdWFsKHVuZGVmaW5lZCk7XG59KTtcbiJdfQ==