@wavemaker/app-ng-runtime 11.14.1-rc.6310 → 11.14.2-rc.6311
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/components/advanced/carousel/bundles/index.umd.js +15 -1
- package/components/advanced/carousel/carousel.directive.d.ts +1 -0
- package/components/advanced/carousel/esm2022/carousel.directive.mjs +16 -2
- package/components/advanced/carousel/fesm2022/index.mjs +15 -1
- package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/bundles/index.umd.js +24 -3
- package/components/advanced/login/esm2022/login.component.mjs +25 -4
- package/components/advanced/login/fesm2022/index.mjs +24 -3
- package/components/advanced/login/fesm2022/index.mjs.map +1 -1
- package/components/advanced/login/login.component.d.ts +5 -2
- package/components/base/bundles/index.umd.js +331 -36
- package/components/base/directives/show-in-device.directive.d.ts +2 -1
- package/components/base/esm2022/directives/show-in-device.directive.mjs +22 -4
- package/components/base/esm2022/pipes/custom-pipes.mjs +10 -10
- package/components/base/esm2022/utils/widget-utils.mjs +3 -3
- package/components/base/esm2022/widgets/common/base/base-container.component.mjs +27 -1
- package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +18 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +68 -7
- package/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +9 -1
- package/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +44 -11
- package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +20 -1
- package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +26 -1
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +44 -4
- package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +16 -1
- package/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +22 -1
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +7 -2
- package/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +5 -3
- package/components/base/esm2022/widgets/framework/widget-registry.mjs +6 -3
- package/components/base/fesm2022/index.mjs +327 -34
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/pipes/custom-pipes.d.ts +5 -5
- package/components/base/widgets/common/base/base-container.component.d.ts +3 -2
- package/components/base/widgets/common/base/base-field-validations.d.ts +1 -0
- package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +3 -2
- package/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +6 -2
- package/components/base/widgets/common/base/partial-container.directive.d.ts +3 -2
- package/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -2
- package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +1 -1
- package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +3 -2
- package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +3 -2
- package/components/basic/anchor/bundles/index.umd.js +13 -1
- package/components/basic/anchor/esm2022/anchor.component.mjs +14 -2
- package/components/basic/anchor/fesm2022/index.mjs +13 -1
- package/components/basic/anchor/fesm2022/index.mjs.map +1 -1
- package/components/basic/html/bundles/index.umd.js +13 -1
- package/components/basic/html/esm2022/html.directive.mjs +14 -2
- package/components/basic/html/fesm2022/index.mjs +13 -1
- package/components/basic/html/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/bundles/index.umd.js +17 -1
- package/components/basic/label/esm2022/label.directive.mjs +18 -2
- package/components/basic/label/fesm2022/index.mjs +17 -1
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/basic/label/label.directive.d.ts +3 -2
- package/components/basic/progress/progress-circle/bundles/index.umd.js +10 -0
- package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +11 -1
- package/components/basic/progress/progress-circle/fesm2022/index.mjs +10 -0
- package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -1
- package/components/basic/progress/progress-circle/progress-circle.component.d.ts +3 -2
- package/components/basic/search/bundles/index.umd.js +31 -5
- package/components/basic/search/esm2022/scrollable.directive.mjs +13 -4
- package/components/basic/search/esm2022/search.component.mjs +20 -3
- package/components/basic/search/fesm2022/index.mjs +31 -5
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/scrollable.directive.d.ts +5 -3
- package/components/basic/search/search.component.d.ts +3 -2
- package/components/basic/spinner/bundles/index.umd.js +9 -1
- package/components/basic/spinner/esm2022/spinner.component.mjs +10 -2
- package/components/basic/spinner/fesm2022/index.mjs +9 -1
- package/components/basic/spinner/fesm2022/index.mjs.map +1 -1
- package/components/basic/spinner/spinner.component.d.ts +4 -2
- package/components/chart/bundles/index.umd.js +21 -3
- package/components/chart/esm2022/chart.component.mjs +22 -4
- package/components/chart/fesm2022/index.mjs +21 -3
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +3 -2
- package/components/containers/accordion/accordion.directive.d.ts +5 -2
- package/components/containers/accordion/bundles/index.umd.js +49 -2
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +10 -1
- package/components/containers/accordion/esm2022/accordion.directive.mjs +41 -3
- package/components/containers/accordion/fesm2022/index.mjs +49 -2
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/bundles/index.umd.js +13 -0
- package/components/containers/panel/esm2022/panel.component.mjs +14 -1
- package/components/containers/panel/fesm2022/index.mjs +13 -0
- package/components/containers/panel/fesm2022/index.mjs.map +1 -1
- package/components/containers/panel/panel.component.d.ts +3 -2
- package/components/containers/tabs/bundles/index.umd.js +54 -2
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +10 -1
- package/components/containers/tabs/esm2022/tabs.component.mjs +46 -3
- package/components/containers/tabs/fesm2022/index.mjs +54 -2
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +3 -2
- package/components/containers/tabs/tabs.component.d.ts +5 -2
- package/components/containers/wizard/bundles/index.umd.js +47 -3
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +16 -3
- package/components/containers/wizard/esm2022/wizard.component.mjs +33 -2
- package/components/containers/wizard/fesm2022/index.mjs +47 -3
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +3 -2
- package/components/containers/wizard/wizard.component.d.ts +4 -2
- package/components/data/card/bundles/index.umd.js +17 -1
- package/components/data/card/card-content/card-content.component.d.ts +3 -2
- package/components/data/card/card.component.d.ts +4 -2
- package/components/data/card/esm2022/card-content/card-content.component.mjs +6 -1
- package/components/data/card/esm2022/card.component.mjs +13 -2
- package/components/data/card/fesm2022/index.mjs +17 -1
- package/components/data/card/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +92 -0
- package/components/data/form/esm2022/form-action/form-action.directive.mjs +7 -1
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +28 -1
- package/components/data/form/esm2022/form-widget.directive.mjs +8 -1
- package/components/data/form/esm2022/form.component.mjs +27 -1
- package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +7 -1
- package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +12 -1
- package/components/data/form/esm2022/live-form/live-form.directive.mjs +10 -1
- package/components/data/form/fesm2022/index.mjs +92 -0
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/form-action/form-action.directive.d.ts +3 -2
- package/components/data/form/form-field/form-field.directive.d.ts +3 -2
- package/components/data/form/form-widget.directive.d.ts +3 -2
- package/components/data/form/live-actions/live-actions.directive.d.ts +3 -1
- package/components/data/form/live-filter/live-filter.directive.d.ts +3 -1
- package/components/data/form/live-form/live-form.directive.d.ts +3 -1
- package/components/data/list/bundles/index.umd.js +213 -19
- package/components/data/list/esm2022/list-item.directive.mjs +95 -11
- package/components/data/list/esm2022/list.component.mjs +120 -10
- package/components/data/list/fesm2022/index.mjs +213 -19
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/list-item.directive.d.ts +7 -2
- package/components/data/list/list.component.d.ts +7 -0
- package/components/data/live-table/bundles/index.umd.js +13 -1
- package/components/data/live-table/esm2022/live-table.component.mjs +14 -2
- package/components/data/live-table/fesm2022/index.mjs +13 -1
- package/components/data/live-table/fesm2022/index.mjs.map +1 -1
- package/components/data/live-table/live-table.component.d.ts +4 -2
- package/components/data/pagination/bundles/index.umd.js +57 -4
- package/components/data/pagination/esm2022/pagination.component.mjs +58 -5
- package/components/data/pagination/fesm2022/index.mjs +57 -4
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/pagination.component.d.ts +4 -2
- package/components/data/table/bundles/index.umd.js +345 -15
- package/components/data/table/esm2022/table-action/table-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table-column/table-column.directive.mjs +107 -3
- package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +9 -1
- package/components/data/table/esm2022/table-cud.directive.mjs +8 -2
- package/components/data/table/esm2022/table-filter.directive.mjs +12 -2
- package/components/data/table/esm2022/table-row/table-row.directive.mjs +8 -1
- package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table.component.mjs +193 -12
- package/components/data/table/fesm2022/index.mjs +345 -15
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table-action/table-action.directive.d.ts +3 -2
- package/components/data/table/table-column/table-column.directive.d.ts +3 -2
- package/components/data/table/table-column-group/table-column-group.directive.d.ts +3 -2
- package/components/data/table/table-cud.directive.d.ts +3 -1
- package/components/data/table/table-filter.directive.d.ts +3 -1
- package/components/data/table/table-row/table-row.directive.d.ts +3 -2
- package/components/data/table/table-row-action/table-row-action.directive.d.ts +3 -2
- package/components/data/table/table.component.d.ts +6 -2
- package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +3 -2
- package/components/dialogs/alert-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +6 -1
- package/components/dialogs/alert-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/confirm-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +3 -2
- package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +6 -1
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/default/bundles/index.umd.js +15 -2
- package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +4 -2
- package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +16 -3
- package/components/dialogs/default/fesm2022/index.mjs +15 -2
- package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/design-dialog/bundles/index.umd.js +7 -0
- package/components/dialogs/design-dialog/dialog.component.d.ts +3 -2
- package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +8 -1
- package/components/dialogs/design-dialog/fesm2022/index.mjs +7 -0
- package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/bundles/index.umd.js +5 -0
- package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +6 -1
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs +5 -0
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +3 -2
- package/components/dialogs/partial-dialog/bundles/index.umd.js +23 -3
- package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +24 -4
- package/components/dialogs/partial-dialog/fesm2022/index.mjs +23 -3
- package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +4 -2
- package/components/input/base-form/base-form.component.d.ts +4 -2
- package/components/input/base-form/bundles/index.umd.js +16 -2
- package/components/input/base-form/esm2022/base-form.component.mjs +17 -3
- package/components/input/base-form/fesm2022/index.mjs +16 -2
- package/components/input/base-form/fesm2022/index.mjs.map +1 -1
- package/components/input/base-form-custom/base-form-custom.component.d.ts +3 -2
- package/components/input/base-form-custom/bundles/index.umd.js +13 -2
- package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +14 -3
- package/components/input/base-form-custom/fesm2022/index.mjs +13 -2
- package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -1
- package/components/input/checkbox/bundles/index.umd.js +7 -0
- package/components/input/checkbox/checkbox.component.d.ts +3 -2
- package/components/input/checkbox/esm2022/checkbox.component.mjs +8 -1
- package/components/input/checkbox/fesm2022/index.mjs +7 -0
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
- package/components/input/checkboxset/bundles/index.umd.js +18 -2
- package/components/input/checkboxset/checkboxset.component.d.ts +4 -2
- package/components/input/checkboxset/esm2022/checkboxset.component.mjs +19 -3
- package/components/input/checkboxset/fesm2022/index.mjs +18 -2
- package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
- package/components/input/chips/bundles/index.umd.js +45 -5
- package/components/input/chips/chips.component.d.ts +3 -2
- package/components/input/chips/esm2022/chips.component.mjs +46 -6
- package/components/input/chips/fesm2022/index.mjs +45 -5
- package/components/input/chips/fesm2022/index.mjs.map +1 -1
- package/components/input/color-picker/bundles/index.umd.js +8 -0
- package/components/input/color-picker/color-picker.component.d.ts +3 -2
- package/components/input/color-picker/esm2022/color-picker.component.mjs +9 -1
- package/components/input/color-picker/fesm2022/index.mjs +8 -0
- package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
- package/components/input/composite/bundles/index.umd.js +10 -1
- package/components/input/composite/composite.directive.d.ts +3 -2
- package/components/input/composite/esm2022/composite.directive.mjs +11 -2
- package/components/input/composite/fesm2022/index.mjs +10 -1
- package/components/input/composite/fesm2022/index.mjs.map +1 -1
- package/components/input/currency/bundles/index.umd.js +7 -0
- package/components/input/currency/currency.component.d.ts +3 -2
- package/components/input/currency/esm2022/currency.component.mjs +8 -1
- package/components/input/currency/fesm2022/index.mjs +7 -0
- package/components/input/currency/fesm2022/index.mjs.map +1 -1
- package/components/input/dataset-aware-form/bundles/index.umd.js +26 -2
- package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +27 -3
- package/components/input/dataset-aware-form/fesm2022/index.mjs +26 -2
- package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date/bundles/index.umd.js +22 -0
- package/components/input/epoch/date/date.component.d.ts +1 -0
- package/components/input/epoch/date/esm2022/date.component.mjs +23 -1
- package/components/input/epoch/date/fesm2022/index.mjs +22 -0
- package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/bundles/index.umd.js +25 -8
- package/components/input/file-upload/esm2022/file-upload.component.mjs +26 -9
- package/components/input/file-upload/fesm2022/index.mjs +25 -8
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/file-upload.component.d.ts +3 -0
- package/components/input/number/bundles/index.umd.js +8 -0
- package/components/input/number/esm2022/number.component.mjs +9 -1
- package/components/input/number/fesm2022/index.mjs +8 -0
- package/components/input/number/fesm2022/index.mjs.map +1 -1
- package/components/input/number/number.component.d.ts +3 -2
- package/components/input/radioset/bundles/index.umd.js +18 -2
- package/components/input/radioset/esm2022/radioset.component.mjs +19 -3
- package/components/input/radioset/fesm2022/index.mjs +18 -2
- package/components/input/radioset/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/radioset.component.d.ts +4 -2
- package/components/input/rating/bundles/index.umd.js +10 -0
- package/components/input/rating/esm2022/rating.component.mjs +11 -1
- package/components/input/rating/fesm2022/index.mjs +10 -0
- package/components/input/rating/fesm2022/index.mjs.map +1 -1
- package/components/input/rating/rating.component.d.ts +3 -2
- package/components/input/select/bundles/index.umd.js +6 -0
- package/components/input/select/esm2022/select.component.mjs +7 -1
- package/components/input/select/fesm2022/index.mjs +6 -0
- package/components/input/select/fesm2022/index.mjs.map +1 -1
- package/components/input/select/select.component.d.ts +3 -2
- package/components/input/slider/bundles/index.umd.js +10 -0
- package/components/input/slider/esm2022/slider.component.mjs +11 -1
- package/components/input/slider/fesm2022/index.mjs +10 -0
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/slider.component.d.ts +3 -2
- package/components/input/switch/bundles/index.umd.js +22 -2
- package/components/input/switch/esm2022/switch.component.mjs +23 -3
- package/components/input/switch/fesm2022/index.mjs +22 -2
- package/components/input/switch/fesm2022/index.mjs.map +1 -1
- package/components/input/switch/switch.component.d.ts +3 -2
- package/components/input/text/bundles/index.umd.js +36 -0
- package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +8 -1
- package/components/input/text/esm2022/input-color/input-color.component.mjs +8 -1
- package/components/input/text/esm2022/input-email/input-email.component.mjs +8 -1
- package/components/input/text/esm2022/input-number/input-number.component.mjs +8 -1
- package/components/input/text/esm2022/input-text/input-text.component.mjs +9 -1
- package/components/input/text/fesm2022/index.mjs +36 -0
- package/components/input/text/fesm2022/index.mjs.map +1 -1
- package/components/input/text/input-calendar/input-calendar.component.d.ts +3 -2
- package/components/input/text/input-color/input-color.component.d.ts +3 -2
- package/components/input/text/input-email/input-email.component.d.ts +3 -2
- package/components/input/text/input-number/input-number.component.d.ts +3 -2
- package/components/input/text/input-text/input-text.component.d.ts +3 -2
- package/components/input/textarea/bundles/index.umd.js +7 -0
- package/components/input/textarea/esm2022/textarea.component.mjs +8 -1
- package/components/input/textarea/fesm2022/index.mjs +7 -0
- package/components/input/textarea/fesm2022/index.mjs.map +1 -1
- package/components/input/textarea/textarea.component.d.ts +3 -2
- package/components/navigation/menu/bundles/index.umd.js +55 -6
- package/components/navigation/menu/esm2022/menu-adapator.component.mjs +17 -3
- package/components/navigation/menu/esm2022/menu.component.mjs +10 -3
- package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +6 -1
- package/components/navigation/menu/esm2022/nav/nav.component.mjs +11 -1
- package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +16 -3
- package/components/navigation/menu/fesm2022/index.mjs +55 -6
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/menu-adapator.component.d.ts +4 -2
- package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +3 -2
- package/components/navigation/menu/nav/nav.component.d.ts +3 -2
- package/components/navigation/menu/nav/navigation-control.directive.d.ts +4 -2
- package/components/navigation/navbar/bundles/index.umd.js +5 -0
- package/components/navigation/navbar/esm2022/navbar.component.mjs +6 -1
- package/components/navigation/navbar/fesm2022/index.mjs +5 -0
- package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
- package/components/navigation/navbar/navbar.component.d.ts +3 -2
- package/components/navigation/popover/bundles/index.umd.js +65 -13
- package/components/navigation/popover/esm2022/popover.component.mjs +63 -11
- package/components/navigation/popover/fesm2022/index.mjs +62 -10
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +11 -3
- package/components/page/default/bundles/index.umd.js +30 -6
- package/components/page/default/esm2022/layout.directive.mjs +9 -1
- package/components/page/default/esm2022/page-content/page-content.component.mjs +13 -3
- package/components/page/default/esm2022/router-outlet.directive.mjs +13 -6
- package/components/page/default/fesm2022/index.mjs +30 -6
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/components/page/default/layout.directive.d.ts +3 -2
- package/components/page/default/page-content/page-content.component.d.ts +3 -2
- package/components/page/default/router-outlet.directive.d.ts +5 -2
- package/components/page/left-panel/bundles/index.umd.js +16 -0
- package/components/page/left-panel/esm2022/left-panel.directive.mjs +17 -1
- package/components/page/left-panel/fesm2022/index.mjs +16 -0
- package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
- package/components/page/left-panel/left-panel.directive.d.ts +3 -2
- package/components/page/top-nav/bundles/index.umd.js +2 -1
- package/components/page/top-nav/esm2022/top-nav.props.mjs +3 -2
- package/components/page/top-nav/fesm2022/index.mjs +2 -1
- package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
- package/components/prefab/bundles/index.umd.js +4 -0
- package/components/prefab/esm2022/prefab.directive.mjs +5 -1
- package/components/prefab/fesm2022/index.mjs +4 -0
- package/components/prefab/fesm2022/index.mjs.map +1 -1
- package/core/bundles/index.umd.js +391 -94
- package/core/esm2022/public_api.mjs +3 -3
- package/core/esm2022/services/viewport.service.mjs +24 -10
- package/core/esm2022/types/types.mjs +1 -1
- package/core/esm2022/utils/dom.mjs +18 -2
- package/core/esm2022/utils/event-notifier.mjs +5 -2
- package/core/esm2022/utils/lru-cache.mjs +16 -2
- package/core/esm2022/utils/utils.mjs +6 -2
- package/core/esm2022/utils/watcher.mjs +323 -81
- package/core/fesm2022/index.mjs +390 -96
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +2 -2
- package/core/services/viewport.service.d.ts +5 -2
- package/core/types/types.d.ts +1 -0
- package/core/utils/lru-cache.d.ts +6 -0
- package/core/utils/utils.d.ts +1 -0
- package/core/utils/watcher.d.ts +26 -5
- package/http/bundles/index.umd.js +31 -1
- package/http/esm2022/http.service.mjs +32 -2
- package/http/fesm2022/index.mjs +31 -1
- package/http/fesm2022/index.mjs.map +1 -1
- package/http/http.service.d.ts +6 -2
- package/npm-shrinkwrap.json +2 -2
- package/oAuth/bundles/index.umd.js +9 -0
- package/oAuth/esm2022/oAuth.service.mjs +10 -1
- package/oAuth/fesm2022/index.mjs +9 -0
- package/oAuth/fesm2022/index.mjs.map +1 -1
- package/oAuth/oAuth.service.d.ts +3 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +367 -32
- package/runtime/base/components/app-component/app.component.d.ts +4 -0
- package/runtime/base/components/prefab-preview.component.d.ts +5 -2
- package/runtime/base/directives/accessroles.directive.d.ts +4 -3
- package/runtime/base/directives/prefab.directive.d.ts +3 -2
- package/runtime/base/esm2022/components/app-component/app.component.mjs +40 -9
- package/runtime/base/esm2022/components/base-custom-widget.component.mjs +33 -2
- package/runtime/base/esm2022/components/base-layout.component.mjs +7 -1
- package/runtime/base/esm2022/components/base-page.component.mjs +36 -3
- package/runtime/base/esm2022/components/base-partial.component.mjs +37 -3
- package/runtime/base/esm2022/components/base-prefab.component.mjs +32 -3
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +37 -3
- package/runtime/base/esm2022/components/prefab-preview.component.mjs +23 -4
- package/runtime/base/esm2022/directives/accessroles.directive.mjs +11 -2
- package/runtime/base/esm2022/directives/prefab.directive.mjs +9 -1
- package/runtime/base/esm2022/services/app.manager.service.mjs +40 -12
- package/runtime/base/esm2022/services/app.service.mjs +34 -2
- package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +4 -1
- package/runtime/base/esm2022/services/pipe-provider.service.mjs +7 -4
- package/runtime/base/esm2022/services/spinner.service.mjs +15 -1
- package/runtime/base/esm2022/util/fragment-monitor.mjs +23 -2
- package/runtime/base/fesm2022/index.mjs +368 -33
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/base/runtime-base.module.d.ts +2 -2
- package/runtime/base/services/app.manager.service.d.ts +6 -1
- package/runtime/base/services/app.service.d.ts +12 -2
- package/runtime/base/services/dynamic-component-ref-provider.service.d.ts +2 -1
- package/runtime/base/services/spinner.service.d.ts +3 -1
- package/runtime/base/util/fragment-monitor.d.ts +6 -0
- package/runtime/dynamic/bundles/index.umd.js +5 -0
- package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +6 -1
- package/runtime/dynamic/fesm2022/index.mjs +5 -0
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
- package/scripts/datatable/datatable.js +100 -14
- package/security/bundles/index.umd.js +41 -2
- package/security/esm2022/security.service.mjs +42 -3
- package/security/fesm2022/index.mjs +41 -2
- package/security/fesm2022/index.mjs.map +1 -1
- package/security/security.service.d.ts +5 -2
- package/variables/bundles/index.umd.js +50 -6
- package/variables/esm2022/manager/action/notification-action.manager.mjs +18 -3
- package/variables/esm2022/manager/variable/base-variable.manager.mjs +15 -2
- package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +13 -3
- package/variables/esm2022/service/variables.service.mjs +8 -2
- package/variables/fesm2022/index.mjs +50 -6
- package/variables/fesm2022/index.mjs.map +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Injector, OnInit } from '@angular/core';
|
|
1
|
+
import { Injector, OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { BaseComponent } from '@wm/components/base';
|
|
3
3
|
import { FormComponent } from '../form.component';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class FormActionDirective extends BaseComponent implements OnInit {
|
|
5
|
+
export declare class FormActionDirective extends BaseComponent implements OnInit, OnDestroy {
|
|
6
6
|
form: FormComponent;
|
|
7
7
|
static initializeProps: void;
|
|
8
8
|
accessroles: any;
|
|
@@ -29,6 +29,7 @@ export declare class FormActionDirective extends BaseComponent implements OnInit
|
|
|
29
29
|
populateAction(): void;
|
|
30
30
|
ngOnInit(): void;
|
|
31
31
|
onPropertyChange(key: any, nv: any, ov: any): void;
|
|
32
|
+
ngOnDestroy(): void;
|
|
32
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormActionDirective, [null, { optional: true; }, { optional: true; }]>;
|
|
33
34
|
static ɵdir: i0.ɵɵDirectiveDeclaration<FormActionDirective, "[wmFormAction]", never, {}, {}, never, never, true, never>;
|
|
34
35
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { AfterContentInit, Injector, OnInit } from '@angular/core';
|
|
1
|
+
import { AfterContentInit, Injector, OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { FormBuilder, FormGroup } from '@angular/forms';
|
|
3
3
|
import { App, Viewport } from '@wm/core';
|
|
4
4
|
import { StylableComponent } from '@wm/components/base';
|
|
5
5
|
import { ListComponent } from '@wm/components/data/list';
|
|
6
6
|
import { FormComponent } from '../form.component';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
|
-
export declare class FormFieldDirective extends StylableComponent implements OnInit, AfterContentInit {
|
|
8
|
+
export declare class FormFieldDirective extends StylableComponent implements OnInit, AfterContentInit, OnDestroy {
|
|
9
9
|
static initializeProps: void;
|
|
10
10
|
formWidget: any;
|
|
11
11
|
formWidgetMax: any;
|
|
@@ -110,6 +110,7 @@ export declare class FormFieldDirective extends StylableComponent implements OnI
|
|
|
110
110
|
ngOnInit(): void;
|
|
111
111
|
prepareFormWidget(): void;
|
|
112
112
|
ngAfterContentInit(): void;
|
|
113
|
+
ngOnDestroy(): void;
|
|
113
114
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormFieldDirective, [null, null, null, null, null, { optional: true; }, { attribute: "chipclass.bind"; }, { attribute: "dataset.bind"; }, { attribute: "displayexpression.bind"; }, { attribute: "displaylabel.bind"; }, { attribute: "widgettype"; }, { attribute: "name"; }, { attribute: "displayimagesrc.bind"; }, { attribute: "key"; }, { attribute: "is-range"; }, { attribute: "pc-display"; }, { attribute: "mobile-display"; }, { attribute: "tablet-display"; }, { self: true; }, { optional: true; }]>;
|
|
114
115
|
static ɵdir: i0.ɵɵDirectiveDeclaration<FormFieldDirective, "[wmFormField]", ["wmFormField"], {}, {}, ["formWidget", "formWidgetMax"], never, true, never>;
|
|
115
116
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { FormBuilder, FormGroup } from '@angular/forms';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class FormWidgetDirective implements OnInit {
|
|
4
|
+
export declare class FormWidgetDirective implements OnInit, OnDestroy {
|
|
5
5
|
componentInstance: any;
|
|
6
6
|
name: any;
|
|
7
7
|
key: any;
|
|
@@ -13,6 +13,7 @@ export declare class FormWidgetDirective implements OnInit {
|
|
|
13
13
|
addControl(fieldName: any): void;
|
|
14
14
|
createControl(): any;
|
|
15
15
|
ngOnInit(): void;
|
|
16
|
+
ngOnDestroy(): void;
|
|
16
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormWidgetDirective, [{ optional: true; }, { optional: true; }, { self: true; }, null, { attribute: "name"; }, { attribute: "key"; }]>;
|
|
17
18
|
static ɵdir: i0.ɵɵDirectiveDeclaration<FormWidgetDirective, "[wmFormWidget]", never, {}, {}, never, never, true, never>;
|
|
18
19
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
|
1
2
|
import { AbstractDialogService, App } from '@wm/core';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
|
-
export declare class LiveActionsDirective {
|
|
4
|
+
export declare class LiveActionsDirective implements OnDestroy {
|
|
4
5
|
private subscribedWidget;
|
|
5
6
|
private app;
|
|
6
7
|
private dialogService;
|
|
@@ -17,6 +18,7 @@ export declare class LiveActionsDirective {
|
|
|
17
18
|
private deleteRecord;
|
|
18
19
|
private performOperation;
|
|
19
20
|
call(operation: any, options: any, success?: any, error?: any): void;
|
|
21
|
+
ngOnDestroy(): void;
|
|
20
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<LiveActionsDirective, [{ self: true; }, null, null]>;
|
|
21
23
|
static ɵdir: i0.ɵɵDirectiveDeclaration<LiveActionsDirective, "[wmLiveActions]", never, {}, {}, never, never, true, never>;
|
|
22
24
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
|
1
2
|
import * as i0 from "@angular/core";
|
|
2
|
-
export declare class LiveFilterDirective {
|
|
3
|
+
export declare class LiveFilterDirective implements OnDestroy {
|
|
3
4
|
private form;
|
|
4
5
|
static initializeProps: void;
|
|
5
6
|
private _options;
|
|
@@ -17,6 +18,7 @@ export declare class LiveFilterDirective {
|
|
|
17
18
|
filter(options?: any): any;
|
|
18
19
|
filterOnDefault(): void;
|
|
19
20
|
registerFormWidget(widget: any): void;
|
|
21
|
+
ngOnDestroy(): void;
|
|
20
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<LiveFilterDirective, [{ self: true; }]>;
|
|
21
23
|
static ɵdir: i0.ɵɵDirectiveDeclaration<LiveFilterDirective, "[wmLiveFilter]", never, {}, {}, never, never, true, never>;
|
|
22
24
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
|
1
2
|
import { AbstractDialogService } from '@wm/core';
|
|
2
3
|
import { ToDatePipe } from '@wm/components/base';
|
|
3
4
|
import { LiveTableComponent } from '@wm/components/data/live-table';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class LiveFormDirective {
|
|
6
|
+
export declare class LiveFormDirective implements OnDestroy {
|
|
6
7
|
private form;
|
|
7
8
|
datePipe: ToDatePipe;
|
|
8
9
|
private dialogService;
|
|
@@ -37,6 +38,7 @@ export declare class LiveFormDirective {
|
|
|
37
38
|
saveAndView(): void;
|
|
38
39
|
submitForm($event: any): void;
|
|
39
40
|
save(event?: any, updateMode?: any, newForm?: any): void;
|
|
41
|
+
ngOnDestroy(): void;
|
|
40
42
|
static ɵfac: i0.ɵɵFactoryDeclaration<LiveFormDirective, [{ self: true; }, { optional: true; }, null, null, { attribute: "formlayout"; }]>;
|
|
41
43
|
static ɵdir: i0.ɵɵDirectiveDeclaration<LiveFormDirective, "[wmLiveForm]", never, {}, {}, never, never, true, never>;
|
|
42
44
|
}
|
|
@@ -152,28 +152,36 @@
|
|
|
152
152
|
const $editItem = this.nativeElement.querySelector('.edit-list-item');
|
|
153
153
|
const $deleteItem = this.nativeElement.querySelector('.delete-list-item');
|
|
154
154
|
if ($editItem) {
|
|
155
|
-
//
|
|
156
|
-
|
|
155
|
+
// MEMORY LEAK FIX: Store bound handler for cleanup
|
|
156
|
+
this.boundEditHandler = (evt) => {
|
|
157
157
|
this.listComponent.update();
|
|
158
|
-
}
|
|
158
|
+
};
|
|
159
|
+
// Triggered on click of edit action
|
|
160
|
+
$editItem.addEventListener('click', this.boundEditHandler);
|
|
159
161
|
}
|
|
160
162
|
if ($deleteItem) {
|
|
161
|
-
//
|
|
162
|
-
|
|
163
|
+
// MEMORY LEAK FIX: Store bound handler for cleanup
|
|
164
|
+
this.boundDeleteHandler = (evt) => {
|
|
163
165
|
this.listComponent.delete();
|
|
164
|
-
}
|
|
166
|
+
};
|
|
167
|
+
// Triggered on click of delete action
|
|
168
|
+
$deleteItem.addEventListener('click', this.boundDeleteHandler);
|
|
165
169
|
}
|
|
166
170
|
}
|
|
167
171
|
ngOnInit() {
|
|
168
172
|
if (this.listComponent.mouseEnterCB) {
|
|
169
|
-
|
|
173
|
+
// MEMORY LEAK FIX: Store bound handler for cleanup
|
|
174
|
+
this.boundMouseEnterHandler = ($event) => {
|
|
170
175
|
this.listComponent.invokeEventCallback('mouseenter', { widget: this, $event });
|
|
171
|
-
}
|
|
176
|
+
};
|
|
177
|
+
this.nativeElement.addEventListener('mouseenter', this.boundMouseEnterHandler);
|
|
172
178
|
}
|
|
173
179
|
if (this.listComponent.mouseLeaveCB) {
|
|
174
|
-
|
|
180
|
+
// MEMORY LEAK FIX: Store bound handler for cleanup
|
|
181
|
+
this.boundMouseLeaveHandler = ($event) => {
|
|
175
182
|
this.listComponent.invokeEventCallback('mouseleave', { widget: this, $event });
|
|
176
|
-
}
|
|
183
|
+
};
|
|
184
|
+
this.nativeElement.addEventListener('mouseleave', this.boundMouseLeaveHandler);
|
|
177
185
|
}
|
|
178
186
|
// adding item attribute on every list item
|
|
179
187
|
$(this.nativeElement).attr('listitemindex', this.$index);
|
|
@@ -189,6 +197,82 @@
|
|
|
189
197
|
}
|
|
190
198
|
});
|
|
191
199
|
}
|
|
200
|
+
ngOnDestroy() {
|
|
201
|
+
// MEMORY LEAK FIX: Remove event listeners
|
|
202
|
+
if (this.boundMouseEnterHandler && this.nativeElement) {
|
|
203
|
+
try {
|
|
204
|
+
this.nativeElement.removeEventListener('mouseenter', this.boundMouseEnterHandler);
|
|
205
|
+
}
|
|
206
|
+
catch (e) {
|
|
207
|
+
// Silently handle cleanup errors
|
|
208
|
+
}
|
|
209
|
+
this.boundMouseEnterHandler = null;
|
|
210
|
+
}
|
|
211
|
+
if (this.boundMouseLeaveHandler && this.nativeElement) {
|
|
212
|
+
try {
|
|
213
|
+
this.nativeElement.removeEventListener('mouseleave', this.boundMouseLeaveHandler);
|
|
214
|
+
}
|
|
215
|
+
catch (e) {
|
|
216
|
+
// Silently handle cleanup errors
|
|
217
|
+
}
|
|
218
|
+
this.boundMouseLeaveHandler = null;
|
|
219
|
+
}
|
|
220
|
+
if (this.nativeElement) {
|
|
221
|
+
const $editItem = this.nativeElement.querySelector('.edit-list-item');
|
|
222
|
+
if ($editItem && this.boundEditHandler) {
|
|
223
|
+
try {
|
|
224
|
+
$editItem.removeEventListener('click', this.boundEditHandler);
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
// Silently handle cleanup errors
|
|
228
|
+
}
|
|
229
|
+
this.boundEditHandler = null;
|
|
230
|
+
}
|
|
231
|
+
const $deleteItem = this.nativeElement.querySelector('.delete-list-item');
|
|
232
|
+
if ($deleteItem && this.boundDeleteHandler) {
|
|
233
|
+
try {
|
|
234
|
+
$deleteItem.removeEventListener('click', this.boundDeleteHandler);
|
|
235
|
+
}
|
|
236
|
+
catch (e) {
|
|
237
|
+
// Silently handle cleanup errors
|
|
238
|
+
}
|
|
239
|
+
this.boundDeleteHandler = null;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// MEMORY LEAK FIX: Clear currentItemWidgets cache
|
|
243
|
+
// The _currentItemWidgets object accumulates references to all child widgets
|
|
244
|
+
// which prevents them from being garbage collected
|
|
245
|
+
if (this._currentItemWidgets) {
|
|
246
|
+
Object.keys(this._currentItemWidgets).forEach(key => {
|
|
247
|
+
delete this._currentItemWidgets[key];
|
|
248
|
+
});
|
|
249
|
+
this._currentItemWidgets = null;
|
|
250
|
+
}
|
|
251
|
+
// MEMORY LEAK FIX: Clear context to release references
|
|
252
|
+
if (this.context) {
|
|
253
|
+
Object.keys(this.context).forEach(key => {
|
|
254
|
+
delete this.context[key];
|
|
255
|
+
});
|
|
256
|
+
this.context = null;
|
|
257
|
+
}
|
|
258
|
+
// MEMORY LEAK FIX: Clear ViewContainerRef reference
|
|
259
|
+
if (this.viewContainerRef) {
|
|
260
|
+
this.viewContainerRef = null;
|
|
261
|
+
}
|
|
262
|
+
// MEMORY LEAK FIX: Complete the destroy subject
|
|
263
|
+
if (this.destroy) {
|
|
264
|
+
try {
|
|
265
|
+
if (!this.destroy.closed) {
|
|
266
|
+
this.destroy.next(null);
|
|
267
|
+
this.destroy.complete();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
catch (e) {
|
|
271
|
+
// Silently handle cleanup errors
|
|
272
|
+
}
|
|
273
|
+
this.destroy = null;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
192
276
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: ListItemDirective, deps: [{ token: i0__namespace.Injector }, { token: i0__namespace.ElementRef }, { token: i2__namespace.App }], target: i0__namespace.ɵɵFactoryTarget.Directive }); }
|
|
193
277
|
static { this.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ListItemDirective, isStandalone: true, selector: "[wmListItem]", inputs: { wmListItem: "wmListItem" }, host: { listeners: { "focus": "onFocus()" }, properties: { "class.active": "this.isActive", "class.disable-item": "this.disableItem" } }, exportAs: ["listItemRef"], ngImport: i0__namespace }); }
|
|
194
278
|
}
|
|
@@ -575,8 +659,10 @@
|
|
|
575
659
|
this.allowpagesizechange = nv;
|
|
576
660
|
}
|
|
577
661
|
else if (key === 'pagesizeoptions') {
|
|
578
|
-
this.
|
|
579
|
-
this.
|
|
662
|
+
this.prevPagesizeoptions = this.sanitizeCommaSeparatedIntegers(ov);
|
|
663
|
+
this.pagesizeoptions = this.sanitizeCommaSeparatedIntegers(nv);
|
|
664
|
+
if (this.allowpagesizechange)
|
|
665
|
+
this.setDefaultPageSize(nv);
|
|
580
666
|
}
|
|
581
667
|
else {
|
|
582
668
|
super.onPropertyChange(key, nv, ov);
|
|
@@ -593,6 +679,10 @@
|
|
|
593
679
|
nv = this.pagesizeoptions?.split(',').map(Number).sort((a, b) => a - b)[0];
|
|
594
680
|
this.pagesize = nv;
|
|
595
681
|
}
|
|
682
|
+
if (this.isPageSizeOptionsChanged()) {
|
|
683
|
+
this.dataNavigator.defaultPageSizeOptions = this.pagesizeoptions?.split(',').map(Number).sort((a, b) => a - b) || [];
|
|
684
|
+
this.dataNavigator.pageSizeOptions = [...this.dataNavigator.defaultPageSizeOptions];
|
|
685
|
+
}
|
|
596
686
|
}
|
|
597
687
|
this.updatedPageSize = nv;
|
|
598
688
|
this.dataNavigator.updatedPageSize = nv;
|
|
@@ -601,6 +691,31 @@
|
|
|
601
691
|
};
|
|
602
692
|
this.dataNavigator.widget.maxResults = nv;
|
|
603
693
|
this.dataNavigator.maxResults = nv;
|
|
694
|
+
if (this.datasource) {
|
|
695
|
+
this.datasource.maxResults = this.pagesize || this.datasource.maxResults;
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
isPageSizeOptionsChanged() {
|
|
699
|
+
return !lodashEs.isEqual(this.prevPagesizeoptions, this.pagesizeoptions);
|
|
700
|
+
}
|
|
701
|
+
selectPageSize(pagesize) {
|
|
702
|
+
if (!this.allowpagesizechange && !pagesize)
|
|
703
|
+
return;
|
|
704
|
+
if (pagesize < this.dataNavigator.pageSizeOptions[0] || pagesize > this.dataNavigator.pageSizeOptions[this.dataNavigator.pageSizeOptions.length - 1]
|
|
705
|
+
|| !this.dataNavigator.pageSizeOptions.includes(Number(pagesize))) {
|
|
706
|
+
pagesize = this.dataNavigator.pageSizeOptions[0];
|
|
707
|
+
}
|
|
708
|
+
this.dataNavigator.onPageSizeChange(undefined, pagesize);
|
|
709
|
+
}
|
|
710
|
+
sanitizeCommaSeparatedIntegers(input) {
|
|
711
|
+
if (!input)
|
|
712
|
+
return "";
|
|
713
|
+
const uniqueNumbers = Array.from(new Set(input
|
|
714
|
+
.split(",")
|
|
715
|
+
.map(v => v.trim())
|
|
716
|
+
.filter(v => /^-?\d+$/.test(v))
|
|
717
|
+
.map(v => Math.abs(parseInt(v, 10)))));
|
|
718
|
+
return uniqueNumbers.join(",");
|
|
604
719
|
}
|
|
605
720
|
onItemClick(evt, $listItem) {
|
|
606
721
|
let selectCount;
|
|
@@ -740,8 +855,81 @@
|
|
|
740
855
|
ngOnDestroy() {
|
|
741
856
|
if (this._listAnimator && this._listAnimator.$btnSubscription) {
|
|
742
857
|
this._listAnimator.$btnSubscription.unsubscribe();
|
|
858
|
+
this._listAnimator = null;
|
|
859
|
+
}
|
|
860
|
+
// MEMORY LEAK FIX: Unsubscribe from all app subscriptions
|
|
861
|
+
if (this._listenerDestroyers) {
|
|
862
|
+
this._listenerDestroyers.forEach(d => d && d());
|
|
863
|
+
this._listenerDestroyers = [];
|
|
743
864
|
}
|
|
744
|
-
|
|
865
|
+
// MEMORY LEAK FIX: Unsubscribe from navigator watches
|
|
866
|
+
if (this.navigatorResultWatch) {
|
|
867
|
+
this.navigatorResultWatch.unsubscribe();
|
|
868
|
+
this.navigatorResultWatch = null;
|
|
869
|
+
}
|
|
870
|
+
if (this.navigatorMaxResultWatch) {
|
|
871
|
+
this.navigatorMaxResultWatch.unsubscribe();
|
|
872
|
+
this.navigatorMaxResultWatch = null;
|
|
873
|
+
}
|
|
874
|
+
// MEMORY LEAK FIX: Unsubscribe from listItems changes
|
|
875
|
+
if (this.listItemsChangesSubscription) {
|
|
876
|
+
this.listItemsChangesSubscription.unsubscribe();
|
|
877
|
+
this.listItemsChangesSubscription = null;
|
|
878
|
+
}
|
|
879
|
+
// MEMORY LEAK FIX: Remove native event listener
|
|
880
|
+
const ulElement = this.nativeElement?.querySelector('ul.app-livelist-container');
|
|
881
|
+
if (ulElement && this.boundClickHandler) {
|
|
882
|
+
try {
|
|
883
|
+
ulElement.removeEventListener('click', this.boundClickHandler, true);
|
|
884
|
+
}
|
|
885
|
+
catch (e) {
|
|
886
|
+
// Silently handle cleanup errors
|
|
887
|
+
}
|
|
888
|
+
this.boundClickHandler = null;
|
|
889
|
+
}
|
|
890
|
+
// MEMORY LEAK FIX: Destroy jQuery sortable widget
|
|
891
|
+
if (this.$ulEle && this.$ulEle.sortable) {
|
|
892
|
+
try {
|
|
893
|
+
this.$ulEle.sortable('destroy');
|
|
894
|
+
}
|
|
895
|
+
catch (e) {
|
|
896
|
+
// Ignore errors during destroy
|
|
897
|
+
}
|
|
898
|
+
this.$ulEle = null;
|
|
899
|
+
}
|
|
900
|
+
// MEMORY LEAK FIX: Clear QueryList references
|
|
901
|
+
if (this.listItems) {
|
|
902
|
+
this.listItems = null;
|
|
903
|
+
}
|
|
904
|
+
if (this.btnComponents) {
|
|
905
|
+
this.btnComponents = null;
|
|
906
|
+
}
|
|
907
|
+
// MEMORY LEAK FIX: Clear ViewChild and ContentChild references
|
|
908
|
+
this.dataNavigator = null;
|
|
909
|
+
this.listTemplate = null;
|
|
910
|
+
this.listLeftActionTemplate = null;
|
|
911
|
+
this.listRightActionTemplate = null;
|
|
912
|
+
// MEMORY LEAK FIX: Clear all data arrays and objects
|
|
913
|
+
this.fieldDefs = [];
|
|
914
|
+
this._items = [];
|
|
915
|
+
this.groupedData = null;
|
|
916
|
+
if (Array.isArray(this.selectedItemWidgets)) {
|
|
917
|
+
this.selectedItemWidgets = [];
|
|
918
|
+
}
|
|
919
|
+
else {
|
|
920
|
+
this.selectedItemWidgets = {};
|
|
921
|
+
}
|
|
922
|
+
// MEMORY LEAK FIX: Remove add item event listener
|
|
923
|
+
const $addItem = document.getElementsByClassName("add-list-item")[0];
|
|
924
|
+
if ($addItem && this.boundAddItemHandler) {
|
|
925
|
+
$addItem.removeEventListener('click', this.boundAddItemHandler);
|
|
926
|
+
this.boundAddItemHandler = null;
|
|
927
|
+
}
|
|
928
|
+
// MEMORY LEAK FIX: Nullify closures and references
|
|
929
|
+
this.debouncedFetchNextDatasetOnScroll = null;
|
|
930
|
+
this.firstSelectedItem = null;
|
|
931
|
+
this.lastSelectedItem = null;
|
|
932
|
+
this.reorderProps = null;
|
|
745
933
|
super.ngOnDestroy();
|
|
746
934
|
}
|
|
747
935
|
ngOnDetach() {
|
|
@@ -1155,19 +1343,23 @@
|
|
|
1155
1343
|
this.isDataChanged = false;
|
|
1156
1344
|
}
|
|
1157
1345
|
setupHandlers() {
|
|
1158
|
-
this.listItems.changes.subscribe(listItems => {
|
|
1346
|
+
this.listItemsChangesSubscription = this.listItems.changes.subscribe(listItems => {
|
|
1159
1347
|
this.onListRender(listItems);
|
|
1160
1348
|
this.cdRef.detectChanges();
|
|
1161
1349
|
});
|
|
1162
1350
|
// handle click event in capturing phase.
|
|
1163
|
-
this.
|
|
1351
|
+
this.boundClickHandler = ($event) => {
|
|
1164
1352
|
let target = $($event.target).closest('.app-list-item');
|
|
1165
1353
|
// Recursively find the current list item
|
|
1166
1354
|
while (target.get(0) && (target.closest('ul.app-livelist-container').get(0) !== $event.currentTarget)) {
|
|
1167
1355
|
target = target.parent().closest('.app-list-item');
|
|
1168
1356
|
}
|
|
1169
1357
|
this.triggerListItemSelection(target, $event);
|
|
1170
|
-
}
|
|
1358
|
+
};
|
|
1359
|
+
const ulElement = this.nativeElement.querySelector('ul.app-livelist-container');
|
|
1360
|
+
if (ulElement) {
|
|
1361
|
+
ulElement.addEventListener('click', this.boundClickHandler, true);
|
|
1362
|
+
}
|
|
1171
1363
|
}
|
|
1172
1364
|
// Triggers on drag start while reordering.
|
|
1173
1365
|
onReorderStart(evt, ui) {
|
|
@@ -1283,10 +1475,12 @@
|
|
|
1283
1475
|
setUpCUDHandlers() {
|
|
1284
1476
|
const $addItem = document.getElementsByClassName("add-list-item")[0];
|
|
1285
1477
|
if ($addItem) {
|
|
1286
|
-
//
|
|
1287
|
-
|
|
1478
|
+
// MEMORY LEAK FIX: Store bound handler for cleanup
|
|
1479
|
+
this.boundAddItemHandler = (evt) => {
|
|
1288
1480
|
this.create();
|
|
1289
|
-
}
|
|
1481
|
+
};
|
|
1482
|
+
// Triggered on click of add action
|
|
1483
|
+
$addItem.addEventListener('click', this.boundAddItemHandler);
|
|
1290
1484
|
}
|
|
1291
1485
|
}
|
|
1292
1486
|
static { this.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0__namespace, type: ListComponent, deps: [{ token: i0__namespace.Injector }, { token: i0__namespace.ChangeDetectorRef }, { token: i1__namespace.ToDatePipe }, { token: i2__namespace.App }, { token: i2__namespace.AppDefaults }, { token: i0__namespace.NgZone }, { token: 'itemclass.bind', attribute: true }, { token: 'disableitem.bind', attribute: true }, { token: 'dataset.bind', attribute: true }, { token: 'datasource.bind', attribute: true }, { token: 'mouseenter.event', attribute: true }, { token: 'mouseleave.event', attribute: true }, { token: i2__namespace.StatePersistence }, { token: i2__namespace.PaginationService }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0__namespace.ɵɵFactoryTarget.Component }); }
|
|
@@ -86,28 +86,36 @@ export class ListItemDirective {
|
|
|
86
86
|
const $editItem = this.nativeElement.querySelector('.edit-list-item');
|
|
87
87
|
const $deleteItem = this.nativeElement.querySelector('.delete-list-item');
|
|
88
88
|
if ($editItem) {
|
|
89
|
-
//
|
|
90
|
-
|
|
89
|
+
// MEMORY LEAK FIX: Store bound handler for cleanup
|
|
90
|
+
this.boundEditHandler = (evt) => {
|
|
91
91
|
this.listComponent.update();
|
|
92
|
-
}
|
|
92
|
+
};
|
|
93
|
+
// Triggered on click of edit action
|
|
94
|
+
$editItem.addEventListener('click', this.boundEditHandler);
|
|
93
95
|
}
|
|
94
96
|
if ($deleteItem) {
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
+
// MEMORY LEAK FIX: Store bound handler for cleanup
|
|
98
|
+
this.boundDeleteHandler = (evt) => {
|
|
97
99
|
this.listComponent.delete();
|
|
98
|
-
}
|
|
100
|
+
};
|
|
101
|
+
// Triggered on click of delete action
|
|
102
|
+
$deleteItem.addEventListener('click', this.boundDeleteHandler);
|
|
99
103
|
}
|
|
100
104
|
}
|
|
101
105
|
ngOnInit() {
|
|
102
106
|
if (this.listComponent.mouseEnterCB) {
|
|
103
|
-
|
|
107
|
+
// MEMORY LEAK FIX: Store bound handler for cleanup
|
|
108
|
+
this.boundMouseEnterHandler = ($event) => {
|
|
104
109
|
this.listComponent.invokeEventCallback('mouseenter', { widget: this, $event });
|
|
105
|
-
}
|
|
110
|
+
};
|
|
111
|
+
this.nativeElement.addEventListener('mouseenter', this.boundMouseEnterHandler);
|
|
106
112
|
}
|
|
107
113
|
if (this.listComponent.mouseLeaveCB) {
|
|
108
|
-
|
|
114
|
+
// MEMORY LEAK FIX: Store bound handler for cleanup
|
|
115
|
+
this.boundMouseLeaveHandler = ($event) => {
|
|
109
116
|
this.listComponent.invokeEventCallback('mouseleave', { widget: this, $event });
|
|
110
|
-
}
|
|
117
|
+
};
|
|
118
|
+
this.nativeElement.addEventListener('mouseleave', this.boundMouseLeaveHandler);
|
|
111
119
|
}
|
|
112
120
|
// adding item attribute on every list item
|
|
113
121
|
$(this.nativeElement).attr('listitemindex', this.$index);
|
|
@@ -123,6 +131,82 @@ export class ListItemDirective {
|
|
|
123
131
|
}
|
|
124
132
|
});
|
|
125
133
|
}
|
|
134
|
+
ngOnDestroy() {
|
|
135
|
+
// MEMORY LEAK FIX: Remove event listeners
|
|
136
|
+
if (this.boundMouseEnterHandler && this.nativeElement) {
|
|
137
|
+
try {
|
|
138
|
+
this.nativeElement.removeEventListener('mouseenter', this.boundMouseEnterHandler);
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
// Silently handle cleanup errors
|
|
142
|
+
}
|
|
143
|
+
this.boundMouseEnterHandler = null;
|
|
144
|
+
}
|
|
145
|
+
if (this.boundMouseLeaveHandler && this.nativeElement) {
|
|
146
|
+
try {
|
|
147
|
+
this.nativeElement.removeEventListener('mouseleave', this.boundMouseLeaveHandler);
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
// Silently handle cleanup errors
|
|
151
|
+
}
|
|
152
|
+
this.boundMouseLeaveHandler = null;
|
|
153
|
+
}
|
|
154
|
+
if (this.nativeElement) {
|
|
155
|
+
const $editItem = this.nativeElement.querySelector('.edit-list-item');
|
|
156
|
+
if ($editItem && this.boundEditHandler) {
|
|
157
|
+
try {
|
|
158
|
+
$editItem.removeEventListener('click', this.boundEditHandler);
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
// Silently handle cleanup errors
|
|
162
|
+
}
|
|
163
|
+
this.boundEditHandler = null;
|
|
164
|
+
}
|
|
165
|
+
const $deleteItem = this.nativeElement.querySelector('.delete-list-item');
|
|
166
|
+
if ($deleteItem && this.boundDeleteHandler) {
|
|
167
|
+
try {
|
|
168
|
+
$deleteItem.removeEventListener('click', this.boundDeleteHandler);
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
// Silently handle cleanup errors
|
|
172
|
+
}
|
|
173
|
+
this.boundDeleteHandler = null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// MEMORY LEAK FIX: Clear currentItemWidgets cache
|
|
177
|
+
// The _currentItemWidgets object accumulates references to all child widgets
|
|
178
|
+
// which prevents them from being garbage collected
|
|
179
|
+
if (this._currentItemWidgets) {
|
|
180
|
+
Object.keys(this._currentItemWidgets).forEach(key => {
|
|
181
|
+
delete this._currentItemWidgets[key];
|
|
182
|
+
});
|
|
183
|
+
this._currentItemWidgets = null;
|
|
184
|
+
}
|
|
185
|
+
// MEMORY LEAK FIX: Clear context to release references
|
|
186
|
+
if (this.context) {
|
|
187
|
+
Object.keys(this.context).forEach(key => {
|
|
188
|
+
delete this.context[key];
|
|
189
|
+
});
|
|
190
|
+
this.context = null;
|
|
191
|
+
}
|
|
192
|
+
// MEMORY LEAK FIX: Clear ViewContainerRef reference
|
|
193
|
+
if (this.viewContainerRef) {
|
|
194
|
+
this.viewContainerRef = null;
|
|
195
|
+
}
|
|
196
|
+
// MEMORY LEAK FIX: Complete the destroy subject
|
|
197
|
+
if (this.destroy) {
|
|
198
|
+
try {
|
|
199
|
+
if (!this.destroy.closed) {
|
|
200
|
+
this.destroy.next(null);
|
|
201
|
+
this.destroy.complete();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
// Silently handle cleanup errors
|
|
206
|
+
}
|
|
207
|
+
this.destroy = null;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
126
210
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ListItemDirective, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i1.App }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
127
211
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ListItemDirective, isStandalone: true, selector: "[wmListItem]", inputs: { wmListItem: "wmListItem" }, host: { listeners: { "focus": "onFocus()" }, properties: { "class.active": "this.isActive", "class.disable-item": "this.disableItem" } }, exportAs: ["listItemRef"], ngImport: i0 }); }
|
|
128
212
|
}
|
|
@@ -145,4 +229,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
145
229
|
}], wmListItem: [{
|
|
146
230
|
type: Input
|
|
147
231
|
}] } });
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2xpc3Qvc3JjL2xpc3QtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVyQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQVNqRSxNQUFNLE9BQU8saUJBQWlCO0lBcUIxQixPQUFPO1FBQ0gsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtB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LGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFMN0IsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDZCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsUUFBUSxFQUFFLGFBQWE7aUJBQzFCO3dIQWtCZ0MsUUFBUTtzQkFBcEMsV0FBVzt1QkFBQyxjQUFjO2dCQUNRLFdBQVc7c0JBQTdDLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUdqQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTztnQkFrQ1IsVUFBVTtzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyR3YXRjaCwgQXBwfSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7TGlzdENvbXBvbmVudH0gZnJvbSAnLi9saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge3dpZGdldElkR2VuZXJhdG9yfSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvYmFzZVwiO1xuaW1wb3J0IHtCYXNlRm9ybUNvbXBvbmVudH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2lucHV0L2Jhc2UtZm9ybVwiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtTGlzdEl0ZW1dJyxcbiAgICBleHBvcnRBczogJ2xpc3RJdGVtUmVmJ1xufSlcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBwdWJsaWMgaXRlbTtcbiAgICBwdWJsaWMgY29udGV4dDtcbiAgICBwdWJsaWMgZGVzdHJveTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBwdWJsaWMgZGVzdHJveSQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuZGVzdHJveS5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgbmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcHVibGljIHJlYWRvbmx5IGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ7XG5cbiAgICBwcml2YXRlIGl0ZW1DbGFzcyA9ICcnO1xuICAgIHByaXZhdGUgX2N1cnJlbnRJdGVtV2lkZ2V0cyA9IHt9O1xuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICAvKipcbiAgICAgKiBUbyBhdm9pZCByZS1yZW5kZXJpbmcgb2Ygd2lkZ2V0LCBwYXNzaW5nIHVuaXF1ZSBpZCBhcyBjb250ZXh0S2V5IHRvIGNyZWF0ZUN1c3RvbUluamVjdG9yXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRyYWNrSWQgPSB3aWRnZXRJZEdlbmVyYXRvci5uZXh0VWlkKCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjdGl2ZScpIGlzQWN0aXZlID0gZmFsc2U7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kaXNhYmxlLWl0ZW0nKSBkaXNhYmxlSXRlbSA9IGZhbHNlO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIG9uRm9jdXMoKSB7XG4gICAgICAgIC8vIG1haW50YWlucyB3aGljaCBlbGVtZW50IGlzIGZvY3VzZWQvc2VsZWN0ZWQgbW9zdCByZWNlbnRseS5cbiAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Lmxhc3RTZWxlY3RlZEl0ZW0gPSB0aGlzO1xuICAgIH1cblxuICAgIGdldCAkaW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuJGluZGV4O1xuICAgIH1cblxuICAgIGdldCAkZXZlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5ldmVuO1xuICAgIH1cblxuICAgIGdldCAkb2RkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Lm9kZDtcbiAgICB9XG5cbiAgICBnZXQgJGZpcnN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmZpcnN0O1xuICAgIH1cblxuICAgIGdldCAkbGFzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5sYXN0O1xuICAgIH1cblxuICAgIGdldCBjdXJyZW50SXRlbVdpZGdldHMgKCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1t3aWRnZXQtaWRdJykpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0aGlzLl9jdXJyZW50SXRlbVdpZGdldHMsIGNvbXBvbmVudEVsZW1lbnRzLnJlZHVjZSgocmVzdWx0LCBjb21wOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdFtjb21wLndpZGdldC5uYW1lXSA9IGNvbXAud2lkZ2V0O1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwge30pKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgd21MaXN0SXRlbSh2YWwpIHtcbiAgICAgICAgdGhpcy5pdGVtID0gdmFsO1xuICAgIH1cbiAgICBwcml2YXRlIF92aWV3UGFyZW50ID0gaW5qZWN0KExpc3RDb21wb25lbnQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qOiBJbmplY3RvciwgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgYXBwOiBBcHApIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmID0gaW5qLmdldChWaWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50ID0gdGhpcy5fdmlld1BhcmVudDtcbiAgICAgICAgLy8gdGhpcy5jb250ZXh0ID0gKDxOZ0Zvck9mQ29udGV4dDxMaXN0SXRlbURpcmVjdGl2ZT4+KDxhbnk+aW5qKS52aWV3LmNvbnRleHQpO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy5pbmogYXMgYW55KS5fbFZpZXdbOF07XG4gICAgICAgIC8vdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLl9ob3N0TFZpZXcuZmluZCh0ID0+IHQgJiYgISF0LiRpbXBsaWNpdCk7XG4gICAgICAgIHRoaXMuaXRlbUNsYXNzV2F0Y2hlcih0aGlzLmxpc3RDb21wb25lbnQpO1xuICAgICAgICB0aGlzLmRpc2FibGVJdGVtV2F0Y2hlcih0aGlzLmxpc3RDb21wb25lbnQpO1xuICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZGF0YSgnbGlzdEl0ZW1Db250ZXh0JywgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlcldhdGNoKGV4cHJlc3Npb246IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIG5nRm9yIGNvbnRleHQgYXMgdGhlIHNhbWUgcHJvcGVydGllcyBhcmUgYXZhaWxibGUgb24gbGlzdGl0ZW0gc2NvcGUuXG4gICAgICAgIC8vIHBhc3Npbmcgdmlld3BhcmVudCBjb250ZXh0IGZvciBhY2Nlc3NpbmcgdmFyaWJhbGVzIGFuZCB3aWRnZXRzLlxuICAgICAgICAvL1tDU1BdOiBleHByZXNzaW9uIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBjb21wb25lbnQgYXMgZS5nLiAnaXRlbS5jbGFzc05hbWUnXG4gICAgICAgIHRoaXMuZGVzdHJveSQuc3Vic2NyaWJlKCR3YXRjaChleHByZXNzaW9uLCAodGhpcy5saXN0Q29tcG9uZW50IGFzIGFueSkudmlld1BhcmVudCwgdGhpcywgY2FsbGJhY2spKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGl0ZW1DbGFzc1dhdGNoZXIobGlzdENvbXBvbmVudDogTGlzdENvbXBvbmVudCkge1xuICAgICAgICBpZiAobGlzdENvbXBvbmVudC5iaW5kaXRlbWNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyV2F0Y2gobGlzdENvbXBvbmVudC5iaW5kaXRlbWNsYXNzLCBudiA9PiB0aGlzLml0ZW1DbGFzcyA9IG52IHx8ICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbUNsYXNzID0gbGlzdENvbXBvbmVudC5pdGVtY2xhc3M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRpc2FibGVJdGVtV2F0Y2hlcigkbGlzdDogTGlzdENvbXBvbmVudCkge1xuICAgICAgICBpZiAoJGxpc3QuYmluZGRpc2FibGVpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyV2F0Y2goJGxpc3QuYmluZGRpc2FibGVpdGVtLCBudiA9PiB0aGlzLmRpc2FibGVJdGVtID0gbnYgfHwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlSXRlbSA9ICRsaXN0LmRpc2FibGVpdGVtIHx8IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRVcENVREhhbmRsZXJzKCkge1xuICAgICAgICBjb25zdCAkZWRpdEl0ZW0gPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXQtbGlzdC1pdGVtJyk7XG4gICAgICAgIGNvbnN0ICRkZWxldGVJdGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZWxldGUtbGlzdC1pdGVtJyk7XG5cbiAgICAgICAgaWYgKCRlZGl0SXRlbSkge1xuICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIG9uIGNsaWNrIG9mIGVkaXQgYWN0aW9uXG4gICAgICAgICAgICAkZWRpdEl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC51cGRhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRkZWxldGVJdGVtKSB7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyZWQgb24gY2xpY2sgb2YgZGVsZXRlIGFjdGlvblxuICAgICAgICAgICAgJGRlbGV0ZUl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5kZWxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5saXN0Q29tcG9uZW50Lm1vdXNlRW50ZXJDQikge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Lmludm9rZUV2ZW50Q2FsbGJhY2soJ21vdXNlZW50ZXInLCB7d2lkZ2V0OiB0aGlzLCAkZXZlbnR9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpc3RDb21wb25lbnQubW91c2VMZWF2ZUNCKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuaW52b2tlRXZlbnRDYWxsYmFjaygnbW91c2VsZWF2ZScsIHt3aWRnZXQ6IHRoaXMsICRldmVudH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkaW5nIGl0ZW0gYXR0cmlidXRlIG9uIGV2ZXJ5IGxpc3QgaXRlbVxuICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuYXR0cignbGlzdGl0ZW1pbmRleCcsIHRoaXMuJGluZGV4KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0VXBDVURIYW5kbGVycygpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1t3aWRnZXQtaWRdJykpO1xuICAgICAgICBjb21wb25lbnRFbGVtZW50cy5mb3JFYWNoKChjb21wb25lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYoY29tcG9uZW50LndpZGdldCBpbnN0YW5jZW9mIEJhc2VGb3JtQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgaWYoIWNvbXBvbmVudC53aWRnZXQuJGF0dHJzLmdldCgnZGF0YXZhbHVlc291cmNlLmJpbmQnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQud2lkZ2V0LmRhdGF2YWx1ZXNvdXJjZSA9IHRoaXMubGlzdENvbXBvbmVudFsnZGF0YXNvdXJjZSddO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2xpc3Qvc3JjL2xpc3QtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVyQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQVNqRSxNQUFNLE9BQU8saUJBQWlCO0lBcUIxQixPQUFPO1FBQ0gsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtB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RGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7JHdhdGNoLCBBcHB9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtMaXN0Q29tcG9uZW50fSBmcm9tICcuL2xpc3QuY29tcG9uZW50JztcbmltcG9ydCB7d2lkZ2V0SWRHZW5lcmF0b3J9IGZyb20gXCJAd20vY29tcG9uZW50cy9iYXNlXCI7XG5pbXBvcnQge0Jhc2VGb3JtQ29tcG9uZW50fSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvaW5wdXQvYmFzZS1mb3JtXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdbd21MaXN0SXRlbV0nLFxuICAgIGV4cG9ydEFzOiAnbGlzdEl0ZW1SZWYnXG59KVxuZXhwb3J0IGNsYXNzIExpc3RJdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIGl0ZW07XG4gICAgcHVibGljIGNvbnRleHQ7XG4gICAgcHVibGljIGRlc3Ryb3k6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHVibGljIGRlc3Ryb3kkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmRlc3Ryb3kuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIHB1YmxpYyByZWFkb25seSBsaXN0Q29tcG9uZW50OiBMaXN0Q29tcG9uZW50O1xuXG4gICAgcHJpdmF0ZSBpdGVtQ2xhc3MgPSAnJztcbiAgICBwcml2YXRlIF9jdXJyZW50SXRlbVdpZGdldHMgPSB7fTtcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgLyoqXG4gICAgICogVG8gYXZvaWQgcmUtcmVuZGVyaW5nIG9mIHdpZGdldCwgcGFzc2luZyB1bmlxdWUgaWQgYXMgY29udGV4dEtleSB0byBjcmVhdGVDdXN0b21JbmplY3RvclxuICAgICAqL1xuICAgIHByb3RlY3RlZCB0cmFja0lkID0gd2lkZ2V0SWRHZW5lcmF0b3IubmV4dFVpZCgpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKSBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZS1pdGVtJykgZGlzYWJsZUl0ZW0gPSBmYWxzZTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBvbkZvY3VzKCkge1xuICAgICAgICAvLyBtYWludGFpbnMgd2hpY2ggZWxlbWVudCBpcyBmb2N1c2VkL3NlbGVjdGVkIG1vc3QgcmVjZW50bHkuXG4gICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcztcbiAgICB9XG5cbiAgICBnZXQgJGluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LiRpbmRleDtcbiAgICB9XG5cbiAgICBnZXQgJGV2ZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuZXZlbjtcbiAgICB9XG5cbiAgICBnZXQgJG9kZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5vZGQ7XG4gICAgfVxuXG4gICAgZ2V0ICRmaXJzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5maXJzdDtcbiAgICB9XG5cbiAgICBnZXQgJGxhc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQubGFzdDtcbiAgICB9XG5cbiAgICBnZXQgY3VycmVudEl0ZW1XaWRnZXRzICgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50RWxlbWVudHMgPSBBcnJheS5mcm9tKHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbd2lkZ2V0LWlkXScpKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcy5fY3VycmVudEl0ZW1XaWRnZXRzLCBjb21wb25lbnRFbGVtZW50cy5yZWR1Y2UoKHJlc3VsdCwgY29tcDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRbY29tcC53aWRnZXQubmFtZV0gPSBjb21wLndpZGdldDtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHdtTGlzdEl0ZW0odmFsKSB7XG4gICAgICAgIHRoaXMuaXRlbSA9IHZhbDtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdmlld1BhcmVudCA9IGluamVjdChMaXN0Q29tcG9uZW50LCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluajogSW5qZWN0b3IsIGVsUmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGFwcDogQXBwKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IGluai5nZXQoVmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudCA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMubGlzdENvbXBvbmVudCA9IHRoaXMuX3ZpZXdQYXJlbnQ7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9ICg8TmdGb3JPZkNvbnRleHQ8TGlzdEl0ZW1EaXJlY3RpdmU+Pig8YW55Pmluaikudmlldy5jb250ZXh0KTtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMuaW5qIGFzIGFueSkuX2xWaWV3WzhdO1xuICAgICAgICAvL3RoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmZpbmQodCA9PiB0ICYmICEhdC4kaW1wbGljaXQpO1xuICAgICAgICB0aGlzLml0ZW1DbGFzc1dhdGNoZXIodGhpcy5saXN0Q29tcG9uZW50KTtcbiAgICAgICAgdGhpcy5kaXNhYmxlSXRlbVdhdGNoZXIodGhpcy5saXN0Q29tcG9uZW50KTtcbiAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmRhdGEoJ2xpc3RJdGVtQ29udGV4dCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJXYXRjaChleHByZXNzaW9uOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICAvLyBSZW1vdmluZyBuZ0ZvciBjb250ZXh0IGFzIHRoZSBzYW1lIHByb3BlcnRpZXMgYXJlIGF2YWlsYmxlIG9uIGxpc3RpdGVtIHNjb3BlLlxuICAgICAgICAvLyBwYXNzaW5nIHZpZXdwYXJlbnQgY29udGV4dCBmb3IgYWNjZXNzaW5nIHZhcmliYWxlcyBhbmQgd2lkZ2V0cy5cbiAgICAgICAgLy9bQ1NQXTogZXhwcmVzc2lvbiB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgY29tcG9uZW50IGFzIGUuZy4gJ2l0ZW0uY2xhc3NOYW1lJ1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLnN1YnNjcmliZSgkd2F0Y2goZXhwcmVzc2lvbiwgKHRoaXMubGlzdENvbXBvbmVudCBhcyBhbnkpLnZpZXdQYXJlbnQsIHRoaXMsIGNhbGxiYWNrKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpdGVtQ2xhc3NXYXRjaGVyKGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGxpc3RDb21wb25lbnQuYmluZGl0ZW1jbGFzcykge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldhdGNoKGxpc3RDb21wb25lbnQuYmluZGl0ZW1jbGFzcywgbnYgPT4gdGhpcy5pdGVtQ2xhc3MgPSBudiB8fCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1DbGFzcyA9IGxpc3RDb21wb25lbnQuaXRlbWNsYXNzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNhYmxlSXRlbVdhdGNoZXIoJGxpc3Q6IExpc3RDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKCRsaXN0LmJpbmRkaXNhYmxlaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldhdGNoKCRsaXN0LmJpbmRkaXNhYmxlaXRlbSwgbnYgPT4gdGhpcy5kaXNhYmxlSXRlbSA9IG52IHx8IGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUl0ZW0gPSAkbGlzdC5kaXNhYmxlaXRlbSB8fCBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYm91bmRFZGl0SGFuZGxlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGJvdW5kRGVsZXRlSGFuZGxlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGJvdW5kTW91c2VFbnRlckhhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBib3VuZE1vdXNlTGVhdmVIYW5kbGVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuXG4gICAgcHJpdmF0ZSBzZXRVcENVREhhbmRsZXJzKCkge1xuICAgICAgICBjb25zdCAkZWRpdEl0ZW0gPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXQtbGlzdC1pdGVtJyk7XG4gICAgICAgIGNvbnN0ICRkZWxldGVJdGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZWxldGUtbGlzdC1pdGVtJyk7XG5cbiAgICAgICAgaWYgKCRlZGl0SXRlbSkge1xuICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSBib3VuZCBoYW5kbGVyIGZvciBjbGVhbnVwXG4gICAgICAgICAgICB0aGlzLmJvdW5kRWRpdEhhbmRsZXIgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC51cGRhdGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBUcmlnZ2VyZWQgb24gY2xpY2sgb2YgZWRpdCBhY3Rpb25cbiAgICAgICAgICAgICRlZGl0SXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuYm91bmRFZGl0SGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGRlbGV0ZUl0ZW0pIHtcbiAgICAgICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgYm91bmQgaGFuZGxlciBmb3IgY2xlYW51cFxuICAgICAgICAgICAgdGhpcy5ib3VuZERlbGV0ZUhhbmRsZXIgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5kZWxldGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBUcmlnZ2VyZWQgb24gY2xpY2sgb2YgZGVsZXRlIGFjdGlvblxuICAgICAgICAgICAgJGRlbGV0ZUl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kRGVsZXRlSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxpc3RDb21wb25lbnQubW91c2VFbnRlckNCKSB7XG4gICAgICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFN0b3JlIGJvdW5kIGhhbmRsZXIgZm9yIGNsZWFudXBcbiAgICAgICAgICAgIHRoaXMuYm91bmRNb3VzZUVudGVySGFuZGxlciA9ICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Lmludm9rZUV2ZW50Q2FsbGJhY2soJ21vdXNlZW50ZXInLCB7d2lkZ2V0OiB0aGlzLCAkZXZlbnR9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuYm91bmRNb3VzZUVudGVySGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdENvbXBvbmVudC5tb3VzZUxlYXZlQ0IpIHtcbiAgICAgICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgYm91bmQgaGFuZGxlciBmb3IgY2xlYW51cFxuICAgICAgICAgICAgdGhpcy5ib3VuZE1vdXNlTGVhdmVIYW5kbGVyID0gKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuaW52b2tlRXZlbnRDYWxsYmFjaygnbW91c2VsZWF2ZScsIHt3aWRnZXQ6IHRoaXMsICRldmVudH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5ib3VuZE1vdXNlTGVhdmVIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGRpbmcgaXRlbSBhdHRyaWJ1dGUgb24gZXZlcnkgbGlzdCBpdGVtXG4gICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5hdHRyKCdsaXN0aXRlbWluZGV4JywgdGhpcy4kaW5kZXgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRVcENVREhhbmRsZXJzKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEVsZW1lbnRzID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3dpZGdldC1pZF0nKSk7XG4gICAgICAgIGNvbXBvbmVudEVsZW1lbnRzLmZvckVhY2goKGNvbXBvbmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZihjb21wb25lbnQud2lkZ2V0IGluc3RhbmNlb2YgQmFzZUZvcm1Db21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBpZighY29tcG9uZW50LndpZGdldC4kYXR0cnMuZ2V0KCdkYXRhdmFsdWVzb3VyY2UuYmluZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC53aWRnZXQuZGF0YXZhbHVlc291cmNlID0gdGhpcy5saXN0Q29tcG9uZW50WydkYXRhc291cmNlJ107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgIGlmICh0aGlzLmJvdW5kTW91c2VFbnRlckhhbmRsZXIgJiYgdGhpcy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5ib3VuZE1vdXNlRW50ZXJIYW5kbGVyKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgY2xlYW51cCBlcnJvcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYm91bmRNb3VzZUVudGVySGFuZGxlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYm91bmRNb3VzZUxlYXZlSGFuZGxlciAmJiB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLmJvdW5kTW91c2VMZWF2ZUhhbmRsZXIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBjbGVhbnVwIGVycm9yc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ib3VuZE1vdXNlTGVhdmVIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0ICRlZGl0SXRlbSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdC1saXN0LWl0ZW0nKTtcbiAgICAgICAgICAgIGlmICgkZWRpdEl0ZW0gJiYgdGhpcy5ib3VuZEVkaXRIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgJGVkaXRJdGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZEVkaXRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBjbGVhbnVwIGVycm9yc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmJvdW5kRWRpdEhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCAkZGVsZXRlSXRlbSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGVsZXRlLWxpc3QtaXRlbScpO1xuICAgICAgICAgICAgaWYgKCRkZWxldGVJdGVtICYmIHRoaXMuYm91bmREZWxldGVIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgJGRlbGV0ZUl0ZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kRGVsZXRlSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgY2xlYW51cCBlcnJvcnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ib3VuZERlbGV0ZUhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBjdXJyZW50SXRlbVdpZGdldHMgY2FjaGVcbiAgICAgICAgLy8gVGhlIF9jdXJyZW50SXRlbVdpZGdldHMgb2JqZWN0IGFjY3VtdWxhdGVzIHJlZmVyZW5jZXMgdG8gYWxsIGNoaWxkIHdpZGdldHNcbiAgICAgICAgLy8gd2hpY2ggcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50SXRlbVdpZGdldHMpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2N1cnJlbnRJdGVtV2lkZ2V0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXJyZW50SXRlbVdpZGdldHNba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1XaWRnZXRzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgY29udGV4dCB0byByZWxlYXNlIHJlZmVyZW5jZXNcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29udGV4dFtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBWaWV3Q29udGFpbmVyUmVmIHJlZmVyZW5jZVxuICAgICAgICBpZiAodGhpcy52aWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDb21wbGV0ZSB0aGUgZGVzdHJveSBzdWJqZWN0XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3kuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveS5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|