UNPKG

projen

Version:

CDK for software projects

141 lines (137 loc) • 16.3 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.AwsCdkConstructLibrary = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const fs = __importStar(require("fs")); const path = __importStar(require("path")); const auto_discover_1 = require("./auto-discover"); const awscdk_deps_js_1 = require("./awscdk-deps-js"); const integ_runner_1 = require("./integ-runner"); const cdk_1 = require("../cdk"); const component_1 = require("../component"); const dependencies_1 = require("../dependencies"); const fs_1 = require("../util/fs"); /** * AWS CDK construct library project * * A multi-language (jsii) construct library which vends constructs designed to * use within the AWS CDK with a friendly workflow and automatic publishing to * the construct catalog. * * @pjid awscdk-construct */ class AwsCdkConstructLibrary extends cdk_1.ConstructLibrary { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.awscdk.AwsCdkConstructLibrary", version: "0.104.8" }; cdkDeps; constructor(options) { super({ workflowNodeVersion: options.minNodeVersion ?? "lts/*", ...options, sampleCode: false, }); this.cdkDeps = new awscdk_deps_js_1.AwsCdkDepsJs(this, { // since this we are a library, dependencies should be added a peers dependencyType: dependencies_1.DependencyType.PEER, ...options, }); new auto_discover_1.AutoDiscover(this, { srcdir: this.srcdir, testdir: this.testdir, lambdaOptions: options.lambdaOptions, tsconfigPath: this.tsconfigDev.fileName, cdkDeps: this.cdkDeps, lambdaAutoDiscover: options.lambdaAutoDiscover ?? true, edgeLambdaAutoDiscover: options.edgeLambdaAutoDiscover ?? true, singletonLambdaAutoDiscover: options.singletonLambdaAutoDiscover ?? true, lambdaExtensionAutoDiscover: options.lambdaExtensionAutoDiscover ?? true, integrationTestAutoDiscover: options.integrationTestAutoDiscover ?? true, }); if (options.experimentalIntegRunner) { new integ_runner_1.IntegRunner(this); } if (options.sampleCode ?? true) { new SampleCode(this); } } /** * The target CDK version for this library. */ get cdkVersion() { return this.cdkDeps.cdkVersion; } } exports.AwsCdkConstructLibrary = AwsCdkConstructLibrary; class SampleCode extends component_1.Component { library; constructor(project) { super(project); this.library = project; } synthesize() { const outdir = this.project.outdir; const srcdir = path.join(outdir, this.library.srcdir); // Don't pollute a source directory the user has already worked on. if ((0, fs_1.dirContainsFile)(srcdir, ".ts")) { return; } const srcCode = `import { Construct } from 'constructs'; export class MyConstruct extends Construct { constructor(scope: Construct, id: string) { super(scope, id); // define resources here... } }`; fs.mkdirSync(srcdir, { recursive: true }); fs.writeFileSync(path.join(srcdir, "index.ts"), srcCode); const testdir = path.join(outdir, this.library.testdir); if (!this.library.jest || (0, fs_1.dirContainsFile)(testdir, ".ts")) { return; } const testCode = `import { App, Stack } from 'aws-cdk-lib'; import { Template } from 'aws-cdk-lib/assertions'; import { MyConstruct } from '../${this.library.srcdir}'; test('Snapshot', () => { const app = new App(); const stack = new Stack(app, 'test'); new MyConstruct(stack, 'MyConstruct'); const template = Template.fromStack(stack); expect(template.toJSON()).toMatchSnapshot(); });`; fs.mkdirSync(testdir, { recursive: true }); fs.writeFileSync(path.join(testdir, "my-construct.test.ts"), testCode); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2RrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYXdzY2RrLWNvbnN0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtREFBK0M7QUFFL0MscURBQWdEO0FBQ2hELGlEQUE2QztBQUc3QyxnQ0FBMEM7QUFDMUMsNENBQXlDO0FBQ3pDLGtEQUFpRDtBQUNqRCxtQ0FBNkM7QUFvRTdDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSxzQkFBZ0I7O0lBQzFDLE9BQU8sQ0FBYTtJQUVwQyxZQUFZLE9BQXNDO1FBQ2hELEtBQUssQ0FBQztZQUNKLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxjQUFjLElBQUksT0FBTztZQUN0RCxHQUFHLE9BQU87WUFDVixVQUFVLEVBQUUsS0FBSztTQUNsQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksNkJBQVksQ0FBQyxJQUFJLEVBQUU7WUFDcEMsb0VBQW9FO1lBQ3BFLGNBQWMsRUFBRSw2QkFBYyxDQUFDLElBQUk7WUFDbkMsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsSUFBSSw0QkFBWSxDQUFDLElBQUksRUFBRTtZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtZQUNwQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRO1lBQ3ZDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixrQkFBa0IsRUFBRSxPQUFPLENBQUMsa0JBQWtCLElBQUksSUFBSTtZQUN0RCxzQkFBc0IsRUFBRSxPQUFPLENBQUMsc0JBQXNCLElBQUksSUFBSTtZQUM5RCwyQkFBMkIsRUFBRSxPQUFPLENBQUMsMkJBQTJCLElBQUksSUFBSTtZQUN4RSwyQkFBMkIsRUFBRSxPQUFPLENBQUMsMkJBQTJCLElBQUksSUFBSTtZQUN4RSwyQkFBMkIsRUFBRSxPQUFPLENBQUMsMkJBQTJCLElBQUksSUFBSTtTQUN6RSxDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ3BDLElBQUksMEJBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQy9CLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNqQyxDQUFDOztBQTNDSCx3REE0Q0M7QUFFRCxNQUFNLFVBQVcsU0FBUSxxQkFBUztJQUNmLE9BQU8sQ0FBeUI7SUFFakQsWUFBWSxPQUErQjtRQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRU0sVUFBVTtRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEQsbUVBQW1FO1FBQ25FLElBQUksSUFBQSxvQkFBZSxFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25DLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUc7Ozs7Ozs7O0VBUWxCLENBQUM7UUFFQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFekQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBQSxvQkFBZSxFQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUc7O2tDQUVhLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTs7Ozs7Ozs7O0lBU2pELENBQUM7UUFFRCxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEF1dG9EaXNjb3ZlciB9IGZyb20gXCIuL2F1dG8tZGlzY292ZXJcIjtcbmltcG9ydCB0eXBlIHsgQXdzQ2RrRGVwcywgQXdzQ2RrRGVwc0NvbW1vbk9wdGlvbnMgfSBmcm9tIFwiLi9hd3NjZGstZGVwc1wiO1xuaW1wb3J0IHsgQXdzQ2RrRGVwc0pzIH0gZnJvbSBcIi4vYXdzY2RrLWRlcHMtanNcIjtcbmltcG9ydCB7IEludGVnUnVubmVyIH0gZnJvbSBcIi4vaW50ZWctcnVubmVyXCI7XG5pbXBvcnQgdHlwZSB7IExhbWJkYUZ1bmN0aW9uQ29tbW9uT3B0aW9ucyB9IGZyb20gXCIuL2xhbWJkYS1mdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyB9IGZyb20gXCIuLi9jZGtcIjtcbmltcG9ydCB7IENvbnN0cnVjdExpYnJhcnkgfSBmcm9tIFwiLi4vY2RrXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IGRpckNvbnRhaW5zRmlsZSB9IGZyb20gXCIuLi91dGlsL2ZzXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEF3c0Nka0NvbnN0cnVjdExpYnJhcnlgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zXG4gIGV4dGVuZHMgQ29uc3RydWN0TGlicmFyeU9wdGlvbnMsIEF3c0Nka0RlcHNDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgYWRkcyBhbiBgYXdzX2xhbWJkYS5GdW5jdGlvbmAgZm9yIGVhY2ggYC5sYW1iZGEudHNgIGhhbmRsZXJcbiAgICogaW4geW91ciBzb3VyY2UgdHJlZS4gSWYgdGhpcyBpcyBkaXNhYmxlZCwgeW91IGVpdGhlciBuZWVkIHRvIGV4cGxpY2l0bHlcbiAgICogY2FsbCBgYXdzX2xhbWJkYS5GdW5jdGlvbi5hdXRvRGlzY292ZXIoKWAgb3IgZGVmaW5lIGEgYG5ld1xuICAgKiBhd3NfbGFtYmRhLkZ1bmN0aW9uKClgIGZvciBlYWNoIGhhbmRsZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYUF1dG9EaXNjb3Zlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgYWRkcyBhbiBgY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uYCBmb3IgZWFjaFxuICAgKiBgLmVkZ2UtbGFtYmRhLnRzYCBoYW5kbGVyIGluIHlvdXIgc291cmNlIHRyZWUuIElmIHRoaXMgaXMgZGlzYWJsZWQsIHlvdSBjYW5cbiAgICogbWFudWFsbHkgYWRkIGFuIGBhd3NjZGsuQXV0b0Rpc2NvdmVyYCBjb21wb25lbnQgdG8geW91ciBwcm9qZWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlZGdlTGFtYmRhQXV0b0Rpc2NvdmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBhZGRzIGFuIGBhd3NjZGsuU2luZ2xldG9uRnVuY3Rpb25gIGZvciBlYWNoXG4gICAqIGAuc2luZ2xldG9uLWxhbWJkYS50c2AgaGFuZGxlciBpbiB5b3VyIHNvdXJjZSB0cmVlLiBJZiB0aGlzIGlzIGRpc2FibGVkLCB5b3UgY2FuXG4gICAqIG1hbnVhbGx5IGFkZCBhbiBgYXdzY2RrLkF1dG9EaXNjb3ZlcmAgY29tcG9uZW50IHRvIHlvdXIgcHJvamVjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2luZ2xldG9uTGFtYmRhQXV0b0Rpc2NvdmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBhZGRzIGFuIGBhd3NjZGsuTGFtYmRhRXh0ZW5zaW9uYCBmb3IgZWFjaCBgLmxhbWJkYS1leHRlbnNpb24udHNgXG4gICAqIGVudHJ5cG9pbnQgaW4geW91ciBzb3VyY2UgdHJlZS4gSWYgdGhpcyBpcyBkaXNhYmxlZCwgeW91IGNhbiBtYW51YWxseSBhZGQgYW5cbiAgICogYGF3c2Nkay5BdXRvRGlzY292ZXJgIGNvbXBvbmVudCB0byB5b3VyIHByb2plY3RcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhRXh0ZW5zaW9uQXV0b0Rpc2NvdmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBkaXNjb3ZlcnMgYW5kIGNyZWF0ZXMgaW50ZWdyYXRpb24gdGVzdHMgZm9yIGVhY2ggYC5pbnRlZy50c2BcbiAgICogZmlsZSB1bmRlciB5b3VyIHRlc3QgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBpbnRlZ3JhdGlvblRlc3RBdXRvRGlzY292ZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIHRoZSBBV1MgQ0RLIGludGVnLXJ1bm5lci5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcmVhZG9ubHkgZXhwZXJpbWVudGFsSW50ZWdSdW5uZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb21tb24gb3B0aW9ucyBmb3IgYWxsIEFXUyBMYW1iZGEgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhT3B0aW9ucz86IExhbWJkYUZ1bmN0aW9uQ29tbW9uT3B0aW9ucztcbn1cblxuLyoqXG4gKiBBV1MgQ0RLIGNvbnN0cnVjdCBsaWJyYXJ5IHByb2plY3RcbiAqXG4gKiBBIG11bHRpLWxhbmd1YWdlIChqc2lpKSBjb25zdHJ1Y3QgbGlicmFyeSB3aGljaCB2ZW5kcyBjb25zdHJ1Y3RzIGRlc2lnbmVkIHRvXG4gKiB1c2Ugd2l0aGluIHRoZSBBV1MgQ0RLIHdpdGggYSBmcmllbmRseSB3b3JrZmxvdyBhbmQgYXV0b21hdGljIHB1Ymxpc2hpbmcgdG9cbiAqIHRoZSBjb25zdHJ1Y3QgY2F0YWxvZy5cbiAqXG4gKiBAcGppZCBhd3NjZGstY29uc3RydWN0XG4gKi9cbmV4cG9ydCBjbGFzcyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5IGV4dGVuZHMgQ29uc3RydWN0TGlicmFyeSB7XG4gIHB1YmxpYyByZWFkb25seSBjZGtEZXBzOiBBd3NDZGtEZXBzO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEF3c0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgd29ya2Zsb3dOb2RlVmVyc2lvbjogb3B0aW9ucy5taW5Ob2RlVmVyc2lvbiA/PyBcImx0cy8qXCIsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNka0RlcHMgPSBuZXcgQXdzQ2RrRGVwc0pzKHRoaXMsIHtcbiAgICAgIC8vIHNpbmNlIHRoaXMgd2UgYXJlIGEgbGlicmFyeSwgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBhZGRlZCBhIHBlZXJzXG4gICAgICBkZXBlbmRlbmN5VHlwZTogRGVwZW5kZW5jeVR5cGUuUEVFUixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICBuZXcgQXV0b0Rpc2NvdmVyKHRoaXMsIHtcbiAgICAgIHNyY2RpcjogdGhpcy5zcmNkaXIsXG4gICAgICB0ZXN0ZGlyOiB0aGlzLnRlc3RkaXIsXG4gICAgICBsYW1iZGFPcHRpb25zOiBvcHRpb25zLmxhbWJkYU9wdGlvbnMsXG4gICAgICB0c2NvbmZpZ1BhdGg6IHRoaXMudHNjb25maWdEZXYuZmlsZU5hbWUsXG4gICAgICBjZGtEZXBzOiB0aGlzLmNka0RlcHMsXG4gICAgICBsYW1iZGFBdXRvRGlzY292ZXI6IG9wdGlvbnMubGFtYmRhQXV0b0Rpc2NvdmVyID8/IHRydWUsXG4gICAgICBlZGdlTGFtYmRhQXV0b0Rpc2NvdmVyOiBvcHRpb25zLmVkZ2VMYW1iZGFBdXRvRGlzY292ZXIgPz8gdHJ1ZSxcbiAgICAgIHNpbmdsZXRvbkxhbWJkYUF1dG9EaXNjb3Zlcjogb3B0aW9ucy5zaW5nbGV0b25MYW1iZGFBdXRvRGlzY292ZXIgPz8gdHJ1ZSxcbiAgICAgIGxhbWJkYUV4dGVuc2lvbkF1dG9EaXNjb3Zlcjogb3B0aW9ucy5sYW1iZGFFeHRlbnNpb25BdXRvRGlzY292ZXIgPz8gdHJ1ZSxcbiAgICAgIGludGVncmF0aW9uVGVzdEF1dG9EaXNjb3Zlcjogb3B0aW9ucy5pbnRlZ3JhdGlvblRlc3RBdXRvRGlzY292ZXIgPz8gdHJ1ZSxcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zLmV4cGVyaW1lbnRhbEludGVnUnVubmVyKSB7XG4gICAgICBuZXcgSW50ZWdSdW5uZXIodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2FtcGxlQ29kZSA/PyB0cnVlKSB7XG4gICAgICBuZXcgU2FtcGxlQ29kZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRhcmdldCBDREsgdmVyc2lvbiBmb3IgdGhpcyBsaWJyYXJ5LlxuICAgKi9cbiAgcHVibGljIGdldCBjZGtWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNka0RlcHMuY2RrVmVyc2lvbjtcbiAgfVxufVxuXG5jbGFzcyBTYW1wbGVDb2RlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWJyYXJ5OiBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5O1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IEF3c0Nka0NvbnN0cnVjdExpYnJhcnkpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgICB0aGlzLmxpYnJhcnkgPSBwcm9qZWN0O1xuICB9XG5cbiAgcHVibGljIHN5bnRoZXNpemUoKSB7XG4gICAgY29uc3Qgb3V0ZGlyID0gdGhpcy5wcm9qZWN0Lm91dGRpcjtcbiAgICBjb25zdCBzcmNkaXIgPSBwYXRoLmpvaW4ob3V0ZGlyLCB0aGlzLmxpYnJhcnkuc3JjZGlyKTtcblxuICAgIC8vIERvbid0IHBvbGx1dGUgYSBzb3VyY2UgZGlyZWN0b3J5IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHdvcmtlZCBvbi5cbiAgICBpZiAoZGlyQ29udGFpbnNGaWxlKHNyY2RpciwgXCIudHNcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzcmNDb2RlID0gYGltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgY2xhc3MgTXlDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIGRlZmluZSByZXNvdXJjZXMgaGVyZS4uLlxuICB9XG59YDtcblxuICAgIGZzLm1rZGlyU3luYyhzcmNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHNyY2RpciwgXCJpbmRleC50c1wiKSwgc3JjQ29kZSk7XG5cbiAgICBjb25zdCB0ZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgdGhpcy5saWJyYXJ5LnRlc3RkaXIpO1xuICAgIGlmICghdGhpcy5saWJyYXJ5Lmplc3QgfHwgZGlyQ29udGFpbnNGaWxlKHRlc3RkaXIsIFwiLnRzXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGVzdENvZGUgPSBgaW1wb3J0IHsgQXBwLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBNeUNvbnN0cnVjdCB9IGZyb20gJy4uLyR7dGhpcy5saWJyYXJ5LnNyY2Rpcn0nO1xuXG50ZXN0KCdTbmFwc2hvdCcsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IEFwcCgpO1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICd0ZXN0Jyk7XG4gIG5ldyBNeUNvbnN0cnVjdChzdGFjaywgJ015Q29uc3RydWN0Jyk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICBleHBlY3QodGVtcGxhdGUudG9KU09OKCkpLnRvTWF0Y2hTbmFwc2hvdCgpO1xufSk7YDtcblxuICAgIGZzLm1rZGlyU3luYyh0ZXN0ZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbih0ZXN0ZGlyLCBcIm15LWNvbnN0cnVjdC50ZXN0LnRzXCIpLCB0ZXN0Q29kZSk7XG4gIH1cbn1cbiJdfQ==