@igo2/common 1.8.1 → 1.9.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/bundles/igo2-common.umd.js +10700 -10473
- package/bundles/igo2-common.umd.js.map +1 -1
- package/esm2015/igo2-common.js +5 -5
- package/esm2015/lib/action/action.module.js +29 -28
- package/esm2015/lib/action/actionbar/actionbar-item.component.js +257 -257
- package/esm2015/lib/action/actionbar/actionbar.component.js +385 -387
- package/esm2015/lib/action/actionbar/actionbar.module.js +59 -58
- package/esm2015/lib/action/index.js +3 -3
- package/esm2015/lib/action/shared/action.enums.js +7 -7
- package/esm2015/lib/action/shared/action.interfaces.js +2 -1
- package/esm2015/lib/action/shared/index.js +4 -4
- package/esm2015/lib/action/shared/store.js +8 -8
- package/esm2015/lib/backdrop/backdrop.component.js +30 -30
- package/esm2015/lib/backdrop/backdrop.module.js +25 -24
- package/esm2015/lib/backdrop/index.js +2 -2
- package/esm2015/lib/badge-icon/badge-icon.directive.js +125 -121
- package/esm2015/lib/badge-icon/badge-icon.module.js +26 -25
- package/esm2015/lib/badge-icon/index.js +2 -2
- package/esm2015/lib/clickout/clickout.directive.js +32 -32
- package/esm2015/lib/clickout/clickout.module.js +24 -23
- package/esm2015/lib/clickout/index.js +2 -2
- package/esm2015/lib/clone/clone.module.js +24 -23
- package/esm2015/lib/clone/clone.pipe.js +24 -24
- package/esm2015/lib/clone/index.js +2 -2
- package/esm2015/lib/collapsible/collapse.directive.js +55 -55
- package/esm2015/lib/collapsible/collapsible.component.js +63 -63
- package/esm2015/lib/collapsible/collapsible.module.js +27 -26
- package/esm2015/lib/collapsible/index.js +3 -3
- package/esm2015/lib/confirm-dialog/confirm-dialog.component.js +50 -51
- package/esm2015/lib/confirm-dialog/confirm-dialog.module.js +29 -28
- package/esm2015/lib/confirm-dialog/confirm-dialog.service.js +22 -23
- package/esm2015/lib/confirm-dialog/index.js +3 -3
- package/esm2015/lib/context-menu/context-menu.directive.js +135 -89
- package/esm2015/lib/context-menu/context-menu.module.js +24 -23
- package/esm2015/lib/context-menu/index.js +2 -2
- package/esm2015/lib/custom-html/custom-html.component.js +32 -32
- package/esm2015/lib/custom-html/custom-html.module.js +49 -48
- package/esm2015/lib/custom-html/custom-html.pipe.js +18 -19
- package/esm2015/lib/custom-html/index.js +3 -3
- package/esm2015/lib/drag-drop/drag-drop.directive.js +88 -88
- package/esm2015/lib/drag-drop/drag-drop.module.js +24 -23
- package/esm2015/lib/drag-drop/index.js +2 -2
- package/esm2015/lib/dynamic-component/dynamic-component.module.js +33 -32
- package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.js +124 -125
- package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.js +30 -29
- package/esm2015/lib/dynamic-component/index.js +3 -3
- package/esm2015/lib/dynamic-component/shared/dynamic-component.interfaces.js +2 -1
- package/esm2015/lib/dynamic-component/shared/dynamic-component.js +174 -174
- package/esm2015/lib/dynamic-component/shared/dynamic-component.service.js +29 -29
- package/esm2015/lib/dynamic-component/shared/index.js +4 -4
- package/esm2015/lib/entity/entity-selector/entity-selector.component.js +201 -202
- package/esm2015/lib/entity/entity-selector/entity-selector.module.js +34 -33
- package/esm2015/lib/entity/entity-table/entity-table-row.directive.js +137 -137
- package/esm2015/lib/entity/entity-table/entity-table.component.js +912 -916
- package/esm2015/lib/entity/entity-table/entity-table.module.js +77 -76
- package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.component.js +138 -140
- package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.interface.js +2 -1
- package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.module.js +30 -29
- package/esm2015/lib/entity/entity.module.js +33 -32
- package/esm2015/lib/entity/index.js +6 -6
- package/esm2015/lib/entity/shared/entity.enums.js +27 -27
- package/esm2015/lib/entity/shared/entity.interfaces.js +2 -1
- package/esm2015/lib/entity/shared/entity.utils.js +67 -67
- package/esm2015/lib/entity/shared/index.js +10 -10
- package/esm2015/lib/entity/shared/state.js +191 -191
- package/esm2015/lib/entity/shared/store.js +288 -288
- package/esm2015/lib/entity/shared/strategies/filter-custom-function.js +79 -79
- package/esm2015/lib/entity/shared/strategies/filter-selection.js +84 -84
- package/esm2015/lib/entity/shared/strategies/index.js +4 -4
- package/esm2015/lib/entity/shared/strategies/strategy.js +75 -75
- package/esm2015/lib/entity/shared/transaction.js +316 -316
- package/esm2015/lib/entity/shared/view.js +315 -315
- package/esm2015/lib/entity/shared/watcher.js +120 -120
- package/esm2015/lib/flexible/flexible.component.js +158 -159
- package/esm2015/lib/flexible/flexible.module.js +24 -23
- package/esm2015/lib/flexible/flexible.type.js +2 -1
- package/esm2015/lib/flexible/index.js +3 -3
- package/esm2015/lib/form/form/form.component.js +125 -125
- package/esm2015/lib/form/form/form.module.js +42 -41
- package/esm2015/lib/form/form-field/form-field-select.component.js +132 -132
- package/esm2015/lib/form/form-field/form-field-text.component.js +108 -108
- package/esm2015/lib/form/form-field/form-field-textarea.component.js +110 -110
- package/esm2015/lib/form/form-field/form-field.component.js +77 -78
- package/esm2015/lib/form/form-field/form-field.module.js +76 -75
- package/esm2015/lib/form/form-field/index.js +5 -5
- package/esm2015/lib/form/form-group/form-group.component.js +110 -110
- package/esm2015/lib/form/form-group/form-group.module.js +42 -41
- package/esm2015/lib/form/form.module.js +51 -50
- package/esm2015/lib/form/index.js +5 -5
- package/esm2015/lib/form/shared/form-field-component.js +7 -7
- package/esm2015/lib/form/shared/form-field.service.js +29 -29
- package/esm2015/lib/form/shared/form.interfaces.js +2 -1
- package/esm2015/lib/form/shared/form.service.js +77 -77
- package/esm2015/lib/form/shared/form.utils.js +40 -40
- package/esm2015/lib/form/shared/index.js +6 -6
- package/esm2015/lib/home-button/home-button.component.js +35 -0
- package/esm2015/lib/home-button/home-button.module.js +43 -0
- package/esm2015/lib/home-button/index.js +2 -0
- package/esm2015/lib/image/image.module.js +24 -23
- package/esm2015/lib/image/index.js +2 -2
- package/esm2015/lib/image/secure-image.pipe.js +48 -51
- package/esm2015/lib/interactive-tour/index.js +5 -5
- package/esm2015/lib/interactive-tour/interactive-tour.component.js +140 -142
- package/esm2015/lib/interactive-tour/interactive-tour.interface.js +2 -1
- package/esm2015/lib/interactive-tour/interactive-tour.loader.js +44 -46
- package/esm2015/lib/interactive-tour/interactive-tour.module.js +42 -41
- package/esm2015/lib/interactive-tour/interactive-tour.service.js +285 -288
- package/esm2015/lib/json-dialog/index.js +3 -3
- package/esm2015/lib/json-dialog/json-dialog.component.js +116 -117
- package/esm2015/lib/json-dialog/json-dialog.module.js +29 -28
- package/esm2015/lib/json-dialog/json-dialog.service.js +24 -25
- package/esm2015/lib/keyvalue/index.js +2 -2
- package/esm2015/lib/keyvalue/keyvalue.module.js +24 -23
- package/esm2015/lib/keyvalue/keyvalue.pipe.js +18 -18
- package/esm2015/lib/list/index.js +3 -3
- package/esm2015/lib/list/list-item.directive.js +165 -165
- package/esm2015/lib/list/list.component.js +266 -266
- package/esm2015/lib/list/list.module.js +29 -28
- package/esm2015/lib/panel/index.js +2 -2
- package/esm2015/lib/panel/panel.component.js +67 -67
- package/esm2015/lib/panel/panel.module.js +19 -18
- package/esm2015/lib/sidenav/index.js +2 -2
- package/esm2015/lib/sidenav/sidenav-shim.directive.js +55 -56
- package/esm2015/lib/sidenav/sidenav.module.js +24 -23
- package/esm2015/lib/spinner/index.js +3 -3
- package/esm2015/lib/spinner/spinner-activity.directive.js +47 -49
- package/esm2015/lib/spinner/spinner.component.js +40 -40
- package/esm2015/lib/spinner/spinner.module.js +21 -20
- package/esm2015/lib/stop-propagation/index.js +3 -3
- package/esm2015/lib/stop-propagation/stop-drop-propagation.directive.js +22 -22
- package/esm2015/lib/stop-propagation/stop-propagation.directive.js +21 -21
- package/esm2015/lib/stop-propagation/stop-propagation.module.js +25 -24
- package/esm2015/lib/table/index.js +6 -6
- package/esm2015/lib/table/table-action-color.enum.js +7 -7
- package/esm2015/lib/table/table-database.js +28 -28
- package/esm2015/lib/table/table-datasource.js +61 -61
- package/esm2015/lib/table/table-model.interface.js +2 -1
- package/esm2015/lib/table/table.component.js +310 -311
- package/esm2015/lib/table/table.module.js +69 -68
- package/esm2015/lib/tool/index.js +3 -3
- package/esm2015/lib/tool/shared/index.js +6 -6
- package/esm2015/lib/tool/shared/tool-component.js +9 -9
- package/esm2015/lib/tool/shared/tool.interface.js +2 -1
- package/esm2015/lib/tool/shared/tool.service.js +43 -43
- package/esm2015/lib/tool/shared/toolbox.enums.js +7 -7
- package/esm2015/lib/tool/shared/toolbox.js +179 -179
- package/esm2015/lib/tool/tool.module.js +34 -33
- package/esm2015/lib/tool/toolbox/toolbox.animation.js +10 -10
- package/esm2015/lib/tool/toolbox/toolbox.component.js +261 -262
- package/esm2015/lib/tool/toolbox/toolbox.module.js +38 -37
- package/esm2015/lib/widget/index.js +3 -3
- package/esm2015/lib/widget/shared/index.js +4 -4
- package/esm2015/lib/widget/shared/widget.interfaces.js +2 -1
- package/esm2015/lib/widget/shared/widget.js +4 -4
- package/esm2015/lib/widget/shared/widget.service.js +20 -21
- package/esm2015/lib/widget/widget-outlet/widget-outlet.component.js +121 -122
- package/esm2015/lib/widget/widget-outlet/widget-outlet.module.js +34 -33
- package/esm2015/lib/widget/widget.module.js +34 -33
- package/esm2015/lib/workspace/index.js +4 -4
- package/esm2015/lib/workspace/shared/index.js +4 -4
- package/esm2015/lib/workspace/shared/store.js +40 -40
- package/esm2015/lib/workspace/shared/workspace.interfaces.js +2 -1
- package/esm2015/lib/workspace/shared/workspace.js +117 -117
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.component.js +54 -55
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +34 -33
- package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.js +93 -94
- package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.js +34 -33
- package/esm2015/lib/workspace/workspace.module.js +29 -28
- package/esm2015/public_api.js +72 -70
- package/fesm2015/igo2-common.js +9015 -8846
- package/fesm2015/igo2-common.js.map +1 -1
- package/igo2-common.d.ts +5 -5
- package/lib/action/action.module.d.ts +8 -7
- 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 -19
- 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 -9
- package/lib/backdrop/index.d.ts +1 -1
- package/lib/badge-icon/badge-icon.directive.d.ts +32 -27
- package/lib/badge-icon/badge-icon.module.d.ts +11 -10
- 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 -8
- package/lib/clickout/index.d.ts +1 -1
- package/lib/clone/clone.module.d.ts +9 -8
- 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 -11
- 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 -11
- 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 +27 -21
- package/lib/context-menu/context-menu.module.d.ts +9 -8
- package/lib/context-menu/index.d.ts +1 -1
- package/lib/custom-html/custom-html.component.d.ts +9 -9
- package/lib/custom-html/custom-html.module.d.ts +16 -15
- package/lib/custom-html/custom-html.pipe.d.ts +10 -10
- package/lib/custom-html/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 -8
- package/lib/drag-drop/index.d.ts +1 -1
- package/lib/dynamic-component/dynamic-component.module.d.ts +8 -7
- 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 -10
- 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 -12
- package/lib/entity/entity-table/entity-table-row.directive.d.ts +69 -69
- package/lib/entity/entity-table/entity-table.component.d.ts +275 -275
- package/lib/entity/entity-table/entity-table.module.d.ts +23 -22
- 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 -10
- package/lib/entity/entity.module.d.ts +10 -9
- package/lib/entity/index.d.ts +5 -5
- package/lib/entity/shared/entity.enums.d.ts +22 -22
- package/lib/entity/shared/entity.interfaces.d.ts +88 -88
- 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 -8
- 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 -11
- 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 -20
- 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 -13
- package/lib/form/form.module.d.ts +13 -12
- 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 -0
- package/lib/home-button/home-button.module.d.ts +15 -0
- package/lib/home-button/index.d.ts +1 -0
- package/lib/image/image.module.d.ts +9 -8
- package/lib/image/index.d.ts +1 -1
- package/lib/image/secure-image.pipe.d.ts +11 -11
- 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 -11
- 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 -12
- 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 -8
- 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 -13
- package/lib/panel/index.d.ts +1 -1
- package/lib/panel/panel.component.d.ts +11 -11
- package/lib/panel/panel.module.d.ts +8 -7
- 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 -8
- 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 -9
- 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 -9
- 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 -19
- 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 -9
- 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 -12
- 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 -11
- package/lib/widget/widget.module.d.ts +8 -7
- 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 +35 -35
- package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +12 -11
- 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 -11
- package/lib/workspace/workspace.module.d.ts +9 -8
- package/package.json +8 -7
- package/public_api.d.ts +68 -66
- package/style/common.theming.scss +12 -236
- package/style/partial/action.scss +18 -18
- package/style/partial/common.variables.scss +8 -8
- package/bundles/igo2-common.umd.min.js +0 -17
- package/bundles/igo2-common.umd.min.js.map +0 -1
|
@@ -1,191 +1,191 @@
|
|
|
1
|
-
import { ReplaySubject } from 'rxjs';
|
|
2
|
-
import { getEntityId } from './entity.utils';
|
|
3
|
-
/**
|
|
4
|
-
* This class is used to track a store's entities state
|
|
5
|
-
*/
|
|
6
|
-
export class EntityStateManager {
|
|
7
|
-
constructor(options = {}) {
|
|
8
|
-
/**
|
|
9
|
-
* State index
|
|
10
|
-
*/
|
|
11
|
-
this.index = new Map();
|
|
12
|
-
/**
|
|
13
|
-
* Change emitter
|
|
14
|
-
*/
|
|
15
|
-
this.change$ = new ReplaySubject(1);
|
|
16
|
-
this.store = options.store ? options.store : undefined;
|
|
17
|
-
this.getKey = options.getKey
|
|
18
|
-
? options.getKey
|
|
19
|
-
: (this.store ? this.store.getKey : getEntityId);
|
|
20
|
-
this.next();
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Clear state
|
|
24
|
-
*/
|
|
25
|
-
clear() {
|
|
26
|
-
if (this.index.size > 0) {
|
|
27
|
-
this.index.clear();
|
|
28
|
-
this.next();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Get an entity's state
|
|
33
|
-
* @param entity Entity
|
|
34
|
-
* @returns State
|
|
35
|
-
*/
|
|
36
|
-
get(entity) {
|
|
37
|
-
return (this.index.get(this.getKey(entity)) || {});
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Set an entity's state
|
|
41
|
-
* @param entity Entity
|
|
42
|
-
* @param state State
|
|
43
|
-
*/
|
|
44
|
-
set(entity, state) {
|
|
45
|
-
this.setMany([entity], state);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Set many entitie's state
|
|
49
|
-
* @param entitie Entities
|
|
50
|
-
* @param state State
|
|
51
|
-
*/
|
|
52
|
-
setMany(entities, state) {
|
|
53
|
-
entities.forEach((entity) => {
|
|
54
|
-
this.index.set(this.getKey(entity), Object.assign({}, state));
|
|
55
|
-
});
|
|
56
|
-
this.next();
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Set state of all entities that already have a state. This is not
|
|
60
|
-
* the same as setting the state of all the store's entities.
|
|
61
|
-
* @param state State
|
|
62
|
-
*/
|
|
63
|
-
setAll(state) {
|
|
64
|
-
Array.from(this.index.keys()).forEach((key) => {
|
|
65
|
-
this.index.set(key, Object.assign({}, state));
|
|
66
|
-
});
|
|
67
|
-
this.next();
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Update an entity's state
|
|
71
|
-
* @param entity Entity
|
|
72
|
-
* @param changes State changes
|
|
73
|
-
*/
|
|
74
|
-
update(entity, changes, exclusive = false) {
|
|
75
|
-
this.updateMany([entity], changes, exclusive);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Update many entitie's state
|
|
79
|
-
* @param entitie Entities
|
|
80
|
-
* @param changes State changes
|
|
81
|
-
*/
|
|
82
|
-
updateMany(entities, changes, exclusive = false) {
|
|
83
|
-
if (exclusive === true) {
|
|
84
|
-
return this.updateManyExclusive(entities, changes);
|
|
85
|
-
}
|
|
86
|
-
entities.forEach((entity) => {
|
|
87
|
-
const state = Object.assign({}, this.get(entity), changes);
|
|
88
|
-
this.index.set(this.getKey(entity), state);
|
|
89
|
-
});
|
|
90
|
-
this.next();
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Reversee an entity's state
|
|
94
|
-
* @param entity Entity
|
|
95
|
-
* @param keys State keys to reverse
|
|
96
|
-
*/
|
|
97
|
-
reverse(entity, keys) {
|
|
98
|
-
this.reverseMany([entity], keys);
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Reverse many entitie's state
|
|
102
|
-
* @param entitie Entities
|
|
103
|
-
* @param keys State keys to reverse
|
|
104
|
-
*/
|
|
105
|
-
reverseMany(entities, keys) {
|
|
106
|
-
entities.forEach((entity) => {
|
|
107
|
-
const currentState = this.get(entity);
|
|
108
|
-
const changes = keys.reduce((acc, key) => {
|
|
109
|
-
acc[key] = currentState[key] || false;
|
|
110
|
-
return acc;
|
|
111
|
-
}, {});
|
|
112
|
-
const reversedChanges = this.reverseChanges(changes);
|
|
113
|
-
const state = Object.assign({}, currentState, reversedChanges);
|
|
114
|
-
this.index.set(this.getKey(entity), state);
|
|
115
|
-
});
|
|
116
|
-
this.next();
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Update state of all entities that already have a state. This is not
|
|
120
|
-
* the same as updating the state of all the store's entities.
|
|
121
|
-
* @param changes State
|
|
122
|
-
*/
|
|
123
|
-
updateAll(changes) {
|
|
124
|
-
const allKeys = this.getAllKeys();
|
|
125
|
-
Array.from(allKeys).forEach((key) => {
|
|
126
|
-
const state = Object.assign({}, this.index.get(key), changes);
|
|
127
|
-
this.index.set(key, state);
|
|
128
|
-
});
|
|
129
|
-
this.next();
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* When some state changes are flagged as 'exclusive', reverse
|
|
133
|
-
* the state of all other entities. Changes are reversable when
|
|
134
|
-
* they are boolean.
|
|
135
|
-
* @param entitie Entities
|
|
136
|
-
* @param changes State changes
|
|
137
|
-
*/
|
|
138
|
-
updateManyExclusive(entities, changes) {
|
|
139
|
-
const reverseChanges = this.reverseChanges(changes);
|
|
140
|
-
const keys = entities.map((entity) => this.getKey(entity));
|
|
141
|
-
const allKeys = new Set(keys.concat(Array.from(this.getAllKeys())));
|
|
142
|
-
allKeys.forEach((key) => {
|
|
143
|
-
const state = this.index.get(key) || {};
|
|
144
|
-
if (keys.indexOf(key) >= 0) {
|
|
145
|
-
this.index.set(key, Object.assign({}, state, changes));
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
// Update only if the reverse changes would modify
|
|
149
|
-
// a key already present in the current state
|
|
150
|
-
const shouldUpdate = Object.keys(reverseChanges).some((changeKey) => {
|
|
151
|
-
return state[changeKey] !== undefined &&
|
|
152
|
-
state[changeKey] !== reverseChanges[changeKey];
|
|
153
|
-
});
|
|
154
|
-
if (shouldUpdate === true) {
|
|
155
|
-
this.index.set(key, Object.assign({}, state, reverseChanges));
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
this.next();
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Compute a 'reversed' version of some state changes.
|
|
163
|
-
* Changes are reversable when they are boolean.
|
|
164
|
-
* @param changes State changes
|
|
165
|
-
* @returns Reversed state changes
|
|
166
|
-
*/
|
|
167
|
-
reverseChanges(changes) {
|
|
168
|
-
return Object.entries(changes).reduce((reverseChanges, bunch) => {
|
|
169
|
-
const [changeKey, value] = bunch;
|
|
170
|
-
if (typeof value === typeof true) {
|
|
171
|
-
reverseChanges[changeKey] = !value;
|
|
172
|
-
}
|
|
173
|
-
return reverseChanges;
|
|
174
|
-
}, {});
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Return all the keys in that state and in the store it's bound to, if any.
|
|
178
|
-
* @returns Set of keys
|
|
179
|
-
*/
|
|
180
|
-
getAllKeys() {
|
|
181
|
-
const storeKeys = this.store ? Array.from(this.store.index.keys()) : [];
|
|
182
|
-
return new Set(Array.from(this.index.keys()).concat(storeKeys));
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Emit 'change' event
|
|
186
|
-
*/
|
|
187
|
-
next() {
|
|
188
|
-
this.change$.next();
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiL3Nydi9hcHBzL2lnbzItbGliL3BhY2thZ2VzL2NvbW1vbi9zcmMvIiwic291cmNlcyI6WyJsaWIvZW50aXR5L3NoYXJlZC9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFtQjdCLFlBQVksVUFBcUMsRUFBRTtRQWpCbkQ7O1dBRUc7UUFDTSxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7UUFFekM7O1dBRUc7UUFDTSxZQUFPLEdBQUcsSUFBSSxhQUFhLENBQU8sQ0FBQyxDQUFDLENBQUM7UUFVNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTTtZQUMxQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDaEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxHQUFHLENBQUMsTUFB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UUFDeEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQTBCLEVBQUUsS0FBb0IsRUFBRSxFQUFFO1lBQ3pGLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksT0FBTyxLQUFLLEtBQUssT0FBTyxJQUFJLEVBQUU7Z0JBQy9CLGNBQXlCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7YUFDaEQ7WUFDRCxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssVUFBVTtRQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7T0FFRztJQUNLLElBQUk7UUFDVixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRW50aXR5S2V5LCBFbnRpdHlTdGF0ZSwgRW50aXR5U3RhdGVNYW5hZ2VyT3B0aW9ucyB9IGZyb20gJy4vZW50aXR5LmludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0RW50aXR5SWQgfSBmcm9tICcuL2VudGl0eS51dGlscyc7XG5pbXBvcnQgeyBFbnRpdHlTdG9yZSB9IGZyb20gJy4vc3RvcmUnO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byB0cmFjayBhIHN0b3JlJ3MgZW50aXRpZXMgc3RhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEVudGl0eVN0YXRlTWFuYWdlcjxFIGV4dGVuZHMgb2JqZWN0LCBTIGV4dGVuZHMgRW50aXR5U3RhdGUgPSBFbnRpdHlTdGF0ZT4ge1xuXG4gIC8qKlxuICAgKiBTdGF0ZSBpbmRleFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXggPSBuZXcgTWFwPEVudGl0eUtleSwgUz4oKTtcblxuICAvKipcbiAgICogQ2hhbmdlIGVtaXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZSQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcblxuICAvKipcbiAgICogTWV0aG9kIHRvIGdldCBhbiBlbnRpdHkncyBpZFxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0S2V5OiAoRSkgPT4gRW50aXR5S2V5O1xuXG4gIHByaXZhdGUgc3RvcmU6IEVudGl0eVN0b3JlPG9iamVjdD4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogRW50aXR5U3RhdGVNYW5hZ2VyT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5zdG9yZSA9IG9wdGlvbnMuc3RvcmUgPyBvcHRpb25zLnN0b3JlIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZ2V0S2V5ID0gb3B0aW9ucy5nZXRLZXlcbiAgICAgID8gb3B0aW9ucy5nZXRLZXlcbiAgICAgIDogKHRoaXMuc3RvcmUgPyB0aGlzLnN0b3JlLmdldEtleSA6IGdldEVudGl0eUlkKTtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBzdGF0ZVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaW5kZXguc2l6ZSA+IDApIHtcbiAgICAgIHRoaXMuaW5kZXguY2xlYXIoKTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gZW50aXR5J3Mgc3RhdGVcbiAgICogQHBhcmFtIGVudGl0eSBFbnRpdHlcbiAgICogQHJldHVybnMgU3RhdGVcbiAgICovXG4gIGdldChlbnRpdHk6IEUpOiBTIHtcbiAgICByZXR1cm4gKHRoaXMuaW5kZXguZ2V0KHRoaXMuZ2V0S2V5KGVudGl0eSkpIHx8IHt9KSBhcyBTO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbiBlbnRpdHkncyBzdGF0ZVxuICAgKiBAcGFyYW0gZW50aXR5IEVudGl0eVxuICAgKiBAcGFyYW0gc3RhdGUgU3RhdGVcbiAgICovXG4gIHNldChlbnRpdHk6IEUsIHN0YXRlOiBTKSB7XG4gICAgdGhpcy5zZXRNYW55KFtlbnRpdHldLCBzdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG1hbnkgZW50aXRpZSdzIHN0YXRlXG4gICAqIEBwYXJhbSBlbnRpdGllIEVudGl0aWVzXG4gICAqIEBwYXJhbSBzdGF0ZSBTdGF0ZVxuICAgKi9cbiAgc2V0TWFueShlbnRpdGllczogRVtdLCBzdGF0ZTogUykge1xuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eTogRSkgPT4ge1xuICAgICAgdGhpcy5pbmRleC5zZXQodGhpcy5nZXRLZXkoZW50aXR5KSwgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpKTtcbiAgICB9KTtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgc3RhdGUgb2YgYWxsIGVudGl0aWVzIHRoYXQgYWxyZWFkeSBoYXZlIGEgc3RhdGUuIFRoaXMgaXMgbm90XG4gICAqIHRoZSBzYW1lIGFzIHNldHRpbmcgdGhlIHN0YXRlIG9mIGFsbCB0aGUgc3RvcmUncyBlbnRpdGllcy5cbiAgICogQHBhcmFtIHN0YXRlIFN0YXRlXG4gICAqL1xuICBzZXRBbGwoc3RhdGU6IFMpIHtcbiAgICBBcnJheS5mcm9tKHRoaXMuaW5kZXgua2V5cygpKS5mb3JFYWNoKChrZXk6IEVudGl0eUtleSkgPT4ge1xuICAgICAgdGhpcy5pbmRleC5zZXQoa2V5LCBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSkpO1xuICAgIH0pO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbiBlbnRpdHkncyBzdGF0ZVxuICAgKiBAcGFyYW0gZW50aXR5IEVudGl0eVxuICAgKiBAcGFyYW0gY2hhbmdlcyBTdGF0ZSBjaGFuZ2VzXG4gICAqL1xuICB1cGRhdGUoZW50aXR5OiBFLCBjaGFuZ2VzOiBQYXJ0aWFsPFM+LCBleGNsdXNpdmUgPSBmYWxzZSkge1xuICAgIHRoaXMudXBkYXRlTWFueShbZW50aXR5XSwgY2hhbmdlcywgZXhjbHVzaXZlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbWFueSBlbnRpdGllJ3Mgc3RhdGVcbiAgICogQHBhcmFtIGVudGl0aWUgRW50aXRpZXNcbiAgICogQHBhcmFtIGNoYW5nZXMgU3RhdGUgY2hhbmdlc1xuICAgKi9cbiAgdXBkYXRlTWFueShlbnRpdGllczogRVtdLCBjaGFuZ2VzOiBQYXJ0aWFsPFM+LCBleGNsdXNpdmUgPSBmYWxzZSkge1xuICAgIGlmIChleGNsdXNpdmUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU1hbnlFeGNsdXNpdmUoZW50aXRpZXMsIGNoYW5nZXMpO1xuICAgIH1cblxuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eTogRSkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldChlbnRpdHkpLCBjaGFuZ2VzKTtcbiAgICAgIHRoaXMuaW5kZXguc2V0KHRoaXMuZ2V0S2V5KGVudGl0eSksIHN0YXRlKTtcbiAgICB9KTtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZlcnNlZSBhbiBlbnRpdHkncyBzdGF0ZVxuICAgKiBAcGFyYW0gZW50aXR5IEVudGl0eVxuICAgKiBAcGFyYW0ga2V5cyBTdGF0ZSBrZXlzIHRvIHJldmVyc2VcbiAgICovXG4gIHJldmVyc2UoZW50aXR5OiBFLCBrZXlzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMucmV2ZXJzZU1hbnkoW2VudGl0eV0sIGtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldmVyc2UgbWFueSBlbnRpdGllJ3Mgc3RhdGVcbiAgICogQHBhcmFtIGVudGl0aWUgRW50aXRpZXNcbiAgICogQHBhcmFtIGtleXMgU3RhdGUga2V5cyB0byByZXZlcnNlXG4gICAqL1xuICByZXZlcnNlTWFueShlbnRpdGllczogRVtdLCBrZXlzOiBzdHJpbmdbXSkge1xuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eTogRSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5nZXQoZW50aXR5KTtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSBrZXlzLnJlZHVjZSgoYWNjOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0sIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gY3VycmVudFN0YXRlW2tleV0gfHwgZmFsc2U7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSkgYXMgUGFydGlhbDxTPjtcbiAgICAgIGNvbnN0IHJldmVyc2VkQ2hhbmdlcyA9IHRoaXMucmV2ZXJzZUNoYW5nZXMoY2hhbmdlcyk7XG4gICAgICBjb25zdCBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRTdGF0ZSwgcmV2ZXJzZWRDaGFuZ2VzKTtcbiAgICAgIHRoaXMuaW5kZXguc2V0KHRoaXMuZ2V0S2V5KGVudGl0eSksIHN0YXRlKTtcbiAgICB9KTtcbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc3RhdGUgb2YgYWxsIGVudGl0aWVzIHRoYXQgYWxyZWFkeSBoYXZlIGEgc3RhdGUuIFRoaXMgaXMgbm90XG4gICAqIHRoZSBzYW1lIGFzIHVwZGF0aW5nIHRoZSBzdGF0ZSBvZiBhbGwgdGhlIHN0b3JlJ3MgZW50aXRpZXMuXG4gICAqIEBwYXJhbSBjaGFuZ2VzIFN0YXRlXG4gICAqL1xuICB1cGRhdGVBbGwoY2hhbmdlczogUGFydGlhbDxTPikge1xuICAgIGNvbnN0IGFsbEtleXMgPSB0aGlzLmdldEFsbEtleXMoKTtcbiAgICBBcnJheS5mcm9tKGFsbEtleXMpLmZvckVhY2goKGtleTogRW50aXR5S2V5KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaW5kZXguZ2V0KGtleSksIGNoYW5nZXMpO1xuICAgICAgdGhpcy5pbmRleC5zZXQoa2V5LCBzdGF0ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBzb21lIHN0YXRlIGNoYW5nZXMgYXJlIGZsYWdnZWQgYXMgJ2V4Y2x1c2l2ZScsIHJldmVyc2VcbiAgICogdGhlIHN0YXRlIG9mIGFsbCBvdGhlciBlbnRpdGllcy4gQ2hhbmdlcyBhcmUgcmV2ZXJzYWJsZSB3aGVuXG4gICAqIHRoZXkgYXJlIGJvb2xlYW4uXG4gICAqIEBwYXJhbSBlbnRpdGllIEVudGl0aWVzXG4gICAqIEBwYXJhbSBjaGFuZ2VzIFN0YXRlIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTWFueUV4Y2x1c2l2ZShlbnRpdGllczogRVtdLCBjaGFuZ2VzOiBQYXJ0aWFsPFM+KSB7XG4gICAgY29uc3QgcmV2ZXJzZUNoYW5nZXMgPSB0aGlzLnJldmVyc2VDaGFuZ2VzKGNoYW5nZXMpO1xuXG4gICAgY29uc3Qga2V5cyA9IGVudGl0aWVzLm1hcCgoZW50aXR5OiBFKSA9PiB0aGlzLmdldEtleShlbnRpdHkpKTtcbiAgICBjb25zdCBhbGxLZXlzID0gbmV3IFNldChrZXlzLmNvbmNhdChBcnJheS5mcm9tKHRoaXMuZ2V0QWxsS2V5cygpKSkpO1xuICAgIGFsbEtleXMuZm9yRWFjaCgoa2V5OiBFbnRpdHlLZXkpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5pbmRleC5nZXQoa2V5KSB8fCB7fSBhcyBTO1xuXG4gICAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICB0aGlzLmluZGV4LnNldChrZXksIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBjaGFuZ2VzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVcGRhdGUgb25seSBpZiB0aGUgcmV2ZXJzZSBjaGFuZ2VzIHdvdWxkIG1vZGlmeVxuICAgICAgICAvLyBhIGtleSBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgc3RhdGVcbiAgICAgICAgY29uc3Qgc2hvdWxkVXBkYXRlID0gT2JqZWN0LmtleXMocmV2ZXJzZUNoYW5nZXMpLnNvbWUoKGNoYW5nZUtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlW2NoYW5nZUtleV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc3RhdGVbY2hhbmdlS2V5XSAhPT0gcmV2ZXJzZUNoYW5nZXNbY2hhbmdlS2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzaG91bGRVcGRhdGUgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmluZGV4LnNldChrZXksIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCByZXZlcnNlQ2hhbmdlcykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgJ3JldmVyc2VkJyB2ZXJzaW9uIG9mIHNvbWUgc3RhdGUgY2hhbmdlcy5cbiAgICogQ2hhbmdlcyBhcmUgcmV2ZXJzYWJsZSB3aGVuIHRoZXkgYXJlIGJvb2xlYW4uXG4gICAqIEBwYXJhbSBjaGFuZ2VzIFN0YXRlIGNoYW5nZXNcbiAgICogQHJldHVybnMgUmV2ZXJzZWQgc3RhdGUgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSByZXZlcnNlQ2hhbmdlcyhjaGFuZ2VzOiBQYXJ0aWFsPFM+KTogUGFydGlhbDxTPiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpLnJlZHVjZSgocmV2ZXJzZUNoYW5nZXM6IFBhcnRpYWw8Uz4sIGJ1bmNoOiBbc3RyaW5nLCBhbnldKSA9PiB7XG4gICAgICBjb25zdCBbY2hhbmdlS2V5LCB2YWx1ZV0gPSBidW5jaDtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IHR5cGVvZiB0cnVlKSB7XG4gICAgICAgIChyZXZlcnNlQ2hhbmdlcyBhcyBvYmplY3QpW2NoYW5nZUtleV0gPSAhdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV2ZXJzZUNoYW5nZXM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgdGhlIGtleXMgaW4gdGhhdCBzdGF0ZSBhbmQgaW4gdGhlIHN0b3JlIGl0J3MgYm91bmQgdG8sIGlmIGFueS5cbiAgICogQHJldHVybnMgU2V0IG9mIGtleXNcbiAgICovXG4gIHByaXZhdGUgZ2V0QWxsS2V5cygpOiBTZXQ8RW50aXR5S2V5PiB7XG4gICAgY29uc3Qgc3RvcmVLZXlzID0gdGhpcy5zdG9yZSA/IEFycmF5LmZyb20odGhpcy5zdG9yZS5pbmRleC5rZXlzKCkpIDogW107XG4gICAgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbSh0aGlzLmluZGV4LmtleXMoKSkuY29uY2F0KHN0b3JlS2V5cykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgJ2NoYW5nZScgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICB0aGlzLmNoYW5nZSQubmV4dCgpO1xuICB9XG5cbn1cbiJdfQ==
|
|
1
|
+
import { ReplaySubject } from 'rxjs';
|
|
2
|
+
import { getEntityId } from './entity.utils';
|
|
3
|
+
/**
|
|
4
|
+
* This class is used to track a store's entities state
|
|
5
|
+
*/
|
|
6
|
+
export class EntityStateManager {
|
|
7
|
+
constructor(options = {}) {
|
|
8
|
+
/**
|
|
9
|
+
* State index
|
|
10
|
+
*/
|
|
11
|
+
this.index = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Change emitter
|
|
14
|
+
*/
|
|
15
|
+
this.change$ = new ReplaySubject(1);
|
|
16
|
+
this.store = options.store ? options.store : undefined;
|
|
17
|
+
this.getKey = options.getKey
|
|
18
|
+
? options.getKey
|
|
19
|
+
: (this.store ? this.store.getKey : getEntityId);
|
|
20
|
+
this.next();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Clear state
|
|
24
|
+
*/
|
|
25
|
+
clear() {
|
|
26
|
+
if (this.index.size > 0) {
|
|
27
|
+
this.index.clear();
|
|
28
|
+
this.next();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get an entity's state
|
|
33
|
+
* @param entity Entity
|
|
34
|
+
* @returns State
|
|
35
|
+
*/
|
|
36
|
+
get(entity) {
|
|
37
|
+
return (this.index.get(this.getKey(entity)) || {});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Set an entity's state
|
|
41
|
+
* @param entity Entity
|
|
42
|
+
* @param state State
|
|
43
|
+
*/
|
|
44
|
+
set(entity, state) {
|
|
45
|
+
this.setMany([entity], state);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Set many entitie's state
|
|
49
|
+
* @param entitie Entities
|
|
50
|
+
* @param state State
|
|
51
|
+
*/
|
|
52
|
+
setMany(entities, state) {
|
|
53
|
+
entities.forEach((entity) => {
|
|
54
|
+
this.index.set(this.getKey(entity), Object.assign({}, state));
|
|
55
|
+
});
|
|
56
|
+
this.next();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Set state of all entities that already have a state. This is not
|
|
60
|
+
* the same as setting the state of all the store's entities.
|
|
61
|
+
* @param state State
|
|
62
|
+
*/
|
|
63
|
+
setAll(state) {
|
|
64
|
+
Array.from(this.index.keys()).forEach((key) => {
|
|
65
|
+
this.index.set(key, Object.assign({}, state));
|
|
66
|
+
});
|
|
67
|
+
this.next();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Update an entity's state
|
|
71
|
+
* @param entity Entity
|
|
72
|
+
* @param changes State changes
|
|
73
|
+
*/
|
|
74
|
+
update(entity, changes, exclusive = false) {
|
|
75
|
+
this.updateMany([entity], changes, exclusive);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Update many entitie's state
|
|
79
|
+
* @param entitie Entities
|
|
80
|
+
* @param changes State changes
|
|
81
|
+
*/
|
|
82
|
+
updateMany(entities, changes, exclusive = false) {
|
|
83
|
+
if (exclusive === true) {
|
|
84
|
+
return this.updateManyExclusive(entities, changes);
|
|
85
|
+
}
|
|
86
|
+
entities.forEach((entity) => {
|
|
87
|
+
const state = Object.assign({}, this.get(entity), changes);
|
|
88
|
+
this.index.set(this.getKey(entity), state);
|
|
89
|
+
});
|
|
90
|
+
this.next();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Reversee an entity's state
|
|
94
|
+
* @param entity Entity
|
|
95
|
+
* @param keys State keys to reverse
|
|
96
|
+
*/
|
|
97
|
+
reverse(entity, keys) {
|
|
98
|
+
this.reverseMany([entity], keys);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Reverse many entitie's state
|
|
102
|
+
* @param entitie Entities
|
|
103
|
+
* @param keys State keys to reverse
|
|
104
|
+
*/
|
|
105
|
+
reverseMany(entities, keys) {
|
|
106
|
+
entities.forEach((entity) => {
|
|
107
|
+
const currentState = this.get(entity);
|
|
108
|
+
const changes = keys.reduce((acc, key) => {
|
|
109
|
+
acc[key] = currentState[key] || false;
|
|
110
|
+
return acc;
|
|
111
|
+
}, {});
|
|
112
|
+
const reversedChanges = this.reverseChanges(changes);
|
|
113
|
+
const state = Object.assign({}, currentState, reversedChanges);
|
|
114
|
+
this.index.set(this.getKey(entity), state);
|
|
115
|
+
});
|
|
116
|
+
this.next();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Update state of all entities that already have a state. This is not
|
|
120
|
+
* the same as updating the state of all the store's entities.
|
|
121
|
+
* @param changes State
|
|
122
|
+
*/
|
|
123
|
+
updateAll(changes) {
|
|
124
|
+
const allKeys = this.getAllKeys();
|
|
125
|
+
Array.from(allKeys).forEach((key) => {
|
|
126
|
+
const state = Object.assign({}, this.index.get(key), changes);
|
|
127
|
+
this.index.set(key, state);
|
|
128
|
+
});
|
|
129
|
+
this.next();
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* When some state changes are flagged as 'exclusive', reverse
|
|
133
|
+
* the state of all other entities. Changes are reversable when
|
|
134
|
+
* they are boolean.
|
|
135
|
+
* @param entitie Entities
|
|
136
|
+
* @param changes State changes
|
|
137
|
+
*/
|
|
138
|
+
updateManyExclusive(entities, changes) {
|
|
139
|
+
const reverseChanges = this.reverseChanges(changes);
|
|
140
|
+
const keys = entities.map((entity) => this.getKey(entity));
|
|
141
|
+
const allKeys = new Set(keys.concat(Array.from(this.getAllKeys())));
|
|
142
|
+
allKeys.forEach((key) => {
|
|
143
|
+
const state = this.index.get(key) || {};
|
|
144
|
+
if (keys.indexOf(key) >= 0) {
|
|
145
|
+
this.index.set(key, Object.assign({}, state, changes));
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
// Update only if the reverse changes would modify
|
|
149
|
+
// a key already present in the current state
|
|
150
|
+
const shouldUpdate = Object.keys(reverseChanges).some((changeKey) => {
|
|
151
|
+
return state[changeKey] !== undefined &&
|
|
152
|
+
state[changeKey] !== reverseChanges[changeKey];
|
|
153
|
+
});
|
|
154
|
+
if (shouldUpdate === true) {
|
|
155
|
+
this.index.set(key, Object.assign({}, state, reverseChanges));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
this.next();
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Compute a 'reversed' version of some state changes.
|
|
163
|
+
* Changes are reversable when they are boolean.
|
|
164
|
+
* @param changes State changes
|
|
165
|
+
* @returns Reversed state changes
|
|
166
|
+
*/
|
|
167
|
+
reverseChanges(changes) {
|
|
168
|
+
return Object.entries(changes).reduce((reverseChanges, bunch) => {
|
|
169
|
+
const [changeKey, value] = bunch;
|
|
170
|
+
if (typeof value === typeof true) {
|
|
171
|
+
reverseChanges[changeKey] = !value;
|
|
172
|
+
}
|
|
173
|
+
return reverseChanges;
|
|
174
|
+
}, {});
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Return all the keys in that state and in the store it's bound to, if any.
|
|
178
|
+
* @returns Set of keys
|
|
179
|
+
*/
|
|
180
|
+
getAllKeys() {
|
|
181
|
+
const storeKeys = this.store ? Array.from(this.store.index.keys()) : [];
|
|
182
|
+
return new Set(Array.from(this.index.keys()).concat(storeKeys));
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Emit 'change' event
|
|
186
|
+
*/
|
|
187
|
+
next() {
|
|
188
|
+
this.change$.next();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2xpYi9lbnRpdHkvc2hhcmVkL3N0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQW1CN0IsWUFBWSxVQUFxQyxFQUFFO1FBakJuRDs7V0FFRztRQUNNLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztRQUV6Qzs7V0FFRztRQUNNLFlBQU8sR0FBRyxJQUFJLGFBQWEsQ0FBTyxDQUFDLENBQUMsQ0FBQztRQVU1QyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN2RCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNO1lBQzFCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUNoQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxNQUFT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QUN4QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBMEIsRUFBRSxLQUFvQixFQUFFLEVBQUU7WUFDekYsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxPQUFPLEtBQUssS0FBSyxPQUFPLElBQUksRUFBRTtnQkFDL0IsY0FBeUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzthQUNoRDtZQUNELE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRDs7O09BR0c7SUFDSyxVQUFVO1FBQ2hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hFLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssSUFBSTtRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgRW50aXR5S2V5LCBFbnRpdHlTdGF0ZSwgRW50aXR5U3RhdGVNYW5hZ2VyT3B0aW9ucyB9IGZyb20gJy4vZW50aXR5LmludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBnZXRFbnRpdHlJZCB9IGZyb20gJy4vZW50aXR5LnV0aWxzJztcclxuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICcuL3N0b3JlJztcclxuXHJcbi8qKlxyXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gdHJhY2sgYSBzdG9yZSdzIGVudGl0aWVzIHN0YXRlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRW50aXR5U3RhdGVNYW5hZ2VyPEUgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBFbnRpdHlTdGF0ZSA9IEVudGl0eVN0YXRlPiB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXRlIGluZGV4XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaW5kZXggPSBuZXcgTWFwPEVudGl0eUtleSwgUz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIGVtaXR0ZXJcclxuICAgKi9cclxuICByZWFkb25seSBjaGFuZ2UkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCB0byBnZXQgYW4gZW50aXR5J3MgaWRcclxuICAgKi9cclxuICByZWFkb25seSBnZXRLZXk6IChFKSA9PiBFbnRpdHlLZXk7XHJcblxyXG4gIHByaXZhdGUgc3RvcmU6IEVudGl0eVN0b3JlPG9iamVjdD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVudGl0eVN0YXRlTWFuYWdlck9wdGlvbnMgPSB7fSkge1xyXG4gICAgdGhpcy5zdG9yZSA9IG9wdGlvbnMuc3RvcmUgPyBvcHRpb25zLnN0b3JlIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5nZXRLZXkgPSBvcHRpb25zLmdldEtleVxyXG4gICAgICA/IG9wdGlvbnMuZ2V0S2V5XHJcbiAgICAgIDogKHRoaXMuc3RvcmUgPyB0aGlzLnN0b3JlLmdldEtleSA6IGdldEVudGl0eUlkKTtcclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgc3RhdGVcclxuICAgKi9cclxuICBjbGVhcigpIHtcclxuICAgIGlmICh0aGlzLmluZGV4LnNpemUgPiAwKSB7XHJcbiAgICAgIHRoaXMuaW5kZXguY2xlYXIoKTtcclxuICAgICAgdGhpcy5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYW4gZW50aXR5J3Mgc3RhdGVcclxuICAgKiBAcGFyYW0gZW50aXR5IEVudGl0eVxyXG4gICAqIEByZXR1cm5zIFN0YXRlXHJcbiAgICovXHJcbiAgZ2V0KGVudGl0eTogRSk6IFMge1xyXG4gICAgcmV0dXJuICh0aGlzLmluZGV4LmdldCh0aGlzLmdldEtleShlbnRpdHkpKSB8fCB7fSkgYXMgUztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhbiBlbnRpdHkncyBzdGF0ZVxyXG4gICAqIEBwYXJhbSBlbnRpdHkgRW50aXR5XHJcbiAgICogQHBhcmFtIHN0YXRlIFN0YXRlXHJcbiAgICovXHJcbiAgc2V0KGVudGl0eTogRSwgc3RhdGU6IFMpIHtcclxuICAgIHRoaXMuc2V0TWFueShbZW50aXR5XSwgc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IG1hbnkgZW50aXRpZSdzIHN0YXRlXHJcbiAgICogQHBhcmFtIGVudGl0aWUgRW50aXRpZXNcclxuICAgKiBAcGFyYW0gc3RhdGUgU3RhdGVcclxuICAgKi9cclxuICBzZXRNYW55KGVudGl0aWVzOiBFW10sIHN0YXRlOiBTKSB7XHJcbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHk6IEUpID0+IHtcclxuICAgICAgdGhpcy5pbmRleC5zZXQodGhpcy5nZXRLZXkoZW50aXR5KSwgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgc3RhdGUgb2YgYWxsIGVudGl0aWVzIHRoYXQgYWxyZWFkeSBoYXZlIGEgc3RhdGUuIFRoaXMgaXMgbm90XHJcbiAgICogdGhlIHNhbWUgYXMgc2V0dGluZyB0aGUgc3RhdGUgb2YgYWxsIHRoZSBzdG9yZSdzIGVudGl0aWVzLlxyXG4gICAqIEBwYXJhbSBzdGF0ZSBTdGF0ZVxyXG4gICAqL1xyXG4gIHNldEFsbChzdGF0ZTogUykge1xyXG4gICAgQXJyYXkuZnJvbSh0aGlzLmluZGV4LmtleXMoKSkuZm9yRWFjaCgoa2V5OiBFbnRpdHlLZXkpID0+IHtcclxuICAgICAgdGhpcy5pbmRleC5zZXQoa2V5LCBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhbiBlbnRpdHkncyBzdGF0ZVxyXG4gICAqIEBwYXJhbSBlbnRpdHkgRW50aXR5XHJcbiAgICogQHBhcmFtIGNoYW5nZXMgU3RhdGUgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHVwZGF0ZShlbnRpdHk6IEUsIGNoYW5nZXM6IFBhcnRpYWw8Uz4sIGV4Y2x1c2l2ZSA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLnVwZGF0ZU1hbnkoW2VudGl0eV0sIGNoYW5nZXMsIGV4Y2x1c2l2ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgbWFueSBlbnRpdGllJ3Mgc3RhdGVcclxuICAgKiBAcGFyYW0gZW50aXRpZSBFbnRpdGllc1xyXG4gICAqIEBwYXJhbSBjaGFuZ2VzIFN0YXRlIGNoYW5nZXNcclxuICAgKi9cclxuICB1cGRhdGVNYW55KGVudGl0aWVzOiBFW10sIGNoYW5nZXM6IFBhcnRpYWw8Uz4sIGV4Y2x1c2l2ZSA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZXhjbHVzaXZlID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU1hbnlFeGNsdXNpdmUoZW50aXRpZXMsIGNoYW5nZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eTogRSkgPT4ge1xyXG4gICAgICBjb25zdCBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0KGVudGl0eSksIGNoYW5nZXMpO1xyXG4gICAgICB0aGlzLmluZGV4LnNldCh0aGlzLmdldEtleShlbnRpdHkpLCBzdGF0ZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV2ZXJzZWUgYW4gZW50aXR5J3Mgc3RhdGVcclxuICAgKiBAcGFyYW0gZW50aXR5IEVudGl0eVxyXG4gICAqIEBwYXJhbSBrZXlzIFN0YXRlIGtleXMgdG8gcmV2ZXJzZVxyXG4gICAqL1xyXG4gIHJldmVyc2UoZW50aXR5OiBFLCBrZXlzOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5yZXZlcnNlTWFueShbZW50aXR5XSwga2V5cyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXZlcnNlIG1hbnkgZW50aXRpZSdzIHN0YXRlXHJcbiAgICogQHBhcmFtIGVudGl0aWUgRW50aXRpZXNcclxuICAgKiBAcGFyYW0ga2V5cyBTdGF0ZSBrZXlzIHRvIHJldmVyc2VcclxuICAgKi9cclxuICByZXZlcnNlTWFueShlbnRpdGllczogRVtdLCBrZXlzOiBzdHJpbmdbXSkge1xyXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5OiBFKSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0KGVudGl0eSk7XHJcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSBrZXlzLnJlZHVjZSgoYWNjOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0sIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgYWNjW2tleV0gPSBjdXJyZW50U3RhdGVba2V5XSB8fCBmYWxzZTtcclxuICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICB9LCB7fSkgYXMgUGFydGlhbDxTPjtcclxuICAgICAgY29uc3QgcmV2ZXJzZWRDaGFuZ2VzID0gdGhpcy5yZXZlcnNlQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgY29uc3Qgc3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50U3RhdGUsIHJldmVyc2VkQ2hhbmdlcyk7XHJcbiAgICAgIHRoaXMuaW5kZXguc2V0KHRoaXMuZ2V0S2V5KGVudGl0eSksIHN0YXRlKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgc3RhdGUgb2YgYWxsIGVudGl0aWVzIHRoYXQgYWxyZWFkeSBoYXZlIGEgc3RhdGUuIFRoaXMgaXMgbm90XHJcbiAgICogdGhlIHNhbWUgYXMgdXBkYXRpbmcgdGhlIHN0YXRlIG9mIGFsbCB0aGUgc3RvcmUncyBlbnRpdGllcy5cclxuICAgKiBAcGFyYW0gY2hhbmdlcyBTdGF0ZVxyXG4gICAqL1xyXG4gIHVwZGF0ZUFsbChjaGFuZ2VzOiBQYXJ0aWFsPFM+KSB7XHJcbiAgICBjb25zdCBhbGxLZXlzID0gdGhpcy5nZXRBbGxLZXlzKCk7XHJcbiAgICBBcnJheS5mcm9tKGFsbEtleXMpLmZvckVhY2goKGtleTogRW50aXR5S2V5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5pbmRleC5nZXQoa2V5KSwgY2hhbmdlcyk7XHJcbiAgICAgIHRoaXMuaW5kZXguc2V0KGtleSwgc3RhdGUpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc29tZSBzdGF0ZSBjaGFuZ2VzIGFyZSBmbGFnZ2VkIGFzICdleGNsdXNpdmUnLCByZXZlcnNlXHJcbiAgICogdGhlIHN0YXRlIG9mIGFsbCBvdGhlciBlbnRpdGllcy4gQ2hhbmdlcyBhcmUgcmV2ZXJzYWJsZSB3aGVuXHJcbiAgICogdGhleSBhcmUgYm9vbGVhbi5cclxuICAgKiBAcGFyYW0gZW50aXRpZSBFbnRpdGllc1xyXG4gICAqIEBwYXJhbSBjaGFuZ2VzIFN0YXRlIGNoYW5nZXNcclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZU1hbnlFeGNsdXNpdmUoZW50aXRpZXM6IEVbXSwgY2hhbmdlczogUGFydGlhbDxTPikge1xyXG4gICAgY29uc3QgcmV2ZXJzZUNoYW5nZXMgPSB0aGlzLnJldmVyc2VDaGFuZ2VzKGNoYW5nZXMpO1xyXG5cclxuICAgIGNvbnN0IGtleXMgPSBlbnRpdGllcy5tYXAoKGVudGl0eTogRSkgPT4gdGhpcy5nZXRLZXkoZW50aXR5KSk7XHJcbiAgICBjb25zdCBhbGxLZXlzID0gbmV3IFNldChrZXlzLmNvbmNhdChBcnJheS5mcm9tKHRoaXMuZ2V0QWxsS2V5cygpKSkpO1xyXG4gICAgYWxsS2V5cy5mb3JFYWNoKChrZXk6IEVudGl0eUtleSkgPT4ge1xyXG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuaW5kZXguZ2V0KGtleSkgfHwge30gYXMgUztcclxuXHJcbiAgICAgIGlmIChrZXlzLmluZGV4T2Yoa2V5KSA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5pbmRleC5zZXQoa2V5LCBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgY2hhbmdlcykpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBvbmx5IGlmIHRoZSByZXZlcnNlIGNoYW5nZXMgd291bGQgbW9kaWZ5XHJcbiAgICAgICAgLy8gYSBrZXkgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBjdXJyZW50IHN0YXRlXHJcbiAgICAgICAgY29uc3Qgc2hvdWxkVXBkYXRlID0gT2JqZWN0LmtleXMocmV2ZXJzZUNoYW5nZXMpLnNvbWUoKGNoYW5nZUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gc3RhdGVbY2hhbmdlS2V5XSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIHN0YXRlW2NoYW5nZUtleV0gIT09IHJldmVyc2VDaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbmRleC5zZXQoa2V5LCBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwgcmV2ZXJzZUNoYW5nZXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZSBhICdyZXZlcnNlZCcgdmVyc2lvbiBvZiBzb21lIHN0YXRlIGNoYW5nZXMuXHJcbiAgICogQ2hhbmdlcyBhcmUgcmV2ZXJzYWJsZSB3aGVuIHRoZXkgYXJlIGJvb2xlYW4uXHJcbiAgICogQHBhcmFtIGNoYW5nZXMgU3RhdGUgY2hhbmdlc1xyXG4gICAqIEByZXR1cm5zIFJldmVyc2VkIHN0YXRlIGNoYW5nZXNcclxuICAgKi9cclxuICBwcml2YXRlIHJldmVyc2VDaGFuZ2VzKGNoYW5nZXM6IFBhcnRpYWw8Uz4pOiBQYXJ0aWFsPFM+IHtcclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjaGFuZ2VzKS5yZWR1Y2UoKHJldmVyc2VDaGFuZ2VzOiBQYXJ0aWFsPFM+LCBidW5jaDogW3N0cmluZywgYW55XSkgPT4ge1xyXG4gICAgICBjb25zdCBbY2hhbmdlS2V5LCB2YWx1ZV0gPSBidW5jaDtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gdHlwZW9mIHRydWUpIHtcclxuICAgICAgICAocmV2ZXJzZUNoYW5nZXMgYXMgb2JqZWN0KVtjaGFuZ2VLZXldID0gIXZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXZlcnNlQ2hhbmdlcztcclxuICAgIH0sIHt9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhbGwgdGhlIGtleXMgaW4gdGhhdCBzdGF0ZSBhbmQgaW4gdGhlIHN0b3JlIGl0J3MgYm91bmQgdG8sIGlmIGFueS5cclxuICAgKiBAcmV0dXJucyBTZXQgb2Yga2V5c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0QWxsS2V5cygpOiBTZXQ8RW50aXR5S2V5PiB7XHJcbiAgICBjb25zdCBzdG9yZUtleXMgPSB0aGlzLnN0b3JlID8gQXJyYXkuZnJvbSh0aGlzLnN0b3JlLmluZGV4LmtleXMoKSkgOiBbXTtcclxuICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20odGhpcy5pbmRleC5rZXlzKCkpLmNvbmNhdChzdG9yZUtleXMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgJ2NoYW5nZScgZXZlbnRcclxuICAgKi9cclxuICBwcml2YXRlIG5leHQoKSB7XHJcbiAgICB0aGlzLmNoYW5nZSQubmV4dCgpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|