@mediusinc/mng-commons 5.0.0-rc.0 → 5.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/data-list/data-list-params-helpers.d.ts +82 -0
- package/core/descriptors/action.descriptor.d.ts +3 -3
- package/core/descriptors/column.descriptor.d.ts +1 -1
- package/core/descriptors/editor.descriptor.d.ts +6 -6
- package/core/descriptors/enum.descriptor.d.ts +6 -0
- package/core/descriptors/filter.descriptor.d.ts +1 -1
- package/core/descriptors/model.descriptor.d.ts +1 -1
- package/core/descriptors/table.descriptor.d.ts +6 -6
- package/core/descriptors/tableview.descriptor.d.ts +10 -10
- package/core/enum/enum-helpers.d.ts +49 -0
- package/core/error/error-helpers.d.ts +114 -0
- package/core/helpers/date.d.ts +14 -0
- package/core/helpers/object.d.ts +27 -0
- package/core/helpers/route.d.ts +35 -0
- package/core/helpers/string.d.ts +7 -0
- package/core/helpers/templates.d.ts +3 -0
- package/core/i18n/i18n-common.d.ts +6 -0
- package/core/i18n/i18n-error.d.ts +4 -0
- package/core/i18n/i18n-type.d.ts +20 -0
- package/core/index.d.ts +15 -9
- package/{model → core}/pipes/enum.pipe.d.ts +2 -2
- package/core/pipes/enumerate.pipe.d.ts +3 -3
- package/{model → core}/pipes/i18n-property.pipe.d.ts +2 -2
- package/core/pipes/template.pipe.d.ts +0 -2
- package/core/router/route-builder.d.ts +2 -4
- package/core/router/routes-builder.d.ts +5 -6
- package/core/security/permission-helpers.d.ts +3 -0
- package/core/security/permissions.model.d.ts +2 -2
- package/esm2022/core/components/notification/notification-wrapper.component.mjs +4 -4
- package/esm2022/core/components/pages/error/error.page.component.mjs +3 -3
- package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +3 -3
- package/esm2022/core/data-list/data-list-params-helpers.mjs +415 -0
- package/esm2022/core/data-list/filter-match.model.mjs +1 -1
- package/esm2022/core/data-providers/base.data-provider.mjs +1 -1
- package/esm2022/core/descriptors/action.descriptor.mjs +1 -1
- package/esm2022/core/descriptors/column.descriptor.mjs +1 -1
- package/esm2022/core/descriptors/editor.descriptor.mjs +1 -1
- package/esm2022/core/descriptors/enum.descriptor.mjs +2 -0
- package/esm2022/core/descriptors/filter.descriptor.mjs +1 -1
- package/esm2022/core/descriptors/model.descriptor.mjs +1 -1
- package/esm2022/core/descriptors/table.descriptor.mjs +1 -1
- package/esm2022/core/descriptors/tableview.descriptor.mjs +1 -1
- package/esm2022/core/directives/component.directive.mjs +4 -4
- package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +4 -4
- package/esm2022/core/directives/template.directive.mjs +3 -3
- package/esm2022/core/enum/enum-helpers.mjs +81 -0
- package/esm2022/core/error/error-handler.mjs +3 -3
- package/esm2022/core/error/error-helpers.mjs +247 -0
- package/esm2022/core/helpers/coercion.mjs +1 -1
- package/esm2022/core/helpers/date.mjs +119 -0
- package/esm2022/core/helpers/object.mjs +145 -0
- package/esm2022/core/helpers/route.mjs +58 -0
- package/esm2022/core/helpers/string.mjs +57 -0
- package/esm2022/core/helpers/templates.mjs +4 -0
- package/esm2022/core/i18n/i18n-common.mjs +24 -0
- package/esm2022/core/i18n/i18n-error.mjs +27 -0
- package/esm2022/core/i18n/i18n-type.mjs +79 -0
- package/esm2022/core/index.mjs +17 -11
- package/esm2022/core/log/log-publisher-console.service.mjs +3 -3
- package/esm2022/core/log/logger.service.mjs +3 -3
- package/esm2022/core/pipes/boolean.pipe.mjs +4 -4
- package/esm2022/core/pipes/class-map.pipe.mjs +4 -4
- package/esm2022/core/pipes/enum.pipe.mjs +27 -0
- package/esm2022/core/pipes/enumerate-async.pipe.mjs +8 -8
- package/esm2022/core/pipes/enumerate.pipe.mjs +10 -10
- package/esm2022/core/pipes/getter.pipe.mjs +4 -4
- package/esm2022/core/pipes/i18n-property.pipe.mjs +19 -0
- package/esm2022/core/pipes/json-path.pipe.mjs +6 -6
- package/esm2022/core/pipes/parametrize.pipe.mjs +6 -6
- package/esm2022/core/pipes/template.pipe.mjs +7 -8
- package/esm2022/core/provide.mjs +1 -21
- package/esm2022/core/reflect/type-enum-metadata.mjs +1 -1
- package/esm2022/core/registry/type-registry.mjs +1 -1
- package/esm2022/core/router/route-builder.mjs +8 -24
- package/esm2022/core/router/routes-builder.mjs +17 -16
- package/esm2022/core/security/permission-helpers.mjs +14 -0
- package/esm2022/core/security/permission.guard.mjs +1 -1
- package/esm2022/core/security/permission.service.mjs +6 -6
- package/esm2022/core/security/permissions.model.mjs +1 -1
- package/esm2022/core/services/commons-configuration.service.mjs +6 -6
- package/esm2022/core/services/commons-init.service.mjs +4 -4
- package/esm2022/core/services/commons-router.service.mjs +4 -4
- package/esm2022/core/services/commons.service.mjs +4 -4
- package/esm2022/core/services/local-storage-config.service.mjs +4 -4
- package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +9 -10
- package/esm2022/filter/descriptors/filter.descriptor.mjs +1 -1
- package/esm2022/form/api/data-providers/lookup.data-provider.mjs +1 -1
- package/esm2022/form/api/descriptors/button-style.builder.mjs +1 -1
- package/esm2022/form/components/autocomplete/autocomplete.component.mjs +7 -7
- package/esm2022/form/components/date-range/date-range.component.mjs +4 -4
- package/esm2022/form/components/dropdown/dropdown.component.mjs +7 -7
- package/esm2022/form/directives/input-trim.directive.mjs +4 -4
- package/esm2022/model/descriptors/enum.descriptor.mjs +1 -1
- package/esm2022/model/descriptors/model.descriptor.mjs +4 -4
- package/esm2022/model/helpers/i18n.mjs +45 -0
- package/esm2022/model/helpers/model.mjs +71 -0
- package/esm2022/model/index.mjs +4 -7
- package/esm2022/table/api/data-providers/table.data-provider.mjs +1 -1
- package/esm2022/table/api/descriptors/column.descriptor.mjs +1 -1
- package/esm2022/table/api/descriptors/table.descriptor.mjs +36 -8
- package/esm2022/table/api/helpers/class-attribute-converter.mjs +1 -1
- package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +9 -9
- package/esm2022/table/components/column-value/column-value.component.mjs +12 -14
- package/esm2022/table/components/table/table.component.mjs +20 -37
- package/esm2022/table/helpers/notification.mjs +4 -4
- package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +4 -4
- package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +4 -4
- package/esm2022/table/services/data-list.service.mjs +3 -3
- package/esm2022/tableview/action/components/action/action.component.mjs +9 -9
- package/esm2022/tableview/action/components/editor/action-editor.component.mjs +4 -4
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +6 -6
- package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +3 -3
- package/esm2022/tableview/action/components/route/action-route.component.mjs +4 -4
- package/esm2022/tableview/action/components/table/action-table.component.mjs +12 -24
- package/esm2022/tableview/action/helpers/i18n.mjs +82 -0
- package/esm2022/tableview/action/helpers/notification.mjs +8 -8
- package/esm2022/tableview/action/helpers/styles.mjs +1 -1
- package/esm2022/tableview/action/models/execution/action-context.model.mjs +1 -1
- package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
- package/esm2022/tableview/action/services/action-error-mapper.service.mjs +1 -1
- package/esm2022/tableview/action/services/action-executor.service.mjs +9 -8
- package/esm2022/tableview/action/services/component-action-executor.service.mjs +3 -3
- package/esm2022/tableview/action/services/data-provider-executor.service.mjs +3 -3
- package/esm2022/tableview/action/services/navigation.service.mjs +4 -4
- package/esm2022/tableview/action/services/providers/provide-view-container.mjs +1 -1
- package/esm2022/tableview/action/services/root-action-executor.service.mjs +3 -3
- package/esm2022/tableview/action/services/view-container.service.mjs +3 -3
- package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +1 -1
- package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +1 -1
- package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +1 -1
- package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +1 -1
- package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +1 -1
- package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +4 -4
- package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +1 -1
- package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +3 -3
- package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +1 -1
- package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +8 -8
- package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +1 -1
- package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +4 -4
- package/esm2022/tableview/api/editor/helpers/class-attribute-converter.mjs +1 -1
- package/esm2022/tableview/api/editor/helpers/field-validators.mjs +1 -1
- package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
- package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +3 -3
- package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +1 -1
- package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +4 -4
- package/esm2022/tableview/api/tableview/helpers/class-attribute-converter.mjs +1 -1
- package/esm2022/tableview/api/tableview/helpers/files-export.mjs +1 -1
- package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +4 -4
- package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +1 -1
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +9 -9
- package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +7 -7
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +9 -9
- package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +4 -4
- package/esm2022/tableview/editor/helpers/editor-formly.mjs +335 -0
- package/esm2022/tableview/editor/helpers/formly-config.mjs +1 -1
- package/esm2022/tableview/editor/services/formly-config.provider.mjs +1 -1
- package/esm2022/tableview/index.mjs +3 -5
- package/esm2022/tableview/provide.mjs +2 -1
- package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +3 -3
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +10 -19
- package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +1 -1
- package/fesm2022/mediusinc-mng-commons-core.mjs +1367 -1389
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-filter.mjs +8 -9
- package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +17 -17
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-model.mjs +99 -148
- package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +35 -7
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs +48 -65
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +19 -19
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +507 -572
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/filter/descriptors/filter.descriptor.d.ts +2 -2
- package/model/descriptors/model.descriptor.d.ts +2 -2
- package/model/helpers/i18n.d.ts +10 -0
- package/model/helpers/model.d.ts +5 -0
- package/model/index.d.ts +2 -4
- package/package.json +7 -7
- package/table/api/descriptors/table.descriptor.d.ts +10 -0
- package/table/components/column-value/column-value.component.d.ts +3 -4
- package/table/components/table/table.component.d.ts +13 -13
- package/tableview/action/components/table/action-table.component.d.ts +6 -6
- package/tableview/action/helpers/i18n.d.ts +22 -0
- package/tableview/action/models/execution/action-instance-state.model.d.ts +21 -21
- package/tableview/action/services/action-executor.service.d.ts +1 -1
- package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +1 -1
- package/tableview/api/action/descriptors/action.descriptor.d.ts +3 -3
- package/tableview/api/action/models/action.type.d.ts +2 -2
- package/tableview/api/action/models/execution/action-instance-state.model.d.ts +21 -21
- package/tableview/api/editor/descriptors/editor.descriptor.d.ts +2 -2
- package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +2 -2
- package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +5 -5
- package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +4 -4
- package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +4 -4
- package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +4 -4
- package/tableview/api/editor/descriptors/field.descriptor.d.ts +2 -2
- package/tableview/api/editor/models/editor-fields.model.d.ts +3 -3
- package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +2 -2
- package/tableview/editor/helpers/editor-formly.d.ts +10 -0
- package/tableview/index.d.ts +2 -2
- package/tableview/tableview/components/tableview/tableview.component.d.ts +5 -5
- package/core/data-list/data-list-params.util.d.ts +0 -84
- package/core/enum/enum.util.d.ts +0 -51
- package/core/error/error.util.d.ts +0 -116
- package/core/security/permission.util.d.ts +0 -5
- package/core/utils/date.util.d.ts +0 -20
- package/core/utils/i18n.util.d.ts +0 -36
- package/core/utils/object.util.d.ts +0 -31
- package/core/utils/route.util.d.ts +0 -37
- package/core/utils/string.util.d.ts +0 -9
- package/esm2022/core/data-list/data-list-params.util.mjs +0 -417
- package/esm2022/core/enum/enum.util.mjs +0 -83
- package/esm2022/core/error/error.util.mjs +0 -249
- package/esm2022/core/security/permission.util.mjs +0 -16
- package/esm2022/core/utils/date.util.mjs +0 -136
- package/esm2022/core/utils/i18n.util.mjs +0 -137
- package/esm2022/core/utils/object.util.mjs +0 -147
- package/esm2022/core/utils/route.util.mjs +0 -60
- package/esm2022/core/utils/string.util.mjs +0 -59
- package/esm2022/model/pipes/enum.pipe.mjs +0 -26
- package/esm2022/model/pipes/i18n-property.pipe.mjs +0 -19
- package/esm2022/model/utils/i18n.util.mjs +0 -51
- package/esm2022/model/utils/model.util.mjs +0 -73
- package/esm2022/tableview/action/utils/i18n.util.mjs +0 -126
- package/esm2022/tableview/editor/utils/editor-formly.util.mjs +0 -337
- package/model/utils/i18n.util.d.ts +0 -15
- package/model/utils/model.util.d.ts +0 -8
- package/tableview/action/utils/i18n.util.d.ts +0 -48
- package/tableview/editor/utils/editor-formly.util.d.ts +0 -12
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { TypeRegistry } from '@mediusinc/mng-commons/core';
|
|
2
|
-
export class ModelUtil {
|
|
3
|
-
static findIdAttribute(classType) {
|
|
4
|
-
if (!classType)
|
|
5
|
-
return null;
|
|
6
|
-
const attrDef = ModelUtil.getAttributeDef(classType);
|
|
7
|
-
if (!attrDef) {
|
|
8
|
-
return null;
|
|
9
|
-
}
|
|
10
|
-
let idAttribute = ModelUtil.findAttributeByTypeAndName(attrDef, ['string', 'number'], 'id', 'uuid', 'code', 'sifra');
|
|
11
|
-
if (!idAttribute) {
|
|
12
|
-
// if no id or code, take the first attribute
|
|
13
|
-
idAttribute = attrDef[0];
|
|
14
|
-
}
|
|
15
|
-
return idAttribute?.name ?? null;
|
|
16
|
-
}
|
|
17
|
-
static findTitleAttribute(classType) {
|
|
18
|
-
if (!classType)
|
|
19
|
-
return null;
|
|
20
|
-
const attrDef = ModelUtil.getAttributeDef(classType);
|
|
21
|
-
if (!attrDef) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
let titleAttribute = ModelUtil.findAttributeByTypeAndName(attrDef, ['string'], 'name', 'ime', 'title', 'naziv');
|
|
25
|
-
if (!titleAttribute) {
|
|
26
|
-
// if no name or title, take the first attribute
|
|
27
|
-
titleAttribute = attrDef[0];
|
|
28
|
-
}
|
|
29
|
-
return titleAttribute?.name ?? null;
|
|
30
|
-
}
|
|
31
|
-
static getAttributeDef(classType) {
|
|
32
|
-
if (!classType)
|
|
33
|
-
return null;
|
|
34
|
-
const attrDefByFn = classType.getAttributeTypeMap?.();
|
|
35
|
-
if (attrDefByFn)
|
|
36
|
-
return attrDefByFn;
|
|
37
|
-
const attrDefByProp = classType.attributeTypeMap;
|
|
38
|
-
if (attrDefByProp)
|
|
39
|
-
return attrDefByProp;
|
|
40
|
-
const attrByObjSer = TypeRegistry.get().findAttributesDefinitionByClassType(classType);
|
|
41
|
-
if (attrByObjSer)
|
|
42
|
-
return attrByObjSer;
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
static findAttributeByTypeAndName(attributes, types, ...names) {
|
|
46
|
-
for (const name of names) {
|
|
47
|
-
const attribute = attributes.find(a => types.some(t => t === a.type) && a.name === name);
|
|
48
|
-
if (attribute) {
|
|
49
|
-
return attribute;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
static trySetLookupItemsProperties(lookup, idAsTrack = true) {
|
|
55
|
-
if (lookup.dataProvider.classType) {
|
|
56
|
-
if (!lookup.optionsValueProperty && !lookup.optionsTrackProperty) {
|
|
57
|
-
const idProperty = ModelUtil.findIdAttribute(lookup.dataProvider.classType) ?? undefined;
|
|
58
|
-
if (idProperty && !lookup.optionsValueProperty && !lookup.optionsTrackProperty) {
|
|
59
|
-
if (idAsTrack) {
|
|
60
|
-
lookup.withOptionsTrackPropertyUnsafe(idProperty);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (!lookup.optionsLabelProperty) {
|
|
65
|
-
const labelProperty = ModelUtil.findTitleAttribute(lookup.dataProvider.classType);
|
|
66
|
-
if (labelProperty) {
|
|
67
|
-
lookup.withOptionsLabelPropertyUnsafe(labelProperty);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZGVsL3NyYy91dGlscy9tb2RlbC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0QsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFMUcsTUFBTSxPQUFPLFNBQVM7SUFDWCxNQUFNLENBQUMsZUFBZSxDQUFJLFNBQXdCO1FBQ3JELElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFNUIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksV0FBVyxHQUFHLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckgsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNkLDZDQUE2QztZQUM3QyxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsT0FBTyxXQUFXLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztJQUNyQyxDQUFDO0lBRU0sTUFBTSxDQUFDLGtCQUFrQixDQUFJLFNBQXdCO1FBQ3hELElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFNUIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksY0FBYyxHQUFHLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pCLGdEQUFnRDtZQUNoRCxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9CO1FBRUQsT0FBTyxjQUFjLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBSSxTQUF3QjtRQUNyRCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzVCLE1BQU0sV0FBVyxHQUFJLFNBQWlCLENBQUMsbUJBQW1CLEVBQUUsRUFBMEMsQ0FBQztRQUN2RyxJQUFJLFdBQVc7WUFBRSxPQUFPLFdBQVcsQ0FBQztRQUNwQyxNQUFNLGFBQWEsR0FBSSxTQUFpQixDQUFDLGdCQUF3RCxDQUFDO1FBQ2xHLElBQUksYUFBYTtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RixJQUFJLFlBQVk7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sTUFBTSxDQUFDLDBCQUEwQixDQUFDLFVBQStCLEVBQUUsS0FBZSxFQUFFLEdBQUcsS0FBZTtRQUMxRyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN0QixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztZQUN6RixJQUFJLFNBQVMsRUFBRTtnQkFDWCxPQUFPLFNBQVMsQ0FBQzthQUNwQjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLE1BQU0sQ0FBQywyQkFBMkIsQ0FBSSxNQUE0QixFQUFFLFNBQVMsR0FBRyxJQUFJO1FBQ3ZGLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUU7WUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtnQkFDOUQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztnQkFDekYsSUFBSSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUU7b0JBQzVFLElBQUksU0FBUyxFQUFFO3dCQUNYLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDckQ7aUJBQ0o7YUFDSjtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzlCLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNsRixJQUFJLGFBQWEsRUFBRTtvQkFDZixNQUFNLENBQUMsOEJBQThCLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ3hEO2FBQ0o7U0FDSjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NBdHRyaWJ1dGVEZWYsIENsYXNzVHlwZSwgSUxvb2t1cERlc2NyaXB0b3IsIFR5cGVSZWdpc3RyeX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcblxuZXhwb3J0IGNsYXNzIE1vZGVsVXRpbCB7XG4gICAgcHVibGljIHN0YXRpYyBmaW5kSWRBdHRyaWJ1dGU8VD4oY2xhc3NUeXBlPzogQ2xhc3NUeXBlPFQ+KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICghY2xhc3NUeXBlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBhdHRyRGVmID0gTW9kZWxVdGlsLmdldEF0dHJpYnV0ZURlZihjbGFzc1R5cGUpO1xuICAgICAgICBpZiAoIWF0dHJEZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGlkQXR0cmlidXRlID0gTW9kZWxVdGlsLmZpbmRBdHRyaWJ1dGVCeVR5cGVBbmROYW1lKGF0dHJEZWYsIFsnc3RyaW5nJywgJ251bWJlciddLCAnaWQnLCAndXVpZCcsICdjb2RlJywgJ3NpZnJhJyk7XG4gICAgICAgIGlmICghaWRBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIC8vIGlmIG5vIGlkIG9yIGNvZGUsIHRha2UgdGhlIGZpcnN0IGF0dHJpYnV0ZVxuICAgICAgICAgICAgaWRBdHRyaWJ1dGUgPSBhdHRyRGVmWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlkQXR0cmlidXRlPy5uYW1lID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmaW5kVGl0bGVBdHRyaWJ1dGU8VD4oY2xhc3NUeXBlPzogQ2xhc3NUeXBlPFQ+KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICghY2xhc3NUeXBlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBhdHRyRGVmID0gTW9kZWxVdGlsLmdldEF0dHJpYnV0ZURlZihjbGFzc1R5cGUpO1xuICAgICAgICBpZiAoIWF0dHJEZWYpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpdGxlQXR0cmlidXRlID0gTW9kZWxVdGlsLmZpbmRBdHRyaWJ1dGVCeVR5cGVBbmROYW1lKGF0dHJEZWYsIFsnc3RyaW5nJ10sICduYW1lJywgJ2ltZScsICd0aXRsZScsICduYXppdicpO1xuICAgICAgICBpZiAoIXRpdGxlQXR0cmlidXRlKSB7XG4gICAgICAgICAgICAvLyBpZiBubyBuYW1lIG9yIHRpdGxlLCB0YWtlIHRoZSBmaXJzdCBhdHRyaWJ1dGVcbiAgICAgICAgICAgIHRpdGxlQXR0cmlidXRlID0gYXR0ckRlZlswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aXRsZUF0dHJpYnV0ZT8ubmFtZSA/PyBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QXR0cmlidXRlRGVmPFQ+KGNsYXNzVHlwZT86IENsYXNzVHlwZTxUPikge1xuICAgICAgICBpZiAoIWNsYXNzVHlwZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGF0dHJEZWZCeUZuID0gKGNsYXNzVHlwZSBhcyBhbnkpLmdldEF0dHJpYnV0ZVR5cGVNYXA/LigpIGFzIEFycmF5PENsYXNzQXR0cmlidXRlRGVmPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGF0dHJEZWZCeUZuKSByZXR1cm4gYXR0ckRlZkJ5Rm47XG4gICAgICAgIGNvbnN0IGF0dHJEZWZCeVByb3AgPSAoY2xhc3NUeXBlIGFzIGFueSkuYXR0cmlidXRlVHlwZU1hcCBhcyBBcnJheTxDbGFzc0F0dHJpYnV0ZURlZj4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChhdHRyRGVmQnlQcm9wKSByZXR1cm4gYXR0ckRlZkJ5UHJvcDtcbiAgICAgICAgY29uc3QgYXR0ckJ5T2JqU2VyID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKGNsYXNzVHlwZSk7XG4gICAgICAgIGlmIChhdHRyQnlPYmpTZXIpIHJldHVybiBhdHRyQnlPYmpTZXI7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGZpbmRBdHRyaWJ1dGVCeVR5cGVBbmROYW1lKGF0dHJpYnV0ZXM6IENsYXNzQXR0cmlidXRlRGVmW10sIHR5cGVzOiBzdHJpbmdbXSwgLi4ubmFtZXM6IHN0cmluZ1tdKTogQ2xhc3NBdHRyaWJ1dGVEZWYgfCBudWxsIHtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLmZpbmQoYSA9PiB0eXBlcy5zb21lKHQgPT4gdCA9PT0gYS50eXBlKSAmJiBhLm5hbWUgPT09IG5hbWUpO1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB0cnlTZXRMb29rdXBJdGVtc1Byb3BlcnRpZXM8VD4obG9va3VwOiBJTG9va3VwRGVzY3JpcHRvcjxUPiwgaWRBc1RyYWNrID0gdHJ1ZSkge1xuICAgICAgICBpZiAobG9va3VwLmRhdGFQcm92aWRlci5jbGFzc1R5cGUpIHtcbiAgICAgICAgICAgIGlmICghbG9va3VwLm9wdGlvbnNWYWx1ZVByb3BlcnR5ICYmICFsb29rdXAub3B0aW9uc1RyYWNrUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZFByb3BlcnR5ID0gTW9kZWxVdGlsLmZpbmRJZEF0dHJpYnV0ZShsb29rdXAuZGF0YVByb3ZpZGVyLmNsYXNzVHlwZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChpZFByb3BlcnR5ICYmICFsb29rdXAub3B0aW9uc1ZhbHVlUHJvcGVydHkgJiYgIWxvb2t1cC5vcHRpb25zVHJhY2tQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWRBc1RyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAud2l0aE9wdGlvbnNUcmFja1Byb3BlcnR5VW5zYWZlKGlkUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsb29rdXAub3B0aW9uc0xhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbFByb3BlcnR5ID0gTW9kZWxVdGlsLmZpbmRUaXRsZUF0dHJpYnV0ZShsb29rdXAuZGF0YVByb3ZpZGVyLmNsYXNzVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9va3VwLndpdGhPcHRpb25zTGFiZWxQcm9wZXJ0eVVuc2FmZShsYWJlbFByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { map, mergeMap } from 'rxjs/operators';
|
|
2
|
-
import { ErrorUtil, I18nUtils as I18nUtilsCommon } from '@mediusinc/mng-commons/core';
|
|
3
|
-
import { I18nUtils as I18nUtilsModel } from '@mediusinc/mng-commons/model';
|
|
4
|
-
export var I18nUtils;
|
|
5
|
-
(function (I18nUtils) {
|
|
6
|
-
class Action {
|
|
7
|
-
/**
|
|
8
|
-
* Returns translation for action with given keys and params
|
|
9
|
-
* @param translate TranslateService
|
|
10
|
-
* @param action action descriptor
|
|
11
|
-
* @param actionPathKeys action path keys
|
|
12
|
-
* @param customKey custom key
|
|
13
|
-
* @param item
|
|
14
|
-
* @param fallbackKey fallback key
|
|
15
|
-
* @param params additional params for translation
|
|
16
|
-
* @param missingTranslationStrategy strategy when no translation is found
|
|
17
|
-
*/
|
|
18
|
-
static get(translate, action, actionPathKeys, customKey, item, fallbackKey, params, missingTranslationStrategy = 'returnFirstKey') {
|
|
19
|
-
const keys = I18nUtils.Action.getKeysByPriority(action, actionPathKeys, customKey, fallbackKey);
|
|
20
|
-
const i18nParams = I18nUtils.Action.getParams(translate, action, item, params);
|
|
21
|
-
const i18nValue = I18nUtilsCommon.Common.get(translate, i18nParams, ...keys);
|
|
22
|
-
return this.getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey });
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Returns async translation for given keys with given params.
|
|
26
|
-
* @param translate TranslateService
|
|
27
|
-
* @param action action descriptor
|
|
28
|
-
* @param actionPathKeys action path keys
|
|
29
|
-
* @param customKey custom key
|
|
30
|
-
* @param item item
|
|
31
|
-
* @param fallbackKey fallback key, used as fallback key
|
|
32
|
-
* @param params additional params for translation
|
|
33
|
-
* @param missingTranslationStrategy strategy when no translation is found
|
|
34
|
-
*/
|
|
35
|
-
static getAsync(translate, action, actionPathKeys, customKey, item, fallbackKey, params, missingTranslationStrategy = 'returnFirstKey') {
|
|
36
|
-
return I18nUtils.Action.getParamsAsync(translate, action, item, params).pipe(mergeMap(i18nParams => {
|
|
37
|
-
const keys = I18nUtils.Action.getKeysByPriority(action, actionPathKeys, customKey, fallbackKey);
|
|
38
|
-
return I18nUtilsCommon.Common.getAsync(translate, i18nParams, ...keys).pipe(map(i18nValue => this.getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nValue, firstKey: keys[0], fallbackKey })));
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Returns translation depending on missingTranslationStrategy
|
|
43
|
-
* @param missingTranslationStrategy strategy when no translation is found
|
|
44
|
-
* @param values object with values, i18nValue is translation, firstKey is first key in array of keys, fallbackKey is fallback key
|
|
45
|
-
*/
|
|
46
|
-
static getTranslationDependingOnStrategy(missingTranslationStrategy, { i18nValue, firstKey, fallbackKey }) {
|
|
47
|
-
if (i18nValue !== null) {
|
|
48
|
-
return i18nValue;
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
switch (missingTranslationStrategy) {
|
|
52
|
-
case 'returnNull':
|
|
53
|
-
return null;
|
|
54
|
-
case 'returnFallbackKey':
|
|
55
|
-
return fallbackKey ?? null;
|
|
56
|
-
case 'returnFirstKey':
|
|
57
|
-
return firstKey ?? null;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
static getTitleAsync(translate, action, item) {
|
|
62
|
-
return I18nUtils.Action.getAsync(translate, action, 'title', undefined, item);
|
|
63
|
-
}
|
|
64
|
-
static getEditorTitleAsync(translate, action, item) {
|
|
65
|
-
return I18nUtils.Action.getAsync(translate, action, ['editor.title', 'title'], action.editorTitle ?? undefined, item, undefined, action.editorTitleParams ?? undefined);
|
|
66
|
-
}
|
|
67
|
-
static getParams(translate, action, item, params = {}) {
|
|
68
|
-
const i18nParams = I18nUtilsModel.Model.getParams(translate, action.model ?? undefined, item, params);
|
|
69
|
-
return I18nUtils.Action.populateParams(i18nParams);
|
|
70
|
-
}
|
|
71
|
-
static getParamsAsync(translate, action, item, params = {}) {
|
|
72
|
-
return I18nUtilsModel.Model.getParamsAsync(translate, action.model ?? undefined, item, params).pipe(map(i18nParams => I18nUtils.Action.populateParams(i18nParams)));
|
|
73
|
-
}
|
|
74
|
-
static populateParams(params = {}) {
|
|
75
|
-
params = { ...params };
|
|
76
|
-
return params;
|
|
77
|
-
}
|
|
78
|
-
static getKeysByPriority(action, actionPathKeys, customKey, fallbackKey) {
|
|
79
|
-
const keys = [];
|
|
80
|
-
if (customKey) {
|
|
81
|
-
keys.push(customKey);
|
|
82
|
-
}
|
|
83
|
-
if (!Array.isArray(actionPathKeys)) {
|
|
84
|
-
actionPathKeys = [actionPathKeys];
|
|
85
|
-
}
|
|
86
|
-
actionPathKeys.forEach(k => {
|
|
87
|
-
const modelActionKey = `${action.i18nModelActionBaseKey}.${k}`;
|
|
88
|
-
const actionKey = `${action.actionName}.${k}`;
|
|
89
|
-
keys.push(modelActionKey, actionKey);
|
|
90
|
-
});
|
|
91
|
-
if (fallbackKey) {
|
|
92
|
-
keys.push(fallbackKey);
|
|
93
|
-
}
|
|
94
|
-
return keys;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
I18nUtils.Action = Action;
|
|
98
|
-
class Error {
|
|
99
|
-
static get(translate, error, params = {}) {
|
|
100
|
-
const i18nParams = I18nUtils.Error.getParams(error, params);
|
|
101
|
-
if (error.messageCode) {
|
|
102
|
-
const keys = [`errors.${error.messageCode}`, `messages.${error.messageCode}`];
|
|
103
|
-
const i18n = I18nUtilsCommon.Common.get(translate, i18nParams, ...keys);
|
|
104
|
-
if (i18n) {
|
|
105
|
-
return i18n;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return I18nUtilsCommon.Common.get(translate, i18nParams, error.message);
|
|
109
|
-
}
|
|
110
|
-
static getParams(error, params = {}) {
|
|
111
|
-
const paramsRes = { ...params };
|
|
112
|
-
paramsRes.errorStatus = '';
|
|
113
|
-
paramsRes.errorMessage = '';
|
|
114
|
-
if (ErrorUtil.isHttpErrorResponse(error)) {
|
|
115
|
-
const httpError = ErrorUtil.getHttpErrorResponse(error);
|
|
116
|
-
paramsRes.errorStatus = httpError?.status;
|
|
117
|
-
paramsRes.errorMessage = httpError?.message;
|
|
118
|
-
paramsRes.errorStatusDescription = httpError?.statusText;
|
|
119
|
-
}
|
|
120
|
-
paramsRes.error = error;
|
|
121
|
-
return paramsRes;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
I18nUtils.Error = Error;
|
|
125
|
-
})(I18nUtils || (I18nUtils = {}));
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9hY3Rpb24vdXRpbHMvaTE4bi51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxHQUFHLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFDLFNBQVMsRUFBa0MsU0FBUyxJQUFJLGVBQWUsRUFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNuSSxPQUFPLEVBQUMsU0FBUyxJQUFJLGNBQWMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBR3pFLE1BQU0sS0FBVyxTQUFTLENBMEp6QjtBQTFKRCxXQUFpQixTQUFTO0lBQ3RCLE1BQWEsTUFBTTtRQUNmOzs7Ozs7Ozs7O1dBVUc7UUFDSSxNQUFNLENBQUMsR0FBRyxDQUNiLFNBQTJCLEVBQzNCLE1BQWlDLEVBQ2pDLGNBQXNDLEVBQ3RDLFNBQWtCLEVBQ2xCLElBQVUsRUFDVixXQUFvQixFQUNwQixNQUFZLEVBQ1osNkJBQTZELGdCQUFnQjtZQUU3RSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2hHLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9FLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM3RSxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQywwQkFBMEIsRUFBRSxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFB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UyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDeEIsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQztLQUNKO0lBNUJZLGVBQUssUUE0QmpCLENBQUE7QUFDTCxDQUFDLEVBMUpnQixTQUFTLEtBQVQsU0FBUyxRQTBKekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0Vycm9yVXRpbCwgSTE4bk1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5LCBJMThuVXRpbHMgYXMgSTE4blV0aWxzQ29tbW9uLCBJQ29tbW9uc0Vycm9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtJMThuVXRpbHMgYXMgSTE4blV0aWxzTW9kZWx9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9ySW5zdCwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgSTE4blV0aWxzIHtcbiAgICBleHBvcnQgY2xhc3MgQWN0aW9uIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdHJhbnNsYXRpb24gZm9yIGFjdGlvbiB3aXRoIGdpdmVuIGtleXMgYW5kIHBhcmFtc1xuICAgICAgICAgKiBAcGFyYW0gdHJhbnNsYXRlIFRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgICogQHBhcmFtIGFjdGlvbiBhY3Rpb24gZGVzY3JpcHRvclxuICAgICAgICAgKiBAcGFyYW0gYWN0aW9uUGF0aEtleXMgYWN0aW9uIHBhdGgga2V5c1xuICAgICAgICAgKiBAcGFyYW0gY3VzdG9tS2V5IGN1c3RvbSBrZXlcbiAgICAgICAgICogQHBhcmFtIGl0ZW1cbiAgICAgICAgICogQHBhcmFtIGZhbGxiYWNrS2V5IGZhbGxiYWNrIGtleVxuICAgICAgICAgKiBAcGFyYW0gcGFyYW1zIGFkZGl0aW9uYWwgcGFyYW1zIGZvciB0cmFuc2xhdGlvblxuICAgICAgICAgKiBAcGFyYW0gbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3kgc3RyYXRlZ3kgd2hlbiBubyB0cmFuc2xhdGlvbiBpcyBmb3VuZFxuICAgICAgICAgKi9cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQoXG4gICAgICAgICAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PGFueT4sXG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICAgICAgICAgIGl0ZW0/OiBhbnksXG4gICAgICAgICAgICBmYWxsYmFja0tleT86IHN0cmluZyxcbiAgICAgICAgICAgIHBhcmFtcz86IGFueSxcbiAgICAgICAgICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuTWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3kgPSAncmV0dXJuRmlyc3RLZXknXG4gICAgICAgICk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0S2V5c0J5UHJpb3JpdHkoYWN0aW9uLCBhY3Rpb25QYXRoS2V5cywgY3VzdG9tS2V5LCBmYWxsYmFja0tleSk7XG4gICAgICAgICAgICBjb25zdCBpMThuUGFyYW1zID0gSTE4blV0aWxzLkFjdGlvbi5nZXRQYXJhbXModHJhbnNsYXRlLCBhY3Rpb24sIGl0ZW0sIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBpMThuVmFsdWUgPSBJMThuVXRpbHNDb21tb24uQ29tbW9uLmdldCh0cmFuc2xhdGUsIGkxOG5QYXJhbXMsIC4uLmtleXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRpb25EZXBlbmRpbmdPblN0cmF0ZWd5KG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5LCB7aTE4blZhbHVlLCBmaXJzdEtleToga2V5c1swXSwgZmFsbGJhY2tLZXl9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGFzeW5jIHRyYW5zbGF0aW9uIGZvciBnaXZlbiBrZXlzIHdpdGggZ2l2ZW4gcGFyYW1zLlxuICAgICAgICAgKiBAcGFyYW0gdHJhbnNsYXRlIFRyYW5zbGF0ZVNlcnZpY2VcbiAgICAgICAgICogQHBhcmFtIGFjdGlvbiBhY3Rpb24gZGVzY3JpcHRvclxuICAgICAgICAgKiBAcGFyYW0gYWN0aW9uUGF0aEtleXMgYWN0aW9uIHBhdGgga2V5c1xuICAgICAgICAgKiBAcGFyYW0gY3VzdG9tS2V5IGN1c3RvbSBrZXlcbiAgICAgICAgICogQHBhcmFtIGl0ZW0gaXRlbVxuICAgICAgICAgKiBAcGFyYW0gZmFsbGJhY2tLZXkgZmFsbGJhY2sga2V5LCB1c2VkIGFzIGZhbGxiYWNrIGtleVxuICAgICAgICAgKiBAcGFyYW0gcGFyYW1zIGFkZGl0aW9uYWwgcGFyYW1zIGZvciB0cmFuc2xhdGlvblxuICAgICAgICAgKiBAcGFyYW0gbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3kgc3RyYXRlZ3kgd2hlbiBubyB0cmFuc2xhdGlvbiBpcyBmb3VuZFxuICAgICAgICAgKi9cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRBc3luYyhcbiAgICAgICAgICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PixcbiAgICAgICAgICAgIGFjdGlvblBhdGhLZXlzOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgY3VzdG9tS2V5Pzogc3RyaW5nLFxuICAgICAgICAgICAgaXRlbT86IGFueSxcbiAgICAgICAgICAgIGZhbGxiYWNrS2V5Pzogc3RyaW5nLFxuICAgICAgICAgICAgcGFyYW1zPzogYW55LFxuICAgICAgICAgICAgbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3k6IEkxOG5NaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSA9ICdyZXR1cm5GaXJzdEtleSdcbiAgICAgICAgKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkFjdGlvbi5nZXRQYXJhbXNBc3luYyh0cmFuc2xhdGUsIGFjdGlvbiwgaXRlbSwgcGFyYW1zKS5waXBlKFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKGkxOG5QYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLkFjdGlvbi5nZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGFjdGlvblBhdGhLZXlzLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlsc0NvbW1vbi5Db21tb24uZ2V0QXN5bmModHJhbnNsYXRlLCBpMThuUGFyYW1zLCAuLi5rZXlzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGkxOG5WYWx1ZSA9PiB0aGlzLmdldFRyYW5zbGF0aW9uRGVwZW5kaW5nT25TdHJhdGVneShtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSwge2kxOG5WYWx1ZSwgZmlyc3RLZXk6IGtleXNbMF0sIGZhbGxiYWNrS2V5fSkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0cmFuc2xhdGlvbiBkZXBlbmRpbmcgb24gbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3lcbiAgICAgICAgICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAgICAgICAgICogQHBhcmFtIHZhbHVlcyBvYmplY3Qgd2l0aCB2YWx1ZXMsIGkxOG5WYWx1ZSBpcyB0cmFuc2xhdGlvbiwgZmlyc3RLZXkgaXMgZmlyc3Qga2V5IGluIGFycmF5IG9mIGtleXMsIGZhbGxiYWNrS2V5IGlzIGZhbGxiYWNrIGtleVxuICAgICAgICAgKi9cbiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZ2V0VHJhbnNsYXRpb25EZXBlbmRpbmdPblN0cmF0ZWd5KFxuICAgICAgICAgICAgbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3k6IEkxOG5NaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSxcbiAgICAgICAgICAgIHtpMThuVmFsdWUsIGZpcnN0S2V5LCBmYWxsYmFja0tleX06IHtpMThuVmFsdWU6IHN0cmluZyB8IG51bGw7IGZpcnN0S2V5Pzogc3RyaW5nOyBmYWxsYmFja0tleT86IHN0cmluZ31cbiAgICAgICAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICBpZiAoaTE4blZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkxOG5WYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXR1cm5OdWxsJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXR1cm5GYWxsYmFja0tleSc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2tLZXkgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmV0dXJuRmlyc3RLZXknOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0S2V5ID8/IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRUaXRsZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+LCBpdGVtPzogYW55KTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkFjdGlvbi5nZXRBc3luYyh0cmFuc2xhdGUsIGFjdGlvbiwgJ3RpdGxlJywgdW5kZWZpbmVkLCBpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0RWRpdG9yVGl0bGVBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModHJhbnNsYXRlLCBhY3Rpb24sIFsnZWRpdG9yLnRpdGxlJywgJ3RpdGxlJ10sIGFjdGlvbi5lZGl0b3JUaXRsZSA/PyB1bmRlZmluZWQsIGl0ZW0sIHVuZGVmaW5lZCwgYWN0aW9uLmVkaXRvclRpdGxlUGFyYW1zID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCBpMThuUGFyYW1zID0gSTE4blV0aWxzTW9kZWwuTW9kZWwuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgYWN0aW9uLm1vZGVsID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQWN0aW9uLnBvcHVsYXRlUGFyYW1zKGkxOG5QYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzTW9kZWwuTW9kZWwuZ2V0UGFyYW1zQXN5bmModHJhbnNsYXRlLCBhY3Rpb24ubW9kZWwgPz8gdW5kZWZpbmVkLCBpdGVtLCBwYXJhbXMpLnBpcGUobWFwKGkxOG5QYXJhbXMgPT4gSTE4blV0aWxzLkFjdGlvbi5wb3B1bGF0ZVBhcmFtcyhpMThuUGFyYW1zKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBwb3B1bGF0ZVBhcmFtcyhwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHsuLi5wYXJhbXN9O1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIHByaXZhdGUgc3RhdGljIGdldEtleXNCeVByaW9yaXR5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiwgYWN0aW9uUGF0aEtleXM6IHN0cmluZyB8IEFycmF5PHN0cmluZz4sIGN1c3RvbUtleT86IHN0cmluZywgZmFsbGJhY2tLZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChjdXN0b21LZXkpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3VzdG9tS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhY3Rpb25QYXRoS2V5cykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25QYXRoS2V5cyA9IFthY3Rpb25QYXRoS2V5c107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5cy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsQWN0aW9uS2V5ID0gYCR7YWN0aW9uLmkxOG5Nb2RlbEFjdGlvbkJhc2VLZXl9LiR7a31gO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbktleSA9IGAke2FjdGlvbi5hY3Rpb25OYW1lfS4ke2t9YDtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2gobW9kZWxBY3Rpb25LZXksIGFjdGlvbktleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmYWxsYmFja0tleSkge1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChmYWxsYmFja0tleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCBjbGFzcyBFcnJvciB7XG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0KHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgZXJyb3I6IElDb21tb25zRXJyb3IsIHBhcmFtczogYW55ID0ge30pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuRXJyb3IuZ2V0UGFyYW1zKGVycm9yLCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2VDb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtgZXJyb3JzLiR7ZXJyb3IubWVzc2FnZUNvZGV9YCwgYG1lc3NhZ2VzLiR7ZXJyb3IubWVzc2FnZUNvZGV9YF07XG4gICAgICAgICAgICAgICAgY29uc3QgaTE4biA9IEkxOG5VdGlsc0NvbW1vbi5Db21tb24uZ2V0KHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgICAgICAgICAgICAgaWYgKGkxOG4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkxOG47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlsc0NvbW1vbi5Db21tb24uZ2V0KHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyhlcnJvcjogSUNvbW1vbnNFcnJvciwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zUmVzID0gey4uLnBhcmFtc307XG4gICAgICAgICAgICBwYXJhbXNSZXMuZXJyb3JTdGF0dXMgPSAnJztcbiAgICAgICAgICAgIHBhcmFtc1Jlcy5lcnJvck1lc3NhZ2UgPSAnJztcblxuICAgICAgICAgICAgaWYgKEVycm9yVXRpbC5pc0h0dHBFcnJvclJlc3BvbnNlKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh0dHBFcnJvciA9IEVycm9yVXRpbC5nZXRIdHRwRXJyb3JSZXNwb25zZShlcnJvcik7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yU3RhdHVzID0gaHR0cEVycm9yPy5zdGF0dXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yTWVzc2FnZSA9IGh0dHBFcnJvcj8ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICBwYXJhbXNSZXMuZXJyb3JTdGF0dXNEZXNjcmlwdGlvbiA9IGh0dHBFcnJvcj8uc3RhdHVzVGV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zUmVzO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|