UNPKG

@spartacus/core

Version:

Spartacus - the core framework

172 lines 24.3 kB
import { HttpParams } from '@angular/common/http'; import { Injectable, isDevMode, Optional } from '@angular/core'; import { StringTemplate } from '../../config/utils/string-template'; import { getContextParameterDefault } from '../../site-context/config/context-config-utils'; import { BASE_SITE_CONTEXT_ID } from '../../site-context/providers/context-ids'; import { HttpParamsURIEncoder } from '../../util/http-params-uri.encoder'; import { DEFAULT_SCOPE } from '../occ-models/occ-endpoints.model'; import { urlPathJoin } from '../utils/occ-url-util'; import * as i0 from "@angular/core"; import * as i1 from "../config/occ-config"; import * as i2 from "../../site-context/facade/base-site.service"; export class OccEndpointsService { constructor(config, baseSiteService) { this.config = config; this.baseSiteService = baseSiteService; if (this.baseSiteService) { this.baseSiteService .getActive() .subscribe((value) => (this._activeBaseSite = value)); } } get activeBaseSite() { var _a; return ((_a = this._activeBaseSite) !== null && _a !== void 0 ? _a : getContextParameterDefault(this.config, BASE_SITE_CONTEXT_ID)); } /** * Returns the value configured for a specific endpoint * * @param endpointKey the configuration key for the endpoint to return * @param scope endpoint configuration scope */ getRawEndpointValue(endpoint, scope) { const endpointValue = this.getEndpointForScope(endpoint, scope); return endpointValue; } /** * Returns true when the endpoint is configured * * @param endpointKey the configuration key for the endpoint to return * @param scope endpoint configuration scope */ isConfigured(endpoint, scope) { return !(typeof this.getEndpointFromConfig(endpoint, scope) === 'undefined'); } /** * Returns base OCC endpoint (baseUrl + prefix + baseSite) base on provided values * * @param baseUrlProperties Specify properties to not add to the url (baseUrl, prefix, baseSite) */ getBaseUrl(baseUrlProperties = { baseUrl: true, prefix: true, baseSite: true, }) { var _a, _b, _c, _d; const baseUrl = baseUrlProperties.baseUrl === false ? '' : (_d = (_c = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.backend) === null || _b === void 0 ? void 0 : _b.occ) === null || _c === void 0 ? void 0 : _c.baseUrl) !== null && _d !== void 0 ? _d : ''; const prefix = baseUrlProperties.prefix === false ? '' : this.getPrefix(); const baseSite = baseUrlProperties.baseSite === false ? '' : this.activeBaseSite; return urlPathJoin(baseUrl, prefix, baseSite); } /** * Returns a fully qualified OCC Url * * @param endpoint Name of the OCC endpoint key * @param attributes Dynamic attributes used to build the url * @param propertiesToOmit Specify properties to not add to the url (baseUrl, prefix, baseSite) */ buildUrl(endpoint, attributes, propertiesToOmit) { let url = this.getEndpointForScope(endpoint, attributes === null || attributes === void 0 ? void 0 : attributes.scope); if (attributes) { const { urlParams, queryParams } = attributes; if (urlParams) { url = StringTemplate.resolve(url, attributes.urlParams, true); } if (queryParams) { let httpParamsOptions = { encoder: new HttpParamsURIEncoder() }; if (url.includes('?')) { let queryParamsFromEndpoint; [url, queryParamsFromEndpoint] = url.split('?'); httpParamsOptions = Object.assign(Object.assign({}, httpParamsOptions), { fromString: queryParamsFromEndpoint }); } let httpParams = new HttpParams(httpParamsOptions); Object.keys(queryParams).forEach((key) => { const value = queryParams[key]; if (value !== undefined) { if (value === null) { httpParams = httpParams.delete(key); } else { httpParams = httpParams.set(key, value); } } }); const params = httpParams.toString(); if (params.length) { url += '?' + params; } } } return this.buildUrlFromEndpointString(url, propertiesToOmit); } getEndpointFromConfig(endpoint, scope) { var _a, _b; const endpointsConfig = (_b = (_a = this.config.backend) === null || _a === void 0 ? void 0 : _a.occ) === null || _b === void 0 ? void 0 : _b.endpoints; if (!endpointsConfig) { return undefined; } const endpointConfig = endpointsConfig[endpoint]; if (scope) { if (scope === DEFAULT_SCOPE && typeof endpointConfig === 'string') { return endpointConfig; } return endpointConfig === null || endpointConfig === void 0 ? void 0 : endpointConfig[scope]; } return typeof endpointConfig === 'string' ? endpointConfig : endpointConfig === null || endpointConfig === void 0 ? void 0 : endpointConfig[DEFAULT_SCOPE]; } // TODO: Can we reuse getEndpointFromConfig in this method? Should we change behavior of this function? getEndpointForScope(endpoint, scope) { var _a, _b; const endpointsConfig = (_b = (_a = this.config.backend) === null || _a === void 0 ? void 0 : _a.occ) === null || _b === void 0 ? void 0 : _b.endpoints; if (!Boolean(endpointsConfig)) { return ''; } const endpointConfig = endpointsConfig[endpoint]; if (scope) { if (endpointConfig === null || endpointConfig === void 0 ? void 0 : endpointConfig[scope]) { return endpointConfig === null || endpointConfig === void 0 ? void 0 : endpointConfig[scope]; } if (scope === DEFAULT_SCOPE && typeof endpointConfig === 'string') { return endpointConfig; } if (isDevMode()) { console.warn(`${endpoint} endpoint configuration missing for scope "${scope}"`); } } return ((typeof endpointConfig === 'string' ? endpointConfig : endpointConfig === null || endpointConfig === void 0 ? void 0 : endpointConfig[DEFAULT_SCOPE]) || endpoint); } /** * Add the base OCC url properties to the specified endpoint string * * @param endpointString String value for the url endpoint * @param propertiesToOmit Specify properties to not add to the url (baseUrl, prefix, baseSite) */ buildUrlFromEndpointString(endpointString, propertiesToOmit) { return urlPathJoin(this.getBaseUrl(propertiesToOmit), endpointString); } getPrefix() { var _a, _b, _c, _d, _e, _f, _g; if (((_c = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.backend) === null || _b === void 0 ? void 0 : _b.occ) === null || _c === void 0 ? void 0 : _c.prefix) && !this.config.backend.occ.prefix.startsWith('/')) { return '/' + this.config.backend.occ.prefix; } return (_g = (_f = (_e = (_d = this.config) === null || _d === void 0 ? void 0 : _d.backend) === null || _e === void 0 ? void 0 : _e.occ) === null || _f === void 0 ? void 0 : _f.prefix) !== null && _g !== void 0 ? _g : ''; } } OccEndpointsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OccEndpointsService, deps: [{ token: i1.OccConfig }, { token: i2.BaseSiteService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); OccEndpointsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OccEndpointsService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OccEndpointsService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.OccConfig }, { type: i2.BaseSiteService, decorators: [{ type: Optional }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NjLWVuZHBvaW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvb2NjL3NlcnZpY2VzL29jYy1lbmRwb2ludHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBaUJwRCxNQUFNLE9BQU8sbUJBQW1CO0lBVTlCLFlBQ1UsTUFBaUIsRUFDTCxlQUFnQztRQUQ1QyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ0wsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBRXBELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZTtpQkFDakIsU0FBUyxFQUFFO2lCQUNYLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBaEJELElBQVksY0FBYzs7UUFDeEIsT0FBTyxDQUNMLE1BQUEsSUFBSSxDQUFDLGVBQWUsbUNBQ3BCLDBCQUEwQixDQUFDLElBQUksQ0FB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TSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFDL0M7WUFDQSxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxNQUFBLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLE9BQU8sMENBQUUsR0FBRywwQ0FBRSxNQUFNLG1DQUFJLEVBQUUsQ0FBQztJQUNqRCxDQUFDOztnSEF2TVUsbUJBQW1CO29IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFhSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGlzRGV2TW9kZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0cmluZ1RlbXBsYXRlIH0gZnJvbSAnLi4vLi4vY29uZmlnL3V0aWxzL3N0cmluZy10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBnZXRDb250ZXh0UGFyYW1ldGVyRGVmYXVsdCB9IGZyb20gJy4uLy4uL3NpdGUtY29udGV4dC9jb25maWcvY29udGV4dC1jb25maWctdXRpbHMnO1xuaW1wb3J0IHsgQmFzZVNpdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2l0ZS1jb250ZXh0L2ZhY2FkZS9iYXNlLXNpdGUuc2VydmljZSc7XG5pbXBvcnQgeyBCQVNFX1NJVEVfQ09OVEVYVF9JRCB9IGZyb20gJy4uLy4uL3NpdGUtY29udGV4dC9wcm92aWRlcnMvY29udGV4dC1pZHMnO1xuaW1wb3J0IHsgSHR0cFBhcmFtc1VSSUVuY29kZXIgfSBmcm9tICcuLi8uLi91dGlsL2h0dHAtcGFyYW1zLXVyaS5lbmNvZGVyJztcbmltcG9ydCB7IE9jY0NvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9vY2MtY29uZmlnJztcbmltcG9ydCB7IERFRkFVTFRfU0NPUEUgfSBmcm9tICcuLi9vY2MtbW9kZWxzL29jYy1lbmRwb2ludHMubW9kZWwnO1xuaW1wb3J0IHsgdXJsUGF0aEpvaW4gfSBmcm9tICcuLi91dGlscy9vY2MtdXJsLXV0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VPY2NVcmxQcm9wZXJ0aWVzIHtcbiAgYmFzZVVybD86IGJvb2xlYW47XG4gIHByZWZpeD86IGJvb2xlYW47XG4gIGJhc2VTaXRlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljQXR0cmlidXRlcyB7XG4gIHVybFBhcmFtcz86IG9iamVjdDtcbiAgcXVlcnlQYXJhbXM/OiBvYmplY3Q7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgT2NjRW5kcG9pbnRzU2VydmljZSB7XG4gIHByaXZhdGUgX2FjdGl2ZUJhc2VTaXRlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBnZXQgYWN0aXZlQmFzZVNpdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fYWN0aXZlQmFzZVNpdGUgPz9cbiAgICAgIGdldENvbnRleHRQYXJhbWV0ZXJEZWZhdWx0KHRoaXMuY29uZmlnLCBCQVNFX1NJVEVfQ09OVEVYVF9JRClcbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWc6IE9jY0NvbmZpZyxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGJhc2VTaXRlU2VydmljZTogQmFzZVNpdGVTZXJ2aWNlXG4gICkge1xuICAgIGlmICh0aGlzLmJhc2VTaXRlU2VydmljZSkge1xuICAgICAgdGhpcy5iYXNlU2l0ZVNlcnZpY2VcbiAgICAgICAgLmdldEFjdGl2ZSgpXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiAodGhpcy5fYWN0aXZlQmFzZVNpdGUgPSB2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBjb25maWd1cmVkIGZvciBhIHNwZWNpZmljIGVuZHBvaW50XG4gICAqXG4gICAqIEBwYXJhbSBlbmRwb2ludEtleSB0aGUgY29uZmlndXJhdGlvbiBrZXkgZm9yIHRoZSBlbmRwb2ludCB0byByZXR1cm5cbiAgICogQHBhcmFtIHNjb3BlIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gc2NvcGVcbiAgICovXG4gIGdldFJhd0VuZHBvaW50VmFsdWUoZW5kcG9pbnQ6IHN0cmluZywgc2NvcGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVuZHBvaW50VmFsdWUgPSB0aGlzLmdldEVuZHBvaW50Rm9yU2NvcGUoZW5kcG9pbnQsIHNjb3BlKTtcblxuICAgIHJldHVybiBlbmRwb2ludFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBlbmRwb2ludCBpcyBjb25maWd1cmVkXG4gICAqXG4gICAqIEBwYXJhbSBlbmRwb2ludEtleSB0aGUgY29uZmlndXJhdGlvbiBrZXkgZm9yIHRoZSBlbmRwb2ludCB0byByZXR1cm5cbiAgICogQHBhcmFtIHNjb3BlIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gc2NvcGVcbiAgICovXG4gIGlzQ29uZmlndXJlZChlbmRwb2ludDogc3RyaW5nLCBzY29wZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKFxuICAgICAgdHlwZW9mIHRoaXMuZ2V0RW5kcG9pbnRGcm9tQ29uZmlnKGVuZHBvaW50LCBzY29wZSkgPT09ICd1bmRlZmluZWQnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGJhc2UgT0NDIGVuZHBvaW50IChiYXNlVXJsICsgcHJlZml4ICsgYmFzZVNpdGUpIGJhc2Ugb24gcHJvdmlkZWQgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSBiYXNlVXJsUHJvcGVydGllcyBTcGVjaWZ5IHByb3BlcnRpZXMgdG8gbm90IGFkZCB0byB0aGUgdXJsIChiYXNlVXJsLCBwcmVmaXgsIGJhc2VTaXRlKVxuICAgKi9cbiAgZ2V0QmFzZVVybChcbiAgICBiYXNlVXJsUHJvcGVydGllczogQmFzZU9jY1VybFByb3BlcnRpZXMgPSB7XG4gICAgICBiYXNlVXJsOiB0cnVlLFxuICAgICAgcHJlZml4OiB0cnVlLFxuICAgICAgYmFzZVNpdGU6IHRydWUsXG4gICAgfVxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPVxuICAgICAgYmFzZVVybFByb3BlcnRpZXMuYmFzZVVybCA9PT0gZmFsc2VcbiAgICAgICAgPyAnJ1xuICAgICAgICA6IHRoaXMuY29uZmlnPy5iYWNrZW5kPy5vY2M/LmJhc2VVcmwgPz8gJyc7XG4gICAgY29uc3QgcHJlZml4ID0gYmFzZVVybFByb3BlcnRpZXMucHJlZml4ID09PSBmYWxzZSA/ICcnIDogdGhpcy5nZXRQcmVmaXgoKTtcbiAgICBjb25zdCBiYXNlU2l0ZSA9XG4gICAgICBiYXNlVXJsUHJvcGVydGllcy5iYXNlU2l0ZSA9PT0gZmFsc2UgPyAnJyA6IHRoaXMuYWN0aXZlQmFzZVNpdGU7XG5cbiAgICByZXR1cm4gdXJsUGF0aEpvaW4oYmFzZVVybCwgcHJlZml4LCBiYXNlU2l0ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGZ1bGx5IHF1YWxpZmllZCBPQ0MgVXJsXG4gICAqXG4gICAqIEBwYXJhbSBlbmRwb2ludCBOYW1lIG9mIHRoZSBPQ0MgZW5kcG9pbnQga2V5XG4gICAqIEBwYXJhbSBhdHRyaWJ1dGVzIER5bmFtaWMgYXR0cmlidXRlcyB1c2VkIHRvIGJ1aWxkIHRoZSB1cmxcbiAgICogQHBhcmFtIHByb3BlcnRpZXNUb09taXQgU3BlY2lmeSBwcm9wZXJ0aWVzIHRvIG5vdCBhZGQgdG8gdGhlIHVybCAoYmFzZVVybCwgcHJlZml4LCBiYXNlU2l0ZSlcbiAgICovXG4gIGJ1aWxkVXJsKFxuICAgIGVuZHBvaW50OiBzdHJpbmcsXG4gICAgYXR0cmlidXRlcz86IER5bmFtaWNBdHRyaWJ1dGVzLFxuICAgIHByb3BlcnRpZXNUb09taXQ/OiBCYXNlT2NjVXJsUHJvcGVydGllc1xuICApOiBzdHJpbmcge1xuICAgIGxldCB1cmwgPSB0aGlzLmdldEVuZHBvaW50Rm9yU2NvcGUoZW5kcG9pbnQsIGF0dHJpYnV0ZXM/LnNjb3BlKTtcblxuICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCB7IHVybFBhcmFtcywgcXVlcnlQYXJhbXMgfSA9IGF0dHJpYnV0ZXM7XG5cbiAgICAgIGlmICh1cmxQYXJhbXMpIHtcbiAgICAgICAgdXJsID0gU3RyaW5nVGVtcGxhdGUucmVzb2x2ZSh1cmwsIGF0dHJpYnV0ZXMudXJsUGFyYW1zLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGxldCBodHRwUGFyYW1zT3B0aW9ucyA9IHsgZW5jb2RlcjogbmV3IEh0dHBQYXJhbXNVUklFbmNvZGVyKCkgfTtcblxuICAgICAgICBpZiAodXJsLmluY2x1ZGVzKCc/JykpIHtcbiAgICAgICAgICBsZXQgcXVlcnlQYXJhbXNGcm9tRW5kcG9pbnQ6IHN0cmluZztcbiAgICAgICAgICBbdXJsLCBxdWVyeVBhcmFtc0Zyb21FbmRwb2ludF0gPSB1cmwuc3BsaXQoJz8nKTtcbiAgICAgICAgICBodHRwUGFyYW1zT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLmh0dHBQYXJhbXNPcHRpb25zLFxuICAgICAgICAgICAgLi4ueyBmcm9tU3RyaW5nOiBxdWVyeVBhcmFtc0Zyb21FbmRwb2ludCB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKGh0dHBQYXJhbXNPcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlQYXJhbXNba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gaHR0cFBhcmFtcy50b1N0cmluZygpO1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCkge1xuICAgICAgICAgIHVybCArPSAnPycgKyBwYXJhbXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWlsZFVybEZyb21FbmRwb2ludFN0cmluZyh1cmwsIHByb3BlcnRpZXNUb09taXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbmRwb2ludEZyb21Db25maWcoXG4gICAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgICBzY29wZT86IHN0cmluZ1xuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVuZHBvaW50c0NvbmZpZyA9IHRoaXMuY29uZmlnLmJhY2tlbmQ/Lm9jYz8uZW5kcG9pbnRzO1xuXG4gICAgaWYgKCFlbmRwb2ludHNDb25maWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnRDb25maWcgPSBlbmRwb2ludHNDb25maWdbZW5kcG9pbnRdO1xuXG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBpZiAoc2NvcGUgPT09IERFRkFVTFRfU0NPUEUgJiYgdHlwZW9mIGVuZHBvaW50Q29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZW5kcG9pbnRDb25maWc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW5kcG9pbnRDb25maWc/LltzY29wZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmRwb2ludENvbmZpZyA9PT0gJ3N0cmluZydcbiAgICAgID8gZW5kcG9pbnRDb25maWdcbiAgICAgIDogZW5kcG9pbnRDb25maWc/LltERUZBVUxUX1NDT1BFXTtcbiAgfVxuXG4gIC8vIFRPRE86IENhbiB3ZSByZXVzZSBnZXRFbmRwb2ludEZyb21Db25maWcgaW4gdGhpcyBtZXRob2Q/IFNob3VsZCB3ZSBjaGFuZ2UgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbj9cbiAgcHJpdmF0ZSBnZXRFbmRwb2ludEZvclNjb3BlKGVuZHBvaW50OiBzdHJpbmcsIHNjb3BlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBlbmRwb2ludHNDb25maWcgPSB0aGlzLmNvbmZpZy5iYWNrZW5kPy5vY2M/LmVuZHBvaW50cztcblxuICAgIGlmICghQm9vbGVhbihlbmRwb2ludHNDb25maWcpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnRDb25maWcgPSBlbmRwb2ludHNDb25maWdbZW5kcG9pbnRdO1xuXG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBpZiAoZW5kcG9pbnRDb25maWc/LltzY29wZV0pIHtcbiAgICAgICAgcmV0dXJuIGVuZHBvaW50Q29uZmlnPy5bc2NvcGVdO1xuICAgICAgfVxuICAgICAgaWYgKHNjb3BlID09PSBERUZBVUxUX1NDT1BFICYmIHR5cGVvZiBlbmRwb2ludENvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGVuZHBvaW50Q29uZmlnO1xuICAgICAgfVxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgJHtlbmRwb2ludH0gZW5kcG9pbnQgY29uZmlndXJhdGlvbiBtaXNzaW5nIGZvciBzY29wZSBcIiR7c2NvcGV9XCJgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICh0eXBlb2YgZW5kcG9pbnRDb25maWcgPT09ICdzdHJpbmcnXG4gICAgICAgID8gZW5kcG9pbnRDb25maWdcbiAgICAgICAgOiBlbmRwb2ludENvbmZpZz8uW0RFRkFVTFRfU0NPUEVdKSB8fCBlbmRwb2ludFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBiYXNlIE9DQyB1cmwgcHJvcGVydGllcyB0byB0aGUgc3BlY2lmaWVkIGVuZHBvaW50IHN0cmluZ1xuICAgKlxuICAgKiBAcGFyYW0gZW5kcG9pbnRTdHJpbmcgU3RyaW5nIHZhbHVlIGZvciB0aGUgdXJsIGVuZHBvaW50XG4gICAqIEBwYXJhbSBwcm9wZXJ0aWVzVG9PbWl0IFNwZWNpZnkgcHJvcGVydGllcyB0byBub3QgYWRkIHRvIHRoZSB1cmwgKGJhc2VVcmwsIHByZWZpeCwgYmFzZVNpdGUpXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVXJsRnJvbUVuZHBvaW50U3RyaW5nKFxuICAgIGVuZHBvaW50U3RyaW5nOiBzdHJpbmcsXG4gICAgcHJvcGVydGllc1RvT21pdD86IEJhc2VPY2NVcmxQcm9wZXJ0aWVzXG4gICk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybFBhdGhKb2luKHRoaXMuZ2V0QmFzZVVybChwcm9wZXJ0aWVzVG9PbWl0KSwgZW5kcG9pbnRTdHJpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmVmaXgoKTogc3RyaW5nIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZz8uYmFja2VuZD8ub2NjPy5wcmVmaXggJiZcbiAgICAgICF0aGlzLmNvbmZpZy5iYWNrZW5kLm9jYy5wcmVmaXguc3RhcnRzV2l0aCgnLycpXG4gICAgKSB7XG4gICAgICByZXR1cm4gJy8nICsgdGhpcy5jb25maWcuYmFja2VuZC5vY2MucHJlZml4O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmJhY2tlbmQ/Lm9jYz8ucHJlZml4ID8/ICcnO1xuICB9XG59XG4iXX0=