UNPKG

projen

Version:

CDK for software projects

122 lines • 21.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JsiiProject = exports.Stability = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const jsii_build_1 = require("./jsii-build"); const github_1 = require("../github"); const typescript_1 = require("../typescript"); const util_1 = require("../util"); const EMAIL_REGEX = /^[^\s@]+@[^\s@]+$/; const URL_REGEX = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/; var Stability; (function (Stability) { Stability["EXPERIMENTAL"] = "experimental"; Stability["STABLE"] = "stable"; Stability["DEPRECATED"] = "deprecated"; })(Stability || (exports.Stability = Stability = {})); /** * Multi-language jsii library project * * @pjid jsii */ class JsiiProject extends typescript_1.TypeScriptProject { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.cdk.JsiiProject", version: "0.103.12" }; constructor(options) { const { authorEmail, authorUrl } = parseAuthorAddress(options); const defaultOptions = { repository: options.repositoryUrl, authorName: options.author, authorEmail, authorUrl, tsconfig: { compilerOptions: { // jsii strict validation requirements target: "ES2022", lib: ["es2022"], module: "node16", esModuleInterop: true, skipLibCheck: true, noEmitOnError: true, stripInternal: false, }, }, tsconfigDev: { compilerOptions: { stripInternal: true, isolatedModules: true, }, }, }; const forcedOptions = { releaseToNpm: false, // we have a jsii release workflow docgen: false, // we use jsii-docgen here so disable typescript docgen }; const mergedOptions = (0, util_1.deepMerge)([ defaultOptions, options, forcedOptions, ]); super(mergedOptions); // Apply the jsii mixin using the constructs .with() pattern this.with(new jsii_build_1.JsiiBuild({ publishToMaven: options.publishToMaven, publishToPypi: options.publishToPypi, publishToGo: options.publishToGo, publishToNuget: options.publishToNuget, compat: options.compat, compatIgnore: options.compatIgnore, excludeTypescript: options.excludeTypescript, docgenFilePath: options.docgenFilePath, compressAssembly: options.compressAssembly, jsiiVersion: options.jsiiVersion, validateTsconfig: options.validateTsconfig, stability: options.stability, docgen: options.docgen, releaseToNpm: options.releaseToNpm, npmTrustedPublishing: options.npmTrustedPublishing, codeArtifactOptions: options.codeArtifactOptions, workflowNodeVersion: this.nodeVersion, workflowBootstrapSteps: this.workflowBootstrapSteps, }, { ...this.getJobRunsOnConfig(options), ...(options.workflowContainerImage ? { container: { image: options.workflowContainerImage } } : {}), })); } /** * Generates the runs-on config for Jobs, falling back to the project's * global GitHub runner selection (if any). */ getJobRunsOnConfig(options) { const github = this.github ?? github_1.GitHub.of(this.root); return (github?.runsOnConfig({ runsOn: options.workflowRunsOn, runsOnGroup: options.workflowRunsOnGroup, }) ?? {}); } } exports.JsiiProject = JsiiProject; function parseAuthorAddress(options) { let authorEmail = options.authorEmail; let authorUrl = options.authorUrl; if (options.authorAddress) { if (options.authorEmail && options.authorEmail !== options.authorAddress) { throw new Error("authorEmail is deprecated and cannot be used in conjunction with authorAddress"); } if (options.authorUrl && options.authorUrl !== options.authorAddress) { throw new Error("authorUrl is deprecated and cannot be used in conjunction with authorAddress."); } if (EMAIL_REGEX.test(options.authorAddress)) { authorEmail = options.authorAddress; } else if (URL_REGEX.test(options.authorAddress)) { authorUrl = options.authorAddress; } else { throw new Error(`authorAddress must be either an email address or a URL: ${options.authorAddress}`); } } return { authorEmail, authorUrl }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNpaS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nkay9qc2lpLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLDZDQUF5QztBQUN6QyxzQ0FBbUM7QUFRbkMsOENBQWtEO0FBQ2xELGtDQUFvQztBQUVwQyxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztBQUN4QyxNQUFNLFNBQVMsR0FDYixzTEFBc0wsQ0FBQztBQW1IekwsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ25CLDBDQUE2QixDQUFBO0lBQzdCLDhCQUFpQixDQUFBO0lBQ2pCLHNDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFtREQ7Ozs7R0FJRztBQUNILE1BQWEsV0FBWSxTQUFRLDhCQUFpQjs7SUFDaEQsWUFBWSxPQUEyQjtRQUNyQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9ELE1BQU0sY0FBYyxHQUFzQztZQUN4RCxVQUFVLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDakMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQzFCLFdBQVc7WUFDWCxTQUFTO1lBQ1QsUUFBUSxFQUFFO2dCQUNSLGVBQWUsRUFBRTtvQkFDZixzQ0FBc0M7b0JBQ3RDLE1BQU0sRUFBRSxRQUFRO29CQUNoQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0JBQ2YsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLGVBQWUsRUFBRSxJQUFJO29CQUNyQixZQUFZLEVBQUUsSUFBSTtvQkFDbEIsYUFBYSxFQUFFLElBQUk7b0JBQ25CLGFBQWEsRUFBRSxLQUFLO2lCQUNyQjthQUNGO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLGVBQWUsRUFBRTtvQkFDZixhQUFhLEVBQUUsSUFBSTtvQkFDbkIsZUFBZSxFQUFFLElBQUk7aUJBQ3RCO2FB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YUFBYSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUN0QyxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ2pELFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUNuRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFZhbGlkYXRlVHNjb25maWcgfSBmcm9tIFwiLi9qc2lpLWJ1aWxkXCI7XG5pbXBvcnQgeyBKc2lpQnVpbGQgfSBmcm9tIFwiLi9qc2lpLWJ1aWxkXCI7XG5pbXBvcnQgeyBHaXRIdWIgfSBmcm9tIFwiLi4vZ2l0aHViXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEdvUHVibGlzaE9wdGlvbnMsXG4gIE1hdmVuUHVibGlzaE9wdGlvbnMsXG4gIE51Z2V0UHVibGlzaE9wdGlvbnMsXG4gIFB5UGlQdWJsaXNoT3B0aW9ucyxcbn0gZnJvbSBcIi4uL3JlbGVhc2VcIjtcbmltcG9ydCB0eXBlIHsgVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzY3JpcHRcIjtcbmltcG9ydCB7IFR5cGVTY3JpcHRQcm9qZWN0IH0gZnJvbSBcIi4uL3R5cGVzY3JpcHRcIjtcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gXCIuLi91dGlsXCI7XG5cbmNvbnN0IEVNQUlMX1JFR0VYID0gL15bXlxcc0BdK0BbXlxcc0BdKyQvO1xuY29uc3QgVVJMX1JFR0VYID1cbiAgLygoKFtBLVphLXpdezMsOX06KD86XFwvXFwvKT8pKD86W1xcLTs6Jj1cXCtcXCQsXFx3XStAKT9bQS1aYS16MC05XFwuXFwtXSt8KD86d3d3XFwufFtcXC07OiY9XFwrXFwkLFxcd10rQClbQS1aYS16MC05XFwuXFwtXSspKCg/OlxcL1tcXCt+JVxcL1xcLlxcd1xcLV9dKik/XFw/Pyg/OltcXC1cXCs9JjslQFxcLlxcd19dKikjPyg/OltcXC5cXCFcXC9cXFxcXFx3XSopKT8pLztcblxuZXhwb3J0IGludGVyZmFjZSBKc2lpUHJvamVjdE9wdGlvbnMgZXh0ZW5kcyBUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgXCIuXCJcbiAgICovXG4gIHJlYWRvbmx5IHJvb3RkaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdCByZXBvc2l0b3J5IFVSTC5cbiAgICogQGRlZmF1bHQgJEdJVF9SRU1PVEVcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgYXV0aG9yLlxuICAgKiBAZGVmYXVsdCAkR0lUX1VTRVJfTkFNRVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVtYWlsIG9yIFVSTCBvZiB0aGUgbGlicmFyeSBhdXRob3IuXG4gICAqIEBkZWZhdWx0ICRHSVRfVVNFUl9FTUFJTFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yQWRkcmVzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQdWJsaXNoIHRvIG1hdmVuXG4gICAqIEBkZWZhdWx0IC0gbm8gcHVibGlzaGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaFRvTWF2ZW4/OiBKc2lpSmF2YVRhcmdldDtcblxuICAvKipcbiAgICogUHVibGlzaCB0byBweXBpXG4gICAqIEBkZWZhdWx0IC0gbm8gcHVibGlzaGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaFRvUHlwaT86IEpzaWlQeXRob25UYXJnZXQ7XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2ggR28gYmluZGluZ3MgdG8gYSBnaXQgcmVwb3NpdG9yeS5cbiAgICogQGRlZmF1bHQgLSBubyBwdWJsaXNoaW5nXG4gICAqL1xuICByZWFkb25seSBwdWJsaXNoVG9Hbz86IEpzaWlHb1RhcmdldDtcblxuICAvKipcbiAgICogUHVibGlzaCB0byBOdUdldFxuICAgKiBAZGVmYXVsdCAtIG5vIHB1Ymxpc2hpbmdcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hUb051Z2V0PzogSnNpaURvdE5ldFRhcmdldDtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBydW4gQVBJIGNvbXBhdGliaWxpdHkgdGVzdCBhZ2FpbnN0IHRoZSBsYXRlc3QgdmVyc2lvbiBwdWJsaXNoZWQgdG8gbnBtIGFmdGVyIGNvbXBpbGF0aW9uLlxuICAgKlxuICAgKiAtIFlvdSBjYW4gbWFudWFsbHkgcnVuIGNvbXBhdGliaWxpdHkgdGVzdHMgdXNpbmcgYHlhcm4gY29tcGF0YCBpZiB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQuXG4gICAqIC0gWW91IGNhbiBpZ25vcmUgY29tcGF0aWJpbGl0eSBmYWlsdXJlcyBieSBhZGRpbmcgbGluZXMgdG8gYSBcIi5jb21wYXRpZ25vcmVcIiBmaWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGF0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgaWdub3JlIGZpbGUgZm9yIEFQSSBjb21wYXRpYmlsaXR5IHRlc3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIi5jb21wYXRpZ25vcmVcIlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGF0SWdub3JlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBY2NlcHRzIGEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zLiBGaWxlcyBtYXRjaGluZyBhbnkgb2YgdGhvc2UgcGF0dGVybnMgd2lsbCBiZSBleGNsdWRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyIGlucHV0LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBqc2lpIHdpbGwgaW5jbHVkZSBhbGwgKi50cyBmaWxlcyAoZXhjZXB0IC5kLnRzIGZpbGVzKSBpbiB0aGUgVHlwZVNjcmlwdCBjb21waWxlciBpbnB1dC5cbiAgICogVGhpcyBjYW4gYmUgcHJvYmxlbWF0aWMgZm9yIGV4YW1wbGUgd2hlbiB0aGUgcGFja2FnZSdzIGJ1aWxkIG9yIHRlc3QgcHJvY2VkdXJlIGdlbmVyYXRlcyAudHMgZmlsZXNcbiAgICogdGhhdCBjYW5ub3QgYmUgY29tcGlsZWQgd2l0aCBqc2lpJ3MgY29tcGlsZXIgc2V0dGluZ3MuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlVHlwZXNjcmlwdD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGaWxlIHBhdGggZm9yIGdlbmVyYXRlZCBkb2NzLlxuICAgKiBAZGVmYXVsdCBcIkFQSS5tZFwiXG4gICAqL1xuICByZWFkb25seSBkb2NnZW5GaWxlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogRW1pdCBhIGNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgYXNzZW1ibHlcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNvbXByZXNzQXNzZW1ibHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHRoZSBqc2lpIGNvbXBpbGVyIHRvIHVzZS5cbiAgICpcbiAgICogU2V0IHRvIFwiKlwiIGlmIHlvdSB3YW50IHRvIG1hbnVhbGx5IG1hbmFnZSB0aGUgdmVyc2lvbiBvZiBqc2lpIGluIHlvdXJcbiAgICogcHJvamVjdCBieSBtYW5hZ2luZyB1cGRhdGVzIHRvIGBwYWNrYWdlLmpzb25gIG9uIHlvdXIgb3duLlxuICAgKlxuICAgKiBOT1RFOiBUaGUganNpaSBjb21waWxlciByZWxlYXNlcyBzaW5jZSA1LjAuMCBhcmUgbm90IHNlbWFudGljYWxseSB2ZXJzaW9uZWRcbiAgICogYW5kIHNob3VsZCByZW1haW4gb24gdGhlIHNhbWUgbWlub3IsIHNvIHdlIHJlY29tbWVuZCB1c2luZyBhIGB+YCBkZXBlbmRlbmN5XG4gICAqIChlLmcuIGB+NS4wLjBgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ+NS45LjBcIlxuICAgKiBAcGpuZXcgXCJ+Ni4wLjBcIlxuICAgKi9cbiAgcmVhZG9ubHkganNpaVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExldmVsIG9mIHRzY29uZmlnIHZhbGlkYXRpb24ganNpaSBzaG91bGQgcGVyZm9ybSBvbiB0aGUgdXNlci1wcm92aWRlZCB0c2NvbmZpZy5cbiAgICpcbiAgICogT25seSByZWxldmFudCB3aGVuIHRoZSBwcm9qZWN0IHN5bnRoZXNpemVzIGl0cyBvd24gdHNjb25maWdcbiAgICogKGkuZS4gYGRpc2FibGVUc2NvbmZpZ2AgaXMgbm90IHNldCBvbiB0aGUgVHlwZVNjcmlwdFByb2plY3QpLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXdzLmdpdGh1Yi5pby9qc2lpL3VzZXItZ3VpZGVzL2xpYi1hdXRob3IvY29uZmlndXJhdGlvbi8jdmFsaWRhdGV0c2NvbmZpZ1xuICAgKiBAZGVmYXVsdCBWYWxpZGF0ZVRzY29uZmlnLlNUUklDVFxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGVUc2NvbmZpZz86IFZhbGlkYXRlVHNjb25maWc7XG59XG5cbmV4cG9ydCBlbnVtIFN0YWJpbGl0eSB7XG4gIEVYUEVSSU1FTlRBTCA9IFwiZXhwZXJpbWVudGFsXCIsXG4gIFNUQUJMRSA9IFwic3RhYmxlXCIsXG4gIERFUFJFQ0FURUQgPSBcImRlcHJlY2F0ZWRcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc2lpSmF2YVRhcmdldCBleHRlbmRzIE1hdmVuUHVibGlzaE9wdGlvbnMge1xuICByZWFkb25seSBqYXZhUGFja2FnZTogc3RyaW5nO1xuICByZWFkb25seSBtYXZlbkdyb3VwSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbWF2ZW5BcnRpZmFjdElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNpaVB5dGhvblRhcmdldCBleHRlbmRzIFB5UGlQdWJsaXNoT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRpc3ROYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZHVsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpzaWlEb3ROZXRUYXJnZXQgZXh0ZW5kcyBOdWdldFB1Ymxpc2hPcHRpb25zIHtcbiAgcmVhZG9ubHkgZG90TmV0TmFtZXNwYWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhY2thZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBpY29uVXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdvIHRhcmdldCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNpaUdvVGFyZ2V0IGV4dGVuZHMgR29QdWJsaXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHJlcG9zaXRvcnkgaW4gd2hpY2ggdGhpcyBtb2R1bGUgd2lsbCBiZSBwdWJsaXNoZWQgKGUuZy4gZ2l0aHViLmNvbS9vd25lci9yZXBvKS5cbiAgICpcbiAgICogVGhlIG1vZHVsZSBpdHNlbGYgd2lsbCBhbHdheXMgYmUgcHVibGlzaGVkIHVuZGVyIGEgc3ViZGlyZWN0b3J5IG5hbWVkIGFjY29yZGluZ1xuICAgKiB0byB0aGUgYHBhY2thZ2VOYW1lYCBvZiB0aGUgbW9kdWxlIChlLmcuIGdpdGh1Yi5jb20vZm9vL2Jhci9wa2cpLlxuICAgKlxuICAgKiBAZXhhbXBsZSBnaXRodWIuY29tL293bmVyL3JlcG9cbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEdvIHBhY2thZ2UgbmFtZS5cbiAgICpcbiAgICogSWYgbm90IHNwZWNpZmllZCwgcGFja2FnZSBuYW1lIHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSBKYXZhU2NyaXB0IG1vZHVsZSBuYW1lXG4gICAqIGJ5IHJlbW92aW5nIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyAoZS5nLiBAcHJvamVuL2Zvby1iYXIgd2lsbCBiZSBwcm9qZW5mb29iYXIpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSB0aGUgSmF2YVNjcmlwdCBtb2R1bGUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3VmZml4IGFwcGVuZGVkIGF0IHRoZSBlbmQgb2YgdGhlIG1vZHVsZSB2ZXJzaW9uIChlLmcgYFwiLWRldnByZWZpeFwiYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvblN1ZmZpeD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNdWx0aS1sYW5ndWFnZSBqc2lpIGxpYnJhcnkgcHJvamVjdFxuICpcbiAqIEBwamlkIGpzaWlcbiAqL1xuZXhwb3J0IGNsYXNzIEpzaWlQcm9qZWN0IGV4dGVuZHMgVHlwZVNjcmlwdFByb2plY3Qge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBKc2lpUHJvamVjdE9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGF1dGhvckVtYWlsLCBhdXRob3JVcmwgfSA9IHBhcnNlQXV0aG9yQWRkcmVzcyhvcHRpb25zKTtcblxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zOiBQYXJ0aWFsPFR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucz4gPSB7XG4gICAgICByZXBvc2l0b3J5OiBvcHRpb25zLnJlcG9zaXRvcnlVcmwsXG4gICAgICBhdXRob3JOYW1lOiBvcHRpb25zLmF1dGhvcixcbiAgICAgIGF1dGhvckVtYWlsLFxuICAgICAgYXV0aG9yVXJsLFxuICAgICAgdHNjb25maWc6IHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgLy8ganNpaSBzdHJpY3QgdmFsaWRhdGlvbiByZXF1aXJlbWVudHNcbiAgICAgICAgICB0YXJnZXQ6IFwiRVMyMDIyXCIsXG4gICAgICAgICAgbGliOiBbXCJlczIwMjJcIl0sXG4gICAgICAgICAgbW9kdWxlOiBcIm5vZGUxNlwiLFxuICAgICAgICAgIGVzTW9kdWxlSW50ZXJvcDogdHJ1ZSxcbiAgICAgICAgICBza2lwTGliQ2hlY2s6IHRydWUsXG4gICAgICAgICAgbm9FbWl0T25FcnJvcjogdHJ1ZSxcbiAgICAgICAgICBzdHJpcEludGVybmFsOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0c2NvbmZpZ0Rldjoge1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBzdHJpcEludGVybmFsOiB0cnVlLFxuICAgICAgICAgIGlzb2xhdGVkTW9kdWxlczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGZvcmNlZE9wdGlvbnMgPSB7XG4gICAgICByZWxlYXNlVG9OcG06IGZhbHNlLCAvLyB3ZSBoYXZlIGEganNpaSByZWxlYXNlIHdvcmtmbG93XG4gICAgICBkb2NnZW46IGZhbHNlLCAvLyB3ZSB1c2UganNpaS1kb2NnZW4gaGVyZSBzbyBkaXNhYmxlIHR5cGVzY3JpcHQgZG9jZ2VuXG4gICAgfTtcblxuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBkZWVwTWVyZ2UoW1xuICAgICAgZGVmYXVsdE9wdGlvbnMsXG4gICAgICBvcHRpb25zLFxuICAgICAgZm9yY2VkT3B0aW9ucyxcbiAgICBdKSBhcyBUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnM7XG5cbiAgICBzdXBlcihtZXJnZWRPcHRpb25zKTtcblxuICAgIC8vIEFwcGx5IHRoZSBqc2lpIG1peGluIHVzaW5nIHRoZSBjb25zdHJ1Y3RzIC53aXRoKCkgcGF0dGVyblxuICAgIHRoaXMud2l0aChcbiAgICAgIG5ldyBKc2lpQnVpbGQoXG4gICAgICAgIHtcbiAgICAgICAgICBwdWJsaXNoVG9NYXZlbjogb3B0aW9ucy5wdWJsaXNoVG9NYXZlbixcbiAgICAgICAgICBwdWJsaXNoVG9QeXBpOiBvcHRpb25zLnB1Ymxpc2hUb1B5cGksXG4gICAgICAgICAgcHVibGlzaFRvR286IG9wdGlvbnMucHVibGlzaFRvR28sXG4gICAgICAgICAgcHVibGlzaFRvTnVnZXQ6IG9wdGlvbnMucHVibGlzaFRvTnVnZXQsXG4gICAgICAgICAgY29tcGF0OiBvcHRpb25zLmNvbXBhdCxcbiAgICAgICAgICBjb21wYXRJZ25vcmU6IG9wdGlvbnMuY29tcGF0SWdub3JlLFxuICAgICAgICAgIGV4Y2x1ZGVUeXBlc2NyaXB0OiBvcHRpb25zLmV4Y2x1ZGVUeXBlc2NyaXB0LFxuICAgICAgICAgIGRvY2dlbkZpbGVQYXRoOiBvcHRpb25zLmRvY2dlbkZpbGVQYXRoLFxuICAgICAgICAgIGNvbXByZXNzQXNzZW1ibHk6IG9wdGlvbnMuY29tcHJlc3NBc3NlbWJseSxcbiAgICAgICAgICBqc2lpVmVyc2lvbjogb3B0aW9ucy5qc2lpVmVyc2lvbixcbiAgICAgICAgICB2YWxpZGF0ZVRzY29uZmlnOiBvcHRpb25zLnZhbGlkYXRlVHNjb25maWcsXG4gICAgICAgICAgc3RhYmlsaXR5OiBvcHRpb25zLnN0YWJpbGl0eSxcbiAgICAgICAgICBkb2NnZW46IG9wdGlvbnMuZG9jZ2VuLFxuICAgICAgICAgIHJlbGVhc2VUb05wbTogb3B0aW9ucy5yZWxlYXNlVG9OcG0sXG4gICAgICAgICAgbnBtVHJ1c3RlZFB1Ymxpc2hpbmc6IG9wdGlvbnMubnBtVHJ1c3RlZFB1Ymxpc2hpbmcsXG4gICAgICAgICAgY29kZUFydGlmYWN0T3B0aW9uczogb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zLFxuICAgICAgICAgIHdvcmtmbG93Tm9kZVZlcnNpb246IHRoaXMubm9kZVZlcnNpb24sXG4gICAgICAgICAgd29ya2Zsb3dCb290c3RyYXBTdGVwczogdGhpcy53b3JrZmxvd0Jvb3RzdHJhcFN0ZXBzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLi4udGhpcy5nZXRKb2JSdW5zT25Db25maWcob3B0aW9ucyksXG4gICAgICAgICAgLi4uKG9wdGlvbnMud29ya2Zsb3dDb250YWluZXJJbWFnZVxuICAgICAgICAgICAgPyB7IGNvbnRhaW5lcjogeyBpbWFnZTogb3B0aW9ucy53b3JrZmxvd0NvbnRhaW5lckltYWdlIH0gfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBydW5zLW9uIGNvbmZpZyBmb3IgSm9icywgZmFsbGluZyBiYWNrIHRvIHRoZSBwcm9qZWN0J3NcbiAgICogZ2xvYmFsIEdpdEh1YiBydW5uZXIgc2VsZWN0aW9uIChpZiBhbnkpLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRKb2JSdW5zT25Db25maWcob3B0aW9uczogSnNpaVByb2plY3RPcHRpb25zKSB7XG4gICAgY29uc3QgZ2l0aHViID0gdGhpcy5naXRodWIgPz8gR2l0SHViLm9mKHRoaXMucm9vdCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGdpdGh1Yj8ucnVuc09uQ29uZmlnKHtcbiAgICAgICAgcnVuc09uOiBvcHRpb25zLndvcmtmbG93UnVuc09uLFxuICAgICAgICBydW5zT25Hcm91cDogb3B0aW9ucy53b3JrZmxvd1J1bnNPbkdyb3VwLFxuICAgICAgfSkgPz8ge31cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXV0aG9yQWRkcmVzcyhvcHRpb25zOiBKc2lpUHJvamVjdE9wdGlvbnMpIHtcbiAgbGV0IGF1dGhvckVtYWlsID0gb3B0aW9ucy5hdXRob3JFbWFpbDtcbiAgbGV0IGF1dGhvclVybCA9IG9wdGlvbnMuYXV0aG9yVXJsO1xuICBpZiAob3B0aW9ucy5hdXRob3JBZGRyZXNzKSB7XG4gICAgaWYgKG9wdGlvbnMuYXV0aG9yRW1haWwgJiYgb3B0aW9ucy5hdXRob3JFbWFpbCAhPT0gb3B0aW9ucy5hdXRob3JBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYXV0aG9yRW1haWwgaXMgZGVwcmVjYXRlZCBhbmQgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhdXRob3JBZGRyZXNzXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmF1dGhvclVybCAmJiBvcHRpb25zLmF1dGhvclVybCAhPT0gb3B0aW9ucy5hdXRob3JBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYXV0aG9yVXJsIGlzIGRlcHJlY2F0ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYXV0aG9yQWRkcmVzcy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKEVNQUlMX1JFR0VYLnRlc3Qob3B0aW9ucy5hdXRob3JBZGRyZXNzKSkge1xuICAgICAgYXV0aG9yRW1haWwgPSBvcHRpb25zLmF1dGhvckFkZHJlc3M7XG4gICAgfSBlbHNlIGlmIChVUkxfUkVHRVgudGVzdChvcHRpb25zLmF1dGhvckFkZHJlc3MpKSB7XG4gICAgICBhdXRob3JVcmwgPSBvcHRpb25zLmF1dGhvckFkZHJlc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGF1dGhvckFkZHJlc3MgbXVzdCBiZSBlaXRoZXIgYW4gZW1haWwgYWRkcmVzcyBvciBhIFVSTDogJHtvcHRpb25zLmF1dGhvckFkZHJlc3N9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGF1dGhvckVtYWlsLCBhdXRob3JVcmwgfTtcbn1cbiJdfQ==