UNPKG

@aws-cdk/aws-glue-alpha

Version:

The CDK Construct Library for AWS::Glue

142 lines 18.4 kB
"use strict"; var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ScalaSparkFlexEtlJob = void 0; const jsiiDeprecationWarnings = require("../../.warnings.jsii.js"); const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_glue_1 = require("aws-cdk-lib/aws-glue"); const constants_1 = require("../constants"); const spark_job_1 = require("./spark-job"); const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource"); const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable"); /** * Spark ETL Jobs class * * ETL jobs support pySpark and Scala languages, for which there are separate * but similar constructors. ETL jobs default to the G2 worker type, but you * can override this default with other supported worker type values * (G1, G2, G4 and G8). ETL jobs defaults to Glue version 4.0, which you can * override to 3.0. The following ETL features are enabled by default: * —enable-metrics, —enable-spark-ui, —enable-continuous-cloudwatch-log. * You can find more details about version, worker type and other features * in Glue's public documentation. */ let ScalaSparkFlexEtlJob = (() => { let _classDecorators = [prop_injectable_1.propertyInjectable]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = spark_job_1.SparkJob; var ScalaSparkFlexEtlJob = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); ScalaSparkFlexEtlJob = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); } static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.ScalaSparkFlexEtlJob", version: "2.225.0-alpha.0" }; /** Uniquely identifies this class. */ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.ScalaSparkFlexEtlJob'; jobArn; jobName; /** * ScalaSparkFlexEtlJob constructor */ constructor(scope, id, props) { super(scope, id, props); try { jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_ScalaSparkFlexEtlJobProps(props); } catch (error) { if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") { Error.captureStackTrace(error, ScalaSparkFlexEtlJob); } throw error; } // Enhanced CDK Analytics Telemetry (0, metadata_resource_1.addConstructMetadata)(this, props); // Combine command line arguments into a single line item const defaultArguments = { ...this.executableArguments(props), ...this.nonExecutableCommonArguments(props), }; const jobResource = new aws_glue_1.CfnJob(this, 'Resource', { name: props.jobName, description: props.description, role: this.role.roleArn, command: { name: constants_1.JobType.ETL, scriptLocation: this.codeS3ObjectUrl(props.script), }, glueVersion: props.glueVersion ? props.glueVersion : constants_1.GlueVersion.V3_0, workerType: props.workerType ? props.workerType : constants_1.WorkerType.G_1X, numberOfWorkers: props.numberOfWorkers ? props.numberOfWorkers : 10, maxRetries: props.maxRetries, executionProperty: props.maxConcurrentRuns ? { maxConcurrentRuns: props.maxConcurrentRuns } : undefined, notificationProperty: props.notifyDelayAfter ? { notifyDelayAfter: props.notifyDelayAfter.toMinutes() } : undefined, timeout: props.timeout?.toMinutes(), connections: props.connections ? { connections: props.connections.map((connection) => connection.connectionName) } : undefined, securityConfiguration: props.securityConfiguration?.securityConfigurationName, tags: props.tags, executionClass: constants_1.ExecutionClass.FLEX, jobRunQueuingEnabled: false, defaultArguments, }); const resourceName = this.getResourceNameAttribute(jobResource.ref); this.jobArn = this.buildJobArn(this, resourceName); this.jobName = resourceName; } /** * Set the executable arguments with best practices enabled by default * * @returns An array of arguments for Glue to use on execution */ executableArguments(props) { const args = {}; args['--job-language'] = constants_1.JobLanguage.SCALA; args['--class'] = props.className; this.setupExtraCodeArguments(args, props); return args; } static { __runInitializers(_classThis, _classExtraInitializers); } }; return ScalaSparkFlexEtlJob = _classThis; })(); exports.ScalaSparkFlexEtlJob = ScalaSparkFlexEtlJob; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGEtc3BhcmstZmxleC1ldGwtam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NhbGEtc3BhcmstZmxleC1ldGwtam9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUE4QztBQUU5Qyw0Q0FBNkY7QUFHN0YsMkNBQXNEO0FBQ3RELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUF3RDFFOzs7Ozs7Ozs7OztHQVdHO0lBRVUsb0JBQW9COzRCQURoQyxvQ0FBa0I7Ozs7c0JBQ3VCLG9CQUFRO29DQUFoQixTQUFRLFdBQVE7Ozs7WUFBbEQsNktBNERDOzs7OztRQTNEQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLDhDQUE4QyxDQUFDO1FBQ3RGLE1BQU0sQ0FBUztRQUNmLE9BQU8sQ0FBUztRQUVoQzs7V0FFRztRQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7WUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Ozs7OzttREFWZixvQkFBb0I7Ozs7WUFXN0IsbUNBQW1DO1lBQ25DLElBQUEsd0NBQW9CLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWxDLHlEQUF5RDtZQUN6RCxNQUFNLGdCQUFnQixHQUFHO2dCQUN2QixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xDLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQzthQUM1QyxDQUFDO1lBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQkFBTSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQy9DLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDbkIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUN2QixPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLG1CQUFPLENBQUMsR0FBRztvQkFDakIsY0FBYyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztpQkFDbkQ7Z0JBQ0QsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLHVCQUFXLENBQUMsSUFBSTtnQkFDckUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLHNCQUFVLENBQUMsSUFBSTtnQkFDakUsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25FLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDNUIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUN2RyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ25ILE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtnQkFDbkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDOUgscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixFQUFFLHlCQUF5QjtnQkFDN0UsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNoQixjQUFjLEVBQUUsMEJBQWMsQ0FBQyxJQUFJO2dCQUNuQyxvQkFBb0IsRUFBRSxLQUFLO2dCQUMzQixnQkFBZ0I7YUFDakIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO1NBQzdCO1FBRUQ7Ozs7V0FJRztRQUNLLG1CQUFtQixDQUFDLEtBQWdDO1lBQzFELE1BQU0sSUFBSSxHQUE4QixFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsdUJBQVcsQ0FBQyxLQUFLLENBQUM7WUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDbEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQztTQUNiOztZQTNEVSx1REFBb0I7Ozs7O0FBQXBCLG9EQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbkpvYiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1nbHVlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSm9iVHlwZSwgR2x1ZVZlcnNpb24sIEpvYkxhbmd1YWdlLCBXb3JrZXJUeXBlLCBFeGVjdXRpb25DbGFzcyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb2RlIH0gZnJvbSAnLi4vY29kZSc7XG5pbXBvcnQgeyBTcGFya0pvYiwgU3BhcmtKb2JQcm9wcyB9IGZyb20gJy4vc3Bhcmstam9iJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcblxuLyoqXG4gKiBGbGV4IEpvYnMgY2xhc3NcbiAqXG4gKiBGbGV4IGpvYnMgc3VwcG9ydHMgUHl0aG9uIGFuZCBTY2FsYSBsYW5ndWFnZS5cbiAqIFRoZSBmbGV4aWJsZSBleGVjdXRpb24gY2xhc3MgaXMgYXBwcm9wcmlhdGUgZm9yIG5vbi11cmdlbnQgam9icyBzdWNoIGFzXG4gKiBwcmUtcHJvZHVjdGlvbiBqb2JzLCB0ZXN0aW5nLCBhbmQgb25lLXRpbWUgZGF0YSBsb2Fkcy5cbiAqIEZsZXhpYmxlIGpvYiBydW5zIGFyZSBzdXBwb3J0ZWQgZm9yIGpvYnMgdXNpbmcgQVdTIEdsdWUgdmVyc2lvbiAzLjAgb3IgbGF0ZXIgYW5kIEcuMVggb3JcbiAqIEcuMlggd29ya2VyIHR5cGVzIGJ1dCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEdsdWUgKGN1cnJlbnRseSBHbHVlIDMuMC4pXG4gKlxuICogU2ltaWxhciB0byBFVEwsIHdl4oCZbGwgZW5hYmxlIHRoZXNlIGZlYXR1cmVzOiDigJRlbmFibGUtbWV0cmljcywg4oCUZW5hYmxlLXNwYXJrLXVpLFxuICog4oCUZW5hYmxlLWNvbnRpbnVvdXMtY2xvdWR3YXRjaC1sb2dcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NhbGFTcGFya0ZsZXhFdGxKb2JQcm9wcyBleHRlbmRzIFNwYXJrSm9iUHJvcHMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBvZiBhIG5vdGlmaWNhdGlvbiAob3B0aW9uYWwpLlxuICAgKiBBZnRlciBhIGpvYiBydW4gc3RhcnRzLCB0aGUgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gd2FpdCBiZWZvcmUgc2VuZGluZyBhIGpvYiBydW4gZGVsYXkgbm90aWZpY2F0aW9uLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZ5RGVsYXlBZnRlcj86IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGZ1bGx5IHF1YWxpZmllZCBTY2FsYSBjbGFzcyBuYW1lIHRoYXQgc2VydmVzIGFzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGpvYi5cbiAgICpcbiAgICogQHNlZSBgLS1jbGFzc2AgaW4gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL2F3cy1nbHVlLXByb2dyYW1taW5nLWV0bC1nbHVlLWFyZ3VtZW50cy5odG1sXG4gICAqL1xuICByZWFkb25seSBjbGFzc05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBmaWxlcywgc3VjaCBhcyBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgQVdTIEdsdWUgY29waWVzIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiB5b3VyIHNjcmlwdCBiZWZvcmUgZXhlY3V0aW5nIGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGV4dHJhIGZpbGVzIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvYXdzLWdsdWUtcHJvZ3JhbW1pbmctZXRsLWdsdWUtYXJndW1lbnRzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhRmlsZXM/OiBDb2RlW107XG5cbiAgLyoqXG4gICAqIEV4dHJhIEphcnMgUzMgVVJMIChvcHRpb25hbClcbiAgICogUzMgVVJMIHdoZXJlIGFkZGl0aW9uYWwgamFyIGRlcGVuZGVuY2llcyBhcmUgbG9jYXRlZFxuICAgKiBAZGVmYXVsdCAtIG5vIGV4dHJhIGphciBmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFKYXJzPzogQ29kZVtdO1xuXG4gIC8qKlxuICAgKiBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gdHJ1ZSBwcmlvcml0aXplcyB0aGUgY3VzdG9tZXIncyBleHRyYSBKQVIgZmlsZXMgaW4gdGhlIGNsYXNzcGF0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UgLSBwcmlvcml0eSBpcyBub3QgZ2l2ZW4gdG8gdXNlci1wcm92aWRlZCBqYXJzXG4gICAqXG4gICAqIEBzZWUgYC0tdXNlci1qYXJzLWZpcnN0YCBpbiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvYXdzLWdsdWUtcHJvZ3JhbW1pbmctZXRsLWdsdWUtYXJndW1lbnRzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhSmFyc0ZpcnN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTcGFyayBFVEwgSm9icyBjbGFzc1xuICpcbiAqIEVUTCBqb2JzIHN1cHBvcnQgcHlTcGFyayBhbmQgU2NhbGEgbGFuZ3VhZ2VzLCBmb3Igd2hpY2ggdGhlcmUgYXJlIHNlcGFyYXRlXG4gKiBidXQgc2ltaWxhciBjb25zdHJ1Y3RvcnMuIEVUTCBqb2JzIGRlZmF1bHQgdG8gdGhlIEcyIHdvcmtlciB0eXBlLCBidXQgeW91XG4gKiBjYW4gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0IHdpdGggb3RoZXIgc3VwcG9ydGVkIHdvcmtlciB0eXBlIHZhbHVlc1xuICogKEcxLCBHMiwgRzQgYW5kIEc4KS4gRVRMIGpvYnMgZGVmYXVsdHMgdG8gR2x1ZSB2ZXJzaW9uIDQuMCwgd2hpY2ggeW91IGNhblxuICogb3ZlcnJpZGUgdG8gMy4wLiBUaGUgZm9sbG93aW5nIEVUTCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0OlxuICog4oCUZW5hYmxlLW1ldHJpY3MsIOKAlGVuYWJsZS1zcGFyay11aSwg4oCUZW5hYmxlLWNvbnRpbnVvdXMtY2xvdWR3YXRjaC1sb2cuXG4gKiBZb3UgY2FuIGZpbmQgbW9yZSBkZXRhaWxzIGFib3V0IHZlcnNpb24sIHdvcmtlciB0eXBlIGFuZCBvdGhlciBmZWF0dXJlc1xuICogaW4gR2x1ZSdzIHB1YmxpYyBkb2N1bWVudGF0aW9uLlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgU2NhbGFTcGFya0ZsZXhFdGxKb2IgZXh0ZW5kcyBTcGFya0pvYiB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuU2NhbGFTcGFya0ZsZXhFdGxKb2InO1xuICBwdWJsaWMgcmVhZG9ubHkgam9iQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBqb2JOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjYWxhU3BhcmtGbGV4RXRsSm9iIGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2NhbGFTcGFya0ZsZXhFdGxKb2JQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgLy8gQ29tYmluZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGludG8gYSBzaW5nbGUgbGluZSBpdGVtXG4gICAgY29uc3QgZGVmYXVsdEFyZ3VtZW50cyA9IHtcbiAgICAgIC4uLnRoaXMuZXhlY3V0YWJsZUFyZ3VtZW50cyhwcm9wcyksXG4gICAgICAuLi50aGlzLm5vbkV4ZWN1dGFibGVDb21tb25Bcmd1bWVudHMocHJvcHMpLFxuICAgIH07XG5cbiAgICBjb25zdCBqb2JSZXNvdXJjZSA9IG5ldyBDZm5Kb2IodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogcHJvcHMuam9iTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHJvbGU6IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgY29tbWFuZDoge1xuICAgICAgICBuYW1lOiBKb2JUeXBlLkVUTCxcbiAgICAgICAgc2NyaXB0TG9jYXRpb246IHRoaXMuY29kZVMzT2JqZWN0VXJsKHByb3BzLnNjcmlwdCksXG4gICAgICB9LFxuICAgICAgZ2x1ZVZlcnNpb246IHByb3BzLmdsdWVWZXJzaW9uID8gcHJvcHMuZ2x1ZVZlcnNpb24gOiBHbHVlVmVyc2lvbi5WM18wLFxuICAgICAgd29ya2VyVHlwZTogcHJvcHMud29ya2VyVHlwZSA/IHByb3BzLndvcmtlclR5cGUgOiBXb3JrZXJUeXBlLkdfMVgsXG4gICAgICBudW1iZXJPZldvcmtlcnM6IHByb3BzLm51bWJlck9mV29ya2VycyA/IHByb3BzLm51bWJlck9mV29ya2VycyA6IDEwLFxuICAgICAgbWF4UmV0cmllczogcHJvcHMubWF4UmV0cmllcyxcbiAgICAgIGV4ZWN1dGlvblByb3BlcnR5OiBwcm9wcy5tYXhDb25jdXJyZW50UnVucyA/IHsgbWF4Q29uY3VycmVudFJ1bnM6IHByb3BzLm1heENvbmN1cnJlbnRSdW5zIH0gOiB1bmRlZmluZWQsXG4gICAgICBub3RpZmljYXRpb25Qcm9wZXJ0eTogcHJvcHMubm90aWZ5RGVsYXlBZnRlciA/IHsgbm90aWZ5RGVsYXlBZnRlcjogcHJvcHMubm90aWZ5RGVsYXlBZnRlci50b01pbnV0ZXMoKSB9IDogdW5kZWZpbmVkLFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dD8udG9NaW51dGVzKCksXG4gICAgICBjb25uZWN0aW9uczogcHJvcHMuY29ubmVjdGlvbnMgPyB7IGNvbm5lY3Rpb25zOiBwcm9wcy5jb25uZWN0aW9ucy5tYXAoKGNvbm5lY3Rpb24pID0+IGNvbm5lY3Rpb24uY29ubmVjdGlvbk5hbWUpIH0gOiB1bmRlZmluZWQsXG4gICAgICBzZWN1cml0eUNvbmZpZ3VyYXRpb246IHByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbj8uc2VjdXJpdHlDb25maWd1cmF0aW9uTmFtZSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICBleGVjdXRpb25DbGFzczogRXhlY3V0aW9uQ2xhc3MuRkxFWCxcbiAgICAgIGpvYlJ1blF1ZXVpbmdFbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHRBcmd1bWVudHMsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShqb2JSZXNvdXJjZS5yZWYpO1xuICAgIHRoaXMuam9iQXJuID0gdGhpcy5idWlsZEpvYkFybih0aGlzLCByZXNvdXJjZU5hbWUpO1xuICAgIHRoaXMuam9iTmFtZSA9IHJlc291cmNlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGV4ZWN1dGFibGUgYXJndW1lbnRzIHdpdGggYmVzdCBwcmFjdGljZXMgZW5hYmxlZCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFyZ3VtZW50cyBmb3IgR2x1ZSB0byB1c2Ugb24gZXhlY3V0aW9uXG4gICAqL1xuICBwcml2YXRlIGV4ZWN1dGFibGVBcmd1bWVudHMocHJvcHM6IFNjYWxhU3BhcmtGbGV4RXRsSm9iUHJvcHMpIHtcbiAgICBjb25zdCBhcmdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgYXJnc1snLS1qb2ItbGFuZ3VhZ2UnXSA9IEpvYkxhbmd1YWdlLlNDQUxBO1xuICAgIGFyZ3NbJy0tY2xhc3MnXSA9IHByb3BzLmNsYXNzTmFtZTtcbiAgICB0aGlzLnNldHVwRXh0cmFDb2RlQXJndW1lbnRzKGFyZ3MsIHByb3BzKTtcbiAgICByZXR1cm4gYXJncztcbiAgfVxufVxuIl19