@spartacus/core
Version:
Spartacus - the core framework
168 lines • 21.5 kB
JavaScript
import { Injectable } from '@angular/core';
import { CMS_FLEX_COMPONENT_TYPE, JSP_INCLUDE_CMS_COMPONENT_TYPE, } from '../../../../cms/config/cms-config';
import { PageRobotsMeta, } from '../../../../cms/model/page.model';
import { Occ } from '../../../occ-models/occ.models';
import * as i0 from "@angular/core";
export class OccCmsPageNormalizer {
convert(source, target = {}) {
this.normalizePageData(source, target);
this.normalizePageSlotData(source, target);
this.normalizePageComponentData(source, target);
this.normalizeComponentData(source, target);
return target;
}
/**
* Converts the OCC cms page model to the `Page` in the `CmsStructureModel`.
*/
normalizePageData(source, target) {
if (!source) {
return;
}
const page = {};
if (source.name) {
page.name = source.name;
}
if (source.typeCode) {
page.type = source.typeCode;
}
if (source.label) {
page.label = source.label;
}
if (source.template) {
page.template = source.template;
}
if (source.uid) {
page.pageId = source.uid;
}
if (source.title) {
page.title = source.title;
}
if (source.description) {
page.description = source.description;
}
if (source.properties) {
page.properties = source.properties;
}
this.normalizeRobots(source, page);
target.page = page;
}
/**
* Adds a ContentSlotData for each page slot in the `CmsStructureModel`.
*/
normalizePageSlotData(source, target) {
if (!(source === null || source === void 0 ? void 0 : source.contentSlots)) {
return;
}
if (!Array.isArray(source.contentSlots.contentSlot)) {
source.contentSlots.contentSlot = [source.contentSlots.contentSlot];
}
target.page.slots = {};
for (const slot of source.contentSlots.contentSlot) {
target.page.slots[slot.position] = {};
if (slot.properties) {
target.page.slots[slot.position].properties = slot.properties;
}
}
}
/**
* Registers the `ContentSlotComponentData` for each component.
*/
normalizePageComponentData(source, target) {
var _a, _b;
if (!((_a = source === null || source === void 0 ? void 0 : source.contentSlots) === null || _a === void 0 ? void 0 : _a.contentSlot)) {
return;
}
for (const slot of source.contentSlots.contentSlot) {
if (Array.isArray((_b = slot.components) === null || _b === void 0 ? void 0 : _b.component)) {
for (const component of slot.components.component) {
const comp = {
uid: component.uid,
typeCode: component.typeCode,
};
if (component.properties) {
comp.properties = component.properties;
}
if (component.typeCode === CMS_FLEX_COMPONENT_TYPE) {
comp.flexType = component.flexType;
}
else if (component.typeCode === JSP_INCLUDE_CMS_COMPONENT_TYPE) {
comp.flexType = component.uid;
}
else {
comp.flexType = component.typeCode;
}
if (!target.page.slots[slot.position].components) {
target.page.slots[slot.position].components = [];
}
target.page.slots[slot.position].components.push(comp);
}
}
}
}
/**
* Adds the actual component data whenever available in the CMS page data.
*
* If the data is not populated in this payload, it is loaded separately
* (`OccCmsComponentAdapter`).
*/
normalizeComponentData(source, target) {
var _a, _b;
if (!((_a = source === null || source === void 0 ? void 0 : source.contentSlots) === null || _a === void 0 ? void 0 : _a.contentSlot)) {
return;
}
for (const slot of source.contentSlots.contentSlot) {
if (Array.isArray((_b = slot.components) === null || _b === void 0 ? void 0 : _b.component)) {
for (const component of slot.components.component) {
// while we're hoping to get this right from the backend api,
// the OCC api stills seems out of sync with the right model.
if (component.modifiedtime) {
component.modifiedTime = component.modifiedtime;
delete component.modifiedtime;
}
// we don't put properties into component state
if (component.properties) {
component.properties = undefined;
}
if (!target.components) {
target.components = [];
}
target.components.push(component);
}
}
}
}
/**
* Normalizes the page robot string to an array of `PageRobotsMeta` items.
*/
normalizeRobots(source, target) {
const robots = [];
if (source.robotTag) {
switch (source.robotTag) {
case Occ.PageRobots.INDEX_FOLLOW:
robots.push(PageRobotsMeta.INDEX);
robots.push(PageRobotsMeta.FOLLOW);
break;
case Occ.PageRobots.NOINDEX_FOLLOW:
robots.push(PageRobotsMeta.NOINDEX);
robots.push(PageRobotsMeta.FOLLOW);
break;
case Occ.PageRobots.INDEX_NOFOLLOW:
robots.push(PageRobotsMeta.INDEX);
robots.push(PageRobotsMeta.NOFOLLOW);
break;
case Occ.PageRobots.NOINDEX_NOFOLLOW:
robots.push(PageRobotsMeta.NOINDEX);
robots.push(PageRobotsMeta.NOFOLLOW);
break;
}
}
target.robots = robots;
}
}
OccCmsPageNormalizer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OccCmsPageNormalizer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
OccCmsPageNormalizer.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OccCmsPageNormalizer, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OccCmsPageNormalizer, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NjLWNtcy1wYWdlLW5vcm1hbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9vY2MvYWRhcHRlcnMvY21zL2NvbnZlcnRlcnMvb2NjLWNtcy1wYWdlLW5vcm1hbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDhCQUE4QixHQUMvQixNQUFNLG1DQUFtQyxDQUFDO0FBRzNDLE9BQU8sRUFHTCxjQUFjLEdBQ2YsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBR3JELE1BQU0sT0FBTyxvQkFBb0I7SUFHL0IsT0FBTyxDQUNMLE1BQW1CLEVBQ25CLFNBQTRCLEVBQUU7UUFFOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUIsQ0FDekIsTUFBbUIsRUFDbkIsTUFBeUI7UUFFekIsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU87U0FDUjtRQUNELE1BQU0sSUFBSSxHQUFTLEVBQUUsQ0FBQztRQUV0QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDekI7UUFDRCxJQUFJ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QUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDckMsTUFBTTtnQkFDUixLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO29CQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3JDLE1BQU07YUFDVDtTQUNGO1FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDekIsQ0FBQzs7aUhBbkxVLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRFAsTUFBTTsyRkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENNU19GTEVYX0NPTVBPTkVOVF9UWVBFLFxuICBKU1BfSU5DTFVERV9DTVNfQ09NUE9ORU5UX1RZUEUsXG59IGZyb20gJy4uLy4uLy4uLy4uL2Ntcy9jb25maWcvY21zLWNvbmZpZyc7XG5pbXBvcnQgeyBDb250ZW50U2xvdENvbXBvbmVudERhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi9jbXMvbW9kZWwvY29udGVudC1zbG90LWNvbXBvbmVudC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IENvbnRlbnRTbG90RGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL2Ntcy9tb2RlbC9jb250ZW50LXNsb3QtZGF0YS5tb2RlbCc7XG5pbXBvcnQge1xuICBDbXNTdHJ1Y3R1cmVNb2RlbCxcbiAgUGFnZSxcbiAgUGFnZVJvYm90c01ldGEsXG59IGZyb20gJy4uLy4uLy4uLy4uL2Ntcy9tb2RlbC9wYWdlLm1vZGVsJztcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvY29udmVydGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2NjIH0gZnJvbSAnLi4vLi4vLi4vb2NjLW1vZGVscy9vY2MubW9kZWxzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBPY2NDbXNQYWdlTm9ybWFsaXplclxuICBpbXBsZW1lbnRzIENvbnZlcnRlcjxPY2MuQ01TUGFnZSwgQ21zU3RydWN0dXJlTW9kZWw+XG57XG4gIGNvbnZlcnQoXG4gICAgc291cmNlOiBPY2MuQ01TUGFnZSxcbiAgICB0YXJnZXQ6IENtc1N0cnVjdHVyZU1vZGVsID0ge31cbiAgKTogQ21zU3RydWN0dXJlTW9kZWwge1xuICAgIHRoaXMubm9ybWFsaXplUGFnZURhdGEoc291cmNlLCB0YXJnZXQpO1xuICAgIHRoaXMubm9ybWFsaXplUGFnZVNsb3REYXRhKHNvdXJjZSwgdGFyZ2V0KTtcbiAgICB0aGlzLm5vcm1hbGl6ZVBhZ2VDb21wb25lbnREYXRhKHNvdXJjZSwgdGFyZ2V0KTtcbiAgICB0aGlzLm5vcm1hbGl6ZUNvbXBvbmVudERhdGEoc291cmNlLCB0YXJnZXQpO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIE9DQyBjbXMgcGFnZSBtb2RlbCB0byB0aGUgYFBhZ2VgIGluIHRoZSBgQ21zU3RydWN0dXJlTW9kZWxgLlxuICAgKi9cbiAgcHJvdGVjdGVkIG5vcm1hbGl6ZVBhZ2VEYXRhKFxuICAgIHNvdXJjZTogT2NjLkNNU1BhZ2UsXG4gICAgdGFyZ2V0OiBDbXNTdHJ1Y3R1cmVNb2RlbFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYWdlOiBQYWdlID0ge307XG5cbiAgICBpZiAoc291cmNlLm5hbWUpIHtcbiAgICAgIHBhZ2UubmFtZSA9IHNvdXJjZS5uYW1lO1xuICAgIH1cbiAgICBpZiAoc291cmNlLnR5cGVDb2RlKSB7XG4gICAgICBwYWdlLnR5cGUgPSBzb3VyY2UudHlwZUNvZGU7XG4gICAgfVxuICAgIGlmIChzb3VyY2UubGFiZWwpIHtcbiAgICAgIHBhZ2UubGFiZWwgPSBzb3VyY2UubGFiZWw7XG4gICAgfVxuICAgIGlmIChzb3VyY2UudGVtcGxhdGUpIHtcbiAgICAgIHBhZ2UudGVtcGxhdGUgPSBzb3VyY2UudGVtcGxhdGU7XG4gICAgfVxuICAgIGlmIChzb3VyY2UudWlkKSB7XG4gICAgICBwYWdlLnBhZ2VJZCA9IHNvdXJjZS51aWQ7XG4gICAgfVxuICAgIGlmIChzb3VyY2UudGl0bGUpIHtcbiAgICAgIHBhZ2UudGl0bGUgPSBzb3VyY2UudGl0bGU7XG4gICAgfVxuICAgIGlmIChzb3VyY2UuZGVzY3JpcHRpb24pIHtcbiAgICAgIHBhZ2UuZGVzY3JpcHRpb24gPSBzb3VyY2UuZGVzY3JpcHRpb247XG4gICAgfVxuICAgIGlmIChzb3VyY2UucHJvcGVydGllcykge1xuICAgICAgcGFnZS5wcm9wZXJ0aWVzID0gc291cmNlLnByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgdGhpcy5ub3JtYWxpemVSb2JvdHMoc291cmNlLCBwYWdlKTtcblxuICAgIHRhcmdldC5wYWdlID0gcGFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgQ29udGVudFNsb3REYXRhIGZvciBlYWNoIHBhZ2Ugc2xvdCBpbiB0aGUgYENtc1N0cnVjdHVyZU1vZGVsYC5cbiAgICovXG4gIHByb3RlY3RlZCBub3JtYWxpemVQYWdlU2xvdERhdGEoXG4gICAgc291cmNlOiBPY2MuQ01TUGFnZSxcbiAgICB0YXJnZXQ6IENtc1N0cnVjdHVyZU1vZGVsXG4gICk6IHZvaWQge1xuICAgIGlmICghc291cmNlPy5jb250ZW50U2xvdHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNvdXJjZS5jb250ZW50U2xvdHMuY29udGVudFNsb3QpKSB7XG4gICAgICBzb3VyY2UuY29udGVudFNsb3RzLmNvbnRlbnRTbG90ID0gW3NvdXJjZS5jb250ZW50U2xvdHMuY29udGVudFNsb3RdO1xuICAgIH1cbiAgICB0YXJnZXQucGFnZS5zbG90cyA9IHt9O1xuICAgIGZvciAoY29uc3Qgc2xvdCBvZiBzb3VyY2UuY29udGVudFNsb3RzLmNvbnRlbnRTbG90KSB7XG4gICAgICB0YXJnZXQucGFnZS5zbG90c1tzbG90LnBvc2l0aW9uXSA9IHt9IGFzIENvbnRlbnRTbG90RGF0YTtcbiAgICAgIGlmIChzbG90LnByb3BlcnRpZXMpIHtcbiAgICAgICAgdGFyZ2V0LnBhZ2Uuc2xvdHNbc2xvdC5wb3NpdGlvbl0ucHJvcGVydGllcyA9IHNsb3QucHJvcGVydGllcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBgQ29udGVudFNsb3RDb21wb25lbnREYXRhYCBmb3IgZWFjaCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgbm9ybWFsaXplUGFnZUNvbXBvbmVudERhdGEoXG4gICAgc291cmNlOiBPY2MuQ01TUGFnZSxcbiAgICB0YXJnZXQ6IENtc1N0cnVjdHVyZU1vZGVsXG4gICk6IHZvaWQge1xuICAgIGlmICghc291cmNlPy5jb250ZW50U2xvdHM/LmNvbnRlbnRTbG90KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2xvdCBvZiBzb3VyY2UuY29udGVudFNsb3RzLmNvbnRlbnRTbG90KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzbG90LmNvbXBvbmVudHM/LmNvbXBvbmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc2xvdC5jb21wb25lbnRzLmNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGNvbXA6IENvbnRlbnRTbG90Q29tcG9uZW50RGF0YSA9IHtcbiAgICAgICAgICAgIHVpZDogY29tcG9uZW50LnVpZCxcbiAgICAgICAgICAgIHR5cGVDb2RlOiBjb21wb25lbnQudHlwZUNvZGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbXAucHJvcGVydGllcyA9IGNvbXBvbmVudC5wcm9wZXJ0aWVzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb21wb25lbnQudHlwZUNvZGUgPT09IENNU19GTEVYX0NPTVBPTkVOVF9UWVBFKSB7XG4gICAgICAgICAgICBjb21wLmZsZXhUeXBlID0gY29tcG9uZW50LmZsZXhUeXBlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50LnR5cGVDb2RlID09PSBKU1BfSU5DTFVERV9DTVNfQ09NUE9ORU5UX1RZUEUpIHtcbiAgICAgICAgICAgIGNvbXAuZmxleFR5cGUgPSBjb21wb25lbnQudWlkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wLmZsZXhUeXBlID0gY29tcG9uZW50LnR5cGVDb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRhcmdldC5wYWdlLnNsb3RzW3Nsb3QucG9zaXRpb25dLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRhcmdldC5wYWdlLnNsb3RzW3Nsb3QucG9zaXRpb25dLmNvbXBvbmVudHMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGFyZ2V0LnBhZ2Uuc2xvdHNbc2xvdC5wb3NpdGlvbl0uY29tcG9uZW50cy5wdXNoKGNvbXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIGFjdHVhbCBjb21wb25lbnQgZGF0YSB3aGVuZXZlciBhdmFpbGFibGUgaW4gdGhlIENNUyBwYWdlIGRhdGEuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhIGlzIG5vdCBwb3B1bGF0ZWQgaW4gdGhpcyBwYXlsb2FkLCBpdCBpcyBsb2FkZWQgc2VwYXJhdGVseVxuICAgKiAoYE9jY0Ntc0NvbXBvbmVudEFkYXB0ZXJgKS5cbiAgICovXG4gIHByb3RlY3RlZCBub3JtYWxpemVDb21wb25lbnREYXRhKFxuICAgIHNvdXJjZTogT2NjLkNNU1BhZ2UsXG4gICAgdGFyZ2V0OiBDbXNTdHJ1Y3R1cmVNb2RlbFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXNvdXJjZT8uY29udGVudFNsb3RzPy5jb250ZW50U2xvdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2xvdCBvZiBzb3VyY2UuY29udGVudFNsb3RzLmNvbnRlbnRTbG90KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzbG90LmNvbXBvbmVudHM/LmNvbXBvbmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc2xvdC5jb21wb25lbnRzLmNvbXBvbmVudCBhcyBhbnkpIHtcbiAgICAgICAgICAvLyB3aGlsZSB3ZSdyZSBob3BpbmcgdG8gZ2V0IHRoaXMgcmlnaHQgZnJvbSB0aGUgYmFja2VuZCBhcGksXG4gICAgICAgICAgLy8gdGhlIE9DQyBhcGkgc3RpbGxzIHNlZW1zIG91dCBvZiBzeW5jIHdpdGggdGhlIHJpZ2h0IG1vZGVsLlxuICAgICAgICAgIGlmIChjb21wb25lbnQubW9kaWZpZWR0aW1lKSB7XG4gICAgICAgICAgICBjb21wb25lbnQubW9kaWZpZWRUaW1lID0gY29tcG9uZW50Lm1vZGlmaWVkdGltZTtcbiAgICAgICAgICAgIGRlbGV0ZSBjb21wb25lbnQubW9kaWZpZWR0aW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHdlIGRvbid0IHB1dCBwcm9wZXJ0aWVzIGludG8gY29tcG9uZW50IHN0YXRlXG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb21wb25lbnQucHJvcGVydGllcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0YXJnZXQuY29tcG9uZW50cykge1xuICAgICAgICAgICAgdGFyZ2V0LmNvbXBvbmVudHMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGFyZ2V0LmNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgdGhlIHBhZ2Ugcm9ib3Qgc3RyaW5nIHRvIGFuIGFycmF5IG9mIGBQYWdlUm9ib3RzTWV0YWAgaXRlbXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgbm9ybWFsaXplUm9ib3RzKHNvdXJjZTogT2NjLkNNU1BhZ2UsIHRhcmdldDogUGFnZSk6IHZvaWQge1xuICAgIGNvbnN0IHJvYm90cyA9IFtdO1xuICAgIGlmIChzb3VyY2Uucm9ib3RUYWcpIHtcbiAgICAgIHN3aXRjaCAoc291cmNlLnJvYm90VGFnKSB7XG4gICAgICAgIGNhc2UgT2NjLlBhZ2VSb2JvdHMuSU5ERVhfRk9MTE9XOlxuICAgICAgICAgIHJvYm90cy5wdXNoKFBhZ2VSb2JvdHNNZXRhLklOREVYKTtcbiAgICAgICAgICByb2JvdHMucHVzaChQYWdlUm9ib3RzTWV0YS5GT0xMT1cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE9jYy5QYWdlUm9ib3RzLk5PSU5ERVhfRk9MTE9XOlxuICAgICAgICAgIHJvYm90cy5wdXNoKFBhZ2VSb2JvdHNNZXRhLk5PSU5ERVgpO1xuICAgICAgICAgIHJvYm90cy5wdXNoKFBhZ2VSb2JvdHNNZXRhLkZPTExPVyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgT2NjLlBhZ2VSb2JvdHMuSU5ERVhfTk9GT0xMT1c6XG4gICAgICAgICAgcm9ib3RzLnB1c2goUGFnZVJvYm90c01ldGEuSU5ERVgpO1xuICAgICAgICAgIHJvYm90cy5wdXNoKFBhZ2VSb2JvdHNNZXRhLk5PRk9MTE9XKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBPY2MuUGFnZVJvYm90cy5OT0lOREVYX05PRk9MTE9XOlxuICAgICAgICAgIHJvYm90cy5wdXNoKFBhZ2VSb2JvdHNNZXRhLk5PSU5ERVgpO1xuICAgICAgICAgIHJvYm90cy5wdXNoKFBhZ2VSb2JvdHNNZXRhLk5PRk9MTE9XKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YXJnZXQucm9ib3RzID0gcm9ib3RzO1xuICB9XG59XG4iXX0=