projen
Version:
CDK for software projects
142 lines • 22.1 kB
JavaScript
;
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