@igo2/common 1.14.2 → 1.14.3
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/esm2020/igo2-common.mjs +4 -4
- package/esm2020/lib/action/action.module.mjs +26 -26
- package/esm2020/lib/action/actionbar/actionbar-item.component.mjs +251 -251
- package/esm2020/lib/action/actionbar/actionbar.component.mjs +369 -369
- package/esm2020/lib/action/actionbar/actionbar.module.mjs +56 -56
- package/esm2020/lib/action/index.mjs +2 -2
- package/esm2020/lib/action/shared/action.enums.mjs +6 -6
- package/esm2020/lib/action/shared/action.interfaces.mjs +1 -1
- package/esm2020/lib/action/shared/index.mjs +3 -3
- package/esm2020/lib/action/shared/store.mjs +7 -7
- package/esm2020/lib/backdrop/backdrop.component.mjs +25 -25
- package/esm2020/lib/backdrop/backdrop.module.mjs +24 -24
- package/esm2020/lib/backdrop/index.mjs +1 -1
- package/esm2020/lib/badge-icon/badge-icon.directive.mjs +140 -140
- package/esm2020/lib/badge-icon/badge-icon.module.mjs +25 -25
- package/esm2020/lib/badge-icon/index.mjs +1 -1
- package/esm2020/lib/clickout/clickout.directive.mjs +31 -31
- package/esm2020/lib/clickout/clickout.module.mjs +23 -23
- package/esm2020/lib/clickout/index.mjs +1 -1
- package/esm2020/lib/clone/clone.module.mjs +23 -23
- package/esm2020/lib/clone/clone.pipe.mjs +23 -23
- package/esm2020/lib/clone/index.mjs +1 -1
- package/esm2020/lib/collapsible/collapse.directive.mjs +54 -54
- package/esm2020/lib/collapsible/collapsible.component.mjs +56 -56
- package/esm2020/lib/collapsible/collapsible.module.mjs +26 -26
- package/esm2020/lib/collapsible/index.mjs +2 -2
- package/esm2020/lib/confirm-dialog/confirm-dialog.component.mjs +43 -43
- package/esm2020/lib/confirm-dialog/confirm-dialog.module.mjs +28 -28
- package/esm2020/lib/confirm-dialog/confirm-dialog.service.mjs +21 -21
- package/esm2020/lib/confirm-dialog/index.mjs +2 -2
- package/esm2020/lib/context-menu/context-menu.directive.mjs +102 -102
- package/esm2020/lib/context-menu/context-menu.module.mjs +24 -24
- package/esm2020/lib/context-menu/index.mjs +2 -2
- package/esm2020/lib/context-menu/long-press.directive.mjs +62 -62
- package/esm2020/lib/custom-html/custom-html.component.mjs +27 -27
- package/esm2020/lib/custom-html/custom-html.module.mjs +46 -46
- package/esm2020/lib/custom-html/custom-html.pipe.mjs +17 -17
- package/esm2020/lib/custom-html/index.mjs +2 -2
- package/esm2020/lib/dom/dom.interfaces.mjs +1 -1
- package/esm2020/lib/dom/dom.module.mjs +22 -22
- package/esm2020/lib/dom/dom.service.mjs +29 -29
- package/esm2020/lib/dom/index.mjs +2 -2
- package/esm2020/lib/drag-drop/drag-drop.directive.mjs +87 -87
- package/esm2020/lib/drag-drop/drag-drop.module.mjs +23 -23
- package/esm2020/lib/drag-drop/index.mjs +1 -1
- package/esm2020/lib/dynamic-component/dynamic-component.module.mjs +30 -30
- package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +121 -121
- package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +27 -27
- package/esm2020/lib/dynamic-component/index.mjs +2 -2
- package/esm2020/lib/dynamic-component/shared/dynamic-component.interfaces.mjs +1 -1
- package/esm2020/lib/dynamic-component/shared/dynamic-component.mjs +173 -173
- package/esm2020/lib/dynamic-component/shared/dynamic-component.service.mjs +28 -28
- package/esm2020/lib/dynamic-component/shared/index.mjs +3 -3
- package/esm2020/lib/entity/entity-selector/entity-selector.component.mjs +193 -193
- package/esm2020/lib/entity/entity-selector/entity-selector.module.mjs +31 -31
- package/esm2020/lib/entity/entity-table/entity-table-row.directive.mjs +136 -136
- package/esm2020/lib/entity/entity-table/entity-table.component.mjs +1367 -1367
- package/esm2020/lib/entity/entity-table/entity-table.module.mjs +101 -101
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +131 -131
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +1 -1
- package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +27 -27
- package/esm2020/lib/entity/entity.module.mjs +30 -30
- package/esm2020/lib/entity/index.mjs +5 -5
- package/esm2020/lib/entity/shared/entity.enums.mjs +27 -27
- package/esm2020/lib/entity/shared/entity.interfaces.mjs +1 -1
- package/esm2020/lib/entity/shared/entity.utils.mjs +66 -66
- package/esm2020/lib/entity/shared/index.mjs +9 -9
- package/esm2020/lib/entity/shared/state.mjs +190 -190
- package/esm2020/lib/entity/shared/store.mjs +287 -287
- package/esm2020/lib/entity/shared/strategies/filter-custom-function.mjs +78 -78
- package/esm2020/lib/entity/shared/strategies/filter-selection.mjs +83 -83
- package/esm2020/lib/entity/shared/strategies/index.mjs +3 -3
- package/esm2020/lib/entity/shared/strategies/strategy.mjs +74 -74
- package/esm2020/lib/entity/shared/transaction.mjs +315 -315
- package/esm2020/lib/entity/shared/view.mjs +314 -314
- package/esm2020/lib/entity/shared/watcher.mjs +119 -119
- package/esm2020/lib/flexible/flexible.component.mjs +147 -147
- package/esm2020/lib/flexible/flexible.module.mjs +23 -23
- package/esm2020/lib/flexible/flexible.type.mjs +1 -1
- package/esm2020/lib/flexible/index.mjs +2 -2
- package/esm2020/lib/form/form/form.component.mjs +116 -116
- package/esm2020/lib/form/form/form.module.mjs +39 -39
- package/esm2020/lib/form/form-field/form-field-select.component.mjs +126 -126
- package/esm2020/lib/form/form-field/form-field-text.component.mjs +103 -103
- package/esm2020/lib/form/form-field/form-field-textarea.component.mjs +104 -104
- package/esm2020/lib/form/form-field/form-field.component.mjs +71 -71
- package/esm2020/lib/form/form-field/form-field.module.mjs +73 -73
- package/esm2020/lib/form/form-field/index.mjs +4 -4
- package/esm2020/lib/form/form-group/form-group.component.mjs +104 -104
- package/esm2020/lib/form/form-group/form-group.module.mjs +39 -39
- package/esm2020/lib/form/form.module.mjs +48 -48
- package/esm2020/lib/form/index.mjs +4 -4
- package/esm2020/lib/form/shared/form-field-component.mjs +6 -6
- package/esm2020/lib/form/shared/form-field.service.mjs +28 -28
- package/esm2020/lib/form/shared/form.interfaces.mjs +1 -1
- package/esm2020/lib/form/shared/form.service.mjs +80 -80
- package/esm2020/lib/form/shared/form.utils.mjs +39 -39
- package/esm2020/lib/form/shared/index.mjs +5 -5
- package/esm2020/lib/home-button/home-button.component.mjs +30 -30
- package/esm2020/lib/home-button/home-button.module.mjs +40 -40
- package/esm2020/lib/home-button/index.mjs +1 -1
- package/esm2020/lib/image/image-error.directive.mjs +34 -34
- package/esm2020/lib/image/image.module.mjs +24 -24
- package/esm2020/lib/image/index.mjs +2 -2
- package/esm2020/lib/image/secure-image.pipe.mjs +58 -58
- package/esm2020/lib/interactive-tour/index.mjs +4 -4
- package/esm2020/lib/interactive-tour/interactive-tour.component.mjs +134 -134
- package/esm2020/lib/interactive-tour/interactive-tour.interface.mjs +1 -1
- package/esm2020/lib/interactive-tour/interactive-tour.loader.mjs +43 -43
- package/esm2020/lib/interactive-tour/interactive-tour.module.mjs +39 -39
- package/esm2020/lib/interactive-tour/interactive-tour.service.mjs +284 -284
- package/esm2020/lib/json-dialog/index.mjs +2 -2
- package/esm2020/lib/json-dialog/json-dialog.component.mjs +108 -108
- package/esm2020/lib/json-dialog/json-dialog.module.mjs +28 -28
- package/esm2020/lib/json-dialog/json-dialog.service.mjs +23 -23
- package/esm2020/lib/keyvalue/index.mjs +1 -1
- package/esm2020/lib/keyvalue/keyvalue.module.mjs +23 -23
- package/esm2020/lib/keyvalue/keyvalue.pipe.mjs +17 -17
- package/esm2020/lib/list/index.mjs +2 -2
- package/esm2020/lib/list/list-item.directive.mjs +164 -164
- package/esm2020/lib/list/list.component.mjs +261 -261
- package/esm2020/lib/list/list.module.mjs +28 -28
- package/esm2020/lib/panel/index.mjs +1 -1
- package/esm2020/lib/panel/panel.component.mjs +58 -58
- package/esm2020/lib/panel/panel.module.mjs +18 -18
- package/esm2020/lib/sidenav/index.mjs +1 -1
- package/esm2020/lib/sidenav/sidenav-shim.directive.mjs +54 -54
- package/esm2020/lib/sidenav/sidenav.module.mjs +23 -23
- package/esm2020/lib/spinner/index.mjs +2 -2
- package/esm2020/lib/spinner/spinner-activity.directive.mjs +46 -46
- package/esm2020/lib/spinner/spinner.component.mjs +34 -34
- package/esm2020/lib/spinner/spinner.module.mjs +20 -20
- package/esm2020/lib/stop-propagation/index.mjs +2 -2
- package/esm2020/lib/stop-propagation/stop-drop-propagation.directive.mjs +21 -21
- package/esm2020/lib/stop-propagation/stop-propagation.directive.mjs +20 -20
- package/esm2020/lib/stop-propagation/stop-propagation.module.mjs +24 -24
- package/esm2020/lib/table/index.mjs +5 -5
- package/esm2020/lib/table/table-action-color.enum.mjs +6 -6
- package/esm2020/lib/table/table-database.mjs +27 -27
- package/esm2020/lib/table/table-datasource.mjs +60 -60
- package/esm2020/lib/table/table-model.interface.mjs +1 -1
- package/esm2020/lib/table/table.component.mjs +296 -296
- package/esm2020/lib/table/table.module.mjs +66 -66
- package/esm2020/lib/tool/index.mjs +2 -2
- package/esm2020/lib/tool/shared/index.mjs +5 -5
- package/esm2020/lib/tool/shared/tool-component.mjs +8 -8
- package/esm2020/lib/tool/shared/tool.interface.mjs +1 -1
- package/esm2020/lib/tool/shared/tool.service.mjs +42 -42
- package/esm2020/lib/tool/shared/toolbox.enums.mjs +6 -6
- package/esm2020/lib/tool/shared/toolbox.mjs +178 -178
- package/esm2020/lib/tool/tool.module.mjs +31 -31
- package/esm2020/lib/tool/toolbox/toolbox.animation.mjs +9 -9
- package/esm2020/lib/tool/toolbox/toolbox.component.mjs +254 -254
- package/esm2020/lib/tool/toolbox/toolbox.module.mjs +35 -35
- package/esm2020/lib/widget/index.mjs +2 -2
- package/esm2020/lib/widget/shared/index.mjs +3 -3
- package/esm2020/lib/widget/shared/widget.interfaces.mjs +1 -1
- package/esm2020/lib/widget/shared/widget.mjs +3 -3
- package/esm2020/lib/widget/shared/widget.service.mjs +19 -19
- package/esm2020/lib/widget/widget-outlet/widget-outlet.component.mjs +115 -115
- package/esm2020/lib/widget/widget-outlet/widget-outlet.module.mjs +31 -31
- package/esm2020/lib/widget/widget.module.mjs +31 -31
- package/esm2020/lib/workspace/index.mjs +3 -3
- package/esm2020/lib/workspace/shared/index.mjs +3 -3
- package/esm2020/lib/workspace/shared/store.mjs +39 -39
- package/esm2020/lib/workspace/shared/workspace.interfaces.mjs +1 -1
- package/esm2020/lib/workspace/shared/workspace.mjs +116 -116
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.component.mjs +50 -50
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +31 -31
- package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +87 -87
- package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +31 -31
- package/esm2020/lib/workspace/workspace.module.mjs +26 -26
- package/esm2020/public_api.mjs +73 -73
- package/fesm2015/igo2-common.mjs +10003 -10003
- package/fesm2020/igo2-common.mjs +9306 -9306
- package/index.d.ts +5 -5
- package/lib/action/action.module.d.ts +8 -8
- package/lib/action/actionbar/actionbar-item.component.d.ts +78 -78
- package/lib/action/actionbar/actionbar.component.d.ts +146 -146
- package/lib/action/actionbar/actionbar.module.d.ts +20 -20
- package/lib/action/index.d.ts +2 -2
- package/lib/action/shared/action.enums.d.ts +5 -5
- package/lib/action/shared/action.interfaces.d.ts +17 -17
- package/lib/action/shared/index.d.ts +3 -3
- package/lib/action/shared/store.d.ts +8 -8
- package/lib/backdrop/backdrop.component.d.ts +9 -9
- package/lib/backdrop/backdrop.module.d.ts +10 -10
- package/lib/backdrop/index.d.ts +1 -1
- package/lib/badge-icon/badge-icon.directive.d.ts +36 -36
- package/lib/badge-icon/badge-icon.module.d.ts +11 -11
- package/lib/badge-icon/index.d.ts +1 -1
- package/lib/clickout/clickout.directive.d.ts +10 -10
- package/lib/clickout/clickout.module.d.ts +9 -9
- package/lib/clickout/index.d.ts +1 -1
- package/lib/clone/clone.module.d.ts +9 -9
- package/lib/clone/clone.pipe.d.ts +7 -7
- package/lib/clone/index.d.ts +1 -1
- package/lib/collapsible/collapse.directive.d.ts +19 -19
- package/lib/collapsible/collapsible.component.d.ts +13 -13
- package/lib/collapsible/collapsible.module.d.ts +12 -12
- package/lib/collapsible/index.d.ts +2 -2
- package/lib/confirm-dialog/confirm-dialog.component.d.ts +9 -9
- package/lib/confirm-dialog/confirm-dialog.module.d.ts +12 -12
- package/lib/confirm-dialog/confirm-dialog.service.d.ts +10 -10
- package/lib/confirm-dialog/index.d.ts +2 -2
- package/lib/context-menu/context-menu.directive.d.ts +21 -21
- package/lib/context-menu/context-menu.module.d.ts +10 -10
- package/lib/context-menu/index.d.ts +2 -2
- package/lib/context-menu/long-press.directive.d.ts +20 -20
- package/lib/custom-html/custom-html.component.d.ts +9 -9
- package/lib/custom-html/custom-html.module.d.ts +16 -16
- package/lib/custom-html/custom-html.pipe.d.ts +10 -10
- package/lib/custom-html/index.d.ts +2 -2
- package/lib/dom/dom.interfaces.d.ts +10 -10
- package/lib/dom/dom.module.d.ts +8 -8
- package/lib/dom/dom.service.d.ts +10 -10
- package/lib/dom/index.d.ts +2 -2
- package/lib/drag-drop/drag-drop.directive.d.ts +14 -14
- package/lib/drag-drop/drag-drop.module.d.ts +9 -9
- package/lib/drag-drop/index.d.ts +1 -1
- package/lib/dynamic-component/dynamic-component.module.d.ts +8 -8
- package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.d.ts +70 -70
- package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.d.ts +11 -11
- package/lib/dynamic-component/index.d.ts +2 -2
- package/lib/dynamic-component/shared/dynamic-component.d.ts +88 -88
- package/lib/dynamic-component/shared/dynamic-component.interfaces.d.ts +3 -3
- package/lib/dynamic-component/shared/dynamic-component.service.d.ts +18 -18
- package/lib/dynamic-component/shared/index.d.ts +3 -3
- package/lib/entity/entity-selector/entity-selector.component.d.ts +92 -92
- package/lib/entity/entity-selector/entity-selector.module.d.ts +13 -13
- package/lib/entity/entity-table/entity-table-row.directive.d.ts +69 -69
- package/lib/entity/entity-table/entity-table.component.d.ts +327 -327
- package/lib/entity/entity-table/entity-table.module.d.ts +29 -29
- package/lib/entity/entity-table-paginator/entity-table-paginator.component.d.ts +49 -49
- package/lib/entity/entity-table-paginator/entity-table-paginator.interface.d.ts +8 -8
- package/lib/entity/entity-table-paginator/entity-table-paginator.module.d.ts +11 -11
- package/lib/entity/entity.module.d.ts +10 -10
- package/lib/entity/index.d.ts +5 -5
- package/lib/entity/shared/entity.enums.d.ts +23 -23
- package/lib/entity/shared/entity.interfaces.d.ts +114 -114
- package/lib/entity/shared/entity.utils.d.ts +49 -49
- package/lib/entity/shared/index.d.ts +9 -9
- package/lib/entity/shared/state.d.ts +103 -103
- package/lib/entity/shared/store.d.ts +176 -176
- package/lib/entity/shared/strategies/filter-custom-function.d.ts +51 -51
- package/lib/entity/shared/strategies/filter-selection.d.ts +48 -48
- package/lib/entity/shared/strategies/index.d.ts +3 -3
- package/lib/entity/shared/strategies/strategy.d.ts +56 -56
- package/lib/entity/shared/transaction.d.ts +168 -168
- package/lib/entity/shared/view.d.ts +193 -193
- package/lib/entity/shared/watcher.d.ts +72 -72
- package/lib/flexible/flexible.component.d.ts +41 -41
- package/lib/flexible/flexible.module.d.ts +9 -9
- package/lib/flexible/flexible.type.d.ts +2 -2
- package/lib/flexible/index.d.ts +2 -2
- package/lib/form/form/form.component.d.ts +53 -53
- package/lib/form/form/form.module.d.ts +12 -12
- package/lib/form/form-field/form-field-select.component.d.ts +48 -48
- package/lib/form/form-field/form-field-text.component.d.ts +41 -41
- package/lib/form/form-field/form-field-textarea.component.d.ts +41 -41
- package/lib/form/form-field/form-field.component.d.ts +34 -34
- package/lib/form/form-field/form-field.module.d.ts +21 -21
- package/lib/form/form-field/index.d.ts +4 -4
- package/lib/form/form-group/form-group.component.d.ts +49 -49
- package/lib/form/form-group/form-group.module.d.ts +14 -14
- package/lib/form/form.module.d.ts +13 -13
- package/lib/form/index.d.ts +4 -4
- package/lib/form/shared/form-field-component.d.ts +1 -1
- package/lib/form/shared/form-field.service.d.ts +19 -19
- package/lib/form/shared/form.interfaces.d.ts +57 -57
- package/lib/form/shared/form.service.d.ts +15 -15
- package/lib/form/shared/form.utils.d.ts +11 -11
- package/lib/form/shared/index.d.ts +5 -5
- package/lib/home-button/home-button.component.d.ts +9 -9
- package/lib/home-button/home-button.module.d.ts +15 -15
- package/lib/home-button/index.d.ts +1 -1
- package/lib/image/image-error.directive.d.ts +11 -11
- package/lib/image/image.module.d.ts +10 -10
- package/lib/image/index.d.ts +2 -2
- package/lib/image/secure-image.pipe.d.ts +13 -13
- package/lib/interactive-tour/index.d.ts +4 -4
- package/lib/interactive-tour/interactive-tour.component.d.ts +30 -30
- package/lib/interactive-tour/interactive-tour.interface.d.ts +32 -32
- package/lib/interactive-tour/interactive-tour.loader.d.ts +18 -18
- package/lib/interactive-tour/interactive-tour.module.d.ts +12 -12
- package/lib/interactive-tour/interactive-tour.service.d.ts +29 -29
- package/lib/json-dialog/index.d.ts +2 -2
- package/lib/json-dialog/json-dialog.component.d.ts +13 -13
- package/lib/json-dialog/json-dialog.module.d.ts +13 -13
- package/lib/json-dialog/json-dialog.service.d.ts +10 -10
- package/lib/keyvalue/index.d.ts +1 -1
- package/lib/keyvalue/keyvalue.module.d.ts +9 -9
- package/lib/keyvalue/keyvalue.pipe.d.ts +7 -7
- package/lib/list/index.d.ts +2 -2
- package/lib/list/list-item.directive.d.ts +43 -43
- package/lib/list/list.component.d.ts +51 -51
- package/lib/list/list.module.d.ts +14 -14
- package/lib/panel/index.d.ts +1 -1
- package/lib/panel/panel.component.d.ts +10 -10
- package/lib/panel/panel.module.d.ts +8 -8
- package/lib/sidenav/index.d.ts +1 -1
- package/lib/sidenav/sidenav-shim.directive.d.ts +20 -20
- package/lib/sidenav/sidenav.module.d.ts +9 -9
- package/lib/spinner/index.d.ts +2 -2
- package/lib/spinner/spinner-activity.directive.d.ts +32 -32
- package/lib/spinner/spinner.component.d.ts +12 -12
- package/lib/spinner/spinner.module.d.ts +10 -10
- package/lib/stop-propagation/index.d.ts +2 -2
- package/lib/stop-propagation/stop-drop-propagation.directive.d.ts +6 -6
- package/lib/stop-propagation/stop-propagation.directive.d.ts +6 -6
- package/lib/stop-propagation/stop-propagation.module.d.ts +10 -10
- package/lib/table/index.d.ts +5 -5
- package/lib/table/table-action-color.enum.d.ts +5 -5
- package/lib/table/table-database.d.ts +10 -10
- package/lib/table/table-datasource.d.ts +17 -17
- package/lib/table/table-model.interface.d.ts +28 -28
- package/lib/table/table.component.d.ts +40 -40
- package/lib/table/table.module.d.ts +20 -20
- package/lib/tool/index.d.ts +2 -2
- package/lib/tool/shared/index.d.ts +5 -5
- package/lib/tool/shared/tool-component.d.ts +2 -2
- package/lib/tool/shared/tool.interface.d.ts +18 -18
- package/lib/tool/shared/tool.service.d.ts +30 -30
- package/lib/tool/shared/toolbox.d.ts +95 -95
- package/lib/tool/shared/toolbox.enums.d.ts +5 -5
- package/lib/tool/tool.module.d.ts +10 -10
- package/lib/tool/toolbox/toolbox.animation.d.ts +2 -2
- package/lib/tool/toolbox/toolbox.component.d.ts +127 -127
- package/lib/tool/toolbox/toolbox.module.d.ts +13 -13
- package/lib/widget/index.d.ts +2 -2
- package/lib/widget/shared/index.d.ts +3 -3
- package/lib/widget/shared/widget.d.ts +4 -4
- package/lib/widget/shared/widget.interfaces.d.ts +12 -12
- package/lib/widget/shared/widget.service.d.ts +10 -10
- package/lib/widget/widget-outlet/widget-outlet.component.d.ts +71 -71
- package/lib/widget/widget-outlet/widget-outlet.module.d.ts +12 -12
- package/lib/widget/widget.module.d.ts +8 -8
- package/lib/workspace/index.d.ts +3 -3
- package/lib/workspace/shared/index.d.ts +3 -3
- package/lib/workspace/shared/store.d.ts +20 -20
- package/lib/workspace/shared/workspace.d.ts +108 -108
- package/lib/workspace/shared/workspace.interfaces.d.ts +11 -11
- package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +39 -39
- package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +12 -12
- package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.d.ts +57 -57
- package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.d.ts +12 -12
- package/lib/workspace/workspace.module.d.ts +9 -9
- package/package.json +3 -3
- package/public_api.d.ts +70 -70
|
@@ -1,288 +1,288 @@
|
|
|
1
|
-
import { BehaviorSubject } from 'rxjs';
|
|
2
|
-
import { EntityStateManager } from './state';
|
|
3
|
-
import { EntityView } from './view';
|
|
4
|
-
import { getEntityId, getEntityProperty } from './entity.utils';
|
|
5
|
-
/**
|
|
6
|
-
* An entity store class holds any number of entities
|
|
7
|
-
* as well as their state. It can be observed, filtered and sorted and
|
|
8
|
-
* provides methods to insert, update or delete entities.
|
|
9
|
-
*/
|
|
10
|
-
export class EntityStore {
|
|
11
|
-
constructor(entities, options = {}) {
|
|
12
|
-
/**
|
|
13
|
-
* Observable of the raw entities
|
|
14
|
-
*/
|
|
15
|
-
this.entities$ = new BehaviorSubject([]);
|
|
16
|
-
/**
|
|
17
|
-
* Number of entities
|
|
18
|
-
*/
|
|
19
|
-
this.count$ = new BehaviorSubject(0);
|
|
20
|
-
/**
|
|
21
|
-
* Whether the store is empty
|
|
22
|
-
*/
|
|
23
|
-
this.empty$ = new BehaviorSubject(true);
|
|
24
|
-
this._pristine = true;
|
|
25
|
-
/**
|
|
26
|
-
* Strategies
|
|
27
|
-
*/
|
|
28
|
-
this.strategies = [];
|
|
29
|
-
this.getKey = options.getKey ? options.getKey : getEntityId;
|
|
30
|
-
this.getProperty = options.getProperty ? options.getProperty : getEntityProperty;
|
|
31
|
-
this.state = this.createStateManager();
|
|
32
|
-
this.view = this.createDataView();
|
|
33
|
-
this.stateView = this.createStateView();
|
|
34
|
-
this.view.lift();
|
|
35
|
-
this.stateView.lift();
|
|
36
|
-
if (entities.length > 0) {
|
|
37
|
-
this.load(entities);
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
this._index = this.generateIndex(entities);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
get count() { return this.count$.value; }
|
|
44
|
-
get empty() { return this.empty$.value; }
|
|
45
|
-
/**
|
|
46
|
-
* Store index
|
|
47
|
-
*/
|
|
48
|
-
get index() { return this._index; }
|
|
49
|
-
/**
|
|
50
|
-
* Store index
|
|
51
|
-
*/
|
|
52
|
-
get pristine() { return this._pristine; }
|
|
53
|
-
/**
|
|
54
|
-
* Get an entity from the store by key
|
|
55
|
-
* @param key Key
|
|
56
|
-
* @returns Entity
|
|
57
|
-
*/
|
|
58
|
-
get(key) {
|
|
59
|
-
return this.index.get(key);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Get all entities in the store
|
|
63
|
-
* @returns Array of entities
|
|
64
|
-
*/
|
|
65
|
-
all() {
|
|
66
|
-
return this.entities$.value;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Set this store's entities
|
|
70
|
-
* @param entities Entities
|
|
71
|
-
*/
|
|
72
|
-
load(entities, pristine = true) {
|
|
73
|
-
this._index = this.generateIndex(entities);
|
|
74
|
-
this._pristine = pristine;
|
|
75
|
-
this.next();
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Clear the store's entities but keep the state and views intact.
|
|
79
|
-
* Views won't return any data but future data will be subject to the
|
|
80
|
-
* current views filter and sort
|
|
81
|
-
*/
|
|
82
|
-
softClear() {
|
|
83
|
-
if (this.index && this.index.size > 0) {
|
|
84
|
-
this.index.clear();
|
|
85
|
-
this._pristine = true;
|
|
86
|
-
this.next();
|
|
87
|
-
}
|
|
88
|
-
else if (this.index) {
|
|
89
|
-
this.updateCount();
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Clear the store's entities, state and views
|
|
94
|
-
*/
|
|
95
|
-
clear() {
|
|
96
|
-
this.stateView.clear();
|
|
97
|
-
this.view.clear();
|
|
98
|
-
this.state.clear();
|
|
99
|
-
this.softClear();
|
|
100
|
-
}
|
|
101
|
-
destroy() {
|
|
102
|
-
this.stateView.destroy();
|
|
103
|
-
this.view.destroy();
|
|
104
|
-
this.clear();
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Insert an entity into the store
|
|
108
|
-
* @param entity Entity
|
|
109
|
-
*/
|
|
110
|
-
insert(entity) {
|
|
111
|
-
this.insertMany([entity]);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Insert many entities into the store
|
|
115
|
-
* @param entities Entities
|
|
116
|
-
*/
|
|
117
|
-
insertMany(entities) {
|
|
118
|
-
entities.forEach((entity) => this.index.set(this.getKey(entity), entity));
|
|
119
|
-
this._pristine = false;
|
|
120
|
-
this.next();
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Update or insert an entity into the store
|
|
124
|
-
* @param entity Entity
|
|
125
|
-
*/
|
|
126
|
-
update(entity) {
|
|
127
|
-
this.updateMany([entity]);
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Update or insert many entities into the store
|
|
131
|
-
* @param entities Entities
|
|
132
|
-
*/
|
|
133
|
-
updateMany(entities) {
|
|
134
|
-
entities.forEach((entity) => this.index.set(this.getKey(entity), entity));
|
|
135
|
-
this._pristine = false;
|
|
136
|
-
this.next();
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Delete an entity from the store
|
|
140
|
-
* @param entity Entity
|
|
141
|
-
*/
|
|
142
|
-
delete(entity) {
|
|
143
|
-
this.deleteMany([entity]);
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Delete many entities from the store
|
|
147
|
-
* @param entities Entities
|
|
148
|
-
*/
|
|
149
|
-
deleteMany(entities) {
|
|
150
|
-
entities.forEach((entity) => this.index.delete(this.getKey(entity)));
|
|
151
|
-
this._pristine = false;
|
|
152
|
-
this.next();
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Add a strategy to this store
|
|
156
|
-
* @param strategy Entity store strategy
|
|
157
|
-
* @returns Entity store
|
|
158
|
-
*/
|
|
159
|
-
addStrategy(strategy, activate = false) {
|
|
160
|
-
const existingStrategy = this.strategies.find((_strategy) => {
|
|
161
|
-
return strategy.constructor === _strategy.constructor;
|
|
162
|
-
});
|
|
163
|
-
if (existingStrategy !== undefined) {
|
|
164
|
-
throw new Error('A strategy of this type already exists on that EntityStore.');
|
|
165
|
-
}
|
|
166
|
-
this.strategies.push(strategy);
|
|
167
|
-
strategy.bindStore(this);
|
|
168
|
-
if (activate === true) {
|
|
169
|
-
strategy.activate();
|
|
170
|
-
}
|
|
171
|
-
return this;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Remove a strategy from this store
|
|
175
|
-
* @param strategy Entity store strategy
|
|
176
|
-
* @returns Entity store
|
|
177
|
-
*/
|
|
178
|
-
removeStrategy(strategy) {
|
|
179
|
-
const index = this.strategies.indexOf(strategy);
|
|
180
|
-
if (index >= 0) {
|
|
181
|
-
this.strategies.splice(index, 1);
|
|
182
|
-
strategy.unbindStore(this);
|
|
183
|
-
}
|
|
184
|
-
return this;
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Return strategies of a given type
|
|
188
|
-
* @param type Entity store strategy class
|
|
189
|
-
* @returns Strategies
|
|
190
|
-
*/
|
|
191
|
-
getStrategyOfType(type) {
|
|
192
|
-
return this.strategies.find((strategy) => {
|
|
193
|
-
return strategy instanceof type;
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Activate strategies of a given type
|
|
198
|
-
* @param type Entity store strategy class
|
|
199
|
-
*/
|
|
200
|
-
activateStrategyOfType(type) {
|
|
201
|
-
const strategy = this.getStrategyOfType(type);
|
|
202
|
-
if (strategy !== undefined) {
|
|
203
|
-
strategy.activate();
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Deactivate strategies of a given type
|
|
208
|
-
* @param type Entity store strategy class
|
|
209
|
-
*/
|
|
210
|
-
deactivateStrategyOfType(type) {
|
|
211
|
-
const strategy = this.getStrategyOfType(type);
|
|
212
|
-
if (strategy !== undefined) {
|
|
213
|
-
strategy.deactivate();
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Generate a complete index of all the entities
|
|
218
|
-
* @param entities Entities
|
|
219
|
-
* @returns Index
|
|
220
|
-
*/
|
|
221
|
-
generateIndex(entities) {
|
|
222
|
-
const entries = entities.map((entity) => [this.getKey(entity), entity]);
|
|
223
|
-
return new Map(entries);
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Push the index's entities into the entities$ observable
|
|
227
|
-
*/
|
|
228
|
-
next() {
|
|
229
|
-
this.entities$.next(Array.from(this.index.values()));
|
|
230
|
-
this.updateCount();
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Update the store's count and empty
|
|
234
|
-
*/
|
|
235
|
-
updateCount() {
|
|
236
|
-
const count = this.index.size;
|
|
237
|
-
const empty = count === 0;
|
|
238
|
-
this.count$.next(count);
|
|
239
|
-
this.empty$.next(empty);
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Create the entity state manager
|
|
243
|
-
* @returns EntityStateManager
|
|
244
|
-
*/
|
|
245
|
-
createStateManager() {
|
|
246
|
-
return new EntityStateManager({ store: this });
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Create the data view
|
|
250
|
-
* @returns EntityView<E>
|
|
251
|
-
*/
|
|
252
|
-
createDataView() {
|
|
253
|
-
return new EntityView(this.entities$);
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Create the state view
|
|
257
|
-
* @returns EntityView<EntityRecord<E>>
|
|
258
|
-
*/
|
|
259
|
-
createStateView() {
|
|
260
|
-
return new EntityView(this.view.all$())
|
|
261
|
-
.join({
|
|
262
|
-
source: this.state.change$,
|
|
263
|
-
reduce: (entity) => {
|
|
264
|
-
const key = this.getKey(entity);
|
|
265
|
-
const state = this.state.get(entity);
|
|
266
|
-
const currentRecord = this.stateView.get(key);
|
|
267
|
-
if (currentRecord !== undefined &&
|
|
268
|
-
currentRecord.entity === entity &&
|
|
269
|
-
this.statesAreTheSame(currentRecord.state, state)) {
|
|
270
|
-
return currentRecord;
|
|
271
|
-
}
|
|
272
|
-
const revision = currentRecord ? currentRecord.revision + 1 : 1;
|
|
273
|
-
const ref = `${key}-${revision}`;
|
|
274
|
-
return { entity, state, revision, ref };
|
|
275
|
-
}
|
|
276
|
-
})
|
|
277
|
-
.createIndex((record) => this.getKey(record.entity));
|
|
278
|
-
}
|
|
279
|
-
statesAreTheSame(currentState, newState) {
|
|
280
|
-
if (currentState === newState) {
|
|
281
|
-
return true;
|
|
282
|
-
}
|
|
283
|
-
const currentStateIsEmpty = Object.keys(currentState).length === 0;
|
|
284
|
-
const newStateIsEmpty = Object.keys(newState).length === 0;
|
|
285
|
-
return currentStateIsEmpty && newStateIsEmpty;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
1
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
import { EntityStateManager } from './state';
|
|
3
|
+
import { EntityView } from './view';
|
|
4
|
+
import { getEntityId, getEntityProperty } from './entity.utils';
|
|
5
|
+
/**
|
|
6
|
+
* An entity store class holds any number of entities
|
|
7
|
+
* as well as their state. It can be observed, filtered and sorted and
|
|
8
|
+
* provides methods to insert, update or delete entities.
|
|
9
|
+
*/
|
|
10
|
+
export class EntityStore {
|
|
11
|
+
constructor(entities, options = {}) {
|
|
12
|
+
/**
|
|
13
|
+
* Observable of the raw entities
|
|
14
|
+
*/
|
|
15
|
+
this.entities$ = new BehaviorSubject([]);
|
|
16
|
+
/**
|
|
17
|
+
* Number of entities
|
|
18
|
+
*/
|
|
19
|
+
this.count$ = new BehaviorSubject(0);
|
|
20
|
+
/**
|
|
21
|
+
* Whether the store is empty
|
|
22
|
+
*/
|
|
23
|
+
this.empty$ = new BehaviorSubject(true);
|
|
24
|
+
this._pristine = true;
|
|
25
|
+
/**
|
|
26
|
+
* Strategies
|
|
27
|
+
*/
|
|
28
|
+
this.strategies = [];
|
|
29
|
+
this.getKey = options.getKey ? options.getKey : getEntityId;
|
|
30
|
+
this.getProperty = options.getProperty ? options.getProperty : getEntityProperty;
|
|
31
|
+
this.state = this.createStateManager();
|
|
32
|
+
this.view = this.createDataView();
|
|
33
|
+
this.stateView = this.createStateView();
|
|
34
|
+
this.view.lift();
|
|
35
|
+
this.stateView.lift();
|
|
36
|
+
if (entities.length > 0) {
|
|
37
|
+
this.load(entities);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this._index = this.generateIndex(entities);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
get count() { return this.count$.value; }
|
|
44
|
+
get empty() { return this.empty$.value; }
|
|
45
|
+
/**
|
|
46
|
+
* Store index
|
|
47
|
+
*/
|
|
48
|
+
get index() { return this._index; }
|
|
49
|
+
/**
|
|
50
|
+
* Store index
|
|
51
|
+
*/
|
|
52
|
+
get pristine() { return this._pristine; }
|
|
53
|
+
/**
|
|
54
|
+
* Get an entity from the store by key
|
|
55
|
+
* @param key Key
|
|
56
|
+
* @returns Entity
|
|
57
|
+
*/
|
|
58
|
+
get(key) {
|
|
59
|
+
return this.index.get(key);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get all entities in the store
|
|
63
|
+
* @returns Array of entities
|
|
64
|
+
*/
|
|
65
|
+
all() {
|
|
66
|
+
return this.entities$.value;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Set this store's entities
|
|
70
|
+
* @param entities Entities
|
|
71
|
+
*/
|
|
72
|
+
load(entities, pristine = true) {
|
|
73
|
+
this._index = this.generateIndex(entities);
|
|
74
|
+
this._pristine = pristine;
|
|
75
|
+
this.next();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Clear the store's entities but keep the state and views intact.
|
|
79
|
+
* Views won't return any data but future data will be subject to the
|
|
80
|
+
* current views filter and sort
|
|
81
|
+
*/
|
|
82
|
+
softClear() {
|
|
83
|
+
if (this.index && this.index.size > 0) {
|
|
84
|
+
this.index.clear();
|
|
85
|
+
this._pristine = true;
|
|
86
|
+
this.next();
|
|
87
|
+
}
|
|
88
|
+
else if (this.index) {
|
|
89
|
+
this.updateCount();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Clear the store's entities, state and views
|
|
94
|
+
*/
|
|
95
|
+
clear() {
|
|
96
|
+
this.stateView.clear();
|
|
97
|
+
this.view.clear();
|
|
98
|
+
this.state.clear();
|
|
99
|
+
this.softClear();
|
|
100
|
+
}
|
|
101
|
+
destroy() {
|
|
102
|
+
this.stateView.destroy();
|
|
103
|
+
this.view.destroy();
|
|
104
|
+
this.clear();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Insert an entity into the store
|
|
108
|
+
* @param entity Entity
|
|
109
|
+
*/
|
|
110
|
+
insert(entity) {
|
|
111
|
+
this.insertMany([entity]);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Insert many entities into the store
|
|
115
|
+
* @param entities Entities
|
|
116
|
+
*/
|
|
117
|
+
insertMany(entities) {
|
|
118
|
+
entities.forEach((entity) => this.index.set(this.getKey(entity), entity));
|
|
119
|
+
this._pristine = false;
|
|
120
|
+
this.next();
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Update or insert an entity into the store
|
|
124
|
+
* @param entity Entity
|
|
125
|
+
*/
|
|
126
|
+
update(entity) {
|
|
127
|
+
this.updateMany([entity]);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Update or insert many entities into the store
|
|
131
|
+
* @param entities Entities
|
|
132
|
+
*/
|
|
133
|
+
updateMany(entities) {
|
|
134
|
+
entities.forEach((entity) => this.index.set(this.getKey(entity), entity));
|
|
135
|
+
this._pristine = false;
|
|
136
|
+
this.next();
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Delete an entity from the store
|
|
140
|
+
* @param entity Entity
|
|
141
|
+
*/
|
|
142
|
+
delete(entity) {
|
|
143
|
+
this.deleteMany([entity]);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Delete many entities from the store
|
|
147
|
+
* @param entities Entities
|
|
148
|
+
*/
|
|
149
|
+
deleteMany(entities) {
|
|
150
|
+
entities.forEach((entity) => this.index.delete(this.getKey(entity)));
|
|
151
|
+
this._pristine = false;
|
|
152
|
+
this.next();
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Add a strategy to this store
|
|
156
|
+
* @param strategy Entity store strategy
|
|
157
|
+
* @returns Entity store
|
|
158
|
+
*/
|
|
159
|
+
addStrategy(strategy, activate = false) {
|
|
160
|
+
const existingStrategy = this.strategies.find((_strategy) => {
|
|
161
|
+
return strategy.constructor === _strategy.constructor;
|
|
162
|
+
});
|
|
163
|
+
if (existingStrategy !== undefined) {
|
|
164
|
+
throw new Error('A strategy of this type already exists on that EntityStore.');
|
|
165
|
+
}
|
|
166
|
+
this.strategies.push(strategy);
|
|
167
|
+
strategy.bindStore(this);
|
|
168
|
+
if (activate === true) {
|
|
169
|
+
strategy.activate();
|
|
170
|
+
}
|
|
171
|
+
return this;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Remove a strategy from this store
|
|
175
|
+
* @param strategy Entity store strategy
|
|
176
|
+
* @returns Entity store
|
|
177
|
+
*/
|
|
178
|
+
removeStrategy(strategy) {
|
|
179
|
+
const index = this.strategies.indexOf(strategy);
|
|
180
|
+
if (index >= 0) {
|
|
181
|
+
this.strategies.splice(index, 1);
|
|
182
|
+
strategy.unbindStore(this);
|
|
183
|
+
}
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Return strategies of a given type
|
|
188
|
+
* @param type Entity store strategy class
|
|
189
|
+
* @returns Strategies
|
|
190
|
+
*/
|
|
191
|
+
getStrategyOfType(type) {
|
|
192
|
+
return this.strategies.find((strategy) => {
|
|
193
|
+
return strategy instanceof type;
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Activate strategies of a given type
|
|
198
|
+
* @param type Entity store strategy class
|
|
199
|
+
*/
|
|
200
|
+
activateStrategyOfType(type) {
|
|
201
|
+
const strategy = this.getStrategyOfType(type);
|
|
202
|
+
if (strategy !== undefined) {
|
|
203
|
+
strategy.activate();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Deactivate strategies of a given type
|
|
208
|
+
* @param type Entity store strategy class
|
|
209
|
+
*/
|
|
210
|
+
deactivateStrategyOfType(type) {
|
|
211
|
+
const strategy = this.getStrategyOfType(type);
|
|
212
|
+
if (strategy !== undefined) {
|
|
213
|
+
strategy.deactivate();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Generate a complete index of all the entities
|
|
218
|
+
* @param entities Entities
|
|
219
|
+
* @returns Index
|
|
220
|
+
*/
|
|
221
|
+
generateIndex(entities) {
|
|
222
|
+
const entries = entities.map((entity) => [this.getKey(entity), entity]);
|
|
223
|
+
return new Map(entries);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Push the index's entities into the entities$ observable
|
|
227
|
+
*/
|
|
228
|
+
next() {
|
|
229
|
+
this.entities$.next(Array.from(this.index.values()));
|
|
230
|
+
this.updateCount();
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Update the store's count and empty
|
|
234
|
+
*/
|
|
235
|
+
updateCount() {
|
|
236
|
+
const count = this.index.size;
|
|
237
|
+
const empty = count === 0;
|
|
238
|
+
this.count$.next(count);
|
|
239
|
+
this.empty$.next(empty);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Create the entity state manager
|
|
243
|
+
* @returns EntityStateManager
|
|
244
|
+
*/
|
|
245
|
+
createStateManager() {
|
|
246
|
+
return new EntityStateManager({ store: this });
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Create the data view
|
|
250
|
+
* @returns EntityView<E>
|
|
251
|
+
*/
|
|
252
|
+
createDataView() {
|
|
253
|
+
return new EntityView(this.entities$);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Create the state view
|
|
257
|
+
* @returns EntityView<EntityRecord<E>>
|
|
258
|
+
*/
|
|
259
|
+
createStateView() {
|
|
260
|
+
return new EntityView(this.view.all$())
|
|
261
|
+
.join({
|
|
262
|
+
source: this.state.change$,
|
|
263
|
+
reduce: (entity) => {
|
|
264
|
+
const key = this.getKey(entity);
|
|
265
|
+
const state = this.state.get(entity);
|
|
266
|
+
const currentRecord = this.stateView.get(key);
|
|
267
|
+
if (currentRecord !== undefined &&
|
|
268
|
+
currentRecord.entity === entity &&
|
|
269
|
+
this.statesAreTheSame(currentRecord.state, state)) {
|
|
270
|
+
return currentRecord;
|
|
271
|
+
}
|
|
272
|
+
const revision = currentRecord ? currentRecord.revision + 1 : 1;
|
|
273
|
+
const ref = `${key}-${revision}`;
|
|
274
|
+
return { entity, state, revision, ref };
|
|
275
|
+
}
|
|
276
|
+
})
|
|
277
|
+
.createIndex((record) => this.getKey(record.entity));
|
|
278
|
+
}
|
|
279
|
+
statesAreTheSame(currentState, newState) {
|
|
280
|
+
if (currentState === newState) {
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
const currentStateIsEmpty = Object.keys(currentState).length === 0;
|
|
284
|
+
const newStateIsEmpty = Object.keys(newState).length === 0;
|
|
285
|
+
return currentStateIsEmpty && newStateIsEmpty;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
288
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi9lbnRpdHkvc2hhcmVkL3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2hFOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQTZEdEIsWUFBWSxRQUFhLEVBQUUsVUFBOEIsRUFBRTtRQTNEM0Q7O1dBRUc7UUFDTSxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFFbEQ7O1dBRUc7UUFDTSxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFHakQ7O1dBRUc7UUFDTSxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFzQzdDLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFbEM7O1dBRUc7UUFDSyxlQUFVLEdBQTBCLEVBQUUsQ0FBQztRQUc3QyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1FBRWpGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUks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LE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFlBQWUsRUFBRSxRQUFXO1FBQ25ELElBQUksWUFBWSxLQUFLLFFBQVEsRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDbkUsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQzNELE9BQU8sbUJBQW1CLElBQUksZUFBZSxDQUFDO0lBQ2hELENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZU1hbmFnZXIgfSBmcm9tICcuL3N0YXRlJztcbmltcG9ydCB7IEVudGl0eVZpZXcgfSBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IHsgRW50aXR5S2V5LCBFbnRpdHlTdGF0ZSwgRW50aXR5UmVjb3JkLCBFbnRpdHlTdG9yZU9wdGlvbnMgfSBmcm9tICcuL2VudGl0eS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldEVudGl0eUlkLCBnZXRFbnRpdHlQcm9wZXJ0eSB9IGZyb20gJy4vZW50aXR5LnV0aWxzJztcbmltcG9ydCB7IEVudGl0eVN0b3JlU3RyYXRlZ3kgfSBmcm9tICcuL3N0cmF0ZWdpZXMvc3RyYXRlZ3knO1xuXG4vKipcbiAqIEFuIGVudGl0eSBzdG9yZSBjbGFzcyBob2xkcyBhbnkgbnVtYmVyIG9mIGVudGl0aWVzXG4gKiBhcyB3ZWxsIGFzIHRoZWlyIHN0YXRlLiBJdCBjYW4gYmUgb2JzZXJ2ZWQsIGZpbHRlcmVkIGFuZCBzb3J0ZWQgYW5kXG4gKiBwcm92aWRlcyBtZXRob2RzIHRvIGluc2VydCwgdXBkYXRlIG9yIGRlbGV0ZSBlbnRpdGllcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVudGl0eVN0b3JlPEUgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3QsIFMgZXh0ZW5kcyBFbnRpdHlTdGF0ZSA9IEVudGl0eVN0YXRlPiB7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIHJhdyBlbnRpdGllc1xuICAgKi9cbiAgcmVhZG9ubHkgZW50aXRpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFW10+KFtdKTtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIGVudGl0aWVzXG4gICAqL1xuICByZWFkb25seSBjb3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIGdldCBjb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb3VudCQudmFsdWU7IH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc3RvcmUgaXMgZW1wdHlcbiAgICovXG4gIHJlYWRvbmx5IGVtcHR5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZW1wdHkkLnZhbHVlOyB9XG5cbiAgLyoqXG4gICAqIEVudGl0eSBzdG9yZSBzdGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGU6IEVudGl0eVN0YXRlTWFuYWdlcjxFLCBTPjtcblxuICAvKipcbiAgICogVmlldyBvZiBhbGwgdGhlIGVudGl0aWVzXG4gICAqL1xuICByZWFkb25seSB2aWV3OiBFbnRpdHlWaWV3PEU+O1xuXG4gIC8qKlxuICAgKiBWaWV3IG9mIGFsbCB0aGUgZW50aXRpZXMgYW5kIHRoZWlyIHN0YXRlXG4gICAqL1xuICByZWFkb25seSBzdGF0ZVZpZXc6IEVudGl0eVZpZXc8RSwgRW50aXR5UmVjb3JkPEUsIFM+PjtcblxuICAvKipcbiAgICogTWV0aG9kIHRvIGdldCBhbiBlbnRpdHkncyBpZFxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0S2V5OiAoRSkgPT4gRW50aXR5S2V5O1xuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gZ2V0IGFuIGVudGl0eSdzIG5hbWVkIHByb3BlcnR5XG4gICAqL1xuICByZWFkb25seSBnZXRQcm9wZXJ0eTogKEUsIHByb3A6IHN0cmluZykgPT4gYW55O1xuXG4gIC8qKlxuICAgKiBTdG9yZSBpbmRleFxuICAgKi9cbiAgZ2V0IGluZGV4KCk6IE1hcDxFbnRpdHlLZXksIEU+IHsgcmV0dXJuIHRoaXMuX2luZGV4OyB9XG4gIHByaXZhdGUgX2luZGV4OiBNYXA8RW50aXR5S2V5LCBFPjtcblxuICAvKipcbiAgICogU3RvcmUgaW5kZXhcbiAgICovXG4gIGdldCBwcmlzdGluZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3ByaXN0aW5lOyB9XG4gIHByaXZhdGUgX3ByaXN0aW5lOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogU3RyYXRlZ2llc1xuICAgKi9cbiAgcHJpdmF0ZSBzdHJhdGVnaWVzOiBFbnRpdHlTdG9yZVN0cmF0ZWd5W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihlbnRpdGllczogRVtdLCBvcHRpb25zOiBFbnRpdHlTdG9yZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuZ2V0S2V5ID0gb3B0aW9ucy5nZXRLZXkgPyBvcHRpb25zLmdldEtleSA6IGdldEVudGl0eUlkO1xuICAgIHRoaXMuZ2V0UHJvcGVydHkgPSBvcHRpb25zLmdldFByb3BlcnR5ID8gb3B0aW9ucy5nZXRQcm9wZXJ0eSA6IGdldEVudGl0eVByb3BlcnR5O1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuY3JlYXRlU3RhdGVNYW5hZ2VyKCk7XG4gICAgdGhpcy52aWV3ID0gdGhpcy5jcmVhdGVEYXRhVmlldygpO1xuICAgIHRoaXMuc3RhdGVWaWV3ID0gdGhpcy5jcmVhdGVTdGF0ZVZpZXcoKTtcblxuICAgIHRoaXMudmlldy5saWZ0KCk7XG4gICAgdGhpcy5zdGF0ZVZpZXcubGlmdCgpO1xuXG4gICAgaWYgKGVudGl0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubG9hZChlbnRpdGllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2luZGV4ID0gdGhpcy5nZW5lcmF0ZUluZGV4KGVudGl0aWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGVudGl0eSBmcm9tIHRoZSBzdG9yZSBieSBrZXlcbiAgICogQHBhcmFtIGtleSBLZXlcbiAgICogQHJldHVybnMgRW50aXR5XG4gICAqL1xuICBnZXQoa2V5OiBFbnRpdHlLZXkpOiBFIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleC5nZXQoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGVudGl0aWVzIGluIHRoZSBzdG9yZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBlbnRpdGllc1xuICAgKi9cbiAgYWxsKCk6IEVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXRpZXMkLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHN0b3JlJ3MgZW50aXRpZXNcbiAgICogQHBhcmFtIGVudGl0aWVzIEVudGl0aWVzXG4gICAqL1xuICBsb2FkKGVudGl0aWVzOiBFW10sIHByaXN0aW5lOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMuX2luZGV4ID0gdGhpcy5nZW5lcmF0ZUluZGV4KGVudGl0aWVzKTtcbiAgICB0aGlzLl9wcmlzdGluZSA9IHByaXN0aW5lO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBzdG9yZSdzIGVudGl0aWVzIGJ1dCBrZWVwIHRoZSBzdGF0ZSBhbmQgdmlld3MgaW50YWN0LlxuICAgKiBWaWV3cyB3b24ndCByZXR1cm4gYW55IGRhdGEgYnV0IGZ1dHVyZSBkYXRhIHdpbGwgYmUgc3ViamVjdCB0byB0aGVcbiAgICogY3VycmVudCB2aWV3cyBmaWx0ZXIgYW5kIHNvcnRcbiAgICovXG4gIHNvZnRDbGVhcigpIHtcbiAgICBpZiAodGhpcy5pbmRleCAmJiB0aGlzLmluZGV4LnNpemUgPiAwKSB7XG4gICAgICB0aGlzLmluZGV4LmNsZWFyKCk7XG4gICAgICB0aGlzLl9wcmlzdGluZSA9IHRydWU7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgIHRoaXMudXBkYXRlQ291bnQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHN0b3JlJ3MgZW50aXRpZXMsIHN0YXRlIGFuZCB2aWV3c1xuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5zdGF0ZVZpZXcuY2xlYXIoKTtcbiAgICB0aGlzLnZpZXcuY2xlYXIoKTtcbiAgICB0aGlzLnN0YXRlLmNsZWFyKCk7XG4gICAgdGhpcy5zb2Z0Q2xlYXIoKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdGF0ZVZpZXcuZGVzdHJveSgpO1xuICAgIHRoaXMudmlldy5kZXN0cm95KCk7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydCBhbiBlbnRpdHkgaW50byB0aGUgc3RvcmVcbiAgICogQHBhcmFtIGVudGl0eSBFbnRpdHlcbiAgICovXG4gIGluc2VydChlbnRpdHk6IEUpIHtcbiAgICB0aGlzLmluc2VydE1hbnkoW2VudGl0eV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydCBtYW55IGVudGl0aWVzIGludG8gdGhlIHN0b3JlXG4gICAqIEBwYXJhbSBlbnRpdGllcyBFbnRpdGllc1xuICAgKi9cbiAgaW5zZXJ0TWFueShlbnRpdGllczogRVtdKSB7XG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5OiBFKSA9PiB0aGlzLmluZGV4LnNldCh0aGlzLmdldEtleShlbnRpdHkpLCBlbnRpdHkpKTtcbiAgICB0aGlzLl9wcmlzdGluZSA9IGZhbHNlO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBvciBpbnNlcnQgYW4gZW50aXR5IGludG8gdGhlIHN0b3JlXG4gICAqIEBwYXJhbSBlbnRpdHkgRW50aXR5XG4gICAqL1xuICB1cGRhdGUoZW50aXR5OiBFKSB7XG4gICAgdGhpcy51cGRhdGVNYW55KFtlbnRpdHldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgb3IgaW5zZXJ0IG1hbnkgZW50aXRpZXMgaW50byB0aGUgc3RvcmVcbiAgICogQHBhcmFtIGVudGl0aWVzIEVudGl0aWVzXG4gICAqL1xuICB1cGRhdGVNYW55KGVudGl0aWVzOiBFW10pIHtcbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHk6IEUpID0+IHRoaXMuaW5kZXguc2V0KHRoaXMuZ2V0S2V5KGVudGl0eSksIGVudGl0eSkpO1xuICAgIHRoaXMuX3ByaXN0aW5lID0gZmFsc2U7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGFuIGVudGl0eSBmcm9tIHRoZSBzdG9yZVxuICAgKiBAcGFyYW0gZW50aXR5IEVudGl0eVxuICAgKi9cbiAgZGVsZXRlKGVudGl0eTogRSkge1xuICAgIHRoaXMuZGVsZXRlTWFueShbZW50aXR5XSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIG1hbnkgZW50aXRpZXMgZnJvbSB0aGUgc3RvcmVcbiAgICogQHBhcmFtIGVudGl0aWVzIEVudGl0aWVzXG4gICAqL1xuICBkZWxldGVNYW55KGVudGl0aWVzOiBFW10pIHtcbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHk6IEUpID0+IHRoaXMuaW5kZXguZGVsZXRlKHRoaXMuZ2V0S2V5KGVudGl0eSkpKTtcbiAgICB0aGlzLl9wcmlzdGluZSA9IGZhbHNlO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHN0cmF0ZWd5IHRvIHRoaXMgc3RvcmVcbiAgICogQHBhcmFtIHN0cmF0ZWd5IEVudGl0eSBzdG9yZSBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBFbnRpdHkgc3RvcmVcbiAgICovXG4gIGFkZFN0cmF0ZWd5KHN0cmF0ZWd5OiBFbnRpdHlTdG9yZVN0cmF0ZWd5LCBhY3RpdmF0ZTogYm9vbGVhbiA9IGZhbHNlKTogRW50aXR5U3RvcmUge1xuICAgIGNvbnN0IGV4aXN0aW5nU3RyYXRlZ3kgPSB0aGlzLnN0cmF0ZWdpZXMuZmluZCgoX3N0cmF0ZWd5OiBFbnRpdHlTdG9yZVN0cmF0ZWd5KSA9PiB7XG4gICAgICByZXR1cm4gc3RyYXRlZ3kuY29uc3RydWN0b3IgPT09IF9zdHJhdGVneS5jb25zdHJ1Y3RvcjtcbiAgICB9KTtcbiAgICBpZiAoZXhpc3RpbmdTdHJhdGVneSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egc3RyYXRlZ3kgb2YgdGhpcyB0eXBlIGFscmVhZHkgZXhpc3RzIG9uIHRoYXQgRW50aXR5U3RvcmUuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zdHJhdGVnaWVzLnB1c2goc3RyYXRlZ3kpO1xuICAgIHN0cmF0ZWd5LmJpbmRTdG9yZSh0aGlzKTtcblxuICAgIGlmIChhY3RpdmF0ZSA9PT0gdHJ1ZSkge1xuICAgICAgc3RyYXRlZ3kuYWN0aXZhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBzdHJhdGVneSBmcm9tIHRoaXMgc3RvcmVcbiAgICogQHBhcmFtIHN0cmF0ZWd5IEVudGl0eSBzdG9yZSBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBFbnRpdHkgc3RvcmVcbiAgICovXG4gIHJlbW92ZVN0cmF0ZWd5KHN0cmF0ZWd5OiBFbnRpdHlTdG9yZVN0cmF0ZWd5KTogRW50aXR5U3RvcmUge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdHJhdGVnaWVzLmluZGV4T2Yoc3RyYXRlZ3kpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLnN0cmF0ZWdpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHN0cmF0ZWd5LnVuYmluZFN0b3JlKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gc3RyYXRlZ2llcyBvZiBhIGdpdmVuIHR5cGVcbiAgICogQHBhcmFtIHR5cGUgRW50aXR5IHN0b3JlIHN0cmF0ZWd5IGNsYXNzXG4gICAqIEByZXR1cm5zIFN0cmF0ZWdpZXNcbiAgICovXG4gIGdldFN0cmF0ZWd5T2ZUeXBlKHR5cGU6IHR5cGVvZiBFbnRpdHlTdG9yZVN0cmF0ZWd5KTogRW50aXR5U3RvcmVTdHJhdGVneSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyYXRlZ2llcy5maW5kKChzdHJhdGVneTogRW50aXR5U3RvcmVTdHJhdGVneSkgPT4ge1xuICAgICAgcmV0dXJuIHN0cmF0ZWd5IGluc3RhbmNlb2YgdHlwZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBzdHJhdGVnaWVzIG9mIGEgZ2l2ZW4gdHlwZVxuICAgKiBAcGFyYW0gdHlwZSBFbnRpdHkgc3RvcmUgc3RyYXRlZ3kgY2xhc3NcbiAgICovXG4gIGFjdGl2YXRlU3RyYXRlZ3lPZlR5cGUodHlwZTogdHlwZW9mIEVudGl0eVN0b3JlU3RyYXRlZ3kpIHtcbiAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuZ2V0U3RyYXRlZ3lPZlR5cGUodHlwZSk7XG4gICAgaWYgKHN0cmF0ZWd5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0cmF0ZWd5LmFjdGl2YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGUgc3RyYXRlZ2llcyBvZiBhIGdpdmVuIHR5cGVcbiAgICogQHBhcmFtIHR5cGUgRW50aXR5IHN0b3JlIHN0cmF0ZWd5IGNsYXNzXG4gICAqL1xuICBkZWFjdGl2YXRlU3RyYXRlZ3lPZlR5cGUodHlwZTogdHlwZW9mIEVudGl0eVN0b3JlU3RyYXRlZ3kpIHtcbiAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuZ2V0U3RyYXRlZ3lPZlR5cGUodHlwZSk7XG4gICAgaWYgKHN0cmF0ZWd5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0cmF0ZWd5LmRlYWN0aXZhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBjb21wbGV0ZSBpbmRleCBvZiBhbGwgdGhlIGVudGl0aWVzXG4gICAqIEBwYXJhbSBlbnRpdGllcyBFbnRpdGllc1xuICAgKiBAcmV0dXJucyBJbmRleFxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUluZGV4KGVudGl0aWVzOiBFW10pOiBNYXA8RW50aXR5S2V5LCBFPiB7XG4gICAgY29uc3QgZW50cmllcyA9IGVudGl0aWVzLm1hcCgoZW50aXR5OiBFKSA9PiBbdGhpcy5nZXRLZXkoZW50aXR5KSwgZW50aXR5XSk7XG4gICAgcmV0dXJuIG5ldyBNYXAoZW50cmllcyBhcyBbRW50aXR5S2V5LCBFXVtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdXNoIHRoZSBpbmRleCdzIGVudGl0aWVzIGludG8gdGhlIGVudGl0aWVzJCBvYnNlcnZhYmxlXG4gICAqL1xuICBwcml2YXRlIG5leHQoKSB7XG4gICAgdGhpcy5lbnRpdGllcyQubmV4dChBcnJheS5mcm9tKHRoaXMuaW5kZXgudmFsdWVzKCkpKTtcbiAgICB0aGlzLnVwZGF0ZUNvdW50KCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBzdG9yZSdzIGNvdW50IGFuZCBlbXB0eVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVDb3VudCgpIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuaW5kZXguc2l6ZTtcbiAgICBjb25zdCBlbXB0eSA9IGNvdW50ID09PSAwO1xuICAgIHRoaXMuY291bnQkLm5leHQoY291bnQpO1xuICAgIHRoaXMuZW1wdHkkLm5leHQoZW1wdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgZW50aXR5IHN0YXRlIG1hbmFnZXJcbiAgICogQHJldHVybnMgRW50aXR5U3RhdGVNYW5hZ2VyXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVN0YXRlTWFuYWdlcigpIHtcbiAgICByZXR1cm4gbmV3IEVudGl0eVN0YXRlTWFuYWdlcjxFLCBTPih7c3RvcmU6IHRoaXN9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGRhdGEgdmlld1xuICAgKiBAcmV0dXJucyBFbnRpdHlWaWV3PEU+XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZURhdGFWaWV3KCkge1xuICAgIHJldHVybiBuZXcgRW50aXR5VmlldzxFPih0aGlzLmVudGl0aWVzJCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBzdGF0ZSB2aWV3XG4gICAqIEByZXR1cm5zIEVudGl0eVZpZXc8RW50aXR5UmVjb3JkPEU+PlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVTdGF0ZVZpZXcoKSB7XG4gICAgcmV0dXJuIG5ldyBFbnRpdHlWaWV3PEUsIEVudGl0eVJlY29yZDxFLCBTPj4odGhpcy52aWV3LmFsbCQoKSlcbiAgICAgIC5qb2luKHtcbiAgICAgICAgc291cmNlOiB0aGlzLnN0YXRlLmNoYW5nZSQsXG4gICAgICAgIHJlZHVjZTogKGVudGl0eTogRSk6IEVudGl0eVJlY29yZDxFLCBTPiA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoZW50aXR5KTtcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUuZ2V0KGVudGl0eSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFJlY29yZCA9IHRoaXMuc3RhdGVWaWV3LmdldChrZXkpO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY3VycmVudFJlY29yZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBjdXJyZW50UmVjb3JkLmVudGl0eSA9PT0gZW50aXR5ICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlc0FyZVRoZVNhbWUoY3VycmVudFJlY29yZC5zdGF0ZSwgc3RhdGUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFJlY29yZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByZXZpc2lvbiA9IGN1cnJlbnRSZWNvcmQgPyBjdXJyZW50UmVjb3JkLnJldmlzaW9uICsgMSA6IDE7XG4gICAgICAgICAgY29uc3QgcmVmID0gYCR7a2V5fS0ke3JldmlzaW9ufWA7XG4gICAgICAgICAgcmV0dXJuIHtlbnRpdHksIHN0YXRlLCByZXZpc2lvbiwgcmVmfTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jcmVhdGVJbmRleCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RSwgUz4pID0+IHRoaXMuZ2V0S2V5KHJlY29yZC5lbnRpdHkpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGVzQXJlVGhlU2FtZShjdXJyZW50U3RhdGU6IFMsIG5ld1N0YXRlOiBTKTogYm9vbGVhbiB7XG4gICAgaWYgKGN1cnJlbnRTdGF0ZSA9PT0gbmV3U3RhdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZUlzRW1wdHkgPSBPYmplY3Qua2V5cyhjdXJyZW50U3RhdGUpLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBuZXdTdGF0ZUlzRW1wdHkgPSBPYmplY3Qua2V5cyhuZXdTdGF0ZSkubGVuZ3RoID09PSAwO1xuICAgIHJldHVybiBjdXJyZW50U3RhdGVJc0VtcHR5ICYmIG5ld1N0YXRlSXNFbXB0eTtcbiAgfVxuXG59XG4iXX0=
|