@mediusinc/mng-commons 2.6.0 → 3.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -6
- package/dev-scripts/version-info.js +1 -0
- package/esm2022/lib/api/models/filter-param.model.mjs +33 -0
- package/esm2022/lib/api/models/query-param.model.mjs +68 -0
- package/esm2022/lib/api/models/query-result.model.mjs +24 -0
- package/esm2022/lib/api/utils/medius-rest.util.mjs +255 -0
- package/esm2022/lib/api/utils/object-serializer.util.mjs +258 -0
- package/esm2022/lib/components/action/action.component.mjs +304 -0
- package/esm2022/lib/components/action/editor/action-editor.component.mjs +386 -0
- package/esm2022/lib/components/action/localization/data-language-dropdown.component.mjs +54 -0
- package/{esm2020 → esm2022}/lib/components/action/models/action-execution.model.mjs +1 -1
- package/esm2022/lib/components/action/models/tableview-action-default-categories.model.mjs +11 -0
- package/{esm2020 → esm2022}/lib/components/action/route/action-route.component.mjs +4 -4
- package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +300 -0
- package/{esm2020 → esm2022}/lib/components/form/date-range/date-range.component.mjs +5 -5
- package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +212 -0
- package/esm2022/lib/components/form/editor/form-editor.component.mjs +288 -0
- package/{esm2020 → esm2022}/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.mjs +4 -4
- package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.mjs +39 -0
- package/{esm2020 → esm2022}/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +7 -7
- package/{esm2020 → esm2022}/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +4 -4
- package/esm2022/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +19 -0
- package/{esm2020 → esm2022}/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +4 -4
- package/esm2022/lib/components/form/models/form-editor.event.mjs +49 -0
- package/esm2022/lib/components/layout/breadcrumb.component.mjs +34 -0
- package/{esm2020 → esm2022}/lib/components/layout/footer.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/layout/main-layout.component.mjs +4 -4
- package/esm2022/lib/components/layout/menu-item.component.mjs +296 -0
- package/{esm2020 → esm2022}/lib/components/layout/menu.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/layout/services/main-layout.component.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/layout/topbar-user.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/layout/topbar.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/layout/version.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/pages/error/error-page.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/pages/not-found/not-found-page.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/tableview/models/table.event.mjs +1 -1
- package/{esm2020 → esm2022}/lib/components/tableview/route/tableview-route.abstract.component.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/tableview/route/tableview-route.component.mjs +4 -4
- package/esm2022/lib/components/tableview/table/column-filter/column-filter.component.mjs +124 -0
- package/esm2022/lib/components/tableview/table/column-value/column-value.component.mjs +110 -0
- package/esm2022/lib/components/tableview/table/table.component.mjs +747 -0
- package/esm2022/lib/components/tableview/tableview.component.mjs +147 -0
- package/esm2022/lib/descriptors/action/action.descriptor.mjs +634 -0
- package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +304 -0
- package/esm2022/lib/descriptors/editor/field.descriptor.mjs +1088 -0
- package/esm2022/lib/descriptors/table/table.descriptor.mjs +542 -0
- package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +352 -0
- package/{esm2020 → esm2022}/lib/descriptors/types/table.type.mjs +1 -5
- package/{esm2020 → esm2022}/lib/directives/component.directive.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/template.directive.mjs +5 -5
- package/esm2022/lib/mng-commons.module.mjs +465 -0
- package/{esm2020 → esm2022}/lib/pipes/boolean.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/class-map.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/enum.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/enumerate-async.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/enumerate.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/getter.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/i18n-property.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/json-path.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/locale-default-row-class.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/parametrize.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/template.pipe.mjs +4 -4
- package/esm2022/lib/router/route-builder.mjs +308 -0
- package/esm2022/lib/router/routes-builder.mjs +61 -0
- package/esm2022/lib/security/authorization.guard.mjs +15 -0
- package/{esm2020 → esm2022}/lib/security/authorization.service.mjs +4 -4
- package/esm2022/lib/services/action-executor.service.mjs +703 -0
- package/{esm2020 → esm2022}/lib/services/commons.service.mjs +4 -4
- package/esm2022/lib/services/configuration.service.mjs +150 -0
- package/{esm2020 → esm2022}/lib/services/internal/commons-init.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/services/mng-localstorage-config.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/services/navigation.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/services/router.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/services/version.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/services/view-container.component.service.mjs +4 -4
- package/esm2022/lib/styles/styles.util.mjs +42 -0
- package/esm2022/lib/types/type.model.mjs +2 -0
- package/esm2022/lib/utils/date.util.mjs +120 -0
- package/esm2022/lib/utils/tableview.util.mjs +193 -0
- package/esm2022/lib/utils/type.util.mjs +94 -0
- package/{fesm2020 → fesm2022}/mediusinc-mng-commons.mjs +952 -940
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -0
- package/lib/api/utils/medius-rest.util.d.ts +4 -3
- package/lib/components/action/action.component.d.ts +1 -1
- package/lib/components/action/editor/action-editor.component.d.ts +6 -9
- package/lib/components/action/localization/data-language-dropdown.component.d.ts +1 -1
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +4 -4
- package/lib/components/form/date-range/date-range.component.d.ts +1 -1
- package/lib/components/form/dropdown/dropdown.component.d.ts +3 -3
- package/lib/components/form/editor/form-editor.component.d.ts +1 -1
- package/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.d.ts +1 -1
- package/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.d.ts +1 -0
- package/lib/components/layout/breadcrumb.component.d.ts +5 -0
- package/lib/components/layout/menu-item.component.d.ts +1 -1
- package/lib/components/layout/version.component.d.ts +1 -1
- package/lib/components/tableview/models/table.event.d.ts +2 -2
- package/lib/components/tableview/route/tableview-route.component.d.ts +1 -1
- package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +2 -2
- package/lib/components/tableview/table/column-value/column-value.component.d.ts +1 -1
- package/lib/components/tableview/table/table.component.d.ts +6 -7
- package/lib/components/tableview/tableview.component.d.ts +7 -11
- package/lib/descriptors/editor/editor.descriptor.d.ts +1 -1
- package/lib/descriptors/editor/field.descriptor.d.ts +3 -1
- package/lib/descriptors/table/table.descriptor.d.ts +8 -3
- package/lib/descriptors/tableview/tableview.descriptor.d.ts +4 -4
- package/lib/descriptors/types/table.type.d.ts +1 -5
- package/lib/directives/component.directive.d.ts +1 -1
- package/lib/directives/template.directive.d.ts +1 -1
- package/lib/router/route-builder.d.ts +6 -10
- package/lib/router/routes-builder.d.ts +0 -5
- package/lib/security/authorization.guard.d.ts +2 -11
- package/lib/services/action-executor.service.d.ts +1 -15
- package/lib/utils/route.util.d.ts +8 -19
- package/lib/utils/tableview.util.d.ts +5 -0
- package/package.json +12 -19
- package/esm2020/lib/api/models/filter-param.model.mjs +0 -33
- package/esm2020/lib/api/models/query-param.model.mjs +0 -68
- package/esm2020/lib/api/models/query-result.model.mjs +0 -24
- package/esm2020/lib/api/utils/medius-rest.util.mjs +0 -246
- package/esm2020/lib/api/utils/object-serializer.util.mjs +0 -258
- package/esm2020/lib/components/action/action.component.mjs +0 -303
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +0 -390
- package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +0 -47
- package/esm2020/lib/components/action/models/tableview-action-default-categories.model.mjs +0 -11
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +0 -303
- package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +0 -214
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +0 -288
- package/esm2020/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.mjs +0 -54
- package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +0 -19
- package/esm2020/lib/components/form/models/form-editor.event.mjs +0 -49
- package/esm2020/lib/components/layout/breadcrumb.component.mjs +0 -19
- package/esm2020/lib/components/layout/menu-item.component.mjs +0 -294
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +0 -126
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +0 -108
- package/esm2020/lib/components/tableview/table/table.component.mjs +0 -749
- package/esm2020/lib/components/tableview/tableview.component.mjs +0 -146
- package/esm2020/lib/descriptors/action/action.descriptor.mjs +0 -634
- package/esm2020/lib/descriptors/editor/editor.descriptor.mjs +0 -304
- package/esm2020/lib/descriptors/editor/field.descriptor.mjs +0 -1083
- package/esm2020/lib/descriptors/table/table.descriptor.mjs +0 -521
- package/esm2020/lib/descriptors/tableview/tableview.descriptor.mjs +0 -347
- package/esm2020/lib/mng-commons.module.mjs +0 -469
- package/esm2020/lib/router/route-builder.mjs +0 -312
- package/esm2020/lib/router/routes-builder.mjs +0 -68
- package/esm2020/lib/security/authorization.guard.mjs +0 -30
- package/esm2020/lib/services/action-executor.service.mjs +0 -722
- package/esm2020/lib/services/configuration.service.mjs +0 -150
- package/esm2020/lib/styles/styles.util.mjs +0 -42
- package/esm2020/lib/types/type.model.mjs +0 -2
- package/esm2020/lib/utils/date.util.mjs +0 -120
- package/esm2020/lib/utils/tableview.util.mjs +0 -171
- package/esm2020/lib/utils/type.util.mjs +0 -94
- package/fesm2015/mediusinc-mng-commons.mjs +0 -15900
- package/fesm2015/mediusinc-mng-commons.mjs.map +0 -1
- package/fesm2020/mediusinc-mng-commons.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/models/builders/query-param.builder.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/models/filter-match-type.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/models/mappers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/models/query-mode.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/models/serialization.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/services/api.abstract.service.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/services/crud-api.abstract.service.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/services/get-all-api.abstract.service.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/action/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/action/models/action-component.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/action/models/action-confirmation-service.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/action/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/formly/fields/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/formly/formly.config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/formly/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/formly/models/formly-config.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/formly/models/formly-field.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/formly/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/formly/wrappers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/models/field-action-context.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/models/form-editor.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/layout/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/layout/services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/pages/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/tableview/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/tableview/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/tableview/table/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/tableview/table/models/table.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-providers/base.data-provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-providers/editor.data-provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-providers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-providers/lookup.data-provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-providers/table.data-provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-providers/tableview-crud.data-provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data-providers/tableview.data-provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/action/action-button.descriptor.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/action/action-confirmation.descriptor.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/action/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/editor/field-validation.descriptor.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/editor/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/filter/filter.descriptor.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/filter/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/interfaces/field-config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/interfaces/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/model.descriptor.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/table/column.descriptor.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/table/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/tableview/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/types/action.type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/types/column.type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/types/editor.type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/types/field.type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/types/filter.type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/descriptors/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/column-value.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/config.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/enum.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/error-internal.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/error.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/menu.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/tableview-attr.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/user.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/version.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/view-container.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/pipes/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/pipes/models/internal/enumrate-pipe-i18n.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/pipes/models/internal/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/provide-commons.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/router/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/router/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/router/models/router.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/router/tableview-route-builder.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/security/authorization.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/security/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/security/model/authorization.type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/security/model/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/security/model/permission-service.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/security/model/permissions.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/error-mapper.service.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/internal/commons-init.provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/internal/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/providers/config-service.provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/providers/formly-config.provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/providers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/tokens/browser-storage.token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/tokens/commons-init.token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/tokens/default-setting.token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/tokens/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/tokens/module-config.token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/styles/button-style.builder.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/styles/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/styles/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/styles/models/style-level.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/styles/models/style-size.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/i18n.type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/mng-localstorage-config-value.type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/type.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/action-data-provider.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/editor-formly.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/enum.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/export.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/file.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/i18n.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/model.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/notification.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/object.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/route.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/string.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/validators/field.validator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/validators/index.mjs +0 -0
- /package/{esm2020 → esm2022}/mediusinc-mng-commons.mjs +0 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { ObjectSerializer } from '../../api/utils';
|
|
3
|
+
import { MngFormEvent } from '../../components/form/models';
|
|
4
|
+
import { MngErrorInternal } from '../../models';
|
|
5
|
+
import { I18nUtils } from '../../utils';
|
|
6
|
+
import { TableviewUtil } from '../../utils/tableview.util';
|
|
7
|
+
import { ModelDescriptor } from '../model.descriptor';
|
|
8
|
+
import { FieldInputTypeEnum, TableviewEditorTypeEnum } from '../types';
|
|
9
|
+
import { AFieldDescriptor, FieldActionDescriptor, FieldGroupDescriptor, FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor, FieldTabGroupDescriptor } from './field.descriptor';
|
|
10
|
+
export class EditorDescriptor {
|
|
11
|
+
static { this.defaultGroupName = '_default'; }
|
|
12
|
+
constructor(modelType, idProperty, titleProperty, tableviewEditorType = TableviewEditorTypeEnum.None, i18nBaseKey) {
|
|
13
|
+
this._tabs = [];
|
|
14
|
+
this._groups = [];
|
|
15
|
+
this._fields = [];
|
|
16
|
+
this._disabled = false;
|
|
17
|
+
this._isLocalized = false;
|
|
18
|
+
this._eventsSubject = new Subject();
|
|
19
|
+
this._modelType = modelType;
|
|
20
|
+
this._model = new ModelDescriptor(modelType, idProperty, titleProperty, i18nBaseKey);
|
|
21
|
+
this._tableviewEditorType = tableviewEditorType;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* auto generated editor descriptor based on openapi definition
|
|
25
|
+
* generates all fields from definition
|
|
26
|
+
* @param modelType class type
|
|
27
|
+
* @param idProperty
|
|
28
|
+
* @param titleProperty
|
|
29
|
+
* @param tableEditorType
|
|
30
|
+
*/
|
|
31
|
+
static from(modelType, idProperty, titleProperty, tableEditorType = TableviewEditorTypeEnum.None) {
|
|
32
|
+
return EditorDescriptor.fromModelWithAttributes(modelType, TableviewUtil.getAttributeDefMap(modelType), titleProperty, idProperty, tableEditorType);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* auto generated editor descriptor based on openapi definition
|
|
36
|
+
* generates only selected fields
|
|
37
|
+
* @param modelType class type
|
|
38
|
+
* @param attributes list of selected properties to generate fields based on
|
|
39
|
+
* @param idProperty
|
|
40
|
+
* @param titleProperty
|
|
41
|
+
* @param tableEditorType
|
|
42
|
+
*/
|
|
43
|
+
static fromModelWithAttributes(modelType, attributes, idProperty, titleProperty, tableEditorType = TableviewEditorTypeEnum.None) {
|
|
44
|
+
const descriptor = new EditorDescriptor(modelType, idProperty, titleProperty, tableEditorType);
|
|
45
|
+
attributes
|
|
46
|
+
.filter(attr => !attr.type.includes('Set') && !attr.type.includes('Array'))
|
|
47
|
+
.forEach(attr => descriptor.upsertFieldFromAttributeDef(attr, descriptor.fields.find(col => col.property === attr.name)));
|
|
48
|
+
return descriptor;
|
|
49
|
+
}
|
|
50
|
+
get model() {
|
|
51
|
+
return this._model;
|
|
52
|
+
}
|
|
53
|
+
get tabs() {
|
|
54
|
+
return this._tabs;
|
|
55
|
+
}
|
|
56
|
+
get fields() {
|
|
57
|
+
return this._fields;
|
|
58
|
+
}
|
|
59
|
+
get tableviewEditorType() {
|
|
60
|
+
return this._tableviewEditorType;
|
|
61
|
+
}
|
|
62
|
+
get disabled() {
|
|
63
|
+
return this._disabled;
|
|
64
|
+
}
|
|
65
|
+
get isLocalized() {
|
|
66
|
+
return this._isLocalized;
|
|
67
|
+
}
|
|
68
|
+
get localizationLocaleProperty() {
|
|
69
|
+
return this._localizationLocaleProperty;
|
|
70
|
+
}
|
|
71
|
+
get localizationLocalizationProperty() {
|
|
72
|
+
return this._localizationLocalizationProperty;
|
|
73
|
+
}
|
|
74
|
+
get localizationBeanType() {
|
|
75
|
+
return this._localizationModelType;
|
|
76
|
+
}
|
|
77
|
+
get localeLookup() {
|
|
78
|
+
return this._localeLookup;
|
|
79
|
+
}
|
|
80
|
+
createTabGroup(name, title) {
|
|
81
|
+
const tabGroup = new FieldTabGroupDescriptor(this, name);
|
|
82
|
+
if (!title) {
|
|
83
|
+
title = I18nUtils.Type.getTabKey(this.model.i18nBaseKey, name);
|
|
84
|
+
}
|
|
85
|
+
tabGroup.withTitle(title);
|
|
86
|
+
this.createTabGroupDescriptor(tabGroup);
|
|
87
|
+
return tabGroup;
|
|
88
|
+
}
|
|
89
|
+
createFieldGroup(name, title) {
|
|
90
|
+
const fieldGroup = new FieldGroupDescriptor(this, name);
|
|
91
|
+
if (title !== null) {
|
|
92
|
+
if (!title) {
|
|
93
|
+
title = I18nUtils.Type.getGroupKey(this.model.i18nBaseKey, name);
|
|
94
|
+
}
|
|
95
|
+
fieldGroup.withTitle(title);
|
|
96
|
+
}
|
|
97
|
+
this.createFieldGroupDescriptor(fieldGroup);
|
|
98
|
+
return fieldGroup;
|
|
99
|
+
}
|
|
100
|
+
addFieldDescriptor(field) {
|
|
101
|
+
this.createDefaultGroup();
|
|
102
|
+
this._fields.push(field);
|
|
103
|
+
this._currentGroup?.addField(field);
|
|
104
|
+
return this;
|
|
105
|
+
}
|
|
106
|
+
addField(property) {
|
|
107
|
+
const field = new FieldInputDescriptor(this, property);
|
|
108
|
+
this.addFieldDescriptor(field);
|
|
109
|
+
return field;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* removes filed if exists in descriptor
|
|
113
|
+
* @param property field name
|
|
114
|
+
*/
|
|
115
|
+
removeField(property) {
|
|
116
|
+
const fieldIdx = this._fields.findIndex(f => f.property === property);
|
|
117
|
+
if (fieldIdx < 0) {
|
|
118
|
+
throw new MngErrorInternal(`Field ${property} does not exist.`, 'EditorDescriptor error').consoleError();
|
|
119
|
+
}
|
|
120
|
+
for (const group of this._groups) {
|
|
121
|
+
const groupFieldIdx = group.fields.findIndex(f => f instanceof AFieldDescriptor && f.property === property);
|
|
122
|
+
if (groupFieldIdx >= 0) {
|
|
123
|
+
group.fields.splice(groupFieldIdx, 1);
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
this._fields.splice(fieldIdx, 1);
|
|
128
|
+
}
|
|
129
|
+
getField(property) {
|
|
130
|
+
return this._fields.find(f => f.property === property) ?? null;
|
|
131
|
+
}
|
|
132
|
+
addFieldAction(actionName) {
|
|
133
|
+
const field = new FieldActionDescriptor(this, actionName);
|
|
134
|
+
this.addFieldDescriptor(field);
|
|
135
|
+
return field;
|
|
136
|
+
}
|
|
137
|
+
addFieldLookup(property, modelType) {
|
|
138
|
+
const field = new FieldLookupDescriptor(this, property, modelType);
|
|
139
|
+
this.addFieldDescriptor(field);
|
|
140
|
+
return field;
|
|
141
|
+
}
|
|
142
|
+
addFieldLookupEnum(property, enumType, options, nameAsValue = false, optionsTitlePath) {
|
|
143
|
+
const field = new FieldLookupEnumDescriptor(this, property, enumType, options, nameAsValue, optionsTitlePath);
|
|
144
|
+
this.addFieldDescriptor(field);
|
|
145
|
+
return field;
|
|
146
|
+
}
|
|
147
|
+
addFieldManyEditor(property, tableviewDescriptor) {
|
|
148
|
+
const field = new FieldManyEditorDescriptor(this, property, tableviewDescriptor);
|
|
149
|
+
this.addFieldDescriptor(field);
|
|
150
|
+
return field;
|
|
151
|
+
}
|
|
152
|
+
addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor) {
|
|
153
|
+
const field = new FieldManyToManyEditorDescriptor(this, property, mainTableDescriptor, lookupTableDescriptor);
|
|
154
|
+
this.addFieldDescriptor(field);
|
|
155
|
+
return field;
|
|
156
|
+
}
|
|
157
|
+
withDisabled(disabled = true) {
|
|
158
|
+
this._disabled = disabled;
|
|
159
|
+
return this;
|
|
160
|
+
}
|
|
161
|
+
addValidation(name, validator, message) {
|
|
162
|
+
if (this._currentGroup) {
|
|
163
|
+
this._currentGroup.withValidation(name, validator, message);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
copy() {
|
|
167
|
+
const editor = new EditorDescriptor(this.model.type, this.model.idPropertyName, this.model.titlePropertyName, this.tableviewEditorType);
|
|
168
|
+
for (const tabGroup of this._tabs) {
|
|
169
|
+
editor.createTabGroupDescriptor(tabGroup.copy());
|
|
170
|
+
}
|
|
171
|
+
for (const tabGroup of editor._tabs) {
|
|
172
|
+
for (const fieldGroup of tabGroup.fields) {
|
|
173
|
+
editor._fields.push(...fieldGroup.fields);
|
|
174
|
+
}
|
|
175
|
+
editor._groups.push(...tabGroup.fields);
|
|
176
|
+
}
|
|
177
|
+
editor._currentTabGroup = editor._tabs[editor._tabs.length - 1];
|
|
178
|
+
editor._currentGroup = editor._currentTabGroup.fields[editor._currentTabGroup.fields.length - 1];
|
|
179
|
+
editor._disabled = this._disabled;
|
|
180
|
+
return editor;
|
|
181
|
+
}
|
|
182
|
+
createFieldGroupDescriptor(fieldGroup) {
|
|
183
|
+
this.createDefaultTabGroup();
|
|
184
|
+
this._currentGroup = fieldGroup;
|
|
185
|
+
this._groups.push(fieldGroup);
|
|
186
|
+
this._currentTabGroup?.addField(fieldGroup);
|
|
187
|
+
return this;
|
|
188
|
+
}
|
|
189
|
+
createTabGroupDescriptor(tabGroup) {
|
|
190
|
+
this._currentTabGroup = tabGroup;
|
|
191
|
+
this._tabs.push(tabGroup);
|
|
192
|
+
return this;
|
|
193
|
+
}
|
|
194
|
+
createDefaultGroup() {
|
|
195
|
+
this.createDefaultTabGroup();
|
|
196
|
+
if (this._currentTabGroup?.fields.length === 0) {
|
|
197
|
+
this.createFieldGroup(EditorDescriptor.defaultGroupName, null);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
createDefaultTabGroup() {
|
|
201
|
+
if (this._tabs.length === 0) {
|
|
202
|
+
this.createTabGroup(EditorDescriptor.defaultGroupName, 'general.general');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* modifies selected field
|
|
207
|
+
* do not use it for enums! (use withFieldModifiedEnum instead)
|
|
208
|
+
* @param property field name
|
|
209
|
+
* @param fieldType new field type for selected field
|
|
210
|
+
* @param args additional parameters for field
|
|
211
|
+
*/
|
|
212
|
+
withFieldModifiedType(property, fieldType, ...args) {
|
|
213
|
+
const attribute = TableviewUtil.getAttributeDefMap(this._modelType).find(attribute => attribute.name === property);
|
|
214
|
+
if (attribute) {
|
|
215
|
+
attribute.fieldType = fieldType;
|
|
216
|
+
this.upsertFieldFromAttributeDef(attribute, this.fields.find(fi => fi.property === property), ...args);
|
|
217
|
+
}
|
|
218
|
+
return this;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* modifies selected field with enum type
|
|
222
|
+
* @param property field property name
|
|
223
|
+
* @param enumType type of enum for new field
|
|
224
|
+
* @param optionsTitlePath
|
|
225
|
+
* @param values
|
|
226
|
+
* @param nameAsValue
|
|
227
|
+
*/
|
|
228
|
+
withFieldModifiedEnum(property, enumType, optionsTitlePath, values, nameAsValue = false) {
|
|
229
|
+
const attribute = TableviewUtil.getAttributeDefMap(this._modelType).find(a => a.name === property);
|
|
230
|
+
if (attribute) {
|
|
231
|
+
attribute.fieldType = FieldInputTypeEnum.Radio;
|
|
232
|
+
const field = this.fields.find(f => f.property === property);
|
|
233
|
+
if (field && field instanceof FieldInputDescriptor) {
|
|
234
|
+
field.asRadioFromEnum(enumType ?? ObjectSerializer.get().findEnum(attribute.type), optionsTitlePath, values, nameAsValue);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return this;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* adds lookup to given field
|
|
241
|
+
* @param property field property name
|
|
242
|
+
* @param modelType model type of field
|
|
243
|
+
* @param lookupProvider provider to be added to field
|
|
244
|
+
* @param titleProperty
|
|
245
|
+
*/
|
|
246
|
+
withFieldModifiedLookup(property, modelType, lookupProvider, titleProperty) {
|
|
247
|
+
this.removeField(property);
|
|
248
|
+
const field = this.addFieldLookup(property, modelType).asAutocomplete().withLookupDataProvider(lookupProvider);
|
|
249
|
+
if (titleProperty) {
|
|
250
|
+
field.withItemsLabelProperty(titleProperty);
|
|
251
|
+
}
|
|
252
|
+
return this;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* generates field based on attribute definition, used for auto model
|
|
256
|
+
* @param attribute definition
|
|
257
|
+
* @param field optional, if defined will be replaced, otherwise new will be generated
|
|
258
|
+
* @param args additional arguments
|
|
259
|
+
*/
|
|
260
|
+
upsertFieldFromAttributeDef(attribute, field, ...args) {
|
|
261
|
+
if (field == null) {
|
|
262
|
+
field = this.addField(attribute.name);
|
|
263
|
+
}
|
|
264
|
+
if (field instanceof FieldInputDescriptor) {
|
|
265
|
+
if (attribute.enumType) {
|
|
266
|
+
return field.asRadioFromEnum(attribute.enumType);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
return field.asType(attribute.fieldType ?? TableviewUtil.toFieldInputTypeFromColumnType(attribute.columnType, attribute.columnDisplayType), ...args);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return field;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* This method takes care of displaying correct/localized data in the editor
|
|
276
|
+
* @param localizationsProperty property that tells us where on the model are localizations accessible
|
|
277
|
+
* @param localeProperty property by which we find the locale
|
|
278
|
+
* @param localizationModelType model type for localizations if it is different from the whole model
|
|
279
|
+
* @param localeLookup lookup provider for locales supported by the application.
|
|
280
|
+
*/
|
|
281
|
+
localized(localizationsProperty = 'localizations', localeProperty = 'locale', localizationModelType, localeLookup) {
|
|
282
|
+
this._localizationLocalizationProperty = localizationsProperty;
|
|
283
|
+
this._localizationLocaleProperty = localeProperty;
|
|
284
|
+
this._isLocalized = true;
|
|
285
|
+
this._localeLookup = localeLookup;
|
|
286
|
+
if (localizationModelType) {
|
|
287
|
+
this._localizationModelType = localizationModelType;
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
this._localizationModelType = this._modelType;
|
|
291
|
+
}
|
|
292
|
+
return this;
|
|
293
|
+
}
|
|
294
|
+
nextEvent(type, cmpType, cmpInstance, data) {
|
|
295
|
+
this._eventsSubject.next(new MngFormEvent(type, cmpType, cmpInstance, data));
|
|
296
|
+
}
|
|
297
|
+
completeEvents() {
|
|
298
|
+
this._eventsSubject.complete();
|
|
299
|
+
}
|
|
300
|
+
get events$() {
|
|
301
|
+
return this._eventsSubject.asObservable();
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2VkaXRvci9lZGl0b3IuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR3pDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBb0IsWUFBWSxFQUF1QixNQUFNLDhCQUE4QixDQUFDO0FBRW5HLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUc5QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHcEQsT0FBTyxFQUFDLGtCQUFrQixFQUFFLHVCQUF1QixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLHVCQUF1QixFQUMxQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE1BQU0sT0FBTyxnQkFBZ0I7YUFDRixxQkFBZ0IsR0FBRyxVQUFVLEFBQWIsQ0FBYztJQXFCckQsWUFDSSxTQUF1QixFQUN2QixVQUFtQixFQUNuQixhQUFzQixFQUN0QixtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLEVBQ2xELFdBQXlDO1FBckIxQixVQUFLLEdBQXNDLEVBQUUsQ0FBQztRQUM5QyxZQUFPLEdBQW1DLEVBQUUsQ0FBQztRQUN0RCxZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUk5QyxjQUFT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LEVBQ3pCLHFCQUFzQyxFQUN0QyxZQUF5RztRQUV6RyxJQUFJLENBQUMsaUNBQWlDLEdBQUcscUJBQXFCLENBQUM7UUFDL0QsSUFBSSxDQUFDLDJCQUEyQixHQUFHLGNBQWMsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUVsQyxJQUFJLHFCQUFxQixFQUFFO1lBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FBQztTQUN2RDthQUFNO1lBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDakQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sU0FBUyxDQUFDLElBQTBCLEVBQUUsT0FBa0IsRUFBRSxXQUFnQixFQUFFLElBQTJCO1FBQzFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVNLGNBQWM7UUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge01lZGl1c1F1ZXJ5UGFyYW19IGZyb20gJy4uLy4uL2FwaS9tb2RlbHMnO1xuaW1wb3J0IHtPYmplY3RTZXJpYWxpemVyfSBmcm9tICcuLi8uLi9hcGkvdXRpbHMnO1xuaW1wb3J0IHtNbmdGaWVsZEV2ZW50RGF0YSwgTW5nRm9ybUV2ZW50LCBNbmdGb3JtRXZlbnRUeXBlRW51bX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9mb3JtL21vZGVscyc7XG5pbXBvcnQge0lMb29rdXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7TW5nRXJyb3JJbnRlcm5hbH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7VGFibGV2aWV3QXR0cmlidXRlRGVmfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtDbGFzc1R5cGUsIEVudW1Db25zdGFudFR5cGUsIEVudW1UeXBlLCBNbmdGaWVsZFZhbGlkYXRpb25NZXNzYWdlLCBNbmdGaWVsZFZhbGlkYXRvcn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtJMThuVXRpbHN9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7VGFibGV2aWV3VXRpbH0gZnJvbSAnLi4vLi4vdXRpbHMvdGFibGV2aWV3LnV0aWwnO1xuaW1wb3J0IHtNb2RlbERlc2NyaXB0b3J9IGZyb20gJy4uL21vZGVsLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtUYWJsZURlc2NyaXB0b3J9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvcn0gZnJvbSAnLi4vdGFibGV2aWV3JztcbmltcG9ydCB7RmllbGRJbnB1dFR5cGVFbnVtLCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgICBBRmllbGREZXNjcmlwdG9yLFxuICAgIEZpZWxkQWN0aW9uRGVzY3JpcHRvcixcbiAgICBGaWVsZEdyb3VwRGVzY3JpcHRvcixcbiAgICBGaWVsZElucHV0RGVzY3JpcHRvcixcbiAgICBGaWVsZExvb2t1cERlc2NyaXB0b3IsXG4gICAgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcixcbiAgICBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRUYWJHcm91cERlc2NyaXB0b3Jcbn0gZnJvbSAnLi9maWVsZC5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGNsYXNzIEVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdEdyb3VwTmFtZSA9ICdfZGVmYXVsdCc7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RhYmxldmlld0VkaXRvclR5cGU6IFRhYmxldmlld0VkaXRvclR5cGVFbnVtO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfdGFiczogQXJyYXk8RmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD4+ID0gW107XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9ncm91cHM6IEFycmF5PEZpZWxkR3JvdXBEZXNjcmlwdG9yPFQ+PiA9IFtdO1xuICAgIHByb3RlY3RlZCBfZmllbGRzOiBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgVD4+ID0gW107XG4gICAgcHJvdGVjdGVkIF9jdXJyZW50VGFiR3JvdXA/OiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxUPjtcbiAgICBwcm90ZWN0ZWQgX2N1cnJlbnRHcm91cD86IEZpZWxkR3JvdXBEZXNjcmlwdG9yPFQ+O1xuXG4gICAgcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2xvY2FsaXphdGlvbk1vZGVsVHlwZT86IENsYXNzVHlwZTxhbnk+O1xuICAgIHByb3RlY3RlZCBfbG9jYWxlTG9va3VwPzogKHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtLCBzZXJ2aWNlPzogYW55LCBzZWFyY2g/OiBzdHJpbmcpID0+IE9ic2VydmFibGU8QXJyYXk8c3RyaW5nPj47XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2V2ZW50c1N1YmplY3QgPSBuZXcgU3ViamVjdDxNbmdGb3JtRXZlbnQ8VD4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4sXG4gICAgICAgIGlkUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIHRhYmxldmlld0VkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lLFxuICAgICAgICBpMThuQmFzZUtleT86IHN0cmluZyB8IENsYXNzVHlwZTx1bmtub3duPlxuICAgICkge1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbmV3IE1vZGVsRGVzY3JpcHRvcjxUPihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIGkxOG5CYXNlS2V5KTtcbiAgICAgICAgdGhpcy5fdGFibGV2aWV3RWRpdG9yVHlwZSA9IHRhYmxldmlld0VkaXRvclR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYXV0byBnZW5lcmF0ZWQgZWRpdG9yIGRlc2NyaXB0b3IgYmFzZWQgb24gb3BlbmFwaSBkZWZpbml0aW9uXG4gICAgICogZ2VuZXJhdGVzIGFsbCBmaWVsZHMgZnJvbSBkZWZpbml0aW9uXG4gICAgICogQHBhcmFtIG1vZGVsVHlwZSBjbGFzcyB0eXBlXG4gICAgICogQHBhcmFtIGlkUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0YWJsZUVkaXRvclR5cGVcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb208VD4obW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4sIGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsIHRhYmxlRWRpdG9yVHlwZSA9IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLk5vbmUpOiBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgcmV0dXJuIEVkaXRvckRlc2NyaXB0b3IuZnJvbU1vZGVsV2l0aEF0dHJpYnV0ZXMobW9kZWxUeXBlLCBUYWJsZXZpZXdVdGlsLmdldEF0dHJpYnV0ZURlZk1hcChtb2RlbFR5cGUpLCB0aXRsZVByb3BlcnR5LCBpZFByb3BlcnR5LCB0YWJsZUVkaXRvclR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGF1dG8gZ2VuZXJhdGVkIGVkaXRvciBkZXNjcmlwdG9yIGJhc2VkIG9uIG9wZW5hcGkgZGVmaW5pdGlvblxuICAgICAqIGdlbmVyYXRlcyBvbmx5IHNlbGVjdGVkIGZpZWxkc1xuICAgICAqIEBwYXJhbSBtb2RlbFR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIGxpc3Qgb2Ygc2VsZWN0ZWQgcHJvcGVydGllcyB0byBnZW5lcmF0ZSBmaWVsZHMgYmFzZWQgb25cbiAgICAgKiBAcGFyYW0gaWRQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5XG4gICAgICogQHBhcmFtIHRhYmxlRWRpdG9yVHlwZVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU1vZGVsV2l0aEF0dHJpYnV0ZXM8VD4oXG4gICAgICAgIG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LFxuICAgICAgICBhdHRyaWJ1dGVzOiBUYWJsZXZpZXdBdHRyaWJ1dGVEZWZbXSxcbiAgICAgICAgaWRQcm9wZXJ0eT86IHN0cmluZyxcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyxcbiAgICAgICAgdGFibGVFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZVxuICAgICk6IEVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IEVkaXRvckRlc2NyaXB0b3IobW9kZWxUeXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCB0YWJsZUVkaXRvclR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoYXR0ciA9PiAhYXR0ci50eXBlLmluY2x1ZGVzKCdTZXQnKSAmJiAhYXR0ci50eXBlLmluY2x1ZGVzKCdBcnJheScpKVxuICAgICAgICAgICAgLmZvckVhY2goYXR0ciA9PlxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudXBzZXJ0RmllbGRGcm9tQXR0cmlidXRlRGVmKFxuICAgICAgICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmZpZWxkcy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IGF0dHIubmFtZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFicztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxldmlld0VkaXRvclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdFZGl0b3JUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkJlYW5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxlTG9va3VwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlTG9va3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVUYWJHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCB0YWJHcm91cCA9IG5ldyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxUPih0aGlzLCBuYW1lKTtcbiAgICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICAgICAgdGl0bGUgPSBJMThuVXRpbHMuVHlwZS5nZXRUYWJLZXkodGhpcy5tb2RlbC5pMThuQmFzZUtleSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFiR3JvdXAud2l0aFRpdGxlKHRpdGxlKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXApO1xuICAgICAgICByZXR1cm4gdGFiR3JvdXA7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpZWxkR3JvdXAobmFtZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyB8IG51bGwpOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXAgPSBuZXcgRmllbGRHcm91cERlc2NyaXB0b3I8VD4odGhpcywgbmFtZSk7XG4gICAgICAgIGlmICh0aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICAgICAgICAgIHRpdGxlID0gSTE4blV0aWxzLlR5cGUuZ2V0R3JvdXBLZXkodGhpcy5tb2RlbC5pMThuQmFzZUtleSwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZEdyb3VwLndpdGhUaXRsZSh0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwRGVzY3JpcHRvcihmaWVsZEdyb3VwKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkR3JvdXA7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkRGVzY3JpcHRvcjxGVCwgRlZUID0gRlQ+KGZpZWxkOiBBRmllbGREZXNjcmlwdG9yPEZULCBULCBGVlQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdEdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwPy5hZGRGaWVsZChmaWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZChwcm9wZXJ0eTogc3RyaW5nKTogRmllbGRJbnB1dERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZElucHV0RGVzY3JpcHRvcjxUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlbW92ZXMgZmlsZWQgaWYgZXhpc3RzIGluIGRlc2NyaXB0b3JcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgZmllbGQgbmFtZVxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVGaWVsZChwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpZWxkSWR4ID0gdGhpcy5fZmllbGRzLmZpbmRJbmRleChmID0+IGYucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0Vycm9ySW50ZXJuYWwoYEZpZWxkICR7cHJvcGVydHl9IGRvZXMgbm90IGV4aXN0LmAsICdFZGl0b3JEZXNjcmlwdG9yIGVycm9yJykuY29uc29sZUVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLl9ncm91cHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGRJZHggPSBncm91cC5maWVsZHMuZmluZEluZGV4KGYgPT4gZiBpbnN0YW5jZW9mIEFGaWVsZERlc2NyaXB0b3IgJiYgZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGdyb3VwRmllbGRJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmZpZWxkcy5zcGxpY2UoZ3JvdXBGaWVsZElkeCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZShmaWVsZElkeCwgMSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpZWxkKHByb3BlcnR5OiBzdHJpbmcpOiBBRmllbGREZXNjcmlwdG9yPGFueSwgVD4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkQWN0aW9uKGFjdGlvbk5hbWU6IHN0cmluZyk6IEZpZWxkQWN0aW9uRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkQWN0aW9uRGVzY3JpcHRvcjxUPih0aGlzLCBhY3Rpb25OYW1lKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwPEZUPihwcm9wZXJ0eTogc3RyaW5nLCBtb2RlbFR5cGU6IENsYXNzVHlwZTxGVD4pOiBGaWVsZExvb2t1cERlc2NyaXB0b3I8RlQsIFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBEZXNjcmlwdG9yPEZULCBUPih0aGlzLCBwcm9wZXJ0eSwgbW9kZWxUeXBlKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwRW51bShcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgZW51bVR5cGU6IEVudW1UeXBlLFxuICAgICAgICBvcHRpb25zPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4sXG4gICAgICAgIG5hbWVBc1ZhbHVlID0gZmFsc2UsXG4gICAgICAgIG9wdGlvbnNUaXRsZVBhdGg/OiBzdHJpbmcgfCBudWxsXG4gICAgKTogRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IodGhpcywgcHJvcGVydHksIGVudW1UeXBlLCBvcHRpb25zLCBuYW1lQXNWYWx1ZSwgb3B0aW9uc1RpdGxlUGF0aCk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlFZGl0b3I8RlQ+KHByb3BlcnR5OiBzdHJpbmcsIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3I8RlQ+KTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxGVCwgVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yKHRoaXMsIHByb3BlcnR5LCB0YWJsZXZpZXdEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvcjxGVD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvcjxGVD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPEZUPlxuICAgICk6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8RlQsIFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcih0aGlzLCBwcm9wZXJ0eSwgbWFpblRhYmxlRGVzY3JpcHRvciwgbG9va3VwVGFibGVEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhEaXNhYmxlZChkaXNhYmxlZCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFZhbGlkYXRpb24obmFtZTogc3RyaW5nLCB2YWxpZGF0b3I/OiBNbmdGaWVsZFZhbGlkYXRvciwgbWVzc2FnZT86IE1uZ0ZpZWxkVmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwLndpdGhWYWxpZGF0aW9uKG5hbWUsIHZhbGlkYXRvciwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gbmV3IEVkaXRvckRlc2NyaXB0b3I8VD4odGhpcy5tb2RlbC50eXBlLCB0aGlzLm1vZGVsLmlkUHJvcGVydHlOYW1lLCB0aGlzLm1vZGVsLnRpdGxlUHJvcGVydHlOYW1lLCB0aGlzLnRhYmxldmlld0VkaXRvclR5cGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRhYkdyb3VwIG9mIHRoaXMuX3RhYnMpIHtcbiAgICAgICAgICAgIGVkaXRvci5jcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXAuY29weSgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHRhYkdyb3VwIG9mIGVkaXRvci5fdGFicykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZEdyb3VwIG9mIHRhYkdyb3VwLmZpZWxkcykge1xuICAgICAgICAgICAgICAgIGVkaXRvci5fZmllbGRzLnB1c2goLi4uZmllbGRHcm91cC5maWVsZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWRpdG9yLl9ncm91cHMucHVzaCguLi50YWJHcm91cC5maWVsZHMpO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5fY3VycmVudFRhYkdyb3VwID0gZWRpdG9yLl90YWJzW2VkaXRvci5fdGFicy5sZW5ndGggLSAxXTtcbiAgICAgICAgZWRpdG9yLl9jdXJyZW50R3JvdXAgPSBlZGl0b3IuX2N1cnJlbnRUYWJHcm91cC5maWVsZHNbZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAuZmllbGRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBlZGl0b3IuX2Rpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XG4gICAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpZWxkR3JvdXBEZXNjcmlwdG9yKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cCA9IGZpZWxkR3JvdXA7XG4gICAgICAgIHRoaXMuX2dyb3Vwcy5wdXNoKGZpZWxkR3JvdXApO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXA/LmFkZEZpZWxkKGZpZWxkR3JvdXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXAgPSB0YWJHcm91cDtcbiAgICAgICAgdGhpcy5fdGFicy5wdXNoKHRhYkdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0R3JvdXAoKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCk7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50VGFiR3JvdXA/LmZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cChFZGl0b3JEZXNjcmlwdG9yLmRlZmF1bHRHcm91cE5hbWUsIG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0VGFiR3JvdXAoKSB7XG4gICAgICAgIGlmICh0aGlzLl90YWJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVUYWJHcm91cChFZGl0b3JEZXNjcmlwdG9yLmRlZmF1bHRHcm91cE5hbWUsICdnZW5lcmFsLmdlbmVyYWwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1vZGlmaWVzIHNlbGVjdGVkIGZpZWxkXG4gICAgICogZG8gbm90IHVzZSBpdCBmb3IgZW51bXMhICh1c2Ugd2l0aEZpZWxkTW9kaWZpZWRFbnVtIGluc3RlYWQpXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGZpZWxkIG5hbWVcbiAgICAgKiBAcGFyYW0gZmllbGRUeXBlIG5ldyBmaWVsZCB0eXBlIGZvciBzZWxlY3RlZCBmaWVsZFxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmb3IgZmllbGRcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRUeXBlKHByb3BlcnR5OiBzdHJpbmcsIGZpZWxkVHlwZTogRmllbGRJbnB1dFR5cGVFbnVtLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBUYWJsZXZpZXdVdGlsLmdldEF0dHJpYnV0ZURlZk1hcCh0aGlzLl9tb2RlbFR5cGUpLmZpbmQoYXR0cmlidXRlID0+IGF0dHJpYnV0ZS5uYW1lID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZS5maWVsZFR5cGUgPSBmaWVsZFR5cGU7XG4gICAgICAgICAgICB0aGlzLnVwc2VydEZpZWxkRnJvbUF0dHJpYnV0ZURlZihcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZHMuZmluZChmaSA9PiBmaS5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpLFxuICAgICAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbW9kaWZpZXMgc2VsZWN0ZWQgZmllbGQgd2l0aCBlbnVtIHR5cGVcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgZmllbGQgcHJvcGVydHkgbmFtZVxuICAgICAqIEBwYXJhbSBlbnVtVHlwZSB0eXBlIG9mIGVudW0gZm9yIG5ldyBmaWVsZFxuICAgICAqIEBwYXJhbSBvcHRpb25zVGl0bGVQYXRoXG4gICAgICogQHBhcmFtIHZhbHVlc1xuICAgICAqIEBwYXJhbSBuYW1lQXNWYWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmllbGRNb2RpZmllZEVudW0ocHJvcGVydHk6IHN0cmluZywgZW51bVR5cGU/OiBFbnVtVHlwZSwgb3B0aW9uc1RpdGxlUGF0aD86IHN0cmluZyB8IG51bGwsIHZhbHVlcz86IEFycmF5PEVudW1Db25zdGFudFR5cGU+LCBuYW1lQXNWYWx1ZSA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IFRhYmxldmlld1V0aWwuZ2V0QXR0cmlidXRlRGVmTWFwKHRoaXMuX21vZGVsVHlwZSkuZmluZChhID0+IGEubmFtZSA9PT0gcHJvcGVydHkpO1xuICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGUuZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLlJhZGlvO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkIGluc3RhbmNlb2YgRmllbGRJbnB1dERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5hc1JhZGlvRnJvbUVudW0oZW51bVR5cGUgPz8gKE9iamVjdFNlcmlhbGl6ZXIuZ2V0KCkuZmluZEVudW0oYXR0cmlidXRlLnR5cGUpIGFzIEVudW1UeXBlKSwgb3B0aW9uc1RpdGxlUGF0aCwgdmFsdWVzLCBuYW1lQXNWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGRzIGxvb2t1cCB0byBnaXZlbiBmaWVsZFxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBmaWVsZCBwcm9wZXJ0eSBuYW1lXG4gICAgICogQHBhcmFtIG1vZGVsVHlwZSBtb2RlbCB0eXBlIG9mIGZpZWxkXG4gICAgICogQHBhcmFtIGxvb2t1cFByb3ZpZGVyIHByb3ZpZGVyIHRvIGJlIGFkZGVkIHRvIGZpZWxkXG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRMb29rdXA8TVQ+KHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsVHlwZTogQ2xhc3NUeXBlPE1UPiwgbG9va3VwUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8YW55LCBhbnk+LCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMucmVtb3ZlRmllbGQocHJvcGVydHkpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWRkRmllbGRMb29rdXAocHJvcGVydHksIG1vZGVsVHlwZSkuYXNBdXRvY29tcGxldGUoKS53aXRoTG9va3VwRGF0YVByb3ZpZGVyKGxvb2t1cFByb3ZpZGVyKTtcblxuICAgICAgICBpZiAodGl0bGVQcm9wZXJ0eSkge1xuICAgICAgICAgICAgKGZpZWxkIGFzIEZpZWxkTG9va3VwRGVzY3JpcHRvcjxhbnksIGFueT4pLndpdGhJdGVtc0xhYmVsUHJvcGVydHkodGl0bGVQcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgZmllbGQgYmFzZWQgb24gYXR0cmlidXRlIGRlZmluaXRpb24sIHVzZWQgZm9yIGF1dG8gbW9kZWxcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlIGRlZmluaXRpb25cbiAgICAgKiBAcGFyYW0gZmllbGQgb3B0aW9uYWwsIGlmIGRlZmluZWQgd2lsbCBiZSByZXBsYWNlZCwgb3RoZXJ3aXNlIG5ldyB3aWxsIGJlIGdlbmVyYXRlZFxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cHNlcnRGaWVsZEZyb21BdHRyaWJ1dGVEZWYoYXR0cmlidXRlOiBUYWJsZXZpZXdBdHRyaWJ1dGVEZWYsIGZpZWxkPzogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFQ+LCAuLi5hcmdzOiBhbnlbXSk6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBUPiB7XG4gICAgICAgIGlmIChmaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICBmaWVsZCA9IHRoaXMuYWRkRmllbGQoYXR0cmlidXRlLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgRmllbGRJbnB1dERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUuZW51bVR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQuYXNSYWRpb0Zyb21FbnVtKGF0dHJpYnV0ZS5lbnVtVHlwZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5hc1R5cGUoYXR0cmlidXRlLmZpZWxkVHlwZSA/PyBUYWJsZXZpZXdVdGlsLnRvRmllbGRJbnB1dFR5cGVGcm9tQ29sdW1uVHlwZShhdHRyaWJ1dGUuY29sdW1uVHlwZSwgYXR0cmlidXRlLmNvbHVtbkRpc3BsYXlUeXBlKSwgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgdGFrZXMgY2FyZSBvZiBkaXNwbGF5aW5nIGNvcnJlY3QvbG9jYWxpemVkIGRhdGEgaW4gdGhlIGVkaXRvclxuICAgICAqIEBwYXJhbSBsb2NhbGl6YXRpb25zUHJvcGVydHkgcHJvcGVydHkgdGhhdCB0ZWxscyB1cyB3aGVyZSBvbiB0aGUgbW9kZWwgYXJlIGxvY2FsaXphdGlvbnMgYWNjZXNzaWJsZVxuICAgICAqIEBwYXJhbSBsb2NhbGVQcm9wZXJ0eSBwcm9wZXJ0eSBieSB3aGljaCB3ZSBmaW5kIHRoZSBsb2NhbGVcbiAgICAgKiBAcGFyYW0gbG9jYWxpemF0aW9uTW9kZWxUeXBlIG1vZGVsIHR5cGUgZm9yIGxvY2FsaXphdGlvbnMgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHdob2xlIG1vZGVsXG4gICAgICogQHBhcmFtIGxvY2FsZUxvb2t1cCBsb29rdXAgcHJvdmlkZXIgZm9yIGxvY2FsZXMgc3VwcG9ydGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9jYWxpemVkPFM+KFxuICAgICAgICBsb2NhbGl6YXRpb25zUHJvcGVydHkgPSAnbG9jYWxpemF0aW9ucycsXG4gICAgICAgIGxvY2FsZVByb3BlcnR5ID0gJ2xvY2FsZScsXG4gICAgICAgIGxvY2FsaXphdGlvbk1vZGVsVHlwZT86IENsYXNzVHlwZTxhbnk+LFxuICAgICAgICBsb2NhbGVMb29rdXA/OiAocXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW0sIHNlcnZpY2U/OiBTLCBzZWFyY2g/OiBzdHJpbmcpID0+IE9ic2VydmFibGU8QXJyYXk8c3RyaW5nPj5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHkgPSBsb2NhbGl6YXRpb25zUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ID0gbG9jYWxlUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9jYWxlTG9va3VwID0gbG9jYWxlTG9va3VwO1xuXG4gICAgICAgIGlmIChsb2NhbGl6YXRpb25Nb2RlbFR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbk1vZGVsVHlwZSA9IGxvY2FsaXphdGlvbk1vZGVsVHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbk1vZGVsVHlwZSA9IHRoaXMuX21vZGVsVHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dEV2ZW50KHR5cGU6IE1uZ0Zvcm1FdmVudFR5cGVFbnVtLCBjbXBUeXBlOiBUeXBlPGFueT4sIGNtcEluc3RhbmNlOiBhbnksIGRhdGE/OiBNbmdGaWVsZEV2ZW50RGF0YTxUPikge1xuICAgICAgICB0aGlzLl9ldmVudHNTdWJqZWN0Lm5leHQobmV3IE1uZ0Zvcm1FdmVudCh0eXBlLCBjbXBUeXBlLCBjbXBJbnN0YW5jZSwgZGF0YSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wbGV0ZUV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5fZXZlbnRzU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXZlbnRzJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxufVxuIl19
|