UNPKG

@versatiledatakit/data-pipelines

Version:

Data Pipelines help Data Engineers develop, deploy, run, and manage data processing workloads (called 'Data Job')

117 lines 13.6 kB
/* * Copyright 2023-2025 Broadcom * SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable @typescript-eslint/naming-convention */ import { Inject, Injectable } from '@angular/core'; import { gql, InMemoryCache } from '@apollo/client/core'; import { TaurusBaseApiService } from '@versatiledatakit/shared'; import { DATA_PIPELINES_CONFIGS } from '../model'; import * as i0 from "@angular/core"; import * as i1 from "apollo-angular"; import * as i2 from "apollo-angular/http"; /** * ** Data Jobs Service build on top of Apollo gql client. */ export class DataJobsBaseApiService extends TaurusBaseApiService { /** * ** Constructor. */ constructor(dataPipelinesConfig, apollo, httpLink) { super(DataJobsBaseApiService.CLASS_NAME); this.dataPipelinesConfig = dataPipelinesConfig; this.apollo = apollo; this.httpLink = httpLink; this.registerErrorCodes(DataJobsBaseApiService); } /** * ** Get all DataJobs for provided OwnerTeam and load data based on provided gqlQuery. */ getJobs(ownerTeam, gqlQuery, variables) { return this.getApolloClientFor(ownerTeam).query({ query: gql ` ${gqlQuery} `, variables }); } /** * ** Create Apollo watcher for gqlQuery. */ watchForJobs(ownerTeam, gqlQuery, variables) { return this.getApolloClientFor(ownerTeam).watchQuery({ query: gql ` ${gqlQuery} `, variables }); } /** * ** Get all DataJob Executions for provided OwnerTeam and load data based on provided gqlQuery. */ getExecutions(ownerTeam, gqlQuery, variables) { return this.getApolloClientFor(ownerTeam).query({ query: gql ` ${gqlQuery} `, variables }); } getApolloClientFor(ownerTeam) { if (!this.apollo.use(ownerTeam)) { this.apollo.createNamed(ownerTeam, { cache: new InMemoryCache({ typePolicies: { Query: { fields: { jobs: (_existing, _options) => { return {}; }, executions: (_existing, _options) => { return {}; } } } } }), link: this.httpLink.create({ uri: `${this._resolvePipelinesServiceUrl()}/data-jobs/for-team/${ownerTeam}/jobs`, method: DataJobsBaseApiService.APOLLO_METHOD }), defaultOptions: DataJobsBaseApiService.APOLLO_DEFAULT_OPTIONS }); } return this.apollo.use(ownerTeam); } _resolvePipelinesServiceUrl() { return this.dataPipelinesConfig?.resourceServer?.getUrl ? this.dataPipelinesConfig.resourceServer.getUrl() : ''; } } /** * @inheritDoc */ DataJobsBaseApiService.CLASS_NAME = 'DataJobsBaseApiService'; /** * @inheritDoc */ DataJobsBaseApiService.PUBLIC_NAME = 'Data-Pipelines-Service'; DataJobsBaseApiService.APOLLO_METHOD = 'GET'; DataJobsBaseApiService.APOLLO_DEFAULT_OPTIONS = { watchQuery: { fetchPolicy: 'no-cache', errorPolicy: 'all' }, query: { fetchPolicy: 'no-cache', errorPolicy: 'all' } }; DataJobsBaseApiService.ɵfac = function DataJobsBaseApiService_Factory(t) { return new (t || DataJobsBaseApiService)(i0.ɵɵinject(DATA_PIPELINES_CONFIGS), i0.ɵɵinject(i1.Apollo), i0.ɵɵinject(i2.HttpLink)); }; DataJobsBaseApiService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DataJobsBaseApiService, factory: DataJobsBaseApiService.ɵfac }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DataJobsBaseApiService, [{ type: Injectable }], function () { return [{ type: undefined, decorators: [{ type: Inject, args: [DATA_PIPELINES_CONFIGS] }] }, { type: i1.Apollo }, { type: i2.HttpLink }]; }, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1qb2JzLWJhc2UuYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLXBpcGVsaW5lcy9zcmMvbGliL3NlcnZpY2VzL2RhdGEtam9icy1iYXNlLmFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILHlEQUF5RDtBQUV6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUluRCxPQUFPLEVBQXFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUs1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRSxPQUFPLEVBQ0gsc0JBQXNCLEVBT3pCLE1BQU0sVUFBVSxDQUFDOzs7O0FBRWxCOztHQUVHO0FBRUgsTUFBTSxPQUFPLHNCQUF1QixTQUFRLG9CQUE0QztJQXVCcEY7O09BRUc7SUFDSCxZQUNxRCxtQkFBd0MsRUFDeEUsTUFBYyxFQUNkLFFBQWtCO1FBRW5DLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUpRLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFJbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLFNBQWlCLEVBQUUsUUFBZ0IsRUFBRSxTQUE4QjtRQUN2RSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDNUMsS0FBSyxFQUFFLEdBQUcsQ0FBQTtrQkFDSixRQUFRO2FBQ2I7WUFDRCxTQUFTO1NBQ1osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLFNBQWlCLEVBQUUsUUFBZ0IsRUFBRSxTQUE4QjtRQUM1RSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFDakQsS0FBSyxFQUFFLEdBQUcsQ0FBQTtrQkFDSixRQUFRO2FBQ2I7WUFDRCxTQUFTO1NBQ1osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUNULFNBQWlCLEVBQ2pCLFFBQWdCLEVBQ2hCLFNBQXdDO1FBRXhDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM1QyxLQUFLLEVBQUUsR0FBRyxDQUFBO2tCQUNKLFFBQVE7YUFDYjtZQUNELFNBQVM7U0FDWixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsU0FBaUI7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtnQkFDL0IsS0FBSyxFQUFFLElBQUksYUFBYSxDQUFDO29CQUNyQixZQUFZLEVBQUU7d0JBQ1YsS0FBSyxFQUFFOzRCQUNILE1BQU0sRUFBRTtnQ0FDSixJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7b0NBQzFCLE9BQU8sRUFBRSxDQUFDO2dDQUNkLENBQUM7Z0NBQ0QsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFO29DQUNoQyxPQUFPLEVBQUUsQ0FBQztnQ0FDZCxDQUFDOzZCQUNKO3lCQUNKO3FCQUNKO2lCQUNKLENBQUM7Z0JBQ0YsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO29CQUN2QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsdUJBQXVCLFNBQVMsT0FBTztvQkFDakYsTUFBTSxFQUFFLHNCQUFzQixDQUFDLGFBQWE7aUJBQy9DLENBQUM7Z0JBQ0YsY0FBYyxFQUFFLHNCQUFzQixDQUFDLHNCQUFzQjthQUNoRSxDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUF3QixDQUFDO0lBQzdELENBQUM7SUFFTywyQkFBMkI7UUFDL0IsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BILENBQUM7O0FBekdEOztHQUVHO0FBQ3NCLGlDQUFVLEdBQVcsd0JBQXlCLENBQUE7QUFFdkU7O0dBRUc7QUFDc0Isa0NBQVcsR0FBVyx3QkFBeUIsQ0FBQTtBQUVoRCxvQ0FBYSxHQUFHLEtBQU0sQ0FBQTtBQUN0Qiw2Q0FBc0IsR0FBbUI7SUFDN0QsVUFBVSxFQUFFO1FBQ1IsV0FBVyxFQUFFLFVBQVU7UUFDdkIsV0FBVyxFQUFFLEtBQUs7S0FDckI7SUFDRCxLQUFLLEVBQUU7UUFDSCxXQUFXLEVBQUUsVUFBVTtRQUN2QixXQUFXLEVBQUUsS0FBSztLQUNyQjtDQUNILENBQUE7NEZBckJPLHNCQUFzQixjQTJCbkIsc0JBQXNCOzRFQTNCekIsc0JBQXNCLFdBQXRCLHNCQUFzQjt1RkFBdEIsc0JBQXNCO2NBRGxDLFVBQVU7O3NCQTRCRixNQUFNO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMy0yMDI1IEJyb2FkY29tXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcG9sbG9RdWVyeVJlc3VsdCwgRGVmYXVsdE9wdGlvbnMsIGdxbCwgSW5NZW1vcnlDYWNoZSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuXG5pbXBvcnQgeyBBcG9sbG8sIEFwb2xsb0Jhc2UsIFF1ZXJ5UmVmIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHsgSHR0cExpbmsgfSBmcm9tICdhcG9sbG8tYW5ndWxhci9odHRwJztcblxuaW1wb3J0IHsgVGF1cnVzQmFzZUFwaVNlcnZpY2UgfSBmcm9tICdAdmVyc2F0aWxlZGF0YWtpdC9zaGFyZWQnO1xuXG5pbXBvcnQge1xuICAgIERBVEFfUElQRUxJTkVTX0NPTkZJR1MsXG4gICAgRGF0YUpvYixcbiAgICBEYXRhSm9iRXhlY3V0aW9uc1BhZ2UsXG4gICAgRGF0YUpvYkV4ZWN1dGlvbnNSZXFWYXJpYWJsZXMsXG4gICAgRGF0YUpvYlBhZ2UsXG4gICAgRGF0YUpvYlJlcVZhcmlhYmxlcyxcbiAgICBEYXRhUGlwZWxpbmVzQ29uZmlnXG59IGZyb20gJy4uL21vZGVsJztcblxuLyoqXG4gKiAqKiBEYXRhIEpvYnMgU2VydmljZSBidWlsZCBvbiB0b3Agb2YgQXBvbGxvIGdxbCBjbGllbnQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhSm9ic0Jhc2VBcGlTZXJ2aWNlIGV4dGVuZHMgVGF1cnVzQmFzZUFwaVNlcnZpY2U8RGF0YUpvYnNCYXNlQXBpU2VydmljZT4ge1xuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IENMQVNTX05BTUU6IHN0cmluZyA9ICdEYXRhSm9ic0Jhc2VBcGlTZXJ2aWNlJztcblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IFBVQkxJQ19OQU1FOiBzdHJpbmcgPSAnRGF0YS1QaXBlbGluZXMtU2VydmljZSc7XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBBUE9MTE9fTUVUSE9EID0gJ0dFVCc7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQVBPTExPX0RFRkFVTFRfT1BUSU9OUzogRGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICAgIHdhdGNoUXVlcnk6IHtcbiAgICAgICAgICAgIGZldGNoUG9saWN5OiAnbm8tY2FjaGUnLFxuICAgICAgICAgICAgZXJyb3JQb2xpY3k6ICdhbGwnXG4gICAgICAgIH0sXG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICBmZXRjaFBvbGljeTogJ25vLWNhY2hlJyxcbiAgICAgICAgICAgIGVycm9yUG9saWN5OiAnYWxsJ1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICoqIENvbnN0cnVjdG9yLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KERBVEFfUElQRUxJTkVTX0NPTkZJR1MpIHByaXZhdGUgcmVhZG9ubHkgZGF0YVBpcGVsaW5lc0NvbmZpZzogRGF0YVBpcGVsaW5lc0NvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhcG9sbG86IEFwb2xsbyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwTGluazogSHR0cExpbmtcbiAgICApIHtcbiAgICAgICAgc3VwZXIoRGF0YUpvYnNCYXNlQXBpU2VydmljZS5DTEFTU19OQU1FKTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyRXJyb3JDb2RlcyhEYXRhSm9ic0Jhc2VBcGlTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAqKiBHZXQgYWxsIERhdGFKb2JzIGZvciBwcm92aWRlZCBPd25lclRlYW0gYW5kIGxvYWQgZGF0YSBiYXNlZCBvbiBwcm92aWRlZCBncWxRdWVyeS5cbiAgICAgKi9cbiAgICBnZXRKb2JzKG93bmVyVGVhbTogc3RyaW5nLCBncWxRdWVyeTogc3RyaW5nLCB2YXJpYWJsZXM6IERhdGFKb2JSZXFWYXJpYWJsZXMpOiBPYnNlcnZhYmxlPEFwb2xsb1F1ZXJ5UmVzdWx0PERhdGFKb2JQYWdlPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcG9sbG9DbGllbnRGb3Iob3duZXJUZWFtKS5xdWVyeSh7XG4gICAgICAgICAgICBxdWVyeTogZ3FsYFxuICAgICAgICAgICAgICAgICR7Z3FsUXVlcnl9XG4gICAgICAgICAgICBgLFxuICAgICAgICAgICAgdmFyaWFibGVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICoqIENyZWF0ZSBBcG9sbG8gd2F0Y2hlciBmb3IgZ3FsUXVlcnkuXG4gICAgICovXG4gICAgd2F0Y2hGb3JKb2JzKG93bmVyVGVhbTogc3RyaW5nLCBncWxRdWVyeTogc3RyaW5nLCB2YXJpYWJsZXM6IERhdGFKb2JSZXFWYXJpYWJsZXMpOiBRdWVyeVJlZjxEYXRhSm9iUGFnZSwgRGF0YUpvYlJlcVZhcmlhYmxlcz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcG9sbG9DbGllbnRGb3Iob3duZXJUZWFtKS53YXRjaFF1ZXJ5KHtcbiAgICAgICAgICAgIHF1ZXJ5OiBncWxgXG4gICAgICAgICAgICAgICAgJHtncWxRdWVyeX1cbiAgICAgICAgICAgIGAsXG4gICAgICAgICAgICB2YXJpYWJsZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogKiogR2V0IGFsbCBEYXRhSm9iIEV4ZWN1dGlvbnMgZm9yIHByb3ZpZGVkIE93bmVyVGVhbSBhbmQgbG9hZCBkYXRhIGJhc2VkIG9uIHByb3ZpZGVkIGdxbFF1ZXJ5LlxuICAgICAqL1xuICAgIGdldEV4ZWN1dGlvbnMoXG4gICAgICAgIG93bmVyVGVhbTogc3RyaW5nLFxuICAgICAgICBncWxRdWVyeTogc3RyaW5nLFxuICAgICAgICB2YXJpYWJsZXM6IERhdGFKb2JFeGVjdXRpb25zUmVxVmFyaWFibGVzXG4gICAgKTogT2JzZXJ2YWJsZTxBcG9sbG9RdWVyeVJlc3VsdDxEYXRhSm9iRXhlY3V0aW9uc1BhZ2U+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwb2xsb0NsaWVudEZvcihvd25lclRlYW0pLnF1ZXJ5KHtcbiAgICAgICAgICAgIHF1ZXJ5OiBncWxgXG4gICAgICAgICAgICAgICAgJHtncWxRdWVyeX1cbiAgICAgICAgICAgIGAsXG4gICAgICAgICAgICB2YXJpYWJsZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBcG9sbG9DbGllbnRGb3Iob3duZXJUZWFtOiBzdHJpbmcpOiBBcG9sbG9CYXNlPERhdGFKb2I+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFwb2xsby51c2Uob3duZXJUZWFtKSkge1xuICAgICAgICAgICAgdGhpcy5hcG9sbG8uY3JlYXRlTmFtZWQob3duZXJUZWFtLCB7XG4gICAgICAgICAgICAgICAgY2FjaGU6IG5ldyBJbk1lbW9yeUNhY2hlKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZVBvbGljaWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBRdWVyeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JzOiAoX2V4aXN0aW5nLCBfb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25zOiAoX2V4aXN0aW5nLCBfb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbGluazogdGhpcy5odHRwTGluay5jcmVhdGUoe1xuICAgICAgICAgICAgICAgICAgICB1cmk6IGAke3RoaXMuX3Jlc29sdmVQaXBlbGluZXNTZXJ2aWNlVXJsKCl9L2RhdGEtam9icy9mb3ItdGVhbS8ke293bmVyVGVhbX0vam9ic2AsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogRGF0YUpvYnNCYXNlQXBpU2VydmljZS5BUE9MTE9fTUVUSE9EXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVmYXVsdE9wdGlvbnM6IERhdGFKb2JzQmFzZUFwaVNlcnZpY2UuQVBPTExPX0RFRkFVTFRfT1BUSU9OU1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG8udXNlKG93bmVyVGVhbSkgYXMgQXBvbGxvQmFzZTxEYXRhSm9iPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlUGlwZWxpbmVzU2VydmljZVVybCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhUGlwZWxpbmVzQ29uZmlnPy5yZXNvdXJjZVNlcnZlcj8uZ2V0VXJsID8gdGhpcy5kYXRhUGlwZWxpbmVzQ29uZmlnLnJlc291cmNlU2VydmVyLmdldFVybCgpIDogJyc7XG4gICAgfVxufVxuIl19