@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
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
import { AsyncPipe } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Injector, Input, Optional, Output, ViewChild, forwardRef } from '@angular/core';
|
|
3
|
-
import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
-
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
5
|
-
import { AutoComplete, AutoCompleteModule } from 'primeng/autocomplete';
|
|
6
|
-
import { BehaviorSubject, of, switchMap } from 'rxjs';
|
|
7
|
-
import { first, map } from 'rxjs/operators';
|
|
8
|
-
import { MediusFilterMatchType, MediusQueryParamBuilder } from '../../../api/models';
|
|
9
|
-
import { MngErrorInternal } from '../../../models';
|
|
10
|
-
import { MngFormlyFieldWrapperComponent } from '../formly/wrappers';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@ngx-translate/core";
|
|
13
|
-
import * as i2 from "../formly/wrappers";
|
|
14
|
-
import * as i3 from "primeng/autocomplete";
|
|
15
|
-
import * as i4 from "@angular/forms";
|
|
16
|
-
export const MNG_AUTOCOMPLETE_VALUE_ACCESSOR = {
|
|
17
|
-
provide: NG_VALUE_ACCESSOR,
|
|
18
|
-
useExisting: forwardRef(() => MngAutocompleteComponent),
|
|
19
|
-
multi: true
|
|
20
|
-
};
|
|
21
|
-
export class MngAutocompleteComponent {
|
|
22
|
-
constructor(injector, translate, formlyWrapper) {
|
|
23
|
-
this.injector = injector;
|
|
24
|
-
this.translate = translate;
|
|
25
|
-
this.formlyWrapper = formlyWrapper;
|
|
26
|
-
this.itemsLabelTranslate = false;
|
|
27
|
-
this.inlineSearch = false;
|
|
28
|
-
this.openOnFocus = false;
|
|
29
|
-
this.multiselect = false;
|
|
30
|
-
this.className = null;
|
|
31
|
-
this.dropdownClassName = null;
|
|
32
|
-
this.showClear = false;
|
|
33
|
-
this.autoClear = false;
|
|
34
|
-
this.selectFirst = false; //on every input field change return first given value (or null)
|
|
35
|
-
this.valueChangeEventEmitter = new EventEmitter();
|
|
36
|
-
this.isInited = false;
|
|
37
|
-
this.suggestionsSubject = new BehaviorSubject([]);
|
|
38
|
-
this.searchSubscription = null;
|
|
39
|
-
this.dataProviderService = null;
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
41
|
-
this.onChangeFn = () => { };
|
|
42
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
43
|
-
this.onTouchedFn = () => { };
|
|
44
|
-
this.autocompleteFormControl = new FormControl();
|
|
45
|
-
this.suggestions$ = this.suggestionsSubject.asObservable();
|
|
46
|
-
}
|
|
47
|
-
ngOnInit() {
|
|
48
|
-
this.setItemsAndDataProvider();
|
|
49
|
-
if (this.selectFirst) {
|
|
50
|
-
this.suggestionSubscription = this.suggestions$.subscribe(e => this.valueChangeEventEmitter.emit(e.length === 0 ? null : e[0]));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
ngOnDestroy() {
|
|
54
|
-
this.searchSubscription?.unsubscribe();
|
|
55
|
-
this.suggestionSubscription?.unsubscribe();
|
|
56
|
-
}
|
|
57
|
-
onSearch(event) {
|
|
58
|
-
this.searchSubscription?.unsubscribe();
|
|
59
|
-
if (this.dataProvider) {
|
|
60
|
-
const queryParamBuilder = MediusQueryParamBuilder.create();
|
|
61
|
-
if (this.itemsLabelProperty) {
|
|
62
|
-
queryParamBuilder.withSort(this.itemsLabelProperty);
|
|
63
|
-
}
|
|
64
|
-
if (event.query && event.query.length > 0 && this.itemsLabelProperty) {
|
|
65
|
-
queryParamBuilder.withFilter(this.itemsLabelProperty, event.query, undefined, MediusFilterMatchType.StartsWith);
|
|
66
|
-
}
|
|
67
|
-
this.searchSubscription = this.getLookup(queryParamBuilder.build(), event.query).subscribe({
|
|
68
|
-
next: items => {
|
|
69
|
-
this.setSuggestionsFromItems(items, event.query);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
onSelect(value) {
|
|
75
|
-
let outputValue = value;
|
|
76
|
-
if (this.itemsValueProperty && typeof value === 'object') {
|
|
77
|
-
outputValue = value[this.itemsValueProperty];
|
|
78
|
-
}
|
|
79
|
-
this.onChangeFn(outputValue);
|
|
80
|
-
this.valueChangeEventEmitter.next(outputValue);
|
|
81
|
-
}
|
|
82
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
83
|
-
onFocus(event) {
|
|
84
|
-
if (this.openOnFocus) {
|
|
85
|
-
this.primeAutocomplete?.show();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
89
|
-
onBlur(event) {
|
|
90
|
-
this.formlyWrapper?.formControl?.markAsTouched();
|
|
91
|
-
}
|
|
92
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
93
|
-
onClear(event) {
|
|
94
|
-
this.onChangeFn();
|
|
95
|
-
this.valueChangeEventEmitter.next(null);
|
|
96
|
-
}
|
|
97
|
-
registerOnChange(fn) {
|
|
98
|
-
this.onChangeFn = fn;
|
|
99
|
-
}
|
|
100
|
-
registerOnTouched(fn) {
|
|
101
|
-
this.onTouchedFn = fn;
|
|
102
|
-
}
|
|
103
|
-
setDisabledState(isDisabled) {
|
|
104
|
-
if (isDisabled) {
|
|
105
|
-
this.autocompleteFormControl.disable();
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
this.autocompleteFormControl.enable();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
writeValue(value) {
|
|
112
|
-
this.setItemsAndDataProvider();
|
|
113
|
-
if (this.itemsValuePropertyInit && value != null && typeof value !== 'object') {
|
|
114
|
-
const defaultItem = { [this.itemsValuePropertyInit]: value };
|
|
115
|
-
if (this.itemsLabelProperty) {
|
|
116
|
-
defaultItem[this.itemsLabelProperty] = value;
|
|
117
|
-
}
|
|
118
|
-
const matchedItem = this.suggestionsSubject.value.find(i => i[this.itemsValuePropertyInit] === value);
|
|
119
|
-
if (matchedItem) {
|
|
120
|
-
this.autocompleteFormControl.setValue(matchedItem, { emitEvent: false });
|
|
121
|
-
}
|
|
122
|
-
else if (this.dataProvider) {
|
|
123
|
-
const queryParamBuilder = MediusQueryParamBuilder.create();
|
|
124
|
-
queryParamBuilder.withFilter(this.itemsValuePropertyInit, value, undefined, MediusFilterMatchType.Equals);
|
|
125
|
-
this.getLookup(queryParamBuilder.build())
|
|
126
|
-
.pipe(first())
|
|
127
|
-
.subscribe({
|
|
128
|
-
next: items => {
|
|
129
|
-
let isMatch = false;
|
|
130
|
-
if (items.length === 1) {
|
|
131
|
-
this.autocompleteFormControl.setValue(items[0]);
|
|
132
|
-
isMatch = true;
|
|
133
|
-
}
|
|
134
|
-
else if (items.length > 1) {
|
|
135
|
-
// for lookup data providers not using query params
|
|
136
|
-
const matchedItem = items.find(i => i[this.itemsValuePropertyInit] === value);
|
|
137
|
-
if (matchedItem) {
|
|
138
|
-
this.setAutocompleteValueFromWrite(matchedItem);
|
|
139
|
-
isMatch = true;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
if (!isMatch) {
|
|
143
|
-
this.setAutocompleteValueFromWrite(defaultItem);
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
error: () => {
|
|
147
|
-
this.setAutocompleteValueFromWrite(defaultItem);
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
this.setAutocompleteValueFromWrite(defaultItem);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
this.setAutocompleteValueFromWrite(value);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
setItemsAndDataProvider() {
|
|
160
|
-
if (this.isInited) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
this.itemsLabelProperty = this.itemsLabelPropertyInit;
|
|
164
|
-
this.itemsValueProperty = this.itemsValuePropertyInit;
|
|
165
|
-
if (this.dataProvider) {
|
|
166
|
-
this.dataProviderService = this.dataProvider.serviceType ? this.injector.get(this.dataProvider.serviceType) : null;
|
|
167
|
-
if (this.itemsLabelTranslate) {
|
|
168
|
-
// setup translation properties
|
|
169
|
-
if (this.itemsLabelPropertyInit) {
|
|
170
|
-
this.itemsLabelProperty = `${this.itemsLabelPropertyInit}_i18n`;
|
|
171
|
-
}
|
|
172
|
-
else if (!this.itemsLabelProperty && !this.itemsValuePropertyInit) {
|
|
173
|
-
this.itemsLabelProperty = 'title_i18n';
|
|
174
|
-
this.itemsValueProperty = 'value';
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
throw new MngErrorInternal(`Invalid use with value (${this.itemsLabelPropertyInit}) and label (${this.itemsLabelPropertyInit}) property setup.`, 'MngAutocompleteComponent error').consoleError();
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
console.warn(`Data provider should be provided for MngAutocompleteComponent.`);
|
|
183
|
-
}
|
|
184
|
-
if (this.openOnFocus) {
|
|
185
|
-
this.onSearch({ query: '' });
|
|
186
|
-
}
|
|
187
|
-
this.isInited = true;
|
|
188
|
-
}
|
|
189
|
-
setAutocompleteValueFromWrite(value) {
|
|
190
|
-
if (value && this.itemsLabelTranslate) {
|
|
191
|
-
value = this.i18nPopulateItems([value], this.translate.instant(this.i18nGetItemsKeys([value])))[0];
|
|
192
|
-
}
|
|
193
|
-
this.autocompleteFormControl.setValue(value, { emitEvent: false });
|
|
194
|
-
}
|
|
195
|
-
getLookup(qp, query) {
|
|
196
|
-
if (this.dataProvider) {
|
|
197
|
-
return this.dataProvider.lookup(qp, this.dataProviderService, query).pipe(switchMap(items => {
|
|
198
|
-
if (this.itemsLabelTranslate) {
|
|
199
|
-
const translatedItems = this.i18nGetItemsKeys(items);
|
|
200
|
-
if (translatedItems.length === 0) {
|
|
201
|
-
return of([]);
|
|
202
|
-
}
|
|
203
|
-
return this.translate.stream(translatedItems).pipe(map(translations => this.i18nPopulateItems(items, translations)));
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
return of(items);
|
|
207
|
-
}
|
|
208
|
-
}));
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
return of([]);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
i18nGetItemsKeys(items) {
|
|
215
|
-
return items.map(item => (typeof item === 'object' && this.itemsLabelPropertyInit ? item[this.itemsLabelPropertyInit] : item));
|
|
216
|
-
}
|
|
217
|
-
i18nPopulateItems(items, i18nMap) {
|
|
218
|
-
return items.map(item => {
|
|
219
|
-
if (typeof item === 'object' && this.itemsLabelPropertyInit) {
|
|
220
|
-
const label = item[this.itemsLabelPropertyInit];
|
|
221
|
-
const translation = i18nMap[label];
|
|
222
|
-
if (translation) {
|
|
223
|
-
return { ...item, [this.itemsLabelProperty]: translation };
|
|
224
|
-
}
|
|
225
|
-
return { ...item };
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
const translation = i18nMap[item];
|
|
229
|
-
return {
|
|
230
|
-
[this.itemsLabelProperty]: translation ?? item,
|
|
231
|
-
[this.itemsValueProperty]: item
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
setSuggestionsFromItems(items, query) {
|
|
237
|
-
if (this.inlineSearch) {
|
|
238
|
-
const queryLowerCase = query?.toLowerCase() ?? '';
|
|
239
|
-
const filteredItems = items.filter(i => {
|
|
240
|
-
let itemLabel = i;
|
|
241
|
-
if (this.itemsLabelProperty && typeof i === 'object') {
|
|
242
|
-
itemLabel = i[this.itemsLabelProperty];
|
|
243
|
-
}
|
|
244
|
-
if (itemLabel == null) {
|
|
245
|
-
return queryLowerCase == null || !queryLowerCase.length;
|
|
246
|
-
}
|
|
247
|
-
if (typeof itemLabel !== 'string') {
|
|
248
|
-
itemLabel = itemLabel.toString();
|
|
249
|
-
}
|
|
250
|
-
return itemLabel.toLowerCase().startsWith(queryLowerCase);
|
|
251
|
-
});
|
|
252
|
-
this.suggestionsSubject.next([...filteredItems]);
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
this.suggestionsSubject.next([...items]);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
MngAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: MngAutocompleteComponent, deps: [{ token: i0.Injector }, { token: i1.TranslateService }, { token: i2.MngFormlyFieldWrapperComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
260
|
-
MngAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.6", type: MngAutocompleteComponent, isStandalone: true, selector: "mng-autocomplete", inputs: { dataProvider: "dataProvider", dataKeyProperty: "dataKeyProperty", itemsValuePropertyInit: ["itemsValueProperty", "itemsValuePropertyInit"], itemsLabelPropertyInit: ["itemsLabelProperty", "itemsLabelPropertyInit"], itemsLabelTranslate: "itemsLabelTranslate", inlineSearch: "inlineSearch", openOnFocus: "openOnFocus", multiselect: "multiselect", placeholder: "placeholder", className: "className", dropdownClassName: "dropdownClassName", showClear: "showClear", autoClear: "autoClear", selectFirst: "selectFirst" }, outputs: { valueChangeEventEmitter: "valueChange" }, providers: [MNG_AUTOCOMPLETE_VALUE_ACCESSOR], viewQueries: [{ propertyName: "primeAutocomplete", first: true, predicate: AutoComplete, descendants: true }], ngImport: i0, template: "<p-autoComplete\n (onFocus)=\"onFocus($event)\"\n [formControl]=\"autocompleteFormControl\"\n [placeholder]=\"$any(placeholder)\"\n [dropdown]=\"true\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [field]=\"$any(itemsLabelProperty)\"\n [suggestions]=\"(suggestions$ | async) ?? []\"\n [multiple]=\"multiselect\"\n [showEmptyMessage]=\"true\"\n [emptyMessage]=\"'mngAutocomplete.noMatches' | translate\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n [minLength]=\"openOnFocus ? 0 : 1\"\n [showClear]=\"showClear\"\n [forceSelection]=\"autoClear\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n (onBlur)=\"onBlur($event)\"\n (onClear)=\"onClear($event)\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n", dependencies: [{ kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i3.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "itemSize", "suggestions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
261
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: MngAutocompleteComponent, decorators: [{
|
|
262
|
-
type: Component,
|
|
263
|
-
args: [{ standalone: true, selector: 'mng-autocomplete', providers: [MNG_AUTOCOMPLETE_VALUE_ACCESSOR], imports: [AutoCompleteModule, ReactiveFormsModule, AsyncPipe, TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-autoComplete\n (onFocus)=\"onFocus($event)\"\n [formControl]=\"autocompleteFormControl\"\n [placeholder]=\"$any(placeholder)\"\n [dropdown]=\"true\"\n [dataKey]=\"$any(dataKeyProperty)\"\n [field]=\"$any(itemsLabelProperty)\"\n [suggestions]=\"(suggestions$ | async) ?? []\"\n [multiple]=\"multiselect\"\n [showEmptyMessage]=\"true\"\n [emptyMessage]=\"'mngAutocomplete.noMatches' | translate\"\n [styleClass]=\"$any(className)\"\n [panelStyleClass]=\"$any(dropdownClassName)\"\n [minLength]=\"openOnFocus ? 0 : 1\"\n [showClear]=\"showClear\"\n [forceSelection]=\"autoClear\"\n (completeMethod)=\"onSearch($event)\"\n (onSelect)=\"onSelect($event)\"\n (onBlur)=\"onBlur($event)\"\n (onClear)=\"onClear($event)\"\n appendTo=\"body\"\n dropdownMode=\"current\">\n</p-autoComplete>\n" }]
|
|
264
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.TranslateService }, { type: i2.MngFormlyFieldWrapperComponent, decorators: [{
|
|
265
|
-
type: Optional
|
|
266
|
-
}] }]; }, propDecorators: { dataProvider: [{
|
|
267
|
-
type: Input
|
|
268
|
-
}], dataKeyProperty: [{
|
|
269
|
-
type: Input
|
|
270
|
-
}], itemsValuePropertyInit: [{
|
|
271
|
-
type: Input,
|
|
272
|
-
args: ['itemsValueProperty']
|
|
273
|
-
}], itemsLabelPropertyInit: [{
|
|
274
|
-
type: Input,
|
|
275
|
-
args: ['itemsLabelProperty']
|
|
276
|
-
}], itemsLabelTranslate: [{
|
|
277
|
-
type: Input
|
|
278
|
-
}], inlineSearch: [{
|
|
279
|
-
type: Input
|
|
280
|
-
}], openOnFocus: [{
|
|
281
|
-
type: Input
|
|
282
|
-
}], multiselect: [{
|
|
283
|
-
type: Input
|
|
284
|
-
}], placeholder: [{
|
|
285
|
-
type: Input
|
|
286
|
-
}], className: [{
|
|
287
|
-
type: Input
|
|
288
|
-
}], dropdownClassName: [{
|
|
289
|
-
type: Input
|
|
290
|
-
}], showClear: [{
|
|
291
|
-
type: Input
|
|
292
|
-
}], autoClear: [{
|
|
293
|
-
type: Input
|
|
294
|
-
}], selectFirst: [{
|
|
295
|
-
type: Input
|
|
296
|
-
}], valueChangeEventEmitter: [{
|
|
297
|
-
type: Output,
|
|
298
|
-
args: ['valueChange']
|
|
299
|
-
}], primeAutocomplete: [{
|
|
300
|
-
type: ViewChild,
|
|
301
|
-
args: [AutoComplete]
|
|
302
|
-
}] } });
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQW9CLFFBQVEsRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5SyxPQUFPLEVBQXVCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpHLE9BQU8sRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVBQWUsRUFBNEIsRUFBRSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBQyxxQkFBcUIsRUFBb0IsdUJBQXVCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBRWxFLE1BQU0sQ0FBQyxNQUFN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QixDQUFDLDZFQXNCakMsWUFBWSxnREM5QzNCLGkxQkF1QkEsMkNERWMsa0JBQWtCLDBnQ0FBRSxtQkFBbUIscVRBQUUsU0FBUyw2Q0FBRSxlQUFlOzJGQUdwRSx3QkFBd0I7a0JBUnBDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLGtCQUFrQixhQUVqQixDQUFDLCtCQUErQixDQUFDLFdBQ25DLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxtQkFDN0QsdUJBQXVCLENBQUMsTUFBTTs7MEJBcUMrQixRQUFROzRDQWxDdEUsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUM4QixzQkFBc0I7c0JBQXpELEtBQUs7dUJBQUMsb0JBQW9CO2dCQUNTLHNCQUFzQjtzQkFBekQsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBQ1gsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxpQkFBaUI7c0JBQWhDLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBRXdCLHVCQUF1QjtzQkFBcEQsTUFBTTt1QkFBQyxhQUFhO2dCQUVXLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBc3luY1BpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgRXhpc3RpbmdQcm92aWRlciwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkLCBmb3J3YXJkUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0F1dG9Db21wbGV0ZSwgQXV0b0NvbXBsZXRlTW9kdWxlfSBmcm9tICdwcmltZW5nL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBvZiwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Zmlyc3QsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge01lZGl1c0ZpbHRlck1hdGNoVHlwZSwgTWVkaXVzUXVlcnlQYXJhbSwgTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXJ9IGZyb20gJy4uLy4uLy4uL2FwaS9tb2RlbHMnO1xuaW1wb3J0IHtJTG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge01uZ0Vycm9ySW50ZXJuYWx9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0Zvcm1seUZpZWxkV3JhcHBlckNvbXBvbmVudH0gZnJvbSAnLi4vZm9ybWx5L3dyYXBwZXJzJztcblxuZXhwb3J0IGNvbnN0IE1OR19BVVRPQ09NUExFVEVfVkFMVUVfQUNDRVNTT1I6IEV4aXN0aW5nUHJvdmlkZXIgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTW5nQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1hdXRvY29tcGxldGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW01OR19BVVRPQ09NUExFVEVfVkFMVUVfQUNDRVNTT1JdLFxuICAgIGltcG9ydHM6IFtBdXRvQ29tcGxldGVNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEFzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNbmdBdXRvY29tcGxldGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhUHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPGFueSwgYW55PjtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YUtleVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIEBJbnB1dCgnaXRlbXNWYWx1ZVByb3BlcnR5JykgcHVibGljIGl0ZW1zVmFsdWVQcm9wZXJ0eUluaXQ/OiBzdHJpbmc7XG4gICAgQElucHV0KCdpdGVtc0xhYmVsUHJvcGVydHknKSBwdWJsaWMgaXRlbXNMYWJlbFByb3BlcnR5SW5pdD86IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbXNMYWJlbFRyYW5zbGF0ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbmxpbmVTZWFyY2ggPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgb3Blbk9uRm9jdXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlzZWxlY3QgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIGRyb3Bkb3duQ2xhc3NOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd0NsZWFyID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGF1dG9DbGVhciA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RGaXJzdCA9IGZhbHNlOyAvL29uIGV2ZXJ5IGlucHV0IGZpZWxkIGNoYW5nZSByZXR1cm4gZmlyc3QgZ2l2ZW4gdmFsdWUgKG9yIG51bGwpXG5cbiAgICBAT3V0cHV0KCd2YWx1ZUNoYW5nZScpIHB1YmxpYyB2YWx1ZUNoYW5nZUV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBWaWV3Q2hpbGQoQXV0b0NvbXBsZXRlKSBwdWJsaWMgcHJpbWVBdXRvY29tcGxldGU/OiBBdXRvQ29tcGxldGU7XG5cbiAgICBwcml2YXRlIGlzSW5pdGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdWdnZXN0aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxhbnk+PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8YW55Pj4oW10pO1xuICAgIHByaXZhdGUgc2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlclNlcnZpY2U6IGFueSA9IG51bGw7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByaXZhdGUgb25DaGFuZ2VGbjogYW55ID0gKCkgPT4ge307XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByaXZhdGUgb25Ub3VjaGVkRm46IGFueSA9ICgpID0+IHt9O1xuXG4gICAgcHVibGljIGl0ZW1zTGFiZWxQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwdWJsaWMgaXRlbXNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIHB1YmxpYyBhdXRvY29tcGxldGVGb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICBwdWJsaWMgc3VnZ2VzdGlvbnMkOiBPYnNlcnZhYmxlPEFycmF5PGFueT4+ID0gdGhpcy5zdWdnZXN0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIHN1Z2dlc3Rpb25TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybWx5V3JhcHBlcjogTW5nRm9ybWx5RmllbGRXcmFwcGVyQ29tcG9uZW50KSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0SXRlbXNBbmREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0Rmlyc3QpIHtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuc3VnZ2VzdGlvbnMkLnN1YnNjcmliZShlID0+IHRoaXMudmFsdWVDaGFuZ2VFdmVudEVtaXR0ZXIuZW1pdChlLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBlWzBdKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBvblNlYXJjaChldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbUJ1aWxkZXIgPSBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhTb3J0KHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudC5xdWVyeSAmJiBldmVudC5xdWVyeS5sZW5ndGggPiAwICYmIHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbUJ1aWxkZXIud2l0aEZpbHRlcih0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSwgZXZlbnQucXVlcnksIHVuZGVmaW5lZCwgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLlN0YXJ0c1dpdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gPSB0aGlzLmdldExvb2t1cChxdWVyeVBhcmFtQnVpbGRlci5idWlsZCgpLCBldmVudC5xdWVyeSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBpdGVtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3VnZ2VzdGlvbnNGcm9tSXRlbXMoaXRlbXMsIGV2ZW50LnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VsZWN0KHZhbHVlOiBhbnkpIHtcbiAgICAgICAgbGV0IG91dHB1dFZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvdXRwdXRWYWx1ZSA9IHZhbHVlW3RoaXMuaXRlbXNWYWx1ZVByb3BlcnR5XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4ob3V0cHV0VmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlRXZlbnRFbWl0dGVyLm5leHQob3V0cHV0VmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBvbkZvY3VzKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5vcGVuT25Gb2N1cykge1xuICAgICAgICAgICAgdGhpcy5wcmltZUF1dG9jb21wbGV0ZT8uc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIG9uQmx1cihldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuZm9ybWx5V3JhcHBlcj8uZm9ybUNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgb25DbGVhcihldmVudDogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VFdmVudEVtaXR0ZXIubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJdGVtc0FuZERhdGFQcm92aWRlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eUluaXQgJiYgdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0SXRlbTogYW55ID0ge1t0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eUluaXRdOiB2YWx1ZX07XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xhYmVsUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0SXRlbVt0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEl0ZW0gPSB0aGlzLnN1Z2dlc3Rpb25zU3ViamVjdC52YWx1ZS5maW5kKGkgPT4gaVt0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eUluaXQhXSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgaWYgKG1hdGNoZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZShtYXRjaGVkSXRlbSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtQnVpbGRlciA9IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhGaWx0ZXIodGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0LCB2YWx1ZSwgdW5kZWZpbmVkLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TG9va3VwKHF1ZXJ5UGFyYW1CdWlsZGVyLmJ1aWxkKCkpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogaXRlbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUZvcm1Db250cm9sLnNldFZhbHVlKGl0ZW1zWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBsb29rdXAgZGF0YSBwcm92aWRlcnMgbm90IHVzaW5nIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkSXRlbSA9IGl0ZW1zLmZpbmQoaSA9PiBpW3RoaXMuaXRlbXNWYWx1ZVByb3BlcnR5SW5pdCFdID09PSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVWYWx1ZUZyb21Xcml0ZShtYXRjaGVkSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF1dG9jb21wbGV0ZVZhbHVlRnJvbVdyaXRlKGRlZmF1bHRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF1dG9jb21wbGV0ZVZhbHVlRnJvbVdyaXRlKGRlZmF1bHRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUoZGVmYXVsdEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRBdXRvY29tcGxldGVWYWx1ZUZyb21Xcml0ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEl0ZW1zQW5kRGF0YVByb3ZpZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5pc0luaXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgPSB0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXQ7XG4gICAgICAgIHRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5ID0gdGhpcy5pdGVtc1ZhbHVlUHJvcGVydHlJbml0O1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJTZXJ2aWNlID0gdGhpcy5kYXRhUHJvdmlkZXIuc2VydmljZVR5cGUgPyB0aGlzLmluamVjdG9yLmdldDxhbnk+KHRoaXMuZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKSA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zTGFiZWxUcmFuc2xhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBzZXR1cCB0cmFuc2xhdGlvbiBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSA9IGAke3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdH1faTE4bmA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgJiYgIXRoaXMuaXRlbXNWYWx1ZVByb3BlcnR5SW5pdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eSA9ICd0aXRsZV9pMThuJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc1ZhbHVlUHJvcGVydHkgPSAndmFsdWUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBNbmdFcnJvckludGVybmFsKFxuICAgICAgICAgICAgICAgICAgICAgICAgYEludmFsaWQgdXNlIHdpdGggdmFsdWUgKCR7dGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0fSkgYW5kIGxhYmVsICgke3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdH0pIHByb3BlcnR5IHNldHVwLmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnTW5nQXV0b2NvbXBsZXRlQ29tcG9uZW50IGVycm9yJ1xuICAgICAgICAgICAgICAgICAgICApLmNvbnNvbGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBwcm92aWRlciBzaG91bGQgYmUgcHJvdmlkZWQgZm9yIE1uZ0F1dG9jb21wbGV0ZUNvbXBvbmVudC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wZW5PbkZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoKHtxdWVyeTogJyd9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNJbml0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0QXV0b2NvbXBsZXRlVmFsdWVGcm9tV3JpdGUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5pdGVtc0xhYmVsVHJhbnNsYXRlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuaTE4blBvcHVsYXRlSXRlbXMoW3ZhbHVlXSwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLmkxOG5HZXRJdGVtc0tleXMoW3ZhbHVlXSkpKVswXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TG9va3VwKHFwOiBNZWRpdXNRdWVyeVBhcmFtLCBxdWVyeT86IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8YW55Pj4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlci5sb29rdXAocXAsIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSwgcXVlcnkpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNMYWJlbFRyYW5zbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZEl0ZW1zID0gdGhpcy5pMThuR2V0SXRlbXNLZXlzKGl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLnN0cmVhbSh0cmFuc2xhdGVkSXRlbXMpLnBpcGUobWFwKHRyYW5zbGF0aW9ucyA9PiB0aGlzLmkxOG5Qb3B1bGF0ZUl0ZW1zKGl0ZW1zLCB0cmFuc2xhdGlvbnMpKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpMThuR2V0SXRlbXNLZXlzKGl0ZW1zOiBBcnJheTxhbnk+KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIHRoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdCA/IChpdGVtW3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5SW5pdCBhcyBrZXlvZiBvYmplY3RdIGFzIHN0cmluZykgOiBpdGVtKSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaTE4blBvcHVsYXRlSXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGkxOG5NYXA6IGFueSk6IEFycmF5PGFueT4ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiB0aGlzLml0ZW1zTGFiZWxQcm9wZXJ0eUluaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1bdGhpcy5pdGVtc0xhYmVsUHJvcGVydHlJbml0IGFzIGtleW9mIG9iamVjdF0gYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBpMThuTWFwW2xhYmVsXTtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5pdGVtLCBbdGhpcy5pdGVtc0xhYmVsUHJvcGVydHkhXTogdHJhbnNsYXRpb259O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gey4uLml0ZW19O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IGkxOG5NYXBbaXRlbV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMuaXRlbXNMYWJlbFByb3BlcnR5IV06IHRyYW5zbGF0aW9uID8/IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLml0ZW1zVmFsdWVQcm9wZXJ0eSFdOiBpdGVtXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdWdnZXN0aW9uc0Zyb21JdGVtcyhpdGVtczogQXJyYXk8YW55PiwgcXVlcnk/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5saW5lU2VhcmNoKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUxvd2VyQ2FzZSA9IHF1ZXJ5Py50b0xvd2VyQ2FzZSgpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IGl0ZW1zLmZpbHRlcihpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbUxhYmVsID0gaTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0xhYmVsUHJvcGVydHkgJiYgdHlwZW9mIGkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1MYWJlbCA9IGlbdGhpcy5pdGVtc0xhYmVsUHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbUxhYmVsID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5TG93ZXJDYXNlID09IG51bGwgfHwgIXF1ZXJ5TG93ZXJDYXNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtTGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1MYWJlbCA9IGl0ZW1MYWJlbC50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbUxhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChxdWVyeUxvd2VyQ2FzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNTdWJqZWN0Lm5leHQoWy4uLmZpbHRlcmVkSXRlbXNdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNTdWJqZWN0Lm5leHQoWy4uLml0ZW1zXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8cC1hdXRvQ29tcGxldGVcbiAgICAob25Gb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgIFtmb3JtQ29udHJvbF09XCJhdXRvY29tcGxldGVGb3JtQ29udHJvbFwiXG4gICAgW3BsYWNlaG9sZGVyXT1cIiRhbnkocGxhY2Vob2xkZXIpXCJcbiAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgW2RhdGFLZXldPVwiJGFueShkYXRhS2V5UHJvcGVydHkpXCJcbiAgICBbZmllbGRdPVwiJGFueShpdGVtc0xhYmVsUHJvcGVydHkpXCJcbiAgICBbc3VnZ2VzdGlvbnNdPVwiKHN1Z2dlc3Rpb25zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgW211bHRpcGxlXT1cIm11bHRpc2VsZWN0XCJcbiAgICBbc2hvd0VtcHR5TWVzc2FnZV09XCJ0cnVlXCJcbiAgICBbZW1wdHlNZXNzYWdlXT1cIidtbmdBdXRvY29tcGxldGUubm9NYXRjaGVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3N0eWxlQ2xhc3NdPVwiJGFueShjbGFzc05hbWUpXCJcbiAgICBbcGFuZWxTdHlsZUNsYXNzXT1cIiRhbnkoZHJvcGRvd25DbGFzc05hbWUpXCJcbiAgICBbbWluTGVuZ3RoXT1cIm9wZW5PbkZvY3VzID8gMCA6IDFcIlxuICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyXCJcbiAgICBbZm9yY2VTZWxlY3Rpb25dPVwiYXV0b0NsZWFyXCJcbiAgICAoY29tcGxldGVNZXRob2QpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgKG9uU2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAgIChvbkJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgIChvbkNsZWFyKT1cIm9uQ2xlYXIoJGV2ZW50KVwiXG4gICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICBkcm9wZG93bk1vZGU9XCJjdXJyZW50XCI+XG48L3AtYXV0b0NvbXBsZXRlPlxuIl19
|