Socket
Socket
Sign inDemoInstall

@aws-cdk/cfnspec

Package Overview
Dependencies
Maintainers
4
Versions
476
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-cdk/cfnspec - npm Package Compare versions

Comparing version 2.77.0-alpha.0 to 2.78.0-alpha.0

build-tools/validate-evolution.d.ts

16

build-tools/build.js

@@ -10,2 +10,3 @@ "use strict";

const path = require("path");
const fs = require("fs-extra");
const md5 = require("md5");

@@ -15,6 +16,17 @@ const massage_spec_1 = require("./massage-spec");

const patch_set_1 = require("./patch-set");
const validate_evolution_1 = require("./validate-evolution");
async function main() {
const inputDir = path.join(process.cwd(), 'spec-source');
const outDir = path.join(process.cwd(), 'spec');
await generateResourceSpecification(inputDir, path.join(outDir, 'specification.json'));
// If this is a PR build check the spec for evolution (this is set in buildspec-pr.yaml)
const outputFile = path.join(outDir, 'specification.json');
if (process.env.CODEBUILD_WEBHOOK_TRIGGER?.startsWith('pr/')) {
await (0, validate_evolution_1.validateSpecificationEvolution)(async () => {
await generateResourceSpecification(inputDir, outputFile);
return fs.readJson(outputFile);
});
}
else {
await generateResourceSpecification(inputDir, outputFile);
}
await (0, patch_set_1.applyAndWrite)(path.join(outDir, 'cfn-lint.json'), path.join(inputDir, 'cfn-lint'));

@@ -39,2 +51,2 @@ await (0, patch_set_1.applyAndWrite)(path.join(outDir, 'cfn-docs.json'), path.join(inputDir, 'cfn-docs'));

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJidWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7O0FBRUgsNkJBQTZCO0FBQzdCLDJCQUEyQjtBQUMzQixpREFBd0Q7QUFBQSxDQUFDO0FBQ3pELDJDQUF3RTtBQUd4RSxLQUFLLFVBQVUsSUFBSTtJQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVoRCxNQUFNLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDdkYsTUFBTSxJQUFBLHlCQUFhLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN6RixNQUFNLElBQUEseUJBQWEsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzNGLENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSw2QkFBNkIsQ0FBQyxRQUFnQixFQUFFLE9BQWU7SUFDNUUsTUFBTSxJQUFJLEdBQXlCLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUU3RixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLElBQUEseUJBQWEsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0UsSUFBQSwwQkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBQSx3QkFBUyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV4RCxNQUFNLElBQUEsdUJBQVcsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELElBQUksRUFBRTtLQUNILEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNULHNDQUFzQztJQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogSW52b2tlZCBhcyBwYXJ0IG9mIHRoZSBcImJ1aWxkXCIgc2NyaXB0IG9mIHRoaXMgcGFja2FnZSxcbiAqIHRoaXMgc2NyaXB0IHRha2VzIGFsbCBzcGVjaWZpY2F0aW9uIGZyYWdtZW50cyBpbiB0aGVcbiAqIGBzcGVjLXNvdXJjZWAgZm9sZGVyIGFuZCBnZW5lcmF0ZXMgYSB1bmlmaWVkIHNwZWNpZmljYXRpb25cbiAqIGRvY3VtZW50IGF0IGBzcGVjL3NwZWNpZmljYXRpb24uanNvbmAuXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG1kNSBmcm9tICdtZDUnO1xuaW1wb3J0IHsgbWFzc2FnZVNwZWMsIG5vcm1hbGl6ZSB9IGZyb20gJy4vbWFzc2FnZS1zcGVjJzs7XG5pbXBvcnQgeyB3cml0ZVNvcnRlZCwgYXBwbHlQYXRjaFNldCwgYXBwbHlBbmRXcml0ZSB9IGZyb20gJy4vcGF0Y2gtc2V0JztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4uL2xpYic7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGlucHV0RGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdzcGVjLXNvdXJjZScpO1xuICBjb25zdCBvdXREaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ3NwZWMnKTtcblxuICBhd2FpdCBnZW5lcmF0ZVJlc291cmNlU3BlY2lmaWNhdGlvbihpbnB1dERpciwgcGF0aC5qb2luKG91dERpciwgJ3NwZWNpZmljYXRpb24uanNvbicpKTtcbiAgYXdhaXQgYXBwbHlBbmRXcml0ZShwYXRoLmpvaW4ob3V0RGlyLCAnY2ZuLWxpbnQuanNvbicpLCBwYXRoLmpvaW4oaW5wdXREaXIsICdjZm4tbGludCcpKTtcbiAgYXdhaXQgYXBwbHlBbmRXcml0ZShwYXRoLmpvaW4ob3V0RGlyLCAnY2ZuLWRvY3MuanNvbicpLCBwYXRoLmpvaW4oaW5wdXREaXIsICdjZm4tZG9jcycpKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSBzcGVjaWZpY2F0aW9uIGZyb20gc291cmNlcyBhbmQgcGF0Y2hlc1xuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVJlc291cmNlU3BlY2lmaWNhdGlvbihpbnB1dERpcjogc3RyaW5nLCBvdXRGaWxlOiBzdHJpbmcpIHtcbiAgY29uc3Qgc3BlYzogc2NoZW1hLlNwZWNpZmljYXRpb24gPSB7IFByb3BlcnR5VHlwZXM6IHt9LCBSZXNvdXJjZVR5cGVzOiB7fSwgRmluZ2VycHJpbnQ6ICcnIH07XG5cbiAgT2JqZWN0LmFzc2lnbihzcGVjLCBhd2FpdCBhcHBseVBhdGNoU2V0KHBhdGguam9pbihpbnB1dERpciwgJ3NwZWNpZmljYXRpb24nKSkpO1xuICBtYXNzYWdlU3BlYyhzcGVjKTtcbiAgc3BlYy5GaW5nZXJwcmludCA9IG1kNShKU09OLnN0cmluZ2lmeShub3JtYWxpemUoc3BlYykpKTtcblxuICBhd2FpdCB3cml0ZVNvcnRlZChvdXRGaWxlLCBzcGVjKTtcbn1cblxubWFpbigpXG4gIC5jYXRjaChlID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgcHJvY2Vzcy5leGl0KC0xKTtcbiAgfSk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJidWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7O0FBRUgsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUMvQiwyQkFBMkI7QUFDM0IsaURBQXdEO0FBQUEsQ0FBQztBQUN6RCwyQ0FBd0U7QUFDeEUsNkRBQXNFO0FBR3RFLEtBQUssVUFBVSxJQUFJO0lBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRWhELHdGQUF3RjtJQUN4RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzNELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDNUQsTUFBTSxJQUFBLG1EQUE4QixFQUFDLEtBQUssSUFBSSxFQUFFO1lBQzlDLE1BQU0sNkJBQTZCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzFELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztLQUNKO1NBQU07UUFDTCxNQUFNLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUMzRDtJQUVELE1BQU0sSUFBQSx5QkFBYSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDekYsTUFBTSxJQUFBLHlCQUFhLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsNkJBQTZCLENBQUMsUUFBZ0IsRUFBRSxPQUFlO0lBQzVFLE1BQU0sSUFBSSxHQUF5QixFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFFN0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFBLHlCQUFhLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9FLElBQUEsMEJBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUEsd0JBQVMsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFeEQsTUFBTSxJQUFBLHVCQUFXLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxJQUFJLEVBQUU7S0FDSCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDVCxzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEludm9rZWQgYXMgcGFydCBvZiB0aGUgXCJidWlsZFwiIHNjcmlwdCBvZiB0aGlzIHBhY2thZ2UsXG4gKiB0aGlzIHNjcmlwdCB0YWtlcyBhbGwgc3BlY2lmaWNhdGlvbiBmcmFnbWVudHMgaW4gdGhlXG4gKiBgc3BlYy1zb3VyY2VgIGZvbGRlciBhbmQgZ2VuZXJhdGVzIGEgdW5pZmllZCBzcGVjaWZpY2F0aW9uXG4gKiBkb2N1bWVudCBhdCBgc3BlYy9zcGVjaWZpY2F0aW9uLmpzb25gLlxuICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyBtZDUgZnJvbSAnbWQ1JztcbmltcG9ydCB7IG1hc3NhZ2VTcGVjLCBub3JtYWxpemUgfSBmcm9tICcuL21hc3NhZ2Utc3BlYyc7O1xuaW1wb3J0IHsgd3JpdGVTb3J0ZWQsIGFwcGx5UGF0Y2hTZXQsIGFwcGx5QW5kV3JpdGUgfSBmcm9tICcuL3BhdGNoLXNldCc7XG5pbXBvcnQgeyB2YWxpZGF0ZVNwZWNpZmljYXRpb25Fdm9sdXRpb24gfSBmcm9tICcuL3ZhbGlkYXRlLWV2b2x1dGlvbic7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi9saWInO1xuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBpbnB1dERpciA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnc3BlYy1zb3VyY2UnKTtcbiAgY29uc3Qgb3V0RGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdzcGVjJyk7XG5cbiAgLy8gSWYgdGhpcyBpcyBhIFBSIGJ1aWxkIGNoZWNrIHRoZSBzcGVjIGZvciBldm9sdXRpb24gKHRoaXMgaXMgc2V0IGluIGJ1aWxkc3BlYy1wci55YW1sKVxuICBjb25zdCBvdXRwdXRGaWxlID0gcGF0aC5qb2luKG91dERpciwgJ3NwZWNpZmljYXRpb24uanNvbicpO1xuICBpZiAocHJvY2Vzcy5lbnYuQ09ERUJVSUxEX1dFQkhPT0tfVFJJR0dFUj8uc3RhcnRzV2l0aCgncHIvJykpIHtcbiAgICBhd2FpdCB2YWxpZGF0ZVNwZWNpZmljYXRpb25Fdm9sdXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZ2VuZXJhdGVSZXNvdXJjZVNwZWNpZmljYXRpb24oaW5wdXREaXIsIG91dHB1dEZpbGUpO1xuICAgICAgcmV0dXJuIGZzLnJlYWRKc29uKG91dHB1dEZpbGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGdlbmVyYXRlUmVzb3VyY2VTcGVjaWZpY2F0aW9uKGlucHV0RGlyLCBvdXRwdXRGaWxlKTtcbiAgfVxuXG4gIGF3YWl0IGFwcGx5QW5kV3JpdGUocGF0aC5qb2luKG91dERpciwgJ2Nmbi1saW50Lmpzb24nKSwgcGF0aC5qb2luKGlucHV0RGlyLCAnY2ZuLWxpbnQnKSk7XG4gIGF3YWl0IGFwcGx5QW5kV3JpdGUocGF0aC5qb2luKG91dERpciwgJ2Nmbi1kb2NzLmpzb24nKSwgcGF0aC5qb2luKGlucHV0RGlyLCAnY2ZuLWRvY3MnKSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2Ugc3BlY2lmaWNhdGlvbiBmcm9tIHNvdXJjZXMgYW5kIHBhdGNoZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVSZXNvdXJjZVNwZWNpZmljYXRpb24oaW5wdXREaXI6IHN0cmluZywgb3V0RmlsZTogc3RyaW5nKSB7XG4gIGNvbnN0IHNwZWM6IHNjaGVtYS5TcGVjaWZpY2F0aW9uID0geyBQcm9wZXJ0eVR5cGVzOiB7fSwgUmVzb3VyY2VUeXBlczoge30sIEZpbmdlcnByaW50OiAnJyB9O1xuXG4gIE9iamVjdC5hc3NpZ24oc3BlYywgYXdhaXQgYXBwbHlQYXRjaFNldChwYXRoLmpvaW4oaW5wdXREaXIsICdzcGVjaWZpY2F0aW9uJykpKTtcbiAgbWFzc2FnZVNwZWMoc3BlYyk7XG4gIHNwZWMuRmluZ2VycHJpbnQgPSBtZDUoSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplKHNwZWMpKSk7XG5cbiAgYXdhaXQgd3JpdGVTb3J0ZWQob3V0RmlsZSwgc3BlYyk7XG59XG5cbm1haW4oKVxuICAuY2F0Y2goZSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgIHByb2Nlc3MuZXhpdCgtMSk7XG4gIH0pO1xuIl19

@@ -22,2 +22,8 @@ "use strict";

for (const [name, definition] of Object.entries(spec.PropertyTypes)) {
if (!definition) {
// eslint-disable-next-line no-console
console.log(`[${name}] **ERROR** Nullish type definition: a patch probably copied a nonexistent value!`);
process.exitCode = 1;
continue;
}
if (!lib_1.schema.isRecordType(definition)

@@ -71,2 +77,2 @@ && !lib_1.schema.isCollectionProperty(definition)

exports.normalize = normalize;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzc2FnZS1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWFzc2FnZS1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFpRDtBQUNqRCxnQ0FBZ0M7QUFFaEMsU0FBZ0IsV0FBVyxDQUFDLElBQTBCO0lBQ3BELElBQUEsOEJBQW1CLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0Isc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUpELGtDQUlDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsc0JBQXNCLENBQUMsSUFBMEI7SUFDeEQsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ25FLElBQUksQ0FBQyxZQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztlQUNqQyxDQUFDLFlBQU0sQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7ZUFDeEMsQ0FBQyxZQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO2VBQ3BDLENBQUMsWUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzFDLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxvREFBb0QsQ0FBQyxDQUFDO1lBRXpFLFVBQStDLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztTQUNsRTtLQUNGO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsc0JBQXNCLENBQUMsSUFBMEI7SUFDeEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1FBQ3BELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDMUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNyQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLElBQTBCO0lBQ2xELElBQUksQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUMzRDtJQUNELE9BQU8sSUFBSSxDQUFDO0lBRVosU0FBUyxnQkFBZ0IsQ0FBSSxPQUE4QjtRQUN6RCxNQUFNLE1BQU0sR0FBMEIsRUFBRSxDQUFDO1FBQ3pDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM3QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUM7QUFkRCw4QkFjQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRldGVjdFNjcnV0aW55VHlwZXMgfSBmcm9tICcuL3NjcnV0aW55JztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4uL2xpYic7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXNzYWdlU3BlYyhzcGVjOiBzY2hlbWEuU3BlY2lmaWNhdGlvbikge1xuICBkZXRlY3RTY3J1dGlueVR5cGVzKHNwZWMpO1xuICByZXBsYWNlSW5jb21wbGV0ZVR5cGVzKHNwZWMpO1xuICBkcm9wVHlwZWxlc3NBdHRyaWJ1dGVzKHNwZWMpO1xufVxuXG4vKipcbiAqIEZpeCBpbmNvbXBsZXRlIHR5cGUgZGVmaW5pdGlvbnMgaW4gUHJvcGVydHlUeXBlc1xuICpcbiAqIFNvbWUgdXNlci1kZWZpbmVkIHR5cGVzIGFyZSBkZWZpbmVkIHRvIG5vdCBoYXZlIGFueSBwcm9wZXJ0aWVzLCBhbmQgbm90XG4gKiBiZSBhIGNvbGxlY3Rpb24gb2Ygb3RoZXIgdHlwZXMgZWl0aGVyLiBUaGV5IGhhdmUgbm8gZGVmaW5pdGlvbiBhdCBhbGwuXG4gKlxuICogQWRkIGEgcHJvcGVydHkgb2JqZWN0IHR5cGUgd2l0aCBlbXB0eSBwcm9wZXJ0aWVzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlSW5jb21wbGV0ZVR5cGVzKHNwZWM6IHNjaGVtYS5TcGVjaWZpY2F0aW9uKSB7XG4gIGZvciAoY29uc3QgW25hbWUsIGRlZmluaXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKHNwZWMuUHJvcGVydHlUeXBlcykpIHtcbiAgICBpZiAoIXNjaGVtYS5pc1JlY29yZFR5cGUoZGVmaW5pdGlvbilcbiAgICAmJiAhc2NoZW1hLmlzQ29sbGVjdGlvblByb3BlcnR5KGRlZmluaXRpb24pXG4gICAgJiYgIXNjaGVtYS5pc1NjYWxhclByb3BlcnR5KGRlZmluaXRpb24pXG4gICAgJiYgIXNjaGVtYS5pc1ByaW1pdGl2ZVByb3BlcnR5KGRlZmluaXRpb24pKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coYFske25hbWV9XSBJbmNvbXBsZXRlIHR5cGUsIGFkZGluZyBlbXB0eSBcIlByb3BlcnRpZXNcIiBmaWVsZGApO1xuXG4gICAgICAoZGVmaW5pdGlvbiBhcyB1bmtub3duIGFzIHNjaGVtYS5SZWNvcmRQcm9wZXJ0eSkuUHJvcGVydGllcyA9IHt9O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERyb3AgQXR0cmlidXRlcyBzcGVjaWZpZWQgd2l0aCB0aGUgZGlmZmVyZW50IFJlc291cmNlVHlwZXMgdGhhdCBoYXZlXG4gKiBubyB0eXBlIHNwZWNpZmllZC5cbiAqL1xuZnVuY3Rpb24gZHJvcFR5cGVsZXNzQXR0cmlidXRlcyhzcGVjOiBzY2hlbWEuU3BlY2lmaWNhdGlvbikge1xuICBjb25zdCByZXNvdXJjZVR5cGVzID0gc3BlYy5SZXNvdXJjZVR5cGVzO1xuICBPYmplY3QudmFsdWVzKHJlc291cmNlVHlwZXMpLmZvckVhY2goKHJlc291cmNlVHlwZSkgPT4ge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSByZXNvdXJjZVR5cGUuQXR0cmlidXRlcyA/PyB7fTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChhdHRyS2V5KSA9PiB7XG4gICAgICBjb25zdCBhdHRyVmFsID0gYXR0cmlidXRlc1thdHRyS2V5XTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhhdHRyVmFsKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbYXR0cktleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwcm92aWRlZCBzcGVjaWZpY2F0aW9uIHNvIHRoYXQgYGBSZXNvdXJjZVR5cGVzYGAgYW5kIGBgUHJvcGVydHlUeXBlc2BgIGFyZSBsaXN0ZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLlxuICpcbiAqIEBwYXJhbSBzcGVjIGFuIEFXUyBDbG91ZEZvcm1hdGlvbiBSZXNvdXJjZSBTcGVjaWZpY2F0aW9uIGRvY3VtZW50LlxuICpcbiAqIEByZXR1cm5zIGBgc3BlY2BgLCBhZnRlciBoYXZpbmcgc29ydGVkIHRoZSBgYFJlc291cmNlVHlwZXNgYCBhbmQgYGBQcm9wZXJ0eVR5cGVzYGAgc2VjdGlvbnMgYWxwaGFiZXRpY2FsbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUoc3BlYzogc2NoZW1hLlNwZWNpZmljYXRpb24pOiBzY2hlbWEuU3BlY2lmaWNhdGlvbiB7XG4gIHNwZWMuUmVzb3VyY2VUeXBlcyA9IG5vcm1hbGl6ZVNlY3Rpb24oc3BlYy5SZXNvdXJjZVR5cGVzKTtcbiAgaWYgKHNwZWMuUHJvcGVydHlUeXBlcykge1xuICAgIHNwZWMuUHJvcGVydHlUeXBlcyA9IG5vcm1hbGl6ZVNlY3Rpb24oc3BlYy5Qcm9wZXJ0eVR5cGVzKTtcbiAgfVxuICByZXR1cm4gc3BlYztcblxuICBmdW5jdGlvbiBub3JtYWxpemVTZWN0aW9uPFQ+KHNlY3Rpb246IHsgW25hbWU6IHN0cmluZ106IFQgfSk6IHsgW25hbWU6IHN0cmluZ106IFQgfSB7XG4gICAgY29uc3QgcmVzdWx0OiB7IFtuYW1lOiBzdHJpbmddOiBUIH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzZWN0aW9uKS5zb3J0KCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gc2VjdGlvbltrZXldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzc2FnZS1zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWFzc2FnZS1zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFpRDtBQUNqRCxnQ0FBZ0M7QUFFaEMsU0FBZ0IsV0FBVyxDQUFDLElBQTBCO0lBQ3BELElBQUEsOEJBQW1CLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0Isc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUpELGtDQUlDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsc0JBQXNCLENBQUMsSUFBMEI7SUFDeEQsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ25FLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksbUZBQW1GLENBQUMsQ0FBQztZQUN6RyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNyQixTQUFTO1NBQ1Y7UUFFRCxJQUFJLENBQUMsWUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7ZUFDakMsQ0FBQyxZQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDO2VBQ3hDLENBQUMsWUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQztlQUNwQyxDQUFDLFlBQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMxQyxzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksb0RBQW9ELENBQUMsQ0FBQztZQUV6RSxVQUErQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7U0FDbEU7S0FDRjtBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHNCQUFzQixDQUFDLElBQTBCO0lBQ3hELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtRQUNwRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUNqRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzFDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDckMsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxJQUEwQjtJQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDM0Q7SUFDRCxPQUFPLElBQUksQ0FBQztJQUVaLFNBQVMsZ0JBQWdCLENBQUksT0FBOEI7UUFDekQsTUFBTSxNQUFNLEdBQTBCLEVBQUUsQ0FBQztRQUN6QyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM1QjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDO0FBZEQsOEJBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXRlY3RTY3J1dGlueVR5cGVzIH0gZnJvbSAnLi9zY3J1dGlueSc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi9saWInO1xuXG5leHBvcnQgZnVuY3Rpb24gbWFzc2FnZVNwZWMoc3BlYzogc2NoZW1hLlNwZWNpZmljYXRpb24pIHtcbiAgZGV0ZWN0U2NydXRpbnlUeXBlcyhzcGVjKTtcbiAgcmVwbGFjZUluY29tcGxldGVUeXBlcyhzcGVjKTtcbiAgZHJvcFR5cGVsZXNzQXR0cmlidXRlcyhzcGVjKTtcbn1cblxuLyoqXG4gKiBGaXggaW5jb21wbGV0ZSB0eXBlIGRlZmluaXRpb25zIGluIFByb3BlcnR5VHlwZXNcbiAqXG4gKiBTb21lIHVzZXItZGVmaW5lZCB0eXBlcyBhcmUgZGVmaW5lZCB0byBub3QgaGF2ZSBhbnkgcHJvcGVydGllcywgYW5kIG5vdFxuICogYmUgYSBjb2xsZWN0aW9uIG9mIG90aGVyIHR5cGVzIGVpdGhlci4gVGhleSBoYXZlIG5vIGRlZmluaXRpb24gYXQgYWxsLlxuICpcbiAqIEFkZCBhIHByb3BlcnR5IG9iamVjdCB0eXBlIHdpdGggZW1wdHkgcHJvcGVydGllcy5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUluY29tcGxldGVUeXBlcyhzcGVjOiBzY2hlbWEuU3BlY2lmaWNhdGlvbikge1xuICBmb3IgKGNvbnN0IFtuYW1lLCBkZWZpbml0aW9uXSBvZiBPYmplY3QuZW50cmllcyhzcGVjLlByb3BlcnR5VHlwZXMpKSB7XG4gICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coYFske25hbWV9XSAqKkVSUk9SKiogTnVsbGlzaCB0eXBlIGRlZmluaXRpb246IGEgcGF0Y2ggcHJvYmFibHkgY29waWVkIGEgbm9uZXhpc3RlbnQgdmFsdWUhYCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghc2NoZW1hLmlzUmVjb3JkVHlwZShkZWZpbml0aW9uKVxuICAgICYmICFzY2hlbWEuaXNDb2xsZWN0aW9uUHJvcGVydHkoZGVmaW5pdGlvbilcbiAgICAmJiAhc2NoZW1hLmlzU2NhbGFyUHJvcGVydHkoZGVmaW5pdGlvbilcbiAgICAmJiAhc2NoZW1hLmlzUHJpbWl0aXZlUHJvcGVydHkoZGVmaW5pdGlvbikpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhgWyR7bmFtZX1dIEluY29tcGxldGUgdHlwZSwgYWRkaW5nIGVtcHR5IFwiUHJvcGVydGllc1wiIGZpZWxkYCk7XG5cbiAgICAgIChkZWZpbml0aW9uIGFzIHVua25vd24gYXMgc2NoZW1hLlJlY29yZFByb3BlcnR5KS5Qcm9wZXJ0aWVzID0ge307XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRHJvcCBBdHRyaWJ1dGVzIHNwZWNpZmllZCB3aXRoIHRoZSBkaWZmZXJlbnQgUmVzb3VyY2VUeXBlcyB0aGF0IGhhdmVcbiAqIG5vIHR5cGUgc3BlY2lmaWVkLlxuICovXG5mdW5jdGlvbiBkcm9wVHlwZWxlc3NBdHRyaWJ1dGVzKHNwZWM6IHNjaGVtYS5TcGVjaWZpY2F0aW9uKSB7XG4gIGNvbnN0IHJlc291cmNlVHlwZXMgPSBzcGVjLlJlc291cmNlVHlwZXM7XG4gIE9iamVjdC52YWx1ZXMocmVzb3VyY2VUeXBlcykuZm9yRWFjaCgocmVzb3VyY2VUeXBlKSA9PiB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHJlc291cmNlVHlwZS5BdHRyaWJ1dGVzID8/IHt9O1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goKGF0dHJLZXkpID0+IHtcbiAgICAgIGNvbnN0IGF0dHJWYWwgPSBhdHRyaWJ1dGVzW2F0dHJLZXldO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGF0dHJWYWwpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgYXR0cmlidXRlc1thdHRyS2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHByb3ZpZGVkIHNwZWNpZmljYXRpb24gc28gdGhhdCBgYFJlc291cmNlVHlwZXNgYCBhbmQgYGBQcm9wZXJ0eVR5cGVzYGAgYXJlIGxpc3RlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIuXG4gKlxuICogQHBhcmFtIHNwZWMgYW4gQVdTIENsb3VkRm9ybWF0aW9uIFJlc291cmNlIFNwZWNpZmljYXRpb24gZG9jdW1lbnQuXG4gKlxuICogQHJldHVybnMgYGBzcGVjYGAsIGFmdGVyIGhhdmluZyBzb3J0ZWQgdGhlIGBgUmVzb3VyY2VUeXBlc2BgIGFuZCBgYFByb3BlcnR5VHlwZXNgYCBzZWN0aW9ucyBhbHBoYWJldGljYWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShzcGVjOiBzY2hlbWEuU3BlY2lmaWNhdGlvbik6IHNjaGVtYS5TcGVjaWZpY2F0aW9uIHtcbiAgc3BlYy5SZXNvdXJjZVR5cGVzID0gbm9ybWFsaXplU2VjdGlvbihzcGVjLlJlc291cmNlVHlwZXMpO1xuICBpZiAoc3BlYy5Qcm9wZXJ0eVR5cGVzKSB7XG4gICAgc3BlYy5Qcm9wZXJ0eVR5cGVzID0gbm9ybWFsaXplU2VjdGlvbihzcGVjLlByb3BlcnR5VHlwZXMpO1xuICB9XG4gIHJldHVybiBzcGVjO1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVNlY3Rpb248VD4oc2VjdGlvbjogeyBbbmFtZTogc3RyaW5nXTogVCB9KTogeyBbbmFtZTogc3RyaW5nXTogVCB9IHtcbiAgICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IFQgfSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNlY3Rpb24pLnNvcnQoKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBzZWN0aW9uW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==

50

build-tools/spec-diff.js

@@ -26,3 +26,2 @@ "use strict";

}
validatePropertyTypeNameConsistency(oldSpec, newSpec);
const out = jsonDiff(oldSpec, newSpec);

@@ -245,49 +244,2 @@ // Here's the magic output format of this thing

}
/**
* Safeguard check: make sure that all old property type names in the old spec exist in the new spec
*
* If not, it's probably because the service team renamed a type between spec
* version `v(N)` to `v(N+1)`.. In the CloudFormation spec itself, this is not a
* problem. However, CDK will have generated actual classes and interfaces with
* the type names at `v(N)`, which people will have written code against. If the
* classes and interfaces would have a new name at `v(N+1)`, all user code would
* break.
*/
function validatePropertyTypeNameConsistency(oldSpec, newSpec) {
const newPropsTypes = newSpec.PropertyTypes ?? {};
const disappearedKeys = Object.keys(oldSpec.PropertyTypes ?? {}).filter(k => !(k in newPropsTypes));
if (disappearedKeys.length === 0) {
return;
}
const exampleJsonPatch = {
patch: {
description: 'Undoing upstream property type renames of <SERVICE> because <REASON>',
operations: disappearedKeys.map((key) => ({
op: 'move',
from: `/PropertyTypes/${key.split('.')[0]}.<NEW_TYPE_NAME_HERE>`,
path: `/PropertyTypes/${key}`,
})),
},
};
process.stderr.write([
'┌───────────────────────────────────────────────────────────────────────────────────────┐',
'│ ▐█',
'│ PROPERTY TYPES HAVE DISAPPEARED ▐█',
'│ ▐█',
'│ Some type names have disappeared from the old specification. ▐█',
'│ ▐█',
'│ This probably indicates that the service team renamed one of the types. We have ▐█',
'│ to keep the old type names though: renaming them would constitute a breaking change ▐█',
'│ to consumers of the L1 resources. ▐█',
'│ ▐█',
'└─▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟█',
'',
'See what the renames were, check out this PR locally and add a JSON patch file for these types:',
'',
'(Example)',
'',
JSON.stringify(exampleJsonPatch, undefined, 2),
].join('\n'));
process.exitCode = 1;
}
main().catch(e => {

@@ -298,2 +250,2 @@ process.stderr.write(e.stack);

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlYy1kaWZmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3BlYy1kaWZmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUUvQiwwREFBMEQ7QUFDMUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzQyxtQkFBbUI7QUFFbkIsU0FBUyxJQUFJLENBQUMsTUFBYyxFQUFFLEVBQUUsR0FBRyxLQUFZO0lBQzdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUUvQyxpREFBaUQ7SUFDakQsMkNBQTJDO0lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1FBQzFCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0tBQzVCO0lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7UUFDMUIsT0FBTyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7S0FDNUI7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dGlsJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuY29uc3QganNvbkRpZmYgPSByZXF1aXJlKCdqc29uLWRpZmYnKS5kaWZmO1xuLyogZXNsaW50LWVuYWJsZSAqL1xuXG5mdW5jdGlvbiBsaW5lKGZtdDogc3RyaW5nID0gJycsIC4uLnBhcmFtOiBhbnlbXSkge1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZSh1dGlsLmZvcm1hdChmbXQsIC4uLnBhcmFtKSk7XG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXG4nKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgdGl0bGUgPSBwcm9jZXNzLmFyZ3ZbMl07XG4gIGNvbnN0IG9sZFNwZWNGaWxlID0gcHJvY2Vzcy5hcmd2WzNdO1xuICBjb25zdCBuZXdTcGVjRmlsZSA9IHByb2Nlc3MuYXJndls0XTtcblxuICBjb25zdCBuZXdTcGVjID0gYXdhaXQgZnMucmVhZEpTT04obmV3U3BlY0ZpbGUpO1xuICBjb25zdCBvbGRTcGVjID0gYXdhaXQgZnMucmVhZEpTT04ob2xkU3BlY0ZpbGUpO1xuXG4gIC8vIERpZmYgb3BlcmF0ZXMgb24gUHJvcGVydHlUeXBlcyAmIFJlc291cmNlVHlwZXNcbiAgLy8gRW5zdXJlIHRoZXkgYWx3YXlzIGV4aXN0IGluIHRoZSBvbGQgc3BlY1xuICBpZiAoIW9sZFNwZWMuUHJvcGVydHlUeXBlcykge1xuICAgIG9sZFNwZWMuUHJvcGVydHlUeXBlcyA9IHt9O1xuICB9XG4gIGlmICghb2xkU3BlYy5SZXNvdXJjZVR5cGVzKSB7XG4gICAgb2xkU3BlYy5SZXNvdXJjZVR5cGVzID0ge307XG4gIH1cblxuICB2YWxpZGF0ZVByb3BlcnR5VHlwZU5hbWVDb25zaXN0ZW5jeShvbGRTcGVjLCBuZXdTcGVjKTtcblxuICBjb25zdCBvdXQgPSBqc29uRGlmZihvbGRTcGVjLCBuZXdTcGVjKTtcblxuICAvLyBIZXJlJ3MgdGhlIG1hZ2ljIG91dHB1dCBmb3JtYXQgb2YgdGhpcyB0aGluZ1xuICAvLyBJZiBhIGtleSBlbmRzIGluIF9fYWRkZWQsIGl0IGdvdCBhZGRlZCwgYW5kIHRoZSB2YWx1ZVxuICAvLyAgIGlzIHRoZSBuZXcgdmFsdWUuXG4gIC8vIElmIGEga2V5IGVuZHMgaW4gX19kZWxldGVkLCBpdCBnb3QgZGVsZXRlZCwgYW5kIHRoZSB2YWx1ZVxuICAvLyAgIGlzIHRoZSBvbGQgdmFsdWUuXG4gIC8vIElmIGEgdmFsdWUgZ290IGNoYW5nZWQsIHRoZSB2YWx1ZSBvYmplY3Qgd2lsbCBsb29rIGxpa2U6XG4gIC8vICAgeyBfX29sZDogLi4uLCBfX25ldzogLi4uIH1cblxuICBpZiAoIW91dCkge1xuICAgIHJldHVybjsgLy8gbm8gZGlmZlxuICB9XG5cbiAgY29uc3QgcmVzb3VyY2VUeXBlQWRkaXRpb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHJlc291cmNlVHlwZURlbGV0aW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBhdHRyaWJ1dGVDaGFuZ2VzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgY29uc3QgcHJvcGVydHlDaGFuZ2VzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgY29uc3QgcHJvcGVydHlUeXBlQ2hhbmdlcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob3V0LlJlc291cmNlVHlwZXMgfHwge30pKSB7XG4gICAgY2xhc3NpZnlSZXNvdXJjZVR5cGVVcGRhdGUoa2V5LCBvdXQuUmVzb3VyY2VUeXBlc1trZXldKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG91dC5Qcm9wZXJ0eVR5cGVzIHx8IHt9KSkge1xuICAgIGNsYXNzaWZ5UHJvcGVydHlUeXBlVXBkYXRlKGtleSwgb3V0LlByb3BlcnR5VHlwZXNba2V5XSk7XG4gIH1cblxuICBsaW5lKGAjICR7dGl0bGV9IHYke25ld1NwZWMuUmVzb3VyY2VTcGVjaWZpY2F0aW9uVmVyc2lvbn1gKTtcbiAgbGluZSgpO1xuXG4gIGxpbmUoJyMjIE5ldyBSZXNvdXJjZSBUeXBlcycpO1xuICBsaW5lKCk7XG4gIHJlc291cmNlVHlwZUFkZGl0aW9ucy5mb3JFYWNoKHR5cGUgPT4gbGluZShgKiAke3R5cGV9YCkpO1xuICBsaW5lKCk7XG5cbiAgaWYgKHJlc291cmNlVHlwZURlbGV0aW9ucy5zaXplID4gMCkge1xuICAgIGxpbmUoJyMjIFJlbW92ZWQgUmVzb3VyY2UgVHlwZXMnKTtcbiAgICBsaW5lKCk7XG4gICAgcmVzb3VyY2VUeXBlRGVsZXRpb25zLmZvckVhY2godHlwZSA9PiBsaW5lKGAqICR7dHlwZX1gKSk7XG4gICAgbGluZSgpO1xuICB9XG5cbiAgbGluZSgnIyMgQXR0cmlidXRlIENoYW5nZXMnKTtcbiAgbGluZSgpO1xuICBhdHRyaWJ1dGVDaGFuZ2VzLmZvckVhY2goeCA9PiBsaW5lKHgpKTtcbiAgbGluZSgpO1xuXG4gIGxpbmUoJyMjIFByb3BlcnR5IENoYW5nZXMnKTtcbiAgbGluZSgpO1xuICBwcm9wZXJ0eUNoYW5nZXMuZm9yRWFjaCh4ID0+IGxpbmUoeCkpO1xuICBsaW5lKCk7XG5cbiAgbGluZSgnIyMgUHJvcGVydHkgVHlwZSBDaGFuZ2VzJyk7XG4gIGxpbmUoKTtcbiAgcHJvcGVydHlUeXBlQ2hhbmdlcy5mb3JFYWNoKHggPT4gbGluZSh4KSk7XG5cbiAgZnVuY3Rpb24gY2xhc3NpZnlSZXNvdXJjZVR5cGVVcGRhdGUocmVzb3VyY2VUeXBlOiBzdHJpbmcsIHVwZGF0ZTogYW55KSB7XG4gICAgY29uc3QgYWRkZWQgPSBpc0FkZGVkKHJlc291cmNlVHlwZSk7XG4gICAgaWYgKGFkZGVkKSB7XG4gICAgICByZXNvdXJjZVR5cGVBZGRpdGlvbnMuYWRkKGFkZGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWxldGVkID0gaXNEZWxldGVkKHJlc291cmNlVHlwZSk7XG4gICAgaWYgKGRlbGV0ZWQpIHtcbiAgICAgIHJlc291cmNlVHlwZURlbGV0aW9ucy5hZGQoZGVsZXRlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVzaERvd25Db21wbGV0ZUNoYW5nZXModXBkYXRlKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHVwZGF0ZSkpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ1Byb3BlcnRpZXMnOlxuICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyh1cGRhdGUuUHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIGRlc2NyaWJlQ2hhbmdlcyhyZXNvdXJjZVR5cGUsIHByb3AsIHVwZGF0ZS5Qcm9wZXJ0aWVzW3Byb3BdKS5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgICAgICAgIHByb3BlcnR5Q2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0F0dHJpYnV0ZXMnOlxuICAgICAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBPYmplY3Qua2V5cyh1cGRhdGUuQXR0cmlidXRlcykpIHtcbiAgICAgICAgICAgIGRlc2NyaWJlQ2hhbmdlcyhyZXNvdXJjZVR5cGUsIGF0dHIsIHVwZGF0ZS5BdHRyaWJ1dGVzW2F0dHJdKS5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZXMucHVzaChjaGFuZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdEb2N1bWVudGF0aW9uJzpcbiAgICAgICAgICBkZXNjcmliZUNoYW5nZXMocmVzb3VyY2VUeXBlLCBrZXksIHVwZGF0ZS5Eb2N1bWVudGF0aW9uKS5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdXBkYXRlIHRvICR7cmVzb3VyY2VUeXBlfTogJHtrZXl9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xhc3NpZnlQcm9wZXJ0eVR5cGVVcGRhdGUocHJvcGVydHlUeXBlOiBzdHJpbmcsIHVwZGF0ZTogYW55KSB7XG4gICAgY29uc3QgYWRkZWQgPSBpc0FkZGVkKHByb3BlcnR5VHlwZSk7XG4gICAgaWYgKGFkZGVkKSB7XG4gICAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBhZGRlZC5zcGxpdCgnLicpWzBdO1xuICAgICAgaWYgKHJlc291cmNlVHlwZUFkZGl0aW9ucy5oYXMocmVzb3VyY2VUeXBlKSkge1xuICAgICAgICByZXR1cm47IC8vIHNraXBwaW5nIHByb3BlcnR5IGZvciBhZGRlZCByZXNvdXJjZSB0eXBlc1xuICAgICAgfVxuXG4gICAgICBwcm9wZXJ0eVR5cGVDaGFuZ2VzLnB1c2goYCogJHthZGRlZH0gKF9fYWRkZWRfXylgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWxldGVkID0gaXNEZWxldGVkKHByb3BlcnR5VHlwZSk7XG4gICAgaWYgKGRlbGV0ZWQpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IGRlbGV0ZWQuc3BsaXQoJy4nKVswXTtcbiAgICAgIGlmIChyZXNvdXJjZVR5cGVEZWxldGlvbnMuaGFzKHJlc291cmNlVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBza2lwcGluZyBwcm9wZXJ0eSBmb3IgYWRkZWQgcmVzb3VyY2UgdHlwZXNcbiAgICAgIH1cblxuICAgICAgcHJvcGVydHlUeXBlQ2hhbmdlcy5wdXNoKGAqICR7ZGVsZXRlZH0gKF9fcmVtb3ZlZF9fKWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyh1cGRhdGUpLmxlbmd0aCAhPT0gMSAmJiBPYmplY3Qua2V5cyh1cGRhdGUpWzBdID09PSAnUHJvcGVydGllcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB1cGRhdGUgdG8gYSByZXNvdXJjZSB0eXBlLiBFeHBlY3Rpbmcgb25seSBcIlByb3BlcnRpZXNcIiB0byBjaGFuZ2U6ICcgKyBwcm9wZXJ0eVR5cGUpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyh1cGRhdGUuUHJvcGVydGllcyA/PyB7fSkpIHtcbiAgICAgIGRlc2NyaWJlQ2hhbmdlcyhwcm9wZXJ0eVR5cGUsIHByb3AsIHVwZGF0ZS5Qcm9wZXJ0aWVzW3Byb3BdKS5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgIHByb3BlcnR5VHlwZUNoYW5nZXMucHVzaChjaGFuZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFB1c2ggZG93biBtYXNzIGNoYW5nZXMgdG8gYXR0cmlidXRlcyBvciBwcm9wZXJ0aWVzIHRvIHRoZSBpbmRpdmlkdWFsIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEFuIGV4YW1wbGUgd2lsbCBleHBsYWluIHRoaXMgYmVzdC4gSlNPTi1kaWZmIHdpbGwgbWFrZSB0aGUgc21hbGxlc3QgZGlmZiwgc28gaWYgdGhlcmVcbiAgICogYXJlIG5ldyBwcm9wZXJ0aWVzIGl0IHdpbGwgcmVwb3J0OlxuICAgKlxuICAgKiBcIlByb3BlcnRpZXNfX2FkZGVkXCI6IHtcbiAgICogICAgXCJQcm9wZXJ0eTFcIjogeyAuLi4gfSxcbiAgICogICAgXCJQcm9wZXJ0eTJcIjogeyAuLi4gfSxcbiAgICogfVxuICAgKlxuICAgKiBCdXQgd2Ugd2FudCB0byBzZWUgdGhpcyBhczpcbiAgICpcbiAgICogXCJQcm9wZXJ0aWVzXCI6IHtcbiAgICogICAgXCJQcm9wZXJ0eTFfX2FkZGVkXCI6IHsgLi4uIH0sXG4gICAqICAgIFwiUHJvcGVydHkyX19hZGRlZFwiOiB7IC4uLiB9LFxuICAgKiB9XG4gICAqXG4gICAqIFNhbWUgKGJ1dCBpbiByZXZlcnNlKSBmb3IgZGVsZXRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gcHVzaERvd25Db21wbGV0ZUNoYW5nZXModXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pikge1xuICAgIGZvciAoY29uc3QgW2NhdGVnb3J5LCBlbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyh1cGRhdGUpKSB7XG4gICAgICBjb25zdCBhZGRlZEtleSA9IGlzQWRkZWQoY2F0ZWdvcnkpO1xuICAgICAgaWYgKGFkZGVkS2V5KSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVbY2F0ZWdvcnldO1xuICAgICAgICB1cGRhdGVbYWRkZWRLZXldID0gc3VmZml4S2V5cygnX19hZGRlZCcsIGVudHJpZXMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWxldGVkS2V5ID0gaXNEZWxldGVkKGNhdGVnb3J5KTtcbiAgICAgIGlmIChkZWxldGVkS2V5KSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVbY2F0ZWdvcnldO1xuICAgICAgICB1cGRhdGVbZGVsZXRlZEtleV0gPSBzdWZmaXhLZXlzKCdfX2RlbGV0ZWQnLCBlbnRyaWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc0RlbGV0ZWQoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gaXNTdWZmaXgoa2V5LCAnX19kZWxldGVkJyk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0FkZGVkKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGlzU3VmZml4KGtleSwgJ19fYWRkZWQnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3VmZml4KGtleTogc3RyaW5nLCBzdWZmaXg6IHN0cmluZykge1xuICAgIGNvbnN0IGluZGV4ID0ga2V5LmluZGV4T2Yoc3VmZml4KTtcbiAgICByZXR1cm4gaW5kZXggPT09IC0xID8gdW5kZWZpbmVkIDoga2V5LnNsaWNlKDAsIGluZGV4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1ZmZpeEtleXMoc3VmZml4OiBzdHJpbmcsIHhzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgcmV0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoeHMpKSB7XG4gICAgICByZXRba2V5ICsgc3VmZml4XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzY3JpYmVDaGFuZ2VzKG5hbWVzcGFjZTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZywgdXBkYXRlOiBhbnkpIHtcbiAgICBjb25zdCBjaGFuZ2VzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGNvbnN0IGFkZGVkID0gaXNBZGRlZChwcmVmaXgpO1xuICAgIGlmIChhZGRlZCkge1xuICAgICAgY2hhbmdlcy5wdXNoKGAqICR7bmFtZXNwYWNlfSAke2FkZGVkfSAoX19hZGRlZF9fKWApO1xuICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsZXRlZCA9IGlzRGVsZXRlZChwcmVmaXgpO1xuICAgIGlmIChkZWxldGVkKSB7XG4gICAgICBjaGFuZ2VzLnB1c2goYCogJHtuYW1lc3BhY2V9ICR7ZGVsZXRlZH0gKF9fZGVsZXRlZF9fKWApO1xuICAgICAgcmV0dXJuIGNoYW5nZXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZih1cGRhdGUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGNoYW5nZSBmb3IgJHtuYW1lc3BhY2V9LiR7cHJlZml4fSAke0pTT04uc3RyaW5naWZ5KHVwZGF0ZSl9YCk7XG4gICAgfVxuXG4gICAgaWYgKCdfX29sZCcgaW4gdXBkYXRlICYmICdfX25ldycgaW4gdXBkYXRlKSB7XG4gICAgICBjaGFuZ2VzLnB1c2goYCogJHtuYW1lc3BhY2V9ICR7cHJlZml4fSAoX19jaGFuZ2VkX18pYCk7XG4gICAgICBjaGFuZ2VzLnB1c2goYCAgKiBPbGQ6ICR7dXBkYXRlLl9fb2xkfWApO1xuICAgICAgY2hhbmdlcy5wdXNoKGAgICogTmV3OiAke3VwZGF0ZS5fX25ld31gKTtcbiAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZSkpIHtcbiAgICAgIGNoYW5nZXMucHVzaChgKiAke25hbWVzcGFjZX0gJHtwcmVmaXh9IChfX2NoYW5nZWRfXylgKTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdXBkYXRlKSB7XG4gICAgICAgIGlmIChlbnRyeS5sZW5ndGggPT09IDEgJiYgZW50cnlbMF0gPT09ICcgJykge1xuICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGlzIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHVuY2hhbmdlZFxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgYXJyYXkgZGlmZiBlbnRyeTogJHtKU09OLnN0cmluZ2lmeShlbnRyeSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChlbnRyeVswXSkge1xuICAgICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgICAgY2hhbmdlcy5wdXNoKGAgICogQWRkZWQgJHtlbnRyeVsxXX1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb21ldGhpbmcgYXdrd2FyZCBoYXBwZW5lZDogJHtlbnRyeVsxXX0gd2FzIGRlbGV0ZWQgZnJvbSAke25hbWVzcGFjZX0gJHtwcmVmaXh9IWApO1xuICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgLy8gVGhpcyBlbnRyeSBpcyBcImNvbnRleHRcIlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBhcnJheSBkaWZmIGVudHJ5OiAke0pTT04uc3RyaW5naWZ5KGVudHJ5KX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh1cGRhdGUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIGRlc2NyaWJlQ2hhbmdlcyhuYW1lc3BhY2UsIGAke3ByZWZpeH0uJHtrZXl9YCwgdXBkYXRlW2tleV0pKSB7XG4gICAgICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxufVxuXG4vKipcbiAqIFNhZmVndWFyZCBjaGVjazogbWFrZSBzdXJlIHRoYXQgYWxsIG9sZCBwcm9wZXJ0eSB0eXBlIG5hbWVzIGluIHRoZSBvbGQgc3BlYyBleGlzdCBpbiB0aGUgbmV3IHNwZWNcbiAqXG4gKiBJZiBub3QsIGl0J3MgcHJvYmFibHkgYmVjYXVzZSB0aGUgc2VydmljZSB0ZWFtIHJlbmFtZWQgYSB0eXBlIGJldHdlZW4gc3BlY1xuICogdmVyc2lvbiBgdihOKWAgdG8gYHYoTisxKWAuLiBJbiB0aGUgQ2xvdWRGb3JtYXRpb24gc3BlYyBpdHNlbGYsIHRoaXMgaXMgbm90IGFcbiAqIHByb2JsZW0uIEhvd2V2ZXIsIENESyB3aWxsIGhhdmUgZ2VuZXJhdGVkIGFjdHVhbCBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzIHdpdGhcbiAqIHRoZSB0eXBlIG5hbWVzIGF0IGB2KE4pYCwgd2hpY2ggcGVvcGxlIHdpbGwgaGF2ZSB3cml0dGVuIGNvZGUgYWdhaW5zdC4gSWYgdGhlXG4gKiBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzIHdvdWxkIGhhdmUgYSBuZXcgbmFtZSBhdCBgdihOKzEpYCwgYWxsIHVzZXIgY29kZSB3b3VsZFxuICogYnJlYWsuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHlUeXBlTmFtZUNvbnNpc3RlbmN5KG9sZFNwZWM6IGFueSwgbmV3U3BlYzogYW55KSB7XG4gIGNvbnN0IG5ld1Byb3BzVHlwZXMgPSBuZXdTcGVjLlByb3BlcnR5VHlwZXMgPz8ge307XG4gIGNvbnN0IGRpc2FwcGVhcmVkS2V5cyA9IE9iamVjdC5rZXlzKG9sZFNwZWMuUHJvcGVydHlUeXBlcyA/PyB7fSkuZmlsdGVyKGsgPT4gIShrIGluIG5ld1Byb3BzVHlwZXMpKTtcbiAgaWYgKGRpc2FwcGVhcmVkS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBleGFtcGxlSnNvblBhdGNoID0ge1xuICAgIHBhdGNoOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1VuZG9pbmcgdXBzdHJlYW0gcHJvcGVydHkgdHlwZSByZW5hbWVzIG9mIDxTRVJWSUNFPiBiZWNhdXNlIDxSRUFTT04+JyxcbiAgICAgIG9wZXJhdGlvbnM6IGRpc2FwcGVhcmVkS2V5cy5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgb3A6ICdtb3ZlJyxcbiAgICAgICAgZnJvbTogYC9Qcm9wZXJ0eVR5cGVzLyR7a2V5LnNwbGl0KCcuJylbMF19LjxORVdfVFlQRV9OQU1FX0hFUkU+YCxcbiAgICAgICAgcGF0aDogYC9Qcm9wZXJ0eVR5cGVzLyR7a2V5fWAsXG4gICAgICB9KSksXG4gICAgfSxcbiAgfTtcblxuICBwcm9jZXNzLnN0ZGVyci53cml0ZShbXG4gICAgJ+KUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCcsXG4gICAgJ+KUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKWkOKWiCcsXG4gICAgJ+KUgiAgUFJPUEVSVFkgVFlQRVMgSEFWRSBESVNBUFBFQVJFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKWkOKWiCcsXG4gICAgJ+KUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKWkOKWiCcsXG4gICAgJ+KUgiAgU29tZSB0eXBlIG5hbWVzIGhhdmUgZGlzYXBwZWFyZWQgZnJvbSB0aGUgb2xkIHNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgIOKWkOKWiCcsXG4gICAgJ+KUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKWkOKWiCcsXG4gICAgJ+KUgiAgVGhpcyBwcm9iYWJseSBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VydmljZSB0ZWFtIHJlbmFtZWQgb25lIG9mIHRoZSB0eXBlcy4gV2UgaGF2ZSAgICAgIOKWkOKWiCcsXG4gICAgJ+KUgiAgdG8ga2VlcCB0aGUgb2xkIHR5cGUgbmFtZXMgdGhvdWdoOiByZW5hbWluZyB0aGVtIHdvdWxkIGNvbnN0aXR1dGUgYSBicmVha2luZyBjaGFuZ2UgIOKWkOKWiCcsXG4gICAgJ+KUgiAgdG8gY29uc3VtZXJzIG9mIHRoZSBMMSByZXNvdXJjZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKWkOKWiCcsXG4gICAgJ+KUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKWkOKWiCcsXG4gICAgJ+KUlOKUgOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWn+KWiCcsXG4gICAgJycsXG4gICAgJ1NlZSB3aGF0IHRoZSByZW5hbWVzIHdlcmUsIGNoZWNrIG91dCB0aGlzIFBSIGxvY2FsbHkgYW5kIGFkZCBhIEpTT04gcGF0Y2ggZmlsZSBmb3IgdGhlc2UgdHlwZXM6JyxcbiAgICAnJyxcbiAgICAnKEV4YW1wbGUpJyxcbiAgICAnJyxcbiAgICBKU09OLnN0cmluZ2lmeShleGFtcGxlSnNvblBhdGNoLCB1bmRlZmluZWQsIDIpLFxuICBdLmpvaW4oJ1xcbicpKTtcbiAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG59XG5cbm1haW4oKS5jYXRjaChlID0+IHtcbiAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoZS5zdGFjayk7XG4gIHByb2Nlc3Muc3RkZXJyLndyaXRlKCdcXG4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlYy1kaWZmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3BlYy1kaWZmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUUvQiwwREFBMEQ7QUFDMUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzQyxtQkFBbUI7QUFFbkIsU0FBUyxJQUFJLENBQUMsTUFBYyxFQUFFLEVBQUUsR0FBRyxLQUFZO0lBQzdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUUvQyxpREFBaUQ7SUFDakQsMkNBQTJDO0lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1FBQzFCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0tBQzVCO0lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7UUFDMUIsT0FBTyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7S0FDNUI7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O29CQUNSLEtBQUssR0FBRzt3QkFDTixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixTQUFTLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDdEcsS0FBSyxHQUFHO3dCQUNOLDBCQUEwQjt3QkFDMUIsTUFBTTtvQkFDUjt3QkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDNUU7YUFDRjtTQUNGO2FBQU07WUFDTCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3JDLEtBQUssTUFBTSxNQUFNLElBQUksZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLE1BQU0sSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDaEYsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDdEI7YUFDRjtTQUNGO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDZixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWwgZnJvbSAndXRpbCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbmNvbnN0IGpzb25EaWZmID0gcmVxdWlyZSgnanNvbi1kaWZmJykuZGlmZjtcbi8qIGVzbGludC1lbmFibGUgKi9cblxuZnVuY3Rpb24gbGluZShmbXQ6IHN0cmluZyA9ICcnLCAuLi5wYXJhbTogYW55W10pIHtcbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUodXRpbC5mb3JtYXQoZm10LCAuLi5wYXJhbSkpO1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IHRpdGxlID0gcHJvY2Vzcy5hcmd2WzJdO1xuICBjb25zdCBvbGRTcGVjRmlsZSA9IHByb2Nlc3MuYXJndlszXTtcbiAgY29uc3QgbmV3U3BlY0ZpbGUgPSBwcm9jZXNzLmFyZ3ZbNF07XG5cbiAgY29uc3QgbmV3U3BlYyA9IGF3YWl0IGZzLnJlYWRKU09OKG5ld1NwZWNGaWxlKTtcbiAgY29uc3Qgb2xkU3BlYyA9IGF3YWl0IGZzLnJlYWRKU09OKG9sZFNwZWNGaWxlKTtcblxuICAvLyBEaWZmIG9wZXJhdGVzIG9uIFByb3BlcnR5VHlwZXMgJiBSZXNvdXJjZVR5cGVzXG4gIC8vIEVuc3VyZSB0aGV5IGFsd2F5cyBleGlzdCBpbiB0aGUgb2xkIHNwZWNcbiAgaWYgKCFvbGRTcGVjLlByb3BlcnR5VHlwZXMpIHtcbiAgICBvbGRTcGVjLlByb3BlcnR5VHlwZXMgPSB7fTtcbiAgfVxuICBpZiAoIW9sZFNwZWMuUmVzb3VyY2VUeXBlcykge1xuICAgIG9sZFNwZWMuUmVzb3VyY2VUeXBlcyA9IHt9O1xuICB9XG5cbiAgY29uc3Qgb3V0ID0ganNvbkRpZmYob2xkU3BlYywgbmV3U3BlYyk7XG5cbiAgLy8gSGVyZSdzIHRoZSBtYWdpYyBvdXRwdXQgZm9ybWF0IG9mIHRoaXMgdGhpbmdcbiAgLy8gSWYgYSBrZXkgZW5kcyBpbiBfX2FkZGVkLCBpdCBnb3QgYWRkZWQsIGFuZCB0aGUgdmFsdWVcbiAgLy8gICBpcyB0aGUgbmV3IHZhbHVlLlxuICAvLyBJZiBhIGtleSBlbmRzIGluIF9fZGVsZXRlZCwgaXQgZ290IGRlbGV0ZWQsIGFuZCB0aGUgdmFsdWVcbiAgLy8gICBpcyB0aGUgb2xkIHZhbHVlLlxuICAvLyBJZiBhIHZhbHVlIGdvdCBjaGFuZ2VkLCB0aGUgdmFsdWUgb2JqZWN0IHdpbGwgbG9vayBsaWtlOlxuICAvLyAgIHsgX19vbGQ6IC4uLiwgX19uZXc6IC4uLiB9XG5cbiAgaWYgKCFvdXQpIHtcbiAgICByZXR1cm47IC8vIG5vIGRpZmZcbiAgfVxuXG4gIGNvbnN0IHJlc291cmNlVHlwZUFkZGl0aW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByZXNvdXJjZVR5cGVEZWxldGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgYXR0cmlidXRlQ2hhbmdlcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGNvbnN0IHByb3BlcnR5Q2hhbmdlcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGNvbnN0IHByb3BlcnR5VHlwZUNoYW5nZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG91dC5SZXNvdXJjZVR5cGVzIHx8IHt9KSkge1xuICAgIGNsYXNzaWZ5UmVzb3VyY2VUeXBlVXBkYXRlKGtleSwgb3V0LlJlc291cmNlVHlwZXNba2V5XSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvdXQuUHJvcGVydHlUeXBlcyB8fCB7fSkpIHtcbiAgICBjbGFzc2lmeVByb3BlcnR5VHlwZVVwZGF0ZShrZXksIG91dC5Qcm9wZXJ0eVR5cGVzW2tleV0pO1xuICB9XG5cbiAgbGluZShgIyAke3RpdGxlfSB2JHtuZXdTcGVjLlJlc291cmNlU3BlY2lmaWNhdGlvblZlcnNpb259YCk7XG4gIGxpbmUoKTtcblxuICBsaW5lKCcjIyBOZXcgUmVzb3VyY2UgVHlwZXMnKTtcbiAgbGluZSgpO1xuICByZXNvdXJjZVR5cGVBZGRpdGlvbnMuZm9yRWFjaCh0eXBlID0+IGxpbmUoYCogJHt0eXBlfWApKTtcbiAgbGluZSgpO1xuXG4gIGlmIChyZXNvdXJjZVR5cGVEZWxldGlvbnMuc2l6ZSA+IDApIHtcbiAgICBsaW5lKCcjIyBSZW1vdmVkIFJlc291cmNlIFR5cGVzJyk7XG4gICAgbGluZSgpO1xuICAgIHJlc291cmNlVHlwZURlbGV0aW9ucy5mb3JFYWNoKHR5cGUgPT4gbGluZShgKiAke3R5cGV9YCkpO1xuICAgIGxpbmUoKTtcbiAgfVxuXG4gIGxpbmUoJyMjIEF0dHJpYnV0ZSBDaGFuZ2VzJyk7XG4gIGxpbmUoKTtcbiAgYXR0cmlidXRlQ2hhbmdlcy5mb3JFYWNoKHggPT4gbGluZSh4KSk7XG4gIGxpbmUoKTtcblxuICBsaW5lKCcjIyBQcm9wZXJ0eSBDaGFuZ2VzJyk7XG4gIGxpbmUoKTtcbiAgcHJvcGVydHlDaGFuZ2VzLmZvckVhY2goeCA9PiBsaW5lKHgpKTtcbiAgbGluZSgpO1xuXG4gIGxpbmUoJyMjIFByb3BlcnR5IFR5cGUgQ2hhbmdlcycpO1xuICBsaW5lKCk7XG4gIHByb3BlcnR5VHlwZUNoYW5nZXMuZm9yRWFjaCh4ID0+IGxpbmUoeCkpO1xuXG4gIGZ1bmN0aW9uIGNsYXNzaWZ5UmVzb3VyY2VUeXBlVXBkYXRlKHJlc291cmNlVHlwZTogc3RyaW5nLCB1cGRhdGU6IGFueSkge1xuICAgIGNvbnN0IGFkZGVkID0gaXNBZGRlZChyZXNvdXJjZVR5cGUpO1xuICAgIGlmIChhZGRlZCkge1xuICAgICAgcmVzb3VyY2VUeXBlQWRkaXRpb25zLmFkZChhZGRlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVsZXRlZCA9IGlzRGVsZXRlZChyZXNvdXJjZVR5cGUpO1xuICAgIGlmIChkZWxldGVkKSB7XG4gICAgICByZXNvdXJjZVR5cGVEZWxldGlvbnMuYWRkKGRlbGV0ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1c2hEb3duQ29tcGxldGVDaGFuZ2VzKHVwZGF0ZSk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh1cGRhdGUpKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdQcm9wZXJ0aWVzJzpcbiAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXModXBkYXRlLlByb3BlcnRpZXMpKSB7XG4gICAgICAgICAgICBkZXNjcmliZUNoYW5nZXMocmVzb3VyY2VUeXBlLCBwcm9wLCB1cGRhdGUuUHJvcGVydGllc1twcm9wXSkuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgICBwcm9wZXJ0eUNoYW5nZXMucHVzaChjaGFuZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdBdHRyaWJ1dGVzJzpcbiAgICAgICAgICBmb3IgKGNvbnN0IGF0dHIgb2YgT2JqZWN0LmtleXModXBkYXRlLkF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICBkZXNjcmliZUNoYW5nZXMocmVzb3VyY2VUeXBlLCBhdHRyLCB1cGRhdGUuQXR0cmlidXRlc1thdHRyXSkuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnRG9jdW1lbnRhdGlvbic6XG4gICAgICAgICAgZGVzY3JpYmVDaGFuZ2VzKHJlc291cmNlVHlwZSwga2V5LCB1cGRhdGUuRG9jdW1lbnRhdGlvbikuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgYXR0cmlidXRlQ2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHVwZGF0ZSB0byAke3Jlc291cmNlVHlwZX06ICR7a2V5fWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzaWZ5UHJvcGVydHlUeXBlVXBkYXRlKHByb3BlcnR5VHlwZTogc3RyaW5nLCB1cGRhdGU6IGFueSkge1xuICAgIGNvbnN0IGFkZGVkID0gaXNBZGRlZChwcm9wZXJ0eVR5cGUpO1xuICAgIGlmIChhZGRlZCkge1xuICAgICAgY29uc3QgcmVzb3VyY2VUeXBlID0gYWRkZWQuc3BsaXQoJy4nKVswXTtcbiAgICAgIGlmIChyZXNvdXJjZVR5cGVBZGRpdGlvbnMuaGFzKHJlc291cmNlVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBza2lwcGluZyBwcm9wZXJ0eSBmb3IgYWRkZWQgcmVzb3VyY2UgdHlwZXNcbiAgICAgIH1cblxuICAgICAgcHJvcGVydHlUeXBlQ2hhbmdlcy5wdXNoKGAqICR7YWRkZWR9IChfX2FkZGVkX18pYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVsZXRlZCA9IGlzRGVsZXRlZChwcm9wZXJ0eVR5cGUpO1xuICAgIGlmIChkZWxldGVkKSB7XG4gICAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBkZWxldGVkLnNwbGl0KCcuJylbMF07XG4gICAgICBpZiAocmVzb3VyY2VUeXBlRGVsZXRpb25zLmhhcyhyZXNvdXJjZVR5cGUpKSB7XG4gICAgICAgIHJldHVybjsgLy8gc2tpcHBpbmcgcHJvcGVydHkgZm9yIGFkZGVkIHJlc291cmNlIHR5cGVzXG4gICAgICB9XG5cbiAgICAgIHByb3BlcnR5VHlwZUNoYW5nZXMucHVzaChgKiAke2RlbGV0ZWR9IChfX3JlbW92ZWRfXylgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXModXBkYXRlKS5sZW5ndGggIT09IDEgJiYgT2JqZWN0LmtleXModXBkYXRlKVswXSA9PT0gJ1Byb3BlcnRpZXMnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgdXBkYXRlIHRvIGEgcmVzb3VyY2UgdHlwZS4gRXhwZWN0aW5nIG9ubHkgXCJQcm9wZXJ0aWVzXCIgdG8gY2hhbmdlOiAnICsgcHJvcGVydHlUeXBlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXModXBkYXRlLlByb3BlcnRpZXMgPz8ge30pKSB7XG4gICAgICBkZXNjcmliZUNoYW5nZXMocHJvcGVydHlUeXBlLCBwcm9wLCB1cGRhdGUuUHJvcGVydGllc1twcm9wXSkuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgICBwcm9wZXJ0eVR5cGVDaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQdXNoIGRvd24gbWFzcyBjaGFuZ2VzIHRvIGF0dHJpYnV0ZXMgb3IgcHJvcGVydGllcyB0byB0aGUgaW5kaXZpZHVhbCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBBbiBleGFtcGxlIHdpbGwgZXhwbGFpbiB0aGlzIGJlc3QuIEpTT04tZGlmZiB3aWxsIG1ha2UgdGhlIHNtYWxsZXN0IGRpZmYsIHNvIGlmIHRoZXJlXG4gICAqIGFyZSBuZXcgcHJvcGVydGllcyBpdCB3aWxsIHJlcG9ydDpcbiAgICpcbiAgICogXCJQcm9wZXJ0aWVzX19hZGRlZFwiOiB7XG4gICAqICAgIFwiUHJvcGVydHkxXCI6IHsgLi4uIH0sXG4gICAqICAgIFwiUHJvcGVydHkyXCI6IHsgLi4uIH0sXG4gICAqIH1cbiAgICpcbiAgICogQnV0IHdlIHdhbnQgdG8gc2VlIHRoaXMgYXM6XG4gICAqXG4gICAqIFwiUHJvcGVydGllc1wiOiB7XG4gICAqICAgIFwiUHJvcGVydHkxX19hZGRlZFwiOiB7IC4uLiB9LFxuICAgKiAgICBcIlByb3BlcnR5Ml9fYWRkZWRcIjogeyAuLi4gfSxcbiAgICogfVxuICAgKlxuICAgKiBTYW1lIChidXQgaW4gcmV2ZXJzZSkgZm9yIGRlbGV0aW9ucy5cbiAgICovXG4gIGZ1bmN0aW9uIHB1c2hEb3duQ29tcGxldGVDaGFuZ2VzKHVwZGF0ZTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4pIHtcbiAgICBmb3IgKGNvbnN0IFtjYXRlZ29yeSwgZW50cmllc10gb2YgT2JqZWN0LmVudHJpZXModXBkYXRlKSkge1xuICAgICAgY29uc3QgYWRkZWRLZXkgPSBpc0FkZGVkKGNhdGVnb3J5KTtcbiAgICAgIGlmIChhZGRlZEtleSkge1xuICAgICAgICBkZWxldGUgdXBkYXRlW2NhdGVnb3J5XTtcbiAgICAgICAgdXBkYXRlW2FkZGVkS2V5XSA9IHN1ZmZpeEtleXMoJ19fYWRkZWQnLCBlbnRyaWVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsZXRlZEtleSA9IGlzRGVsZXRlZChjYXRlZ29yeSk7XG4gICAgICBpZiAoZGVsZXRlZEtleSkge1xuICAgICAgICBkZWxldGUgdXBkYXRlW2NhdGVnb3J5XTtcbiAgICAgICAgdXBkYXRlW2RlbGV0ZWRLZXldID0gc3VmZml4S2V5cygnX19kZWxldGVkJywgZW50cmllcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNEZWxldGVkKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGlzU3VmZml4KGtleSwgJ19fZGVsZXRlZCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNBZGRlZChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBpc1N1ZmZpeChrZXksICdfX2FkZGVkJyk7XG4gIH1cblxuICBmdW5jdGlvbiBpc1N1ZmZpeChrZXk6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpIHtcbiAgICBjb25zdCBpbmRleCA9IGtleS5pbmRleE9mKHN1ZmZpeCk7XG4gICAgcmV0dXJuIGluZGV4ID09PSAtMSA/IHVuZGVmaW5lZCA6IGtleS5zbGljZSgwLCBpbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiBzdWZmaXhLZXlzKHN1ZmZpeDogc3RyaW5nLCB4czogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHhzKSkge1xuICAgICAgcmV0W2tleSArIHN1ZmZpeF0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc2NyaWJlQ2hhbmdlcyhuYW1lc3BhY2U6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHVwZGF0ZTogYW55KSB7XG4gICAgY29uc3QgY2hhbmdlcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBjb25zdCBhZGRlZCA9IGlzQWRkZWQocHJlZml4KTtcbiAgICBpZiAoYWRkZWQpIHtcbiAgICAgIGNoYW5nZXMucHVzaChgKiAke25hbWVzcGFjZX0gJHthZGRlZH0gKF9fYWRkZWRfXylgKTtcbiAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgIH1cblxuICAgIGNvbnN0IGRlbGV0ZWQgPSBpc0RlbGV0ZWQocHJlZml4KTtcbiAgICBpZiAoZGVsZXRlZCkge1xuICAgICAgY2hhbmdlcy5wdXNoKGAqICR7bmFtZXNwYWNlfSAke2RlbGV0ZWR9IChfX2RlbGV0ZWRfXylgKTtcbiAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YodXBkYXRlKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBjaGFuZ2UgZm9yICR7bmFtZXNwYWNlfS4ke3ByZWZpeH0gJHtKU09OLnN0cmluZ2lmeSh1cGRhdGUpfWApO1xuICAgIH1cblxuICAgIGlmICgnX19vbGQnIGluIHVwZGF0ZSAmJiAnX19uZXcnIGluIHVwZGF0ZSkge1xuICAgICAgY2hhbmdlcy5wdXNoKGAqICR7bmFtZXNwYWNlfSAke3ByZWZpeH0gKF9fY2hhbmdlZF9fKWApO1xuICAgICAgY2hhbmdlcy5wdXNoKGAgICogT2xkOiAke3VwZGF0ZS5fX29sZH1gKTtcbiAgICAgIGNoYW5nZXMucHVzaChgICAqIE5ldzogJHt1cGRhdGUuX19uZXd9YCk7XG4gICAgICByZXR1cm4gY2hhbmdlcztcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGUpKSB7XG4gICAgICBjaGFuZ2VzLnB1c2goYCogJHtuYW1lc3BhY2V9ICR7cHJlZml4fSAoX19jaGFuZ2VkX18pYCk7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHVwZGF0ZSkge1xuICAgICAgICBpZiAoZW50cnkubGVuZ3RoID09PSAxICYmIGVudHJ5WzBdID09PSAnICcpIHtcbiAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhpcyBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyB1bmNoYW5nZWRcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGFycmF5IGRpZmYgZW50cnk6ICR7SlNPTi5zdHJpbmdpZnkoZW50cnkpfWApO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZW50cnlbMF0pIHtcbiAgICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgIGNoYW5nZXMucHVzaChgICAqIEFkZGVkICR7ZW50cnlbMV19YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU29tZXRoaW5nIGF3a3dhcmQgaGFwcGVuZWQ6ICR7ZW50cnlbMV19IHdhcyBkZWxldGVkIGZyb20gJHtuYW1lc3BhY2V9ICR7cHJlZml4fSFgKTtcbiAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgIC8vIFRoaXMgZW50cnkgaXMgXCJjb250ZXh0XCJcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgYXJyYXkgZGlmZiBlbnRyeTogJHtKU09OLnN0cmluZ2lmeShlbnRyeSl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModXBkYXRlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBkZXNjcmliZUNoYW5nZXMobmFtZXNwYWNlLCBgJHtwcmVmaXh9LiR7a2V5fWAsIHVwZGF0ZVtrZXldKSkge1xuICAgICAgICAgIGNoYW5nZXMucHVzaChjaGFuZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZXM7XG4gIH1cbn1cblxubWFpbigpLmNhdGNoKGUgPT4ge1xuICBwcm9jZXNzLnN0ZGVyci53cml0ZShlLnN0YWNrKTtcbiAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ1xcbicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59KTtcbiJdfQ==
{
"name": "@aws-cdk/cfnspec",
"description": "The CloudFormation resource specification used by @aws-cdk packages",
"version": "2.77.0-alpha.0",
"version": "2.78.0-alpha.0",
"scripts": {

@@ -9,3 +9,3 @@ "update": "cdk-build && /bin/bash build-tools/update.sh",

"rejected": "node build-tools/report-issues.js spec-source/specification/000_cfn/000_official/ rejected",
"build": "cdk-build && node build-tools/build",
"build": "cdk-build && ts-node --preferTsExts build-tools/build.ts",
"watch": "cdk-watch",

@@ -34,4 +34,4 @@ "lint": "cdk-lint",

"devDependencies": {
"@aws-cdk/cdk-build-tools": "2.77.0-alpha.0",
"@aws-cdk/pkglint": "2.77.0-alpha.0",
"@aws-cdk/cdk-build-tools": "2.78.0-alpha.0",
"@aws-cdk/pkglint": "2.78.0-alpha.0",
"@types/fs-extra": "^9.0.13",

@@ -43,3 +43,4 @@ "@types/jest": "^29.5.0",

"json-diff": "^0.10.0",
"sort-json": "^2.0.1"
"sort-json": "^2.0.1",
"ts-node": "^10.9.1"
},

@@ -46,0 +47,0 @@ "dependencies": {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc