@mediusinc/mng-commons 3.6.0 → 3.7.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/esm2022/index.mjs +6 -3
- package/esm2022/lib/api/models/filter-param.model.mjs +1 -1
- package/esm2022/lib/api/models/index.mjs +1 -3
- package/esm2022/lib/api/models/query-param.model.mjs +1 -1
- package/esm2022/lib/api/models/query-result.model.mjs +12 -1
- package/esm2022/lib/api/services/api.abstract.service.mjs +2 -2
- package/esm2022/lib/api/services/get-all-api.abstract.service.mjs +1 -1
- package/esm2022/lib/api/utils/index.mjs +2 -2
- package/esm2022/lib/api/utils/object-serializer.util.mjs +53 -137
- package/esm2022/lib/components/action/action.component.mjs +17 -16
- package/esm2022/lib/components/action/editor/action-editor.component.mjs +12 -12
- package/esm2022/lib/components/action/localization/data-language-dropdown.component.mjs +7 -7
- package/esm2022/lib/components/action/models/action-component.model.mjs +1 -1
- package/esm2022/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
- package/esm2022/lib/components/action/models/action-execution.model.mjs +5 -5
- package/esm2022/lib/components/action/route/action-route.component.mjs +6 -6
- package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +74 -65
- package/esm2022/lib/components/form/date-range/date-range.component.mjs +6 -7
- package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +39 -39
- package/esm2022/lib/components/form/editor/form-editor.component.mjs +14 -16
- package/esm2022/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +6 -6
- package/esm2022/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +5 -5
- package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.mjs +3 -3
- package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.mjs +3 -3
- package/esm2022/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +5 -5
- package/esm2022/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +5 -6
- package/esm2022/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +10 -13
- package/esm2022/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
- package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +13 -13
- package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +26 -15
- package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +14 -14
- package/esm2022/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +5 -6
- package/esm2022/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +5 -6
- package/esm2022/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +39 -18
- package/esm2022/lib/components/layout/breadcrumb.component.mjs +4 -4
- package/esm2022/lib/components/layout/footer.component.mjs +4 -4
- package/esm2022/lib/components/layout/main-layout.component.mjs +8 -8
- package/esm2022/lib/components/layout/menu-item.component.mjs +8 -8
- package/esm2022/lib/components/layout/menu.component.mjs +7 -7
- package/esm2022/lib/components/layout/services/main-layout.component.service.mjs +4 -4
- package/esm2022/lib/components/layout/topbar-user.component.mjs +9 -9
- package/esm2022/lib/components/layout/topbar.component.mjs +8 -8
- package/esm2022/lib/components/layout/version.component.mjs +11 -11
- package/esm2022/lib/components/layoutV2/breadcrumb.component.mjs +6 -6
- package/esm2022/lib/components/layoutV2/footer.component.mjs +3 -3
- package/esm2022/lib/components/layoutV2/main-layout.component.mjs +14 -11
- package/esm2022/lib/components/layoutV2/menu-item.component.mjs +12 -9
- package/esm2022/lib/components/layoutV2/menu.component.mjs +5 -6
- package/esm2022/lib/components/layoutV2/model/layout-state.model.mjs +1 -1
- package/esm2022/lib/components/layoutV2/services/main-layout.component.service.mjs +30 -21
- package/esm2022/lib/components/layoutV2/services/menu.service.mjs +3 -3
- package/esm2022/lib/components/layoutV2/sidebar.component.mjs +18 -9
- package/esm2022/lib/components/layoutV2/topbar-user.component.mjs +6 -6
- package/esm2022/lib/components/layoutV2/topbar.component.mjs +6 -7
- package/esm2022/lib/components/layoutV2/version.component.mjs +11 -11
- package/esm2022/lib/components/pages/error/error.page.component.mjs +4 -4
- package/esm2022/lib/components/pages/not-found/not-found.page.component.mjs +4 -4
- package/esm2022/lib/components/tableview/index.mjs +1 -2
- package/esm2022/lib/components/tableview/models/table.event.mjs +1 -1
- package/esm2022/lib/components/tableview/route/tableview-route.abstract.component.mjs +18 -18
- package/esm2022/lib/components/tableview/route/tableview-route.component.mjs +5 -5
- package/esm2022/lib/components/tableview/table/column-filter-full/column-filter-full.component.mjs +8 -12
- package/esm2022/lib/components/tableview/table/column-value/column-value.component.mjs +9 -32
- package/esm2022/lib/components/tableview/table/table.component.mjs +20 -25
- package/esm2022/lib/components/tableview/tableview.component.mjs +8 -10
- package/esm2022/lib/data-providers/base.data-provider.mjs +43 -12
- package/esm2022/lib/data-providers/editor.data-provider.mjs +82 -14
- package/esm2022/lib/data-providers/lookup.data-provider.mjs +38 -9
- package/esm2022/lib/data-providers/table.data-provider.mjs +41 -14
- package/esm2022/lib/data-providers/tableview-crud.data-provider.mjs +14 -6
- package/esm2022/lib/data-providers/tableview.data-provider.mjs +89 -29
- package/esm2022/lib/descriptors/action/action-confirmation.descriptor.mjs +2 -2
- package/esm2022/lib/descriptors/action/action-editor.descriptor.mjs +262 -0
- package/esm2022/lib/descriptors/action/action-link.descriptor.mjs +90 -0
- package/esm2022/lib/descriptors/action/action.descriptor.mjs +91 -352
- package/esm2022/lib/descriptors/action/index.mjs +3 -1
- package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +215 -102
- package/esm2022/lib/descriptors/editor/field-action.descriptor.mjs +50 -0
- package/esm2022/lib/descriptors/editor/field-base.descriptor.mjs +293 -0
- package/esm2022/lib/descriptors/editor/field-group.descriptor.mjs +97 -0
- package/esm2022/lib/descriptors/editor/field-lookup.descriptor.mjs +211 -0
- package/esm2022/lib/descriptors/editor/field-many.descriptor.mjs +153 -0
- package/esm2022/lib/descriptors/editor/field.descriptor.mjs +81 -852
- package/esm2022/lib/descriptors/editor/index.mjs +6 -1
- package/esm2022/lib/descriptors/editor/internal/editor-fields.model.mjs +2 -0
- package/esm2022/lib/descriptors/editor/internal/editor.model.mjs +2 -0
- package/esm2022/lib/descriptors/filter/filter-lookup.descriptor.mjs +210 -0
- package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +2 -208
- package/esm2022/lib/descriptors/filter/index.mjs +2 -1
- package/esm2022/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +1 -1
- package/esm2022/lib/descriptors/model/index.mjs +2 -0
- package/esm2022/lib/descriptors/model/model.descriptor.mjs +70 -0
- package/esm2022/lib/descriptors/table/column.descriptor.mjs +38 -49
- package/esm2022/lib/descriptors/table/internal/table-columns.model.mjs +2 -0
- package/esm2022/lib/descriptors/table/internal/table.model.mjs +2 -0
- package/esm2022/lib/descriptors/table/table.descriptor.mjs +143 -124
- package/esm2022/lib/descriptors/tableview/internal/tableview.model.mjs +2 -0
- package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +240 -131
- package/esm2022/lib/directives/component.directive.mjs +11 -11
- package/esm2022/lib/directives/dialog-keydown-handler.directive.mjs +3 -3
- package/esm2022/lib/directives/template.directive.mjs +9 -9
- package/esm2022/lib/helpers/coercion.mjs +45 -0
- package/esm2022/lib/models/class.model.mjs +2 -0
- package/esm2022/lib/models/enum.model.mjs +1 -1
- package/esm2022/lib/models/index.mjs +4 -1
- package/esm2022/lib/models/radio.model.mjs +2 -0
- package/esm2022/lib/models/tableview-attr.model.mjs +1 -1
- package/esm2022/lib/models/type-registry.model.mjs +2 -0
- package/esm2022/lib/models/view-container.model.mjs +1 -1
- package/esm2022/lib/pipes/boolean.pipe.mjs +3 -3
- package/esm2022/lib/pipes/class-map.pipe.mjs +3 -3
- package/esm2022/lib/pipes/enum.pipe.mjs +6 -6
- package/esm2022/lib/pipes/enumerate-async.pipe.mjs +5 -5
- package/esm2022/lib/pipes/enumerate.pipe.mjs +5 -5
- package/esm2022/lib/pipes/getter.pipe.mjs +5 -5
- package/esm2022/lib/pipes/i18n-property.pipe.mjs +4 -4
- package/esm2022/lib/pipes/json-path.pipe.mjs +3 -3
- package/esm2022/lib/pipes/locale-default-row-class.pipe.mjs +5 -5
- package/esm2022/lib/pipes/parametrize.pipe.mjs +3 -3
- package/esm2022/lib/pipes/template.pipe.mjs +4 -4
- package/esm2022/lib/provide-commons.mjs +4 -4
- package/esm2022/lib/registry/type.registry.mjs +114 -0
- package/esm2022/lib/router/models/router.model.mjs +1 -1
- package/esm2022/lib/router/tableview-route-builder.mjs +5 -5
- package/esm2022/lib/security/authorization.service.mjs +9 -11
- package/esm2022/lib/services/action-executor.service.mjs +14 -12
- package/esm2022/lib/services/commons-init.service.mjs +3 -3
- package/esm2022/lib/services/commons.service.mjs +6 -5
- package/esm2022/lib/services/mng-localstorage-config.service.mjs +4 -4
- package/esm2022/lib/services/navigation.service.mjs +5 -5
- package/esm2022/lib/services/router.service.mjs +4 -4
- package/esm2022/lib/services/version.service.mjs +5 -5
- package/esm2022/lib/services/view-container.component.service.mjs +5 -5
- package/esm2022/lib/styles/styles.util.mjs +1 -1
- package/esm2022/lib/types/action-descriptor.types.mjs +2 -0
- package/esm2022/lib/types/data-provider.types.mjs +2 -0
- package/esm2022/lib/types/getter.type.mjs +2 -0
- package/esm2022/lib/types/index.mjs +5 -2
- package/esm2022/lib/types/localstorage-config-value.type.mjs +2 -0
- package/esm2022/lib/types/type.decorator.mjs +4 -14
- package/esm2022/lib/types/type.model.mjs +1 -1
- package/esm2022/lib/utils/action-data-provider.util.mjs +14 -8
- package/esm2022/lib/utils/decorator-metadata.util.mjs +61 -0
- package/esm2022/lib/utils/editor-formly.util.mjs +6 -5
- package/esm2022/lib/utils/enum.util.mjs +1 -1
- package/esm2022/lib/utils/export.util.mjs +5 -4
- package/esm2022/lib/utils/i18n.util.mjs +22 -22
- package/esm2022/lib/utils/index.mjs +2 -3
- package/esm2022/lib/utils/model.util.mjs +40 -36
- package/esm2022/lib/utils/notification.util.mjs +1 -1
- package/esm2022/lib/utils/tableview.util.mjs +17 -17
- package/fesm2022/mediusinc-mng-commons.mjs +11491 -11384
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/index.d.ts +3 -2
- package/lib/api/models/filter-param.model.d.ts +3 -3
- package/lib/api/models/index.d.ts +0 -2
- package/lib/api/models/query-param.model.d.ts +3 -3
- package/lib/api/models/query-result.model.d.ts +3 -3
- package/lib/api/services/api.abstract.service.d.ts +1 -1
- package/lib/api/utils/index.d.ts +1 -1
- package/lib/api/utils/object-serializer.util.d.ts +3 -19
- package/lib/components/action/action.component.d.ts +5 -5
- package/lib/components/action/editor/action-editor.component.d.ts +7 -7
- package/lib/components/action/localization/data-language-dropdown.component.d.ts +6 -6
- package/lib/components/action/models/action-component.model.d.ts +4 -4
- package/lib/components/action/models/action-confirmation-service.model.d.ts +2 -2
- package/lib/components/action/models/action-execution.model.d.ts +14 -14
- package/lib/components/action/route/action-route.component.d.ts +2 -2
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +15 -18
- package/lib/components/form/dropdown/dropdown.component.d.ts +9 -9
- package/lib/components/form/editor/form-editor.component.d.ts +8 -11
- package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +4 -0
- package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +4 -4
- package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +3 -2
- package/lib/components/layout/topbar-user.component.d.ts +2 -2
- package/lib/components/layout/version.component.d.ts +2 -2
- package/lib/components/layoutV2/model/layout-state.model.d.ts +8 -9
- package/lib/components/layoutV2/services/main-layout.component.service.d.ts +1 -1
- package/lib/components/layoutV2/version.component.d.ts +2 -2
- package/lib/components/tableview/index.d.ts +0 -1
- package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +20 -20
- package/lib/components/tableview/route/tableview-route.component.d.ts +7 -7
- package/lib/components/tableview/table/table.component.d.ts +9 -9
- package/lib/components/tableview/tableview.component.d.ts +8 -8
- package/lib/data-providers/base.data-provider.d.ts +30 -12
- package/lib/data-providers/editor.data-provider.d.ts +86 -23
- package/lib/data-providers/lookup.data-provider.d.ts +24 -11
- package/lib/data-providers/table.data-provider.d.ts +30 -17
- package/lib/data-providers/tableview-crud.data-provider.d.ts +8 -4
- package/lib/data-providers/tableview.data-provider.d.ts +41 -29
- package/lib/descriptors/action/action-confirmation.descriptor.d.ts +3 -3
- package/lib/descriptors/action/action-editor.descriptor.d.ts +115 -0
- package/lib/descriptors/action/action-link.descriptor.d.ts +34 -0
- package/lib/descriptors/action/action.descriptor.d.ts +74 -160
- package/lib/descriptors/action/index.d.ts +2 -0
- package/lib/descriptors/editor/editor.descriptor.d.ts +131 -79
- package/lib/descriptors/editor/field-action.descriptor.d.ts +23 -0
- package/lib/descriptors/editor/field-base.descriptor.d.ts +126 -0
- package/lib/descriptors/editor/field-group.descriptor.d.ts +42 -0
- package/lib/descriptors/editor/field-lookup.descriptor.d.ts +80 -0
- package/lib/descriptors/editor/field-many.descriptor.d.ts +63 -0
- package/lib/descriptors/editor/field.descriptor.d.ts +100 -326
- package/lib/descriptors/editor/index.d.ts +5 -0
- package/lib/descriptors/editor/internal/editor-fields.model.d.ts +32 -0
- package/lib/descriptors/editor/internal/editor.model.d.ts +15 -0
- package/lib/descriptors/filter/filter-lookup.descriptor.d.ts +69 -0
- package/lib/descriptors/filter/filter.descriptor.d.ts +9 -67
- package/lib/descriptors/filter/index.d.ts +1 -0
- package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +11 -16
- package/lib/descriptors/model/model.descriptor.d.ts +22 -0
- package/lib/descriptors/table/column.descriptor.d.ts +45 -33
- package/lib/descriptors/table/internal/table-columns.model.d.ts +11 -0
- package/lib/descriptors/table/internal/table.model.d.ts +9 -0
- package/lib/descriptors/table/table.descriptor.d.ts +82 -71
- package/lib/descriptors/tableview/internal/tableview.model.d.ts +11 -0
- package/lib/descriptors/tableview/tableview.descriptor.d.ts +106 -74
- package/lib/directives/component.directive.d.ts +5 -6
- package/lib/directives/template.directive.d.ts +2 -3
- package/lib/helpers/coercion.d.ts +9 -0
- package/lib/models/class.model.d.ts +6 -0
- package/lib/models/enum.model.d.ts +3 -2
- package/lib/models/index.d.ts +3 -0
- package/lib/models/radio.model.d.ts +6 -0
- package/lib/models/tableview-attr.model.d.ts +2 -2
- package/lib/models/type-registry.model.d.ts +7 -0
- package/lib/models/view-container.model.d.ts +6 -6
- package/lib/pipes/getter.pipe.d.ts +2 -1
- package/lib/pipes/i18n-property.pipe.d.ts +1 -1
- package/lib/pipes/locale-default-row-class.pipe.d.ts +2 -2
- package/lib/registry/type.registry.d.ts +25 -0
- package/lib/router/models/router.model.d.ts +5 -5
- package/lib/router/tableview-route-builder.d.ts +6 -6
- package/lib/security/authorization.service.d.ts +4 -7
- package/lib/services/action-executor.service.d.ts +7 -7
- package/lib/services/mng-localstorage-config.service.d.ts +3 -3
- package/lib/services/view-container.component.service.d.ts +3 -3
- package/lib/styles/styles.util.d.ts +5 -5
- package/lib/types/action-descriptor.types.d.ts +4 -0
- package/lib/types/data-provider.types.d.ts +3 -0
- package/lib/types/getter.type.d.ts +2 -0
- package/lib/types/index.d.ts +4 -1
- package/lib/types/localstorage-config-value.type.d.ts +1 -0
- package/lib/types/type.decorator.d.ts +0 -2
- package/lib/types/type.model.d.ts +12 -2
- package/lib/utils/action-data-provider.util.d.ts +6 -5
- package/lib/utils/{type.util.d.ts → decorator-metadata.util.d.ts} +2 -26
- package/lib/utils/editor-formly.util.d.ts +2 -2
- package/lib/utils/enum.util.d.ts +2 -2
- package/lib/utils/export.util.d.ts +2 -2
- package/lib/utils/i18n.util.d.ts +10 -11
- package/lib/utils/index.d.ts +1 -2
- package/lib/utils/model.util.d.ts +5 -3
- package/lib/utils/notification.util.d.ts +4 -4
- package/lib/utils/tableview.util.d.ts +6 -6
- package/openapi/templates/model.mustache +15 -2
- package/openapi/templates/models.mustache +0 -44
- package/package.json +10 -10
- package/scss/mng-commons-dark-v2.scss +2 -2
- package/scss/mng-commons-light-v2.scss +1 -1
- package/scss/v2/theme/{theme-base/components/data → extensions}/_fullcalendar.scss +14 -15
- package/scss/v2/theme/theme-base/_colors.scss +11 -12
- package/scss/v2/theme/theme-base/_common.scss +8 -5
- package/scss/v2/theme/theme-base/_components.scss +93 -89
- package/scss/v2/theme/theme-base/_mixins.scss +205 -71
- package/scss/v2/theme/theme-base/components/button/_button.scss +80 -68
- package/scss/v2/theme/theme-base/components/button/_speeddial.scss +11 -1
- package/scss/v2/theme/theme-base/components/button/_splitbutton.scss +128 -161
- package/scss/v2/theme/theme-base/components/data/_carousel.scss +1 -1
- package/scss/v2/theme/theme-base/components/data/_datatable.scss +3 -3
- package/scss/v2/theme/theme-base/components/data/_dataview.scss +0 -9
- package/scss/v2/theme/theme-base/components/data/_filter.scss +5 -6
- package/scss/v2/theme/theme-base/components/data/_orderlist.scss +15 -4
- package/scss/v2/theme/theme-base/components/data/_organizationchart.scss +1 -1
- package/scss/v2/theme/theme-base/components/data/_picklist.scss +14 -3
- package/scss/v2/theme/theme-base/components/data/_timeline.scss +3 -6
- package/scss/v2/theme/theme-base/components/data/_tree.scss +7 -6
- package/scss/v2/theme/theme-base/components/data/_treetable.scss +3 -4
- package/scss/v2/theme/theme-base/components/file/_fileupload.scss +6 -0
- package/scss/v2/theme/theme-base/components/input/_autocomplete.scss +43 -24
- package/scss/v2/theme/theme-base/components/input/_calendar.scss +9 -5
- package/scss/v2/theme/theme-base/components/input/_cascadeselect.scss +25 -20
- package/scss/v2/theme/theme-base/components/input/_checkbox.scss +9 -5
- package/scss/v2/theme/theme-base/components/input/_chips.scss +24 -13
- package/scss/v2/theme/theme-base/components/input/_dropdown.scss +29 -13
- package/scss/v2/theme/theme-base/components/input/_editor.scss +7 -7
- package/scss/v2/theme/theme-base/components/input/_inputgroup.scss +1 -2
- package/scss/v2/theme/theme-base/components/input/_inputmask.scss +2 -2
- package/scss/v2/theme/theme-base/components/input/_inputnumber.scss +7 -7
- package/scss/v2/theme/theme-base/components/input/_inputswitch.scss +3 -3
- package/scss/v2/theme/theme-base/components/input/_inputtext.scss +4 -3
- package/scss/v2/theme/theme-base/components/input/_listbox.scss +23 -8
- package/scss/v2/theme/theme-base/components/input/_multiselect.scss +31 -27
- package/scss/v2/theme/theme-base/components/input/_radiobutton.scss +2 -2
- package/scss/v2/theme/theme-base/components/input/_rating.scss +33 -28
- package/scss/v2/theme/theme-base/components/input/_treeselect.scss +6 -6
- package/scss/v2/theme/theme-base/components/menu/_breadcrumb.scss +3 -3
- package/scss/v2/theme/theme-base/components/menu/_contextmenu.scss +8 -30
- package/scss/v2/theme/theme-base/components/menu/_dock.scss +11 -2
- package/scss/v2/theme/theme-base/components/menu/_megamenu.scss +14 -65
- package/scss/v2/theme/theme-base/components/menu/_menu.scss +5 -13
- package/scss/v2/theme/theme-base/components/menu/_menubar.scss +32 -80
- package/scss/v2/theme/theme-base/components/menu/_panelmenu.scss +52 -39
- package/scss/v2/theme/theme-base/components/menu/_slidemenu.scss +15 -20
- package/scss/v2/theme/theme-base/components/menu/_steps.scss +2 -2
- package/scss/v2/theme/theme-base/components/menu/_tabmenu.scss +1 -2
- package/scss/v2/theme/theme-base/components/menu/_tieredmenu.scss +10 -32
- package/scss/v2/theme/theme-base/components/messages/_message.scss +2 -2
- package/scss/v2/theme/theme-base/components/messages/_toast.scss +2 -3
- package/scss/v2/theme/theme-base/components/misc/_chip.scss +7 -3
- package/scss/v2/theme/theme-base/components/misc/_inplace.scss +0 -1
- package/scss/v2/theme/theme-base/components/misc/_terminal.scss +9 -8
- package/scss/v2/theme/theme-base/components/multimedia/_galleria.scss +6 -0
- package/scss/v2/theme/theme-base/components/overlay/_confirmpopup.scss +3 -5
- package/scss/v2/theme/theme-base/components/panel/_accordion.scss +4 -4
- package/scss/v2/theme/theme-base/components/panel/_fieldset.scss +1 -1
- package/scss/v2/theme/theme-base/components/panel/_panel.scss +10 -5
- package/scss/v2/theme/theme-base/components/panel/_tabview.scss +6 -2
- package/scss/v2/theme/theme-dark/_variables.scss +756 -765
- package/scss/v2/theme/theme-dark/blue/theme.scss +1 -0
- package/scss/v2/theme/theme-light/_variables.scss +81 -94
- package/scss/v2/theme/theme-light/blue/theme.scss +1 -0
- package/esm2022/lib/api/models/mappers.mjs +0 -13
- package/esm2022/lib/api/models/serialization.model.mjs +0 -2
- package/esm2022/lib/components/tableview/table/column-filter/column-filter.component.mjs +0 -121
- package/esm2022/lib/descriptors/index.mjs +0 -2
- package/esm2022/lib/descriptors/model.descriptor.mjs +0 -45
- package/esm2022/lib/mng-commons.module.mjs +0 -472
- package/esm2022/lib/types/mng-localstorage-config-value.type.mjs +0 -2
- package/esm2022/lib/utils/coercion.util.mjs +0 -6
- package/esm2022/lib/utils/type.util.mjs +0 -94
- package/lib/api/models/mappers.d.ts +0 -6
- package/lib/api/models/serialization.model.d.ts +0 -9
- package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +0 -37
- package/lib/descriptors/model.descriptor.d.ts +0 -18
- package/lib/mng-commons.module.d.ts +0 -105
- package/lib/types/mng-localstorage-config-value.type.d.ts +0 -1
- package/lib/utils/coercion.util.d.ts +0 -2
- package/openapi/templates/serializer-registration/model.mustache +0 -97
- package/openapi/templates/serializer-registration/models.mustache +0 -6
- /package/lib/descriptors/{index.d.ts → model/index.d.ts} +0 -0
|
@@ -1,18 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { DateUtil, TypeUtil } from '../../utils';
|
|
4
|
-
import { enumsMapBase, typeMapBase } from '../models';
|
|
1
|
+
import { TypeRegistry } from '../../registry/type.registry';
|
|
2
|
+
import { DateUtil, DecoratorMetadataUtil } from '../../utils';
|
|
5
3
|
export class ObjectSerializer {
|
|
6
4
|
constructor() {
|
|
7
5
|
this._logCategory = 'ObjectSerializer';
|
|
8
6
|
this._primitives = ['string', 'boolean', 'double', 'integer', 'long', 'float', 'number', 'any'];
|
|
9
|
-
this._typeMap = {
|
|
10
|
-
...typeMapBase
|
|
11
|
-
};
|
|
12
|
-
this._enumMap = {
|
|
13
|
-
...enumsMapBase
|
|
14
|
-
};
|
|
15
|
-
// private readonly _logger = MngLoggerService.get().create('ObjectSerializer');
|
|
16
7
|
this.dateTimeInUtc = true;
|
|
17
8
|
this.dateTimeWithTimezone = true;
|
|
18
9
|
this.dateTimeWithMillis = true;
|
|
@@ -21,52 +12,12 @@ export class ObjectSerializer {
|
|
|
21
12
|
get primitives() {
|
|
22
13
|
return this._primitives;
|
|
23
14
|
}
|
|
24
|
-
get typeMap() {
|
|
25
|
-
return this._typeMap;
|
|
26
|
-
}
|
|
27
|
-
get enumMap() {
|
|
28
|
-
return this._enumMap;
|
|
29
|
-
}
|
|
30
15
|
/**
|
|
31
16
|
* Only use one instance of object (out of Angular context)
|
|
32
17
|
*/
|
|
33
18
|
static get() {
|
|
34
19
|
return ObjectSerializer._instance;
|
|
35
20
|
}
|
|
36
|
-
findAttributeDefinitionByClassType(type, attributeName) {
|
|
37
|
-
return this.findAttributeDefinition(TypeUtil.findTypeName(type), attributeName);
|
|
38
|
-
}
|
|
39
|
-
findAttributeDefinition(typeName, attributeName) {
|
|
40
|
-
const attributeDefs = this.findAttributesDefinition(typeName);
|
|
41
|
-
if (!attributeDefs) {
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
for (const attribute of attributeDefs) {
|
|
45
|
-
if (attribute.name === attributeName) {
|
|
46
|
-
return attribute;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
findAttributesDefinitionByClassType(type) {
|
|
52
|
-
return this.findAttributesDefinition(TypeUtil.findTypeName(type));
|
|
53
|
-
}
|
|
54
|
-
findAttributesDefinition(typeName) {
|
|
55
|
-
const typeDef = this.findType(typeName);
|
|
56
|
-
if (!typeDef || typeof typeDef.getAttributeTypeMap !== 'function') {
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
return typeDef.getAttributeTypeMap();
|
|
60
|
-
}
|
|
61
|
-
findByClassType(type) {
|
|
62
|
-
return this.findType(TypeUtil.findTypeName(type));
|
|
63
|
-
}
|
|
64
|
-
findType(typeName) {
|
|
65
|
-
return this._typeMap[typeName];
|
|
66
|
-
}
|
|
67
|
-
findEnum(enumName) {
|
|
68
|
-
return this._enumMap[enumName];
|
|
69
|
-
}
|
|
70
21
|
configure(config) {
|
|
71
22
|
if (config.dateTimeInUtc !== undefined) {
|
|
72
23
|
this.dateTimeInUtc = config.dateTimeInUtc;
|
|
@@ -78,106 +29,63 @@ export class ObjectSerializer {
|
|
|
78
29
|
this.dateTimeWithMillis = config.dateTimeWithMillis;
|
|
79
30
|
}
|
|
80
31
|
}
|
|
81
|
-
|
|
82
|
-
for (const key in types) {
|
|
83
|
-
this.registerType(types[key], key);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
registerType(type, optTypeName) {
|
|
87
|
-
// try to find name from metadata
|
|
88
|
-
let typeName;
|
|
89
|
-
if (TypeUtil.typeNameExists(type)) {
|
|
90
|
-
// defined name from optional type name
|
|
91
|
-
typeName = TypeUtil.findTypeName(type);
|
|
92
|
-
}
|
|
93
|
-
else if (optTypeName) {
|
|
94
|
-
typeName = optTypeName;
|
|
95
|
-
// register metadata
|
|
96
|
-
TypeUtil.defineReflectTypeName(type, typeName);
|
|
97
|
-
}
|
|
98
|
-
if (!typeName) {
|
|
99
|
-
// this._logger.debug(`WARNING: registering type ${type} failed, because typeName could not be determined and optional name was not provided.`);
|
|
100
|
-
MngLoggerService.get().log(`WARNING: registering type ${type} failed, because typeName could not be determined and optional name was not provided.`, LogLevelEnum.Debug, this._logCategory);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
if (typeof this._typeMap[typeName] !== 'undefined') {
|
|
104
|
-
// this._logger.debug(`WARNING: registering type ${type} under key ${typeName} skipped, because type already exists for this key.`);
|
|
105
|
-
MngLoggerService.get().log(`WARNING: registering type ${type} under key ${typeName} skipped, because type already exists for this key.`, LogLevelEnum.Debug, this._logCategory);
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
this._typeMap[typeName] = type;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
registerEnums(enums) {
|
|
112
|
-
for (const key in enums) {
|
|
113
|
-
this.registerEnum(enums[key], key);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
registerEnum(enumType, enumName) {
|
|
117
|
-
// try to find name from decorator
|
|
118
|
-
if (typeof this._enumMap[enumName] !== 'undefined') {
|
|
119
|
-
// this._logger.debug(`Registering enum ${enumName} skipped, because enum already exists.`);
|
|
120
|
-
MngLoggerService.get().log(`Registering enum ${enumName} skipped, because enum already exists.`, LogLevelEnum.Debug, this._logCategory);
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
TypeUtil.defineReflectEnumName(enumType, enumName);
|
|
124
|
-
this._enumMap[enumName] = enumType;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
findCorrectType(data, expectedType) {
|
|
32
|
+
findCorrectType(data, expectedTypeName) {
|
|
128
33
|
if (data == undefined) {
|
|
129
|
-
return
|
|
34
|
+
return expectedTypeName;
|
|
130
35
|
}
|
|
131
|
-
else if (this._primitives.indexOf(
|
|
132
|
-
return
|
|
36
|
+
else if (this._primitives.indexOf(expectedTypeName.toLowerCase()) !== -1) {
|
|
37
|
+
return expectedTypeName;
|
|
133
38
|
}
|
|
134
|
-
else if (
|
|
135
|
-
return
|
|
39
|
+
else if (expectedTypeName === 'Date') {
|
|
40
|
+
return expectedTypeName;
|
|
136
41
|
}
|
|
137
42
|
else {
|
|
138
|
-
|
|
139
|
-
|
|
43
|
+
const enumType = TypeRegistry.get().findEnum(expectedTypeName);
|
|
44
|
+
if (enumType) {
|
|
45
|
+
return expectedTypeName;
|
|
140
46
|
}
|
|
141
|
-
|
|
142
|
-
|
|
47
|
+
const type = TypeRegistry.get().findType(expectedTypeName);
|
|
48
|
+
if (!type) {
|
|
49
|
+
return expectedTypeName; // w/e we don't know the type
|
|
143
50
|
}
|
|
144
51
|
// Check the discriminator
|
|
145
|
-
const discriminatorProperty =
|
|
52
|
+
const discriminatorProperty = type.discriminator;
|
|
146
53
|
if (discriminatorProperty == null) {
|
|
147
|
-
return
|
|
54
|
+
return expectedTypeName; // the type does not have a discriminator. use it.
|
|
148
55
|
}
|
|
149
56
|
else {
|
|
150
57
|
if (data[discriminatorProperty]) {
|
|
151
58
|
const discriminatorType = data[discriminatorProperty];
|
|
152
|
-
|
|
59
|
+
const type = TypeRegistry.get().findType(expectedTypeName);
|
|
60
|
+
if (type) {
|
|
153
61
|
return discriminatorType; // use the type given in the discriminator
|
|
154
62
|
}
|
|
155
63
|
else {
|
|
156
|
-
return
|
|
64
|
+
return expectedTypeName; // discriminator did not map to a type
|
|
157
65
|
}
|
|
158
66
|
}
|
|
159
67
|
else {
|
|
160
|
-
return
|
|
68
|
+
return expectedTypeName; // discriminator was not present (or an empty string)
|
|
161
69
|
}
|
|
162
70
|
}
|
|
163
71
|
}
|
|
164
72
|
}
|
|
165
73
|
serializeClass(data, type) {
|
|
166
|
-
return this.serialize(data,
|
|
74
|
+
return this.serialize(data, DecoratorMetadataUtil.findTypeName(type) ?? undefined);
|
|
167
75
|
}
|
|
168
76
|
serializeClassArray(data, type) {
|
|
169
|
-
return this.serialize(data, `Array<${
|
|
77
|
+
return this.serialize(data, `Array<${DecoratorMetadataUtil.findTypeName(type)}>`);
|
|
170
78
|
}
|
|
171
|
-
serialize(data,
|
|
79
|
+
serialize(data, typeName, subtype) {
|
|
172
80
|
if (data == undefined) {
|
|
173
81
|
return data;
|
|
174
82
|
}
|
|
175
|
-
else if (this._primitives.indexOf(
|
|
83
|
+
else if (typeName && this._primitives.indexOf(typeName.toLowerCase()) !== -1) {
|
|
176
84
|
return data;
|
|
177
85
|
}
|
|
178
|
-
else if (
|
|
86
|
+
else if (typeName && typeName.lastIndexOf('Array<', 0) === 0) {
|
|
179
87
|
// string.startsWith pre es6
|
|
180
|
-
let subType =
|
|
88
|
+
let subType = typeName.replace('Array<', ''); // Array<Type> => Type>
|
|
181
89
|
subType = subType.substring(0, subType.length - 1); // Type> => Type
|
|
182
90
|
const transformedData = [];
|
|
183
91
|
// tslint:disable-next-line:prefer-for-of
|
|
@@ -187,22 +95,25 @@ export class ObjectSerializer {
|
|
|
187
95
|
}
|
|
188
96
|
return transformedData;
|
|
189
97
|
}
|
|
190
|
-
else if (
|
|
98
|
+
else if (typeName === 'Date') {
|
|
191
99
|
const dateOnly = subtype === 'date';
|
|
192
100
|
return DateUtil.toIsoString(data, this.dateTimeInUtc, this.dateTimeWithTimezone, this.dateTimeWithMillis, dateOnly);
|
|
193
101
|
}
|
|
194
|
-
else {
|
|
195
|
-
|
|
102
|
+
else if (typeName) {
|
|
103
|
+
const enumType = TypeRegistry.get().findEnum(typeName);
|
|
104
|
+
if (enumType) {
|
|
196
105
|
return data;
|
|
197
106
|
}
|
|
198
|
-
|
|
107
|
+
const type = TypeRegistry.get().findType(typeName);
|
|
108
|
+
if (!type) {
|
|
199
109
|
// in case we dont know the type
|
|
200
110
|
return data;
|
|
201
111
|
}
|
|
202
112
|
// Get the actual type of this object
|
|
203
|
-
|
|
113
|
+
const correctedTypeName = this.findCorrectType(data, typeName);
|
|
114
|
+
const correctedType = TypeRegistry.get().findType(correctedTypeName);
|
|
204
115
|
// get the map for the correct type.
|
|
205
|
-
const attributeTypes =
|
|
116
|
+
const attributeTypes = correctedType.getAttributeTypeMap();
|
|
206
117
|
const instance = {};
|
|
207
118
|
// tslint:disable-next-line:prefer-for-of
|
|
208
119
|
for (let index = 0; index < attributeTypes.length; index++) {
|
|
@@ -211,25 +122,28 @@ export class ObjectSerializer {
|
|
|
211
122
|
}
|
|
212
123
|
return instance;
|
|
213
124
|
}
|
|
125
|
+
else {
|
|
126
|
+
return data;
|
|
127
|
+
}
|
|
214
128
|
}
|
|
215
129
|
deserializeClass(data, type) {
|
|
216
|
-
return this.deserialize(data,
|
|
130
|
+
return this.deserialize(data, DecoratorMetadataUtil.findTypeName(type) ?? undefined);
|
|
217
131
|
}
|
|
218
132
|
deserializeClassArray(data, type) {
|
|
219
|
-
return this.deserialize(data, `Array<${
|
|
133
|
+
return this.deserialize(data, `Array<${DecoratorMetadataUtil.findTypeName(type)}>`);
|
|
220
134
|
}
|
|
221
135
|
deserialize(data, type) {
|
|
222
136
|
// polymorphism may change the actual type.
|
|
223
|
-
|
|
224
|
-
if (data == undefined) {
|
|
137
|
+
if (data == undefined || !type) {
|
|
225
138
|
return data;
|
|
226
139
|
}
|
|
227
|
-
|
|
140
|
+
const correctedTypeName = this.findCorrectType(data, type);
|
|
141
|
+
if (this._primitives.indexOf(correctedTypeName.toLowerCase()) !== -1) {
|
|
228
142
|
return data;
|
|
229
143
|
}
|
|
230
|
-
else if (
|
|
144
|
+
else if (correctedTypeName.lastIndexOf('Array<', 0) === 0) {
|
|
231
145
|
// string.startsWith pre es6
|
|
232
|
-
let subType =
|
|
146
|
+
let subType = correctedTypeName.replace('Array<', ''); // Array<Type> => Type>
|
|
233
147
|
subType = subType.substring(0, subType.length - 1); // Type> => Type
|
|
234
148
|
const transformedData = [];
|
|
235
149
|
// tslint:disable-next-line:prefer-for-of
|
|
@@ -239,20 +153,22 @@ export class ObjectSerializer {
|
|
|
239
153
|
}
|
|
240
154
|
return transformedData;
|
|
241
155
|
}
|
|
242
|
-
else if (
|
|
156
|
+
else if (correctedTypeName === 'Date') {
|
|
243
157
|
return new Date(data);
|
|
244
158
|
}
|
|
245
159
|
else {
|
|
246
|
-
|
|
160
|
+
const enumType = TypeRegistry.get().findEnum(correctedTypeName);
|
|
161
|
+
if (enumType) {
|
|
247
162
|
// is Enum
|
|
248
163
|
return data;
|
|
249
164
|
}
|
|
250
|
-
|
|
165
|
+
const correctedType = TypeRegistry.get().findType(correctedTypeName);
|
|
166
|
+
if (!correctedType) {
|
|
251
167
|
// dont know the type
|
|
252
168
|
return data;
|
|
253
169
|
}
|
|
254
|
-
const instance = new
|
|
255
|
-
const attributeTypes =
|
|
170
|
+
const instance = new correctedType();
|
|
171
|
+
const attributeTypes = correctedType.getAttributeTypeMap();
|
|
256
172
|
// tslint:disable-next-line:prefer-for-of
|
|
257
173
|
for (let index = 0; index < attributeTypes.length; index++) {
|
|
258
174
|
const attributeType = attributeTypes[index];
|
|
@@ -262,4 +178,4 @@ export class ObjectSerializer {
|
|
|
262
178
|
}
|
|
263
179
|
}
|
|
264
180
|
}
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlcmlhbGl6ZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL29iamVjdC1zZXJpYWxpemVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQW9DLFlBQVksRUFBRSxXQUFXLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFdkYsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUVxQixpQkFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ2xDLGdCQUFXLEdBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckcsYUFBUSxHQUF3QjtZQUM3QyxHQUFHLFdBQVc7U0FDakIsQ0FBQztRQUNlLGFBQVEsR0FBd0I7WUFDN0MsR0FBRyxZQUFZO1NBQ2xCLENBQUM7UUFDRixnRkFBZ0Y7UUFFeEUsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLElBQUksQ0FBQztJQXdRdEMsQ0FBQzthQXJSa0IsY0FBUyxHQUFxQixJQUFJLGdCQUFnQixFQUFFLEFBQTNDLENBQTRDO0lBZXBFLElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENB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QUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRztZQUNELE9BQU8sUUFBUSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9nTGV2ZWxFbnVtfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRlVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7QXR0cmlidXRlRGVmLCBTZXJpYWxpemFibGVUeXBlTWFwLCBlbnVtc01hcEJhc2UsIHR5cGVNYXBCYXNlfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgT2JqZWN0U2VyaWFsaXplciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBPYmplY3RTZXJpYWxpemVyID0gbmV3IE9iamVjdFNlcmlhbGl6ZXIoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sb2dDYXRlZ29yeSA9ICdPYmplY3RTZXJpYWxpemVyJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmltaXRpdmVzOiBzdHJpbmdbXSA9IFsnc3RyaW5nJywgJ2Jvb2xlYW4nLCAnZG91YmxlJywgJ2ludGVnZXInLCAnbG9uZycsICdmbG9hdCcsICdudW1iZXInLCAnYW55J107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHlwZU1hcDogU2VyaWFsaXphYmxlVHlwZU1hcCA9IHtcbiAgICAgICAgLi4udHlwZU1hcEJhc2VcbiAgICB9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VudW1NYXA6IFNlcmlhbGl6YWJsZVR5cGVNYXAgPSB7XG4gICAgICAgIC4uLmVudW1zTWFwQmFzZVxuICAgIH07XG4gICAgLy8gcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyID0gTW5nTG9nZ2VyU2VydmljZS5nZXQoKS5jcmVhdGUoJ09iamVjdFNlcmlhbGl6ZXInKTtcblxuICAgIHByaXZhdGUgZGF0ZVRpbWVJblV0YyA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhUaW1lem9uZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhNaWxsaXMgPSB0cnVlO1xuXG4gICAgcHVibGljIGdldCBwcmltaXRpdmVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbWl0aXZlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGVNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlTWFwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bU1hcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1NYXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT25seSB1c2Ugb25lIGluc3RhbmNlIG9mIG9iamVjdCAob3V0IG9mIEFuZ3VsYXIgY29udGV4dClcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldCgpOiBPYmplY3RTZXJpYWxpemVyIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdFNlcmlhbGl6ZXIuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQXR0cmlidXRlRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHR5cGU6IENsYXNzVHlwZTxhbnk+LCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBBdHRyaWJ1dGVEZWYgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEF0dHJpYnV0ZURlZmluaXRpb24oVHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpLCBhdHRyaWJ1dGVOYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZURlZmluaXRpb24odHlwZU5hbWU6IHN0cmluZywgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogQXR0cmlidXRlRGVmIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZURlZnMgPSB0aGlzLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbih0eXBlTmFtZSk7XG4gICAgICAgIGlmICghYXR0cmlidXRlRGVmcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlRGVmcykge1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5uYW1lID09PSBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uQnlDbGFzc1R5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4pOiBBcnJheTxBdHRyaWJ1dGVEZWY+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbihUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQXR0cmlidXRlc0RlZmluaXRpb24odHlwZU5hbWU6IHN0cmluZyk6IEFycmF5PEF0dHJpYnV0ZURlZj4gfCBudWxsIHtcbiAgICAgICAgY29uc3QgdHlwZURlZiA9IHRoaXMuZmluZFR5cGUodHlwZU5hbWUpO1xuICAgICAgICBpZiAoIXR5cGVEZWYgfHwgdHlwZW9mIHR5cGVEZWYuZ2V0QXR0cmlidXRlVHlwZU1hcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVEZWYuZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PEF0dHJpYnV0ZURlZj47XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRCeUNsYXNzVHlwZSh0eXBlOiBDbGFzc1R5cGU8YW55Pik6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRUeXBlKFR5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRUeXBlKHR5cGVOYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcFt0eXBlTmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRFbnVtKGVudW1OYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bU1hcFtlbnVtTmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZShjb25maWc6IHtkYXRlVGltZUluVXRjPzogYm9vbGVhbjsgZGF0ZVRpbWVXaXRoVGltZXpvbmU/OiBib29sZWFuOyBkYXRlVGltZVdpdGhNaWxsaXM/OiBib29sZWFufSk6IHZvaWQge1xuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lSW5VdGMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUluVXRjID0gY29uZmlnLmRhdGVUaW1lSW5VdGM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZVdpdGhUaW1lem9uZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lID0gY29uZmlnLmRhdGVUaW1lV2l0aFRpbWV6b25lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVXaXRoTWlsbGlzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzID0gY29uZmlnLmRhdGVUaW1lV2l0aE1pbGxpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclR5cGVzKHR5cGVzOiBTZXJpYWxpemFibGVUeXBlTWFwKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHR5cGVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyVHlwZSh0eXBlc1trZXldLCBrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyVHlwZSh0eXBlOiBDbGFzc1R5cGU8YW55Piwgb3B0VHlwZU5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgbmFtZSBmcm9tIG1ldGFkYXRhXG4gICAgICAgIGxldCB0eXBlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoVHlwZVV0aWwudHlwZU5hbWVFeGlzdHModHlwZSkpIHtcbiAgICAgICAgICAgIC8vIGRlZmluZWQgbmFtZSBmcm9tIG9wdGlvbmFsIHR5cGUgbmFtZVxuICAgICAgICAgICAgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0VHlwZU5hbWUpIHtcbiAgICAgICAgICAgIHR5cGVOYW1lID0gb3B0VHlwZU5hbWU7XG4gICAgICAgICAgICAvLyByZWdpc3RlciBtZXRhZGF0YVxuICAgICAgICAgICAgVHlwZVV0aWwuZGVmaW5lUmVmbGVjdFR5cGVOYW1lKHR5cGUsIHR5cGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHlwZU5hbWUpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuX2xvZ2dlci5kZWJ1ZyhgV0FSTklORzogcmVnaXN0ZXJpbmcgdHlwZSAke3R5cGV9IGZhaWxlZCwgYmVjYXVzZSB0eXBlTmFtZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCBhbmQgb3B0aW9uYWwgbmFtZSB3YXMgbm90IHByb3ZpZGVkLmApO1xuICAgICAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5nZXQoKS5sb2coXG4gICAgICAgICAgICAgICAgYFdBUk5JTkc6IHJlZ2lzdGVyaW5nIHR5cGUgJHt0eXBlfSBmYWlsZWQsIGJlY2F1c2UgdHlwZU5hbWUgY291bGQgbm90IGJlIGRldGVybWluZWQgYW5kIG9wdGlvbmFsIG5hbWUgd2FzIG5vdCBwcm92aWRlZC5gLFxuICAgICAgICAgICAgICAgIExvZ0xldmVsRW51bS5EZWJ1ZyxcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dDYXRlZ29yeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3R5cGVNYXBbdHlwZU5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gdGhpcy5fbG9nZ2VyLmRlYnVnKGBXQVJOSU5HOiByZWdpc3RlcmluZyB0eXBlICR7dHlwZX0gdW5kZXIga2V5ICR7dHlwZU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgdHlwZSBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBrZXkuYCk7XG4gICAgICAgICAgICBNbmdMb2dnZXJTZXJ2aWNlLmdldCgpLmxvZyhcbiAgICAgICAgICAgICAgICBgV0FSTklORzogcmVnaXN0ZXJpbmcgdHlwZSAke3R5cGV9IHVuZGVyIGtleSAke3R5cGVOYW1lfSBza2lwcGVkLCBiZWNhdXNlIHR5cGUgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMga2V5LmAsXG4gICAgICAgICAgICAgICAgTG9nTGV2ZWxFbnVtLkRlYnVnLFxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ0NhdGVnb3J5XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdHlwZU1hcFt0eXBlTmFtZV0gPSB0eXBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyRW51bXMoZW51bXM6IFNlcmlhbGl6YWJsZVR5cGVNYXApIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZW51bXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJFbnVtKGVudW1zW2tleV0sIGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJFbnVtKGVudW1UeXBlOiBhbnksIGVudW1OYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgbmFtZSBmcm9tIGRlY29yYXRvclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2VudW1NYXBbZW51bU5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gdGhpcy5fbG9nZ2VyLmRlYnVnKGBSZWdpc3RlcmluZyBlbnVtICR7ZW51bU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgZW51bSBhbHJlYWR5IGV4aXN0cy5gKTtcbiAgICAgICAgICAgIE1uZ0xvZ2dlclNlcnZpY2UuZ2V0KCkubG9nKGBSZWdpc3RlcmluZyBlbnVtICR7ZW51bU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgZW51bSBhbHJlYWR5IGV4aXN0cy5gLCBMb2dMZXZlbEVudW0uRGVidWcsIHRoaXMuX2xvZ0NhdGVnb3J5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFR5cGVVdGlsLmRlZmluZVJlZmxlY3RFbnVtTmFtZShlbnVtVHlwZSwgZW51bU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5fZW51bU1hcFtlbnVtTmFtZV0gPSBlbnVtVHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQ29ycmVjdFR5cGUoZGF0YTogYW55LCBleHBlY3RlZFR5cGU6IHN0cmluZykge1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcHJpbWl0aXZlcy5pbmRleE9mKGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnRGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZW51bU1hcFtleHBlY3RlZFR5cGVdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl90eXBlTWFwW2V4cGVjdGVkVHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyB3L2Ugd2UgZG9uJ3Qga25vdyB0aGUgdHlwZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgZGlzY3JpbWluYXRvclxuICAgICAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclByb3BlcnR5ID0gdGhpcy5fdHlwZU1hcFtleHBlY3RlZFR5cGVdLmRpc2NyaW1pbmF0b3I7XG4gICAgICAgICAgICBpZiAoZGlzY3JpbWluYXRvclByb3BlcnR5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyB0aGUgdHlwZSBkb2VzIG5vdCBoYXZlIGEgZGlzY3JpbWluYXRvci4gdXNlIGl0LlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVtkaXNjcmltaW5hdG9yUHJvcGVydHldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JUeXBlID0gZGF0YVtkaXNjcmltaW5hdG9yUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHlwZU1hcFtkaXNjcmltaW5hdG9yVHlwZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yVHlwZTsgLy8gdXNlIHRoZSB0eXBlIGdpdmVuIGluIHRoZSBkaXNjcmltaW5hdG9yXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyBkaXNjcmltaW5hdG9yIGRpZCBub3QgbWFwIHRvIGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTsgLy8gZGlzY3JpbWluYXRvciB3YXMgbm90IHByZXNlbnQgKG9yIGFuIGVtcHR5IHN0cmluZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VyaWFsaXplQ2xhc3M8VD4oZGF0YTogVCwgdHlwZTogQ2xhc3NUeXBlPFQ+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZShkYXRhLCBUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemVDbGFzc0FycmF5PFQ+KGRhdGE6IEFycmF5PFQ+LCB0eXBlOiBDbGFzc1R5cGU8VD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKGRhdGEsIGBBcnJheTwke1R5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKX0+YCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlcmlhbGl6ZShkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgc3VidHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcHJpbWl0aXZlcy5pbmRleE9mKHR5cGUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlLmxhc3RJbmRleE9mKCdBcnJheTwnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc3RyaW5nLnN0YXJ0c1dpdGggcHJlIGVzNlxuICAgICAgICAgICAgbGV0IHN1YlR5cGU6IHN0cmluZyA9IHR5cGUucmVwbGFjZSgnQXJyYXk8JywgJycpOyAvLyBBcnJheTxUeXBlPiA9PiBUeXBlPlxuICAgICAgICAgICAgc3ViVHlwZSA9IHN1YlR5cGUuc3Vic3RyaW5nKDAsIHN1YlR5cGUubGVuZ3RoIC0gMSk7IC8vIFR5cGU+ID0+IFR5cGVcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YTogYW55W10gPSBbXTtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXR1bSA9IGRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkRGF0YS5wdXNoKHRoaXMuc2VyaWFsaXplKGRhdHVtLCBzdWJUeXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdEYXRlJykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHkgPSBzdWJ0eXBlID09PSAnZGF0ZSc7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZVV0aWwudG9Jc29TdHJpbmcoZGF0YSwgdGhpcy5kYXRlVGltZUluVXRjLCB0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lLCB0aGlzLmRhdGVUaW1lV2l0aE1pbGxpcywgZGF0ZU9ubHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VudW1NYXBbdHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fdHlwZU1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugd2UgZG9udCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgYWN0dWFsIHR5cGUgb2YgdGhpcyBvYmplY3RcbiAgICAgICAgICAgIHR5cGUgPSB0aGlzLmZpbmRDb3JyZWN0VHlwZShkYXRhLCB0eXBlKTtcblxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBtYXAgZm9yIHRoZSBjb3JyZWN0IHR5cGUuXG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlcyA9IHRoaXMuX3R5cGVNYXBbdHlwZV0uZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PEF0dHJpYnV0ZURlZj47XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZToge1tpbmRleDogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gYXR0cmlidXRlVHlwZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZVR5cGUuYmFzZU5hbWVdID0gdGhpcy5zZXJpYWxpemUoZGF0YVthdHRyaWJ1dGVUeXBlLm5hbWVdLCBhdHRyaWJ1dGVUeXBlLnR5cGUsIGF0dHJpYnV0ZVR5cGUuc3VidHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZXJpYWxpemVDbGFzczxUPihkYXRhOiBhbnksIHR5cGU6IENsYXNzVHlwZTxUPik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXNlcmlhbGl6ZShkYXRhLCBUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlcmlhbGl6ZUNsYXNzQXJyYXk8VD4oZGF0YTogYW55LCB0eXBlOiBDbGFzc1R5cGU8VD4pOiBBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplKGRhdGEsIGBBcnJheTwke1R5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKX0+YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VyaWFsaXplKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIHBvbHltb3JwaGlzbSBtYXkgY2hhbmdlIHRoZSBhY3R1YWwgdHlwZS5cbiAgICAgICAgdHlwZSA9IHRoaXMuZmluZENvcnJlY3RUeXBlKGRhdGEsIHR5cGUpO1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ByaW1pdGl2ZXMuaW5kZXhPZih0eXBlLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5sYXN0SW5kZXhPZignQXJyYXk8JywgMCkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIHN0cmluZy5zdGFydHNXaXRoIHByZSBlczZcbiAgICAgICAgICAgIGxldCBzdWJUeXBlOiBzdHJpbmcgPSB0eXBlLnJlcGxhY2UoJ0FycmF5PCcsICcnKTsgLy8gQXJyYXk8VHlwZT4gPT4gVHlwZT5cbiAgICAgICAgICAgIHN1YlR5cGUgPSBzdWJUeXBlLnN1YnN0cmluZygwLCBzdWJUeXBlLmxlbmd0aCAtIDEpOyAvLyBUeXBlPiA9PiBUeXBlXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGE6IGFueVtdID0gW107XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0dW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZERhdGEucHVzaCh0aGlzLmRlc2VyaWFsaXplKGRhdHVtLCBzdWJUeXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdEYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VudW1NYXBbdHlwZV0pIHtcbiAgICAgICAgICAgICAgICAvLyBpcyBFbnVtXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdHlwZU1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgIC8vIGRvbnQga25vdyB0aGUgdHlwZVxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgdGhpcy5fdHlwZU1hcFt0eXBlXSgpO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVHlwZXMgPSB0aGlzLl90eXBlTWFwW3R5cGVdLmdldEF0dHJpYnV0ZVR5cGVNYXAoKSBhcyBBcnJheTxBdHRyaWJ1dGVEZWY+O1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gYXR0cmlidXRlVHlwZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZVR5cGUubmFtZV0gPSB0aGlzLmRlc2VyaWFsaXplKGRhdGFbYXR0cmlidXRlVHlwZS5iYXNlTmFtZV0sIGF0dHJpYnV0ZVR5cGUudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlcmlhbGl6ZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL29iamVjdC1zZXJpYWxpemVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRTFELE9BQU8sRUFBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFNUQsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUVxQixpQkFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ2xDLGdCQUFXLEdBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFOUcsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLElBQUksQ0FBQztJQTZLdEMsQ0FBQzthQW5Ma0IsY0FBUyxHQUFxQixJQUFJLGdCQUFnQixFQUFFLEFBQTNDLENBQTRDO0lBUXBFLElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEdBQUc7UUFDYixPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQStGO1FBQzVHLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxNQUFNLENBQUMsb0JBQW9CLEtBQUssU0FBUyxFQUFFO1lBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUM7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QUNoRSxJQUFJLFFBQVEsRUFBRTtnQkFDVixVQUFVO2dCQUNWLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDaEIscUJBQXFCO2dCQUNyQixPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsbUJBQW1CLEVBQThCLENBQUM7WUFDdkYseUNBQXlDO1lBQ3pDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN4RCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRztZQUNELE9BQU8sUUFBUSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1R5cGVSZWdpc3RyeX0gZnJvbSAnLi4vLi4vcmVnaXN0cnkvdHlwZS5yZWdpc3RyeSc7XG5pbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRlVXRpbCwgRGVjb3JhdG9yTWV0YWRhdGFVdGlsfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RTZXJpYWxpemVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IE9iamVjdFNlcmlhbGl6ZXIgPSBuZXcgT2JqZWN0U2VyaWFsaXplcigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvZ0NhdGVnb3J5ID0gJ09iamVjdFNlcmlhbGl6ZXInO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ByaW1pdGl2ZXM6IHN0cmluZ1tdID0gWydzdHJpbmcnLCAnYm9vbGVhbicsICdkb3VibGUnLCAnaW50ZWdlcicsICdsb25nJywgJ2Zsb2F0JywgJ251bWJlcicsICdhbnknXTtcblxuICAgIHByaXZhdGUgZGF0ZVRpbWVJblV0YyA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhUaW1lem9uZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhNaWxsaXMgPSB0cnVlO1xuXG4gICAgcHVibGljIGdldCBwcmltaXRpdmVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbWl0aXZlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbmx5IHVzZSBvbmUgaW5zdGFuY2Ugb2Ygb2JqZWN0IChvdXQgb2YgQW5ndWxhciBjb250ZXh0KVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0KCk6IE9iamVjdFNlcmlhbGl6ZXIge1xuICAgICAgICByZXR1cm4gT2JqZWN0U2VyaWFsaXplci5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZShjb25maWc6IHtkYXRlVGltZUluVXRjPzogYm9vbGVhbjsgZGF0ZVRpbWVXaXRoVGltZXpvbmU/OiBib29sZWFuOyBkYXRlVGltZVdpdGhNaWxsaXM/OiBib29sZWFufSk6IHZvaWQge1xuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lSW5VdGMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUluVXRjID0gY29uZmlnLmRhdGVUaW1lSW5VdGM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZVdpdGhUaW1lem9uZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lID0gY29uZmlnLmRhdGVUaW1lV2l0aFRpbWV6b25lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVXaXRoTWlsbGlzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzID0gY29uZmlnLmRhdGVUaW1lV2l0aE1pbGxpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQ29ycmVjdFR5cGUoZGF0YTogYW55LCBleHBlY3RlZFR5cGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGVOYW1lO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ByaW1pdGl2ZXMuaW5kZXhPZihleHBlY3RlZFR5cGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZU5hbWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlTmFtZSA9PT0gJ0RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlTmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1UeXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKGV4cGVjdGVkVHlwZU5hbWUpO1xuICAgICAgICAgICAgaWYgKGVudW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZU5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBUeXBlUmVnaXN0cnkuZ2V0KCkuZmluZFR5cGUoZXhwZWN0ZWRUeXBlTmFtZSk7XG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlTmFtZTsgLy8gdy9lIHdlIGRvbid0IGtub3cgdGhlIHR5cGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JQcm9wZXJ0eSA9IHR5cGUuZGlzY3JpbWluYXRvcjtcbiAgICAgICAgICAgIGlmIChkaXNjcmltaW5hdG9yUHJvcGVydHkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGVOYW1lOyAvLyB0aGUgdHlwZSBkb2VzIG5vdCBoYXZlIGEgZGlzY3JpbWluYXRvci4gdXNlIGl0LlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVtkaXNjcmltaW5hdG9yUHJvcGVydHldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JUeXBlID0gZGF0YVtkaXNjcmltaW5hdG9yUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRUeXBlKGV4cGVjdGVkVHlwZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc2NyaW1pbmF0b3JUeXBlOyAvLyB1c2UgdGhlIHR5cGUgZ2l2ZW4gaW4gdGhlIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGVOYW1lOyAvLyBkaXNjcmltaW5hdG9yIGRpZCBub3QgbWFwIHRvIGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZU5hbWU7IC8vIGRpc2NyaW1pbmF0b3Igd2FzIG5vdCBwcmVzZW50IChvciBhbiBlbXB0eSBzdHJpbmcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlcmlhbGl6ZUNsYXNzPFQ+KGRhdGE6IFQsIHR5cGU6IENsYXNzVHlwZTxUPikge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoZGF0YSwgRGVjb3JhdG9yTWV0YWRhdGFVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSA/PyB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemVDbGFzc0FycmF5PFQ+KGRhdGE6IEFycmF5PFQ+LCB0eXBlOiBDbGFzc1R5cGU8VD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKGRhdGEsIGBBcnJheTwke0RlY29yYXRvck1ldGFkYXRhVXRpbC5maW5kVHlwZU5hbWUodHlwZSl9PmApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemUoZGF0YTogYW55LCB0eXBlTmFtZT86IHN0cmluZywgc3VidHlwZT86IHN0cmluZykge1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVOYW1lICYmIHRoaXMuX3ByaW1pdGl2ZXMuaW5kZXhPZih0eXBlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVOYW1lICYmIHR5cGVOYW1lLmxhc3RJbmRleE9mKCdBcnJheTwnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc3RyaW5nLnN0YXJ0c1dpdGggcHJlIGVzNlxuICAgICAgICAgICAgbGV0IHN1YlR5cGU6IHN0cmluZyA9IHR5cGVOYW1lLnJlcGxhY2UoJ0FycmF5PCcsICcnKTsgLy8gQXJyYXk8VHlwZT4gPT4gVHlwZT5cbiAgICAgICAgICAgIHN1YlR5cGUgPSBzdWJUeXBlLnN1YnN0cmluZygwLCBzdWJUeXBlLmxlbmd0aCAtIDEpOyAvLyBUeXBlPiA9PiBUeXBlXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGE6IGFueVtdID0gW107XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0dW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZERhdGEucHVzaCh0aGlzLnNlcmlhbGl6ZShkYXR1bSwgc3ViVHlwZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlTmFtZSA9PT0gJ0RhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlT25seSA9IHN1YnR5cGUgPT09ICdkYXRlJztcbiAgICAgICAgICAgIHJldHVybiBEYXRlVXRpbC50b0lzb1N0cmluZyhkYXRhLCB0aGlzLmRhdGVUaW1lSW5VdGMsIHRoaXMuZGF0ZVRpbWVXaXRoVGltZXpvbmUsIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzLCBkYXRlT25seSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1UeXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKHR5cGVOYW1lKTtcbiAgICAgICAgICAgIGlmIChlbnVtVHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRUeXBlKHR5cGVOYW1lKTtcbiAgICAgICAgICAgIGlmICghdHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugd2UgZG9udCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgYWN0dWFsIHR5cGUgb2YgdGhpcyBvYmplY3RcbiAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RlZFR5cGVOYW1lID0gdGhpcy5maW5kQ29ycmVjdFR5cGUoZGF0YSwgdHlwZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY29ycmVjdGVkVHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kVHlwZShjb3JyZWN0ZWRUeXBlTmFtZSk7XG5cbiAgICAgICAgICAgIC8vIGdldCB0aGUgbWFwIGZvciB0aGUgY29ycmVjdCB0eXBlLlxuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVHlwZXMgPSBjb3JyZWN0ZWRUeXBlLmdldEF0dHJpYnV0ZVR5cGVNYXAoKSBhcyBBcnJheTxDbGFzc0F0dHJpYnV0ZURlZj47XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZToge1tpbmRleDogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gYXR0cmlidXRlVHlwZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZVR5cGUuYmFzZU5hbWVdID0gdGhpcy5zZXJpYWxpemUoZGF0YVthdHRyaWJ1dGVUeXBlLm5hbWVdLCBhdHRyaWJ1dGVUeXBlLnR5cGUsIGF0dHJpYnV0ZVR5cGUuc3VidHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlcmlhbGl6ZUNsYXNzPFQ+KGRhdGE6IGFueSwgdHlwZTogQ2xhc3NUeXBlPFQ+KTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplKGRhdGEsIERlY29yYXRvck1ldGFkYXRhVXRpbC5maW5kVHlwZU5hbWUodHlwZSkgPz8gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZXJpYWxpemVDbGFzc0FycmF5PFQ+KGRhdGE6IGFueSwgdHlwZTogQ2xhc3NUeXBlPFQ+KTogQXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXNlcmlhbGl6ZShkYXRhLCBgQXJyYXk8JHtEZWNvcmF0b3JNZXRhZGF0YVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpfT5gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZXJpYWxpemUoZGF0YTogYW55LCB0eXBlPzogc3RyaW5nKSB7XG4gICAgICAgIC8vIHBvbHltb3JwaGlzbSBtYXkgY2hhbmdlIHRoZSBhY3R1YWwgdHlwZS5cbiAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkIHx8ICF0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvcnJlY3RlZFR5cGVOYW1lID0gdGhpcy5maW5kQ29ycmVjdFR5cGUoZGF0YSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ByaW1pdGl2ZXMuaW5kZXhPZihjb3JyZWN0ZWRUeXBlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKGNvcnJlY3RlZFR5cGVOYW1lLmxhc3RJbmRleE9mKCdBcnJheTwnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc3RyaW5nLnN0YXJ0c1dpdGggcHJlIGVzNlxuICAgICAgICAgICAgbGV0IHN1YlR5cGU6IHN0cmluZyA9IGNvcnJlY3RlZFR5cGVOYW1lLnJlcGxhY2UoJ0FycmF5PCcsICcnKTsgLy8gQXJyYXk8VHlwZT4gPT4gVHlwZT5cbiAgICAgICAgICAgIHN1YlR5cGUgPSBzdWJUeXBlLnN1YnN0cmluZygwLCBzdWJUeXBlLmxlbmd0aCAtIDEpOyAvLyBUeXBlPiA9PiBUeXBlXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGE6IGFueVtdID0gW107XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0dW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZERhdGEucHVzaCh0aGlzLmRlc2VyaWFsaXplKGRhdHVtLCBzdWJUeXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKGNvcnJlY3RlZFR5cGVOYW1lID09PSAnRGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1UeXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKGNvcnJlY3RlZFR5cGVOYW1lKTtcbiAgICAgICAgICAgIGlmIChlbnVtVHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGlzIEVudW1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29ycmVjdGVkVHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kVHlwZShjb3JyZWN0ZWRUeXBlTmFtZSk7XG4gICAgICAgICAgICBpZiAoIWNvcnJlY3RlZFR5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyBkb250IGtub3cgdGhlIHR5cGVcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IGNvcnJlY3RlZFR5cGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVR5cGVzID0gY29ycmVjdGVkVHlwZS5nZXRBdHRyaWJ1dGVUeXBlTWFwKCkgYXMgQXJyYXk8Q2xhc3NBdHRyaWJ1dGVEZWY+O1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gYXR0cmlidXRlVHlwZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZVR5cGUubmFtZV0gPSB0aGlzLmRlc2VyaWFsaXplKGRhdGFbYXR0cmlidXRlVHlwZS5iYXNlTmFtZV0sIGF0dHJpYnV0ZVR5cGUudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|