UNPKG

angular-dynamic-forms-lite

Version:
200 lines 18.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ensureDefaultFormComponents } from "../../form-settings/form-field-settings"; import { isDynamicFieldType, DynamicFormType } from "../../form-field/form-field-type"; import { SubType } from "../../form-settings/sub-type"; import { ArrayRenderStrategy } from "../../form-field/array/array-render-strategy"; /** @type {?} */ const MissingSettingResolver = (/** * @param {?} __0 * @return {?} */ ([setting]) => { throw new Error(`Unssuported form field for ${setting.name}`); }); const ɵ0 = MissingSettingResolver; /** @type {?} */ const ComponentSettingResolver = (/** * @param {?} __0 * @return {?} */ ([setting, form]) => { if (typeof form !== "function") { return { match: false }; } setting.component = form; return { match: true, value: [[setting.name, (/** @type {?} */ (setting))]] }; }); const ɵ1 = ComponentSettingResolver; /** @type {?} */ const DynamicTypeSettingResolver = (/** * @param {?} __0 * @param {?} componentResolver * @return {?} */ ([setting, form, optionalComponent], componentResolver) => { if (!isDynamicFieldType(form) && !(form instanceof SubType)) { return { match: false }; } if (form !== DynamicFormType.HIDDEN && !(form instanceof SubType && form.type === DynamicFormType.HIDDEN)) { setting.component = componentResolver(setting, optionalComponent); } setting.type = form; return { match: true, value: [[setting.name, (/** @type {?} */ (setting))]] }; }); const ɵ2 = DynamicTypeSettingResolver; /** @type {?} */ const ArraySettingResolver = (/** * @param {?} __0 * @param {?} componentResolver * @param {?} factory * @return {?} */ ([setting, form, optionalComponent], componentResolver, factory) => { if (!Array.isArray(form)) { return { match: false }; } setting.type = DynamicFormType.ARRAY; setting.component = (/** @type {?} */ (componentResolver(setting, optionalComponent))); setting.renderStrategy = setting.renderStrategy || ArrayRenderStrategy.withFullRender(); const [[, childSetting], ...indirectChildren] = factory(form); setting.childSetting = childSetting; return { match: true, value: [[setting.name, (/** @type {?} */ (setting))], ...indirectChildren] }; }); const ɵ3 = ArraySettingResolver; /** @type {?} */ const GroupSettingResolver = (/** * @param {?} __0 * @param {?} componentResolver * @param {?} factory * @return {?} */ ([setting, form, optionalComponent], componentResolver, factory) => { if (typeof form !== "object") { return { match: false }; } /** @type {?} */ const children = Object.entries(form).reduce((/** * @param {?} settings * @param {?} __1 * @return {?} */ (settings, [id, options]) => { const [[, childSetting], ...indirectChildren] = factory(options); return [...settings, [id, childSetting], ...indirectChildren]; }), []); // form root does not have a name if (!setting.name) { return { match: true, value: children }; } setting.type = DynamicFormType.GROUP; setting.component = componentResolver(setting, optionalComponent); return { match: true, value: [[setting.name, (/** @type {?} */ (setting))], ...children] }; }); const ɵ4 = GroupSettingResolver; export class InlineSettingsResolver { /** * @param {?=} defaultFormComponents */ constructor(defaultFormComponents) { this.defaultFormComponents = defaultFormComponents; this.resolvers = [ DynamicTypeSettingResolver, ComponentSettingResolver, ArraySettingResolver, GroupSettingResolver, MissingSettingResolver ]; } /** * @param {?} inlineForm * @return {?} */ resolve(inlineForm) { return new Map(this.resolveSettings([null, inlineForm])); } /** * @private * @param {?} __0 * @return {?} */ resolveSettings([nameOrSetting, form, optionalComponent]) { /** @type {?} */ let setting = this.createPartialSetting(nameOrSetting); return this.resolvers.reduce((/** * @param {?} prev * @param {?} curr * @return {?} */ (prev, curr) => prev.match ? prev : curr([setting, form, optionalComponent], this.componentResolver.bind(this), this.resolveSettings.bind(this))), { match: false, value: [] }).value; } /** * @private * @param {?} nameOrSetting * @return {?} */ createPartialSetting(nameOrSetting) { /** @type {?} */ let setting = {}; if (typeof nameOrSetting === "string") { setting.name = nameOrSetting; } else { setting = nameOrSetting || {}; } return setting; } /** * @private * @param {?} setting * @param {?} optionalComponent * @return {?} */ componentResolver(setting, optionalComponent) { return optionalComponent || ensureDefaultFormComponents(this.defaultFormComponents, setting.name, setting.type); } } if (false) { /** * @type {?} * @private */ InlineSettingsResolver.prototype.resolvers; /** * @type {?} * @private */ InlineSettingsResolver.prototype.defaultFormComponents; } export { ɵ0, ɵ1, ɵ2, ɵ3, ɵ4 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWZvcm0tc2V0dGluZy1yZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItZHluYW1pYy1mb3Jtcy1saXRlLyIsInNvdXJjZXMiOlsibGliL2Zvcm0vaW5saW5lL2lubGluZS1mb3JtLXNldHRpbmctcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLE9BQU8sRUFHTCwyQkFBMkIsRUFDNUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQXdCLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTdHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7TUFlN0Usc0JBQXNCOzs7O0FBQW9CLENBQUMsQ0FBQyxPQUFPLENBQXVCLEVBQUUsRUFBRTtJQUNsRixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUE7OztNQUVLLHdCQUF3Qjs7OztBQUFvQixDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBdUIsRUFBRSxFQUFFO0lBQzFGLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQzlCLE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7S0FDSDtJQUNELE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBRXpCLE9BQU87UUFDTCxLQUFLLEVBQUUsSUFBSTtRQUNYLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxtQkFBQSxPQUFPLEVBQTRCLENBQUMsQ0FBQztLQUM3RCxDQUFDO0FBQ0osQ0FBQyxDQUFBOzs7TUFFSywwQkFBMEI7Ozs7O0FBQW9CLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLEVBQUUsaUJBQWlC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RUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLEVBQUU7U0FDVixDQUNGLENBQUMsS0FBSyxDQUFDO0lBQ1YsQ0FBQzs7Ozs7O0lBRU8sb0JBQW9CLENBQUMsYUFBMEM7O1lBQ2pFLE9BQU8sR0FBOEIsRUFBRTtRQUMzQyxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRTtZQUNyQyxPQUFPLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztTQUM5QjthQUFNO1lBQ0wsT0FBTyxHQUFHLGFBQWEsSUFBSSxFQUFFLENBQUM7U0FDL0I7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzs7Ozs7O0lBRU8saUJBQWlCLENBQUMsT0FBa0MsRUFBRSxpQkFBeUM7UUFDckcsT0FBTyxpQkFBaUIsSUFBSSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEgsQ0FBQztDQUNGOzs7Ozs7SUE3Q0MsMkNBTUU7Ozs7O0lBQ1UsdURBQW9EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5saW5lRm9ybSwgSW5saW5lT3B0aW9ucywgSW5saW5lVmFsdWVPclR5cGUgfSBmcm9tIFwiLi9pbmxpbmUtZm9ybVwiO1xuaW1wb3J0IHtcbiAgRm9ybUZpZWxkU2V0dGluZ3MsXG4gIENvbWJpbmVkRm9ybUZpZWxkU2V0dGluZyxcbiAgZW5zdXJlRGVmYXVsdEZvcm1Db21wb25lbnRzXG59IGZyb20gXCIuLi8uLi9mb3JtLXNldHRpbmdzL2Zvcm0tZmllbGQtc2V0dGluZ3NcIjtcbmltcG9ydCB7IEZvcm1Db21wb25lbnRzQnlUeXBlLCBpc0R5bmFtaWNGaWVsZFR5cGUsIER5bmFtaWNGb3JtVHlwZSB9IGZyb20gXCIuLi8uLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQtdHlwZVwiO1xuaW1wb3J0IHsgRm9ybUZpZWxkU2V0dGluZyB9IGZyb20gXCIuLi8uLi9mb3JtLXNldHRpbmdzL2Zvcm0tZmllbGQtc2V0dGluZ1wiO1xuaW1wb3J0IHsgU3ViVHlwZSB9IGZyb20gXCIuLi8uLi9mb3JtLXNldHRpbmdzL3N1Yi10eXBlXCI7XG5pbXBvcnQgeyBBcnJheUZvcm1GaWVsZFNldHRpbmcgfSBmcm9tIFwiLi4vLi4vZm9ybS1maWVsZC9hcnJheS9hcnJheS1mb3JtLWZpZWxkLXNldHRpbmdcIjtcbmltcG9ydCB7IEFycmF5UmVuZGVyU3RyYXRlZ3kgfSBmcm9tIFwiLi4vLi4vZm9ybS1maWVsZC9hcnJheS9hcnJheS1yZW5kZXItc3RyYXRlZ3lcIjtcbmltcG9ydCB7IElubGluZVNldHRpbmcgfSBmcm9tIFwiLi4vLi4vZm9ybS1zZXR0aW5ncy9pbmxpbmUtc2V0dGluZ1wiO1xuaW1wb3J0IHsgRm9ybUZpZWxkQ29tcG9uZW50VHlwZSB9IGZyb20gXCIuLi8uLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQtY29tcG9uZW50XCI7XG5pbXBvcnQgeyBGb3JtRmllbGRBcnJheUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9mb3JtLWZpZWxkL2FycmF5L2Zvcm0tZmllbGQtYXJyYXktY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxudHlwZSBQYXJ0aWFsSW5saW5lT3B0aW9uczxTID0gRm9ybUZpZWxkU2V0dGluZz4gPSBbUGFydGlhbDxTPiwgSW5saW5lVmFsdWVPclR5cGUsIEZvcm1GaWVsZENvbXBvbmVudFR5cGU/XTtcbnR5cGUgU2V0dGluZ01hcEVudHJ5ID0gW3N0cmluZywgQ29tYmluZWRGb3JtRmllbGRTZXR0aW5nXTtcbnR5cGUgU2V0dGluZ1Jlc29sdmVyUmVzdWx0ID0geyBtYXRjaDogYm9vbGVhbjsgdmFsdWU/OiBTZXR0aW5nTWFwRW50cnlbXSB9O1xudHlwZSBTZXR0aW5nUmVzb2x2ZXIgPSAoXG4gIG9wdGlvbnM6IFBhcnRpYWxJbmxpbmVPcHRpb25zLFxuICBjb21wb25lbnRSZXNvbHZlcjogKHNldHRpbmc6IFBhcnRpYWw8Rm9ybUZpZWxkU2V0dGluZz4sIGNvbXA6IEZvcm1GaWVsZENvbXBvbmVudFR5cGUpID0+IEZvcm1GaWVsZENvbXBvbmVudFR5cGUsXG4gIGZhY3Rvcnk6IChvcHRpb25zOiBhbnkpID0+IFNldHRpbmdNYXBFbnRyeVtdXG4pID0+IFNldHRpbmdSZXNvbHZlclJlc3VsdDtcblxuY29uc3QgTWlzc2luZ1NldHRpbmdSZXNvbHZlcjogU2V0dGluZ1Jlc29sdmVyID0gKFtzZXR0aW5nXTogUGFydGlhbElubGluZU9wdGlvbnMpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbnNzdXBvcnRlZCBmb3JtIGZpZWxkIGZvciAke3NldHRpbmcubmFtZX1gKTtcbn07XG5cbmNvbnN0IENvbXBvbmVudFNldHRpbmdSZXNvbHZlcjogU2V0dGluZ1Jlc29sdmVyID0gKFtzZXR0aW5nLCBmb3JtXTogUGFydGlhbElubGluZU9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBmb3JtICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2g6IGZhbHNlXG4gICAgfTtcbiAgfVxuICBzZXR0aW5nLmNvbXBvbmVudCA9IGZvcm07XG5cbiAgcmV0dXJuIHtcbiAgICBtYXRjaDogdHJ1ZSxcbiAgICB2YWx1ZTogW1tzZXR0aW5nLm5hbWUsIHNldHRpbmcgYXMgQ29tYmluZWRGb3JtRmllbGRTZXR0aW5nXV1cbiAgfTtcbn07XG5cbmNvbnN0IER5bmFtaWNUeXBlU2V0dGluZ1Jlc29sdmVyOiBTZXR0aW5nUmVzb2x2ZXIgPSAoW3NldHRpbmcsIGZvcm0sIG9wdGlvbmFsQ29tcG9uZW50XSwgY29tcG9uZW50UmVzb2x2ZXIpID0+IHtcbiAgaWYgKCFpc0R5bmFtaWNGaWVsZFR5cGUoZm9ybSkgJiYgIShmb3JtIGluc3RhbmNlb2YgU3ViVHlwZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2g6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGlmIChmb3JtICE9PSBEeW5hbWljRm9ybVR5cGUuSElEREVOICYmICEoZm9ybSBpbnN0YW5jZW9mIFN1YlR5cGUgJiYgZm9ybS50eXBlID09PSBEeW5hbWljRm9ybVR5cGUuSElEREVOKSkge1xuICAgIHNldHRpbmcuY29tcG9uZW50ID0gY29tcG9uZW50UmVzb2x2ZXIoc2V0dGluZywgb3B0aW9uYWxDb21wb25lbnQpO1xuICB9XG5cbiAgc2V0dGluZy50eXBlID0gZm9ybTtcblxuICByZXR1cm4ge1xuICAgIG1hdGNoOiB0cnVlLFxuICAgIHZhbHVlOiBbW3NldHRpbmcubmFtZSwgc2V0dGluZyBhcyBDb21iaW5lZEZvcm1GaWVsZFNldHRpbmddXVxuICB9O1xufTtcblxuY29uc3QgQXJyYXlTZXR0aW5nUmVzb2x2ZXI6IFNldHRpbmdSZXNvbHZlciA9IChcbiAgW3NldHRpbmcsIGZvcm0sIG9wdGlvbmFsQ29tcG9uZW50XTogUGFydGlhbElubGluZU9wdGlvbnM8QXJyYXlGb3JtRmllbGRTZXR0aW5nPixcbiAgY29tcG9uZW50UmVzb2x2ZXIsXG4gIGZhY3RvcnlcbikgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZm9ybSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2g6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIHNldHRpbmcudHlwZSA9IER5bmFtaWNGb3JtVHlwZS5BUlJBWTtcbiAgc2V0dGluZy5jb21wb25lbnQgPSBjb21wb25lbnRSZXNvbHZlcihzZXR0aW5nLCBvcHRpb25hbENvbXBvbmVudCkgYXMgVHlwZTxGb3JtRmllbGRBcnJheUNvbXBvbmVudD47XG4gIHNldHRpbmcucmVuZGVyU3RyYXRlZ3kgPSBzZXR0aW5nLnJlbmRlclN0cmF0ZWd5IHx8IEFycmF5UmVuZGVyU3RyYXRlZ3kud2l0aEZ1bGxSZW5kZXIoKTtcblxuICBjb25zdCBbWywgY2hpbGRTZXR0aW5nXSwgLi4uaW5kaXJlY3RDaGlsZHJlbl0gPSBmYWN0b3J5KGZvcm0pO1xuICBzZXR0aW5nLmNoaWxkU2V0dGluZyA9IGNoaWxkU2V0dGluZztcblxuICByZXR1cm4ge1xuICAgIG1hdGNoOiB0cnVlLFxuICAgIHZhbHVlOiBbW3NldHRpbmcubmFtZSwgc2V0dGluZyBhcyBDb21iaW5lZEZvcm1GaWVsZFNldHRpbmddLCAuLi5pbmRpcmVjdENoaWxkcmVuXVxuICB9O1xufTtcblxuY29uc3QgR3JvdXBTZXR0aW5nUmVzb2x2ZXI6IFNldHRpbmdSZXNvbHZlciA9IChcbiAgW3NldHRpbmcsIGZvcm0sIG9wdGlvbmFsQ29tcG9uZW50XTogUGFydGlhbElubGluZU9wdGlvbnMsXG4gIGNvbXBvbmVudFJlc29sdmVyLFxuICBmYWN0b3J5XG4pID0+IHtcbiAgaWYgKHR5cGVvZiBmb3JtICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5lbnRyaWVzKGZvcm0pLnJlZHVjZTxTZXR0aW5nTWFwRW50cnlbXT4oKHNldHRpbmdzLCBbaWQsIG9wdGlvbnNdKSA9PiB7XG4gICAgY29uc3QgW1ssIGNoaWxkU2V0dGluZ10sIC4uLmluZGlyZWN0Q2hpbGRyZW5dID0gZmFjdG9yeShvcHRpb25zKTtcbiAgICByZXR1cm4gWy4uLnNldHRpbmdzLCBbaWQsIGNoaWxkU2V0dGluZ10sIC4uLmluZGlyZWN0Q2hpbGRyZW5dO1xuICB9LCBbXSk7XG5cbiAgLy8gZm9ybSByb290IGRvZXMgbm90IGhhdmUgYSBuYW1lXG4gIGlmICghc2V0dGluZy5uYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoOiB0cnVlLFxuICAgICAgdmFsdWU6IGNoaWxkcmVuXG4gICAgfTtcbiAgfVxuXG4gIHNldHRpbmcudHlwZSA9IER5bmFtaWNGb3JtVHlwZS5HUk9VUDtcbiAgc2V0dGluZy5jb21wb25lbnQgPSBjb21wb25lbnRSZXNvbHZlcihzZXR0aW5nLCBvcHRpb25hbENvbXBvbmVudCk7XG5cbiAgcmV0dXJuIHtcbiAgICBtYXRjaDogdHJ1ZSxcbiAgICB2YWx1ZTogW1tzZXR0aW5nLm5hbWUsIHNldHRpbmcgYXMgQ29tYmluZWRGb3JtRmllbGRTZXR0aW5nXSwgLi4uY2hpbGRyZW5dXG4gIH07XG59O1xuXG5leHBvcnQgY2xhc3MgSW5saW5lU2V0dGluZ3NSZXNvbHZlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZXJzOiBTZXR0aW5nUmVzb2x2ZXJbXSA9IFtcbiAgICBEeW5hbWljVHlwZVNldHRpbmdSZXNvbHZlcixcbiAgICBDb21wb25lbnRTZXR0aW5nUmVzb2x2ZXIsXG4gICAgQXJyYXlTZXR0aW5nUmVzb2x2ZXIsXG4gICAgR3JvdXBTZXR0aW5nUmVzb2x2ZXIsXG4gICAgTWlzc2luZ1NldHRpbmdSZXNvbHZlclxuICBdO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRlZmF1bHRGb3JtQ29tcG9uZW50cz86IEZvcm1Db21wb25lbnRzQnlUeXBlKSB7fVxuXG4gIHB1YmxpYyByZXNvbHZlKGlubGluZUZvcm06IElubGluZUZvcm0pOiBGb3JtRmllbGRTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBNYXAodGhpcy5yZXNvbHZlU2V0dGluZ3MoW251bGwsIGlubGluZUZvcm1dKSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTZXR0aW5ncyhbbmFtZU9yU2V0dGluZywgZm9ybSwgb3B0aW9uYWxDb21wb25lbnRdOiBJbmxpbmVPcHRpb25zKTogU2V0dGluZ01hcEVudHJ5W10ge1xuICAgIGxldCBzZXR0aW5nOiBQYXJ0aWFsPEZvcm1GaWVsZFNldHRpbmc+ID0gdGhpcy5jcmVhdGVQYXJ0aWFsU2V0dGluZyhuYW1lT3JTZXR0aW5nKTtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlcnMucmVkdWNlPFNldHRpbmdSZXNvbHZlclJlc3VsdD4oXG4gICAgICAocHJldiwgY3VycikgPT5cbiAgICAgICAgcHJldi5tYXRjaFxuICAgICAgICAgID8gcHJldlxuICAgICAgICAgIDogY3VycihcbiAgICAgICAgICAgICAgW3NldHRpbmcsIGZvcm0sIG9wdGlvbmFsQ29tcG9uZW50XSxcbiAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZXNvbHZlci5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB0aGlzLnJlc29sdmVTZXR0aW5ncy5iaW5kKHRoaXMpXG4gICAgICAgICAgICApLFxuICAgICAge1xuICAgICAgICBtYXRjaDogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBbXVxuICAgICAgfVxuICAgICkudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBhcnRpYWxTZXR0aW5nKG5hbWVPclNldHRpbmc6IHN0cmluZyB8IElubGluZVNldHRpbmc8YW55Pik6IFBhcnRpYWw8Rm9ybUZpZWxkU2V0dGluZz4ge1xuICAgIGxldCBzZXR0aW5nOiBQYXJ0aWFsPEZvcm1GaWVsZFNldHRpbmc+ID0ge307XG4gICAgaWYgKHR5cGVvZiBuYW1lT3JTZXR0aW5nID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBzZXR0aW5nLm5hbWUgPSBuYW1lT3JTZXR0aW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXR0aW5nID0gbmFtZU9yU2V0dGluZyB8fCB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0dGluZztcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9uZW50UmVzb2x2ZXIoc2V0dGluZzogUGFydGlhbDxGb3JtRmllbGRTZXR0aW5nPiwgb3B0aW9uYWxDb21wb25lbnQ6IEZvcm1GaWVsZENvbXBvbmVudFR5cGUpIHtcbiAgICByZXR1cm4gb3B0aW9uYWxDb21wb25lbnQgfHwgZW5zdXJlRGVmYXVsdEZvcm1Db21wb25lbnRzKHRoaXMuZGVmYXVsdEZvcm1Db21wb25lbnRzLCBzZXR0aW5nLm5hbWUsIHNldHRpbmcudHlwZSk7XG4gIH1cbn1cbiJdfQ==