UNPKG

@harbor/ui

Version:

Harbor shared UI components based on Clarity and Angular6

256 lines (255 loc) 22.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { throwError as observableThrowError } from "rxjs"; import { Injectable, Inject } from "@angular/core"; import { Http, ResponseContentType } from "@angular/http"; import { map, catchError } from "rxjs/operators"; import { SERVICE_CONFIG } from "../service.config"; import { HTTP_JSON_OPTIONS, HTTP_GET_OPTIONS } from "../utils"; /** * Define service methods for handling the helmchart related things. * Loose couple with project module. * * * * @abstract * class RepositoryService * @abstract */ export class HelmChartService { } if (false) { /** * Get all helm charts info * ** deprecated param projectName Id of the project * ** deprecated param queryParams options params for query data * @abstract * @param {?} projectName * @param {?=} queryParams * @return {?} */ HelmChartService.prototype.getHelmCharts = function (projectName, queryParams) { }; /** * Delete an helmchart * ** deprecated param projectId Id of the project * ** deprecated param chartId ID of helmChart in this specific project * @abstract * @param {?} projectId * @param {?} chartName * @return {?} */ HelmChartService.prototype.deleteHelmChart = function (projectId, chartName) { }; /** * Get all the versions of helmchart * ** deprecated param projectName Id of the project * ** deprecated param chartName ID of the helm chart * ** deprecated param queryParams option params for query * @abstract * @param {?} projectName * @param {?} chartName * @return {?} */ HelmChartService.prototype.getChartVersions = function (projectName, chartName) { }; /** * Delete a version of helmchart * ** deprecated param projectName ID of the project * ** deprecated param chartName ID of the chart you want to delete * ** deprecated param version name of the version * @abstract * @param {?} projectName * @param {?} chartName * @param {?} version * @return {?} */ HelmChartService.prototype.deleteChartVersion = function (projectName, chartName, version) { }; /** * Get the all details of an helmchart * ** deprecated param projectName ID of the project * ** deprecated param chartname ID of the chart * ** deprecated param version name of the chart's version * ** deprecated param queryParams options * @abstract * @param {?} projectName * @param {?} chartname * @param {?} version * @return {?} */ HelmChartService.prototype.getChartDetail = function (projectName, chartname, version) { }; /** * Download an specific verison * ** deprecated param projectName ID of the project * ** deprecated param filename ID of the helm chart * ** deprecated param version Name of version * ** deprecated param queryParams options * @abstract * @param {?} projectName * @param {?} filename * @return {?} */ HelmChartService.prototype.downloadChart = function (projectName, filename) { }; /** * Upload chart and prov files to chartmuseam * ** deprecated param projectName Name of the project * ** deprecated param chart chart file * ** deprecated param prov prov file * @abstract * @param {?} projectName * @param {?} chart * @param {?} prov * @return {?} */ HelmChartService.prototype.uploadChart = function (projectName, chart, prov) { }; } /** * Implement default service for helm chart. */ export class HelmChartDefaultService extends HelmChartService { /** * @param {?} http * @param {?} config */ constructor(http, config) { super(); this.http = http; this.config = config; } /** * @param {?} res * @return {?} */ extractData(res) { if (res.text() === "") { return []; } return res.json() || []; } /** * @param {?} error * @return {?} */ handleErrorObservable(error) { return observableThrowError(error.message || error); } /** * @param {?} projectName * @return {?} */ getHelmCharts(projectName) { if (!projectName) { return observableThrowError("Bad argument, No project id to get helm charts"); } return this.http .get(`${this.config.helmChartEndpoint}/${projectName}/charts`, HTTP_GET_OPTIONS) .pipe(map(response => this.extractData(response), catchError(error => this.handleErrorObservable(error)))); } /** * @param {?} projectId * @param {?} chartName * @return {?} */ deleteHelmChart(projectId, chartName) { if (!chartName) { observableThrowError("Bad argument"); } return this.http .delete(`${this.config.helmChartEndpoint}/${projectId}/charts/${chartName}`) .pipe(map(response => { return this.extractData(response); })) .pipe(catchError(this.handleErrorObservable)); } /** * @param {?} projectName * @param {?} chartName * @return {?} */ getChartVersions(projectName, chartName) { return this.http.get(`${this.config.helmChartEndpoint}/${projectName}/charts/${chartName}`, HTTP_GET_OPTIONS) .pipe(map(response => this.extractData(response)), catchError(this.handleErrorObservable)); } /** * @param {?} projectName * @param {?} chartName * @param {?} version * @return {?} */ deleteChartVersion(projectName, chartName, version) { return this.http.delete(`${this.config.helmChartEndpoint}/${projectName}/charts/${chartName}/${version}`, HTTP_JSON_OPTIONS) .pipe(map(response => { return this.extractData(response); })) .pipe(catchError(this.handleErrorObservable)); } /** * @param {?} projectName * @param {?} chartName * @param {?} version * @return {?} */ getChartDetail(projectName, chartName, version) { return this.http.get(`${this.config.helmChartEndpoint}/${projectName}/charts/${chartName}/${version}`) .pipe(map(response => { return this.extractData(response); })) .pipe(catchError(this.handleErrorObservable)); } /** * @param {?} projectName * @param {?} filename * @return {?} */ downloadChart(projectName, filename) { return this.http.get(`${this.config.downloadChartEndpoint}/${projectName}/${filename}`, { responseType: ResponseContentType.Blob, }) .pipe(map(response => { return { filename: filename.split('/')[1], data: response.blob() }; })) .pipe(catchError(this.handleErrorObservable)); } /** * @param {?} projectName * @param {?=} chart * @param {?=} prov * @return {?} */ uploadChart(projectName, chart, prov) { /** @type {?} */ let formData = new FormData(); /** @type {?} */ let uploadURL = `${this.config.helmChartEndpoint}/${projectName}/charts`; if (chart) { formData.append('chart', chart); } if (prov) { formData.append('prov', prov); if (!chart) { uploadURL = `${this.config.helmChartEndpoint}/${projectName}/prov`; } } return this.http.post(uploadURL, formData, { responseType: ResponseContentType.Json }) .pipe(map(response => this.extractData(response))) .pipe(catchError(this.handleErrorObservable)); } } HelmChartDefaultService.decorators = [ { type: Injectable } ]; /** @nocollapse */ HelmChartDefaultService.ctorParameters = () => [ { type: Http }, { type: undefined, decorators: [{ type: Inject, args: [SERVICE_CONFIG,] }] } ]; if (false) { /** @type {?} */ HelmChartDefaultService.prototype.http; /** @type {?} */ HelmChartDefaultService.prototype.config; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVsbS1jaGFydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhhcmJvci91aS8iLCJzb3VyY2VzIjpbInNyYy9zZXJ2aWNlL2hlbG0tY2hhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUFDLFVBQVUsSUFBSSxvQkFBb0IsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFZLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLakQsT0FBTyxFQUFFLGNBQWMsRUFBa0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7QUFXL0QsTUFBTTtDQXlFTDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNRCxNQUFNLDhCQUErQixTQUFRLGdCQUFnQjs7Ozs7SUFDM0QsWUFDVSxNQUN3QixNQUFzQjtRQUV0RCxLQUFLLEVBQUUsQ0FBQztRQUhBLFNBQUksR0FBSixJQUFJO1FBQ29CLFdBQU0sR0FBTixNQUFNLENBQWdCO0tBR3ZEOzs7OztJQUVPLFdBQVcsQ0FBQyxHQUFhO1FBQy9CLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNyQixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDOzs7Ozs7SUFHbEIscUJBQXFCLENBQUMsS0FBd0I7UUFDcEQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLENB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SSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ2pELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQzs7OztZQXBIakQsVUFBVTs7OztZQWhHRixJQUFJOzRDQW9HUixNQUFNLFNBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHt0aHJvd0Vycm9yIGFzIG9ic2VydmFibGVUaHJvd0Vycm9yLCAgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSHR0cCwgUmVzcG9uc2UsIFJlc3BvbnNlQ29udGVudFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvaHR0cFwiO1xuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcblxuaW1wb3J0IHsgUmVxdWVzdFF1ZXJ5UGFyYW1zIH0gZnJvbSBcIi4vUmVxdWVzdFF1ZXJ5UGFyYW1zXCI7XG5pbXBvcnQgeyBIZWxtQ2hhcnRJdGVtLCBIZWxtQ2hhcnRWZXJzaW9uLCBIZWxtQ2hhcnREZXRhaWwgfSBmcm9tIFwiLi9pbnRlcmZhY2VcIjtcbmltcG9ydCB7IFNFUlZJQ0VfQ09ORklHLCBJU2VydmljZUNvbmZpZyB9IGZyb20gXCIuLi9zZXJ2aWNlLmNvbmZpZ1wiO1xuaW1wb3J0IHsgSFRUUF9KU09OX09QVElPTlMsIEhUVFBfR0VUX09QVElPTlMgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuXG4vKipcbiAqIERlZmluZSBzZXJ2aWNlIG1ldGhvZHMgZm9yIGhhbmRsaW5nIHRoZSBoZWxtY2hhcnQgcmVsYXRlZCB0aGluZ3MuXG4gKiBMb29zZSBjb3VwbGUgd2l0aCBwcm9qZWN0IG1vZHVsZS5cbiAqXG4gKipcbiAqIEBhYnN0cmFjdFxuICogY2xhc3MgUmVwb3NpdG9yeVNlcnZpY2VcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEhlbG1DaGFydFNlcnZpY2Uge1xuICAvKipcbiAgICogR2V0IGFsbCBoZWxtIGNoYXJ0cyBpbmZvXG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHByb2plY3ROYW1lIElkIG9mIHRoZSBwcm9qZWN0XG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHF1ZXJ5UGFyYW1zIG9wdGlvbnMgcGFyYW1zIGZvciBxdWVyeSBkYXRhXG4gICAqL1xuICBhYnN0cmFjdCBnZXRIZWxtQ2hhcnRzKFxuICAgIHByb2plY3ROYW1lOiBzdHJpbmcsXG4gICAgcXVlcnlQYXJhbXM/OiBSZXF1ZXN0UXVlcnlQYXJhbXNcbiAgKTogT2JzZXJ2YWJsZTxIZWxtQ2hhcnRJdGVtW10+O1xuXG4gIC8qKlxuICAgKiBEZWxldGUgYW4gaGVsbWNoYXJ0XG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHByb2plY3RJZCBJZCBvZiB0aGUgcHJvamVjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSBjaGFydElkIElEIG9mIGhlbG1DaGFydCBpbiB0aGlzIHNwZWNpZmljIHByb2plY3RcbiAgICovXG4gIGFic3RyYWN0IGRlbGV0ZUhlbG1DaGFydChwcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZywgY2hhcnROYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIHZlcnNpb25zIG9mIGhlbG1jaGFydFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSBwcm9qZWN0TmFtZSBJZCBvZiB0aGUgcHJvamVjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSBjaGFydE5hbWUgSUQgb2YgdGhlIGhlbG0gY2hhcnRcbiAgICogICoqIGRlcHJlY2F0ZWQgcGFyYW0gcXVlcnlQYXJhbXMgb3B0aW9uIHBhcmFtcyBmb3IgcXVlcnlcbiAgICovXG4gIGFic3RyYWN0IGdldENoYXJ0VmVyc2lvbnMoXG4gICAgcHJvamVjdE5hbWU6IHN0cmluZyxcbiAgICBjaGFydE5hbWU6IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxIZWxtQ2hhcnRWZXJzaW9uW10+O1xuXG4gIC8qKlxuICAgKiBEZWxldGUgYSB2ZXJzaW9uIG9mIGhlbG1jaGFydFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSBwcm9qZWN0TmFtZSBJRCBvZiB0aGUgcHJvamVjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSBjaGFydE5hbWUgSUQgb2YgdGhlIGNoYXJ0IHlvdSB3YW50IHRvIGRlbGV0ZVxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB2ZXJzaW9uIG5hbWUgb2YgdGhlIHZlcnNpb25cbiAgICovXG4gIGFic3RyYWN0IGRlbGV0ZUNoYXJ0VmVyc2lvbihwcm9qZWN0TmFtZTogc3RyaW5nLCBjaGFydE5hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFsbCBkZXRhaWxzIG9mIGFuIGhlbG1jaGFydFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSBwcm9qZWN0TmFtZSBJRCBvZiB0aGUgcHJvamVjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSBjaGFydG5hbWUgSUQgb2YgdGhlIGNoYXJ0XG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHZlcnNpb24gbmFtZSBvZiB0aGUgY2hhcnQncyB2ZXJzaW9uXG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHF1ZXJ5UGFyYW1zIG9wdGlvbnNcbiAgICovXG4gIGFic3RyYWN0IGdldENoYXJ0RGV0YWlsKFxuICAgIHByb2plY3ROYW1lOiBzdHJpbmcsXG4gICAgY2hhcnRuYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPEhlbG1DaGFydERldGFpbD47XG5cbiAgLyoqXG4gICAqIERvd25sb2FkIGFuIHNwZWNpZmljIHZlcmlzb25cbiAgICogICoqIGRlcHJlY2F0ZWQgcGFyYW0gcHJvamVjdE5hbWUgSUQgb2YgdGhlIHByb2plY3RcbiAgICogICoqIGRlcHJlY2F0ZWQgcGFyYW0gZmlsZW5hbWUgSUQgb2YgdGhlIGhlbG0gY2hhcnRcbiAgICogICoqIGRlcHJlY2F0ZWQgcGFyYW0gdmVyc2lvbiBOYW1lIG9mIHZlcnNpb25cbiAgICogICoqIGRlcHJlY2F0ZWQgcGFyYW0gcXVlcnlQYXJhbXMgb3B0aW9uc1xuICAgKi9cbiAgYWJzdHJhY3QgZG93bmxvYWRDaGFydChcbiAgICBwcm9qZWN0TmFtZTogc3RyaW5nLFxuICAgIGZpbGVuYW1lOiBzdHJpbmcsXG4gICk6IE9ic2VydmFibGU8YW55PjtcblxuICAvKipcbiAgICogVXBsb2FkIGNoYXJ0IGFuZCBwcm92IGZpbGVzIHRvIGNoYXJ0bXVzZWFtXG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHByb2plY3ROYW1lIE5hbWUgb2YgdGhlIHByb2plY3RcbiAgICogICoqIGRlcHJlY2F0ZWQgcGFyYW0gY2hhcnQgY2hhcnQgZmlsZVxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSBwcm92IHByb3YgZmlsZVxuICAgKi9cbiAgYWJzdHJhY3QgdXBsb2FkQ2hhcnQgKFxuICAgIHByb2plY3ROYW1lOiBzdHJpbmcsXG4gICAgY2hhcnQ6IEZpbGUsXG4gICAgcHJvdjogRmlsZVxuICApOiBPYnNlcnZhYmxlPGFueT47XG59XG5cbi8qKlxuICogSW1wbGVtZW50IGRlZmF1bHQgc2VydmljZSBmb3IgaGVsbSBjaGFydC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEhlbG1DaGFydERlZmF1bHRTZXJ2aWNlIGV4dGVuZHMgSGVsbUNoYXJ0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cCxcbiAgICBASW5qZWN0KFNFUlZJQ0VfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogSVNlcnZpY2VDb25maWdcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdERhdGEocmVzOiBSZXNwb25zZSkge1xuICAgIGlmIChyZXMudGV4dCgpID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiByZXMuanNvbigpIHx8IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvck9ic2VydmFibGUoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIG9ic2VydmFibGVUaHJvd0Vycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xuICB9XG5cbiAgcHVibGljIGdldEhlbG1DaGFydHMoXG4gICAgcHJvamVjdE5hbWU6IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxIZWxtQ2hhcnRJdGVtW10+IHtcbiAgICBpZiAoIXByb2plY3ROYW1lKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZVRocm93RXJyb3IoXCJCYWQgYXJndW1lbnQsIE5vIHByb2plY3QgaWQgdG8gZ2V0IGhlbG0gY2hhcnRzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoYCR7dGhpcy5jb25maWcuaGVsbUNoYXJ0RW5kcG9pbnR9LyR7cHJvamVjdE5hbWV9L2NoYXJ0c2AsIEhUVFBfR0VUX09QVElPTlMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHRoaXMuZXh0cmFjdERhdGEocmVzcG9uc2UpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlRXJyb3JPYnNlcnZhYmxlKGVycm9yKSlcbiAgICAgICkpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUhlbG1DaGFydChwcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZywgY2hhcnROYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghY2hhcnROYW1lKSB7XG4gICAgICBvYnNlcnZhYmxlVGhyb3dFcnJvcihcIkJhZCBhcmd1bWVudFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZGVsZXRlKGAke3RoaXMuY29uZmlnLmhlbG1DaGFydEVuZHBvaW50fS8ke3Byb2plY3RJZH0vY2hhcnRzLyR7Y2hhcnROYW1lfWApXG4gICAgICAucGlwZShtYXAocmVzcG9uc2UgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YShyZXNwb25zZSk7XG4gICAgICB9KSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvck9ic2VydmFibGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGFydFZlcnNpb25zKFxuICAgIHByb2plY3ROYW1lOiBzdHJpbmcsXG4gICAgY2hhcnROYW1lOiBzdHJpbmcsXG4gICk6IE9ic2VydmFibGU8SGVsbUNoYXJ0VmVyc2lvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5jb25maWcuaGVsbUNoYXJ0RW5kcG9pbnR9LyR7cHJvamVjdE5hbWV9L2NoYXJ0cy8ke2NoYXJ0TmFtZX1gLCBIVFRQX0dFVF9PUFRJT05TKVxuICAgIC5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHRoaXMuZXh0cmFjdERhdGEocmVzcG9uc2UpKSxcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvck9ic2VydmFibGUpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVDaGFydFZlcnNpb24ocHJvamVjdE5hbWU6IHN0cmluZywgY2hhcnROYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5jb25maWcuaGVsbUNoYXJ0RW5kcG9pbnR9LyR7cHJvamVjdE5hbWV9L2NoYXJ0cy8ke2NoYXJ0TmFtZX0vJHt2ZXJzaW9ufWAsIEhUVFBfSlNPTl9PUFRJT05TKVxuICAgIC5waXBlKG1hcChyZXNwb25zZSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YShyZXNwb25zZSk7XG4gICAgfSkpXG4gICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yT2JzZXJ2YWJsZSkpO1xuICB9XG5cbiAgcHVibGljIGdldENoYXJ0RGV0YWlsIChcbiAgICBwcm9qZWN0TmFtZTogc3RyaW5nLFxuICAgIGNoYXJ0TmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxIZWxtQ2hhcnREZXRhaWw+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmNvbmZpZy5oZWxtQ2hhcnRFbmRwb2ludH0vJHtwcm9qZWN0TmFtZX0vY2hhcnRzLyR7Y2hhcnROYW1lfS8ke3ZlcnNpb259YClcbiAgICAucGlwZShtYXAocmVzcG9uc2UgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdERhdGEocmVzcG9uc2UpO1xuICAgIH0pKVxuICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvck9ic2VydmFibGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZENoYXJ0KFxuICAgIHByb2plY3ROYW1lOiBzdHJpbmcsXG4gICAgZmlsZW5hbWU6IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmNvbmZpZy5kb3dubG9hZENoYXJ0RW5kcG9pbnR9LyR7cHJvamVjdE5hbWV9LyR7ZmlsZW5hbWV9YCwge1xuICAgICAgcmVzcG9uc2VUeXBlOiBSZXNwb25zZUNvbnRlbnRUeXBlLkJsb2IsXG4gICAgfSlcbiAgICAucGlwZShtYXAocmVzcG9uc2UgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLnNwbGl0KCcvJylbMV0sXG4gICAgICAgIGRhdGE6IHJlc3BvbnNlLmJsb2IoKVxuICAgICAgfTtcbiAgICB9KSlcbiAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3JPYnNlcnZhYmxlKSk7XG4gIH1cblxuXG4gIHB1YmxpYyB1cGxvYWRDaGFydChcbiAgICBwcm9qZWN0TmFtZTogc3RyaW5nLFxuICAgIGNoYXJ0PzogRmlsZSxcbiAgICBwcm92PzogRmlsZVxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGxldCB1cGxvYWRVUkwgPSBgJHt0aGlzLmNvbmZpZy5oZWxtQ2hhcnRFbmRwb2ludH0vJHtwcm9qZWN0TmFtZX0vY2hhcnRzYDtcbiAgICBpZiAoY2hhcnQpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY2hhcnQnLCBjaGFydCk7XG4gICAgfVxuICAgIGlmIChwcm92KSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3Byb3YnLCBwcm92KTtcbiAgICAgIGlmICghY2hhcnQpIHtcbiAgICAgICAgdXBsb2FkVVJMID0gYCR7dGhpcy5jb25maWcuaGVsbUNoYXJ0RW5kcG9pbnR9LyR7cHJvamVjdE5hbWV9L3Byb3ZgO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXBsb2FkVVJMLCBmb3JtRGF0YSwge1xuICAgICAgcmVzcG9uc2VUeXBlOiBSZXNwb25zZUNvbnRlbnRUeXBlLkpzb25cbiAgICB9KVxuICAgIC5waXBlKG1hcChyZXNwb25zZSA9PiB0aGlzLmV4dHJhY3REYXRhKHJlc3BvbnNlKSkpXG4gICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yT2JzZXJ2YWJsZSkpO1xuICB9XG59XG4iXX0=