UNPKG

@aws/pdk

Version:

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

166 lines 19.7 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.MonorepoJavaProject = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); /*! Copyright [Amazon.com](http://amazon.com/), Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ const fs = require("fs"); const path = require("path"); const projen_1 = require("projen"); const java_1 = require("projen/lib/java"); const nx_configurator_1 = require("../../components/nx-configurator"); const projen_dependency_1 = require("../../components/projen-dependency"); const utils_1 = require("../../utils"); const MVN_PLUGIN_PATH = "./.nx/plugins/nx_plugin.js"; /** * This project type will bootstrap a NX based monorepo with support for polygot * builds, build caching, dependency graph visualization and much more. * * @pjid monorepo-java */ class MonorepoJavaProject extends java_1.JavaProject { constructor(options) { // Pin default projen version for java const projenVersion = options.projenrcJavaOptions?.projenVersion ?? projen_dependency_1.DEFAULT_PROJEN_VERSION.replace(/^\^/, ""); super({ ...options, sample: false, junit: false, version: options.version ?? "0.0.0", groupId: options.groupId ?? "com.aws", artifactId: options.artifactId ?? "monorepo", projenrcJavaOptions: { ...options.projenrcJavaOptions, projenVersion, }, }); this.projenVersion = projenVersion; // Pin constructs version this.deps.removeDependency("software.constructs/constructs", projen_1.DependencyType.BUILD); this.addDependency("software.constructs/constructs@10.3.0"); this.addTestDependency(`software.aws/pdk@${utils_1.ProjectUtils.getPdkVersion()}`); this.nxConfigurator = new nx_configurator_1.NxConfigurator(this, { defaultReleaseBranch: options.defaultReleaseBranch ?? "main", licenseOptions: options.disableDefaultLicenses ? { disableDefaultLicenses: options.disableDefaultLicenses, } : undefined, }); // Setup maven nx plugin new projen_1.TextFile(this, MVN_PLUGIN_PATH, { readonly: true, lines: fs .readFileSync(path.join(__dirname, "plugin/mvn_plugin.js")) .toString("utf-8") .split("\n"), }); this.nx.plugins.push("@jnxplus/nx-maven", MVN_PLUGIN_PATH); this.installTask = this.nxConfigurator.ensureNxInstallTask({ "@jnxplus/nx-maven": "^1.x", }); // Map tasks to nx run-many this.nxConfigurator._overrideNxBuildTask(this.buildTask, { target: "build" }, { force: true }); this.nxConfigurator._overrideNxBuildTask(this.preCompileTask, { target: "pre-compile", }); this.nxConfigurator._overrideNxBuildTask(this.compileTask, { target: "compile", }); this.nxConfigurator._overrideNxBuildTask(this.postCompileTask, { target: "post-compile", }); this.nxConfigurator._overrideNxBuildTask(this.testTask, { target: "test", }); this.nxConfigurator._overrideNxBuildTask(this.packageTask, { target: "package", }); } /** * @inheritdoc */ get nx() { return this.nxConfigurator.nx; } /** * @inheritdoc */ execNxRunManyCommand(options) { return this.nxConfigurator.execNxRunManyCommand(options); } /** * @inheritdoc */ composeNxRunManyCommand(options) { return this.nxConfigurator.composeNxRunManyCommand(options); } /** * @inheritdoc */ addNxRunManyTask(name, options) { return this.nxConfigurator.addNxRunManyTask(name, options); } /** * @inheritdoc */ addImplicitDependency(dependent, dependee) { this.nxConfigurator.addImplicitDependency(dependent, dependee); } /** * @inheritdoc */ addJavaDependency(dependent, dependee) { this.nxConfigurator.addJavaDependency(dependent, dependee); } /** * @inheritdoc */ addPythonPoetryDependency(dependent, dependee) { this.nxConfigurator.addPythonPoetryDependency(dependent, dependee); } addUpgradeDepsTask() { const upgradeDepsTask = new projen_1.Task("upgrade-deps", { description: "Upgrade dependencies in the monorepo", }); this.nxConfigurator._overrideNxBuildTask(upgradeDepsTask, { target: "upgrade", }); this.nxConfigurator._configurePythonSubprojectUpgradeDeps(this, upgradeDepsTask); } /** * @inheritdoc */ preSynthesize() { // Calling before super() to ensure proper pre-synth of NxProject component and its nested components this.nxConfigurator.preSynthesize(); this.addUpgradeDepsTask(); super.preSynthesize(); (0, projen_dependency_1.syncProjenVersions)(this.subprojects, this.projenVersion); } /** * @inheritDoc */ synth() { this.nxConfigurator.synth(); super.synth(); } postSynthesize() { super.postSynthesize(); this.installNx(); } /** * Run the install task which will install nx locally */ installNx() { this.logger.info("Installing dependencies..."); const runtime = new projen_1.TaskRuntime(this.outdir); runtime.runTask(this.installTask.name); } } exports.MonorepoJavaProject = MonorepoJavaProject; _a = JSII_RTTI_SYMBOL_1; MonorepoJavaProject[_a] = { fqn: "@aws/pdk.monorepo.MonorepoJavaProject", version: "0.26.14" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8tamF2YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vbm9yZXBvLWphdmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtzQ0FDc0M7QUFDdEMseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixtQ0FBOEU7QUFDOUUsMENBQThDO0FBRzlDLHNFQUcwQztBQUUxQywwRUFHNEM7QUFFNUMsdUNBQTJDO0FBRTNDLE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFDO0FBZ0JyRDs7Ozs7R0FLRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsa0JBQVc7SUFTbEQsWUFBWSxPQUE0QjtRQUN0QyxzQ0FBc0M7UUFDdEMsTUFBTSxhQUFhLEdBQ2pCLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxhQUFhO1lBQzFDLDBDQUFzQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsS0FBSyxDQUFDO1lBQ0osR0FBRyxPQUFPO1lBQ1YsTUFBTSxFQUFFLEtBQUs7WUFDYixLQUFLLEVBQUUsS0FBSztZQUNaLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU87WUFDbkMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksU0FBUztZQUNyQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxVQUFVO1lBQzVDLG1CQUFtQixFQUFFO2dCQUNuQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUI7Z0JBQzlCLGFBQWE7YUFDZDtTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBRW5DLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUN4QixnQ0FBZ0MsRUFDaEMsdUJBQWMsQ0FBQyxLQUFLLENBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFFNUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFv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QztJQUVEOztPQUVHO0lBQ0ssU0FBUztRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxvQkFBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQzs7QUFqTUgsa0RBa01DIiwic291cmNlc0NvbnRlbnQiOlsiLyohIENvcHlyaWdodCBbQW1hem9uLmNvbV0oaHR0cDovL2FtYXpvbi5jb20vKSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICovXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlLCBQcm9qZWN0LCBUYXNrLCBUYXNrUnVudGltZSwgVGV4dEZpbGUgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBKYXZhUHJvamVjdCB9IGZyb20gXCJwcm9qZW4vbGliL2phdmFcIjtcbmltcG9ydCB7IFB5dGhvblByb2plY3QgfSBmcm9tIFwicHJvamVuL2xpYi9weXRob25cIjtcbmltcG9ydCB7IEphdmFQcm9qZWN0T3B0aW9ucyB9IGZyb20gXCIuL2phdmEtcHJvamVjdC1vcHRpb25zXCI7XG5pbXBvcnQge1xuICBOeENvbmZpZ3VyYXRvcixcbiAgSU54UHJvamVjdENvcmUsXG59IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL254LWNvbmZpZ3VyYXRvclwiO1xuaW1wb3J0IHsgTnhXb3Jrc3BhY2UgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9ueC13b3Jrc3BhY2VcIjtcbmltcG9ydCB7XG4gIERFRkFVTFRfUFJPSkVOX1ZFUlNJT04sXG4gIHN5bmNQcm9qZW5WZXJzaW9ucyxcbn0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvcHJvamVuLWRlcGVuZGVuY3lcIjtcbmltcG9ydCB7IE54IH0gZnJvbSBcIi4uLy4uL254LXR5cGVzXCI7XG5pbXBvcnQgeyBQcm9qZWN0VXRpbHMgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcblxuY29uc3QgTVZOX1BMVUdJTl9QQVRIID0gXCIuLy5ueC9wbHVnaW5zL254X3BsdWdpbi5qc1wiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIE54TW9ub3JlcG9KYXZhUHJvamVjdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25vcmVwb0phdmFPcHRpb25zIGV4dGVuZHMgSmF2YVByb2plY3RPcHRpb25zIHtcbiAgcmVhZG9ubHkgZGVmYXVsdFJlbGVhc2VCcmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBkZWZhdWx0IGxpY2Vuc2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZURlZmF1bHRMaWNlbnNlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhpcyBwcm9qZWN0IHR5cGUgd2lsbCBib290c3RyYXAgYSBOWCBiYXNlZCBtb25vcmVwbyB3aXRoIHN1cHBvcnQgZm9yIHBvbHlnb3RcbiAqIGJ1aWxkcywgYnVpbGQgY2FjaGluZywgZGVwZW5kZW5jeSBncmFwaCB2aXN1YWxpemF0aW9uIGFuZCBtdWNoIG1vcmUuXG4gKlxuICogQHBqaWQgbW9ub3JlcG8tamF2YVxuICovXG5leHBvcnQgY2xhc3MgTW9ub3JlcG9KYXZhUHJvamVjdCBleHRlbmRzIEphdmFQcm9qZWN0IGltcGxlbWVudHMgSU54UHJvamVjdENvcmUge1xuICBwdWJsaWMgcmVhZG9ubHkgbnhDb25maWd1cmF0b3I6IE54Q29uZmlndXJhdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IGluc3RhbGxUYXNrOiBUYXNrO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHByb2plbiB1c2VkIGJ5IHRoZSBtb25vcmVwbyBhbmQgaXRzIHN1YnByb2plY3RzXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2plblZlcnNpb246IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNb25vcmVwb0phdmFPcHRpb25zKSB7XG4gICAgLy8gUGluIGRlZmF1bHQgcHJvamVuIHZlcnNpb24gZm9yIGphdmFcbiAgICBjb25zdCBwcm9qZW5WZXJzaW9uID1cbiAgICAgIG9wdGlvbnMucHJvamVucmNKYXZhT3B0aW9ucz8ucHJvamVuVmVyc2lvbiA/P1xuICAgICAgREVGQVVMVF9QUk9KRU5fVkVSU0lPTi5yZXBsYWNlKC9eXFxeLywgXCJcIik7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHNhbXBsZTogZmFsc2UsXG4gICAgICBqdW5pdDogZmFsc2UsXG4gICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gXCIwLjAuMFwiLFxuICAgICAgZ3JvdXBJZDogb3B0aW9ucy5ncm91cElkID8/IFwiY29tLmF3c1wiLFxuICAgICAgYXJ0aWZhY3RJZDogb3B0aW9ucy5hcnRpZmFjdElkID8/IFwibW9ub3JlcG9cIixcbiAgICAgIHByb2plbnJjSmF2YU9wdGlvbnM6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5wcm9qZW5yY0phdmFPcHRpb25zLFxuICAgICAgICBwcm9qZW5WZXJzaW9uLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plblZlcnNpb24gPSBwcm9qZW5WZXJzaW9uO1xuXG4gICAgLy8gUGluIGNvbnN0cnVjdHMgdmVyc2lvblxuICAgIHRoaXMuZGVwcy5yZW1vdmVEZXBlbmRlbmN5KFxuICAgICAgXCJzb2Z0d2FyZS5jb25zdHJ1Y3RzL2NvbnN0cnVjdHNcIixcbiAgICAgIERlcGVuZGVuY3lUeXBlLkJVSUxEXG4gICAgKTtcbiAgICB0aGlzLmFkZERlcGVuZGVuY3koXCJzb2Z0d2FyZS5jb25zdHJ1Y3RzL2NvbnN0cnVjdHNAMTAuMy4wXCIpO1xuXG4gICAgdGhpcy5hZGRUZXN0RGVwZW5kZW5jeShgc29mdHdhcmUuYXdzL3Bka0Ake1Byb2plY3RVdGlscy5nZXRQZGtWZXJzaW9uKCl9YCk7XG5cbiAgICB0aGlzLm54Q29uZmlndXJhdG9yID0gbmV3IE54Q29uZmlndXJhdG9yKHRoaXMsIHtcbiAgICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiBvcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoID8/IFwibWFpblwiLFxuICAgICAgbGljZW5zZU9wdGlvbnM6IG9wdGlvbnMuZGlzYWJsZURlZmF1bHRMaWNlbnNlc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRpc2FibGVEZWZhdWx0TGljZW5zZXM6IG9wdGlvbnMuZGlzYWJsZURlZmF1bHRMaWNlbnNlcyxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgLy8gU2V0dXAgbWF2ZW4gbnggcGx1Z2luXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsIE1WTl9QTFVHSU5fUEFUSCwge1xuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICBsaW5lczogZnNcbiAgICAgICAgLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBsdWdpbi9tdm5fcGx1Z2luLmpzXCIpKVxuICAgICAgICAudG9TdHJpbmcoXCJ1dGYtOFwiKVxuICAgICAgICAuc3BsaXQoXCJcXG5cIiksXG4gICAgfSk7XG4gICAgdGhpcy5ueC5wbHVnaW5zLnB1c2goXCJAam54cGx1cy9ueC1tYXZlblwiLCBNVk5fUExVR0lOX1BBVEgpO1xuICAgIHRoaXMuaW5zdGFsbFRhc2sgPSB0aGlzLm54Q29uZmlndXJhdG9yLmVuc3VyZU54SW5zdGFsbFRhc2soe1xuICAgICAgXCJAam54cGx1cy9ueC1tYXZlblwiOiBcIl4xLnhcIixcbiAgICB9KTtcblxuICAgIC8vIE1hcCB0YXNrcyB0byBueCBydW4tbWFueVxuICAgIHRoaXMubnhDb25maWd1cmF0b3IuX292ZXJyaWRlTnhCdWlsZFRhc2soXG4gICAgICB0aGlzLmJ1aWxkVGFzayxcbiAgICAgIHsgdGFyZ2V0OiBcImJ1aWxkXCIgfSxcbiAgICAgIHsgZm9yY2U6IHRydWUgfVxuICAgICk7XG5cbiAgICB0aGlzLm54Q29uZmlndXJhdG9yLl9vdmVycmlkZU54QnVpbGRUYXNrKHRoaXMucHJlQ29tcGlsZVRhc2ssIHtcbiAgICAgIHRhcmdldDogXCJwcmUtY29tcGlsZVwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ueENvbmZpZ3VyYXRvci5fb3ZlcnJpZGVOeEJ1aWxkVGFzayh0aGlzLmNvbXBpbGVUYXNrLCB7XG4gICAgICB0YXJnZXQ6IFwiY29tcGlsZVwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ueENvbmZpZ3VyYXRvci5fb3ZlcnJpZGVOeEJ1aWxkVGFzayh0aGlzLnBvc3RDb21waWxlVGFzaywge1xuICAgICAgdGFyZ2V0OiBcInBvc3QtY29tcGlsZVwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ueENvbmZpZ3VyYXRvci5fb3ZlcnJpZGVOeEJ1aWxkVGFzayh0aGlzLnRlc3RUYXNrLCB7XG4gICAgICB0YXJnZXQ6IFwidGVzdFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ueENvbmZpZ3VyYXRvci5fb3ZlcnJpZGVOeEJ1aWxkVGFzayh0aGlzLnBhY2thZ2VUYXNrLCB7XG4gICAgICB0YXJnZXQ6IFwicGFja2FnZVwiLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0IG54KCk6IE54V29ya3NwYWNlIHtcbiAgICByZXR1cm4gdGhpcy5ueENvbmZpZ3VyYXRvci5ueDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcHVibGljIGV4ZWNOeFJ1bk1hbnlDb21tYW5kKG9wdGlvbnM6IE54LlJ1bk1hbnlPcHRpb25zKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ueENvbmZpZ3VyYXRvci5leGVjTnhSdW5NYW55Q29tbWFuZChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcHVibGljIGNvbXBvc2VOeFJ1bk1hbnlDb21tYW5kKG9wdGlvbnM6IE54LlJ1bk1hbnlPcHRpb25zKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLm54Q29uZmlndXJhdG9yLmNvbXBvc2VOeFJ1bk1hbnlDb21tYW5kKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBwdWJsaWMgYWRkTnhSdW5NYW55VGFzayhuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IE54LlJ1bk1hbnlPcHRpb25zKTogVGFzayB7XG4gICAgcmV0dXJuIHRoaXMubnhDb25maWd1cmF0b3IuYWRkTnhSdW5NYW55VGFzayhuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcHVibGljIGFkZEltcGxpY2l0RGVwZW5kZW5jeShcbiAgICBkZXBlbmRlbnQ6IFByb2plY3QsXG4gICAgZGVwZW5kZWU6IHN0cmluZyB8IFByb2plY3RcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5ueENvbmZpZ3VyYXRvci5hZGRJbXBsaWNpdERlcGVuZGVuY3koZGVwZW5kZW50LCBkZXBlbmRlZSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIHB1YmxpYyBhZGRKYXZhRGVwZW5kZW5jeShcbiAgICBkZXBlbmRlbnQ6IEphdmFQcm9qZWN0LFxuICAgIGRlcGVuZGVlOiBKYXZhUHJvamVjdFxuICApOiB2b2lkIHtcbiAgICB0aGlzLm54Q29uZmlndXJhdG9yLmFkZEphdmFEZXBlbmRlbmN5KGRlcGVuZGVudCwgZGVwZW5kZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBwdWJsaWMgYWRkUHl0aG9uUG9ldHJ5RGVwZW5kZW5jeShcbiAgICBkZXBlbmRlbnQ6IFB5dGhvblByb2plY3QsXG4gICAgZGVwZW5kZWU6IFB5dGhvblByb2plY3RcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5ueENvbmZpZ3VyYXRvci5hZGRQeXRob25Qb2V0cnlEZXBlbmRlbmN5KGRlcGVuZGVudCwgZGVwZW5kZWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRVcGdyYWRlRGVwc1Rhc2soKSB7XG4gICAgY29uc3QgdXBncmFkZURlcHNUYXNrID0gbmV3IFRhc2soXCJ1cGdyYWRlLWRlcHNcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiVXBncmFkZSBkZXBlbmRlbmNpZXMgaW4gdGhlIG1vbm9yZXBvXCIsXG4gICAgfSk7XG4gICAgdGhpcy5ueENvbmZpZ3VyYXRvci5fb3ZlcnJpZGVOeEJ1aWxkVGFzayh1cGdyYWRlRGVwc1Rhc2ssIHtcbiAgICAgIHRhcmdldDogXCJ1cGdyYWRlXCIsXG4gICAgfSk7XG4gICAgdGhpcy5ueENvbmZpZ3VyYXRvci5fY29uZmlndXJlUHl0aG9uU3VicHJvamVjdFVwZ3JhZGVEZXBzKFxuICAgICAgdGhpcyxcbiAgICAgIHVwZ3JhZGVEZXBzVGFza1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgLy8gQ2FsbGluZyBiZWZvcmUgc3VwZXIoKSB0byBlbnN1cmUgcHJvcGVyIHByZS1zeW50aCBvZiBOeFByb2plY3QgY29tcG9uZW50IGFuZCBpdHMgbmVzdGVkIGNvbXBvbmVudHNcbiAgICB0aGlzLm54Q29uZmlndXJhdG9yLnByZVN5bnRoZXNpemUoKTtcblxuICAgIHRoaXMuYWRkVXBncmFkZURlcHNUYXNrKCk7XG5cbiAgICBzdXBlci5wcmVTeW50aGVzaXplKCk7XG5cbiAgICBzeW5jUHJvamVuVmVyc2lvbnModGhpcy5zdWJwcm9qZWN0cywgdGhpcy5wcm9qZW5WZXJzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgc3ludGgoKSB7XG4gICAgdGhpcy5ueENvbmZpZ3VyYXRvci5zeW50aCgpO1xuICAgIHN1cGVyLnN5bnRoKCk7XG4gIH1cblxuICBwb3N0U3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5wb3N0U3ludGhlc2l6ZSgpO1xuXG4gICAgdGhpcy5pbnN0YWxsTngoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGluc3RhbGwgdGFzayB3aGljaCB3aWxsIGluc3RhbGwgbnggbG9jYWxseVxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsTngoKTogdm9pZCB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbyhcIkluc3RhbGxpbmcgZGVwZW5kZW5jaWVzLi4uXCIpO1xuICAgIGNvbnN0IHJ1bnRpbWUgPSBuZXcgVGFza1J1bnRpbWUodGhpcy5vdXRkaXIpO1xuICAgIHJ1bnRpbWUucnVuVGFzayh0aGlzLmluc3RhbGxUYXNrLm5hbWUpO1xuICB9XG59XG4iXX0=