UNPKG

projen

Version:

CDK for software projects

142 lines • 22.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TypeScriptRunner = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const script_runner_1 = require("../script-runner"); const recreate_1 = require("../util/recreate"); /** * The runner used to execute TypeScript files. * * A runner is a {@link FutureComponent}: create it standalone (e.g. via one of * the static factories) and it is attached to a project by the component that * consumes it. Use {@link TypeScriptRunner.copy} to derive a new runner with * adjusted options. */ class TypeScriptRunner extends script_runner_1.ScriptRunner { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptRunner", version: "0.103.12" }; /** * Use ts-node to execute TypeScript files. */ static tsNode(options = {}) { return new TypeScriptRunner("ts-node", options); } /** * Use tsx to execute TypeScript files. * * tsx is a fast TypeScript runtime that does not perform type-checking. * You may opt-in to an explicit type-checking step before the script is run. */ static tsx(options = {}) { return new TypeScriptRunner("tsx", options); } /** * Use the native Node.js TypeScript support. * * Requires Node.js 22.18.0 or later. * The script must use ESM style imports (no directories, include file endings, etc.). * * Named `nodejs` (not `node`) because a runner is a construct, and `node` is * reserved by `constructs.Construct` for the construct's tree node. */ static nodejs(options = {}) { if (options.transformTypes && options.experimentalTransformTypes) { throw new Error("Only one of 'transformTypes' or 'experimentalTransformTypes' may be specified, not both. Remove the deprecated 'experimentalTransformTypes'."); } return new TypeScriptRunner("node", options); } _kind; _options; constructor(kind, options) { super(); this._kind = kind; this._options = options; } /** * Returns a new (detached) runner of the same kind, with `overrides` merged * over the current options. * * Safe to call while detached. */ copy(overrides = {}) { return (0, recreate_1.recreate)(this, this._kind, { ...this._options, ...overrides }); } /** * Produce the {@link RunScriptConfig} to run the given entrypoint with this * runner. */ configFor(entrypoint) { switch (this._kind) { case "ts-node": return this.renderTsNode(entrypoint); case "tsx": return this.renderTsx(entrypoint); case "node": return this.renderNode(entrypoint); } } renderTsNode(entrypoint) { const typeCheck = this._options.typeCheck ?? true; const swc = this._options.swc ?? false; const command = ["ts-node"]; const dependencies = [{ name: "ts-node" }]; if (swc) { dependencies.push({ name: "@swc/core" }); command.push("--swc"); } if (!typeCheck) { command.push("--transpileOnly"); } if (this._options.tsconfig) { command.push("--project", this._options.tsconfig); } // command.push("--prefer-ts-exts"); return { dependencies, steps: [{ execArgs: [...command, entrypoint] }], }; } renderTsx(entrypoint) { const typeCheck = this._options.typeCheck ?? false; const command = ["tsx"]; const steps = []; const dependencies = [{ name: "tsx" }]; if (this._options.tsconfig) { command.push("--tsconfig", this._options.tsconfig); } if (typeCheck) { steps.push(typeCheckStep(this._options.tsconfig)); } steps.push({ execArgs: [...command, entrypoint] }); return { dependencies, steps }; } renderNode(entrypoint) { const typeCheck = this._options.typeCheck ?? false; const command = ["node"]; const steps = []; const dependencies = []; if (this._options.transformTypes ?? false) { dependencies.push({ name: "amaro" }); command.push("--enable-source-maps"); command.push("--import=amaro/transform"); } else if (this._options.experimentalTransformTypes ?? false) { command.push("--experimental-transform-types"); command.push("--disable-warning=ExperimentalWarning"); } if (typeCheck) { steps.push(typeCheckStep(this._options.tsconfig)); dependencies.push({ name: "typescript" }); } steps.push({ execArgs: [...command, entrypoint] }); return { dependencies, steps }; } } exports.TypeScriptRunner = TypeScriptRunner; function typeCheckStep(tsconfig) { const args = ["tsc", "--noEmit"]; if (tsconfig) { args.push("-p", tsconfig); } return { execArgs: args, name: "typecheck" }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXNjcmlwdC90eXBlc2NyaXB0LXJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0Esb0RBQXNFO0FBRXRFLCtDQUE0QztBQXNJNUM7Ozs7Ozs7R0FPRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsNEJBQVk7O0lBQ2hEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUErQixFQUFFO1FBQ3BELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUE0QixFQUFFO1FBQzlDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUE2QixFQUFFO1FBQ2xELElBQUksT0FBTyxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUNqRSxNQUFNLElBQUksS0FBSyxDQUNiLDhJQUE4SSxDQUMvSSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVnQixLQUFLLENBQWE7SUFDbEIsUUFBUSxDQUFjO0lBRXZDLFlBQW9CLElBQWdCLEVBQUUsT0FBb0I7UUFDeEQsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxJQUFJLENBQUMsWUFBcUMsRUFBRTtRQUNqRCxPQUFPLElBQUEsbUJBQVEsRUFBQyxJ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LFFBQVEsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGVwZW5kZW5jeVJlcXVlc3QgfSBmcm9tIFwiLi4vZGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgeyB0eXBlIFJ1blNjcmlwdENvbmZpZywgU2NyaXB0UnVubmVyIH0gZnJvbSBcIi4uL3NjcmlwdC1ydW5uZXJcIjtcbmltcG9ydCB0eXBlIHsgVGFza1N0ZXAgfSBmcm9tIFwiLi4vdGFzay1tb2RlbFwiO1xuaW1wb3J0IHsgcmVjcmVhdGUgfSBmcm9tIFwiLi4vdXRpbC9yZWNyZWF0ZVwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSB0cy1ub2RlIHJ1bm5lci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUc05vZGVSdW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdHlwZS1jaGVjayB0aGUgc2NyaXB0IGR1cmluZyBleGVjdXRpbmcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL1R5cGVTdHJvbmcvdHMtbm9kZSN0eXBlY2hlY2tcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZUNoZWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgdHNjb25maWcgZmlsZSB0byB1c2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHMtbm9kZSBkZWZhdWx0IGRpc2NvdmVyeVxuICAgKi9cbiAgcmVhZG9ubHkgdHNjb25maWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIFNXQyBmb3IgdHJhbnNwaWxhdGlvbi5cbiAgICpcbiAgICogVGhpcyB3aWxsIGRpc2FibGUgdHlwZS1jaGVja2luZy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vVHlwZVN0cm9uZy90cy1ub2RlI3N3Y1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3djPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgdHN4IHJ1bm5lci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUc3hSdW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdHlwZS1jaGVjayB0aGUgZW50cnlwb2ludCBiZWZvcmUgZXhlY3V0aW5nLlxuICAgKlxuICAgKiBCZWNhdXNlIHRzeCBkb2VzIG5vdCB0eXBlIGNoZWNrIGNvZGUsIHlvdSBtYXkgd2FudCB0byBlbmFibGUgdGhpcyBmb3IgYWRkaXRpb25hbCB0eXBlIHNhZmV0eS5cbiAgICogV2hlbiBlbmFibGVkLCBydW5zIGB0c2MgLS1ub0VtaXRgLCB1c2luZyB0aGUgcHJvdmlkZWQgdHNjb25maWcuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB0eXBlQ2hlY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSB0c2NvbmZpZyBmaWxlIHRvIHVzZS5cbiAgICogV2hlbiBzcGVjaWZpZWQsIHdpbGwgdXNlIHRoaXMgdHNjb25maWcgZm9yIHJ1bm5pbmcgdHN4IGFuZCB0eXBlLWNoZWNraW5nIChpZiBlbmFibGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0c3gvdHlwZXNjcmlwdCBkZWZhdWx0IGRpc2NvdmVyeVxuICAgKi9cbiAgcmVhZG9ubHkgdHNjb25maWc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIG5hdGl2ZSBOb2RlLmpzIFR5cGVTY3JpcHQgcnVubmVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVSdW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdHlwZS1jaGVjayB0aGUgZW50cnlwb2ludCBiZWZvcmUgZXhlY3V0aW5nLlxuICAgKlxuICAgKiBCZWNhdXNlIHRoZSBuYXRpdmUgTm9kZS5qcyBUeXBlU2NyaXB0IGRvZXMgbm90IHR5cGUgY2hlY2sgY29kZSxcbiAgICogeW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZvciBhZGRpdGlvbmFsIHR5cGUgc2FmZXR5LlxuICAgKiBXaGVuIGVuYWJsZWQsIHJ1bnMgYHRzYyAtLW5vRW1pdGAsIHVzaW5nIHRoZSBwcm92aWRlZCB0c2NvbmZpZy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHRzY29uZmlnIGZpbGUgZm9yIHR5cGUtY2hlY2tpbmcuXG4gICAqIFdoZW4gc3BlY2lmaWVkLCB3aWxsIHVzZSB0aGlzIHRzY29uZmlnIGZvciB0eXBlLWNoZWNraW5nIChpZiBlbmFibGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0eXBlc2NyaXB0IGRlZmF1bHQgZGlzY292ZXJ5XG4gICAqL1xuICByZWFkb25seSB0c2NvbmZpZz86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbHNvIGVuYWJsZSBgLS1leHBlcmltZW50YWwtdHJhbnNmb3JtLXR5cGVzYC5cbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBmbGFnIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBOb2RlLmpzIDI2LiBVc2UgYHRyYW5zZm9ybVR5cGVzYCBpbnN0ZWFkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhwZXJpbWVudGFsVHJhbnNmb3JtVHlwZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB0cmFuc2Zvcm1hdGlvbiBvZiBUeXBlU2NyaXB0LW9ubHkgc3ludGF4IChlLmcuIGVudW1zLCBuYW1lc3BhY2VzKS5cbiAgICpcbiAgICogVXNlcyBgYW1hcm9gICh0aGUgVHlwZVNjcmlwdCB0cmFuc2Zvcm1lciB1c2VkIGludGVybmFsbHkgYnkgTm9kZS5qcykgYXMgYW5cbiAgICogZXh0ZXJuYWwgbG9hZGVyIHZpYSBgLS1pbXBvcnQ9YW1hcm8vdHJhbnNmb3JtYC4gQWRkcyBhIGRlcGVuZGVuY3kgb24gdGhlXG4gICAqIGBhbWFyb2AgcGFja2FnZSBhbmQgZW5hYmxlcyBgLS1lbmFibGUtc291cmNlLW1hcHNgIHRvIHByZXNlcnZlIGFjY3VyYXRlXG4gICAqIHN0YWNrIHRyYWNlcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL2FtYXJvXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB0cmFuc2Zvcm1UeXBlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgdGhhdCBjYW4gYmUgYWRqdXN0ZWQgb24gYW55IHtAbGluayBUeXBlU2NyaXB0UnVubmVyfSwgcmVnYXJkbGVzc1xuICogb2YgaXRzIHJ1bnRpbWUuXG4gKlxuICogVGhpcyBpcyB0aGUgb3ZlcnJpZGUgdHlwZSBmb3Ige0BsaW5rIFR5cGVTY3JpcHRSdW5uZXIuY29weX0uIFJ1bnRpbWUtc3BlY2lmaWNcbiAqIGNyZWF0aW9uIG9wdGlvbnMgKHN1Y2ggYXMgYHN3Y2AgZm9yIHRzLW5vZGUpIGFyZSBzZXQgdmlhIHRoZSBzdGF0aWMgZmFjdG9yaWVzXG4gKiBhbmQgYXJlIHByZXNlcnZlZCAtIGJ1dCBjYW5ub3QgYmUgY2hhbmdlZCAtIGJ5IGBjb3B5YCwgc28gYSBjb3B5IGNhbiBuZXZlclxuICogY2hhbmdlIHRoZSBydW50aW1lIG9mIGEgcnVubmVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVTY3JpcHRSdW5uZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdHlwZS1jaGVjayB0aGUgZW50cnlwb2ludC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGVDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHRzY29uZmlnIGZpbGUgdG8gdXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgdHNjb25maWc/OiBzdHJpbmc7XG59XG5cbnR5cGUgUnVubmVyS2luZCA9IFwidHMtbm9kZVwiIHwgXCJ0c3hcIiB8IFwibm9kZVwiO1xuXG4vKipcbiAqIFRoZSBmdWxsLCBpbnRlcm5hbCBvcHRpb24gc2V0IGZvciBhIHJ1bm5lcjogdGhlIGNvbW1vbiBvcHRpb25zIHBsdXMgdGhlXG4gKiBydW50aW1lLXNwZWNpZmljIGNyZWF0aW9uIG9wdGlvbnMuIE5ldmVyIGV4cG9zZWQgcHVibGljbHkuXG4gKi9cbmludGVyZmFjZSBSdW5uZXJTdGF0ZSBleHRlbmRzIFR5cGVTY3JpcHRSdW5uZXJPcHRpb25zIHtcbiAgcmVhZG9ubHkgc3djPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZXhwZXJpbWVudGFsVHJhbnNmb3JtVHlwZXM/OiBib29sZWFuO1xuICByZWFkb25seSB0cmFuc2Zvcm1UeXBlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHJ1bm5lciB1c2VkIHRvIGV4ZWN1dGUgVHlwZVNjcmlwdCBmaWxlcy5cbiAqXG4gKiBBIHJ1bm5lciBpcyBhIHtAbGluayBGdXR1cmVDb21wb25lbnR9OiBjcmVhdGUgaXQgc3RhbmRhbG9uZSAoZS5nLiB2aWEgb25lIG9mXG4gKiB0aGUgc3RhdGljIGZhY3RvcmllcykgYW5kIGl0IGlzIGF0dGFjaGVkIHRvIGEgcHJvamVjdCBieSB0aGUgY29tcG9uZW50IHRoYXRcbiAqIGNvbnN1bWVzIGl0LiBVc2Uge0BsaW5rIFR5cGVTY3JpcHRSdW5uZXIuY29weX0gdG8gZGVyaXZlIGEgbmV3IHJ1bm5lciB3aXRoXG4gKiBhZGp1c3RlZCBvcHRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgVHlwZVNjcmlwdFJ1bm5lciBleHRlbmRzIFNjcmlwdFJ1bm5lciB7XG4gIC8qKlxuICAgKiBVc2UgdHMtbm9kZSB0byBleGVjdXRlIFR5cGVTY3JpcHQgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRzTm9kZShvcHRpb25zOiBUc05vZGVSdW5uZXJPcHRpb25zID0ge30pOiBUeXBlU2NyaXB0UnVubmVyIHtcbiAgICByZXR1cm4gbmV3IFR5cGVTY3JpcHRSdW5uZXIoXCJ0cy1ub2RlXCIsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0c3ggdG8gZXhlY3V0ZSBUeXBlU2NyaXB0IGZpbGVzLlxuICAgKlxuICAgKiB0c3ggaXMgYSBmYXN0IFR5cGVTY3JpcHQgcnVudGltZSB0aGF0IGRvZXMgbm90IHBlcmZvcm0gdHlwZS1jaGVja2luZy5cbiAgICogWW91IG1heSBvcHQtaW4gdG8gYW4gZXhwbGljaXQgdHlwZS1jaGVja2luZyBzdGVwIGJlZm9yZSB0aGUgc2NyaXB0IGlzIHJ1bi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdHN4KG9wdGlvbnM6IFRzeFJ1bm5lck9wdGlvbnMgPSB7fSk6IFR5cGVTY3JpcHRSdW5uZXIge1xuICAgIHJldHVybiBuZXcgVHlwZVNjcmlwdFJ1bm5lcihcInRzeFwiLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhlIG5hdGl2ZSBOb2RlLmpzIFR5cGVTY3JpcHQgc3VwcG9ydC5cbiAgICpcbiAgICogUmVxdWlyZXMgTm9kZS5qcyAyMi4xOC4wIG9yIGxhdGVyLlxuICAgKiBUaGUgc2NyaXB0IG11c3QgdXNlIEVTTSBzdHlsZSBpbXBvcnRzIChubyBkaXJlY3RvcmllcywgaW5jbHVkZSBmaWxlIGVuZGluZ3MsIGV0Yy4pLlxuICAgKlxuICAgKiBOYW1lZCBgbm9kZWpzYCAobm90IGBub2RlYCkgYmVjYXVzZSBhIHJ1bm5lciBpcyBhIGNvbnN0cnVjdCwgYW5kIGBub2RlYCBpc1xuICAgKiByZXNlcnZlZCBieSBgY29uc3RydWN0cy5Db25zdHJ1Y3RgIGZvciB0aGUgY29uc3RydWN0J3MgdHJlZSBub2RlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBub2RlanMob3B0aW9uczogTm9kZVJ1bm5lck9wdGlvbnMgPSB7fSk6IFR5cGVTY3JpcHRSdW5uZXIge1xuICAgIGlmIChvcHRpb25zLnRyYW5zZm9ybVR5cGVzICYmIG9wdGlvbnMuZXhwZXJpbWVudGFsVHJhbnNmb3JtVHlwZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJPbmx5IG9uZSBvZiAndHJhbnNmb3JtVHlwZXMnIG9yICdleHBlcmltZW50YWxUcmFuc2Zvcm1UeXBlcycgbWF5IGJlIHNwZWNpZmllZCwgbm90IGJvdGguIFJlbW92ZSB0aGUgZGVwcmVjYXRlZCAnZXhwZXJpbWVudGFsVHJhbnNmb3JtVHlwZXMnLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUeXBlU2NyaXB0UnVubmVyKFwibm9kZVwiLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IFJ1bm5lcktpbmQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IFJ1bm5lclN0YXRlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3Ioa2luZDogUnVubmVyS2luZCwgb3B0aW9uczogUnVubmVyU3RhdGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgKGRldGFjaGVkKSBydW5uZXIgb2YgdGhlIHNhbWUga2luZCwgd2l0aCBgb3ZlcnJpZGVzYCBtZXJnZWRcbiAgICogb3ZlciB0aGUgY3VycmVudCBvcHRpb25zLlxuICAgKlxuICAgKiBTYWZlIHRvIGNhbGwgd2hpbGUgZGV0YWNoZWQuXG4gICAqL1xuICBwdWJsaWMgY29weShvdmVycmlkZXM6IFR5cGVTY3JpcHRSdW5uZXJPcHRpb25zID0ge30pOiBUeXBlU2NyaXB0UnVubmVyIHtcbiAgICByZXR1cm4gcmVjcmVhdGUodGhpcywgdGhpcy5fa2luZCwgeyAuLi50aGlzLl9vcHRpb25zLCAuLi5vdmVycmlkZXMgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvZHVjZSB0aGUge0BsaW5rIFJ1blNjcmlwdENvbmZpZ30gdG8gcnVuIHRoZSBnaXZlbiBlbnRyeXBvaW50IHdpdGggdGhpc1xuICAgKiBydW5uZXIuXG4gICAqL1xuICBwdWJsaWMgY29uZmlnRm9yKGVudHJ5cG9pbnQ6IHN0cmluZyk6IFJ1blNjcmlwdENvbmZpZyB7XG4gICAgc3dpdGNoICh0aGlzLl9raW5kKSB7XG4gICAgICBjYXNlIFwidHMtbm9kZVwiOlxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJUc05vZGUoZW50cnlwb2ludCk7XG4gICAgICBjYXNlIFwidHN4XCI6XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlclRzeChlbnRyeXBvaW50KTtcbiAgICAgIGNhc2UgXCJub2RlXCI6XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlck5vZGUoZW50cnlwb2ludCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJUc05vZGUoZW50cnlwb2ludDogc3RyaW5nKTogUnVuU2NyaXB0Q29uZmlnIHtcbiAgICBjb25zdCB0eXBlQ2hlY2sgPSB0aGlzLl9vcHRpb25zLnR5cGVDaGVjayA/PyB0cnVlO1xuICAgIGNvbnN0IHN3YyA9IHRoaXMuX29wdGlvbnMuc3djID8/IGZhbHNlO1xuXG4gICAgY29uc3QgY29tbWFuZDogc3RyaW5nW10gPSBbXCJ0cy1ub2RlXCJdO1xuICAgIGNvbnN0IGRlcGVuZGVuY2llczogRGVwZW5kZW5jeVJlcXVlc3RbXSA9IFt7IG5hbWU6IFwidHMtbm9kZVwiIH1dO1xuXG4gICAgaWYgKHN3Yykge1xuICAgICAgZGVwZW5kZW5jaWVzLnB1c2goeyBuYW1lOiBcIkBzd2MvY29yZVwiIH0pO1xuICAgICAgY29tbWFuZC5wdXNoKFwiLS1zd2NcIik7XG4gICAgfVxuXG4gICAgaWYgKCF0eXBlQ2hlY2spIHtcbiAgICAgIGNvbW1hbmQucHVzaChcIi0tdHJhbnNwaWxlT25seVwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy50c2NvbmZpZykge1xuICAgICAgY29tbWFuZC5wdXNoKFwiLS1wcm9qZWN0XCIsIHRoaXMuX29wdGlvbnMudHNjb25maWcpO1xuICAgIH1cblxuICAgIC8vIGNvbW1hbmQucHVzaChcIi0tcHJlZmVyLXRzLWV4dHNcIik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgc3RlcHM6IFt7IGV4ZWNBcmdzOiBbLi4uY29tbWFuZCwgZW50cnlwb2ludF0gfV0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVHN4KGVudHJ5cG9pbnQ6IHN0cmluZyk6IFJ1blNjcmlwdENvbmZpZyB7XG4gICAgY29uc3QgdHlwZUNoZWNrID0gdGhpcy5fb3B0aW9ucy50eXBlQ2hlY2sgPz8gZmFsc2U7XG5cbiAgICBjb25zdCBjb21tYW5kOiBzdHJpbmdbXSA9IFtcInRzeFwiXTtcbiAgICBjb25zdCBzdGVwczogVGFza1N0ZXBbXSA9IFtdO1xuICAgIGNvbnN0IGRlcGVuZGVuY2llczogRGVwZW5kZW5jeVJlcXVlc3RbXSA9IFt7IG5hbWU6IFwidHN4XCIgfV07XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy50c2NvbmZpZykge1xuICAgICAgY29tbWFuZC5wdXNoKFwiLS10c2NvbmZpZ1wiLCB0aGlzLl9vcHRpb25zLnRzY29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZUNoZWNrKSB7XG4gICAgICBzdGVwcy5wdXNoKHR5cGVDaGVja1N0ZXAodGhpcy5fb3B0aW9ucy50c2NvbmZpZykpO1xuICAgIH1cblxuICAgIHN0ZXBzLnB1c2goeyBleGVjQXJnczogWy4uLmNvbW1hbmQsIGVudHJ5cG9pbnRdIH0pO1xuXG4gICAgcmV0dXJuIHsgZGVwZW5kZW5jaWVzLCBzdGVwcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJOb2RlKGVudHJ5cG9pbnQ6IHN0cmluZyk6IFJ1blNjcmlwdENvbmZpZyB7XG4gICAgY29uc3QgdHlwZUNoZWNrID0gdGhpcy5fb3B0aW9ucy50eXBlQ2hlY2sgPz8gZmFsc2U7XG5cbiAgICBjb25zdCBjb21tYW5kOiBzdHJpbmdbXSA9IFtcIm5vZGVcIl07XG4gICAgY29uc3Qgc3RlcHM6IFRhc2tTdGVwW10gPSBbXTtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY3lSZXF1ZXN0W10gPSBbXTtcblxuICAgIGlmICh0aGlzLl9vcHRpb25zLnRyYW5zZm9ybVR5cGVzID8/IGZhbHNlKSB7XG4gICAgICBkZXBlbmRlbmNpZXMucHVzaCh7IG5hbWU6IFwiYW1hcm9cIiB9KTtcbiAgICAgIGNvbW1hbmQucHVzaChcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIpO1xuICAgICAgY29tbWFuZC5wdXNoKFwiLS1pbXBvcnQ9YW1hcm8vdHJhbnNmb3JtXCIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fb3B0aW9ucy5leHBlcmltZW50YWxUcmFuc2Zvcm1UeXBlcyA/PyBmYWxzZSkge1xuICAgICAgY29tbWFuZC5wdXNoKFwiLS1leHBlcmltZW50YWwtdHJhbnNmb3JtLXR5cGVzXCIpO1xuICAgICAgY29tbWFuZC5wdXNoKFwiLS1kaXNhYmxlLXdhcm5pbmc9RXhwZXJpbWVudGFsV2FybmluZ1wiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZUNoZWNrKSB7XG4gICAgICBzdGVwcy5wdXNoKHR5cGVDaGVja1N0ZXAodGhpcy5fb3B0aW9ucy50c2NvbmZpZykpO1xuICAgICAgZGVwZW5kZW5jaWVzLnB1c2goeyBuYW1lOiBcInR5cGVzY3JpcHRcIiB9KTtcbiAgICB9XG5cbiAgICBzdGVwcy5wdXNoKHsgZXhlY0FyZ3M6IFsuLi5jb21tYW5kLCBlbnRyeXBvaW50XSB9KTtcblxuICAgIHJldHVybiB7IGRlcGVuZGVuY2llcywgc3RlcHMgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0eXBlQ2hlY2tTdGVwKHRzY29uZmlnPzogc3RyaW5nKTogVGFza1N0ZXAge1xuICBjb25zdCBhcmdzID0gW1widHNjXCIsIFwiLS1ub0VtaXRcIl07XG4gIGlmICh0c2NvbmZpZykge1xuICAgIGFyZ3MucHVzaChcIi1wXCIsIHRzY29uZmlnKTtcbiAgfVxuICByZXR1cm4geyBleGVjQXJnczogYXJncywgbmFtZTogXCJ0eXBlY2hlY2tcIiB9O1xufVxuIl19