UNPKG

@aws/pdk

Version:

All documentation is located at: https://aws.github.io/aws-pdk

122 lines 18.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.inferBuildTarget = inferBuildTarget; const cdk_1 = require("projen/lib/cdk"); const java_1 = require("projen/lib/java"); const javascript_1 = require("projen/lib/javascript"); const python_1 = require("projen/lib/python"); const utils_1 = require("../../utils"); /** * Defines a fileset for target inputs and outputs. * @experimental * @internal */ class TargetFileset { static File(fileset, isWorkspaceRoot = false) { return new TargetFileset(fileset, false, isWorkspaceRoot); } static Directory(fileset, isWorkspaceRoot = false) { return new TargetFileset(fileset, true, isWorkspaceRoot); } static resolveInputs(values) { return values.map((v) => (typeof v === "string" ? v : v.filesetStarIfDir)); } static resolveOutputs(values) { return values.map((v) => (typeof v === "string" ? v : v.fileset)); } static outputsToInputs(values) { return values.map((v) => typeof v === "string" ? v : v.inverse().filesetStarIfDir); } constructor(fileset, isDirectory, isWorkspaceRoot) { this._fileset = fileset; this.isDirectory = isDirectory; this.isExclude = this._fileset.startsWith("!"); this.isWorkspaceRoot = isWorkspaceRoot; } _ensureWildcards(fileset) { if (fileset.endsWith("*")) { return fileset; } if (fileset.endsWith("/")) { return fileset + "**/*"; } return fileset + "/**/*"; } get fileset() { let fileset = this.isExclude ? this._fileset.substring(1) : this._fileset; if (fileset.startsWith("/")) { fileset = fileset.substring(1); } if (this.isWorkspaceRoot) { return `${this.isExclude ? "!" : ""}{workspaceRoot}/${fileset}`; } return `${this.isExclude ? "!" : ""}{projectRoot}/${fileset}`; } inverse() { if (this.isExclude) { return new TargetFileset(this._fileset.substring(1), this.isDirectory, this.isWorkspaceRoot); } return new TargetFileset("!" + this._fileset, this.isDirectory, this.isWorkspaceRoot); } get filesetStarIfDir() { if (this.isDirectory) { return this._ensureWildcards(this.fileset); } return this.fileset; } } /** * Infer nx target values for build task * @experimental * @internal */ function inferBuildTarget(project, options) { const { inputs = [], outputs = [] } = _inferBuildTargetIO(project); if (options?.excludeOutputs !== false) { inputs.push(...TargetFileset.outputsToInputs(outputs)); } let dependsOn = ["^build"]; if (options?.dependsOn != null && options.dependsOn !== true) { if (options.dependsOn === false) { dependsOn = undefined; } else { dependsOn = options.dependsOn; } } if (outputs.length === 0) { return undefined; } return { inputs: TargetFileset.resolveInputs(inputs), outputs: TargetFileset.resolveOutputs(outputs), dependsOn, }; } /** @internal */ function _inferBuildTargetIO(project) { const inputs = []; const outputs = []; let includeDefaultInputs = true; if (utils_1.ProjectUtils.isNamedInstanceOf(project, cdk_1.JsiiProject)) { outputs.push(TargetFileset.File(".jsii"), TargetFileset.Directory(project.libdir), TargetFileset.Directory(project.artifactsDirectory)); } if (javascript_1.Jest.of(project)) { outputs.push(TargetFileset.Directory("coverage"), TargetFileset.Directory("test-reports")); } if (utils_1.ProjectUtils.isNamedInstanceOf(project, python_1.PythonProject)) { inputs.push(TargetFileset.Directory("!.env"), TargetFileset.Directory("!.pytest_cache")); } if (utils_1.ProjectUtils.isNamedInstanceOf(project, java_1.JavaProject)) { inputs.push(TargetFileset.File("!.classpath"), TargetFileset.File("!.project"), TargetFileset.File("!.settings")); outputs.push(TargetFileset.Directory("target"), TargetFileset.Directory("dist/java")); } if (includeDefaultInputs) { inputs.unshift("default", "^default"); } return { inputs, outputs, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRhcmdldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtSUEsNENBNEJDO0FBNUpELHdDQUE2QztBQUM3QywwQ0FBOEM7QUFDOUMsc0RBQTZDO0FBQzdDLDhDQUFrRDtBQUVsRCx1Q0FBMkM7QUFFM0M7Ozs7R0FJRztBQUNILE1BQU0sYUFBYTtJQUNqQixNQUFNLENBQUMsSUFBSSxDQUNULE9BQWUsRUFDZixrQkFBMkIsS0FBSztRQUVoQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLENBQ2QsT0FBZSxFQUNmLGtCQUEyQixLQUFLO1FBRWhDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFrQztRQUNyRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBa0M7UUFDdEQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFrQztRQUN2RCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUs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QUFFLENBQUM7UUFDckIsT0FBTyxDQUFDLElBQUksQ0FDVixhQUFhLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUNuQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksb0JBQVksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsc0JBQWEsQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUFDLElBQUksQ0FDVCxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUNoQyxhQUFhLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQzFDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxvQkFBWSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxrQkFBVyxDQUFDLEVBQUUsQ0FBQztRQUN6RCxNQUFNLENBQUMsSUFBSSxDQUNULGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQ2pDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQy9CLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQ2pDLENBQUM7UUFDRixPQUFPLENBQUMsSUFBSSxDQUNWLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQ2pDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQ3JDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTTtRQUNOLE9BQU87S0FDUixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBDb3B5cmlnaHQgW0FtYXpvbi5jb21dKGh0dHA6Ly9hbWF6b24uY29tLyksIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAqL1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IEpzaWlQcm9qZWN0IH0gZnJvbSBcInByb2plbi9saWIvY2RrXCI7XG5pbXBvcnQgeyBKYXZhUHJvamVjdCB9IGZyb20gXCJwcm9qZW4vbGliL2phdmFcIjtcbmltcG9ydCB7IEplc3QgfSBmcm9tIFwicHJvamVuL2xpYi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBQeXRob25Qcm9qZWN0IH0gZnJvbSBcInByb2plbi9saWIvcHl0aG9uXCI7XG5pbXBvcnQgeyBOeCB9IGZyb20gXCIuLi8uLi9ueC10eXBlc1wiO1xuaW1wb3J0IHsgUHJvamVjdFV0aWxzIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbi8qKlxuICogRGVmaW5lcyBhIGZpbGVzZXQgZm9yIHRhcmdldCBpbnB1dHMgYW5kIG91dHB1dHMuXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgVGFyZ2V0RmlsZXNldCB7XG4gIHN0YXRpYyBGaWxlKFxuICAgIGZpbGVzZXQ6IHN0cmluZyxcbiAgICBpc1dvcmtzcGFjZVJvb3Q6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBUYXJnZXRGaWxlc2V0IHtcbiAgICByZXR1cm4gbmV3IFRhcmdldEZpbGVzZXQoZmlsZXNldCwgZmFsc2UsIGlzV29ya3NwYWNlUm9vdCk7XG4gIH1cbiAgc3RhdGljIERpcmVjdG9yeShcbiAgICBmaWxlc2V0OiBzdHJpbmcsXG4gICAgaXNXb3Jrc3BhY2VSb290OiBib29sZWFuID0gZmFsc2VcbiAgKTogVGFyZ2V0RmlsZXNldCB7XG4gICAgcmV0dXJuIG5ldyBUYXJnZXRGaWxlc2V0KGZpbGVzZXQsIHRydWUsIGlzV29ya3NwYWNlUm9vdCk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZUlucHV0cyh2YWx1ZXM6IChzdHJpbmcgfCBUYXJnZXRGaWxlc2V0KVtdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB2YWx1ZXMubWFwKCh2KSA9PiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2IDogdi5maWxlc2V0U3RhcklmRGlyKSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZU91dHB1dHModmFsdWVzOiAoc3RyaW5nIHwgVGFyZ2V0RmlsZXNldClbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdmFsdWVzLm1hcCgodikgPT4gKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiID8gdiA6IHYuZmlsZXNldCkpO1xuICB9XG5cbiAgc3RhdGljIG91dHB1dHNUb0lucHV0cyh2YWx1ZXM6IChzdHJpbmcgfCBUYXJnZXRGaWxlc2V0KVtdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB2YWx1ZXMubWFwKCh2KSA9PlxuICAgICAgdHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2IDogdi5pbnZlcnNlKCkuZmlsZXNldFN0YXJJZkRpclxuICAgICk7XG4gIH1cblxuICAvKiogVGhlIGdsb2IgcGF0dGVybiBmb3IgdGhlIGZpbGVzZXQgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNldDogc3RyaW5nO1xuICAvKiogSW5kaWNhdGVzIGlmIGZpbGVzZXQgaXMgZm9yIGEgZGlyZWN0b3J5ICovXG4gIHB1YmxpYyByZWFkb25seSBpc0RpcmVjdG9yeTogYm9vbGVhbjtcbiAgLyoqIEluZGljYXRlcyBpZiBmaWxlc2V0IGlzIGV4Y2x1ZGVkIChzdGFydHMgd2l0aCAhKSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNFeGNsdWRlOiBib29sZWFuO1xuICAvKiogSW5kaWNhdGVzIGlmIGZpbGVzZXQgaXMgZm9yIHdvcmtzcGFjZSByb290LCBpZiBub3QgaXMgY29uc2lkZXJlZCBwcm9qZWN0IHJvb3QgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzV29ya3NwYWNlUm9vdDogYm9vbGVhbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIGZpbGVzZXQ6IHN0cmluZyxcbiAgICBpc0RpcmVjdG9yeTogYm9vbGVhbixcbiAgICBpc1dvcmtzcGFjZVJvb3Q6IGJvb2xlYW5cbiAgKSB7XG4gICAgdGhpcy5fZmlsZXNldCA9IGZpbGVzZXQ7XG4gICAgdGhpcy5pc0RpcmVjdG9yeSA9IGlzRGlyZWN0b3J5O1xuICAgIHRoaXMuaXNFeGNsdWRlID0gdGhpcy5fZmlsZXNldC5zdGFydHNXaXRoKFwiIVwiKTtcbiAgICB0aGlzLmlzV29ya3NwYWNlUm9vdCA9IGlzV29ya3NwYWNlUm9vdDtcbiAgfVxuXG4gIHByaXZhdGUgX2Vuc3VyZVdpbGRjYXJkcyhmaWxlc2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChmaWxlc2V0LmVuZHNXaXRoKFwiKlwiKSkge1xuICAgICAgcmV0dXJuIGZpbGVzZXQ7XG4gICAgfVxuICAgIGlmIChmaWxlc2V0LmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgcmV0dXJuIGZpbGVzZXQgKyBcIioqLypcIjtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGVzZXQgKyBcIi8qKi8qXCI7XG4gIH1cblxuICBnZXQgZmlsZXNldCgpOiBzdHJpbmcge1xuICAgIGxldCBmaWxlc2V0ID0gdGhpcy5pc0V4Y2x1ZGUgPyB0aGlzLl9maWxlc2V0LnN1YnN0cmluZygxKSA6IHRoaXMuX2ZpbGVzZXQ7XG4gICAgaWYgKGZpbGVzZXQuc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgIGZpbGVzZXQgPSBmaWxlc2V0LnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNXb3Jrc3BhY2VSb290KSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5pc0V4Y2x1ZGUgPyBcIiFcIiA6IFwiXCJ9e3dvcmtzcGFjZVJvb3R9LyR7ZmlsZXNldH1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5pc0V4Y2x1ZGUgPyBcIiFcIiA6IFwiXCJ9e3Byb2plY3RSb290fS8ke2ZpbGVzZXR9YDtcbiAgfVxuXG4gIGludmVyc2UoKTogVGFyZ2V0RmlsZXNldCB7XG4gICAgaWYgKHRoaXMuaXNFeGNsdWRlKSB7XG4gICAgICByZXR1cm4gbmV3IFRhcmdldEZpbGVzZXQoXG4gICAgICAgIHRoaXMuX2ZpbGVzZXQuc3Vic3RyaW5nKDEpLFxuICAgICAgICB0aGlzLmlzRGlyZWN0b3J5LFxuICAgICAgICB0aGlzLmlzV29ya3NwYWNlUm9vdFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRhcmdldEZpbGVzZXQoXG4gICAgICBcIiFcIiArIHRoaXMuX2ZpbGVzZXQsXG4gICAgICB0aGlzLmlzRGlyZWN0b3J5LFxuICAgICAgdGhpcy5pc1dvcmtzcGFjZVJvb3RcbiAgICApO1xuICB9XG5cbiAgZ2V0IGZpbGVzZXRTdGFySWZEaXIoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0RpcmVjdG9yeSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Vuc3VyZVdpbGRjYXJkcyh0aGlzLmZpbGVzZXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZpbGVzZXQ7XG4gIH1cbn1cblxuLyoqIEBzdHJ1Y3QgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5mZXJCdWlsZFRhcmdldE9wdGlvbnMge1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIG91dHB1dHMgYXJlIGF1dG9tYXRpY2FsbHkgZXhjbHVkZWQgZnJvbSBpbnB1dHMuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVPdXRwdXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBgZGVwZW5kc09uYCBmb3IgdGhlIHRhcmdldCBpcyBkZXJpdmVkLlxuICAgKiAtIElmIGBmYWxzZWAsIG5vIGBkZXBlbmRzT25gIHdpbGwgYmUgYWRkZWQuXG4gICAqIC0gSWYgYHRydWVgLCB0aGUgZGVmYXVsdCBgXmJ1aWxkYCB3aWxsIGJlIHVzZWQuXG4gICAqIC0gSWYgZXhwbGljaXQgbGlzdCBvZiBzdHJpbmdzLCB0aGUgdmFsdWUgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kc09uPzogYm9vbGVhbiB8IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEluZmVyIG54IHRhcmdldCB2YWx1ZXMgZm9yIGJ1aWxkIHRhc2tcbiAqIEBleHBlcmltZW50YWxcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJCdWlsZFRhcmdldChcbiAgcHJvamVjdDogUHJvamVjdCxcbiAgb3B0aW9ucz86IEluZmVyQnVpbGRUYXJnZXRPcHRpb25zXG4pOiBOeC5JUHJvamVjdFRhcmdldCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgaW5wdXRzID0gW10sIG91dHB1dHMgPSBbXSB9ID0gX2luZmVyQnVpbGRUYXJnZXRJTyhwcm9qZWN0KTtcblxuICBpZiAob3B0aW9ucz8uZXhjbHVkZU91dHB1dHMgIT09IGZhbHNlKSB7XG4gICAgaW5wdXRzLnB1c2goLi4uVGFyZ2V0RmlsZXNldC5vdXRwdXRzVG9JbnB1dHMob3V0cHV0cykpO1xuICB9XG5cbiAgbGV0IGRlcGVuZHNPbjogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBbXCJeYnVpbGRcIl07XG4gIGlmIChvcHRpb25zPy5kZXBlbmRzT24gIT0gbnVsbCAmJiBvcHRpb25zLmRlcGVuZHNPbiAhPT0gdHJ1ZSkge1xuICAgIGlmIChvcHRpb25zLmRlcGVuZHNPbiA9PT0gZmFsc2UpIHtcbiAgICAgIGRlcGVuZHNPbiA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVwZW5kc09uID0gb3B0aW9ucy5kZXBlbmRzT247XG4gICAgfVxuICB9XG5cbiAgaWYgKG91dHB1dHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5wdXRzOiBUYXJnZXRGaWxlc2V0LnJlc29sdmVJbnB1dHMoaW5wdXRzKSxcbiAgICBvdXRwdXRzOiBUYXJnZXRGaWxlc2V0LnJlc29sdmVPdXRwdXRzKG91dHB1dHMpLFxuICAgIGRlcGVuZHNPbixcbiAgfTtcbn1cblxuaW50ZXJmYWNlIEluZmVyZWRUYXJnZXRGaWxlc2V0cyB7XG4gIHJlYWRvbmx5IGlucHV0czogKFRhcmdldEZpbGVzZXQgfCBzdHJpbmcpW107XG4gIHJlYWRvbmx5IG91dHB1dHM6IChUYXJnZXRGaWxlc2V0IHwgc3RyaW5nKVtdO1xufVxuXG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBfaW5mZXJCdWlsZFRhcmdldElPKHByb2plY3Q6IFByb2plY3QpOiBJbmZlcmVkVGFyZ2V0RmlsZXNldHMge1xuICBjb25zdCBpbnB1dHM6IChUYXJnZXRGaWxlc2V0IHwgc3RyaW5nKVtdID0gW107XG4gIGNvbnN0IG91dHB1dHM6IChUYXJnZXRGaWxlc2V0IHwgc3RyaW5nKVtdID0gW107XG4gIGxldCBpbmNsdWRlRGVmYXVsdElucHV0cyA9IHRydWU7XG5cbiAgaWYgKFByb2plY3RVdGlscy5pc05hbWVkSW5zdGFuY2VPZihwcm9qZWN0LCBKc2lpUHJvamVjdCkpIHtcbiAgICBvdXRwdXRzLnB1c2goXG4gICAgICBUYXJnZXRGaWxlc2V0LkZpbGUoXCIuanNpaVwiKSxcbiAgICAgIFRhcmdldEZpbGVzZXQuRGlyZWN0b3J5KHByb2plY3QubGliZGlyKSxcbiAgICAgIFRhcmdldEZpbGVzZXQuRGlyZWN0b3J5KHByb2plY3QuYXJ0aWZhY3RzRGlyZWN0b3J5KVxuICAgICk7XG4gIH1cblxuICBpZiAoSmVzdC5vZihwcm9qZWN0KSkge1xuICAgIG91dHB1dHMucHVzaChcbiAgICAgIFRhcmdldEZpbGVzZXQuRGlyZWN0b3J5KFwiY292ZXJhZ2VcIiksXG4gICAgICBUYXJnZXRGaWxlc2V0LkRpcmVjdG9yeShcInRlc3QtcmVwb3J0c1wiKVxuICAgICk7XG4gIH1cblxuICBpZiAoUHJvamVjdFV0aWxzLmlzTmFtZWRJbnN0YW5jZU9mKHByb2plY3QsIFB5dGhvblByb2plY3QpKSB7XG4gICAgaW5wdXRzLnB1c2goXG4gICAgICBUYXJnZXRGaWxlc2V0LkRpcmVjdG9yeShcIiEuZW52XCIpLFxuICAgICAgVGFyZ2V0RmlsZXNldC5EaXJlY3RvcnkoXCIhLnB5dGVzdF9jYWNoZVwiKVxuICAgICk7XG4gIH1cblxuICBpZiAoUHJvamVjdFV0aWxzLmlzTmFtZWRJbnN0YW5jZU9mKHByb2plY3QsIEphdmFQcm9qZWN0KSkge1xuICAgIGlucHV0cy5wdXNoKFxuICAgICAgVGFyZ2V0RmlsZXNldC5GaWxlKFwiIS5jbGFzc3BhdGhcIiksXG4gICAgICBUYXJnZXRGaWxlc2V0LkZpbGUoXCIhLnByb2plY3RcIiksXG4gICAgICBUYXJnZXRGaWxlc2V0LkZpbGUoXCIhLnNldHRpbmdzXCIpXG4gICAgKTtcbiAgICBvdXRwdXRzLnB1c2goXG4gICAgICBUYXJnZXRGaWxlc2V0LkRpcmVjdG9yeShcInRhcmdldFwiKSxcbiAgICAgIFRhcmdldEZpbGVzZXQuRGlyZWN0b3J5KFwiZGlzdC9qYXZhXCIpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChpbmNsdWRlRGVmYXVsdElucHV0cykge1xuICAgIGlucHV0cy51bnNoaWZ0KFwiZGVmYXVsdFwiLCBcIl5kZWZhdWx0XCIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbnB1dHMsXG4gICAgb3V0cHV0cyxcbiAgfTtcbn1cbiJdfQ==