@mediusinc/mng-commons 5.0.0-rc.0-c31d5206 → 5.0.0-rc.0
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/README.md +1 -0
- package/core/README.md +8 -0
- package/core/action/action-data.model.d.ts +3 -0
- package/core/action/action-parameters.model.d.ts +17 -0
- package/core/components/pages/error/error.page.component.d.ts +8 -0
- package/core/components/pages/not-found/not-found.page.component.d.ts +8 -0
- package/core/data-list/data-list-params.util.d.ts +84 -0
- package/core/data-providers/base.data-provider.d.ts +32 -0
- package/core/data-providers/lookup.data-provider.d.ts +10 -0
- package/core/descriptors/action.descriptor.d.ts +12 -0
- package/core/descriptors/column.descriptor.d.ts +3 -0
- package/core/descriptors/editor.descriptor.d.ts +11 -0
- package/core/descriptors/filter.descriptor.d.ts +3 -0
- package/core/descriptors/lookup.descriptor.d.ts +12 -0
- package/core/descriptors/model.descriptor.d.ts +8 -0
- package/core/descriptors/table.descriptor.d.ts +9 -0
- package/core/descriptors/tableview.descriptor.d.ts +11 -0
- package/core/directives/component.directive.d.ts +20 -0
- package/core/directives/dialog-keydown-handler.directive.d.ts +12 -0
- package/core/directives/template.directive.d.ts +12 -0
- package/core/enum/enum.model.d.ts +8 -0
- package/core/enum/enum.util.d.ts +51 -0
- package/core/error/error-handler.d.ts +6 -0
- package/core/error/error.model.d.ts +47 -0
- package/core/error/error.util.d.ts +116 -0
- package/core/helpers/coercion.d.ts +9 -0
- package/core/helpers/notification.d.ts +2 -0
- package/core/helpers/type-helpers.d.ts +16 -0
- package/core/index.d.ts +77 -0
- package/core/log/log-publisher-console.service.d.ts +4 -0
- package/core/log/log.model.d.ts +40 -0
- package/core/log/logger.service.d.ts +33 -0
- package/core/models/class-service.model.d.ts +7 -0
- package/core/models/getter.model.d.ts +2 -0
- package/core/models/i18n.model.d.ts +1 -0
- package/core/models/menu.model.d.ts +32 -0
- package/core/models/user.model.d.ts +8 -0
- package/core/pipes/boolean.pipe.d.ts +7 -0
- package/core/pipes/class-map.pipe.d.ts +7 -0
- package/core/pipes/enumerate-async.pipe.d.ts +9 -0
- package/core/pipes/enumerate.pipe.d.ts +16 -0
- package/core/pipes/getter.pipe.d.ts +8 -0
- package/core/pipes/json-path.pipe.d.ts +13 -0
- package/core/pipes/parametrize.pipe.d.ts +12 -0
- package/core/pipes/template.pipe.d.ts +10 -0
- package/core/provide.d.ts +12 -0
- package/core/reflect/type-enum-metadata.d.ts +32 -0
- package/core/registry/registry.model.d.ts +8 -0
- package/core/registry/type-registry.d.ts +27 -0
- package/core/router/route-builder.d.ts +67 -0
- package/core/router/router.model.d.ts +13 -0
- package/core/router/routes-builder.d.ts +19 -0
- package/core/rxjs/map-data-list-result-operator.d.ts +9 -0
- package/core/security/permission.guard.d.ts +2 -0
- package/core/security/permission.service.d.ts +16 -0
- package/core/security/permission.util.d.ts +5 -0
- package/core/security/permissions.model.d.ts +55 -0
- package/core/services/commons-configuration.service.d.ts +69 -0
- package/core/services/commons-init.service.d.ts +30 -0
- package/core/services/commons-router.service.d.ts +37 -0
- package/core/services/commons.service.d.ts +66 -0
- package/core/services/local-storage-config.service.d.ts +11 -0
- package/core/services/providers/commons-init.provider.d.ts +4 -0
- package/core/services/tokens/browser-storage.token.d.ts +2 -0
- package/core/services/tokens/commons-init.token.d.ts +3 -0
- package/core/services/tokens/log-publisher.token.d.ts +3 -0
- package/core/services/tokens/module-config.token.d.ts +34 -0
- package/core/styles/style-constants.d.ts +10 -0
- package/core/styles/style.model.d.ts +17 -0
- package/core/utils/i18n.util.d.ts +36 -0
- package/core/utils/object.util.d.ts +31 -0
- package/core/utils/route.util.d.ts +37 -0
- package/dev-scripts/version-info.js +1 -1
- package/esm2022/core/action/action-data.model.mjs +2 -0
- package/esm2022/core/action/action-parameters.model.mjs +2 -0
- package/esm2022/core/components/notification/notification-wrapper.component.mjs +50 -0
- package/esm2022/core/components/pages/error/error.page.component.mjs +21 -0
- package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +21 -0
- package/esm2022/core/data-list/data-list-params.util.mjs +417 -0
- package/esm2022/core/data-list/data-list.model.mjs +2 -0
- package/esm2022/core/data-list/filter-match.model.mjs +105 -0
- package/esm2022/core/data-providers/base.data-provider.mjs +48 -0
- package/esm2022/core/data-providers/lookup.data-provider.mjs +2 -0
- package/esm2022/core/descriptors/action.descriptor.mjs +2 -0
- package/esm2022/core/descriptors/column.descriptor.mjs +2 -0
- package/esm2022/core/descriptors/editor.descriptor.mjs +2 -0
- package/esm2022/core/descriptors/filter.descriptor.mjs +2 -0
- package/esm2022/core/descriptors/lookup.descriptor.mjs +2 -0
- package/esm2022/core/descriptors/model.descriptor.mjs +2 -0
- package/esm2022/core/descriptors/table.descriptor.mjs +2 -0
- package/esm2022/core/descriptors/tableview.descriptor.mjs +2 -0
- package/esm2022/core/directives/component.directive.mjs +72 -0
- package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +49 -0
- package/esm2022/core/directives/template.directive.mjs +29 -0
- package/esm2022/core/enum/enum.model.mjs +2 -0
- package/esm2022/core/enum/enum.util.mjs +83 -0
- package/esm2022/core/error/error-handler.mjs +20 -0
- package/esm2022/core/error/error.model.mjs +32 -0
- package/esm2022/core/error/error.util.mjs +249 -0
- package/esm2022/core/helpers/coercion.mjs +52 -0
- package/esm2022/core/helpers/notification.mjs +6 -0
- package/esm2022/core/helpers/type-helpers.mjs +2 -0
- package/esm2022/core/index.mjs +99 -0
- package/esm2022/core/log/log-publisher-console.service.mjs +40 -0
- package/esm2022/core/log/log.model.mjs +10 -0
- package/esm2022/core/log/logger.service.mjs +131 -0
- package/esm2022/core/mediusinc-mng-commons-core.mjs +5 -0
- package/esm2022/core/models/class-attribute.model.mjs +2 -0
- package/esm2022/core/models/class-service.model.mjs +2 -0
- package/esm2022/core/models/getter.model.mjs +2 -0
- package/esm2022/core/models/i18n.model.mjs +2 -0
- package/esm2022/core/models/menu.model.mjs +2 -0
- package/esm2022/core/models/user.model.mjs +2 -0
- package/esm2022/core/models/version.model.mjs +2 -0
- package/esm2022/core/pipes/boolean.pipe.mjs +28 -0
- package/esm2022/core/pipes/class-map.pipe.mjs +23 -0
- package/esm2022/core/pipes/enumerate-async.pipe.mjs +36 -0
- package/esm2022/core/pipes/enumerate.pipe.mjs +49 -0
- package/esm2022/core/pipes/getter.pipe.mjs +21 -0
- package/esm2022/core/pipes/json-path.pipe.mjs +25 -0
- package/esm2022/core/pipes/parametrize.pipe.mjs +86 -0
- package/esm2022/core/pipes/template.pipe.mjs +26 -0
- package/esm2022/core/provide.mjs +98 -0
- package/esm2022/core/reflect/type-enum-decorator.mjs +12 -0
- package/esm2022/core/reflect/type-enum-metadata.mjs +62 -0
- package/esm2022/core/registry/registry.model.mjs +2 -0
- package/esm2022/core/registry/type-registry.mjs +106 -0
- package/esm2022/core/router/route-builder.mjs +336 -0
- package/esm2022/core/router/router.model.mjs +2 -0
- package/esm2022/core/router/routes-builder.mjs +53 -0
- package/esm2022/core/rxjs/map-data-list-result-operator.mjs +19 -0
- package/esm2022/core/security/permission.guard.mjs +15 -0
- package/esm2022/core/security/permission.service.mjs +49 -0
- package/esm2022/core/security/permission.util.mjs +16 -0
- package/esm2022/core/security/permissions.model.mjs +93 -0
- package/esm2022/core/services/commons-configuration.service.mjs +174 -0
- package/esm2022/core/services/commons-init.service.mjs +111 -0
- package/esm2022/core/services/commons-router.service.mjs +180 -0
- package/esm2022/core/services/commons.service.mjs +390 -0
- package/esm2022/core/services/local-storage-config.service.mjs +29 -0
- package/esm2022/core/services/providers/commons-init.provider.mjs +4 -0
- package/esm2022/core/services/tokens/browser-storage.token.mjs +3 -0
- package/esm2022/core/services/tokens/commons-init.token.mjs +3 -0
- package/esm2022/core/services/tokens/log-publisher.token.mjs +3 -0
- package/esm2022/core/services/tokens/module-config.token.mjs +3 -0
- package/esm2022/core/styles/style-constants.mjs +11 -0
- package/esm2022/core/styles/style.model.mjs +20 -0
- package/esm2022/core/utils/date.util.mjs +136 -0
- package/esm2022/core/utils/i18n.util.mjs +137 -0
- package/esm2022/core/utils/object.util.mjs +147 -0
- package/esm2022/core/utils/route.util.mjs +60 -0
- package/esm2022/core/utils/string.util.mjs +59 -0
- package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +186 -0
- package/esm2022/filter/descriptors/filter.descriptor.mjs +197 -0
- package/esm2022/filter/index.mjs +6 -0
- package/esm2022/filter/mediusinc-mng-commons-filter.mjs +5 -0
- package/esm2022/filter/models/filter.model.mjs +15 -0
- package/esm2022/form/api/data-providers/lookup.data-provider.mjs +45 -0
- package/esm2022/form/api/descriptors/action-button.descriptor.mjs +68 -0
- package/esm2022/form/api/descriptors/button-style.builder.mjs +174 -0
- package/esm2022/form/api/index.mjs +8 -0
- package/esm2022/form/api/mediusinc-mng-commons-form-api.mjs +5 -0
- package/esm2022/form/api/models/trim.model.mjs +2 -0
- package/esm2022/form/components/autocomplete/autocomplete.component.mjs +404 -0
- package/esm2022/form/components/date-range/date-range.component.mjs +110 -0
- package/esm2022/form/components/dropdown/dropdown.component.mjs +213 -0
- package/esm2022/form/directives/input-trim.directive.mjs +55 -0
- package/esm2022/form/index.mjs +7 -0
- package/esm2022/form/mediusinc-mng-commons-form.mjs +5 -0
- package/esm2022/index.mjs +2 -74
- package/esm2022/model/descriptors/enum.descriptor.mjs +31 -0
- package/esm2022/model/descriptors/model.descriptor.mjs +78 -0
- package/esm2022/model/descriptors/type.descriptor.mjs +21 -0
- package/esm2022/model/index.mjs +11 -0
- package/esm2022/model/mediusinc-mng-commons-model.mjs +5 -0
- package/esm2022/model/pipes/enum.pipe.mjs +26 -0
- package/esm2022/model/pipes/i18n-property.pipe.mjs +19 -0
- package/esm2022/model/utils/i18n.util.mjs +51 -0
- package/esm2022/model/utils/model.util.mjs +73 -0
- package/esm2022/provide.mjs +6 -0
- package/esm2022/table/api/data-providers/table.data-provider.mjs +63 -0
- package/esm2022/table/api/descriptors/column.descriptor.mjs +359 -0
- package/esm2022/table/api/descriptors/sort.descriptor.mjs +45 -0
- package/esm2022/table/api/descriptors/table.descriptor.mjs +750 -0
- package/esm2022/table/api/helpers/class-attribute-converter.mjs +104 -0
- package/esm2022/table/api/index.mjs +16 -0
- package/esm2022/table/api/mediusinc-mng-commons-table-api.mjs +5 -0
- package/esm2022/table/api/models/class-table-attribute.model.mjs +2 -0
- package/esm2022/table/api/models/column-value.model.mjs +2 -0
- package/esm2022/table/api/models/column.model.mjs +21 -0
- package/esm2022/table/api/models/table-columns.model.mjs +2 -0
- package/esm2022/table/api/models/table-event.model.mjs +2 -0
- package/esm2022/table/api/models/table.model.mjs +22 -0
- package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +594 -0
- package/esm2022/table/components/column-value/column-value.component.mjs +88 -0
- package/esm2022/table/components/table/table.component.mjs +647 -0
- package/esm2022/table/helpers/notification.mjs +15 -0
- package/esm2022/table/helpers/table-layout-prefs.mjs +10 -0
- package/esm2022/table/index.mjs +13 -0
- package/esm2022/table/mediusinc-mng-commons-table.mjs +5 -0
- package/esm2022/table/models/column-preferences.model.mjs +2 -0
- package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +27 -0
- package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +25 -0
- package/esm2022/table/services/data-list.service.mjs +23 -0
- package/esm2022/tableview/action/components/action/action.component.mjs +323 -0
- package/esm2022/tableview/action/components/editor/action-editor.component.mjs +97 -0
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +398 -0
- package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +53 -0
- package/esm2022/tableview/action/components/route/action-route.component.mjs +152 -0
- package/esm2022/tableview/action/components/table/action-table.component.mjs +158 -0
- package/esm2022/tableview/action/guards/unsaved-changes.guard.mjs +4 -0
- package/esm2022/tableview/action/helpers/notification.mjs +17 -0
- package/esm2022/tableview/action/helpers/styles.mjs +32 -0
- package/esm2022/tableview/action/models/action-editor-dialog-data.model.mjs +2 -0
- package/esm2022/tableview/action/models/can-component-deactivate.model.mjs +2 -0
- package/esm2022/tableview/action/models/execution/action-context.model.mjs +56 -0
- package/esm2022/tableview/action/models/execution/action-instance-state.model.mjs +32 -0
- package/esm2022/tableview/action/models/execution/action-instance.model.mjs +170 -0
- package/esm2022/tableview/action/services/action-error-mapper.service.mjs +20 -0
- package/esm2022/tableview/action/services/action-executor.service.mjs +766 -0
- package/esm2022/tableview/action/services/component-action-executor.service.mjs +19 -0
- package/esm2022/tableview/action/services/data-provider-executor.service.mjs +26 -0
- package/esm2022/tableview/action/services/navigation.service.mjs +52 -0
- package/esm2022/tableview/action/services/providers/provide-action-executor.mjs +9 -0
- package/esm2022/tableview/action/services/providers/provide-view-container.mjs +17 -0
- package/esm2022/tableview/action/services/root-action-executor.service.mjs +18 -0
- package/esm2022/tableview/action/services/tokens/action-editor.token.mjs +3 -0
- package/esm2022/tableview/action/services/view-container.service.mjs +56 -0
- package/esm2022/tableview/action/utils/i18n.util.mjs +126 -0
- package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +76 -0
- package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +264 -0
- package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +89 -0
- package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +385 -0
- package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +80 -0
- package/esm2022/tableview/api/action/models/action-component.model.mjs +2 -0
- package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +2 -0
- package/esm2022/tableview/api/action/models/action-editor.model.mjs +2 -0
- package/esm2022/tableview/api/action/models/action-error.model.mjs +14 -0
- package/esm2022/tableview/api/action/models/action.type.mjs +26 -0
- package/esm2022/tableview/api/action/models/execution/action-context-validation.model.mjs +2 -0
- package/esm2022/tableview/api/action/models/execution/action-context.model.mjs +2 -0
- package/esm2022/tableview/api/action/models/execution/action-execution-error.model.mjs +2 -0
- package/esm2022/tableview/api/action/models/execution/action-instance-state.model.mjs +32 -0
- package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +2 -0
- package/esm2022/tableview/api/action/models/execution/view-container.model.mjs +2 -0
- package/esm2022/tableview/api/action/models/tableview-action-default-categories.model.mjs +11 -0
- package/esm2022/tableview/api/action/services/data-provider-executor.service.mjs +28 -0
- package/esm2022/tableview/api/action/services/tokens/data-language-dropdown.token.mjs +3 -0
- package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +104 -0
- package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +626 -0
- package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +49 -0
- package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +288 -0
- package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +97 -0
- package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +213 -0
- package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +153 -0
- package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +25 -0
- package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +343 -0
- package/esm2022/tableview/api/editor/helpers/class-attribute-converter.mjs +85 -0
- package/esm2022/tableview/api/editor/helpers/field-validators.mjs +33 -0
- package/esm2022/tableview/api/editor/models/class-tableview-attribute.model.mjs +2 -0
- package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +2 -0
- package/esm2022/tableview/api/editor/models/editor.model.mjs +9 -0
- package/esm2022/tableview/api/editor/models/field-action-context.model.mjs +2 -0
- package/esm2022/tableview/api/editor/models/field.model.mjs +56 -0
- package/esm2022/tableview/api/editor/models/form-editor.event.mjs +27 -0
- package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +2 -0
- package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +69 -0
- package/esm2022/tableview/api/editor/models/formly-field.model.mjs +2 -0
- package/esm2022/tableview/api/editor/models/radio.model.mjs +2 -0
- package/esm2022/tableview/api/index.mjs +64 -0
- package/esm2022/tableview/api/mediusinc-mng-commons-tableview-api.mjs +5 -0
- package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +105 -0
- package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +672 -0
- package/esm2022/tableview/api/tableview/helpers/class-attribute-converter.mjs +34 -0
- package/esm2022/tableview/api/tableview/helpers/files-export.mjs +34 -0
- package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +24 -0
- package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +240 -0
- package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +162 -0
- package/esm2022/tableview/api/tableview/models/class-tableview-attribute.model.mjs +2 -0
- package/esm2022/tableview/api/tableview/models/tableview-input.model.mjs +2 -0
- package/esm2022/tableview/api/tableview/models/tableview-route.model.mjs +2 -0
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +285 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +61 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +54 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +39 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +49 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +27 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +220 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +24 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +215 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +217 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +196 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +18 -0
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +33 -0
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +30 -0
- package/esm2022/tableview/editor/helpers/formly-config.mjs +260 -0
- package/esm2022/tableview/editor/helpers/notification.mjs +11 -0
- package/esm2022/tableview/editor/models/formly-config.model.mjs +2 -0
- package/esm2022/tableview/editor/services/formly-config.provider.mjs +31 -0
- package/esm2022/tableview/editor/utils/editor-formly.util.mjs +337 -0
- package/esm2022/tableview/index.mjs +64 -0
- package/esm2022/tableview/mediusinc-mng-commons-tableview.mjs +5 -0
- package/esm2022/tableview/provide.mjs +61 -0
- package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +15 -0
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +84 -0
- package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +201 -0
- package/esm2022/tableview/tableview/services/tableview-feature-config.token.mjs +3 -0
- package/fesm2022/mediusinc-mng-commons-core.mjs +3904 -0
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-filter.mjs +403 -0
- package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-form-api.mjs +294 -0
- package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-form.mjs +770 -0
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-model.mjs +300 -0
- package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +1363 -0
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-table.mjs +1393 -0
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +4372 -0
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +4756 -0
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons.mjs +5 -18605
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/filter/README.md +9 -0
- package/filter/descriptors/filter-lookup.descriptor.d.ts +67 -0
- package/filter/descriptors/filter.descriptor.d.ts +67 -0
- package/filter/index.d.ts +3 -0
- package/form/README.md +8 -0
- package/form/api/README.md +7 -0
- package/form/api/data-providers/lookup.data-provider.d.ts +19 -0
- package/form/api/descriptors/action-button.descriptor.d.ts +25 -0
- package/form/api/descriptors/button-style.builder.d.ts +68 -0
- package/form/api/index.d.ts +4 -0
- package/form/components/autocomplete/autocomplete.component.d.ts +82 -0
- package/form/components/date-range/date-range.component.d.ts +28 -0
- package/form/components/dropdown/dropdown.component.d.ts +55 -0
- package/form/directives/input-trim.directive.d.ts +14 -0
- package/form/index.d.ts +4 -0
- package/index.d.ts +1 -50
- package/model/README.md +7 -0
- package/model/descriptors/enum.descriptor.d.ts +14 -0
- package/model/descriptors/model.descriptor.d.ts +31 -0
- package/model/descriptors/type.descriptor.d.ts +10 -0
- package/model/index.d.ts +7 -0
- package/model/pipes/enum.pipe.d.ts +8 -0
- package/model/pipes/i18n-property.pipe.d.ts +8 -0
- package/model/utils/i18n.util.d.ts +15 -0
- package/model/utils/model.util.d.ts +8 -0
- package/package.json +55 -19
- package/provide.d.ts +7 -0
- package/table/README.md +11 -0
- package/table/api/README.md +9 -0
- package/table/api/data-providers/table.data-provider.d.ts +38 -0
- package/table/api/descriptors/column.descriptor.d.ts +148 -0
- package/table/api/descriptors/table.descriptor.d.ts +271 -0
- package/table/api/helpers/class-attribute-converter.d.ts +22 -0
- package/table/api/index.d.ts +11 -0
- package/table/api/models/class-table-attribute.model.d.ts +8 -0
- package/table/api/models/column-value.model.d.ts +7 -0
- package/table/api/models/table-columns.model.d.ts +42 -0
- package/table/api/models/table-event.model.d.ts +17 -0
- package/table/api/models/table.model.d.ts +35 -0
- package/table/components/column-filter-full/column-filter-full.component.d.ts +100 -0
- package/table/components/column-value/column-value.component.d.ts +33 -0
- package/table/components/table/table.component.d.ts +114 -0
- package/table/helpers/notification.d.ts +4 -0
- package/table/helpers/table-layout-prefs.d.ts +7 -0
- package/table/index.d.ts +8 -0
- package/table/models/column-preferences.model.d.ts +12 -0
- package/table/pipes/locale-default-row-class.pipe.d.ts +10 -0
- package/table/pipes/table-column-filter-class.pipe.d.ts +8 -0
- package/table/services/data-list.service.d.ts +16 -0
- package/tableview/README.md +13 -0
- package/tableview/action/components/action/action.component.d.ts +73 -0
- package/tableview/action/components/editor/action-editor.component.d.ts +31 -0
- package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +76 -0
- package/tableview/action/components/localization/data-language-dropdown.component.d.ts +22 -0
- package/tableview/action/components/route/action-route.component.d.ts +31 -0
- package/tableview/action/components/table/action-table.component.d.ts +48 -0
- package/tableview/action/guards/unsaved-changes.guard.d.ts +3 -0
- package/tableview/action/helpers/notification.d.ts +6 -0
- package/tableview/action/helpers/styles.d.ts +5 -0
- package/tableview/action/models/action-editor-dialog-data.model.d.ts +11 -0
- package/tableview/action/models/execution/action-context.model.d.ts +36 -0
- package/tableview/action/models/execution/action-instance-state.model.d.ts +30 -0
- package/tableview/action/models/execution/action-instance.model.d.ts +56 -0
- package/tableview/action/services/action-error-mapper.service.d.ts +18 -0
- package/tableview/action/services/action-executor.service.d.ts +175 -0
- package/tableview/action/services/component-action-executor.service.d.ts +9 -0
- package/tableview/action/services/data-provider-executor.service.d.ts +23 -0
- package/tableview/action/services/navigation.service.d.ts +15 -0
- package/tableview/action/services/root-action-executor.service.d.ts +9 -0
- package/tableview/action/services/tokens/action-editor.token.d.ts +2 -0
- package/tableview/action/services/view-container.service.d.ts +30 -0
- package/tableview/action/utils/i18n.util.d.ts +48 -0
- package/tableview/api/README.md +11 -0
- package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +36 -0
- package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +117 -0
- package/tableview/api/action/descriptors/action-link.descriptor.d.ts +34 -0
- package/tableview/api/action/descriptors/action.descriptor.d.ts +151 -0
- package/tableview/api/action/helpers/data-provider-executors.d.ts +18 -0
- package/tableview/api/action/models/action-component.model.d.ts +12 -0
- package/tableview/api/action/models/action-descriptor.types.d.ts +5 -0
- package/tableview/api/action/models/action-editor.model.d.ts +4 -0
- package/tableview/api/action/models/action-error.model.d.ts +14 -0
- package/tableview/api/action/models/execution/action-context-validation.model.d.ts +11 -0
- package/tableview/api/action/models/execution/action-context.model.d.ts +24 -0
- package/tableview/api/action/models/execution/action-execution-error.model.d.ts +4 -0
- package/tableview/api/action/models/execution/action-instance-state.model.d.ts +30 -0
- package/tableview/api/action/models/execution/action-instance.model.d.ts +31 -0
- package/tableview/api/action/models/execution/view-container.model.d.ts +38 -0
- package/tableview/api/action/services/data-provider-executor.service.d.ts +38 -0
- package/tableview/api/action/services/tokens/data-language-dropdown.token.d.ts +2 -0
- package/tableview/api/editor/data-providers/editor.data-provider.d.ts +87 -0
- package/tableview/api/editor/descriptors/editor.descriptor.d.ts +366 -0
- package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +22 -0
- package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +120 -0
- package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +41 -0
- package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +80 -0
- package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +61 -0
- package/tableview/api/editor/descriptors/field-validation.descriptor.d.ts +19 -0
- package/tableview/api/editor/descriptors/field.descriptor.d.ts +168 -0
- package/tableview/api/editor/helpers/class-attribute-converter.d.ts +21 -0
- package/tableview/api/editor/helpers/field-validators.d.ts +3 -0
- package/tableview/api/editor/models/class-tableview-attribute.model.d.ts +7 -0
- package/tableview/api/editor/models/editor-fields.model.d.ts +34 -0
- package/tableview/api/editor/models/editor.model.d.ts +7 -0
- package/tableview/api/editor/models/field-action-context.model.d.ts +24 -0
- package/tableview/api/editor/models/field.model.d.ts +66 -0
- package/tableview/api/editor/models/form-editor.event.d.ts +55 -0
- package/tableview/api/editor/models/formly-custom-field.model.d.ts +27 -0
- package/tableview/api/editor/models/formly-field.model.d.ts +18 -0
- package/tableview/api/index.d.ts +50 -0
- package/tableview/api/tableview/data-providers/tableview.data-provider.d.ts +43 -0
- package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +296 -0
- package/tableview/api/tableview/helpers/class-attribute-converter.d.ts +8 -0
- package/tableview/api/tableview/helpers/files-export.d.ts +4 -0
- package/tableview/api/tableview/helpers/tableview-create.d.ts +16 -0
- package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +38 -0
- package/tableview/api/tableview/helpers/tableview-input-builder.d.ts +114 -0
- package/tableview/api/tableview/models/class-tableview-attribute.model.d.ts +3 -0
- package/tableview/api/tableview/models/tableview-input.model.d.ts +8 -0
- package/tableview/api/tableview/models/tableview-route.model.d.ts +20 -0
- package/tableview/editor/components/editor/form-editor.component.d.ts +50 -0
- package/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.d.ts +14 -0
- package/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +15 -0
- package/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.d.ts +11 -0
- package/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +14 -0
- package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +12 -0
- package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +37 -0
- package/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.d.ts +11 -0
- package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +43 -0
- package/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +23 -0
- package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +41 -0
- package/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +7 -0
- package/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +11 -0
- package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +9 -0
- package/tableview/editor/helpers/formly-config.d.ts +18 -0
- package/tableview/editor/helpers/notification.d.ts +4 -0
- package/tableview/editor/models/formly-config.model.d.ts +5 -0
- package/tableview/editor/services/formly-config.provider.d.ts +5 -0
- package/tableview/editor/utils/editor-formly.util.d.ts +12 -0
- package/tableview/index.d.ts +48 -0
- package/tableview/provide.d.ts +8 -0
- package/tableview/tableview/components/route/tableview-route.component.d.ts +7 -0
- package/tableview/tableview/components/tableview/tableview.component.d.ts +26 -0
- package/tableview/tableview/router/tableview-route-builder.d.ts +42 -0
- package/tableview/tableview/services/tableview-feature-config.token.d.ts +18 -0
- package/assets/fonts/poppins-v20-latin-500.woff +0 -0
- package/assets/fonts/poppins-v20-latin-500.woff2 +0 -0
- package/assets/fonts/poppins-v20-latin-600.woff +0 -0
- package/assets/fonts/poppins-v20-latin-600.woff2 +0 -0
- package/assets/fonts/poppins-v20-latin-700.woff +0 -0
- package/assets/fonts/poppins-v20-latin-700.woff2 +0 -0
- package/assets/fonts/poppins-v20-latin-regular.woff +0 -0
- package/assets/fonts/poppins-v20-latin-regular.woff2 +0 -0
- package/assets/images/effect-ondark.png +0 -0
- package/assets/images/effect-ondark.svg +0 -38
- package/assets/images/effect-ondark@2x.png +0 -0
- package/assets/images/effect-onlight.png +0 -0
- package/assets/images/effect-onlight.svg +0 -38
- package/assets/images/effect-onlight@2x.png +0 -0
- package/assets/images/pages/exception-ondark.png +0 -0
- package/assets/images/pages/exception-onlight.png +0 -0
- package/assets/images/pages/login-ondark.png +0 -0
- package/assets/images/pages/login-onlight.png +0 -0
- package/data-api/README.md +0 -3
- package/data-api/class-dto/README.md +0 -3
- package/data-api/class-dto/helpers/tableview-crud-create.d.ts +0 -40
- package/data-api/class-dto/index.d.ts +0 -7
- package/data-api/class-dto/models/query-result.model.d.ts +0 -13
- package/data-api/class-dto/obsolete/README.md +0 -3
- package/data-api/class-dto/obsolete/helpers/query-param-convert.d.ts +0 -23
- package/data-api/class-dto/obsolete/helpers/tableview-crud-create.d.ts +0 -22
- package/data-api/class-dto/obsolete/index.d.ts +0 -14
- package/data-api/class-dto/obsolete/models/builders/query-param.builder.d.ts +0 -36
- package/data-api/class-dto/obsolete/models/filter-match-type.model.d.ts +0 -25
- package/data-api/class-dto/obsolete/models/filter-param.model.d.ts +0 -23
- package/data-api/class-dto/obsolete/models/query-mode.model.d.ts +0 -16
- package/data-api/class-dto/obsolete/models/query-param.model.d.ts +0 -31
- package/data-api/class-dto/obsolete/models/query-result.model.d.ts +0 -24
- package/data-api/class-dto/obsolete/provide.d.ts +0 -9
- package/data-api/class-dto/obsolete/services/api.abstract.service.d.ts +0 -36
- package/data-api/class-dto/obsolete/services/crud-api.abstract.service.d.ts +0 -37
- package/data-api/class-dto/obsolete/services/get-all-api.abstract.service.d.ts +0 -30
- package/data-api/class-dto/obsolete/tableview/tableview-crud.data-provider.d.ts +0 -28
- package/data-api/class-dto/obsolete/utils/query-param-map.util.d.ts +0 -22
- package/data-api/class-dto/serder/object-serializer.d.ts +0 -26
- package/data-api/class-dto/services/api.abstract.service.d.ts +0 -22
- package/data-api/class-dto/services/crud-api.abstract.service.d.ts +0 -25
- package/data-api/class-dto/services/get-all-api.abstract.service.d.ts +0 -14
- package/data-api/class-dto/tableview/tableview-crud.data-provider.d.ts +0 -17
- package/data-api/helpers/get-all-params.d.ts +0 -69
- package/data-api/helpers/tableview-get-all-params-create.d.ts +0 -14
- package/data-api/index.d.ts +0 -5
- package/data-api/models/request-params.model.d.ts +0 -61
- package/data-api/rxjs/map-to-data-list.operator.d.ts +0 -9
- package/data-api/types/extract-get-all-params.type.d.ts +0 -14
- package/esm2022/data-api/class-dto/helpers/tableview-crud-create.mjs +0 -40
- package/esm2022/data-api/class-dto/index.mjs +0 -13
- package/esm2022/data-api/class-dto/mediusinc-mng-commons-data-api-class-dto.mjs +0 -5
- package/esm2022/data-api/class-dto/models/query-result.model.mjs +0 -24
- package/esm2022/data-api/class-dto/obsolete/helpers/query-param-convert.mjs +0 -103
- package/esm2022/data-api/class-dto/obsolete/helpers/tableview-crud-create.mjs +0 -21
- package/esm2022/data-api/class-dto/obsolete/index.mjs +0 -21
- package/esm2022/data-api/class-dto/obsolete/mediusinc-mng-commons-data-api-class-dto-obsolete.mjs +0 -5
- package/esm2022/data-api/class-dto/obsolete/models/builders/query-param.builder.mjs +0 -83
- package/esm2022/data-api/class-dto/obsolete/models/filter-match-type.model.mjs +0 -27
- package/esm2022/data-api/class-dto/obsolete/models/filter-param.model.mjs +0 -33
- package/esm2022/data-api/class-dto/obsolete/models/query-mode.model.mjs +0 -18
- package/esm2022/data-api/class-dto/obsolete/models/query-param.model.mjs +0 -68
- package/esm2022/data-api/class-dto/obsolete/models/query-result.model.mjs +0 -24
- package/esm2022/data-api/class-dto/obsolete/provide.mjs +0 -40
- package/esm2022/data-api/class-dto/obsolete/services/api.abstract.service.mjs +0 -70
- package/esm2022/data-api/class-dto/obsolete/services/crud-api.abstract.service.mjs +0 -83
- package/esm2022/data-api/class-dto/obsolete/services/get-all-api.abstract.service.mjs +0 -38
- package/esm2022/data-api/class-dto/obsolete/tableview/tableview-crud.data-provider.mjs +0 -51
- package/esm2022/data-api/class-dto/obsolete/utils/query-param-map.util.mjs +0 -57
- package/esm2022/data-api/class-dto/serder/object-serializer.mjs +0 -184
- package/esm2022/data-api/class-dto/services/api.abstract.service.mjs +0 -55
- package/esm2022/data-api/class-dto/services/crud-api.abstract.service.mjs +0 -82
- package/esm2022/data-api/class-dto/services/get-all-api.abstract.service.mjs +0 -49
- package/esm2022/data-api/class-dto/tableview/tableview-crud.data-provider.mjs +0 -49
- package/esm2022/data-api/helpers/get-all-params.mjs +0 -180
- package/esm2022/data-api/helpers/tableview-get-all-params-create.mjs +0 -18
- package/esm2022/data-api/index.mjs +0 -10
- package/esm2022/data-api/mediusinc-mng-commons-data-api.mjs +0 -5
- package/esm2022/data-api/models/request-params.model.mjs +0 -2
- package/esm2022/data-api/rxjs/map-to-data-list.operator.mjs +0 -19
- package/esm2022/data-api/types/extract-get-all-params.type.mjs +0 -2
- package/esm2022/lib/components/action/action.component.mjs +0 -314
- package/esm2022/lib/components/action/editor/action-editor.component.mjs +0 -98
- package/esm2022/lib/components/action/editor/injector-context/action-editor-injector-context.component.mjs +0 -394
- package/esm2022/lib/components/action/index.mjs +0 -6
- package/esm2022/lib/components/action/localization/data-language-dropdown.component.mjs +0 -53
- package/esm2022/lib/components/action/models/action-component.model.mjs +0 -2
- package/esm2022/lib/components/action/models/action-execution.model.mjs +0 -323
- package/esm2022/lib/components/action/models/index.mjs +0 -4
- package/esm2022/lib/components/action/models/tableview-action-default-categories.model.mjs +0 -11
- package/esm2022/lib/components/action/route/action-route.component.mjs +0 -141
- package/esm2022/lib/components/action/table/action-table.component.mjs +0 -152
- package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +0 -408
- package/esm2022/lib/components/form/date-range/date-range.component.mjs +0 -110
- package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +0 -210
- package/esm2022/lib/components/form/editor/form-editor.component.mjs +0 -281
- package/esm2022/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +0 -61
- package/esm2022/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +0 -54
- package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.mjs +0 -69
- package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.mjs +0 -39
- package/esm2022/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +0 -49
- package/esm2022/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +0 -27
- package/esm2022/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +0 -220
- package/esm2022/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +0 -24
- package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +0 -219
- package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +0 -221
- package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +0 -212
- package/esm2022/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +0 -18
- package/esm2022/lib/components/form/formly/fields/index.mjs +0 -13
- package/esm2022/lib/components/form/formly/formly.config.mjs +0 -250
- package/esm2022/lib/components/form/formly/index.mjs +0 -2
- package/esm2022/lib/components/form/formly/models/formly-config.model.mjs +0 -2
- package/esm2022/lib/components/form/formly/models/formly-field.model.mjs +0 -2
- package/esm2022/lib/components/form/formly/models/index.mjs +0 -3
- package/esm2022/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +0 -33
- package/esm2022/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +0 -31
- package/esm2022/lib/components/form/formly/wrappers/index.mjs +0 -3
- package/esm2022/lib/components/form/index.mjs +0 -5
- package/esm2022/lib/components/form/models/field-action-context.model.mjs +0 -2
- package/esm2022/lib/components/form/models/form-editor.event.mjs +0 -49
- package/esm2022/lib/components/form/models/form-editor.interface.mjs +0 -2
- package/esm2022/lib/components/form/models/index.mjs +0 -4
- package/esm2022/lib/components/layout/breadcrumb.component.mjs +0 -34
- package/esm2022/lib/components/layout/footer.component.mjs +0 -19
- package/esm2022/lib/components/layout/index.mjs +0 -9
- package/esm2022/lib/components/layout/main-layout.component.mjs +0 -53
- package/esm2022/lib/components/layout/menu-item.component.mjs +0 -296
- package/esm2022/lib/components/layout/menu.component.mjs +0 -34
- package/esm2022/lib/components/layout/services/index.mjs +0 -2
- package/esm2022/lib/components/layout/services/main-layout.component.service.mjs +0 -196
- package/esm2022/lib/components/layout/topbar-user.component.mjs +0 -46
- package/esm2022/lib/components/layout/topbar.component.mjs +0 -66
- package/esm2022/lib/components/layout/version.component.mjs +0 -60
- package/esm2022/lib/components/layoutV2/breadcrumb.component.mjs +0 -30
- package/esm2022/lib/components/layoutV2/footer.component.mjs +0 -29
- package/esm2022/lib/components/layoutV2/index.mjs +0 -8
- package/esm2022/lib/components/layoutV2/main-layout.component.mjs +0 -95
- package/esm2022/lib/components/layoutV2/menu-item.component.mjs +0 -275
- package/esm2022/lib/components/layoutV2/menu.component.mjs +0 -39
- package/esm2022/lib/components/layoutV2/model/index.mjs +0 -3
- package/esm2022/lib/components/layoutV2/model/layout-state.model.mjs +0 -2
- package/esm2022/lib/components/layoutV2/model/menu.model.mjs +0 -2
- package/esm2022/lib/components/layoutV2/services/index.mjs +0 -3
- package/esm2022/lib/components/layoutV2/services/main-layout.component.service.mjs +0 -71
- package/esm2022/lib/components/layoutV2/services/menu.service.mjs +0 -122
- package/esm2022/lib/components/layoutV2/sidebar.component.mjs +0 -62
- package/esm2022/lib/components/layoutV2/topbar-user.component.mjs +0 -40
- package/esm2022/lib/components/layoutV2/topbar.component.mjs +0 -69
- package/esm2022/lib/components/layoutV2/version.component.mjs +0 -63
- package/esm2022/lib/components/notification/notification-wrapper.component.mjs +0 -50
- package/esm2022/lib/components/pages/error/error.page.component.mjs +0 -21
- package/esm2022/lib/components/pages/index.mjs +0 -3
- package/esm2022/lib/components/pages/not-found/not-found.page.component.mjs +0 -21
- package/esm2022/lib/components/table/column-filter-full/column-filter-full.component.mjs +0 -597
- package/esm2022/lib/components/table/column-value/column-value.component.mjs +0 -90
- package/esm2022/lib/components/table/models/table.event.mjs +0 -16
- package/esm2022/lib/components/table/models/table.interface.mjs +0 -2
- package/esm2022/lib/components/table/table-column-filter-class/table-column-filter-class.pipe.mjs +0 -25
- package/esm2022/lib/components/table/table.component.mjs +0 -643
- package/esm2022/lib/components/tableview/actions/tableview-default-actions.mjs +0 -215
- package/esm2022/lib/components/tableview/builders/tableview-builder.mjs +0 -162
- package/esm2022/lib/components/tableview/helpers/tableview-create.mjs +0 -24
- package/esm2022/lib/components/tableview/index.mjs +0 -7
- package/esm2022/lib/components/tableview/models/tableview.model.mjs +0 -2
- package/esm2022/lib/components/tableview/route/tableview-route.component.mjs +0 -15
- package/esm2022/lib/components/tableview/tableview.component.mjs +0 -82
- package/esm2022/lib/data-providers/base.data-provider.mjs +0 -48
- package/esm2022/lib/data-providers/editor.data-provider.mjs +0 -105
- package/esm2022/lib/data-providers/index.mjs +0 -6
- package/esm2022/lib/data-providers/lookup.data-provider.mjs +0 -45
- package/esm2022/lib/data-providers/table.data-provider.mjs +0 -64
- package/esm2022/lib/data-providers/tableview.data-provider.mjs +0 -105
- package/esm2022/lib/descriptors/action/action-button.descriptor.mjs +0 -68
- package/esm2022/lib/descriptors/action/action-confirmation.descriptor.mjs +0 -77
- package/esm2022/lib/descriptors/action/action-editor.descriptor.mjs +0 -266
- package/esm2022/lib/descriptors/action/action-link.descriptor.mjs +0 -89
- package/esm2022/lib/descriptors/action/action.descriptor.mjs +0 -383
- package/esm2022/lib/descriptors/action/index.mjs +0 -6
- package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +0 -510
- package/esm2022/lib/descriptors/editor/field-action.descriptor.mjs +0 -50
- package/esm2022/lib/descriptors/editor/field-base.descriptor.mjs +0 -285
- package/esm2022/lib/descriptors/editor/field-group.descriptor.mjs +0 -97
- package/esm2022/lib/descriptors/editor/field-lookup.descriptor.mjs +0 -212
- package/esm2022/lib/descriptors/editor/field-many.descriptor.mjs +0 -153
- package/esm2022/lib/descriptors/editor/field-validation.descriptor.mjs +0 -25
- package/esm2022/lib/descriptors/editor/field.descriptor.mjs +0 -343
- package/esm2022/lib/descriptors/editor/index.mjs +0 -9
- package/esm2022/lib/descriptors/editor/internal/editor-fields.model.mjs +0 -2
- package/esm2022/lib/descriptors/editor/internal/editor.model.mjs +0 -2
- package/esm2022/lib/descriptors/filter/filter-lookup.descriptor.mjs +0 -186
- package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +0 -198
- package/esm2022/lib/descriptors/filter/index.mjs +0 -3
- package/esm2022/lib/descriptors/interfaces/field-config.interface.mjs +0 -2
- package/esm2022/lib/descriptors/interfaces/index.mjs +0 -3
- package/esm2022/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +0 -2
- package/esm2022/lib/descriptors/model/enum.descriptor.mjs +0 -31
- package/esm2022/lib/descriptors/model/index.mjs +0 -4
- package/esm2022/lib/descriptors/model/model.descriptor.mjs +0 -79
- package/esm2022/lib/descriptors/model/type.descriptor.mjs +0 -11
- package/esm2022/lib/descriptors/table/column.descriptor.mjs +0 -359
- package/esm2022/lib/descriptors/table/index.mjs +0 -4
- package/esm2022/lib/descriptors/table/internal/table-columns.model.mjs +0 -2
- package/esm2022/lib/descriptors/table/internal/table.model.mjs +0 -2
- package/esm2022/lib/descriptors/table/sort.descriptor.mjs +0 -45
- package/esm2022/lib/descriptors/table/table.descriptor.mjs +0 -751
- package/esm2022/lib/descriptors/tableview/index.mjs +0 -2
- package/esm2022/lib/descriptors/tableview/internal/tableview.model.mjs +0 -2
- package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +0 -558
- package/esm2022/lib/descriptors/types/action.type.mjs +0 -26
- package/esm2022/lib/descriptors/types/column.type.mjs +0 -21
- package/esm2022/lib/descriptors/types/editor.type.mjs +0 -8
- package/esm2022/lib/descriptors/types/field.type.mjs +0 -56
- package/esm2022/lib/descriptors/types/filter.type.mjs +0 -15
- package/esm2022/lib/descriptors/types/index.mjs +0 -8
- package/esm2022/lib/descriptors/types/table.type.mjs +0 -22
- package/esm2022/lib/descriptors/types/trim.type.mjs +0 -2
- package/esm2022/lib/directives/component.directive.mjs +0 -66
- package/esm2022/lib/directives/dialog-keydown-handler.directive.mjs +0 -49
- package/esm2022/lib/directives/index.mjs +0 -5
- package/esm2022/lib/directives/input-trim.directive.mjs +0 -55
- package/esm2022/lib/directives/template.directive.mjs +0 -29
- package/esm2022/lib/error/error.handler.mjs +0 -20
- package/esm2022/lib/error/index.mjs +0 -2
- package/esm2022/lib/guards/index.mjs +0 -2
- package/esm2022/lib/guards/unsaved-changes.guard.mjs +0 -4
- package/esm2022/lib/helpers/coercion.mjs +0 -52
- package/esm2022/lib/helpers/data-provider-executors.mjs +0 -80
- package/esm2022/lib/models/action-editor.model.mjs +0 -2
- package/esm2022/lib/models/can-component-deactivate.model.mjs +0 -2
- package/esm2022/lib/models/class.model.mjs +0 -2
- package/esm2022/lib/models/column-value.model.mjs +0 -2
- package/esm2022/lib/models/common-init-event-enum.model.mjs +0 -11
- package/esm2022/lib/models/config.model.mjs +0 -2
- package/esm2022/lib/models/data-list.model.mjs +0 -2
- package/esm2022/lib/models/enum.model.mjs +0 -2
- package/esm2022/lib/models/error.model.mjs +0 -44
- package/esm2022/lib/models/filter-match.model.mjs +0 -105
- package/esm2022/lib/models/index.mjs +0 -20
- package/esm2022/lib/models/layout-config.model.mjs +0 -2
- package/esm2022/lib/models/log.model.mjs +0 -10
- package/esm2022/lib/models/menu.model.mjs +0 -2
- package/esm2022/lib/models/radio.model.mjs +0 -2
- package/esm2022/lib/models/tableview-attr.model.mjs +0 -2
- package/esm2022/lib/models/type-registry.model.mjs +0 -2
- package/esm2022/lib/models/user.model.mjs +0 -2
- package/esm2022/lib/models/version.model.mjs +0 -2
- package/esm2022/lib/models/view-container.model.mjs +0 -2
- package/esm2022/lib/pipes/boolean.pipe.mjs +0 -28
- package/esm2022/lib/pipes/class-map.pipe.mjs +0 -23
- package/esm2022/lib/pipes/enum.pipe.mjs +0 -26
- package/esm2022/lib/pipes/enumerate-async.pipe.mjs +0 -41
- package/esm2022/lib/pipes/enumerate.pipe.mjs +0 -58
- package/esm2022/lib/pipes/getter.pipe.mjs +0 -21
- package/esm2022/lib/pipes/i18n-property.pipe.mjs +0 -19
- package/esm2022/lib/pipes/index.mjs +0 -12
- package/esm2022/lib/pipes/json-path.pipe.mjs +0 -25
- package/esm2022/lib/pipes/locale-default-row-class.pipe.mjs +0 -27
- package/esm2022/lib/pipes/models/internal/enumrate-pipe-i18n.model.mjs +0 -2
- package/esm2022/lib/pipes/models/internal/index.mjs +0 -2
- package/esm2022/lib/pipes/parametrize.pipe.mjs +0 -86
- package/esm2022/lib/pipes/template.pipe.mjs +0 -26
- package/esm2022/lib/provide.mjs +0 -101
- package/esm2022/lib/registry/type.registry.mjs +0 -106
- package/esm2022/lib/router/index.mjs +0 -4
- package/esm2022/lib/router/models/index.mjs +0 -2
- package/esm2022/lib/router/models/router.model.mjs +0 -2
- package/esm2022/lib/router/route-builder.mjs +0 -347
- package/esm2022/lib/router/routes-builder.mjs +0 -69
- package/esm2022/lib/router/tableview-route-builder.mjs +0 -201
- package/esm2022/lib/security/authorization.guard.mjs +0 -15
- package/esm2022/lib/security/authorization.service.mjs +0 -51
- package/esm2022/lib/security/authorization.util.mjs +0 -16
- package/esm2022/lib/security/index.mjs +0 -4
- package/esm2022/lib/security/model/authorization.type.mjs +0 -8
- package/esm2022/lib/security/model/index.mjs +0 -4
- package/esm2022/lib/security/model/permission-service.interface.mjs +0 -2
- package/esm2022/lib/security/model/permissions.model.mjs +0 -87
- package/esm2022/lib/services/action/action-executor.service.mjs +0 -747
- package/esm2022/lib/services/action/component-action-executor.service.mjs +0 -19
- package/esm2022/lib/services/action/index.mjs +0 -5
- package/esm2022/lib/services/action/provide-action-executor.mjs +0 -9
- package/esm2022/lib/services/action/root-action-executor.service.mjs +0 -18
- package/esm2022/lib/services/action-error-mapper.service.mjs +0 -20
- package/esm2022/lib/services/commons-init.service.mjs +0 -100
- package/esm2022/lib/services/commons.service.mjs +0 -459
- package/esm2022/lib/services/configuration.service.mjs +0 -174
- package/esm2022/lib/services/data-provider-executor.service.mjs +0 -52
- package/esm2022/lib/services/index.mjs +0 -12
- package/esm2022/lib/services/internal/commons-init.provider.mjs +0 -4
- package/esm2022/lib/services/internal/index.mjs +0 -2
- package/esm2022/lib/services/log-publisher-console.service.mjs +0 -40
- package/esm2022/lib/services/logger.service.mjs +0 -130
- package/esm2022/lib/services/mng-localstorage-config.service.mjs +0 -30
- package/esm2022/lib/services/navigation.service.mjs +0 -55
- package/esm2022/lib/services/providers/formly-config.provider.mjs +0 -31
- package/esm2022/lib/services/providers/index.mjs +0 -2
- package/esm2022/lib/services/router.service.mjs +0 -183
- package/esm2022/lib/services/tokens/browser-storage.token.mjs +0 -6
- package/esm2022/lib/services/tokens/commons-init.token.mjs +0 -3
- package/esm2022/lib/services/tokens/default-setting.token.mjs +0 -3
- package/esm2022/lib/services/tokens/index.mjs +0 -6
- package/esm2022/lib/services/tokens/log-publisher.token.mjs +0 -3
- package/esm2022/lib/services/tokens/module-config.token.mjs +0 -3
- package/esm2022/lib/services/version.service.mjs +0 -49
- package/esm2022/lib/services/view/index.mjs +0 -3
- package/esm2022/lib/services/view/provide-view-container.mjs +0 -17
- package/esm2022/lib/services/view/view-container.service.mjs +0 -59
- package/esm2022/lib/styles/button-style.builder.mjs +0 -174
- package/esm2022/lib/styles/index.mjs +0 -3
- package/esm2022/lib/styles/models/index.mjs +0 -3
- package/esm2022/lib/styles/models/style-level.enum.mjs +0 -12
- package/esm2022/lib/styles/models/style-size.enum.mjs +0 -9
- package/esm2022/lib/styles/styles.util.mjs +0 -42
- package/esm2022/lib/types/action-descriptor.types.mjs +0 -2
- package/esm2022/lib/types/data-provider.types.mjs +0 -2
- package/esm2022/lib/types/getter.type.mjs +0 -2
- package/esm2022/lib/types/i18n.type.mjs +0 -2
- package/esm2022/lib/types/index.mjs +0 -8
- package/esm2022/lib/types/localstorage-config-value.type.mjs +0 -2
- package/esm2022/lib/types/type.decorator.mjs +0 -12
- package/esm2022/lib/types/type.model.mjs +0 -2
- package/esm2022/lib/utils/data-list-params.util.mjs +0 -416
- package/esm2022/lib/utils/date.util.mjs +0 -136
- package/esm2022/lib/utils/decorator-metadata.util.mjs +0 -61
- package/esm2022/lib/utils/editor-formly.util.mjs +0 -339
- package/esm2022/lib/utils/enum.util.mjs +0 -83
- package/esm2022/lib/utils/error.util.mjs +0 -247
- package/esm2022/lib/utils/export.util.mjs +0 -21
- package/esm2022/lib/utils/file.util.mjs +0 -18
- package/esm2022/lib/utils/i18n.util.mjs +0 -274
- package/esm2022/lib/utils/index.mjs +0 -14
- package/esm2022/lib/utils/model.util.mjs +0 -73
- package/esm2022/lib/utils/notification.util.mjs +0 -45
- package/esm2022/lib/utils/object.util.mjs +0 -135
- package/esm2022/lib/utils/route.util.mjs +0 -60
- package/esm2022/lib/utils/string.util.mjs +0 -59
- package/esm2022/lib/utils/tableview.util.mjs +0 -193
- package/esm2022/lib/validators/field.validator.mjs +0 -33
- package/esm2022/lib/validators/index.mjs +0 -2
- package/fesm2022/mediusinc-mng-commons-data-api-class-dto-obsolete.mjs +0 -698
- package/fesm2022/mediusinc-mng-commons-data-api-class-dto-obsolete.mjs.map +0 -1
- package/fesm2022/mediusinc-mng-commons-data-api-class-dto.mjs +0 -480
- package/fesm2022/mediusinc-mng-commons-data-api-class-dto.mjs.map +0 -1
- package/fesm2022/mediusinc-mng-commons-data-api.mjs +0 -224
- package/fesm2022/mediusinc-mng-commons-data-api.mjs.map +0 -1
- package/lib/components/action/action.component.d.ts +0 -76
- package/lib/components/action/editor/action-editor.component.d.ts +0 -33
- package/lib/components/action/editor/injector-context/action-editor-injector-context.component.d.ts +0 -80
- package/lib/components/action/index.d.ts +0 -5
- package/lib/components/action/localization/data-language-dropdown.component.d.ts +0 -24
- package/lib/components/action/models/action-component.model.d.ts +0 -13
- package/lib/components/action/models/action-execution.model.d.ts +0 -169
- package/lib/components/action/models/index.d.ts +0 -3
- package/lib/components/action/route/action-route.component.d.ts +0 -31
- package/lib/components/action/table/action-table.component.d.ts +0 -49
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +0 -83
- package/lib/components/form/date-range/date-range.component.d.ts +0 -28
- package/lib/components/form/dropdown/dropdown.component.d.ts +0 -54
- package/lib/components/form/editor/form-editor.component.d.ts +0 -51
- package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +0 -16
- package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +0 -16
- package/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.d.ts +0 -27
- package/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.d.ts +0 -12
- package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +0 -15
- package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +0 -14
- package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +0 -39
- package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +0 -11
- package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +0 -45
- package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +0 -25
- package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +0 -42
- package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +0 -7
- package/lib/components/form/formly/fields/index.d.ts +0 -12
- package/lib/components/form/formly/formly.config.d.ts +0 -17
- package/lib/components/form/formly/index.d.ts +0 -1
- package/lib/components/form/formly/models/formly-config.model.d.ts +0 -11
- package/lib/components/form/formly/models/formly-field.model.d.ts +0 -17
- package/lib/components/form/formly/models/index.d.ts +0 -2
- package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +0 -11
- package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +0 -11
- package/lib/components/form/formly/wrappers/index.d.ts +0 -2
- package/lib/components/form/index.d.ts +0 -4
- package/lib/components/form/models/field-action-context.model.d.ts +0 -24
- package/lib/components/form/models/form-editor.event.d.ts +0 -58
- package/lib/components/form/models/index.d.ts +0 -3
- package/lib/components/layout/breadcrumb.component.d.ts +0 -13
- package/lib/components/layout/footer.component.d.ts +0 -9
- package/lib/components/layout/index.d.ts +0 -8
- package/lib/components/layout/main-layout.component.d.ts +0 -19
- package/lib/components/layout/menu-item.component.d.ts +0 -55
- package/lib/components/layout/menu.component.d.ts +0 -16
- package/lib/components/layout/services/index.d.ts +0 -1
- package/lib/components/layout/services/main-layout.component.service.d.ts +0 -65
- package/lib/components/layout/topbar-user.component.d.ts +0 -22
- package/lib/components/layout/topbar.component.d.ts +0 -26
- package/lib/components/layout/version.component.d.ts +0 -19
- package/lib/components/layoutV2/breadcrumb.component.d.ts +0 -10
- package/lib/components/layoutV2/footer.component.d.ts +0 -12
- package/lib/components/layoutV2/index.d.ts +0 -7
- package/lib/components/layoutV2/main-layout.component.d.ts +0 -24
- package/lib/components/layoutV2/menu-item.component.d.ts +0 -42
- package/lib/components/layoutV2/menu.component.d.ts +0 -14
- package/lib/components/layoutV2/model/index.d.ts +0 -2
- package/lib/components/layoutV2/model/layout-state.model.d.ts +0 -10
- package/lib/components/layoutV2/model/menu.model.d.ts +0 -4
- package/lib/components/layoutV2/services/index.d.ts +0 -2
- package/lib/components/layoutV2/services/main-layout.component.service.d.ts +0 -17
- package/lib/components/layoutV2/services/menu.service.d.ts +0 -22
- package/lib/components/layoutV2/sidebar.component.d.ts +0 -19
- package/lib/components/layoutV2/topbar-user.component.d.ts +0 -16
- package/lib/components/layoutV2/topbar.component.d.ts +0 -22
- package/lib/components/layoutV2/version.component.d.ts +0 -19
- package/lib/components/pages/error/error.page.component.d.ts +0 -8
- package/lib/components/pages/index.d.ts +0 -2
- package/lib/components/pages/not-found/not-found.page.component.d.ts +0 -8
- package/lib/components/table/column-filter-full/column-filter-full.component.d.ts +0 -101
- package/lib/components/table/column-value/column-value.component.d.ts +0 -35
- package/lib/components/table/models/table.event.d.ts +0 -17
- package/lib/components/table/models/table.interface.d.ts +0 -17
- package/lib/components/table/table-column-filter-class/table-column-filter-class.pipe.d.ts +0 -8
- package/lib/components/table/table.component.d.ts +0 -123
- package/lib/components/tableview/actions/tableview-default-actions.d.ts +0 -36
- package/lib/components/tableview/builders/tableview-builder.d.ts +0 -115
- package/lib/components/tableview/helpers/tableview-create.d.ts +0 -16
- package/lib/components/tableview/index.d.ts +0 -6
- package/lib/components/tableview/models/tableview.model.d.ts +0 -8
- package/lib/components/tableview/route/tableview-route.component.d.ts +0 -7
- package/lib/components/tableview/tableview.component.d.ts +0 -29
- package/lib/data-providers/base.data-provider.d.ts +0 -32
- package/lib/data-providers/editor.data-provider.d.ts +0 -88
- package/lib/data-providers/index.d.ts +0 -5
- package/lib/data-providers/lookup.data-provider.d.ts +0 -27
- package/lib/data-providers/table.data-provider.d.ts +0 -40
- package/lib/data-providers/tableview.data-provider.d.ts +0 -45
- package/lib/descriptors/action/action-button.descriptor.d.ts +0 -25
- package/lib/descriptors/action/action-confirmation.descriptor.d.ts +0 -36
- package/lib/descriptors/action/action-editor.descriptor.d.ts +0 -118
- package/lib/descriptors/action/action-link.descriptor.d.ts +0 -34
- package/lib/descriptors/action/action.descriptor.d.ts +0 -149
- package/lib/descriptors/action/index.d.ts +0 -5
- package/lib/descriptors/editor/editor.descriptor.d.ts +0 -270
- package/lib/descriptors/editor/field-action.descriptor.d.ts +0 -23
- package/lib/descriptors/editor/field-base.descriptor.d.ts +0 -122
- package/lib/descriptors/editor/field-group.descriptor.d.ts +0 -42
- package/lib/descriptors/editor/field-lookup.descriptor.d.ts +0 -83
- package/lib/descriptors/editor/field-many.descriptor.d.ts +0 -63
- package/lib/descriptors/editor/field-validation.descriptor.d.ts +0 -19
- package/lib/descriptors/editor/field.descriptor.d.ts +0 -167
- package/lib/descriptors/editor/index.d.ts +0 -8
- package/lib/descriptors/editor/internal/editor-fields.model.d.ts +0 -33
- package/lib/descriptors/editor/internal/editor.model.d.ts +0 -15
- package/lib/descriptors/filter/filter-lookup.descriptor.d.ts +0 -70
- package/lib/descriptors/filter/filter.descriptor.d.ts +0 -66
- package/lib/descriptors/filter/index.d.ts +0 -2
- package/lib/descriptors/interfaces/field-config.interface.d.ts +0 -9
- package/lib/descriptors/interfaces/index.d.ts +0 -2
- package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +0 -12
- package/lib/descriptors/model/enum.descriptor.d.ts +0 -14
- package/lib/descriptors/model/index.d.ts +0 -3
- package/lib/descriptors/model/model.descriptor.d.ts +0 -31
- package/lib/descriptors/model/type.descriptor.d.ts +0 -5
- package/lib/descriptors/table/column.descriptor.d.ts +0 -148
- package/lib/descriptors/table/index.d.ts +0 -3
- package/lib/descriptors/table/internal/table-columns.model.d.ts +0 -42
- package/lib/descriptors/table/internal/table.model.d.ts +0 -12
- package/lib/descriptors/table/table.descriptor.d.ts +0 -272
- package/lib/descriptors/tableview/index.d.ts +0 -1
- package/lib/descriptors/tableview/internal/tableview.model.d.ts +0 -11
- package/lib/descriptors/tableview/tableview.descriptor.d.ts +0 -193
- package/lib/descriptors/types/editor.type.d.ts +0 -6
- package/lib/descriptors/types/field.type.d.ts +0 -47
- package/lib/descriptors/types/index.d.ts +0 -7
- package/lib/descriptors/types/table.type.d.ts +0 -18
- package/lib/directives/component.directive.d.ts +0 -20
- package/lib/directives/dialog-keydown-handler.directive.d.ts +0 -12
- package/lib/directives/index.d.ts +0 -4
- package/lib/directives/input-trim.directive.d.ts +0 -14
- package/lib/directives/template.directive.d.ts +0 -12
- package/lib/error/error.handler.d.ts +0 -6
- package/lib/error/index.d.ts +0 -1
- package/lib/guards/index.d.ts +0 -1
- package/lib/guards/unsaved-changes.guard.d.ts +0 -3
- package/lib/helpers/coercion.d.ts +0 -9
- package/lib/helpers/data-provider-executors.d.ts +0 -19
- package/lib/models/action-editor.model.d.ts +0 -15
- package/lib/models/column-value.model.d.ts +0 -4
- package/lib/models/common-init-event-enum.model.d.ts +0 -9
- package/lib/models/config.model.d.ts +0 -53
- package/lib/models/enum.model.d.ts +0 -7
- package/lib/models/error.model.d.ts +0 -50
- package/lib/models/index.d.ts +0 -19
- package/lib/models/layout-config.model.d.ts +0 -34
- package/lib/models/log.model.d.ts +0 -40
- package/lib/models/menu.model.d.ts +0 -32
- package/lib/models/tableview-attr.model.d.ts +0 -10
- package/lib/models/type-registry.model.d.ts +0 -7
- package/lib/models/user.model.d.ts +0 -8
- package/lib/models/view-container.model.d.ts +0 -24
- package/lib/pipes/boolean.pipe.d.ts +0 -7
- package/lib/pipes/class-map.pipe.d.ts +0 -7
- package/lib/pipes/enum.pipe.d.ts +0 -8
- package/lib/pipes/enumerate-async.pipe.d.ts +0 -14
- package/lib/pipes/enumerate.pipe.d.ts +0 -21
- package/lib/pipes/getter.pipe.d.ts +0 -8
- package/lib/pipes/i18n-property.pipe.d.ts +0 -8
- package/lib/pipes/index.d.ts +0 -11
- package/lib/pipes/json-path.pipe.d.ts +0 -13
- package/lib/pipes/locale-default-row-class.pipe.d.ts +0 -10
- package/lib/pipes/models/internal/enumrate-pipe-i18n.model.d.ts +0 -5
- package/lib/pipes/models/internal/index.d.ts +0 -1
- package/lib/pipes/parametrize.pipe.d.ts +0 -13
- package/lib/pipes/template.pipe.d.ts +0 -10
- package/lib/provide.d.ts +0 -10
- package/lib/registry/type.registry.d.ts +0 -25
- package/lib/router/index.d.ts +0 -3
- package/lib/router/models/index.d.ts +0 -1
- package/lib/router/models/router.model.d.ts +0 -31
- package/lib/router/route-builder.d.ts +0 -75
- package/lib/router/routes-builder.d.ts +0 -28
- package/lib/router/tableview-route-builder.d.ts +0 -44
- package/lib/security/authorization.guard.d.ts +0 -2
- package/lib/security/authorization.service.d.ts +0 -17
- package/lib/security/authorization.util.d.ts +0 -5
- package/lib/security/index.d.ts +0 -3
- package/lib/security/model/authorization.type.d.ts +0 -6
- package/lib/security/model/index.d.ts +0 -3
- package/lib/security/model/permission-service.interface.d.ts +0 -6
- package/lib/security/model/permissions.model.d.ts +0 -37
- package/lib/services/action/action-executor.service.d.ts +0 -177
- package/lib/services/action/component-action-executor.service.d.ts +0 -9
- package/lib/services/action/index.d.ts +0 -4
- package/lib/services/action/root-action-executor.service.d.ts +0 -9
- package/lib/services/action-error-mapper.service.d.ts +0 -18
- package/lib/services/commons-init.service.d.ts +0 -22
- package/lib/services/commons.service.d.ts +0 -90
- package/lib/services/configuration.service.d.ts +0 -68
- package/lib/services/data-provider-executor.service.d.ts +0 -60
- package/lib/services/index.d.ts +0 -11
- package/lib/services/internal/commons-init.provider.d.ts +0 -4
- package/lib/services/internal/index.d.ts +0 -1
- package/lib/services/log-publisher-console.service.d.ts +0 -4
- package/lib/services/logger.service.d.ts +0 -33
- package/lib/services/mng-localstorage-config.service.d.ts +0 -11
- package/lib/services/navigation.service.d.ts +0 -15
- package/lib/services/providers/formly-config.provider.d.ts +0 -5
- package/lib/services/providers/index.d.ts +0 -1
- package/lib/services/router.service.d.ts +0 -37
- package/lib/services/tokens/browser-storage.token.d.ts +0 -2
- package/lib/services/tokens/commons-init.token.d.ts +0 -3
- package/lib/services/tokens/default-setting.token.d.ts +0 -2
- package/lib/services/tokens/index.d.ts +0 -5
- package/lib/services/tokens/log-publisher.token.d.ts +0 -3
- package/lib/services/tokens/module-config.token.d.ts +0 -3
- package/lib/services/version.service.d.ts +0 -14
- package/lib/services/view/index.d.ts +0 -2
- package/lib/services/view/view-container.service.d.ts +0 -32
- package/lib/styles/button-style.builder.d.ts +0 -68
- package/lib/styles/index.d.ts +0 -2
- package/lib/styles/models/index.d.ts +0 -2
- package/lib/styles/models/style-level.enum.d.ts +0 -10
- package/lib/styles/models/style-size.enum.d.ts +0 -7
- package/lib/styles/styles.util.d.ts +0 -15
- package/lib/types/action-descriptor.types.d.ts +0 -4
- package/lib/types/data-provider.types.d.ts +0 -3
- package/lib/types/getter.type.d.ts +0 -2
- package/lib/types/i18n.type.d.ts +0 -1
- package/lib/types/index.d.ts +0 -7
- package/lib/types/localstorage-config-value.type.d.ts +0 -1
- package/lib/types/type.model.d.ts +0 -31
- package/lib/utils/data-list-params.util.d.ts +0 -84
- package/lib/utils/decorator-metadata.util.d.ts +0 -33
- package/lib/utils/editor-formly.util.d.ts +0 -13
- package/lib/utils/enum.util.d.ts +0 -51
- package/lib/utils/error.util.d.ts +0 -116
- package/lib/utils/export.util.d.ts +0 -5
- package/lib/utils/file.util.d.ts +0 -3
- package/lib/utils/i18n.util.d.ts +0 -85
- package/lib/utils/index.d.ts +0 -13
- package/lib/utils/model.util.d.ts +0 -10
- package/lib/utils/notification.util.d.ts +0 -13
- package/lib/utils/object.util.d.ts +0 -30
- package/lib/utils/route.util.d.ts +0 -37
- package/lib/utils/tableview.util.d.ts +0 -53
- package/lib/validators/field.validator.d.ts +0 -3
- package/lib/validators/index.d.ts +0 -1
- package/openapi/angular/README.mustache +0 -226
- package/openapi/angular/api.module.mustache +0 -39
- package/openapi/angular/api.service.mustache +0 -253
- package/openapi/angular/apiInterface.mustache +0 -47
- package/openapi/angular/apis.mustache +0 -12
- package/openapi/angular/config.yaml +0 -23
- package/openapi/angular/configuration.mustache +0 -128
- package/openapi/angular/custom/base-api.service.mustache +0 -14
- package/openapi/angular/custom/helpers.mustache +0 -71
- package/openapi/angular/custom/modelSchema.mustache +0 -46
- package/openapi/angular/custom/schema.mustache +0 -18
- package/openapi/angular/encoder.mustache +0 -20
- package/openapi/angular/git_push.sh.mustache +0 -57
- package/openapi/angular/index.mustache +0 -0
- package/openapi/angular/licenseInfo.mustache +0 -11
- package/openapi/angular/model.mustache +0 -16
- package/openapi/angular/modelAlias.mustache +0 -1
- package/openapi/angular/modelEnum.mustache +0 -21
- package/openapi/angular/modelGeneric.mustache +0 -14
- package/openapi/angular/modelGenericAdditionalProperties.mustache +0 -5
- package/openapi/angular/modelGenericEnums.mustache +0 -30
- package/openapi/angular/modelOneOf.mustache +0 -14
- package/openapi/angular/modelTaggedUnion.mustache +0 -21
- package/openapi/angular/models.mustache +0 -5
- package/openapi/angular/ng-package.mustache +0 -6
- package/openapi/angular/package.mustache +0 -39
- package/openapi/angular/param.mustache +0 -69
- package/openapi/angular/tsconfig.mustache +0 -28
- package/openapi/angular/variables.mustache +0 -9
- package/openapi/node/model.mustache +0 -83
- package/openapi/node/models.mustache +0 -6
- package/scss/common/layout/_breadcrumb.scss +0 -99
- package/scss/common/layout/_config.scss +0 -100
- package/scss/common/layout/_dashboard.scss +0 -16
- package/scss/common/layout/_exception.scss +0 -133
- package/scss/common/layout/_footer.scss +0 -29
- package/scss/common/layout/_help.scss +0 -156
- package/scss/common/layout/_inlinemenu.scss +0 -68
- package/scss/common/layout/_invoice.scss +0 -176
- package/scss/common/layout/_landing.scss +0 -636
- package/scss/common/layout/_layout_dark.scss +0 -23
- package/scss/common/layout/_layout_light.scss +0 -23
- package/scss/common/layout/_loader.scss +0 -17
- package/scss/common/layout/_login.scss +0 -106
- package/scss/common/layout/_main.scss +0 -45
- package/scss/common/layout/_mixins.scss +0 -222
- package/scss/common/layout/_rightmenu.scss +0 -130
- package/scss/common/layout/_topbar.scss +0 -191
- package/scss/common/layout/_typography.scss +0 -68
- package/scss/common/layout/_utils.scss +0 -96
- package/scss/common/layout/_widgets.scss +0 -392
- package/scss/common/layout/menu/_menu.scss +0 -7
- package/scss/common/layout/menu/_menu_common.scss +0 -183
- package/scss/common/layout/menu/_menu_overlay.scss +0 -52
- package/scss/common/layout/menu/_menu_sidebar.scss +0 -233
- package/scss/common/layout/menu/_menu_slim.scss +0 -137
- package/scss/common/layout/menu/_menu_static.scss +0 -70
- package/scss/common/layout/menu/_menu_theme.scss +0 -364
- package/scss/common/theme/_theme_dark.scss +0 -5
- package/scss/common/theme/_theme_light.scss +0 -5
- package/scss/common/theme/designer/_colors.scss +0 -17
- package/scss/common/theme/designer/_common.scss +0 -41
- package/scss/common/theme/designer/_components.scss +0 -102
- package/scss/common/theme/designer/_mixins.scss +0 -203
- package/scss/common/theme/designer/components/button/_button.scss +0 -572
- package/scss/common/theme/designer/components/button/_speeddial.scss +0 -81
- package/scss/common/theme/designer/components/button/_splitbutton.scss +0 -2
- package/scss/common/theme/designer/components/data/_carousel.scss +0 -37
- package/scss/common/theme/designer/components/data/_datatable.scss +0 -266
- package/scss/common/theme/designer/components/data/_dataview.scss +0 -55
- package/scss/common/theme/designer/components/data/_filter.scss +0 -137
- package/scss/common/theme/designer/components/data/_fullcalendar.scss +0 -324
- package/scss/common/theme/designer/components/data/_orderlist.scss +0 -91
- package/scss/common/theme/designer/components/data/_organizationchart.scss +0 -50
- package/scss/common/theme/designer/components/data/_paginator.scss +0 -83
- package/scss/common/theme/designer/components/data/_picklist.scss +0 -91
- package/scss/common/theme/designer/components/data/_timeline.scss +0 -35
- package/scss/common/theme/designer/components/data/_tree.scss +0 -144
- package/scss/common/theme/designer/components/data/_treetable.scss +0 -241
- package/scss/common/theme/designer/components/data/_virtualscroller.scss +0 -28
- package/scss/common/theme/designer/components/file/_fileupload.scss +0 -58
- package/scss/common/theme/designer/components/input/_autocomplete.scss +0 -105
- package/scss/common/theme/designer/components/input/_calendar.scss +0 -212
- package/scss/common/theme/designer/components/input/_cascadeselect.scss +0 -98
- package/scss/common/theme/designer/components/input/_checkbox.scss +0 -85
- package/scss/common/theme/designer/components/input/_chips.scss +0 -43
- package/scss/common/theme/designer/components/input/_colorpicker.scss +0 -19
- package/scss/common/theme/designer/components/input/_dropdown.scss +0 -136
- package/scss/common/theme/designer/components/input/_editor.scss +0 -122
- package/scss/common/theme/designer/components/input/_inputgroup.scss +0 -69
- package/scss/common/theme/designer/components/input/_inputmask.scss +0 -3
- package/scss/common/theme/designer/components/input/_inputnumber.scss +0 -3
- package/scss/common/theme/designer/components/input/_inputswitch.scss +0 -60
- package/scss/common/theme/designer/components/input/_inputtext.scss +0 -97
- package/scss/common/theme/designer/components/input/_listbox.scss +0 -82
- package/scss/common/theme/designer/components/input/_multiselect.scss +0 -165
- package/scss/common/theme/designer/components/input/_password.scss +0 -33
- package/scss/common/theme/designer/components/input/_radiobutton.scss +0 -78
- package/scss/common/theme/designer/components/input/_rating.scss +0 -48
- package/scss/common/theme/designer/components/input/_selectbutton.scss +0 -50
- package/scss/common/theme/designer/components/input/_slider.scss +0 -71
- package/scss/common/theme/designer/components/input/_togglebutton.scss +0 -48
- package/scss/common/theme/designer/components/input/_treeselect.scss +0 -91
- package/scss/common/theme/designer/components/menu/_breadcrumb.scss +0 -42
- package/scss/common/theme/designer/components/menu/_contextmenu.scss +0 -51
- package/scss/common/theme/designer/components/menu/_dock.scss +0 -51
- package/scss/common/theme/designer/components/menu/_megamenu.scss +0 -103
- package/scss/common/theme/designer/components/menu/_menu.scss +0 -41
- package/scss/common/theme/designer/components/menu/_menubar.scss +0 -180
- package/scss/common/theme/designer/components/menu/_panelmenu.scss +0 -136
- package/scss/common/theme/designer/components/menu/_slidemenu.scss +0 -56
- package/scss/common/theme/designer/components/menu/_steps.scss +0 -56
- package/scss/common/theme/designer/components/menu/_tabmenu.scss +0 -49
- package/scss/common/theme/designer/components/menu/_tieredmenu.scss +0 -57
- package/scss/common/theme/designer/components/messages/_inlinemessage.scss +0 -64
- package/scss/common/theme/designer/components/messages/_message.scss +0 -102
- package/scss/common/theme/designer/components/messages/_toast.scss +0 -94
- package/scss/common/theme/designer/components/misc/_avatar.scss +0 -30
- package/scss/common/theme/designer/components/misc/_badge.scss +0 -48
- package/scss/common/theme/designer/components/misc/_blockui.scss +0 -3
- package/scss/common/theme/designer/components/misc/_chip.scss +0 -38
- package/scss/common/theme/designer/components/misc/_inplace.scss +0 -16
- package/scss/common/theme/designer/components/misc/_progressbar.scss +0 -17
- package/scss/common/theme/designer/components/misc/_scrolltop.scss +0 -20
- package/scss/common/theme/designer/components/misc/_skeleton.scss +0 -8
- package/scss/common/theme/designer/components/misc/_tag.scss +0 -35
- package/scss/common/theme/designer/components/misc/_terminal.scss +0 -11
- package/scss/common/theme/designer/components/multimedia/_galleria.scss +0 -141
- package/scss/common/theme/designer/components/multimedia/_image.scss +0 -44
- package/scss/common/theme/designer/components/overlay/_confirmpopup.scss +0 -65
- package/scss/common/theme/designer/components/overlay/_dialog.scss +0 -63
- package/scss/common/theme/designer/components/overlay/_overlaypanel.scss +0 -62
- package/scss/common/theme/designer/components/overlay/_sidebar.scss +0 -27
- package/scss/common/theme/designer/components/overlay/_tooltip.scss +0 -33
- package/scss/common/theme/designer/components/panel/_accordion.scss +0 -119
- package/scss/common/theme/designer/components/panel/_card.scss +0 -30
- package/scss/common/theme/designer/components/panel/_divider.scss +0 -31
- package/scss/common/theme/designer/components/panel/_fieldset.scss +0 -47
- package/scss/common/theme/designer/components/panel/_panel.scss +0 -42
- package/scss/common/theme/designer/components/panel/_scrollpanel.scss +0 -6
- package/scss/common/theme/designer/components/panel/_splitter.scss +0 -19
- package/scss/common/theme/designer/components/panel/_tabview.scss +0 -66
- package/scss/common/theme/designer/components/panel/_toolbar.scss +0 -10
- package/scss/common/theme/extensions/_button.scss +0 -111
- package/scss/common/theme/extensions/_calendar.scss +0 -18
- package/scss/common/theme/extensions/_card.scss +0 -6
- package/scss/common/theme/extensions/_carousel.scss +0 -13
- package/scss/common/theme/extensions/_checkbox.scss +0 -10
- package/scss/common/theme/extensions/_contextmenu.scss +0 -16
- package/scss/common/theme/extensions/_datatable.scss +0 -83
- package/scss/common/theme/extensions/_dialog.scss +0 -14
- package/scss/common/theme/extensions/_fieldset.scss +0 -6
- package/scss/common/theme/extensions/_galleria.scss +0 -25
- package/scss/common/theme/extensions/_megamenu.scss +0 -18
- package/scss/common/theme/extensions/_menu.scss +0 -14
- package/scss/common/theme/extensions/_menubar.scss +0 -14
- package/scss/common/theme/extensions/_orderlist.scss +0 -37
- package/scss/common/theme/extensions/_paginator.scss +0 -19
- package/scss/common/theme/extensions/_panelmenu.scss +0 -20
- package/scss/common/theme/extensions/_password.scss +0 -5
- package/scss/common/theme/extensions/_picklist.scss +0 -37
- package/scss/common/theme/extensions/_radiobutton.scss +0 -8
- package/scss/common/theme/extensions/_sidebar.scss +0 -19
- package/scss/common/theme/extensions/_slidemenu.scss +0 -10
- package/scss/common/theme/extensions/_slider.scss +0 -6
- package/scss/common/theme/extensions/_steps.scss +0 -50
- package/scss/common/theme/extensions/_tieredmenu.scss +0 -14
- package/scss/common/theme/extensions/_toast.scss +0 -6
- package/scss/common/theme/extensions/_tree.scss +0 -35
- package/scss/common/theme/extensions/_treetable.scss +0 -35
- package/scss/common/theme/extensions/_vendor_extensions.scss +0 -27
- package/scss/common/variables/layout/_common.scss +0 -12
- package/scss/common/variables/layout/_layout_dark.scss +0 -70
- package/scss/common/variables/layout/_layout_light.scss +0 -70
- package/scss/common/variables/theme/_theme_dark.scss +0 -937
- package/scss/common/variables/theme/_theme_light.scss +0 -936
- package/scss/layout/default/_mng-variables-layout-dark.scss +0 -2
- package/scss/layout/default/_mng-variables-layout-light.scss +0 -2
- package/scss/layout/default/layout-dark.scss +0 -2
- package/scss/layout/default/layout-light.scss +0 -2
- package/scss/mng-commons-dark-v2.scss +0 -9
- package/scss/mng-commons-dark.scss +0 -5
- package/scss/mng-commons-light-v2.scss +0 -9
- package/scss/mng-commons-light.scss +0 -8
- package/scss/mng-overrides/_layout_action.scss +0 -10
- package/scss/mng-overrides/_layout_dialog.scss +0 -91
- package/scss/mng-overrides/_layout_forms.scss +0 -38
- package/scss/mng-overrides/_layout_menu.scss +0 -10
- package/scss/mng-overrides/_layout_radio.scss +0 -3
- package/scss/mng-overrides/_layout_styles.scss +0 -35
- package/scss/mng-overrides/_layout_topbar.scss +0 -21
- package/scss/mng-overrides/_mixins.scss +0 -69
- package/scss/mng-overrides/_theme_autocomplete.scss +0 -29
- package/scss/mng-overrides/_theme_button.scss +0 -61
- package/scss/mng-overrides/_theme_datatable.scss +0 -160
- package/scss/mng-overrides/_theme_datepicker.scss +0 -21
- package/scss/mng-overrides/_theme_dialog.scss +0 -108
- package/scss/mng-overrides/_theme_dropdown.scss +0 -22
- package/scss/mng-overrides/_theme_fileupload.scss +0 -24
- package/scss/mng-overrides/_theme_forms.scss +0 -29
- package/scss/mng-overrides/_theme_image.scss +0 -27
- package/scss/mng-overrides/_theme_input.scss +0 -27
- package/scss/mng-overrides/_theme_menu.scss +0 -5
- package/scss/mng-overrides/_theme_multiselect.scss +0 -20
- package/scss/mng-overrides/_theme_styles.scss +0 -17
- package/scss/mng-overrides/_theme_tableview.scss +0 -79
- package/scss/mng-overrides/_theme_tabview.scss +0 -11
- package/scss/mng-overrides/_theme_toast.scss +0 -3
- package/scss/mng-overrides/_theme_toolbar.scss +0 -5
- package/scss/mng-overrides/_variables.scss +0 -15
- package/scss/theme/default/_mng-variables-theme-dark.scss +0 -11
- package/scss/theme/default/_mng-variables-theme-light.scss +0 -13
- package/scss/theme/default/theme-dark.scss +0 -2
- package/scss/theme/default/theme-light.scss +0 -2
- package/scss/v2/layout/_animation.scss +0 -53
- package/scss/v2/layout/_breadcrumb.scss +0 -97
- package/scss/v2/layout/_config.scss +0 -42
- package/scss/v2/layout/_content.scss +0 -3
- package/scss/v2/layout/_fonts.scss +0 -32
- package/scss/v2/layout/_layout_dark.scss +0 -12
- package/scss/v2/layout/_layout_light.scss +0 -12
- package/scss/v2/layout/_main.scss +0 -54
- package/scss/v2/layout/_profile.scss +0 -10
- package/scss/v2/layout/_responsive.scss +0 -131
- package/scss/v2/layout/_sidebar_drawer.scss +0 -283
- package/scss/v2/layout/_sidebar_horizontal.scss +0 -168
- package/scss/v2/layout/_sidebar_reveal.scss +0 -201
- package/scss/v2/layout/_sidebar_slim.scss +0 -157
- package/scss/v2/layout/_sidebar_slim_plus.scss +0 -167
- package/scss/v2/layout/_sidebar_vertical.scss +0 -176
- package/scss/v2/layout/_topbar.scss +0 -174
- package/scss/v2/layout/_typography.scss +0 -62
- package/scss/v2/layout/_utils.scss +0 -33
- package/scss/v2/layout/layout.scss +0 -24
- package/scss/v2/layout/mng/_mng_layout_footer.scss +0 -39
- package/scss/v2/layout/mng/_mng_layout_menu.scss +0 -10
- package/scss/v2/layout/mng/_mng_layout_styles.scss +0 -3
- package/scss/v2/layout/mng/_mng_layout_topbar.scss +0 -18
- package/scss/v2/layout/preloading.scss +0 -84
- package/scss/v2/theme/extensions/_fullcalendar.scss +0 -328
- package/scss/v2/theme/theme-base/_colors.scss +0 -17
- package/scss/v2/theme/theme-base/_common.scss +0 -76
- package/scss/v2/theme/theme-base/_components.scss +0 -110
- package/scss/v2/theme/theme-base/_mixins.scss +0 -337
- package/scss/v2/theme/theme-base/components/button/_button.scss +0 -576
- package/scss/v2/theme/theme-base/components/button/_speeddial.scss +0 -96
- package/scss/v2/theme/theme-base/components/button/_splitbutton.scss +0 -348
- package/scss/v2/theme/theme-base/components/data/_carousel.scss +0 -37
- package/scss/v2/theme/theme-base/components/data/_datatable.scss +0 -338
- package/scss/v2/theme/theme-base/components/data/_dataview.scss +0 -46
- package/scss/v2/theme/theme-base/components/data/_filter.scss +0 -137
- package/scss/v2/theme/theme-base/components/data/_orderlist.scss +0 -114
- package/scss/v2/theme/theme-base/components/data/_organizationchart.scss +0 -50
- package/scss/v2/theme/theme-base/components/data/_paginator.scss +0 -92
- package/scss/v2/theme/theme-base/components/data/_picklist.scss +0 -114
- package/scss/v2/theme/theme-base/components/data/_timeline.scss +0 -35
- package/scss/v2/theme/theme-base/components/data/_tree.scss +0 -150
- package/scss/v2/theme/theme-base/components/data/_treetable.scss +0 -255
- package/scss/v2/theme/theme-base/components/data/_virtualscroller.scss +0 -28
- package/scss/v2/theme/theme-base/components/file/_fileupload.scss +0 -64
- package/scss/v2/theme/theme-base/components/input/_autocomplete.scss +0 -136
- package/scss/v2/theme/theme-base/components/input/_calendar.scss +0 -267
- package/scss/v2/theme/theme-base/components/input/_cascadeselect.scss +0 -135
- package/scss/v2/theme/theme-base/components/input/_checkbox.scss +0 -94
- package/scss/v2/theme/theme-base/components/input/_chips.scss +0 -65
- package/scss/v2/theme/theme-base/components/input/_colorpicker.scss +0 -19
- package/scss/v2/theme/theme-base/components/input/_dropdown.scss +0 -151
- package/scss/v2/theme/theme-base/components/input/_editor.scss +0 -122
- package/scss/v2/theme/theme-base/components/input/_inputgroup.scss +0 -74
- package/scss/v2/theme/theme-base/components/input/_inputmask.scss +0 -16
- package/scss/v2/theme/theme-base/components/input/_inputnumber.scss +0 -28
- package/scss/v2/theme/theme-base/components/input/_inputswitch.scss +0 -60
- package/scss/v2/theme/theme-base/components/input/_inputtext.scss +0 -100
- package/scss/v2/theme/theme-base/components/input/_listbox.scss +0 -97
- package/scss/v2/theme/theme-base/components/input/_multiselect.scss +0 -177
- package/scss/v2/theme/theme-base/components/input/_password.scss +0 -52
- package/scss/v2/theme/theme-base/components/input/_radiobutton.scss +0 -78
- package/scss/v2/theme/theme-base/components/input/_rating.scss +0 -60
- package/scss/v2/theme/theme-base/components/input/_selectbutton.scss +0 -50
- package/scss/v2/theme/theme-base/components/input/_slider.scss +0 -71
- package/scss/v2/theme/theme-base/components/input/_togglebutton.scss +0 -48
- package/scss/v2/theme/theme-base/components/input/_treeselect.scss +0 -139
- package/scss/v2/theme/theme-base/components/menu/_breadcrumb.scss +0 -42
- package/scss/v2/theme/theme-base/components/menu/_contextmenu.scss +0 -39
- package/scss/v2/theme/theme-base/components/menu/_dock.scss +0 -95
- package/scss/v2/theme/theme-base/components/menu/_megamenu.scss +0 -55
- package/scss/v2/theme/theme-base/components/menu/_menu.scss +0 -37
- package/scss/v2/theme/theme-base/components/menu/_menubar.scss +0 -140
- package/scss/v2/theme/theme-base/components/menu/_panelmenu.scss +0 -153
- package/scss/v2/theme/theme-base/components/menu/_slidemenu.scss +0 -59
- package/scss/v2/theme/theme-base/components/menu/_steps.scss +0 -56
- package/scss/v2/theme/theme-base/components/menu/_tabmenu.scss +0 -73
- package/scss/v2/theme/theme-base/components/menu/_tieredmenu.scss +0 -43
- package/scss/v2/theme/theme-base/components/messages/_inlinemessage.scss +0 -69
- package/scss/v2/theme/theme-base/components/messages/_message.scss +0 -107
- package/scss/v2/theme/theme-base/components/messages/_toast.scss +0 -99
- package/scss/v2/theme/theme-base/components/misc/_avatar.scss +0 -30
- package/scss/v2/theme/theme-base/components/misc/_badge.scss +0 -48
- package/scss/v2/theme/theme-base/components/misc/_blockui.scss +0 -0
- package/scss/v2/theme/theme-base/components/misc/_chip.scss +0 -42
- package/scss/v2/theme/theme-base/components/misc/_inplace.scss +0 -16
- package/scss/v2/theme/theme-base/components/misc/_progressbar.scss +0 -17
- package/scss/v2/theme/theme-base/components/misc/_scrolltop.scss +0 -25
- package/scss/v2/theme/theme-base/components/misc/_skeleton.scss +0 -8
- package/scss/v2/theme/theme-base/components/misc/_tag.scss +0 -40
- package/scss/v2/theme/theme-base/components/misc/_terminal.scss +0 -12
- package/scss/v2/theme/theme-base/components/multimedia/_galleria.scss +0 -155
- package/scss/v2/theme/theme-base/components/multimedia/_image.scss +0 -49
- package/scss/v2/theme/theme-base/components/overlay/_confirmpopup.scss +0 -70
- package/scss/v2/theme/theme-base/components/overlay/_dialog.scss +0 -69
- package/scss/v2/theme/theme-base/components/overlay/_overlaypanel.scss +0 -64
- package/scss/v2/theme/theme-base/components/overlay/_sidebar.scss +0 -27
- package/scss/v2/theme/theme-base/components/overlay/_tooltip.scss +0 -33
- package/scss/v2/theme/theme-base/components/panel/_accordion.scss +0 -119
- package/scss/v2/theme/theme-base/components/panel/_card.scss +0 -30
- package/scss/v2/theme/theme-base/components/panel/_divider.scss +0 -31
- package/scss/v2/theme/theme-base/components/panel/_fieldset.scss +0 -47
- package/scss/v2/theme/theme-base/components/panel/_panel.scss +0 -63
- package/scss/v2/theme/theme-base/components/panel/_scrollpanel.scss +0 -6
- package/scss/v2/theme/theme-base/components/panel/_splitter.scss +0 -19
- package/scss/v2/theme/theme-base/components/panel/_tabview.scss +0 -82
- package/scss/v2/theme/theme-base/components/panel/_toolbar.scss +0 -11
- package/scss/v2/theme/theme-base/mng/_mng_mixins.scss +0 -69
- package/scss/v2/theme/theme-base/mng/_mng_theme_autocomplete.scss +0 -34
- package/scss/v2/theme/theme-base/mng/_mng_theme_button.scss +0 -68
- package/scss/v2/theme/theme-base/mng/_mng_theme_datatable.scss +0 -153
- package/scss/v2/theme/theme-base/mng/_mng_theme_datepicker.scss +0 -21
- package/scss/v2/theme/theme-base/mng/_mng_theme_dialog.scss +0 -206
- package/scss/v2/theme/theme-base/mng/_mng_theme_dropdown.scss +0 -32
- package/scss/v2/theme/theme-base/mng/_mng_theme_fileupload.scss +0 -24
- package/scss/v2/theme/theme-base/mng/_mng_theme_forms.scss +0 -66
- package/scss/v2/theme/theme-base/mng/_mng_theme_image.scss +0 -27
- package/scss/v2/theme/theme-base/mng/_mng_theme_input.scss +0 -31
- package/scss/v2/theme/theme-base/mng/_mng_theme_menu.scss +0 -5
- package/scss/v2/theme/theme-base/mng/_mng_theme_multiselect.scss +0 -20
- package/scss/v2/theme/theme-base/mng/_mng_theme_styles.scss +0 -17
- package/scss/v2/theme/theme-base/mng/_mng_theme_tableview.scss +0 -97
- package/scss/v2/theme/theme-base/mng/_mng_theme_tabview.scss +0 -11
- package/scss/v2/theme/theme-base/mng/_mng_theme_toast.scss +0 -3
- package/scss/v2/theme/theme-base/mng/_mng_theme_toolbar.scss +0 -5
- package/scss/v2/theme/theme-base/mng/_mng_variables.scss +0 -15
- package/scss/v2/theme/theme-dark/_extensions.scss +0 -100
- package/scss/v2/theme/theme-dark/_variables.scss +0 -940
- package/scss/v2/theme/theme-dark/blue/theme.scss +0 -14
- package/scss/v2/theme/theme-light/_extensions.scss +0 -100
- package/scss/v2/theme/theme-light/_variables.scss +0 -936
- package/scss/v2/theme/theme-light/blue/theme.scss +0 -14
- /package/{lib → core}/components/notification/notification-wrapper.component.d.ts +0 -0
- /package/{lib/models → core/data-list}/data-list.model.d.ts +0 -0
- /package/{lib/models → core/data-list}/filter-match.model.d.ts +0 -0
- /package/{lib/models/class.model.d.ts → core/models/class-attribute.model.d.ts} +0 -0
- /package/{lib → core}/models/version.model.d.ts +0 -0
- /package/{lib/types/type.decorator.d.ts → core/reflect/type-enum-decorator.d.ts} +0 -0
- /package/{lib → core}/utils/date.util.d.ts +0 -0
- /package/{lib → core}/utils/string.util.d.ts +0 -0
- /package/{lib/descriptors/types/filter.type.d.ts → filter/models/filter.model.d.ts} +0 -0
- /package/{lib/descriptors/types/trim.type.d.ts → form/api/models/trim.model.d.ts} +0 -0
- /package/{assets/i18n → i18n}/en.json +0 -0
- /package/{assets/i18n → i18n}/sl.json +0 -0
- /package/{lib/descriptors/table → table/api/descriptors}/sort.descriptor.d.ts +0 -0
- /package/{lib/descriptors/types/column.type.d.ts → table/api/models/column.model.d.ts} +0 -0
- /package/{lib → tableview/action}/models/can-component-deactivate.model.d.ts +0 -0
- /package/{lib/services/action → tableview/action/services/providers}/provide-action-executor.d.ts +0 -0
- /package/{lib/services/view → tableview/action/services/providers}/provide-view-container.d.ts +0 -0
- /package/{lib/descriptors/types → tableview/api/action/models}/action.type.d.ts +0 -0
- /package/{lib/components → tableview/api}/action/models/tableview-action-default-categories.model.d.ts +0 -0
- /package/{lib/components/form → tableview/api/editor}/models/form-editor.interface.d.ts +0 -0
- /package/{lib → tableview/api/editor}/models/radio.model.d.ts +0 -0
|
@@ -1,747 +0,0 @@
|
|
|
1
|
-
import { HttpErrorResponse } from '@angular/common/http';
|
|
2
|
-
import { Injector, inject } from '@angular/core';
|
|
3
|
-
import { Router } from '@angular/router';
|
|
4
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
5
|
-
import { ConfirmationService, MessageService } from 'primeng/api';
|
|
6
|
-
import { DialogService } from 'primeng/dynamicdialog';
|
|
7
|
-
import { from, mergeMap, of, switchMap, take, timeout } from 'rxjs';
|
|
8
|
-
import { catchError, filter, first, map, startWith } from 'rxjs/operators';
|
|
9
|
-
import { ActionContext, ActionContextValidation, ActionInstance, ActionInstanceStateEnum, ActionParameters } from '../../components/action/models';
|
|
10
|
-
import { ActionDeleteDescriptorInst, ActionEditorAddDescriptorInst, ActionEditorDescriptorInst, ActionEditorEditDescriptorInst } from '../../descriptors/action';
|
|
11
|
-
import { ActionActivationTriggerEnum, ActionTypeEnum } from '../../descriptors/types';
|
|
12
|
-
import { toObservable } from '../../helpers/coercion';
|
|
13
|
-
import { MngActionError, MngHttpError, MngInternalError } from '../../models';
|
|
14
|
-
import { MngParametrizePipe } from '../../pipes';
|
|
15
|
-
import { StyleSizeEnum } from '../../styles/models';
|
|
16
|
-
import { I18nUtils, NotificationUtil, StringUtil } from '../../utils';
|
|
17
|
-
import { MngActionErrorMapperService } from '../action-error-mapper.service';
|
|
18
|
-
import { MngCommonsService } from '../commons.service';
|
|
19
|
-
import { DataProviderExecutor } from '../data-provider-executor.service';
|
|
20
|
-
import { MngLoggerService } from '../logger.service';
|
|
21
|
-
import { MngNavigationService } from '../navigation.service';
|
|
22
|
-
import { ACTION_EDITOR_DIALOG_COMPONENT_SETTING } from '../tokens';
|
|
23
|
-
import { ViewContainer } from '../view';
|
|
24
|
-
export class MngActionExecutorService {
|
|
25
|
-
constructor() {
|
|
26
|
-
this.injector = inject(Injector);
|
|
27
|
-
this.router = inject(Router);
|
|
28
|
-
this.dialogService = inject(DialogService);
|
|
29
|
-
this.translate = inject(TranslateService);
|
|
30
|
-
this.mngCommons = inject(MngCommonsService);
|
|
31
|
-
this.dataProviderExecutor = inject(DataProviderExecutor);
|
|
32
|
-
this.navigationService = inject(MngNavigationService);
|
|
33
|
-
this.errorMapper = inject(MngActionErrorMapperService);
|
|
34
|
-
this.parametrize = inject(MngParametrizePipe);
|
|
35
|
-
this.defaultEditorDialogComponent = inject(ACTION_EDITOR_DIALOG_COMPONENT_SETTING);
|
|
36
|
-
this.messageService = inject(MessageService);
|
|
37
|
-
this.confirmationService = inject(ConfirmationService);
|
|
38
|
-
this.viewContainer = inject(ViewContainer, { optional: true });
|
|
39
|
-
this.instancesBufferMax = 100;
|
|
40
|
-
this.logger = inject(MngLoggerService).create('MngActionExecutorService');
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Prepares action context for usage in validation.
|
|
44
|
-
* @param action Action descriptor.
|
|
45
|
-
* @param parameters Action parameters.
|
|
46
|
-
* @param dataProvider Data provider.
|
|
47
|
-
*/
|
|
48
|
-
prepareActionContextValidation(action, parameters, dataProvider) {
|
|
49
|
-
const ctxDataProvider = dataProvider ?? action.dataProvider ?? this.viewContainer?.getDataProvider();
|
|
50
|
-
return new ActionContextValidation(action, parameters, this.dataProviderExecutor.getDataProviderService(this.injector, ctxDataProvider) ?? undefined, ctxDataProvider);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Runs action context by submitting execution results/errors to context, watching over instance results/errors, displaying notifications,
|
|
54
|
-
* running next/error action and triggering dismiss of action. Confirmation is also processed here.
|
|
55
|
-
*
|
|
56
|
-
* @param ctx Action context to run.
|
|
57
|
-
*/
|
|
58
|
-
run(ctx) {
|
|
59
|
-
const isMainRunFn = ctx.functionName === 'submit' || ctx.functionName === 'run';
|
|
60
|
-
// if (ctx.instance.action.type === ActionTypeEnum.Direct && ctx.instance.action.hasRunConfirmation) {
|
|
61
|
-
if (isMainRunFn && ctx.instance.action.hasRunConfirmation) {
|
|
62
|
-
// only direct action can be configured with run confirmation
|
|
63
|
-
// if editor, then run confirmation is mapped to submit action and ignored as editor run
|
|
64
|
-
const confirmationDescriptor = ctx.instance.action.runConfirmationDialogDescriptor;
|
|
65
|
-
const item = ctx.parameters.item;
|
|
66
|
-
let confirmParams = {
|
|
67
|
-
icon: confirmationDescriptor.icon,
|
|
68
|
-
acceptVisible: true,
|
|
69
|
-
acceptIcon: confirmationDescriptor.acceptButton.icon ?? undefined,
|
|
70
|
-
acceptButtonStyleClass: confirmationDescriptor.acceptButton.styleClass.build(),
|
|
71
|
-
rejectVisible: true,
|
|
72
|
-
rejectIcon: confirmationDescriptor.rejectButton?.icon ?? undefined,
|
|
73
|
-
rejectButtonStyleClass: confirmationDescriptor.rejectButton?.styleClass.build(),
|
|
74
|
-
closeOnEscape: confirmationDescriptor.closeOnEscape
|
|
75
|
-
};
|
|
76
|
-
if (confirmationDescriptor.title !== null) {
|
|
77
|
-
confirmParams.header =
|
|
78
|
-
I18nUtils.Action.get(this.translate, ctx.instance.action, 'confirm.title', confirmationDescriptor.title, item, 'general.confirmation') ?? undefined;
|
|
79
|
-
}
|
|
80
|
-
if (confirmationDescriptor.message !== null) {
|
|
81
|
-
confirmParams.message =
|
|
82
|
-
I18nUtils.Action.get(this.translate, ctx.instance.action, 'confirm.message', confirmationDescriptor.message, StringUtil.escapeHtmlAny(item), 'general.confirmation') ?? undefined;
|
|
83
|
-
}
|
|
84
|
-
if (confirmationDescriptor.acceptButton.label !== null) {
|
|
85
|
-
confirmParams.acceptLabel =
|
|
86
|
-
I18nUtils.Action.get(this.translate, ctx.instance.action, 'confirm.accept', confirmationDescriptor.acceptButton.label, item, 'general.yes') ?? undefined;
|
|
87
|
-
}
|
|
88
|
-
if (confirmationDescriptor.acceptButton.icon !== null) {
|
|
89
|
-
confirmParams.acceptIcon = confirmationDescriptor.acceptButton.icon;
|
|
90
|
-
}
|
|
91
|
-
if (confirmationDescriptor.rejectButton?.icon !== null) {
|
|
92
|
-
confirmParams.rejectIcon = confirmationDescriptor.rejectButton?.icon;
|
|
93
|
-
}
|
|
94
|
-
if (confirmationDescriptor.rejectButton?.label !== null) {
|
|
95
|
-
confirmParams.rejectLabel =
|
|
96
|
-
I18nUtils.Action.get(this.translate, ctx.instance.action, 'confirm.reject', confirmationDescriptor.rejectButton?.label, item, 'general.no') ?? undefined;
|
|
97
|
-
}
|
|
98
|
-
if (confirmationDescriptor.rejectButton == null || (confirmationDescriptor.rejectButton.label === null && confirmationDescriptor.rejectButton.icon === null)) {
|
|
99
|
-
confirmParams.rejectVisible = false;
|
|
100
|
-
}
|
|
101
|
-
confirmParams.accept = () => {
|
|
102
|
-
ctx.instance.state = ActionInstanceStateEnum.RunConfirmationEndAccept;
|
|
103
|
-
this.runWithoutConfirmation(ctx);
|
|
104
|
-
};
|
|
105
|
-
confirmParams.reject = () => {
|
|
106
|
-
ctx.instance.state = ActionInstanceStateEnum.RunConfirmationEndReject;
|
|
107
|
-
if (ctx.instance.action.type !== ActionTypeEnum.Editor) {
|
|
108
|
-
// if not editor, the it can be closed
|
|
109
|
-
this.finishAction(ctx.instance);
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
if (confirmationDescriptor.runConfirmationConfigMapFn) {
|
|
113
|
-
confirmParams = confirmationDescriptor.runConfirmationConfigMapFn(ctx, confirmParams);
|
|
114
|
-
}
|
|
115
|
-
ctx.confirmation = confirmParams;
|
|
116
|
-
ctx.instance.state = ActionInstanceStateEnum.RunConfirmationStart;
|
|
117
|
-
this.confirmationService.confirm(confirmParams);
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
this.runWithoutConfirmation(ctx);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Runs action context by submitting execution results/errors to context, watching over instance results/errors, displaying notifications,
|
|
125
|
-
* running next/error action and triggering dismiss of action. Confirmation
|
|
126
|
-
*
|
|
127
|
-
* @param ctx Action context to run.
|
|
128
|
-
*
|
|
129
|
-
* @returns Action context for submit (=run) function.
|
|
130
|
-
*/
|
|
131
|
-
runWithoutConfirmation(ctx) {
|
|
132
|
-
const isMainRunFn = ctx.functionName === 'submit' || ctx.functionName === 'run';
|
|
133
|
-
const isErrorCriticalRunFn = ctx.functionName === 'run';
|
|
134
|
-
let actionEditor;
|
|
135
|
-
let fnObs;
|
|
136
|
-
switch (ctx.functionName) {
|
|
137
|
-
case 'submit':
|
|
138
|
-
actionEditor = ctx.instance.action;
|
|
139
|
-
if (typeof actionEditor.submitFunction !== 'function') {
|
|
140
|
-
if (actionEditor instanceof ActionEditorAddDescriptorInst) {
|
|
141
|
-
fnObs = this.dataProviderExecutor.runCreateOrFail.bind(this.dataProviderExecutor);
|
|
142
|
-
}
|
|
143
|
-
else if (actionEditor instanceof ActionEditorEditDescriptorInst) {
|
|
144
|
-
fnObs = this.dataProviderExecutor.runUpdateOrFail.bind(this.dataProviderExecutor);
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
// try to guess this one
|
|
148
|
-
const defaultSubmit = of(ctx.parameters?.item ? ctx.parameters.item : undefined);
|
|
149
|
-
fnObs = ctx => {
|
|
150
|
-
if (ctx.parameters.itemId) {
|
|
151
|
-
return this.dataProviderExecutor.runUpdate(ctx, defaultSubmit);
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
return this.dataProviderExecutor.runCreate(ctx, defaultSubmit);
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
fnObs = actionEditor.submitFunction;
|
|
161
|
-
}
|
|
162
|
-
break;
|
|
163
|
-
case 'fetch':
|
|
164
|
-
actionEditor = ctx.instance.action;
|
|
165
|
-
if (typeof actionEditor.fetchFunction !== 'function') {
|
|
166
|
-
if (actionEditor instanceof ActionEditorEditDescriptorInst) {
|
|
167
|
-
fnObs = this.dataProviderExecutor.runFetchOrFail.bind(this.dataProviderExecutor);
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
const defaultFetch = of(ctx.parameters?.item ? ctx.parameters.item : undefined);
|
|
171
|
-
fnObs = ctx => {
|
|
172
|
-
if (ctx.parameters.itemId || typeof ctx.parameters.item === 'object') {
|
|
173
|
-
return this.dataProviderExecutor.runFetch(ctx, defaultFetch);
|
|
174
|
-
}
|
|
175
|
-
return defaultFetch;
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
fnObs = actionEditor.fetchFunction;
|
|
181
|
-
}
|
|
182
|
-
break;
|
|
183
|
-
case 'run':
|
|
184
|
-
default:
|
|
185
|
-
if (!ctx.instance.action.hasRunFunction && ctx.instance.action instanceof ActionDeleteDescriptorInst) {
|
|
186
|
-
fnObs = this.dataProviderExecutor.runDeleteOrFail.bind(this.dataProviderExecutor);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
fnObs = ctx.instance.action.runFunction;
|
|
190
|
-
}
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
const retObs = of(void 0).pipe(take(1), switchMap(() => {
|
|
194
|
-
if (isMainRunFn) {
|
|
195
|
-
// if main run function, also set loading to true
|
|
196
|
-
ctx.instance.state = ActionInstanceStateEnum.RunStart;
|
|
197
|
-
ctx.instance.isRunLoadingSubject.next(true);
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
ctx.instance.state = ActionInstanceStateEnum.FetchStart;
|
|
201
|
-
}
|
|
202
|
-
// start context execution to mark execution loading
|
|
203
|
-
ctx.executionStart();
|
|
204
|
-
return toObservable(fnObs(ctx));
|
|
205
|
-
}), mergeMap(runResult => {
|
|
206
|
-
// set next state depending on run
|
|
207
|
-
ctx.instance.state = isMainRunFn ? ActionInstanceStateEnum.RunEnd : ActionInstanceStateEnum.FetchEnd;
|
|
208
|
-
// set execution result
|
|
209
|
-
ctx.executionNext(runResult, isMainRunFn);
|
|
210
|
-
if (isMainRunFn) {
|
|
211
|
-
// set instance final result on main run execution
|
|
212
|
-
ctx.instance.result = runResult;
|
|
213
|
-
ctx.instance.isRunLoadingSubject.next(false);
|
|
214
|
-
// handle notification
|
|
215
|
-
if (ctx.instance.action.hasRunNotificationSuccess) {
|
|
216
|
-
ctx.notification = NotificationUtil.actionNotificationSuccess(this.translate, ctx.instance.action, ctx.functionName, this.messageService, ctx.instance.action.runNotificationSuccessTitle, ctx.instance.action.runNotificationSuccessMessage, {
|
|
217
|
-
...ctx.parameters?.item,
|
|
218
|
-
...runResult
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
// handle possible after run action
|
|
222
|
-
if (ctx.instance.action.afterRunAction) {
|
|
223
|
-
// mark new state for next action start
|
|
224
|
-
const afterRunAction = typeof ctx.instance.action.afterRunAction === 'function' ? ctx.instance.action.afterRunAction(ctx) : ctx.instance.action.afterRunAction;
|
|
225
|
-
const nextActionInstance = this.activateAction(afterRunAction, new ActionParameters(ctx.parameters.itemId, runResult)
|
|
226
|
-
.withActionData(ctx.parameters.actionData)
|
|
227
|
-
.withRoute(ctx.parameters.route)
|
|
228
|
-
.withSourceComponent(ctx.parameters.sourceComponent), undefined, ctx.instance, true);
|
|
229
|
-
ctx.instance.nextActionInstance = nextActionInstance;
|
|
230
|
-
ctx.instance.state = ActionInstanceStateEnum.NextActionStart;
|
|
231
|
-
// finish current action when next action finishes
|
|
232
|
-
return nextActionInstance.state$.pipe(startWith(nextActionInstance.state), // provide first state cause it might be finished already
|
|
233
|
-
filter(state => state >= ActionInstanceStateEnum.FinishSuccessFinal), take(1), map(() => {
|
|
234
|
-
ctx.instance.state = ActionInstanceStateEnum.NextActionEnd;
|
|
235
|
-
return runResult;
|
|
236
|
-
}));
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
if (actionEditor.hasFetchNotificationSuccess) {
|
|
241
|
-
NotificationUtil.actionNotificationSuccess(this.translate, actionEditor, 'fetch', this.messageService, actionEditor.fetchNotificationSuccessTitle, actionEditor.fetchNotificationSuccessMessage, ctx.parameters.item);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
return of(runResult);
|
|
245
|
-
}), map(runResult => {
|
|
246
|
-
if (isMainRunFn) {
|
|
247
|
-
// deactivate action
|
|
248
|
-
this.finishAction(ctx.instance);
|
|
249
|
-
}
|
|
250
|
-
return runResult;
|
|
251
|
-
}), catchError(err => {
|
|
252
|
-
// transform error to mng action error
|
|
253
|
-
const actionError = this.toMngActionError(err, ctx);
|
|
254
|
-
// set instance state to error
|
|
255
|
-
ctx.instance.state = isMainRunFn ? ActionInstanceStateEnum.RunError : ActionInstanceStateEnum.FetchError;
|
|
256
|
-
// mark execution error on context
|
|
257
|
-
ctx.executionError(actionError);
|
|
258
|
-
if (ctx.instance.action.hasRunNotificationError) {
|
|
259
|
-
NotificationUtil.actionNotificationError(this.translate, ctx.instance.action, actionError, 'fetch', this.messageService, ctx.parameters.item);
|
|
260
|
-
}
|
|
261
|
-
let errorObs = of(void 0);
|
|
262
|
-
if (isMainRunFn) {
|
|
263
|
-
ctx.instance.error = err;
|
|
264
|
-
ctx.instance.isRunLoadingSubject.next(false);
|
|
265
|
-
// handle possible error action if run
|
|
266
|
-
if (isMainRunFn && ctx.instance.action.onRunErrorAction) {
|
|
267
|
-
const onRunErrorAction = typeof ctx.instance.action.onRunErrorAction === 'function' ? ctx.instance.action.onRunErrorAction(ctx) : ctx.instance.action.onRunErrorAction;
|
|
268
|
-
// cannot start with trigger, because routing might be problematic (lousing previous results etc.)
|
|
269
|
-
const errorActionInstance = this.activateAction(onRunErrorAction, new ActionParameters(ctx.parameters.itemId, ctx.parameters.item)
|
|
270
|
-
.withActionData(ctx.parameters.actionData)
|
|
271
|
-
.withRoute(ctx.parameters.route)
|
|
272
|
-
.withSourceComponent(ctx.parameters.sourceComponent), undefined, undefined, true);
|
|
273
|
-
ctx.instance.errorActionInstance = errorActionInstance;
|
|
274
|
-
ctx.instance.state = ActionInstanceStateEnum.ErrorActionStart;
|
|
275
|
-
errorObs = errorActionInstance.state$.pipe(startWith(errorActionInstance.state), // provide first state cause it might be finished already
|
|
276
|
-
filter(state => state >= ActionInstanceStateEnum.FinishSuccessFinal), take(1), map(() => {
|
|
277
|
-
ctx.instance.state = ActionInstanceStateEnum.ErrorActionEnd;
|
|
278
|
-
return void 0;
|
|
279
|
-
}));
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
// list and map only to mark instance state as finished error state
|
|
283
|
-
return errorObs.pipe(map(() => {
|
|
284
|
-
// deactivate action only if critical (fetch on editor or run on button actions)
|
|
285
|
-
if (isErrorCriticalRunFn) {
|
|
286
|
-
this.finishAction(ctx.instance);
|
|
287
|
-
}
|
|
288
|
-
// rethrow error to propagate further
|
|
289
|
-
throw actionError;
|
|
290
|
-
}));
|
|
291
|
-
}));
|
|
292
|
-
ctx.runSubscription = retObs.subscribe({
|
|
293
|
-
next: res => {
|
|
294
|
-
this.logger.debug(`ActionContext ${ctx.contextLongName} execution next event`, res);
|
|
295
|
-
},
|
|
296
|
-
error: err => {
|
|
297
|
-
if (err?.type !== 'MngActionError') {
|
|
298
|
-
this.logger.error(`Non action error occurred`, err);
|
|
299
|
-
}
|
|
300
|
-
else {
|
|
301
|
-
this.logger.debug(`Action context ${ctx.contextLongName} execution error event`, err);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
});
|
|
305
|
-
return retObs;
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Prepares editor action's fetch function by creating new action context for action instance.
|
|
309
|
-
*
|
|
310
|
-
* @param action Action descriptor.
|
|
311
|
-
* @param parameters Action parameters for context.
|
|
312
|
-
* @param dataProvider Editor data provider for context.
|
|
313
|
-
* @param instance Optional existing action instance (if non provided, new will be created).
|
|
314
|
-
* @param previousActionInstance Optional previous action instance to link in next instance.
|
|
315
|
-
*
|
|
316
|
-
* @returns Action context for fetch function.
|
|
317
|
-
*/
|
|
318
|
-
prepareContextForEditorFetch(action, parameters, dataProvider, instance, previousActionInstance) {
|
|
319
|
-
instance = this.getOrCreateInstance(instance, action, parameters, ActionInstanceStateEnum.ActivationEnd);
|
|
320
|
-
return this.prepareContextForEditor(instance, parameters, 'fetch', dataProvider, previousActionInstance);
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* Runs editor action's submit (=main run) function by creating new action context for action instance.
|
|
324
|
-
*
|
|
325
|
-
* @param action Action descriptor.
|
|
326
|
-
* @param parameters Action parameters for context.
|
|
327
|
-
* @param dataProvider Editor data provider for context.
|
|
328
|
-
* @param instance Optional existing action instance (if non provided, new will be created).
|
|
329
|
-
* @param previousActionInstance Optional previous action instance to link in next instance.
|
|
330
|
-
*
|
|
331
|
-
* @returns Action context for submit (=run) function.
|
|
332
|
-
*/
|
|
333
|
-
prepareContextForEditorSubmit(action, parameters, dataProvider, instance, previousActionInstance) {
|
|
334
|
-
instance = this.getOrCreateInstance(instance, action, parameters, ActionInstanceStateEnum.ActivationEnd);
|
|
335
|
-
return this.prepareContextForEditor(instance, parameters, 'submit', dataProvider, previousActionInstance);
|
|
336
|
-
}
|
|
337
|
-
/**
|
|
338
|
-
* Prepares action exec context for action of type editor.
|
|
339
|
-
*
|
|
340
|
-
* @param instance Action instance.
|
|
341
|
-
* @param parameters Action parameters for context.
|
|
342
|
-
* @param functionName Action function name parameter.
|
|
343
|
-
* @param dataProvider Optional data provider. If not provided data provider from either the action editor or view container will be used.
|
|
344
|
-
* @param previousActionInstance Optional previous action instance to link in next instance.
|
|
345
|
-
*/
|
|
346
|
-
prepareContextForEditor(instance, parameters, functionName, dataProvider, previousActionInstance) {
|
|
347
|
-
if (instance.action.type !== ActionTypeEnum.Editor) {
|
|
348
|
-
throw new MngInternalError(`Cannot create editor context for action ${instance.action.actionNameLong} of type ${instance.action.type}.`);
|
|
349
|
-
}
|
|
350
|
-
const editorAction = instance.action;
|
|
351
|
-
let ctxDataProvider = dataProvider;
|
|
352
|
-
if (!ctxDataProvider && editorAction.dataProvider) {
|
|
353
|
-
ctxDataProvider = editorAction.dataProvider;
|
|
354
|
-
}
|
|
355
|
-
if (!ctxDataProvider) {
|
|
356
|
-
const viewContainerDataProvider = this.viewContainer?.getDataProvider();
|
|
357
|
-
if (viewContainerDataProvider) {
|
|
358
|
-
ctxDataProvider = viewContainerDataProvider;
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
const ctx = new ActionContext(this.injector, instance, parameters, functionName, this.dataProviderExecutor.getDataProviderService(this.injector, ctxDataProvider) ?? undefined, ctxDataProvider, this.viewContainer ?? undefined);
|
|
362
|
-
ctx.previousActionInstance = previousActionInstance;
|
|
363
|
-
instance.newContext(ctx);
|
|
364
|
-
return ctx;
|
|
365
|
-
}
|
|
366
|
-
/**
|
|
367
|
-
* Runs action's main run function by creating new action context for action instance.
|
|
368
|
-
*
|
|
369
|
-
* @param action Action descriptor.
|
|
370
|
-
* @param parameters Action parameters for context run.
|
|
371
|
-
* @param dataProvider Data provider for context run.
|
|
372
|
-
* @param instance Optional existing action instance (if non provided, new will be created).
|
|
373
|
-
* @param previousActionInstance Optional previous action instance to link in next instance.
|
|
374
|
-
*
|
|
375
|
-
* @returns Action context for run function.
|
|
376
|
-
*/
|
|
377
|
-
prepareContext(action, parameters, dataProvider, instance, previousActionInstance) {
|
|
378
|
-
instance = this.getOrCreateInstance(instance, action, parameters, ActionInstanceStateEnum.ActivationEnd);
|
|
379
|
-
const ctxDataProvider = dataProvider ?? instance.action.dataProvider ?? this.viewContainer?.getDataProvider();
|
|
380
|
-
const ctx = new ActionContext(this.injector, instance, parameters, 'run', this.dataProviderExecutor.getDataProviderService(this.injector, ctxDataProvider) ?? undefined, ctxDataProvider, this.viewContainer ?? undefined);
|
|
381
|
-
ctx.previousActionInstance = previousActionInstance;
|
|
382
|
-
instance.newContext(ctx);
|
|
383
|
-
return ctx;
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* Activates action (in case of dialog, dialog will be opened).
|
|
387
|
-
*
|
|
388
|
-
* @param action Action descriptor.
|
|
389
|
-
* @param parameters Action parameters for activation of action instance.
|
|
390
|
-
* @param instance Optional existing action instance (if non provided, new will be created).
|
|
391
|
-
* @param previousActionInstance Optional previous action instance to link in next instance.
|
|
392
|
-
* @param runContext Marks if context should be run.
|
|
393
|
-
*
|
|
394
|
-
* @returns Action instance - if non provided in parameters, the newly created will be returned.
|
|
395
|
-
*/
|
|
396
|
-
activateAction(action, parameters, instance, previousActionInstance, runContext = false) {
|
|
397
|
-
instance = this.getOrCreateInstance(instance, action, parameters, ActionInstanceStateEnum.ActivationStart);
|
|
398
|
-
instance.state = ActionInstanceStateEnum.ActivationStart;
|
|
399
|
-
instance.activationParameters = parameters;
|
|
400
|
-
// start activation instance
|
|
401
|
-
if (action.type === ActionTypeEnum.Editor) {
|
|
402
|
-
let dialogComponent = this.defaultEditorDialogComponent;
|
|
403
|
-
const dialogClassNames = ['mng-dialog'];
|
|
404
|
-
if (action instanceof ActionEditorDescriptorInst) {
|
|
405
|
-
dialogClassNames.push(action.dialogClassName ?? 'mng-action-editor-dialog');
|
|
406
|
-
switch (action.dialogSize) {
|
|
407
|
-
case StyleSizeEnum.ExtraSmall:
|
|
408
|
-
dialogClassNames.push('mng-dialog-xs');
|
|
409
|
-
break;
|
|
410
|
-
case StyleSizeEnum.Small:
|
|
411
|
-
dialogClassNames.push('mng-dialog-sm');
|
|
412
|
-
break;
|
|
413
|
-
case StyleSizeEnum.Large:
|
|
414
|
-
dialogClassNames.push('mng-dialog-lg');
|
|
415
|
-
break;
|
|
416
|
-
case StyleSizeEnum.ExtraLarge:
|
|
417
|
-
dialogClassNames.push('mng-dialog-xl');
|
|
418
|
-
break;
|
|
419
|
-
case StyleSizeEnum.Normal:
|
|
420
|
-
default:
|
|
421
|
-
break;
|
|
422
|
-
}
|
|
423
|
-
if (action.editorComponent) {
|
|
424
|
-
dialogComponent = action.editorComponent;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
const dialogConfig = {
|
|
428
|
-
data: {
|
|
429
|
-
action: {
|
|
430
|
-
descriptor: action,
|
|
431
|
-
instance: instance,
|
|
432
|
-
previousInstance: previousActionInstance
|
|
433
|
-
},
|
|
434
|
-
injector: this.injector
|
|
435
|
-
},
|
|
436
|
-
duplicate: true,
|
|
437
|
-
styleClass: dialogClassNames.join(' ')
|
|
438
|
-
};
|
|
439
|
-
if (action.activationTrigger === ActionActivationTriggerEnum.OnRoute) {
|
|
440
|
-
dialogConfig.closable = false;
|
|
441
|
-
dialogConfig.closeOnEscape = false;
|
|
442
|
-
}
|
|
443
|
-
const dialogRef = this.dialogService.open(dialogComponent, dialogConfig);
|
|
444
|
-
dialogRef.onClose.pipe(take(1)).subscribe(() => {
|
|
445
|
-
// to close dialog on 'X' click or esc button
|
|
446
|
-
this.finishAction(instance);
|
|
447
|
-
});
|
|
448
|
-
instance.activationDialogRef = dialogRef;
|
|
449
|
-
return instance;
|
|
450
|
-
}
|
|
451
|
-
else {
|
|
452
|
-
// directly execute action
|
|
453
|
-
instance.state = ActionInstanceStateEnum.ActivationEnd;
|
|
454
|
-
const context = this.prepareContext(action, parameters, undefined, instance, previousActionInstance);
|
|
455
|
-
if (runContext) {
|
|
456
|
-
this.run(context);
|
|
457
|
-
}
|
|
458
|
-
return context.instance;
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* To be called when action editor is initialized to correctly activate action.
|
|
463
|
-
* @param action Action descriptor.
|
|
464
|
-
* @param instance Action instance (if available).
|
|
465
|
-
* @param componentRef Optional action editor component reference.
|
|
466
|
-
*/
|
|
467
|
-
onActionEditorInit(action, instance, componentRef) {
|
|
468
|
-
if (action.type !== ActionTypeEnum.Editor) {
|
|
469
|
-
throw new Error(`Action ${action.actionName} is not of type editor, cannot be activated through "onActionEditorOnInit"`);
|
|
470
|
-
}
|
|
471
|
-
if (instance && action.activationTrigger === ActionActivationTriggerEnum.OnRoute) {
|
|
472
|
-
const triggeredInstance = this.viewContainer?.getRouteTriggeredActionInstance();
|
|
473
|
-
const activationInstance = this.viewContainer?.getRouteTriggeredActionInstance();
|
|
474
|
-
if (triggeredInstance && triggeredInstance.instanceLongName !== instance.instanceLongName) {
|
|
475
|
-
this.logger.debug(`WARNING: Found triggered parameters view container instance ${triggeredInstance.instanceLongName} and it does not match instance ${instance.instanceLongName} retrieved on editor init.`);
|
|
476
|
-
}
|
|
477
|
-
if (activationInstance && activationInstance.instanceLongName !== instance.instanceLongName) {
|
|
478
|
-
this.logger.debug(`WARNING: Found triggered parameters view container instance ${activationInstance.instanceLongName} and it does not match instance ${instance.instanceLongName} retrieved on editor init.`);
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
instance = this.getOrCreateInstance(instance, action, undefined, ActionInstanceStateEnum.ActivationStart);
|
|
482
|
-
instance.state = ActionInstanceStateEnum.ActivationEnd;
|
|
483
|
-
instance.activationEditorComponentRef = componentRef;
|
|
484
|
-
return instance;
|
|
485
|
-
}
|
|
486
|
-
/**
|
|
487
|
-
* To be called when action editor cmp is being destroyed to correctly finish action.
|
|
488
|
-
* @param instance Action instance.
|
|
489
|
-
*/
|
|
490
|
-
onActionDestroy(instance) {
|
|
491
|
-
if (!instance) {
|
|
492
|
-
return;
|
|
493
|
-
}
|
|
494
|
-
instance = this.getOrCreateInstance(instance);
|
|
495
|
-
if (instance.action.activationTrigger !== ActionActivationTriggerEnum.OnClick) {
|
|
496
|
-
return;
|
|
497
|
-
}
|
|
498
|
-
this.finishAction(instance, true);
|
|
499
|
-
}
|
|
500
|
-
/**
|
|
501
|
-
* To be called when action editor cmp is being destroyed to correctly finish action.
|
|
502
|
-
* @param instance Action instance.
|
|
503
|
-
*/
|
|
504
|
-
onActionEditorDestroy(instance) {
|
|
505
|
-
if (!instance) {
|
|
506
|
-
return;
|
|
507
|
-
}
|
|
508
|
-
instance = this.getOrCreateInstance(instance);
|
|
509
|
-
if (instance.action.type !== ActionTypeEnum.Editor) {
|
|
510
|
-
throw new Error(`Action instance ${instance.instanceLongName} is not of type editor, cannot be deactivated through "onActionEditorOnDestroy"`);
|
|
511
|
-
}
|
|
512
|
-
if (instance.action.activationTrigger !== ActionActivationTriggerEnum.OnRoute) {
|
|
513
|
-
this.finishAction(instance, true);
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
/**
|
|
517
|
-
* To be called when action route cmp is being destroyed to correctly finish action.
|
|
518
|
-
* @param instance Action instance.
|
|
519
|
-
*/
|
|
520
|
-
onActionRouteDestroy(instance) {
|
|
521
|
-
if (!instance) {
|
|
522
|
-
return;
|
|
523
|
-
}
|
|
524
|
-
instance = this.getOrCreateInstance(instance);
|
|
525
|
-
if (instance.action.activationTrigger !== ActionActivationTriggerEnum.OnRoute) {
|
|
526
|
-
throw new Error(`Action instance ${instance.instanceLongName} is not triggered on route, cannot be deactivated through "onActionRouteOnDestroy"`);
|
|
527
|
-
}
|
|
528
|
-
this.finishAction(instance, true);
|
|
529
|
-
}
|
|
530
|
-
/**
|
|
531
|
-
* Deactivates action by choosing final state, closing dialog and completing all subjects in instance and contexts.
|
|
532
|
-
*
|
|
533
|
-
* @param instance Action instance.
|
|
534
|
-
* @param onDestroy Marks if finish is called on component destroy lifecycle hook.
|
|
535
|
-
*/
|
|
536
|
-
finishAction(instance, onDestroy = false) {
|
|
537
|
-
instance = this.getOrCreateInstance(instance);
|
|
538
|
-
if (instance.state >= ActionInstanceStateEnum.FinishSuccessFinal) {
|
|
539
|
-
this.logger.trace(`ActionInstance ${instance.instanceLongName} already finished`);
|
|
540
|
-
return;
|
|
541
|
-
}
|
|
542
|
-
let finalState;
|
|
543
|
-
if (typeof instance.result !== 'undefined') {
|
|
544
|
-
finalState = ActionInstanceStateEnum.FinishSuccessFinal;
|
|
545
|
-
}
|
|
546
|
-
else if (typeof instance.error !== 'undefined') {
|
|
547
|
-
finalState = ActionInstanceStateEnum.FinishErrorFinal;
|
|
548
|
-
}
|
|
549
|
-
else if (onDestroy) {
|
|
550
|
-
finalState = ActionInstanceStateEnum.FinishComponentDestroyFinal;
|
|
551
|
-
}
|
|
552
|
-
else {
|
|
553
|
-
finalState = ActionInstanceStateEnum.FinishDismissedFinal;
|
|
554
|
-
}
|
|
555
|
-
if (instance.action.type === ActionTypeEnum.Editor) {
|
|
556
|
-
const hasDialog = typeof instance.activationDialogRef !== 'undefined';
|
|
557
|
-
const resubmitEnabled = instance.action.resubmitEnabled;
|
|
558
|
-
if (finalState === ActionInstanceStateEnum.FinishSuccessFinal) {
|
|
559
|
-
if ((hasDialog && resubmitEnabled === true) || (!hasDialog && resubmitEnabled !== false)) {
|
|
560
|
-
finalState = ActionInstanceStateEnum.FinishSuccessReactivateFinal;
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
if (hasDialog && finalState !== ActionInstanceStateEnum.FinishSuccessReactivateFinal) {
|
|
564
|
-
// if state is finish and not called from dialog listener, close the dialog first which will retrigger this function, then finish it
|
|
565
|
-
instance.activationDialogRef.close(instance.result);
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
// unset instance in view container
|
|
569
|
-
this.viewContainer?.unsetRouteTriggeredActionInstance();
|
|
570
|
-
// set final state on instance
|
|
571
|
-
instance.state = finalState;
|
|
572
|
-
if (finalState === ActionInstanceStateEnum.FinishSuccessReactivateFinal) {
|
|
573
|
-
// prepare reactivation instance
|
|
574
|
-
const newInstanceStatus = instance.action.resubmitRefetch
|
|
575
|
-
? ActionInstanceStateEnum.ActivationEnd
|
|
576
|
-
: ActionInstanceStateEnum.FetchEnd;
|
|
577
|
-
// must skip initialization from view container, because it would only get old instance.
|
|
578
|
-
// we need new instance before we can set new one on the view container.
|
|
579
|
-
const newInstance = this.getOrCreateInstance(undefined, instance.action, undefined, newInstanceStatus, true);
|
|
580
|
-
newInstance.previousInstance = instance;
|
|
581
|
-
// copy some additional settings
|
|
582
|
-
newInstance.activationDialogRef = instance.activationDialogRef;
|
|
583
|
-
newInstance.triggerParameters = instance.triggerParameters;
|
|
584
|
-
newInstance.activationParameters = instance.activationParameters;
|
|
585
|
-
this.viewContainer?.setRouteTriggeredActionInstance(newInstance);
|
|
586
|
-
instance.reactivationInstance = newInstance;
|
|
587
|
-
}
|
|
588
|
-
// finish related actions
|
|
589
|
-
if (instance.nextActionInstance) {
|
|
590
|
-
this.logger.debug(`Finishing instance ${instance.instanceLongName} related next action instance: ${instance.nextActionInstance.instanceLongName}`);
|
|
591
|
-
this.finishAction(instance.nextActionInstance, onDestroy);
|
|
592
|
-
}
|
|
593
|
-
if (instance.errorActionInstance) {
|
|
594
|
-
this.logger.debug(`Finishing instance ${instance.instanceLongName} related error action instance: ${instance.errorActionInstance.instanceLongName}`);
|
|
595
|
-
this.finishAction(instance.errorActionInstance, onDestroy);
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
/**
|
|
599
|
-
* Triggers action with parameters.
|
|
600
|
-
*
|
|
601
|
-
* @param action Action descriptor.
|
|
602
|
-
* @param parameters Action parameters for action execution to construct new route.
|
|
603
|
-
* @param runContext Marks if context should be run.
|
|
604
|
-
*
|
|
605
|
-
* @returns Action instance - if non provided in parameters, the newly created will be returned.
|
|
606
|
-
*/
|
|
607
|
-
triggerAction(action, parameters, runContext = false) {
|
|
608
|
-
const instance = this.getOrCreateInstance(undefined, action, parameters);
|
|
609
|
-
instance.triggerParameters = parameters;
|
|
610
|
-
instance.state = ActionInstanceStateEnum.TriggerStart;
|
|
611
|
-
if (action.activationTrigger === ActionActivationTriggerEnum.OnRoute) {
|
|
612
|
-
const baseUrl = this.router.url.split('?')[0];
|
|
613
|
-
const parsedUrl = this.router.parseUrl(this.router.url);
|
|
614
|
-
let actionUrl = action.routeUrl ?? '';
|
|
615
|
-
if (actionUrl.startsWith('/')) {
|
|
616
|
-
actionUrl = actionUrl.substring(1);
|
|
617
|
-
}
|
|
618
|
-
const actionUrlSegments = this.parametrize.transform(actionUrl, parameters.itemId, parameters.item, parameters.actionData).split('/');
|
|
619
|
-
// set instance in view container
|
|
620
|
-
this.viewContainer?.setRouteTriggeredActionInstance(instance);
|
|
621
|
-
from(this.router.navigate([baseUrl, ...actionUrlSegments], { relativeTo: parameters.route, queryParams: parsedUrl.queryParams }))
|
|
622
|
-
.pipe(take(1))
|
|
623
|
-
.subscribe(() => (instance.state = ActionInstanceStateEnum.TriggerEnd));
|
|
624
|
-
return instance;
|
|
625
|
-
}
|
|
626
|
-
else {
|
|
627
|
-
instance.state = ActionInstanceStateEnum.TriggerEnd;
|
|
628
|
-
this.activateAction(action, parameters, instance);
|
|
629
|
-
if (runContext) {
|
|
630
|
-
const context = instance.context;
|
|
631
|
-
if (context) {
|
|
632
|
-
this.run(context);
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
return instance;
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
/**
|
|
639
|
-
* Deactivates on route triggered action by trying to reroute back to location where action was triggered.
|
|
640
|
-
* @param instance Action instance.
|
|
641
|
-
*/
|
|
642
|
-
finishActionRouteUntrigger(instance) {
|
|
643
|
-
if (instance.action.activationTrigger !== ActionActivationTriggerEnum.OnRoute) {
|
|
644
|
-
return;
|
|
645
|
-
}
|
|
646
|
-
instance = this.getOrCreateInstance(instance);
|
|
647
|
-
instance.state = ActionInstanceStateEnum.FinishRouteUntriggerStart;
|
|
648
|
-
let url = this.navigationService.getCurrentLocationFromHistory() ?? this.navigationService.getCurrentLocationFromUrl();
|
|
649
|
-
if (!url) {
|
|
650
|
-
this.navigationService.back();
|
|
651
|
-
}
|
|
652
|
-
else {
|
|
653
|
-
if (url.startsWith('/')) {
|
|
654
|
-
url = url.substring(1);
|
|
655
|
-
}
|
|
656
|
-
const splitUrlQueryParam = url.split('?');
|
|
657
|
-
const urlPathSegments = splitUrlQueryParam[0].split('#')[0].split('/');
|
|
658
|
-
const queryParam = splitUrlQueryParam[1]?.split('#')[0];
|
|
659
|
-
let actionUrl = instance.action?.routeUrl ?? '';
|
|
660
|
-
if (actionUrl.startsWith('/')) {
|
|
661
|
-
actionUrl = actionUrl.substring(1);
|
|
662
|
-
}
|
|
663
|
-
const actionUrlSegments = actionUrl.split('/');
|
|
664
|
-
let redirectUrl = '/' + urlPathSegments.slice(0, urlPathSegments.length - actionUrlSegments.length).join('/');
|
|
665
|
-
if (typeof queryParam !== 'undefined') {
|
|
666
|
-
redirectUrl = `${redirectUrl}?${queryParam}`;
|
|
667
|
-
}
|
|
668
|
-
// No URL replaces, probably ok, to allow going back
|
|
669
|
-
from(this.router.navigateByUrl(redirectUrl))
|
|
670
|
-
.pipe(first(), timeout(1000))
|
|
671
|
-
.subscribe({
|
|
672
|
-
next: () => (instance.state = ActionInstanceStateEnum.FinishRouteUntriggerEndFinal),
|
|
673
|
-
error: () => (instance.state = ActionInstanceStateEnum.FinishRouteUntriggerTimeoutFinal)
|
|
674
|
-
});
|
|
675
|
-
}
|
|
676
|
-
}
|
|
677
|
-
/**
|
|
678
|
-
* Transform error of any type to mng error by using error mapper that could be provided by final project.
|
|
679
|
-
* @param error error of any type.
|
|
680
|
-
* @param context Action context.
|
|
681
|
-
*
|
|
682
|
-
* @returns mapped MngError.
|
|
683
|
-
*/
|
|
684
|
-
toMngActionError(error, context) {
|
|
685
|
-
let mngError;
|
|
686
|
-
if (context) {
|
|
687
|
-
const options = {
|
|
688
|
-
cause: error,
|
|
689
|
-
location: this.router.url
|
|
690
|
-
};
|
|
691
|
-
if (error instanceof HttpErrorResponse) {
|
|
692
|
-
options.httpError = error;
|
|
693
|
-
}
|
|
694
|
-
mngError = new MngActionError(error?.message ?? 'Unknown error', context.contextLongName);
|
|
695
|
-
}
|
|
696
|
-
else if (error instanceof HttpErrorResponse) {
|
|
697
|
-
// should not really happen (should always be wrapped in MngActionError), just in case
|
|
698
|
-
mngError = new MngHttpError(`Http Error occurred in action`, error, {
|
|
699
|
-
location: this.router.url
|
|
700
|
-
});
|
|
701
|
-
}
|
|
702
|
-
else {
|
|
703
|
-
// not from action, so unknown source of error
|
|
704
|
-
mngError = new MngInternalError(error?.message ?? 'Unknown error', {
|
|
705
|
-
name: error?.name ?? 'UnknownError',
|
|
706
|
-
location: this.router.url,
|
|
707
|
-
cause: error
|
|
708
|
-
});
|
|
709
|
-
}
|
|
710
|
-
// just trace it, allow user to set if this is error or not
|
|
711
|
-
this.logger.trace(mngError);
|
|
712
|
-
return this.errorMapper.toMngError(error, mngError);
|
|
713
|
-
}
|
|
714
|
-
/**
|
|
715
|
-
* Creates or gets existing action instance.
|
|
716
|
-
* @param instance Action instance.
|
|
717
|
-
* @param action Action descriptor.
|
|
718
|
-
* @param parameters Action parameters.
|
|
719
|
-
* @param instanceInitialStatus Action instance initial status.
|
|
720
|
-
* @param skipInitializationFromViewContainer If initialization of instance from view container should be skipped.
|
|
721
|
-
* @private
|
|
722
|
-
*/
|
|
723
|
-
getOrCreateInstance(instance, action, parameters, instanceInitialStatus, skipInitializationFromViewContainer = false) {
|
|
724
|
-
if (!skipInitializationFromViewContainer && !instance && action?.activationTrigger === ActionActivationTriggerEnum.OnRoute && parameters) {
|
|
725
|
-
instance = this.viewContainer?.getRouteTriggeredActionInstance();
|
|
726
|
-
}
|
|
727
|
-
if (!instance) {
|
|
728
|
-
if (!action) {
|
|
729
|
-
throw new MngInternalError('Action descriptor is not provided, instance cannot be created.', { name: 'ActionExecutorServiceError' });
|
|
730
|
-
}
|
|
731
|
-
// create new instance if non provided
|
|
732
|
-
instance = new ActionInstance(action, instanceInitialStatus);
|
|
733
|
-
}
|
|
734
|
-
if (this.mngCommons.actionsDebugInstances && !this.instances.some(i => i.instanceLongName === instance.instanceLongName)) {
|
|
735
|
-
if (this.instances.length >= this.instancesBufferMax) {
|
|
736
|
-
const lastInstance = this.instances.shift();
|
|
737
|
-
if (lastInstance.state < ActionInstanceStateEnum.FinishSuccessFinal) {
|
|
738
|
-
this.logger.debug(`ERROR: Not all instances are finished! Finishing instance ${instance.instanceLongName} with dismissal.`);
|
|
739
|
-
lastInstance.forceFinish();
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
this.instances.push(instance);
|
|
743
|
-
}
|
|
744
|
-
return instance;
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsTUFBTSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFlLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBYSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBQyxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFFakosT0FBTyxFQUVILDBCQUEwQixFQUUxQiw2QkFBNkIsRUFDN0IsMEJBQTBCLEVBQzFCLDhCQUE4QixFQUNqQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBQywyQkFBMkIsRUFBRSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQs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QixFQUFFO2dCQUNsRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUU1QyxJQUFJLFlBQWEsQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLENBQUMsa0JBQWtCLEVBQUU7b0JBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxRQUFRLENBQUMsZ0JBQWdCLGtCQUFrQixDQUFDLENBQUM7b0JBQzVILFlBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDL0I7YUFDSjtZQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3RvciwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyLCBVcmxUcmVlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWd9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge09ic2VydmFibGUsIGZyb20sIG1lcmdlTWFwLCBvZiwgc3dpdGNoTWFwLCB0YWtlLCB0aW1lb3V0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmlsdGVyLCBmaXJzdCwgbWFwLCBzdGFydFdpdGh9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtBY3Rpb25Db250ZXh0LCBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbiwgQWN0aW9uSW5zdGFuY2UsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLCBBY3Rpb25QYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkNvbmZpcm1hdGlvbkRlc2NyaXB0b3IsXG4gICAgQWN0aW9uRGVsZXRlRGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uRGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3JJbnN0XG59IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSwgQWN0aW9uVHlwZUVudW19IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7dG9PYnNlcnZhYmxlfSBmcm9tICcuLi8uLi9oZWxwZXJzL2NvZXJjaW9uJztcbmltcG9ydCB7QWN0aW9uRWRpdG9yRGlhbG9nRGF0YSwgSUFjdGlvbkVkaXRvckNvbXBvbmVudCwgSU1uZ0Vycm9yLCBNbmdBY3Rpb25FcnJvciwgTW5nQWN0aW9uRXJyb3JPcHRpb25zLCBNbmdIdHRwRXJyb3IsIE1uZ0ludGVybmFsRXJyb3J9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ1BhcmFtZXRyaXplUGlwZX0gZnJvbSAnLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHtTdHlsZVNpemVFbnVtfSBmcm9tICcuLi8uLi9zdHlsZXMvbW9kZWxzJztcbmltcG9ydCB7QWN0aW9uUnVuRm5UeXBlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge0kxOG5VdGlscywgTm90aWZpY2F0aW9uVXRpbCwgU3RyaW5nVXRpbH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25FcnJvck1hcHBlclNlcnZpY2V9IGZyb20gJy4uL2FjdGlvbi1lcnJvci1tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQge01uZ0NvbW1vbnNTZXJ2aWNlfSBmcm9tICcuLi9jb21tb25zLnNlcnZpY2UnO1xuaW1wb3J0IHtEYXRhUHJvdmlkZXJFeGVjdXRvcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlci1leGVjdXRvci5zZXJ2aWNlJztcbmltcG9ydCB7TW5nTG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7QUNUSU9OX0VESVRPUl9ESUFMT0dfQ09NUE9ORU5UX1NFVFRJTkd9IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQge1ZpZXdDb250YWluZXJ9IGZyb20gJy4uL3ZpZXcnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtbmdDb21tb25zID0gaW5qZWN0KE1uZ0NvbW1vbnNTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YVByb3ZpZGVyRXhlY3V0b3IgPSBpbmplY3QoRGF0YVByb3ZpZGVyRXhlY3V0b3IpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBuYXZpZ2F0aW9uU2VydmljZSA9IGluamVjdChNbmdOYXZpZ2F0aW9uU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVycm9yTWFwcGVyID0gaW5qZWN0KE1uZ0FjdGlvbkVycm9yTWFwcGVyU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhcmFtZXRyaXplID0gaW5qZWN0KE1uZ1BhcmFtZXRyaXplUGlwZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQgPSBpbmplY3QoQUNUSU9OX0VESVRPUl9ESUFMT0dfQ09NUE9ORU5UX1NFVFRJTkcpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtZXNzYWdlU2VydmljZSA9IGluamVjdChNZXNzYWdlU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHZpZXdDb250YWluZXIgPSBpbmplY3QoVmlld0NvbnRhaW5lciwge29wdGlvbmFsOiB0cnVlfSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5zdGFuY2VzQnVmZmVyTWF4ID0gMTAwO1xuICAgIHByb3RlY3RlZCBsb2dnZXIgPSBpbmplY3QoTW5nTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UnKTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgaW5zdGFuY2VzKCk6IEFjdGlvbkluc3RhbmNlPGFueSwgYW55PltdO1xuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGNvbnRleHQgZm9yIHVzYWdlIGluIHZhbGlkYXRpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICovXG4gICAgcHVibGljIHByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPlxuICAgICk6IEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyID8/IGFjdGlvbi5kYXRhUHJvdmlkZXIgPz8gdGhpcy52aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLmdldERhdGFQcm92aWRlclNlcnZpY2UodGhpcy5pbmplY3RvciwgY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFjdGlvbiBjb250ZXh0IGJ5IHN1Ym1pdHRpbmcgZXhlY3V0aW9uIHJlc3VsdHMvZXJyb3JzIHRvIGNvbnRleHQsIHdhdGNoaW5nIG92ZXIgaW5zdGFuY2UgcmVzdWx0cy9lcnJvcnMsIGRpc3BsYXlpbmcgbm90aWZpY2F0aW9ucyxcbiAgICAgKiBydW5uaW5nIG5leHQvZXJyb3IgYWN0aW9uIGFuZCB0cmlnZ2VyaW5nIGRpc21pc3Mgb2YgYWN0aW9uLiBDb25maXJtYXRpb24gaXMgYWxzbyBwcm9jZXNzZWQgaGVyZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdHggQWN0aW9uIGNvbnRleHQgdG8gcnVuLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW48SXRlbSwgU2VydmljZSA9IHVuZGVmaW5lZD4oY3R4OiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KSB7XG4gICAgICAgIGNvbnN0IGlzTWFpblJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcgfHwgY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG5cbiAgICAgICAgLy8gaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0ICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgLy8gb25seSBkaXJlY3QgYWN0aW9uIGNhbiBiZSBjb25maWd1cmVkIHdpdGggcnVuIGNvbmZpcm1hdGlvblxuICAgICAgICAgICAgLy8gaWYgZWRpdG9yLCB0aGVuIHJ1biBjb25maXJtYXRpb24gaXMgbWFwcGVkIHRvIHN1Ym1pdCBhY3Rpb24gYW5kIGlnbm9yZWQgYXMgZWRpdG9yIHJ1blxuICAgICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uRGVzY3JpcHRvciA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciBhcyBBY3Rpb25Db25maXJtYXRpb25EZXNjcmlwdG9yPEl0ZW0+O1xuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LnBhcmFtZXRlcnMuaXRlbTtcbiAgICAgICAgICAgIGxldCBjb25maXJtUGFyYW1zOiBDb25maXJtYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgaWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5pY29uLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjZXB0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYWNjZXB0QnV0dG9uU3R5bGVDbGFzczogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uc3R5bGVDbGFzcy5idWlsZCgpLFxuICAgICAgICAgICAgICAgIHJlamVjdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVqZWN0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5zdHlsZUNsYXNzLmJ1aWxkKCksXG4gICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogY29uZmlybWF0aW9uRGVzY3JpcHRvci5jbG9zZU9uRXNjYXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci50aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaGVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXQodGhpcy50cmFuc2xhdGUsIGN0eC5pbnN0YW5jZS5hY3Rpb24sICdjb25maXJtLnRpdGxlJywgY29uZmlybWF0aW9uRGVzY3JpcHRvci50aXRsZSwgaXRlbSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5tZXNzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlybS5tZXNzYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1V0aWwuZXNjYXBlSHRtbEFueShpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdnZW5lcmFsLmNvbmZpcm1hdGlvbidcbiAgICAgICAgICAgICAgICAgICAgKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgY3R4Lmluc3RhbmNlLmFjdGlvbiwgJ2NvbmZpcm0uYWNjZXB0JywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24ubGFiZWwsIGl0ZW0sICdnZW5lcmFsLnllcycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IuYWNjZXB0QnV0dG9uLmljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdEljb24gPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5pY29uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdEljb24gPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8uaWNvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgY3R4Lmluc3RhbmNlLmFjdGlvbiwgJ2NvbmZpcm0ucmVqZWN0JywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/LmxhYmVsLCBpdGVtLCAnZ2VuZXJhbC5ubycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uID09IG51bGwgfHwgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uLmxhYmVsID09PSBudWxsICYmIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uLmljb24gPT09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvbkVuZEFjY2VwdDtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bldpdGhvdXRDb25maXJtYXRpb24oY3R4KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvbkVuZFJlamVjdDtcbiAgICAgICAgICAgICAgICBpZiAoY3R4Lmluc3RhbmNlLmFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IGVkaXRvciwgdGhlIGl0IGNhbiBiZSBjbG9zZWRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5ydW5Db25maXJtYXRpb25Db25maWdNYXBGbikge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMgPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJ1bkNvbmZpcm1hdGlvbkNvbmZpZ01hcEZuKGN0eCwgY29uZmlybVBhcmFtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN0eC5jb25maXJtYXRpb24gPSBjb25maXJtUGFyYW1zO1xuICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuQ29uZmlybWF0aW9uU3RhcnQ7XG5cbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ydW5XaXRob3V0Q29uZmlybWF0aW9uKGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFjdGlvbiBjb250ZXh0IGJ5IHN1Ym1pdHRpbmcgZXhlY3V0aW9uIHJlc3VsdHMvZXJyb3JzIHRvIGNvbnRleHQsIHdhdGNoaW5nIG92ZXIgaW5zdGFuY2UgcmVzdWx0cy9lcnJvcnMsIGRpc3BsYXlpbmcgbm90aWZpY2F0aW9ucyxcbiAgICAgKiBydW5uaW5nIG5leHQvZXJyb3IgYWN0aW9uIGFuZCB0cmlnZ2VyaW5nIGRpc21pc3Mgb2YgYWN0aW9uLiBDb25maXJtYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdHggQWN0aW9uIGNvbnRleHQgdG8gcnVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGNvbnRleHQgZm9yIHN1Ym1pdCAoPXJ1bikgZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBydW5XaXRob3V0Q29uZmlybWF0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGN0eDogQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPik6IE9ic2VydmFibGU8SXRlbSB8IG51bGwgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgaXNNYWluUnVuRm4gPSBjdHguZnVuY3Rpb25OYW1lID09PSAnc3VibWl0JyB8fCBjdHguZnVuY3Rpb25OYW1lID09PSAncnVuJztcbiAgICAgICAgY29uc3QgaXNFcnJvckNyaXRpY2FsUnVuRm4gPSBjdHguZnVuY3Rpb25OYW1lID09PSAncnVuJztcbiAgICAgICAgbGV0IGFjdGlvbkVkaXRvcjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT47XG5cbiAgICAgICAgbGV0IGZuT2JzOiBBY3Rpb25SdW5GblR5cGU8SXRlbSwgU2VydmljZT47XG4gICAgICAgIHN3aXRjaCAoY3R4LmZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnc3VibWl0JzpcbiAgICAgICAgICAgICAgICBhY3Rpb25FZGl0b3IgPSBjdHguaW5zdGFuY2UuYWN0aW9uIGFzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uRWRpdG9yLnN1Ym1pdEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25FZGl0b3IgaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JBZGREZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1bkNyZWF0ZU9yRmFpbC5iaW5kKHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbkVkaXRvciBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1blVwZGF0ZU9yRmFpbC5iaW5kKHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGd1ZXNzIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0U3VibWl0ID0gb2YoY3R4LnBhcmFtZXRlcnM/Lml0ZW0gPyBjdHgucGFyYW1ldGVycy5pdGVtIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnBhcmFtZXRlcnMuaXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1blVwZGF0ZShjdHgsIGRlZmF1bHRTdWJtaXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1bkNyZWF0ZShjdHgsIGRlZmF1bHRTdWJtaXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGFjdGlvbkVkaXRvci5zdWJtaXRGdW5jdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbkVkaXRvci5mZXRjaEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25FZGl0b3IgaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5GZXRjaE9yRmFpbC5iaW5kKHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZldGNoID0gb2YoY3R4LnBhcmFtZXRlcnM/Lml0ZW0gPyBjdHgucGFyYW1ldGVycy5pdGVtIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnBhcmFtZXRlcnMuaXRlbUlkIHx8IHR5cGVvZiBjdHgucGFyYW1ldGVycy5pdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5GZXRjaChjdHgsIGRlZmF1bHRGZXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmV0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSBhY3Rpb25FZGl0b3IuZmV0Y2hGdW5jdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdydW4nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoIWN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuRnVuY3Rpb24gJiYgY3R4Lmluc3RhbmNlLmFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3JJbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5EZWxldGVPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmV0T2JzID0gb2Yodm9pZCAwKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIG1haW4gcnVuIGZ1bmN0aW9uLCBhbHNvIHNldCBsb2FkaW5nIHRvIHRydWVcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5pc1J1bkxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hTdGFydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgY29udGV4dCBleGVjdXRpb24gdG8gbWFyayBleGVjdXRpb24gbG9hZGluZ1xuICAgICAgICAgICAgICAgIGN0eC5leGVjdXRpb25TdGFydCgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvT2JzZXJ2YWJsZShmbk9icyhjdHgpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWVyZ2VNYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgbmV4dCBzdGF0ZSBkZXBlbmRpbmcgb24gcnVuXG4gICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gaXNNYWluUnVuRm4gPyBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FbmQgOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVuZDtcbiAgICAgICAgICAgICAgICAvLyBzZXQgZXhlY3V0aW9uIHJlc3VsdFxuICAgICAgICAgICAgICAgIGN0eC5leGVjdXRpb25OZXh0KHJ1blJlc3VsdCwgaXNNYWluUnVuRm4pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBmaW5hbCByZXN1bHQgb24gbWFpbiBydW4gZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5yZXN1bHQgPSBydW5SZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5pc1J1bkxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LnBhcmFtZXRlcnM/Lml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJ1blJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgcG9zc2libGUgYWZ0ZXIgcnVuIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4Lmluc3RhbmNlLmFjdGlvbi5hZnRlclJ1bkFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFyayBuZXcgc3RhdGUgZm9yIG5leHQgYWN0aW9uIHN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZnRlclJ1bkFjdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb24gPT09ICdmdW5jdGlvbicgPyBjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uKGN0eCkgOiBjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEFjdGlvbkluc3RhbmNlID0gdGhpcy5hY3RpdmF0ZUFjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlclJ1bkFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uUGFyYW1ldGVyczx1bmtub3duPihjdHgucGFyYW1ldGVycy5pdGVtSWQsIHJ1blJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGN0eC5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoUm91dGUoY3R4LnBhcmFtZXRlcnMucm91dGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZSBhcyBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZSA9IG5leHRBY3Rpb25JbnN0YW5jZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggY3VycmVudCBhY3Rpb24gd2hlbiBuZXh0IGFjdGlvbiBmaW5pc2hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgobmV4dEFjdGlvbkluc3RhbmNlLnN0YXRlKSwgLy8gcHJvdmlkZSBmaXJzdCBzdGF0ZSBjYXVzZSBpdCBtaWdodCBiZSBmaW5pc2hlZCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkVkaXRvci5oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZldGNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkVkaXRvci5mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FZGl0b3IuZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycy5pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJ1blJlc3VsdCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcChydW5SZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBkZWFjdGl2YXRlIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihjdHguaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtIGVycm9yIHRvIG1uZyBhY3Rpb24gZXJyb3JcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9NbmdBY3Rpb25FcnJvcihlcnIsIGN0eCk7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2Ugc3RhdGUgdG8gZXJyb3JcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBpc01haW5SdW5GbiA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGV4ZWN1dGlvbiBlcnJvciBvbiBjb250ZXh0XG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvbkVycm9yKGFjdGlvbkVycm9yKTtcblxuICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIGN0eC5pbnN0YW5jZS5hY3Rpb24sIGFjdGlvbkVycm9yLCAnZmV0Y2gnLCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLCBjdHgucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYnMgPSBvZih2b2lkIDApO1xuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5pc1J1bkxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBlcnJvciBhY3Rpb24gaWYgcnVuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9uUnVuRXJyb3JBY3Rpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24oY3R4KSA6IGN0eC5pbnN0YW5jZS5hY3Rpb24ub25SdW5FcnJvckFjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbm5vdCBzdGFydCB3aXRoIHRyaWdnZXIsIGJlY2F1c2Ugcm91dGluZyBtaWdodCBiZSBwcm9ibGVtYXRpYyAobG91c2luZyBwcmV2aW91cyByZXN1bHRzIGV0Yy4pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvckFjdGlvbkluc3RhbmNlID0gdGhpcy5hY3RpdmF0ZUFjdGlvbjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJ1bkVycm9yQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+KGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCwgY3R4LnBhcmFtZXRlcnMuaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGN0eC5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoUm91dGUoY3R4LnBhcmFtZXRlcnMucm91dGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UgPSBlcnJvckFjdGlvbkluc3RhbmNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5FcnJvckFjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck9icyA9IGVycm9yQWN0aW9uSW5zdGFuY2Uuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKGVycm9yQWN0aW9uSW5zdGFuY2Uuc3RhdGUpLCAvLyBwcm92aWRlIGZpcnN0IHN0YXRlIGNhdXNlIGl0IG1pZ2h0IGJlIGZpbmlzaGVkIGFscmVhZHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc3RhdGUgPT4gc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkVycm9yQWN0aW9uRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gbGlzdCBhbmQgbWFwIG9ubHkgdG8gbWFyayBpbnN0YW5jZSBzdGF0ZSBhcyBmaW5pc2hlZCBlcnJvciBzdGF0ZVxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck9icy5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVhY3RpdmF0ZSBhY3Rpb24gb25seSBpZiBjcml0aWNhbCAoZmV0Y2ggb24gZWRpdG9yIG9yIHJ1biBvbiBidXR0b24gYWN0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Vycm9yQ3JpdGljYWxSdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGN0eC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRocm93IGVycm9yIHRvIHByb3BhZ2F0ZSBmdXJ0aGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBhY3Rpb25FcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjdHgucnVuU3Vic2NyaXB0aW9uID0gcmV0T2JzLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBBY3Rpb25Db250ZXh0ICR7Y3R4LmNvbnRleHRMb25nTmFtZX0gZXhlY3V0aW9uIG5leHQgZXZlbnRgLCByZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoZXJyIGFzIElNbmdFcnJvciB8IHVuZGVmaW5lZCk/LnR5cGUgIT09ICdNbmdBY3Rpb25FcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYE5vbiBhY3Rpb24gZXJyb3Igb2NjdXJyZWRgLCBlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBBY3Rpb24gY29udGV4dCAke2N0eC5jb250ZXh0TG9uZ05hbWV9IGV4ZWN1dGlvbiBlcnJvciBldmVudGAsIGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmV0T2JzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIGVkaXRvciBhY3Rpb24ncyBmZXRjaCBmdW5jdGlvbiBieSBjcmVhdGluZyBuZXcgYWN0aW9uIGNvbnRleHQgZm9yIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBFZGl0b3IgZGF0YSBwcm92aWRlciBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBY3Rpb24gY29udGV4dCBmb3IgZmV0Y2ggZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIHByZXBhcmVDb250ZXh0Rm9yRWRpdG9yRmV0Y2g8SXRlbSwgU2VydmljZT4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT4sXG4gICAgICAgIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8SXRlbSwgU2VydmljZT4sXG4gICAgICAgIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4sXG4gICAgICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPlxuICAgICk6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShpbnN0YW5jZSwgYWN0aW9uLCBwYXJhbWV0ZXJzLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdmZXRjaCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uJ3Mgc3VibWl0ICg9bWFpbiBydW4pIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIEVkaXRvciBkYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQ29udGV4dEZvckVkaXRvclN1Ym1pdDxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlLCBhY3Rpb24sIHBhcmFtZXRlcnMsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlQ29udGV4dEZvckVkaXRvcihpbnN0YW5jZSwgcGFyYW1ldGVycywgJ3N1Ym1pdCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGV4ZWMgY29udGV4dCBmb3IgYWN0aW9uIG9mIHR5cGUgZWRpdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZnVuY3Rpb25OYW1lIEFjdGlvbiBmdW5jdGlvbiBuYW1lIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIE9wdGlvbmFsIGRhdGEgcHJvdmlkZXIuIElmIG5vdCBwcm92aWRlZCBkYXRhIHByb3ZpZGVyIGZyb20gZWl0aGVyIHRoZSBhY3Rpb24gZWRpdG9yIG9yIHZpZXcgY29udGFpbmVyIHdpbGwgYmUgdXNlZC5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJlcGFyZUNvbnRleHRGb3JFZGl0b3I8SXRlbSwgU2VydmljZT4oXG4gICAgICAgIGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZnVuY3Rpb25OYW1lOiAnc3VibWl0JyB8ICdmZXRjaCcsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXIsXG4gICAgICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKGBDYW5ub3QgY3JlYXRlIGVkaXRvciBjb250ZXh0IGZvciBhY3Rpb24gJHtpbnN0YW5jZS5hY3Rpb24uYWN0aW9uTmFtZUxvbmd9IG9mIHR5cGUgJHtpbnN0YW5jZS5hY3Rpb24udHlwZX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWRpdG9yQWN0aW9uID0gaW5zdGFuY2UuYWN0aW9uIGFzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+O1xuICAgICAgICBsZXQgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlciAmJiBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3R4RGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyID0gdGhpcy52aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGlmICh2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gdmlld0NvbnRhaW5lckRhdGFQcm92aWRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdHggPSBuZXcgQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLmdldERhdGFQcm92aWRlclNlcnZpY2UodGhpcy5pbmplY3RvciwgY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPz8gdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICAgIGN0eC5wcmV2aW91c0FjdGlvbkluc3RhbmNlID0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgaW5zdGFuY2UubmV3Q29udGV4dChjdHgpO1xuICAgICAgICByZXR1cm4gY3R4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgYWN0aW9uJ3MgbWFpbiBydW4gZnVuY3Rpb24gYnkgY3JlYXRpbmcgbmV3IGFjdGlvbiBjb250ZXh0IGZvciBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0IHJ1bi5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIgZm9yIGNvbnRleHQgcnVuLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBydW4gZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlQ29udGV4dDxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPGFueSwgYW55PlxuICAgICk6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPihpbnN0YW5jZSwgYWN0aW9uLCBwYXJhbWV0ZXJzLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kKTtcblxuICAgICAgICBjb25zdCBjdHhEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXIgPz8gaW5zdGFuY2UuYWN0aW9uLmRhdGFQcm92aWRlciA/PyB0aGlzLnZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICBjb25zdCBjdHggPSBuZXcgQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IuZ2V0RGF0YVByb3ZpZGVyU2VydmljZSh0aGlzLmluamVjdG9yLCBjdHhEYXRhUHJvdmlkZXIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGN0eERhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgICAgY3R4LnByZXZpb3VzQWN0aW9uSW5zdGFuY2UgPSBwcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5uZXdDb250ZXh0KGN0eCk7XG5cbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZXMgYWN0aW9uIChpbiBjYXNlIG9mIGRpYWxvZywgZGlhbG9nIHdpbGwgYmUgb3BlbmVkKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGFjdGl2YXRpb24gb2YgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gcnVuQ29udGV4dCBNYXJrcyBpZiBjb250ZXh0IHNob3VsZCBiZSBydW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBY3Rpb24gaW5zdGFuY2UgLSBpZiBub24gcHJvdmlkZWQgaW4gcGFyYW1ldGVycywgdGhlIG5ld2x5IGNyZWF0ZWQgd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZhdGVBY3Rpb248SXRlbSwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT4sXG4gICAgICAgIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sXG4gICAgICAgIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4sXG4gICAgICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxhbnksIGFueT4sXG4gICAgICAgIHJ1bkNvbnRleHQgPSBmYWxzZVxuICAgICk6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oaW5zdGFuY2UsIGFjdGlvbiwgcGFyYW1ldGVycywgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0KTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uU3RhcnQ7XG4gICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICAgICAgLy8gc3RhcnQgYWN0aXZhdGlvbiBpbnN0YW5jZVxuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgbGV0IGRpYWxvZ0NvbXBvbmVudCA9IHRoaXMuZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ0NsYXNzTmFtZXMgPSBbJ21uZy1kaWFsb2cnXTtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaChhY3Rpb24uZGlhbG9nQ2xhc3NOYW1lID8/ICdtbmctYWN0aW9uLWVkaXRvci1kaWFsb2cnKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi5kaWFsb2dTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5FeHRyYVNtYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLXhzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLlNtYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLXNtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLkxhcmdlOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLWxnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLkV4dHJhTGFyZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goJ21uZy1kaWFsb2cteGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uTm9ybWFsOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uZWRpdG9yQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudCA9IGFjdGlvbi5lZGl0b3JDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGlhbG9nQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IDxBY3Rpb25FZGl0b3JEaWFsb2dEYXRhPEl0ZW0sIFNlcnZpY2U+PntcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlOiBwcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzczogZGlhbG9nQ2xhc3NOYW1lcy5qb2luKCcgJylcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmNsb3NhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmNsb3NlT25Fc2NhcGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oZGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xuICAgICAgICAgICAgZGlhbG9nUmVmLm9uQ2xvc2UucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRvIGNsb3NlIGRpYWxvZyBvbiAnWCcgY2xpY2sgb3IgZXNjIGJ1dHRvblxuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlISk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWYgPSBkaWFsb2dSZWY7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHQ8SXRlbSwgU2VydmljZT4oYWN0aW9uLCBwYXJhbWV0ZXJzLCB1bmRlZmluZWQsIGluc3RhbmNlLCBwcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcblxuICAgICAgICAgICAgaWYgKHJ1bkNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bihjb250ZXh0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSBjYWxsZWQgd2hlbiBhY3Rpb24gZWRpdG9yIGlzIGluaXRpYWxpemVkIHRvIGNvcnJlY3RseSBhY3RpdmF0ZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlIChpZiBhdmFpbGFibGUpLlxuICAgICAqIEBwYXJhbSBjb21wb25lbnRSZWYgT3B0aW9uYWwgYWN0aW9uIGVkaXRvciBjb21wb25lbnQgcmVmZXJlbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGlvbkVkaXRvckluaXQ8VCwgUz4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxUPiwgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPiwgY29tcG9uZW50UmVmPzogSUFjdGlvbkVkaXRvckNvbXBvbmVudCk6IEFjdGlvbkluc3RhbmNlPFQsIFM+IHtcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aW9uICR7YWN0aW9uLmFjdGlvbk5hbWV9IGlzIG5vdCBvZiB0eXBlIGVkaXRvciwgY2Fubm90IGJlIGFjdGl2YXRlZCB0aHJvdWdoIFwib25BY3Rpb25FZGl0b3JPbkluaXRcImApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0YW5jZSAmJiBhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyZWRJbnN0YW5jZSA9IHRoaXMudmlld0NvbnRhaW5lcj8uZ2V0Um91dGVUcmlnZ2VyZWRBY3Rpb25JbnN0YW5jZSgpO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZhdGlvbkluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyPy5nZXRSb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlKCk7XG4gICAgICAgICAgICBpZiAodHJpZ2dlcmVkSW5zdGFuY2UgJiYgdHJpZ2dlcmVkSW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSAhPT0gaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgICAgICAgICBgV0FSTklORzogRm91bmQgdHJpZ2dlcmVkIHBhcmFtZXRlcnMgdmlldyBjb250YWluZXIgaW5zdGFuY2UgJHt0cmlnZ2VyZWRJbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSBhbmQgaXQgZG9lcyBub3QgbWF0Y2ggaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSByZXRyaWV2ZWQgb24gZWRpdG9yIGluaXQuYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aXZhdGlvbkluc3RhbmNlICYmIGFjdGl2YXRpb25JbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lICE9PSBpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICAgICAgICAgIGBXQVJOSU5HOiBGb3VuZCB0cmlnZ2VyZWQgcGFyYW1ldGVycyB2aWV3IGNvbnRhaW5lciBpbnN0YW5jZSAke2FjdGl2YXRpb25JbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSBhbmQgaXQgZG9lcyBub3QgbWF0Y2ggaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSByZXRyaWV2ZWQgb24gZWRpdG9yIGluaXQuYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGFjdGlvbiwgdW5kZWZpbmVkLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uU3RhcnQpO1xuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQ7XG4gICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25FZGl0b3JDb21wb25lbnRSZWYgPSBjb21wb25lbnRSZWY7XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIGJlIGNhbGxlZCB3aGVuIGFjdGlvbiBlZGl0b3IgY21wIGlzIGJlaW5nIGRlc3Ryb3llZCB0byBjb3JyZWN0bHkgZmluaXNoIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGlvbkRlc3Ryb3k8VCwgUz4oaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPik6IHZvaWQge1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25DbGljaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSBjYWxsZWQgd2hlbiBhY3Rpb24gZWRpdG9yIGNtcCBpcyBiZWluZyBkZXN0cm95ZWQgdG8gY29ycmVjdGx5IGZpbmlzaCBhY3Rpb24uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3Rpb25FZGl0b3JEZXN0cm95PFQsIFM+KGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aW9uIGluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gaXMgbm90IG9mIHR5cGUgZWRpdG9yLCBjYW5ub3QgYmUgZGVhY3RpdmF0ZWQgdGhyb3VnaCBcIm9uQWN0aW9uRWRpdG9yT25EZXN0cm95XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oaW5zdGFuY2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gYmUgY2FsbGVkIHdoZW4gYWN0aW9uIHJvdXRlIGNtcCBpcyBiZWluZyBkZXN0cm95ZWQgdG8gY29ycmVjdGx5IGZpbmlzaCBhY3Rpb24uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3Rpb25Sb3V0ZURlc3Ryb3k8VCwgUz4oaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPik6IHZvaWQge1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSBpcyBub3QgdHJpZ2dlcmVkIG9uIHJvdXRlLCBjYW5ub3QgYmUgZGVhY3RpdmF0ZWQgdGhyb3VnaCBcIm9uQWN0aW9uUm91dGVPbkRlc3Ryb3lcImApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWFjdGl2YXRlcyBhY3Rpb24gYnkgY2hvb3NpbmcgZmluYWwgc3RhdGUsIGNsb3NpbmcgZGlhbG9nIGFuZCBjb21wbGV0aW5nIGFsbCBzdWJqZWN0cyBpbiBpbnN0YW5jZSBhbmQgY29udGV4dHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBvbkRlc3Ryb3kgTWFya3MgaWYgZmluaXNoIGlzIGNhbGxlZCBvbiBjb21wb25lbnQgZGVzdHJveSBsaWZlY3ljbGUgaG9vay5cbiAgICAgKi9cbiAgICBwdWJsaWMgZmluaXNoQWN0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiwgb25EZXN0cm95ID0gZmFsc2UpIHtcbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgQWN0aW9uSW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSBhbHJlYWR5IGZpbmlzaGVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmluYWxTdGF0ZTogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW07XG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UucmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuZXJyb3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3JGaW5hbDtcbiAgICAgICAgfSBlbHNlIGlmIChvbkRlc3Ryb3kpIHtcbiAgICAgICAgICAgIGZpbmFsU3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hDb21wb25lbnREZXN0cm95RmluYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkRmluYWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgY29uc3QgaGFzRGlhbG9nID0gdHlwZW9mIGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWYgIT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgY29uc3QgcmVzdWJtaXRFbmFibGVkID0gKGluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPikucmVzdWJtaXRFbmFibGVkO1xuXG4gICAgICAgICAgICBpZiAoZmluYWxTdGF0ZSA9PT0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKChoYXNEaWFsb2cgJiYgcmVzdWJtaXRFbmFibGVkID09PSB0cnVlKSB8fCAoIWhhc0RpYWxvZyAmJiByZXN1Ym1pdEVuYWJsZWQgIT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc1JlYWN0aXZhdGVGaW5hbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNEaWFsb2cgJiYgZmluYWxTdGF0ZSAhPT0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc1JlYWN0aXZhdGVGaW5hbCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHN0YXRlIGlzIGZpbmlzaCBhbmQgbm90IGNhbGxlZCBmcm9tIGRpYWxvZyBsaXN0ZW5lciwgY2xvc2UgdGhlIGRpYWxvZyBmaXJzdCB3aGljaCB3aWxsIHJldHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCB0aGVuIGZpbmlzaCBpdFxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWYhLmNsb3NlKGluc3RhbmNlLnJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1bnNldCBpbnN0YW5jZSBpbiB2aWV3IGNvbnRhaW5lclxuICAgICAgICB0aGlzLnZpZXdDb250YWluZXI/LnVuc2V0Um91dGVUcmlnZ2VyZWRBY3Rpb25JbnN0YW5jZSgpO1xuXG4gICAgICAgIC8vIHNldCBmaW5hbCBzdGF0ZSBvbiBpbnN0YW5jZVxuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IGZpbmFsU3RhdGU7XG5cbiAgICAgICAgaWYgKGZpbmFsU3RhdGUgPT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwpIHtcbiAgICAgICAgICAgIC8vIHByZXBhcmUgcmVhY3RpdmF0aW9uIGluc3RhbmNlXG4gICAgICAgICAgICBjb25zdCBuZXdJbnN0YW5jZVN0YXR1cyA9IChpbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT4pLnJlc3VibWl0UmVmZXRjaFxuICAgICAgICAgICAgICAgID8gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZFxuICAgICAgICAgICAgICAgIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFbmQ7XG4gICAgICAgICAgICAvLyBtdXN0IHNraXAgaW5pdGlhbGl6YXRpb24gZnJvbSB2aWV3IGNvbnRhaW5lciwgYmVjYXVzZSBpdCB3b3VsZCBvbmx5IGdldCBvbGQgaW5zdGFuY2UuXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIG5ldyBpbnN0YW5jZSBiZWZvcmUgd2UgY2FuIHNldCBuZXcgb25lIG9uIHRoZSB2aWV3IGNvbnRhaW5lci5cbiAgICAgICAgICAgIGNvbnN0IG5ld0luc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KHVuZGVmaW5lZCwgaW5zdGFuY2UuYWN0aW9uLCB1bmRlZmluZWQsIG5ld0luc3RhbmNlU3RhdHVzLCB0cnVlKTtcbiAgICAgICAgICAgIG5ld0luc3RhbmNlLnByZXZpb3VzSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIC8vIGNvcHkgc29tZSBhZGRpdGlvbmFsIHNldHRpbmdzXG4gICAgICAgICAgICBuZXdJbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmID0gaW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZjtcbiAgICAgICAgICAgIG5ld0luc3RhbmNlLnRyaWdnZXJQYXJhbWV0ZXJzID0gaW5zdGFuY2UudHJpZ2dlclBhcmFtZXRlcnM7XG4gICAgICAgICAgICBuZXdJbnN0YW5jZS5hY3RpdmF0aW9uUGFyYW1ldGVycyA9IGluc3RhbmNlLmFjdGl2YXRpb25QYXJhbWV0ZXJzO1xuXG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXI/LnNldFJvdXRlVHJpZ2dlcmVkQWN0aW9uSW5zdGFuY2UobmV3SW5zdGFuY2UpO1xuICAgICAgICAgICAgaW5zdGFuY2UucmVhY3RpdmF0aW9uSW5zdGFuY2UgPSBuZXdJbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpbmlzaCByZWxhdGVkIGFjdGlvbnNcbiAgICAgICAgaWYgKGluc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEZpbmlzaGluZyBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IHJlbGF0ZWQgbmV4dCBhY3Rpb24gaW5zdGFuY2U6ICR7aW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9YCk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZS5uZXh0QWN0aW9uSW5zdGFuY2UsIG9uRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSByZWxhdGVkIGVycm9yIGFjdGlvbiBpbnN0YW5jZTogJHtpbnN0YW5jZS5lcnJvckFjdGlvbkluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9YCk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZS5lcnJvckFjdGlvbkluc3RhbmNlLCBvbkRlc3Ryb3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIHdpdGggcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGFjdGlvbiBleGVjdXRpb24gdG8gY29uc3RydWN0IG5ldyByb3V0ZS5cbiAgICAgKiBAcGFyYW0gcnVuQ29udGV4dCBNYXJrcyBpZiBjb250ZXh0IHNob3VsZCBiZSBydW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBY3Rpb24gaW5zdGFuY2UgLSBpZiBub24gcHJvdmlkZWQgaW4gcGFyYW1ldGVycywgdGhlIG5ld2x5IGNyZWF0ZWQgd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlckFjdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+LCBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LCBydW5Db250ZXh0ID0gZmFsc2UpOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KHVuZGVmaW5lZCwgYWN0aW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgaW5zdGFuY2UudHJpZ2dlclBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlRyaWdnZXJTdGFydDtcbiAgICAgICAgaWYgKGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybDogVXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgICAgICBsZXQgYWN0aW9uVXJsID0gYWN0aW9uLnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25VcmxTZWdtZW50cyA9IHRoaXMucGFyYW1ldHJpemUudHJhbnNmb3JtKGFjdGlvblVybCwgcGFyYW1ldGVycy5pdGVtSWQsIHBhcmFtZXRlcnMuaXRlbSwgcGFyYW1ldGVycy5hY3Rpb25EYXRhKS5zcGxpdCgnLycpO1xuXG4gICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2UgaW4gdmlldyBjb250YWluZXJcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lcj8uc2V0Um91dGVUcmlnZ2VyZWRBY3Rpb25JbnN0YW5jZShpbnN0YW5jZSk7XG5cbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Jhc2VVcmwsIC4uLmFjdGlvblVybFNlZ21lbnRzXSwge3JlbGF0aXZlVG86IHBhcmFtZXRlcnMucm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlckVuZCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlRyaWdnZXJFbmQ7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlQWN0aW9uKGFjdGlvbiwgcGFyYW1ldGVycywgaW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocnVuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnVuKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgb24gcm91dGUgdHJpZ2dlcmVkIGFjdGlvbiBieSB0cnlpbmcgdG8gcmVyb3V0ZSBiYWNrIHRvIGxvY2F0aW9uIHdoZXJlIGFjdGlvbiB3YXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGZpbmlzaEFjdGlvblJvdXRlVW50cmlnZ2VyPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPikge1xuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oaW5zdGFuY2UpO1xuXG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJTdGFydDtcblxuICAgICAgICBsZXQgdXJsID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDdXJyZW50TG9jYXRpb25Gcm9tSGlzdG9yeSgpID8/IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExvY2F0aW9uRnJvbVVybCgpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VXJsUXVlcnlQYXJhbSA9IHVybC5zcGxpdCgnPycpO1xuICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gc3BsaXRVcmxRdWVyeVBhcmFtWzBdLnNwbGl0KCcjJylbMF0uc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW0gPSBzcGxpdFVybFF1ZXJ5UGFyYW1bMV0/LnNwbGl0KCcjJylbMF07XG5cbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBpbnN0YW5jZS5hY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGxldCByZWRpcmVjdFVybCA9ICcvJyArIHVybFBhdGhTZWdtZW50cy5zbGljZSgwLCB1cmxQYXRoU2VnbWVudHMubGVuZ3RoIC0gYWN0aW9uVXJsU2VnbWVudHMubGVuZ3RoKS5qb2luKCcvJyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5UGFyYW0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVcmwgPSBgJHtyZWRpcmVjdFVybH0/JHtxdWVyeVBhcmFtfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vIFVSTCByZXBsYWNlcywgcHJvYmFibHkgb2ssIHRvIGFsbG93IGdvaW5nIGJhY2tcbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZWRpcmVjdFVybCkpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSwgdGltZW91dCgxMDAwKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJFbmRGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiAoaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hSb3V0ZVVudHJpZ2dlclRpbWVvdXRGaW5hbClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBlcnJvciBvZiBhbnkgdHlwZSB0byBtbmcgZXJyb3IgYnkgdXNpbmcgZXJyb3IgbWFwcGVyIHRoYXQgY291bGQgYmUgcHJvdmlkZWQgYnkgZmluYWwgcHJvamVjdC5cbiAgICAgKiBAcGFyYW0gZXJyb3IgZXJyb3Igb2YgYW55IHR5cGUuXG4gICAgICogQHBhcmFtIGNvbnRleHQgQWN0aW9uIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBtYXBwZWQgTW5nRXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIHRvTW5nQWN0aW9uRXJyb3IoZXJyb3I/OiBhbnksIGNvbnRleHQ/OiBBY3Rpb25Db250ZXh0PGFueSwgYW55Pik6IElNbmdFcnJvciB7XG4gICAgICAgIGxldCBtbmdFcnJvcjogSU1uZ0Vycm9yO1xuICAgICAgICBpZiAoY29udGV4dCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uczogTW5nQWN0aW9uRXJyb3JPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNhdXNlOiBlcnJvcixcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5yb3V0ZXIudXJsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmh0dHBFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtbmdFcnJvciA9IG5ldyBNbmdBY3Rpb25FcnJvcihlcnJvcj8ubWVzc2FnZSA/PyAnVW5rbm93biBlcnJvcicsIGNvbnRleHQuY29udGV4dExvbmdOYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAvLyBzaG91bGQgbm90IHJlYWxseSBoYXBwZW4gKHNob3VsZCBhbHdheXMgYmUgd3JhcHBlZCBpbiBNbmdBY3Rpb25FcnJvciksIGp1c3QgaW4gY2FzZVxuICAgICAgICAgICAgbW5nRXJyb3IgPSBuZXcgTW5nSHR0cEVycm9yKGBIdHRwIEVycm9yIG9jY3VycmVkIGluIGFjdGlvbmAsIGVycm9yLCB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBub3QgZnJvbSBhY3Rpb24sIHNvIHVua25vd24gc291cmNlIG9mIGVycm9yXG4gICAgICAgICAgICBtbmdFcnJvciA9IG5ldyBNbmdJbnRlcm5hbEVycm9yKGVycm9yPy5tZXNzYWdlID8/ICdVbmtub3duIGVycm9yJywge1xuICAgICAgICAgICAgICAgIG5hbWU6IGVycm9yPy5uYW1lID8/ICdVbmtub3duRXJyb3InLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLnJvdXRlci51cmwsXG4gICAgICAgICAgICAgICAgY2F1c2U6IGVycm9yXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGp1c3QgdHJhY2UgaXQsIGFsbG93IHVzZXIgdG8gc2V0IGlmIHRoaXMgaXMgZXJyb3Igb3Igbm90XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKG1uZ0Vycm9yKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvck1hcHBlci50b01uZ0Vycm9yKGVycm9yLCBtbmdFcnJvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBvciBnZXRzIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMuXG4gICAgICogQHBhcmFtIGluc3RhbmNlSW5pdGlhbFN0YXR1cyBBY3Rpb24gaW5zdGFuY2UgaW5pdGlhbCBzdGF0dXMuXG4gICAgICogQHBhcmFtIHNraXBJbml0aWFsaXphdGlvbkZyb21WaWV3Q29udGFpbmVyIElmIGluaXRpYWxpemF0aW9uIG9mIGluc3RhbmNlIGZyb20gdmlldyBjb250YWluZXIgc2hvdWxkIGJlIHNraXBwZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0T3JDcmVhdGVJbnN0YW5jZTxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihcbiAgICAgICAgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+IHwgdW5kZWZpbmVkLFxuICAgICAgICBhY3Rpb24/OiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcGFyYW1ldGVycz86IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sXG4gICAgICAgIGluc3RhbmNlSW5pdGlhbFN0YXR1cz86IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLFxuICAgICAgICBza2lwSW5pdGlhbGl6YXRpb25Gcm9tVmlld0NvbnRhaW5lciA9IGZhbHNlXG4gICAgKTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpZiAoIXNraXBJbml0aWFsaXphdGlvbkZyb21WaWV3Q29udGFpbmVyICYmICFpbnN0YW5jZSAmJiBhY3Rpb24/LmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSAmJiBwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXMudmlld0NvbnRhaW5lcj8uZ2V0Um91dGVUcmlnZ2VyZWRBY3Rpb25JbnN0YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoJ0FjdGlvbiBkZXNjcmlwdG9yIGlzIG5vdCBwcm92aWRlZCwgaW5zdGFuY2UgY2Fubm90IGJlIGNyZWF0ZWQuJywge25hbWU6ICdBY3Rpb25FeGVjdXRvclNlcnZpY2VFcnJvcid9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgaW5zdGFuY2UgaWYgbm9uIHByb3ZpZGVkXG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPihhY3Rpb24sIGluc3RhbmNlSW5pdGlhbFN0YXR1cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tbmdDb21tb25zLmFjdGlvbnNEZWJ1Z0luc3RhbmNlcyAmJiAhdGhpcy5pbnN0YW5jZXMuc29tZShpID0+IGkuaW5zdGFuY2VMb25nTmFtZSA9PT0gaW5zdGFuY2UhLmluc3RhbmNlTG9uZ05hbWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZXMubGVuZ3RoID49IHRoaXMuaW5zdGFuY2VzQnVmZmVyTWF4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgIGlmIChsYXN0SW5zdGFuY2UhLnN0YXRlIDwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBFUlJPUjogTm90IGFsbCBpbnN0YW5jZXMgYXJlIGZpbmlzaGVkISBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSB3aXRoIGRpc21pc3NhbC5gKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEluc3RhbmNlIS5mb3JjZUZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxufVxuIl19
|