angular-dynamic-forms-lite
Version:
Efficient dynamic and customizable Angular 7+ forms.
200 lines • 18.8 kB
JavaScript
/**
* @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==