UNPKG

@stratio/egeo

Version:
286 lines 20.3 kB
/** * @fileoverview added by tsickle * Generated from: lib/utils/egeo-resolver/egeo-resolve.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /* * © 2017 Stratio Big Data Inc., Sucursal en España. * * This software is licensed under the Apache License, Version 2.0. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the terms of the License for more details. * * SPDX-License-Identifier: Apache-2.0. */ import { Injectable } from '@angular/core'; import { has as _has, set as _set, cloneDeep as _cloneDeep, forEach as _forEach, keys as _keys, values as _values, omit as _omit } from 'lodash'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; var EgeoResolveService = /** @class */ (function () { function EgeoResolveService() { } /** * @param {?} object * @param {?} key * @param {?=} searchedValue * @return {?} */ EgeoResolveService.prototype.getKeys = /** * @param {?} object * @param {?} key * @param {?=} searchedValue * @return {?} */ function (object, key, searchedValue) { return this.searchInDeep(object, key, searchedValue); }; /** * @param {?} object * @param {?} resolved * @return {?} */ EgeoResolveService.prototype.setKeys = /** * @param {?} object * @param {?} resolved * @return {?} */ function (object, resolved) { resolved.forEach((/** * @param {?} element * @return {?} */ function (element) { return _set(object, element.path, element.resolved); })); }; /** * @param {?} object * @param {?} translateService * @return {?} */ EgeoResolveService.prototype.translate = /** * @param {?} object * @param {?} translateService * @return {?} */ function (object, translateService) { var _this = this; /** @type {?} */ var keys = this.getKeys(object, 'translate'); // If not found translateable elements, return the same because if not, translate service broke on try to translate an empty array. if (keys && keys.length > 0) { /** @type {?} */ var toTranslate = this.extractTranslationKeys(keys); return translateService.get(toTranslate).pipe(// return object translation map((/** * @param {?} translation * @return {?} */ function (translation) { return _this.remapObjectWithTranslations(translation, keys, object); }))); } else { return Observable.create((/** * @param {?} observer * @return {?} */ function (observer) { observer.next(object); observer.complete(); })); } }; /** * @param {?} keys * @param {?} translateService * @return {?} */ EgeoResolveService.prototype.translateArrayOfKeys = /** * @param {?} keys * @param {?} translateService * @return {?} */ function (keys, translateService) { var _this = this; return translateService.get(keys).pipe(map((/** * @param {?} translation * @return {?} */ function (translation) { return _this.remapArrayWithTranslations(translation, keys); }))); }; /** * @private * @param {?} translations * @param {?} originalArray * @return {?} */ EgeoResolveService.prototype.remapArrayWithTranslations = /** * @private * @param {?} translations * @param {?} originalArray * @return {?} */ function (translations, originalArray) { return originalArray.map((/** * @param {?} key * @return {?} */ function (key) { return translations[key] ? translations[key] : key; })); }; /** * @private * @param {?} translations * @param {?} resolverKeys * @param {?} object * @return {?} */ EgeoResolveService.prototype.remapObjectWithTranslations = /** * @private * @param {?} translations * @param {?} resolverKeys * @param {?} object * @return {?} */ function (translations, resolverKeys, object) { var _this = this; /** @type {?} */ var newObj = _cloneDeep(object); if (translations || _keys(translations).length > 0) { _forEach(resolverKeys, (/** * @param {?} resolvKey * @return {?} */ function (resolvKey) { _set(newObj, resolvKey.path, _this.getTranslationFromTranslatedKey(translations, resolvKey)); })); } return newObj; }; /** * @private * @param {?} translations * @param {?} resolverKey * @return {?} */ EgeoResolveService.prototype.getTranslationFromTranslatedKey = /** * @private * @param {?} translations * @param {?} resolverKey * @return {?} */ function (translations, resolverKey) { /** @type {?} */ var translationElementKey = resolverKey && resolverKey.toResolve && resolverKey.toResolve.key ? resolverKey.toResolve.key : ''; return translations[translationElementKey] ? translations[translationElementKey] : translationElementKey; }; /** * @private * @param {?} list * @return {?} */ EgeoResolveService.prototype.extractTranslationKeys = /** * @private * @param {?} list * @return {?} */ function (list) { return list.map((/** * @param {?} element * @return {?} */ function (element) { return (/** @type {?} */ (_values(_omit(element.toResolve, 'translate'))[0])); })); }; /** * @private * @param {?} object * @param {?} key * @param {?} searchedValue * @param {?=} path * @return {?} */ EgeoResolveService.prototype.searchInDeep = /** * @private * @param {?} object * @param {?} key * @param {?} searchedValue * @param {?=} path * @return {?} */ function (object, key, searchedValue, path) { var _this = this; if (path === void 0) { path = ''; } /** @type {?} */ var result = []; if (_has(object, key)) { // If we found key, return object. if (searchedValue !== undefined) { if (object[key] === searchedValue) { result.push({ path: path, toResolve: object }); } } else { result.push({ path: path, toResolve: object }); } } /** @type {?} */ var i = 0; _forEach(object, (/** * @param {?} value * @param {?} objKey * @return {?} */ function (value, objKey) { if (typeof value === 'object') { result = tslib_1.__spread(result, _this.searchInDeep(value, key, searchedValue, _this.getPath(path, object, i, objKey))); } i++; })); return result; }; // Build path for future replace // Build path for future replace /** * @private * @param {?} actualPath * @param {?} obj * @param {?} pos * @param {?} key * @return {?} */ EgeoResolveService.prototype.getPath = // Build path for future replace /** * @private * @param {?} actualPath * @param {?} obj * @param {?} pos * @param {?} key * @return {?} */ function (actualPath, obj, pos, key) { if (this.isArray(obj)) { actualPath = actualPath + "[" + pos + "]"; } else { actualPath = actualPath === '' ? key : actualPath + "." + key; } return actualPath; }; /** * @private * @param {?} value * @return {?} */ EgeoResolveService.prototype.isArray = /** * @private * @param {?} value * @return {?} */ function (value) { return Object.prototype.toString.call(value) === '[object Array]'; }; EgeoResolveService.decorators = [ { type: Injectable } ]; return EgeoResolveService; }()); export { EgeoResolveService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWdlby1yZXNvbHZlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3RyYXRpby9lZ2VvLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL2VnZW8tcmVzb2x2ZXIvZWdlby1yZXNvbHZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNKLEdBQUcsSUFBSSxJQUFJLEVBQ1gsR0FBRyxJQUFJLElBQUksRUFFWCxTQUFTLElBQUksVUFBVSxFQUN2QixPQUFPLElBQUksUUFBUSxFQUNuQixJQUFJLElBQUksS0FBSyxFQUNiLE1BQU0sSUFBSSxPQUFPLEVBQ2pCLElBQUksSUFBSSxLQUFLLEVBQ2YsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLckM7SUFBQTtJQXdGQSxDQUFDOzs7Ozs7O0lBckZFLG9DQUFPOzs7Ozs7SUFBUCxVQUFRLE1BQVcsRUFBRSxHQUFXLEVBQUUsYUFBbUI7UUFDbEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7Ozs7O0lBRUQsb0NBQU87Ozs7O0lBQVAsVUFBUSxNQUFXLEVBQUUsUUFBNEI7UUFDOUMsUUFBUSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLE9BQU8sSUFBSyxPQUFBLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQTVDLENBQTRDLEVBQUMsQ0FBQztJQUMvRSxDQUFDOzs7Ozs7SUFFRCxzQ0FBUzs7Ozs7SUFBVCxVQUFVLE1BQVcsRUFBRSxnQkFBc0M7UUFBN0QsaUJBYUM7O1lBWk0sSUFBSSxHQUF1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SSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLFVBQVUsR0FBTSxVQUFVLFNBQUksR0FBRyxNQUFHLENBQUM7U0FDdkM7YUFBTTtZQUNKLFVBQVUsR0FBRyxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFJLFVBQVUsU0FBSSxHQUFLLENBQUM7U0FDaEU7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNyQixDQUFDOzs7Ozs7SUFFTyxvQ0FBTzs7Ozs7SUFBZixVQUFnQixLQUFVO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixDQUFDO0lBQ3JFLENBQUM7O2dCQXZGSCxVQUFVOztJQXdGWCx5QkFBQztDQUFBLEFBeEZELElBd0ZDO1NBdkZZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbIlxuXG4vKlxuICogwqkgMjAxNyBTdHJhdGlvIEJpZyBEYXRhIEluYy4sIFN1Y3Vyc2FsIGVuIEVzcGHDsWEuXG4gKlxuICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTtcbiAqIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4gKiBTZWUgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAuXG4gKi9cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICBoYXMgYXMgX2hhcyxcbiAgIHNldCBhcyBfc2V0LFxuICAgZ2V0IGFzIF9nZXQsXG4gICBjbG9uZURlZXAgYXMgX2Nsb25lRGVlcCxcbiAgIGZvckVhY2ggYXMgX2ZvckVhY2gsXG4gICBrZXlzIGFzIF9rZXlzLFxuICAgdmFsdWVzIGFzIF92YWx1ZXMsXG4gICBvbWl0IGFzIF9vbWl0XG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5cbmltcG9ydCB7IEVnZW9SZXNvbHZlcktleXMsIFRyYW5zbGF0ZVNlcnZpY2VUeXBlIH0gZnJvbSAnLi9lZ2VvLXJlc29sdmUtbW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRWdlb1Jlc29sdmVTZXJ2aWNlIHtcblxuICAgZ2V0S2V5cyhvYmplY3Q6IGFueSwga2V5OiBzdHJpbmcsIHNlYXJjaGVkVmFsdWU/OiBhbnkpOiBFZ2VvUmVzb2x2ZXJLZXlzW10ge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoSW5EZWVwKG9iamVjdCwga2V5LCBzZWFyY2hlZFZhbHVlKTtcbiAgIH1cblxuICAgc2V0S2V5cyhvYmplY3Q6IGFueSwgcmVzb2x2ZWQ6IEVnZW9SZXNvbHZlcktleXNbXSk6IHZvaWQge1xuICAgICAgcmVzb2x2ZWQuZm9yRWFjaCgoZWxlbWVudCkgPT4gX3NldChvYmplY3QsIGVsZW1lbnQucGF0aCwgZWxlbWVudC5yZXNvbHZlZCkpO1xuICAgfVxuXG4gICB0cmFuc2xhdGUob2JqZWN0OiBhbnksIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VUeXBlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgIGxldCBrZXlzOiBFZ2VvUmVzb2x2ZXJLZXlzW10gPSB0aGlzLmdldEtleXMob2JqZWN0LCAndHJhbnNsYXRlJyk7IC8vIEdldCBrZXlzXG4gICAgICAvLyBJZiBub3QgZm91bmQgdHJhbnNsYXRlYWJsZSBlbGVtZW50cywgcmV0dXJuIHRoZSBzYW1lIGJlY2F1c2UgaWYgbm90LCB0cmFuc2xhdGUgc2VydmljZSBicm9rZSBvbiB0cnkgdG8gdHJhbnNsYXRlIGFuIGVtcHR5IGFycmF5LlxuICAgICAgaWYgKGtleXMgJiYga2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICBsZXQgdG9UcmFuc2xhdGU6IHN0cmluZ1tdID0gdGhpcy5leHRyYWN0VHJhbnNsYXRpb25LZXlzKGtleXMpOyAvLyBFeHRyYWN0IGtleXMgZm9yIHRyYW5zbGF0ZSBzZXJ2aWNlXG4gICAgICAgICByZXR1cm4gdHJhbnNsYXRlU2VydmljZS5nZXQodG9UcmFuc2xhdGUpLnBpcGUoIC8vIHJldHVybiBvYmplY3QgdHJhbnNsYXRpb25cbiAgICAgICAgICAgIG1hcCgodHJhbnNsYXRpb24pID0+IHRoaXMucmVtYXBPYmplY3RXaXRoVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9uLCBrZXlzLCBvYmplY3QpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8YW55PikgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChvYmplY3QpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgIH0pO1xuICAgICAgfVxuICAgfVxuXG4gICB0cmFuc2xhdGVBcnJheU9mS2V5cyhrZXlzOiBzdHJpbmdbXSwgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVR5cGUpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlU2VydmljZS5nZXQoa2V5cykucGlwZShcbiAgICAgICAgIG1hcCgodHJhbnNsYXRpb24pID0+IHRoaXMucmVtYXBBcnJheVdpdGhUcmFuc2xhdGlvbnModHJhbnNsYXRpb24sIGtleXMpKSk7XG4gICB9XG5cbiAgIHByaXZhdGUgcmVtYXBBcnJheVdpdGhUcmFuc2xhdGlvbnModHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LCBvcmlnaW5hbEFycmF5OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbEFycmF5Lm1hcCgoa2V5KSA9PiB0cmFuc2xhdGlvbnNba2V5XSA/IHRyYW5zbGF0aW9uc1trZXldIDoga2V5KTtcbiAgIH1cblxuICAgcHJpdmF0ZSByZW1hcE9iamVjdFdpdGhUcmFuc2xhdGlvbnModHJhbnNsYXRpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LCByZXNvbHZlcktleXM6IEVnZW9SZXNvbHZlcktleXNbXSwgb2JqZWN0OiBhbnkpOiBhbnkge1xuICAgICAgbGV0IG5ld09iaiA9IF9jbG9uZURlZXAob2JqZWN0KTtcbiAgICAgIGlmICh0cmFuc2xhdGlvbnMgfHwgX2tleXModHJhbnNsYXRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICBfZm9yRWFjaChyZXNvbHZlcktleXMsIChyZXNvbHZLZXkpID0+IHtcbiAgICAgICAgICAgIF9zZXQobmV3T2JqLCByZXNvbHZLZXkucGF0aCwgdGhpcy5nZXRUcmFuc2xhdGlvbkZyb21UcmFuc2xhdGVkS2V5KHRyYW5zbGF0aW9ucywgcmVzb2x2S2V5KSk7XG4gICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdPYmo7XG4gICB9XG5cbiAgIHByaXZhdGUgZ2V0VHJhbnNsYXRpb25Gcm9tVHJhbnNsYXRlZEtleSh0cmFuc2xhdGlvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHJlc29sdmVyS2V5OiBFZ2VvUmVzb2x2ZXJLZXlzKTogc3RyaW5nIHtcbiAgICAgIGxldCB0cmFuc2xhdGlvbkVsZW1lbnRLZXkgPSByZXNvbHZlcktleSAmJiByZXNvbHZlcktleS50b1Jlc29sdmUgJiYgcmVzb2x2ZXJLZXkudG9SZXNvbHZlLmtleSA/IHJlc29sdmVyS2V5LnRvUmVzb2x2ZS5rZXkgOiAnJztcbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbnNbdHJhbnNsYXRpb25FbGVtZW50S2V5XSA/IHRyYW5zbGF0aW9uc1t0cmFuc2xhdGlvbkVsZW1lbnRLZXldIDogdHJhbnNsYXRpb25FbGVtZW50S2V5O1xuICAgfVxuXG4gICBwcml2YXRlIGV4dHJhY3RUcmFuc2xhdGlvbktleXMobGlzdDogRWdlb1Jlc29sdmVyS2V5c1tdKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIGxpc3QubWFwKChlbGVtZW50KSA9PiA8c3RyaW5nPl92YWx1ZXMoX29taXQoZWxlbWVudC50b1Jlc29sdmUsICd0cmFuc2xhdGUnKSlbMF0pO1xuICAgfVxuXG4gICBwcml2YXRlIHNlYXJjaEluRGVlcChvYmplY3Q6IGFueSwga2V5OiBzdHJpbmcsIHNlYXJjaGVkVmFsdWU6IGFueSwgcGF0aDogc3RyaW5nID0gJycpOiBFZ2VvUmVzb2x2ZXJLZXlzW10ge1xuICAgICAgbGV0IHJlc3VsdDogRWdlb1Jlc29sdmVyS2V5c1tdID0gW107XG4gICAgICBpZiAoX2hhcyhvYmplY3QsIGtleSkpIHsgLy8gSWYgd2UgZm91bmQga2V5LCByZXR1cm4gb2JqZWN0LlxuICAgICAgICAgaWYgKHNlYXJjaGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKG9iamVjdFtrZXldID09PSBzZWFyY2hlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICByZXN1bHQucHVzaCh7IHBhdGgsIHRvUmVzb2x2ZTogb2JqZWN0IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgcGF0aCwgdG9SZXNvbHZlOiBvYmplY3QgfSk7XG4gICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBfZm9yRWFjaChvYmplY3QsICh2YWx1ZSwgb2JqS2V5KSA9PiB7IC8vIFNlYXJjaCBpbiBkZWVwIGJ5IGFsbCBlbGVtZW50c1xuICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFsuLi5yZXN1bHQsIC4uLnRoaXMuc2VhcmNoSW5EZWVwKHZhbHVlLCBrZXksIHNlYXJjaGVkVmFsdWUsIHRoaXMuZ2V0UGF0aChwYXRoLCBvYmplY3QsIGksIG9iaktleSkpXTtcbiAgICAgICAgIH1cbiAgICAgICAgIGkrKztcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgIH1cblxuICAgLy8gQnVpbGQgcGF0aCBmb3IgZnV0dXJlIHJlcGxhY2VcbiAgIHByaXZhdGUgZ2V0UGF0aChhY3R1YWxQYXRoOiBzdHJpbmcsIG9iajogYW55LCBwb3M6IG51bWJlciwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgaWYgKHRoaXMuaXNBcnJheShvYmopKSB7XG4gICAgICAgICBhY3R1YWxQYXRoID0gYCR7YWN0dWFsUGF0aH1bJHtwb3N9XWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgYWN0dWFsUGF0aCA9IGFjdHVhbFBhdGggPT09ICcnID8ga2V5IDogYCR7YWN0dWFsUGF0aH0uJHtrZXl9YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3R1YWxQYXRoO1xuICAgfVxuXG4gICBwcml2YXRlIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICB9XG59XG4iXX0=