@kaspernj/api-maker 1.0.2160 → 1.0.2161
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/build/api.d.ts +46 -34
- package/build/api.d.ts.map +1 -1
- package/build/api.js +32 -25
- package/build/attribute-not-loaded-error.d.ts.map +1 -1
- package/build/attribute-not-loaded-error.js +2 -1
- package/build/base-error.d.ts +49 -60
- package/build/base-error.d.ts.map +1 -1
- package/build/base-error.js +3 -2
- package/build/base-model/column.d.ts +2 -2
- package/build/base-model/column.d.ts.map +1 -1
- package/build/base-model/column.js +3 -2
- package/build/base-model/reflection.d.ts +8 -3
- package/build/base-model/reflection.d.ts.map +1 -1
- package/build/base-model/reflection.js +8 -3
- package/build/base-model/scope.d.ts +1 -1
- package/build/base-model/scope.d.ts.map +1 -1
- package/build/base-model/scope.js +3 -2
- package/build/base-model.d.ts +3801 -117
- package/build/base-model.d.ts.map +1 -1
- package/build/base-model.js +271 -143
- package/build/bootstrap/attribute-row.d.ts +12 -0
- package/build/bootstrap/attribute-row.d.ts.map +1 -1
- package/build/bootstrap/attribute-row.js +23 -5
- package/build/bootstrap/attribute-rows.d.ts +8 -0
- package/build/bootstrap/attribute-rows.d.ts.map +1 -1
- package/build/bootstrap/attribute-rows.js +14 -5
- package/build/bootstrap/card.d.ts +17 -0
- package/build/bootstrap/card.d.ts.map +1 -1
- package/build/bootstrap/card.js +30 -10
- package/build/bootstrap/checkbox.d.ts +16 -0
- package/build/bootstrap/checkbox.d.ts.map +1 -1
- package/build/bootstrap/checkbox.js +20 -2
- package/build/bootstrap/checkboxes.d.ts +31 -0
- package/build/bootstrap/checkboxes.d.ts.map +1 -1
- package/build/bootstrap/checkboxes.js +35 -3
- package/build/bootstrap/index.js +2 -1
- package/build/bootstrap/input.d.ts +24 -0
- package/build/bootstrap/input.d.ts.map +1 -1
- package/build/bootstrap/input.js +27 -2
- package/build/bootstrap/invalid-feedback.d.ts.map +1 -1
- package/build/bootstrap/invalid-feedback.js +2 -1
- package/build/bootstrap/paginate.d.ts +5 -0
- package/build/bootstrap/paginate.d.ts.map +1 -1
- package/build/bootstrap/paginate.js +9 -4
- package/build/bootstrap/radio-buttons.js +2 -1
- package/build/bootstrap/select.js +2 -1
- package/build/bootstrap/sort-link.d.ts +10 -0
- package/build/bootstrap/sort-link.d.ts.map +1 -1
- package/build/bootstrap/sort-link.js +15 -4
- package/build/cable-connection-pool.d.ts +201 -24
- package/build/cable-connection-pool.d.ts.map +1 -1
- package/build/cable-connection-pool.js +76 -16
- package/build/cable-subscription-pool.d.ts +186 -20
- package/build/cable-subscription-pool.d.ts.map +1 -1
- package/build/cable-subscription-pool.js +61 -22
- package/build/cable-subscription.d.ts.map +1 -1
- package/build/cable-subscription.js +3 -2
- package/build/cache-key-generator.d.ts +194 -20
- package/build/cache-key-generator.d.ts.map +1 -1
- package/build/cache-key-generator.js +63 -12
- package/build/can-can.d.ts +146 -29
- package/build/can-can.d.ts.map +1 -1
- package/build/can-can.js +105 -19
- package/build/channels-consumer.d.ts +23 -1
- package/build/channels-consumer.d.ts.map +1 -1
- package/build/channels-consumer.js +26 -8
- package/build/collection-loader.js +2 -1
- package/build/collection.d.ts +361 -370
- package/build/collection.d.ts.map +1 -1
- package/build/collection.js +59 -19
- package/build/command-execution.d.ts +50 -26
- package/build/command-execution.d.ts.map +1 -1
- package/build/command-execution.js +31 -13
- package/build/command-submit-data.d.ts +50 -37
- package/build/command-submit-data.d.ts.map +1 -1
- package/build/command-submit-data.js +35 -22
- package/build/commands-pool.d.ts +65 -27
- package/build/commands-pool.d.ts.map +1 -1
- package/build/commands-pool.js +67 -20
- package/build/compose.d.ts +8 -2
- package/build/compose.d.ts.map +1 -1
- package/build/compose.js +9 -2
- package/build/config.d.ts +31 -15
- package/build/config.d.ts.map +1 -1
- package/build/config.js +60 -23
- package/build/custom-error.d.ts.map +1 -1
- package/build/custom-error.js +2 -1
- package/build/data-set-to-attributes.d.ts +14 -2
- package/build/data-set-to-attributes.d.ts.map +1 -1
- package/build/data-set-to-attributes.js +12 -3
- package/build/deserializer.d.ts +116 -2
- package/build/deserializer.d.ts.map +1 -1
- package/build/deserializer.js +13 -2
- package/build/destroy-error.d.ts.map +1 -1
- package/build/destroy-error.js +2 -1
- package/build/devise.d.ts +638 -39
- package/build/devise.d.ts.map +1 -1
- package/build/devise.js +97 -28
- package/build/draggable-sort/controller.d.ts +126 -35
- package/build/draggable-sort/controller.d.ts.map +1 -1
- package/build/draggable-sort/controller.js +100 -28
- package/build/draggable-sort/index.d.ts +55 -0
- package/build/draggable-sort/index.d.ts.map +1 -1
- package/build/draggable-sort/index.js +71 -3
- package/build/draggable-sort/item.d.ts +54 -0
- package/build/draggable-sort/item.d.ts.map +1 -1
- package/build/draggable-sort/item.js +94 -6
- package/build/error-logger.d.ts +30 -14
- package/build/error-logger.d.ts.map +1 -1
- package/build/error-logger.js +22 -11
- package/build/event-connection.d.ts.map +1 -1
- package/build/event-connection.js +3 -2
- package/build/event-emitter-listener.d.ts.map +1 -1
- package/build/event-emitter-listener.js +2 -1
- package/build/event-model-class.d.ts.map +1 -1
- package/build/event-model-class.js +2 -1
- package/build/events.d.ts.map +1 -1
- package/build/events.js +2 -1
- package/build/form.d.ts +23 -0
- package/build/form.d.ts.map +1 -1
- package/build/form.js +16 -4
- package/build/history-expo.d.ts +6 -2
- package/build/history-expo.d.ts.map +1 -1
- package/build/history-expo.js +5 -2
- package/build/history-react-native.d.ts +6 -2
- package/build/history-react-native.d.ts.map +1 -1
- package/build/history-react-native.js +5 -2
- package/build/history.js +2 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -1
- package/build/inputs/attachment.d.ts +11 -0
- package/build/inputs/attachment.d.ts.map +1 -1
- package/build/inputs/attachment.js +17 -4
- package/build/inputs/auto-submit.d.ts +41 -13
- package/build/inputs/auto-submit.d.ts.map +1 -1
- package/build/inputs/auto-submit.js +16 -4
- package/build/inputs/checkbox.d.ts +15 -0
- package/build/inputs/checkbox.d.ts.map +1 -1
- package/build/inputs/checkbox.js +22 -6
- package/build/inputs/checkboxes.d.ts +16 -0
- package/build/inputs/checkboxes.d.ts.map +1 -1
- package/build/inputs/checkboxes.js +20 -4
- package/build/inputs/id-for-component.d.ts +21 -2
- package/build/inputs/id-for-component.d.ts.map +1 -1
- package/build/inputs/id-for-component.js +9 -2
- package/build/inputs/input-wrapper.d.ts.map +1 -1
- package/build/inputs/input-wrapper.js +2 -1
- package/build/inputs/input.d.ts +36 -0
- package/build/inputs/input.d.ts.map +1 -1
- package/build/inputs/input.js +26 -7
- package/build/inputs/money.d.ts +2 -0
- package/build/inputs/money.d.ts.map +1 -1
- package/build/inputs/money.js +6 -3
- package/build/inputs/name-for-component.d.ts +21 -2
- package/build/inputs/name-for-component.d.ts.map +1 -1
- package/build/inputs/name-for-component.js +9 -2
- package/build/inputs/select.d.ts +33 -0
- package/build/inputs/select.d.ts.map +1 -1
- package/build/inputs/select.js +21 -4
- package/build/instance-of-class-name.d.ts +7 -2
- package/build/instance-of-class-name.d.ts.map +1 -1
- package/build/instance-of-class-name.js +8 -4
- package/build/is-expo.d.ts.map +1 -1
- package/build/is-expo.js +2 -1
- package/build/key-value-store.d.ts +24 -14
- package/build/key-value-store.d.ts.map +1 -1
- package/build/key-value-store.js +22 -12
- package/build/link.d.ts +30 -0
- package/build/link.d.ts.map +1 -1
- package/build/link.js +76 -30
- package/build/logger.d.ts +10 -6
- package/build/logger.d.ts.map +1 -1
- package/build/logger.js +7 -4
- package/build/merge-styles.d.ts +10 -2
- package/build/merge-styles.d.ts.map +1 -1
- package/build/merge-styles.js +10 -3
- package/build/modal.d.ts +2 -0
- package/build/modal.d.ts.map +1 -1
- package/build/modal.js +6 -4
- package/build/model-class-require.d.ts +4 -2
- package/build/model-class-require.d.ts.map +1 -1
- package/build/model-class-require.js +4 -2
- package/build/model-events.d.ts +139 -346
- package/build/model-events.d.ts.map +1 -1
- package/build/model-events.js +21 -9
- package/build/model-name.d.ts +21 -7
- package/build/model-name.d.ts.map +1 -1
- package/build/model-name.js +12 -2
- package/build/model-prop-type.d.ts +533 -26
- package/build/model-prop-type.d.ts.map +1 -1
- package/build/model-prop-type.js +69 -11
- package/build/model-recipes-loader.d.ts +7 -3
- package/build/model-recipes-loader.d.ts.map +1 -1
- package/build/model-recipes-loader.js +4 -2
- package/build/model-recipes-model-loader.d.ts +189 -1493
- package/build/model-recipes-model-loader.d.ts.map +1 -1
- package/build/model-recipes-model-loader.js +119 -17
- package/build/models-response-reader.d.ts +600 -195
- package/build/models-response-reader.d.ts.map +1 -1
- package/build/models-response-reader.js +12 -4
- package/build/models.d.ts +438 -1
- package/build/models.d.ts.map +1 -1
- package/build/models.js +2 -1
- package/build/money-formatter.d.ts +25 -31
- package/build/money-formatter.d.ts.map +1 -1
- package/build/money-formatter.js +11 -8
- package/build/not-loaded-error.d.ts.map +1 -1
- package/build/not-loaded-error.js +2 -1
- package/build/params.d.ts +25 -17
- package/build/params.d.ts.map +1 -1
- package/build/params.js +19 -15
- package/build/preloaded.d.ts +61 -64
- package/build/preloaded.d.ts.map +1 -1
- package/build/preloaded.js +10 -4
- package/build/reset-realtime-runtime-state.d.ts.map +1 -1
- package/build/reset-realtime-runtime-state.js +2 -1
- package/build/resize-observer.d.ts.map +1 -1
- package/build/resize-observer.js +2 -1
- package/build/rest-props-validator.d.ts +2 -2
- package/build/rest-props-validator.d.ts.map +1 -1
- package/build/rest-props-validator.js +3 -2
- package/build/result.d.ts +142 -175
- package/build/result.d.ts.map +1 -1
- package/build/result.js +3 -2
- package/build/router/route.d.ts +50 -0
- package/build/router/route.d.ts.map +1 -1
- package/build/router/route.js +39 -10
- package/build/router/switch.d.ts +37 -1
- package/build/router/switch.d.ts.map +1 -1
- package/build/router/switch.js +29 -7
- package/build/router.d.ts +20 -0
- package/build/router.d.ts.map +1 -1
- package/build/router.js +15 -4
- package/build/routes-native.d.ts +13 -13
- package/build/routes-native.d.ts.map +1 -1
- package/build/routes-native.js +23 -11
- package/build/routes.d.ts +17 -9
- package/build/routes.d.ts.map +1 -1
- package/build/routes.js +7 -2
- package/build/run-last.d.ts.map +1 -1
- package/build/run-last.js +2 -1
- package/build/serializer.d.ts +44 -12
- package/build/serializer.d.ts.map +1 -1
- package/build/serializer.js +36 -7
- package/build/services.d.ts +29 -4
- package/build/services.d.ts.map +1 -1
- package/build/services.js +16 -4
- package/build/session-status-updater.d.ts +73 -25
- package/build/session-status-updater.d.ts.map +1 -1
- package/build/session-status-updater.js +52 -14
- package/build/source-maps-loader.d.ts +88 -33
- package/build/source-maps-loader.d.ts.map +1 -1
- package/build/source-maps-loader.js +74 -18
- package/build/super-admin/config-reader.d.ts.map +1 -1
- package/build/super-admin/config-reader.js +11 -16
- package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts +10 -0
- package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-checkbox.js +16 -4
- package/build/super-admin/edit-page/edit-attribute-content.d.ts +9 -0
- package/build/super-admin/edit-page/edit-attribute-content.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-content.js +15 -4
- package/build/super-admin/edit-page/edit-attribute-input.d.ts +8 -0
- package/build/super-admin/edit-page/edit-attribute-input.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-input.js +13 -4
- package/build/super-admin/edit-page/edit-attribute.d.ts +6 -0
- package/build/super-admin/edit-page/edit-attribute.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute.js +11 -4
- package/build/super-admin/edit-page.d.ts +5 -0
- package/build/super-admin/edit-page.d.ts.map +1 -1
- package/build/super-admin/edit-page.js +11 -5
- package/build/super-admin/has-edit-config.d.ts.map +1 -1
- package/build/super-admin/has-edit-config.js +2 -1
- package/build/super-admin/index-page.d.ts +4 -0
- package/build/super-admin/index-page.d.ts.map +1 -1
- package/build/super-admin/index-page.js +9 -4
- package/build/super-admin/index.d.ts +4 -0
- package/build/super-admin/index.d.ts.map +1 -1
- package/build/super-admin/index.js +12 -6
- package/build/super-admin/layout/header/index.d.ts +4 -0
- package/build/super-admin/layout/header/index.d.ts.map +1 -1
- package/build/super-admin/layout/header/index.js +13 -8
- package/build/super-admin/layout/index.d.ts +24 -0
- package/build/super-admin/layout/index.d.ts.map +1 -1
- package/build/super-admin/layout/index.js +33 -5
- package/build/super-admin/layout/menu/index.d.ts +2 -0
- package/build/super-admin/layout/menu/index.d.ts.map +1 -1
- package/build/super-admin/layout/menu/index.js +8 -6
- package/build/super-admin/layout/menu/menu-content.d.ts +2 -0
- package/build/super-admin/layout/menu/menu-content.d.ts.map +1 -1
- package/build/super-admin/layout/menu/menu-content.js +6 -4
- package/build/super-admin/layout/menu/menu-item.d.ts +9 -0
- package/build/super-admin/layout/menu/menu-item.d.ts.map +1 -1
- package/build/super-admin/layout/menu/menu-item.js +15 -4
- package/build/super-admin/layout/no-access.d.ts +2 -0
- package/build/super-admin/layout/no-access.d.ts.map +1 -1
- package/build/super-admin/layout/no-access.js +7 -5
- package/build/super-admin/model-class-table.d.ts +4 -0
- package/build/super-admin/model-class-table.d.ts.map +1 -1
- package/build/super-admin/model-class-table.js +9 -4
- package/build/super-admin/models.d.ts.map +1 -1
- package/build/super-admin/models.js +2 -1
- package/build/super-admin/show-nav.d.ts +2 -0
- package/build/super-admin/show-nav.d.ts.map +1 -1
- package/build/super-admin/show-nav.js +6 -4
- package/build/super-admin/show-page/belongs-to-attribute-row.d.ts +17 -1
- package/build/super-admin/show-page/belongs-to-attribute-row.d.ts.map +1 -1
- package/build/super-admin/show-page/belongs-to-attribute-row.js +14 -5
- package/build/super-admin/show-page/index.d.ts +4 -0
- package/build/super-admin/show-page/index.d.ts.map +1 -1
- package/build/super-admin/show-page/index.js +9 -4
- package/build/super-admin/show-reflection-actions.d.ts +6 -0
- package/build/super-admin/show-reflection-actions.d.ts.map +1 -1
- package/build/super-admin/show-reflection-actions.js +11 -4
- package/build/super-admin/show-reflection-link.d.ts +4 -0
- package/build/super-admin/show-reflection-link.d.ts.map +1 -1
- package/build/super-admin/show-reflection-link.js +9 -4
- package/build/super-admin/show-reflection-page.d.ts +5 -0
- package/build/super-admin/show-reflection-page.d.ts.map +1 -1
- package/build/super-admin/show-reflection-page.js +10 -4
- package/build/table/column-content.d.ts +155 -19
- package/build/table/column-content.d.ts.map +1 -1
- package/build/table/column-content.js +55 -12
- package/build/table/column-identifier.d.ts +11 -2
- package/build/table/column-identifier.d.ts.map +1 -1
- package/build/table/column-identifier.js +7 -2
- package/build/table/column-visible.d.ts +11 -2
- package/build/table/column-visible.d.ts.map +1 -1
- package/build/table/column-visible.js +8 -2
- package/build/table/components/column.d.ts +2 -0
- package/build/table/components/column.d.ts.map +1 -1
- package/build/table/components/column.js +6 -4
- package/build/table/components/flat-list.d.ts +2 -0
- package/build/table/components/flat-list.d.ts.map +1 -1
- package/build/table/components/flat-list.js +6 -4
- package/build/table/components/header.d.ts +2 -0
- package/build/table/components/header.d.ts.map +1 -1
- package/build/table/components/header.js +6 -4
- package/build/table/components/row.d.ts +2 -0
- package/build/table/components/row.d.ts.map +1 -1
- package/build/table/components/row.js +6 -4
- package/build/table/filters/attribute-element.d.ts +2 -0
- package/build/table/filters/attribute-element.d.ts.map +1 -1
- package/build/table/filters/attribute-element.js +7 -7
- package/build/table/filters/filter-form.d.ts +58 -0
- package/build/table/filters/filter-form.d.ts.map +1 -1
- package/build/table/filters/filter-form.js +72 -9
- package/build/table/filters/filter.d.ts +2 -0
- package/build/table/filters/filter.d.ts.map +1 -1
- package/build/table/filters/filter.js +6 -4
- package/build/table/filters/index.d.ts +127 -0
- package/build/table/filters/index.d.ts.map +1 -1
- package/build/table/filters/index.js +21 -4
- package/build/table/filters/load-search-modal.d.ts +130 -0
- package/build/table/filters/load-search-modal.d.ts.map +1 -1
- package/build/table/filters/load-search-modal.js +28 -6
- package/build/table/filters/reflection-element.d.ts +2 -0
- package/build/table/filters/reflection-element.d.ts.map +1 -1
- package/build/table/filters/reflection-element.js +6 -4
- package/build/table/filters/save-search-modal.d.ts +134 -0
- package/build/table/filters/save-search-modal.d.ts.map +1 -1
- package/build/table/filters/save-search-modal.js +36 -5
- package/build/table/filters/scope-element.d.ts +6 -0
- package/build/table/filters/scope-element.d.ts.map +1 -1
- package/build/table/filters/scope-element.js +13 -8
- package/build/table/header-column-content.d.ts +7 -0
- package/build/table/header-column-content.d.ts.map +1 -1
- package/build/table/header-column-content.js +12 -4
- package/build/table/header-column.d.ts +50 -0
- package/build/table/header-column.d.ts.map +1 -1
- package/build/table/header-column.js +32 -5
- package/build/table/header-select.d.ts +18 -0
- package/build/table/header-select.d.ts.map +1 -1
- package/build/table/header-select.js +19 -4
- package/build/table/model-callback-args.d.ts +116 -3
- package/build/table/model-callback-args.d.ts.map +1 -1
- package/build/table/model-callback-args.js +10 -3
- package/build/table/model-column.d.ts +136 -0
- package/build/table/model-column.d.ts.map +1 -1
- package/build/table/model-column.js +27 -4
- package/build/table/model-row.d.ts +19 -0
- package/build/table/model-row.d.ts.map +1 -1
- package/build/table/model-row.js +24 -4
- package/build/table/select-calculator.d.ts +37 -2
- package/build/table/select-calculator.d.ts.map +1 -1
- package/build/table/select-calculator.js +29 -6
- package/build/table/settings/column-row.d.ts +6 -0
- package/build/table/settings/column-row.d.ts.map +1 -1
- package/build/table/settings/column-row.js +13 -12
- package/build/table/settings/download-action.d.ts +5 -0
- package/build/table/settings/download-action.d.ts.map +1 -1
- package/build/table/settings/download-action.js +10 -4
- package/build/table/settings/index.d.ts +5 -0
- package/build/table/settings/index.d.ts.map +1 -1
- package/build/table/settings/index.js +10 -4
- package/build/table/should-render-loading-content.d.ts +2 -2
- package/build/table/should-render-loading-content.d.ts.map +1 -1
- package/build/table/should-render-loading-content.js +3 -2
- package/build/table/table-settings.d.ts +236 -43
- package/build/table/table-settings.d.ts.map +1 -1
- package/build/table/table-settings.js +104 -20
- package/build/table/table.d.ts +271 -0
- package/build/table/table.d.ts.map +1 -1
- package/build/table/table.js +167 -16
- package/build/table/use-sorting.d.ts +10 -8
- package/build/table/use-sorting.d.ts.map +1 -1
- package/build/table/use-sorting.js +16 -8
- package/build/table/widths.d.ts +55 -8
- package/build/table/widths.d.ts.map +1 -1
- package/build/table/widths.js +25 -2
- package/build/table/worker-plugins-check-all-checkbox.d.ts +18 -0
- package/build/table/worker-plugins-check-all-checkbox.d.ts.map +1 -1
- package/build/table/worker-plugins-check-all-checkbox.js +25 -5
- package/build/table/worker-plugins-checkbox.d.ts +5 -0
- package/build/table/worker-plugins-checkbox.d.ts.map +1 -1
- package/build/table/worker-plugins-checkbox.js +10 -4
- package/build/translated-attributes.d.ts +7 -2
- package/build/translated-attributes.d.ts.map +1 -1
- package/build/translated-attributes.js +8 -2
- package/build/translated-collections.d.ts +11 -2
- package/build/translated-collections.d.ts.map +1 -1
- package/build/translated-collections.js +9 -3
- package/build/updated-attribute.d.ts.map +1 -1
- package/build/updated-attribute.js +2 -1
- package/build/url-encode.d.ts.map +1 -1
- package/build/url-encode.js +2 -1
- package/build/use-can-can.d.ts +2 -2
- package/build/use-can-can.d.ts.map +1 -1
- package/build/use-can-can.js +27 -12
- package/build/use-collection.d.ts +167 -121
- package/build/use-collection.d.ts.map +1 -1
- package/build/use-collection.js +113 -44
- package/build/use-created-event.d.ts +120 -11
- package/build/use-created-event.d.ts.map +1 -1
- package/build/use-created-event.js +10 -7
- package/build/use-current-user-context.d.ts +2 -2
- package/build/use-current-user-context.d.ts.map +1 -1
- package/build/use-current-user-context.js +3 -2
- package/build/use-current-user.d.ts +86 -70
- package/build/use-current-user.d.ts.map +1 -1
- package/build/use-current-user.js +36 -8
- package/build/use-destroyed-event.d.ts +117 -8
- package/build/use-destroyed-event.d.ts.map +1 -1
- package/build/use-destroyed-event.js +29 -22
- package/build/use-input.d.ts +74 -12
- package/build/use-input.d.ts.map +1 -1
- package/build/use-input.js +33 -5
- package/build/use-model-class-event.d.ts +124 -10
- package/build/use-model-class-event.d.ts.map +1 -1
- package/build/use-model-class-event.js +26 -16
- package/build/use-model-event.d.ts +121 -8
- package/build/use-model-event.d.ts.map +1 -1
- package/build/use-model-event.js +24 -19
- package/build/use-model.d.ts +162 -244
- package/build/use-model.d.ts.map +1 -1
- package/build/use-model.js +85 -32
- package/build/use-resize-observer.d.ts.map +1 -1
- package/build/use-resize-observer.js +2 -1
- package/build/use-router.d.ts.map +1 -1
- package/build/use-router.js +2 -1
- package/build/use-screen-layout.d.ts +7 -2
- package/build/use-screen-layout.d.ts.map +1 -1
- package/build/use-screen-layout.js +8 -5
- package/build/use-shape.js +2 -1
- package/build/use-styles.d.ts +11 -5
- package/build/use-styles.d.ts.map +1 -1
- package/build/use-styles.js +16 -9
- package/build/use-updated-event.d.ts +66 -182
- package/build/use-updated-event.d.ts.map +1 -1
- package/build/use-updated-event.js +22 -18
- package/build/use-validation-errors.d.ts.map +1 -1
- package/build/use-validation-errors.js +2 -1
- package/build/utils/button.d.ts +14 -0
- package/build/utils/button.d.ts.map +1 -1
- package/build/utils/button.js +24 -7
- package/build/utils/card.d.ts +9 -0
- package/build/utils/card.d.ts.map +1 -1
- package/build/utils/card.js +13 -2
- package/build/utils/checkbox.d.ts +12 -0
- package/build/utils/checkbox.d.ts.map +1 -1
- package/build/utils/checkbox.js +18 -4
- package/build/utils/checkboxes.d.ts +25 -0
- package/build/utils/checkboxes.d.ts.map +1 -1
- package/build/utils/checkboxes.js +29 -3
- package/build/utils/default-style.d.ts +10 -4
- package/build/utils/default-style.d.ts.map +1 -1
- package/build/utils/default-style.js +12 -4
- package/build/utils/header.d.ts +6 -1
- package/build/utils/header.d.ts.map +1 -1
- package/build/utils/header.js +4 -2
- package/build/utils/icon.d.ts +7 -6
- package/build/utils/icon.d.ts.map +1 -1
- package/build/utils/icon.js +12 -11
- package/build/utils/invalid-feedback.d.ts +4 -0
- package/build/utils/invalid-feedback.d.ts.map +1 -1
- package/build/utils/invalid-feedback.js +8 -2
- package/build/utils/modal.d.ts +2 -0
- package/build/utils/modal.d.ts.map +1 -1
- package/build/utils/modal.js +9 -7
- package/build/utils/text.d.ts +8 -1
- package/build/utils/text.d.ts.map +1 -1
- package/build/utils/text.js +9 -2
- package/build/validation-error.d.ts +5 -2
- package/build/validation-error.d.ts.map +1 -1
- package/build/validation-error.js +5 -2
- package/build/validation-errors.d.ts +57 -15
- package/build/validation-errors.d.ts.map +1 -1
- package/build/validation-errors.js +37 -8
- package/build/websocket-request-client.d.ts +61 -15
- package/build/websocket-request-client.d.ts.map +1 -1
- package/build/websocket-request-client.js +35 -9
- package/build/with-api-maker.d.ts.map +1 -1
- package/build/with-api-maker.js +2 -1
- package/build/with-collection.d.ts.map +1 -1
- package/build/with-collection.js +2 -1
- package/build/with-current-user.d.ts.map +1 -1
- package/build/with-current-user.js +2 -1
- package/build/with-model.d.ts.map +1 -1
- package/build/with-model.js +2 -1
- package/build/with-router.d.ts.map +1 -1
- package/build/with-router.js +2 -1
- package/package.json +4 -3
- package/build/base-component.d.ts +0 -5
- package/build/base-component.d.ts.map +0 -1
- package/build/base-component.js +0 -4
|
@@ -1,32 +1,61 @@
|
|
|
1
|
+
/** @typedef {import("./base-model.js").default} BaseModel */
|
|
2
|
+
/** @typedef {import("./cable-subscription.js").default} CableSubscription */
|
|
3
|
+
/** @typedef {string | number | boolean | null} EventArgumentPrimitive */
|
|
4
|
+
/** @typedef {EventArgumentPrimitive | EventArgumentPrimitive[]} EventArgumentValue */
|
|
5
|
+
/** @typedef {Record<string, EventArgumentValue>} SubscriptionRefreshArgs */
|
|
6
|
+
/** @typedef {{channel: string, global: object, subscription_data: object}} CableSubscriptionCreateArgs */
|
|
7
|
+
/** @typedef {{model: BaseModel}} ModelMutationPayload */
|
|
8
|
+
/** @typedef {{args: Record<string, EventArgumentValue>, eventName: string, model: BaseModel}} ModelEventPayload */
|
|
9
|
+
/** @typedef {{args: Record<string, EventArgumentValue>, eventName: string}} ModelClassEventPayload */
|
|
10
|
+
/**
|
|
11
|
+
* @typedef {object} SubscriptionIterationArgs
|
|
12
|
+
* @property {string} [eventName]
|
|
13
|
+
* @property {"creates"|"destroys"|"updates"|"model_class_events"} mode
|
|
14
|
+
* @property {string} [modelId]
|
|
15
|
+
* @property {string} modelName
|
|
16
|
+
* @property {CableSubscription} subscription
|
|
17
|
+
*/
|
|
1
18
|
/** Subscription pool for sharing channel subscriptions. */
|
|
2
19
|
export default class ApiMakerCableSubscriptionPool {
|
|
3
20
|
activeSubscriptions: number;
|
|
4
21
|
authRefreshCallbacks: {};
|
|
5
22
|
connected: boolean;
|
|
6
23
|
skipDisconnectHandling: boolean;
|
|
7
|
-
/**
|
|
8
|
-
|
|
9
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Opens the shared ActionCable subscription for the given subscription tree.
|
|
26
|
+
* @param {object} subscriptionData
|
|
27
|
+
* @returns {void}
|
|
28
|
+
*/
|
|
29
|
+
connect(subscriptionData: object): void;
|
|
30
|
+
subscription: import("./channels-consumer.js").ActionCableSubscription;
|
|
10
31
|
/**
|
|
11
32
|
* Refreshes auth for the existing subscription without recreating the pool.
|
|
12
33
|
*
|
|
13
|
-
* @param {
|
|
34
|
+
* @param {SubscriptionRefreshArgs} args
|
|
14
35
|
* @returns {Promise<void>}
|
|
15
36
|
*/
|
|
16
|
-
refreshAuthentication(args:
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
37
|
+
refreshAuthentication(args: SubscriptionRefreshArgs): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Iterates over every tracked subscription with its stream metadata.
|
|
40
|
+
* @param {(args: SubscriptionIterationArgs) => void} callback
|
|
41
|
+
* @returns {void}
|
|
42
|
+
*/
|
|
43
|
+
forEachSubscription(callback: (args: SubscriptionIterationArgs) => void): void;
|
|
44
|
+
/** @returns {boolean} */
|
|
45
|
+
isConnected: () => boolean;
|
|
46
|
+
/** Marks the pool connected and notifies each subscriber once the stream is ready. */
|
|
22
47
|
onConnected: () => void;
|
|
23
|
-
/**
|
|
48
|
+
/** Marks the pool disconnected and fails pending auth refreshes unless teardown is intentional. */
|
|
24
49
|
onDisconnected: () => void;
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Routes one ActionCable payload to the matching logical subscriptions.
|
|
52
|
+
* @param {object} rawData
|
|
53
|
+
* @returns {void}
|
|
54
|
+
*/
|
|
55
|
+
onReceived: (rawData: object) => void;
|
|
56
|
+
/** Logs when ActionCable confirms the shared subscription. */
|
|
28
57
|
onSubscribed: () => void;
|
|
29
|
-
/**
|
|
58
|
+
/** Marks the pool disconnected when ActionCable rejects the shared subscription. */
|
|
30
59
|
onRejected: () => void;
|
|
31
60
|
/** @returns {void} */
|
|
32
61
|
clearAuthRefreshCallbacks(): void;
|
|
@@ -37,14 +66,151 @@ export default class ApiMakerCableSubscriptionPool {
|
|
|
37
66
|
* @returns {void}
|
|
38
67
|
*/
|
|
39
68
|
rejectAuthRefresh(error: Error): void;
|
|
40
|
-
/**
|
|
69
|
+
/** Releases one tracked logical subscription and tears down the shared stream when the pool becomes empty. */
|
|
41
70
|
onUnsubscribe(): void;
|
|
42
|
-
/**
|
|
43
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Registers the logical subscriptions served by this shared ActionCable stream.
|
|
73
|
+
* @param {object} subscriptions
|
|
74
|
+
* @returns {void}
|
|
75
|
+
*/
|
|
76
|
+
registerSubscriptions(subscriptions: object): void;
|
|
44
77
|
subscriptions: any;
|
|
45
|
-
/**
|
|
46
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Hooks pool bookkeeping up to a child subscription's unsubscribe event.
|
|
80
|
+
* @param {CableSubscription} subscription
|
|
81
|
+
* @returns {void}
|
|
82
|
+
*/
|
|
83
|
+
connectUnsubscriptionForSubscription(subscription: CableSubscription): void;
|
|
47
84
|
/** @returns {void} */
|
|
48
85
|
reset(): void;
|
|
49
86
|
}
|
|
87
|
+
export type BaseModel = {
|
|
88
|
+
abilities: import("./base-model.js").ModelAbilityMap;
|
|
89
|
+
changes: import("./base-model.js").ModelDataMap;
|
|
90
|
+
collection: import("./collection.js").default<any>;
|
|
91
|
+
_identifierKey: string | number;
|
|
92
|
+
_markedForDestruction: boolean;
|
|
93
|
+
modelData: import("./base-model.js").ModelDataMap;
|
|
94
|
+
newRecord: boolean;
|
|
95
|
+
previousModelData: any;
|
|
96
|
+
preloadedRelationships: import("./base-model.js").PreloadedRelationshipMap;
|
|
97
|
+
relationshipsCache: import("./base-model.js").LoadedRelationshipMap;
|
|
98
|
+
relationships: import("./base-model.js").LoadedRelationshipMap;
|
|
99
|
+
uniqueKeyValue: number;
|
|
100
|
+
assignAttributes(newAttributes: ModelDataMap): void;
|
|
101
|
+
attributes(): ModelDataMap;
|
|
102
|
+
can(givenAbilityName: string): boolean;
|
|
103
|
+
clone(): /*elided*/ any;
|
|
104
|
+
cacheKey(): number | string;
|
|
105
|
+
localCacheKey(): string;
|
|
106
|
+
fullCacheKey(): string;
|
|
107
|
+
create(attributes?: ModelDataMap, options?: ParseValidationErrorsOptions): Promise<{
|
|
108
|
+
model: /*elided*/ any;
|
|
109
|
+
response: ModelCommandResponse;
|
|
110
|
+
}>;
|
|
111
|
+
createRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions): Promise<{
|
|
112
|
+
model: /*elided*/ any;
|
|
113
|
+
response: ModelCommandResponse;
|
|
114
|
+
}>;
|
|
115
|
+
destroy(): Promise<{
|
|
116
|
+
model: /*elided*/ any;
|
|
117
|
+
response: ModelCommandResponse;
|
|
118
|
+
}>;
|
|
119
|
+
ensureAbilities(listOfAbilities: string[]): Promise<void>;
|
|
120
|
+
getAttributes(): ModelDataMap;
|
|
121
|
+
handleResponseError(response: ModelCommandResponse): never;
|
|
122
|
+
identifierKey(): number | string;
|
|
123
|
+
isAssociationLoaded(associationName: string): boolean;
|
|
124
|
+
isAssociationLoadedUnderscore(associationNameUnderscore: string): boolean;
|
|
125
|
+
isAssociationPresent(associationName: string): boolean;
|
|
126
|
+
ensureAssociationLoaded(associationName: string): Promise<LoadedRelationshipValue>;
|
|
127
|
+
ensureAssociationLoadedUnderscore(associationNameUnderscore: string): Promise<LoadedRelationshipValue>;
|
|
128
|
+
isAttributeChanged(attributeName: string): boolean;
|
|
129
|
+
isChanged(): boolean;
|
|
130
|
+
isNewRecord(): boolean;
|
|
131
|
+
isPersisted(): boolean;
|
|
132
|
+
savedChangeToAttribute(attributeName: string): boolean;
|
|
133
|
+
setNewModel(model: /*elided*/ any): void;
|
|
134
|
+
setNewModelData(model: /*elided*/ any): void;
|
|
135
|
+
_isDateChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
|
|
136
|
+
_isIntegerChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
|
|
137
|
+
_isStringChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
|
|
138
|
+
modelClassData(): ModelClassDataType;
|
|
139
|
+
reload(): Promise<void>;
|
|
140
|
+
save(): Promise<{
|
|
141
|
+
model: /*elided*/ any;
|
|
142
|
+
response?: object;
|
|
143
|
+
}>;
|
|
144
|
+
saveRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions & {
|
|
145
|
+
simpleModelErrors?: boolean;
|
|
146
|
+
}): Promise<{
|
|
147
|
+
model: /*elided*/ any;
|
|
148
|
+
response: ModelCommandResponse;
|
|
149
|
+
}>;
|
|
150
|
+
update(newAttributes?: ModelDataMap, options?: ParseValidationErrorsOptions): Promise<{
|
|
151
|
+
model: /*elided*/ any;
|
|
152
|
+
response?: object;
|
|
153
|
+
}>;
|
|
154
|
+
_refreshModelFromResponse(response: ModelCommandResponse): void;
|
|
155
|
+
_refreshModelDataFromResponse(response: ModelCommandResponse): void;
|
|
156
|
+
updateRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions & {
|
|
157
|
+
simpleModelErrors?: boolean;
|
|
158
|
+
}): Promise<{
|
|
159
|
+
response: ModelCommandResponse;
|
|
160
|
+
model: /*elided*/ any;
|
|
161
|
+
}>;
|
|
162
|
+
isValid(): never;
|
|
163
|
+
isValidOnServer(): Promise<{
|
|
164
|
+
valid: boolean;
|
|
165
|
+
errors: ValidationResponseErrors;
|
|
166
|
+
}>;
|
|
167
|
+
modelClass(): BaseModelClassType;
|
|
168
|
+
preloadRelationship(relationshipName: string, model: /*elided*/ any | /*elided*/ any[] | null): void;
|
|
169
|
+
markForDestruction(): void;
|
|
170
|
+
markedForDestruction(): boolean;
|
|
171
|
+
uniqueKey(): number;
|
|
172
|
+
_callMemberCommand(args: ModelCommandDescriptor, commandArgs: ModelCommandOptions): import("./command-execution.js").default;
|
|
173
|
+
readAttribute(attributeName: string): ModelValue | null | undefined;
|
|
174
|
+
readAttributeUnderscore(attributeName: string): ModelValue | null | undefined;
|
|
175
|
+
isAttributeLoaded(attributeName: string): boolean;
|
|
176
|
+
_isPresent(value: ModelValue | null | undefined): boolean;
|
|
177
|
+
_loadBelongsToReflection(args: RelationshipLoadArgs, queryArgs?: import("./collection.js").QueryArgsType): Promise</*elided*/ any | null>;
|
|
178
|
+
_readBelongsToReflection({ reflectionName }: RelationshipLoadArgs): /*elided*/ any | null;
|
|
179
|
+
_loadHasManyReflection(args: RelationshipLoadArgs, queryArgs?: import("./collection.js").QueryArgsType): Promise</*elided*/ any[]>;
|
|
180
|
+
_loadHasOneReflection(args: RelationshipLoadArgs, queryArgs?: import("./collection.js").QueryArgsType): Promise</*elided*/ any | null>;
|
|
181
|
+
_readHasOneReflection({ reflectionName }: RelationshipLoadArgs): /*elided*/ any | null;
|
|
182
|
+
_readModelDataFromArgs(args?: BaseModelArgsObject): void;
|
|
183
|
+
_readPreloadedRelationships(preloaded: {
|
|
184
|
+
getModel: (relationshipType: string, relationshipId: number | string) => /*elided*/ any;
|
|
185
|
+
}): void;
|
|
186
|
+
primaryKey(): number | string;
|
|
187
|
+
};
|
|
188
|
+
export type CableSubscription = import("./cable-subscription.js").default;
|
|
189
|
+
export type EventArgumentPrimitive = string | number | boolean | null;
|
|
190
|
+
export type EventArgumentValue = EventArgumentPrimitive | EventArgumentPrimitive[];
|
|
191
|
+
export type SubscriptionRefreshArgs = Record<string, EventArgumentValue>;
|
|
192
|
+
export type CableSubscriptionCreateArgs = {
|
|
193
|
+
channel: string;
|
|
194
|
+
global: object;
|
|
195
|
+
subscription_data: object;
|
|
196
|
+
};
|
|
197
|
+
export type ModelMutationPayload = {
|
|
198
|
+
model: BaseModel;
|
|
199
|
+
};
|
|
200
|
+
export type ModelEventPayload = {
|
|
201
|
+
args: Record<string, EventArgumentValue>;
|
|
202
|
+
eventName: string;
|
|
203
|
+
model: BaseModel;
|
|
204
|
+
};
|
|
205
|
+
export type ModelClassEventPayload = {
|
|
206
|
+
args: Record<string, EventArgumentValue>;
|
|
207
|
+
eventName: string;
|
|
208
|
+
};
|
|
209
|
+
export type SubscriptionIterationArgs = {
|
|
210
|
+
eventName?: string;
|
|
211
|
+
mode: "creates" | "destroys" | "updates" | "model_class_events";
|
|
212
|
+
modelId?: string;
|
|
213
|
+
modelName: string;
|
|
214
|
+
subscription: CableSubscription;
|
|
215
|
+
};
|
|
50
216
|
//# sourceMappingURL=cable-subscription-pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cable-subscription-pool.d.ts","sourceRoot":"/src/","sources":["cable-subscription-pool.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cable-subscription-pool.d.ts","sourceRoot":"/src/","sources":["cable-subscription-pool.js"],"names":[],"mappings":"AAWA,6DAA6D;AAC7D,6EAA6E;AAC7E,yEAAyE;AACzE,sFAAsF;AACtF,4EAA4E;AAC5E,0GAA0G;AAC1G,yDAAyD;AACzD,mHAAmH;AACnH,sGAAsG;AACtG;;;;;;;GAOG;AAEH,2DAA2D;AAC3D;IAGI,4BAA4B;IAC5B,yBAA8B;IAC9B,mBAAsB;IACtB,gCAAmC;IAGrC;;;;OAIG;IACH,0BAHW,MAAM,GACJ,IAAI,CAsBhB;IAfC,uEAaC;IAIH;;;;;OAKG;IACH,4BAHW,uBAAuB,GACrB,OAAO,CAAC,IAAI,CAAC,CAsBzB;IAED;;;;MAIE;IACF,8BAHW,CAAC,IAAI,EAAE,yBAAyB,KAAK,IAAI,GACvC,IAAI,CA2ChB;IAED,yBAAyB;IACzB,mBADc,OAAO,CACsB;IAE3C,sFAAsF;IACtF,wBAMC;IAED,mGAAmG;IACnG,2BAQC;IAED;;;;OAIG;IACH,aAAc,SAHH,MAGU,KAFR,IAAI,CAuDhB;IAED,8DAA8D;IAC9D,yBAEC;IAED,oFAAoF;IACpF,uBAQC;IAED,sBAAsB;IACtB,6BADc,IAAI,CAOjB;IAED,sBAAsB;IACtB,sBADc,IAAI,CAIjB;IAED;;;OAGG;IACH,yBAHW,KAAK,GACH,IAAI,CAKhB;IAED,8GAA8G;IAC9G,sBAcC;IAED;;;;OAIG;IACH,qCAHW,MAAM,GACJ,IAAI,CAiChB;IA9BC,mBAAkC;IAgCpC;;;;OAIG;IACH,mDAHW,iBAAiB,GACf,IAAI,CAahB;IAED,sBAAsB;IACtB,SADc,IAAI,CAajB;CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAC60iB,CAAC;;;yBAA6O,CAAC;;;;;;;gBAAoc,CAAC;;;;;yBAAm7E,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCArVx6oB,OAAO,yBAAyB,EAAE,OAAO;qCACzC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;iCAChC,sBAAsB,GAAG,sBAAsB,EAAE;sCACjD,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC;0CAClC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAC;mCAC5D;IAAC,KAAK,EAAE,SAAS,CAAA;CAAC;gCAClB;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAC;qCAC/E;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC;;gBAG7D,MAAM;UACN,SAAS,GAAC,UAAU,GAAC,SAAS,GAAC,oBAAoB;cACnD,MAAM;eACN,MAAM;kBACN,iBAAiB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import * as inflection from "inflection";
|
|
2
3
|
import { digg } from "diggerize";
|
|
3
4
|
import CommandsPool from "./commands-pool.js"; // eslint-disable-line sort-imports
|
|
@@ -6,24 +7,46 @@ import getChannelsConsumer from "./channels-consumer.js";
|
|
|
6
7
|
import Logger from "./logger.js"; // eslint-disable-line sort-imports
|
|
7
8
|
const logger = new Logger({ name: "ApiMaker / CableSubscriptionPool" });
|
|
8
9
|
const AUTH_REFRESH_TIMEOUT_MS = 5000;
|
|
10
|
+
/** @typedef {import("./base-model.js").default} BaseModel */
|
|
11
|
+
/** @typedef {import("./cable-subscription.js").default} CableSubscription */
|
|
12
|
+
/** @typedef {string | number | boolean | null} EventArgumentPrimitive */
|
|
13
|
+
/** @typedef {EventArgumentPrimitive | EventArgumentPrimitive[]} EventArgumentValue */
|
|
14
|
+
/** @typedef {Record<string, EventArgumentValue>} SubscriptionRefreshArgs */
|
|
15
|
+
/** @typedef {{channel: string, global: object, subscription_data: object}} CableSubscriptionCreateArgs */
|
|
16
|
+
/** @typedef {{model: BaseModel}} ModelMutationPayload */
|
|
17
|
+
/** @typedef {{args: Record<string, EventArgumentValue>, eventName: string, model: BaseModel}} ModelEventPayload */
|
|
18
|
+
/** @typedef {{args: Record<string, EventArgumentValue>, eventName: string}} ModelClassEventPayload */
|
|
19
|
+
/**
|
|
20
|
+
* @typedef {object} SubscriptionIterationArgs
|
|
21
|
+
* @property {string} [eventName]
|
|
22
|
+
* @property {"creates"|"destroys"|"updates"|"model_class_events"} mode
|
|
23
|
+
* @property {string} [modelId]
|
|
24
|
+
* @property {string} modelName
|
|
25
|
+
* @property {CableSubscription} subscription
|
|
26
|
+
*/
|
|
9
27
|
/** Subscription pool for sharing channel subscriptions. */
|
|
10
28
|
export default class ApiMakerCableSubscriptionPool {
|
|
11
|
-
/**
|
|
29
|
+
/** Initializes bookkeeping for one shared ActionCable subscription pool. */
|
|
12
30
|
constructor() {
|
|
13
31
|
this.activeSubscriptions = 0;
|
|
14
32
|
this.authRefreshCallbacks = {};
|
|
15
33
|
this.connected = false;
|
|
16
34
|
this.skipDisconnectHandling = false;
|
|
17
35
|
}
|
|
18
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Opens the shared ActionCable subscription for the given subscription tree.
|
|
38
|
+
* @param {object} subscriptionData
|
|
39
|
+
* @returns {void}
|
|
40
|
+
*/
|
|
19
41
|
connect(subscriptionData) {
|
|
20
42
|
const globalData = CommandsPool.current().globalRequestData;
|
|
21
43
|
logger.debug(() => ["Creating subscription", { subscriptionData }]);
|
|
22
|
-
this.subscription = getChannelsConsumer().subscriptions.create(
|
|
44
|
+
this.subscription = getChannelsConsumer().subscriptions.create(
|
|
45
|
+
/** @type {CableSubscriptionCreateArgs} */ ({
|
|
23
46
|
channel: "ApiMaker::SubscriptionsChannel",
|
|
24
47
|
global: globalData,
|
|
25
48
|
subscription_data: subscriptionData
|
|
26
|
-
}, {
|
|
49
|
+
}), {
|
|
27
50
|
connected: this.onConnected,
|
|
28
51
|
disconnected: this.onDisconnected,
|
|
29
52
|
received: this.onReceived,
|
|
@@ -35,7 +58,7 @@ export default class ApiMakerCableSubscriptionPool {
|
|
|
35
58
|
/**
|
|
36
59
|
* Refreshes auth for the existing subscription without recreating the pool.
|
|
37
60
|
*
|
|
38
|
-
* @param {
|
|
61
|
+
* @param {SubscriptionRefreshArgs} args
|
|
39
62
|
* @returns {Promise<void>}
|
|
40
63
|
*/
|
|
41
64
|
refreshAuthentication(args) {
|
|
@@ -55,9 +78,13 @@ export default class ApiMakerCableSubscriptionPool {
|
|
|
55
78
|
this.subscription.perform("refresh_auth", args);
|
|
56
79
|
return this.authRefreshCallbacks.promise;
|
|
57
80
|
}
|
|
58
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Iterates over every tracked subscription with its stream metadata.
|
|
83
|
+
* @param {(args: SubscriptionIterationArgs) => void} callback
|
|
84
|
+
* @returns {void}
|
|
85
|
+
*/
|
|
59
86
|
forEachSubscription(callback) {
|
|
60
|
-
const modelIdModes = ["destroys", "updates"];
|
|
87
|
+
const modelIdModes = /** @type {Array<"destroys"|"updates">} */ (["destroys", "updates"]);
|
|
61
88
|
const subscriptions = digg(this, "subscriptions");
|
|
62
89
|
for (const modelName in subscriptions) {
|
|
63
90
|
for (const modelIdMode of modelIdModes) {
|
|
@@ -94,16 +121,16 @@ export default class ApiMakerCableSubscriptionPool {
|
|
|
94
121
|
}
|
|
95
122
|
}
|
|
96
123
|
}
|
|
97
|
-
/**
|
|
124
|
+
/** @returns {boolean} */
|
|
98
125
|
isConnected = () => digg(this, "connected");
|
|
99
|
-
/**
|
|
126
|
+
/** Marks the pool connected and notifies each subscriber once the stream is ready. */
|
|
100
127
|
onConnected = () => {
|
|
101
128
|
this.connected = true;
|
|
102
129
|
this.forEachSubscription(({ subscription }) => {
|
|
103
130
|
subscription.events.emit("connected");
|
|
104
131
|
});
|
|
105
132
|
};
|
|
106
|
-
/**
|
|
133
|
+
/** Marks the pool disconnected and fails pending auth refreshes unless teardown is intentional. */
|
|
107
134
|
onDisconnected = () => {
|
|
108
135
|
this.connected = false;
|
|
109
136
|
if (this.skipDisconnectHandling) {
|
|
@@ -111,7 +138,11 @@ export default class ApiMakerCableSubscriptionPool {
|
|
|
111
138
|
}
|
|
112
139
|
this.rejectAuthRefresh(new Error("Subscription auth refresh was interrupted by a disconnect"));
|
|
113
140
|
};
|
|
114
|
-
/**
|
|
141
|
+
/**
|
|
142
|
+
* Routes one ActionCable payload to the matching logical subscriptions.
|
|
143
|
+
* @param {object} rawData
|
|
144
|
+
* @returns {void}
|
|
145
|
+
*/
|
|
115
146
|
onReceived = (rawData) => {
|
|
116
147
|
if (rawData.type == "api_maker_subscription_auth_refreshed") {
|
|
117
148
|
this.resolveAuthRefresh();
|
|
@@ -134,41 +165,41 @@ export default class ApiMakerCableSubscriptionPool {
|
|
|
134
165
|
}
|
|
135
166
|
if (type == "u") {
|
|
136
167
|
for (const subscription of subscriptions[modelName].updates[modelId]) {
|
|
137
|
-
subscription.events.emit("received", { model });
|
|
168
|
+
subscription.events.emit("received", /** @type {ModelMutationPayload} */ ({ model }));
|
|
138
169
|
}
|
|
139
170
|
}
|
|
140
171
|
else if (type == "c") {
|
|
141
172
|
for (const subscription of subscriptions[modelName].creates) {
|
|
142
|
-
subscription.events.emit("received", { model });
|
|
173
|
+
subscription.events.emit("received", /** @type {ModelMutationPayload} */ ({ model }));
|
|
143
174
|
}
|
|
144
175
|
}
|
|
145
176
|
else if (type == "d") {
|
|
146
177
|
const destroySubscriptions = digg(subscriptions, modelName, "destroys", modelId);
|
|
147
178
|
for (const subscription of destroySubscriptions) {
|
|
148
|
-
subscription.events.emit("received", { model });
|
|
179
|
+
subscription.events.emit("received", /** @type {ModelMutationPayload} */ ({ model }));
|
|
149
180
|
}
|
|
150
181
|
}
|
|
151
182
|
else if (type == "e") {
|
|
152
183
|
const eventSubscriptions = digg(subscriptions, modelName, "events", eventName, modelId);
|
|
153
184
|
for (const subscription of eventSubscriptions) {
|
|
154
|
-
subscription.events.emit("received", { args, eventName, model });
|
|
185
|
+
subscription.events.emit("received", /** @type {ModelEventPayload} */ ({ args, eventName, model }));
|
|
155
186
|
}
|
|
156
187
|
}
|
|
157
188
|
else if (type == "mce") {
|
|
158
189
|
const modelClassEventSubscriptions = digg(subscriptions, modelName, "model_class_events", eventName);
|
|
159
190
|
for (const subscription of modelClassEventSubscriptions) {
|
|
160
|
-
subscription.events.emit("received", { args, eventName });
|
|
191
|
+
subscription.events.emit("received", /** @type {ModelClassEventPayload} */ ({ args, eventName }));
|
|
161
192
|
}
|
|
162
193
|
}
|
|
163
194
|
else {
|
|
164
195
|
throw new Error(`Unknown type: ${data.type}`);
|
|
165
196
|
}
|
|
166
197
|
};
|
|
167
|
-
/**
|
|
198
|
+
/** Logs when ActionCable confirms the shared subscription. */
|
|
168
199
|
onSubscribed = () => {
|
|
169
200
|
logger.debug("onSubscribed");
|
|
170
201
|
};
|
|
171
|
-
/**
|
|
202
|
+
/** Marks the pool disconnected when ActionCable rejects the shared subscription. */
|
|
172
203
|
onRejected = () => {
|
|
173
204
|
this.connected = false;
|
|
174
205
|
if (this.skipDisconnectHandling) {
|
|
@@ -196,7 +227,7 @@ export default class ApiMakerCableSubscriptionPool {
|
|
|
196
227
|
this.authRefreshCallbacks.reject?.(error);
|
|
197
228
|
this.clearAuthRefreshCallbacks();
|
|
198
229
|
}
|
|
199
|
-
/**
|
|
230
|
+
/** Releases one tracked logical subscription and tears down the shared stream when the pool becomes empty. */
|
|
200
231
|
onUnsubscribe() {
|
|
201
232
|
if (this.skipDisconnectHandling) {
|
|
202
233
|
return;
|
|
@@ -210,7 +241,11 @@ export default class ApiMakerCableSubscriptionPool {
|
|
|
210
241
|
this.connected = false;
|
|
211
242
|
}
|
|
212
243
|
}
|
|
213
|
-
/**
|
|
244
|
+
/**
|
|
245
|
+
* Registers the logical subscriptions served by this shared ActionCable stream.
|
|
246
|
+
* @param {object} subscriptions
|
|
247
|
+
* @returns {void}
|
|
248
|
+
*/
|
|
214
249
|
registerSubscriptions(subscriptions) {
|
|
215
250
|
this.subscriptions = subscriptions;
|
|
216
251
|
logger.debug(() => ["registerSubscriptions", { subscriptions }]);
|
|
@@ -239,7 +274,11 @@ export default class ApiMakerCableSubscriptionPool {
|
|
|
239
274
|
}
|
|
240
275
|
}
|
|
241
276
|
}
|
|
242
|
-
/**
|
|
277
|
+
/**
|
|
278
|
+
* Hooks pool bookkeeping up to a child subscription's unsubscribe event.
|
|
279
|
+
* @param {CableSubscription} subscription
|
|
280
|
+
* @returns {void}
|
|
281
|
+
*/
|
|
243
282
|
connectUnsubscriptionForSubscription(subscription) {
|
|
244
283
|
logger.debug(() => ["Connecting to unsubscribe on subscription", { subscription }]);
|
|
245
284
|
this.activeSubscriptions += 1;
|
|
@@ -262,4 +301,4 @@ export default class ApiMakerCableSubscriptionPool {
|
|
|
262
301
|
this.activeSubscriptions = 0;
|
|
263
302
|
}
|
|
264
303
|
}
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FibGUtc3Vic2NyaXB0aW9uLXBvb2wuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNhYmxlLXN1YnNjcmlwdGlvbi1wb29sLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUEsQ0FBQyxtQ0FBbUM7QUFDakYsT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUE7QUFDNUMsT0FBTyxtQkFBbUIsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RCxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUEsQ0FBQyxtQ0FBbUM7QUFFcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUUsa0NBQWtDLEVBQUMsQ0FBQyxDQUFBO0FBQ3JFLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFBO0FBRXBDLDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsT0FBTyxPQUFPLDZCQUE2QjtJQUNoRCxtQkFBbUI7SUFDbkI7UUFDRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFBO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUE7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7UUFDdEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQTtJQUNyQyxDQUFDO0lBRUQsZUFBZTtJQUNmLE9BQU8sQ0FBRSxnQkFBZ0I7UUFDdkIsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFBO1FBRTNELE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFDLGdCQUFnQixFQUFDLENBQUMsQ0FBQyxDQUFBO1FBRWpFLElBQUksQ0FBQyxZQUFZLEdB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LFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNqQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUE7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7UUFDOUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQTtJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgQ29tbWFuZHNQb29sIGZyb20gXCIuL2NvbW1hbmRzLXBvb2wuanNcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IERlc2VyaWFsaXplciBmcm9tIFwiLi9kZXNlcmlhbGl6ZXIuanNcIlxuaW1wb3J0IGdldENoYW5uZWxzQ29uc3VtZXIgZnJvbSBcIi4vY2hhbm5lbHMtY29uc3VtZXIuanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXIuanNcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKHtuYW1lOiBcIkFwaU1ha2VyIC8gQ2FibGVTdWJzY3JpcHRpb25Qb29sXCJ9KVxuY29uc3QgQVVUSF9SRUZSRVNIX1RJTUVPVVRfTVMgPSA1MDAwXG5cbi8qKiBTdWJzY3JpcHRpb24gcG9vbCBmb3Igc2hhcmluZyBjaGFubmVsIHN1YnNjcmlwdGlvbnMuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlckNhYmxlU3Vic2NyaXB0aW9uUG9vbCB7XG4gIC8qKiBDb25zdHJ1Y3Rvci4gKi9cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuYWN0aXZlU3Vic2NyaXB0aW9ucyA9IDBcbiAgICB0aGlzLmF1dGhSZWZyZXNoQ2FsbGJhY2tzID0ge31cbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlXG4gICAgdGhpcy5za2lwRGlzY29ubmVjdEhhbmRsaW5nID0gZmFsc2VcbiAgfVxuXG4gIC8qKiBjb25uZWN0LiAqL1xuICBjb25uZWN0IChzdWJzY3JpcHRpb25EYXRhKSB7XG4gICAgY29uc3QgZ2xvYmFsRGF0YSA9IENvbW1hbmRzUG9vbC5jdXJyZW50KCkuZ2xvYmFsUmVxdWVzdERhdGFcblxuICAgIGxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJDcmVhdGluZyBzdWJzY3JpcHRpb25cIiwge3N1YnNjcmlwdGlvbkRhdGF9XSlcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gZ2V0Q2hhbm5lbHNDb25zdW1lcigpLnN1YnNjcmlwdGlvbnMuY3JlYXRlKFxuICAgICAge1xuICAgICAgICBjaGFubmVsOiBcIkFwaU1ha2VyOjpTdWJzY3JpcHRpb25zQ2hhbm5lbFwiLFxuICAgICAgICBnbG9iYWw6IGdsb2JhbERhdGEsXG4gICAgICAgIHN1YnNjcmlwdGlvbl9kYXRhOiBzdWJzY3JpcHRpb25EYXRhXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb25uZWN0ZWQ6IHRoaXMub25Db25uZWN0ZWQsXG4gICAgICAgIGRpc2Nvbm5lY3RlZDogdGhpcy5vbkRpc2Nvbm5lY3RlZCxcbiAgICAgICAgcmVjZWl2ZWQ6IHRoaXMub25SZWNlaXZlZCxcbiAgICAgICAgcmVqZWN0ZWQ6IHRoaXMub25SZWplY3RlZCxcbiAgICAgICAgc3Vic2NyaWJlZDogdGhpcy5vblN1YnNjcmliZWRcbiAgICAgIH1cbiAgICApXG4gICAgdGhpcy5jb25uZWN0ZWQgPSB0cnVlXG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIGF1dGggZm9yIHRoZSBleGlzdGluZyBzdWJzY3JpcHRpb24gd2l0aG91dCByZWNyZWF0aW5nIHRoZSBwb29sLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICByZWZyZXNoQXV0aGVudGljYXRpb24gKGFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuY29ubmVjdGVkIHx8ICF0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXV0aFJlZnJlc2hDYWxsYmFja3MucHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXV0aFJlZnJlc2hDYWxsYmFja3MucHJvbWlzZVxuICAgIH1cblxuICAgIHRoaXMuYXV0aFJlZnJlc2hDYWxsYmFja3MucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuYXV0aFJlZnJlc2hDYWxsYmFja3MucmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIHRoaXMuYXV0aFJlZnJlc2hDYWxsYmFja3MucmVqZWN0ID0gcmVqZWN0XG4gICAgICB0aGlzLmF1dGhSZWZyZXNoQ2FsbGJhY2tzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlamVjdEF1dGhSZWZyZXNoKG5ldyBFcnJvcihcIlN1YnNjcmlwdGlvbiBhdXRoIHJlZnJlc2ggdGltZWQgb3V0XCIpKVxuICAgICAgfSwgQVVUSF9SRUZSRVNIX1RJTUVPVVRfTVMpXG4gICAgfSlcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLnBlcmZvcm0oXCJyZWZyZXNoX2F1dGhcIiwgYXJncylcblxuICAgIHJldHVybiB0aGlzLmF1dGhSZWZyZXNoQ2FsbGJhY2tzLnByb21pc2VcbiAgfVxuXG4gIC8qKiBmb3JFYWNoU3Vic2NyaXB0aW9uLiAqL1xuICBmb3JFYWNoU3Vic2NyaXB0aW9uIChjYWxsYmFjaykge1xuICAgIGNvbnN0IG1vZGVsSWRNb2RlcyA9IFtcImRlc3Ryb3lzXCIsIFwidXBkYXRlc1wiXVxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBkaWdnKHRoaXMsIFwic3Vic2NyaXB0aW9uc1wiKVxuXG4gICAgZm9yIChjb25zdCBtb2RlbE5hbWUgaW4gc3Vic2NyaXB0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBtb2RlbElkTW9kZSBvZiBtb2RlbElkTW9kZXMpIHtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXVttb2RlbElkTW9kZV0pIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1vZGVsSWQgaW4gc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdW21vZGVsSWRNb2RlXSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1kZXB0aFxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdW21vZGVsSWRNb2RlXVttb2RlbElkXSkge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7bW9kZTogbW9kZWxJZE1vZGUsIG1vZGVsSWQsIG1vZGVsTmFtZSwgc3Vic2NyaXB0aW9ufSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5jcmVhdGVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5jcmVhdGVzKSB7XG4gICAgICAgICAgY2FsbGJhY2soe21vZGU6IFwiY3JlYXRlc1wiLCBtb2RlbE5hbWUsIHN1YnNjcmlwdGlvbn0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5tb2RlbF9jbGFzc19ldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLm1vZGVsX2NsYXNzX2V2ZW50cykge1xuICAgICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5tb2RlbF9jbGFzc19ldmVudHNbZXZlbnROYW1lXSkge1xuICAgICAgICAgICAgY2FsbGJhY2soe2V2ZW50TmFtZSwgbW9kZTogXCJtb2RlbF9jbGFzc19ldmVudHNcIiwgbW9kZWxOYW1lLCBzdWJzY3JpcHRpb259KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLmV2ZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsSWQgaW4gc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLmV2ZW50cykge1xuICAgICAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIGluIHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5ldmVudHNbbW9kZWxJZF0pIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtZGVwdGhcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5ldmVudHNbbW9kZWxJZF1bZXZlbnROYW1lXSkge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7ZXZlbnROYW1lLCBtb2RlOiBcInVwZGF0ZXNcIiwgbW9kZWxJZCwgbW9kZWxOYW1lLCBzdWJzY3JpcHRpb259KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBpc0Nvbm5lY3RlZC4gKi9cbiAgaXNDb25uZWN0ZWQgPSAoKSA9PiBkaWdnKHRoaXMsIFwiY29ubmVjdGVkXCIpXG5cbiAgLyoqIG9uQ29ubmVjdGVkLiAqL1xuICBvbkNvbm5lY3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWVcblxuICAgIHRoaXMuZm9yRWFjaFN1YnNjcmlwdGlvbigoe3N1YnNjcmlwdGlvbn0pID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi5ldmVudHMuZW1pdChcImNvbm5lY3RlZFwiKVxuICAgIH0pXG4gIH1cblxuICAvKiogb25EaXNjb25uZWN0ZWQuICovXG4gIG9uRGlzY29ubmVjdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2VcblxuICAgIGlmICh0aGlzLnNraXBEaXNjb25uZWN0SGFuZGxpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMucmVqZWN0QXV0aFJlZnJlc2gobmV3IEVycm9yKFwiU3Vic2NyaXB0aW9uIGF1dGggcmVmcmVzaCB3YXMgaW50ZXJydXB0ZWQgYnkgYSBkaXNjb25uZWN0XCIpKVxuICB9XG5cbiAgLyoqIG9uUmVjZWl2ZWQuICovXG4gIG9uUmVjZWl2ZWQgPSAocmF3RGF0YSkgPT4ge1xuICAgIGlmIChyYXdEYXRhLnR5cGUgPT0gXCJhcGlfbWFrZXJfc3Vic2NyaXB0aW9uX2F1dGhfcmVmcmVzaGVkXCIpIHtcbiAgICAgIHRoaXMucmVzb2x2ZUF1dGhSZWZyZXNoKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChyYXdEYXRhLnR5cGUgPT0gXCJhcGlfbWFrZXJfc3Vic2NyaXB0aW9uX2F1dGhfcmVmcmVzaF9lcnJvclwiKSB7XG4gICAgICB0aGlzLnJlamVjdEF1dGhSZWZyZXNoKG5ldyBFcnJvcihyYXdEYXRhLmVycm9yPy5tZXNzYWdlIHx8IFwiU3Vic2NyaXB0aW9uIGF1dGggcmVmcmVzaCBmYWlsZWRcIikpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gRGVzZXJpYWxpemVyLnBhcnNlKHJhd0RhdGEpXG4gICAgY29uc3Qge2E6IGFyZ3MsIGU6IGV2ZW50TmFtZSwgbTogbW9kZWwsIG1pOiBtb2RlbElkLCBtdDogbW9kZWxUeXBlLCB0OiB0eXBlfSA9IGRhdGFcbiAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gZGlnZyh0aGlzLCBcInN1YnNjcmlwdGlvbnNcIilcblxuICAgIGxldCBtb2RlbE5hbWVcblxuICAgIC8vIFRoaXMgaXMgbW9yZSBlZmZlY3RpdmUgaWYgaXQgaXMgYW4gb3B0aW9uXG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICBtb2RlbE5hbWUgPSBkaWdnKG1vZGVsLm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlbE5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGluZmxlY3Rpb24uc2luZ3VsYXJpemUobW9kZWxUeXBlKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PSBcInVcIikge1xuICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLnVwZGF0ZXNbbW9kZWxJZF0pIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmV2ZW50cy5lbWl0KFwicmVjZWl2ZWRcIiwge21vZGVsfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJjXCIpIHtcbiAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5jcmVhdGVzKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5ldmVudHMuZW1pdChcInJlY2VpdmVkXCIsIHttb2RlbH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiZFwiKSB7XG4gICAgICBjb25zdCBkZXN0cm95U3Vic2NyaXB0aW9ucyA9IGRpZ2coc3Vic2NyaXB0aW9ucywgbW9kZWxOYW1lLCBcImRlc3Ryb3lzXCIsIG1vZGVsSWQpXG5cbiAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIGRlc3Ryb3lTdWJzY3JpcHRpb25zKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5ldmVudHMuZW1pdChcInJlY2VpdmVkXCIsIHttb2RlbH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiZVwiKSB7XG4gICAgICBjb25zdCBldmVudFN1YnNjcmlwdGlvbnMgPSBkaWdnKHN1YnNjcmlwdGlvbnMsIG1vZGVsTmFtZSwgXCJldmVudHNcIiwgZXZlbnROYW1lLCBtb2RlbElkKVxuXG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBldmVudFN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmV2ZW50cy5lbWl0KFwicmVjZWl2ZWRcIiwge2FyZ3MsIGV2ZW50TmFtZSwgbW9kZWx9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIm1jZVwiKSB7XG4gICAgICBjb25zdCBtb2RlbENsYXNzRXZlbnRTdWJzY3JpcHRpb25zID0gZGlnZyhzdWJzY3JpcHRpb25zLCBtb2RlbE5hbWUsIFwibW9kZWxfY2xhc3NfZXZlbnRzXCIsIGV2ZW50TmFtZSlcblxuICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgbW9kZWxDbGFzc0V2ZW50U3Vic2NyaXB0aW9ucykge1xuICAgICAgICBzdWJzY3JpcHRpb24uZXZlbnRzLmVtaXQoXCJyZWNlaXZlZFwiLCB7YXJncywgZXZlbnROYW1lfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGU6ICR7ZGF0YS50eXBlfWApXG4gICAgfVxuICB9XG5cbiAgLyoqIG9uU3Vic2NyaWJlZC4gKi9cbiAgb25TdWJzY3JpYmVkID0gKCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcIm9uU3Vic2NyaWJlZFwiKVxuICB9XG5cbiAgLyoqIG9uUmVqZWN0ZWQuICovXG4gIG9uUmVqZWN0ZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZVxuXG4gICAgaWYgKHRoaXMuc2tpcERpc2Nvbm5lY3RIYW5kbGluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZWplY3RBdXRoUmVmcmVzaChuZXcgRXJyb3IoXCJTdWJzY3JpcHRpb24gYXV0aCByZWZyZXNoIHdhcyByZWplY3RlZFwiKSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgY2xlYXJBdXRoUmVmcmVzaENhbGxiYWNrcyAoKSB7XG4gICAgaWYgKHRoaXMuYXV0aFJlZnJlc2hDYWxsYmFja3MudGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5hdXRoUmVmcmVzaENhbGxiYWNrcy50aW1lb3V0SWQpXG4gICAgfVxuXG4gICAgdGhpcy5hdXRoUmVmcmVzaENhbGxiYWNrcyA9IHt9XG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHJlc29sdmVBdXRoUmVmcmVzaCAoKSB7XG4gICAgdGhpcy5hdXRoUmVmcmVzaENhbGxiYWNrcy5yZXNvbHZlPy4oKVxuICAgIHRoaXMuY2xlYXJBdXRoUmVmcmVzaENhbGxiYWNrcygpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3JcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWplY3RBdXRoUmVmcmVzaCAoZXJyb3IpIHtcbiAgICB0aGlzLmF1dGhSZWZyZXNoQ2FsbGJhY2tzLnJlamVjdD8uKGVycm9yKVxuICAgIHRoaXMuY2xlYXJBdXRoUmVmcmVzaENhbGxiYWNrcygpXG4gIH1cblxuICAvKiogb25VbnN1YnNjcmliZS4gKi9cbiAgb25VbnN1YnNjcmliZSAoKSB7XG4gICAgaWYgKHRoaXMuc2tpcERpc2Nvbm5lY3RIYW5kbGluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKCgpID0+IGBhY3RpdmVTdWJzY3JpcHRpb25zIGJlZm9yZSB1bnN1YjogJHt0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnN9YClcbiAgICB0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMgLT0gMVxuICAgIGxvZ2dlci5kZWJ1ZygoKSA9PiBgYWN0aXZlU3Vic2NyaXB0aW9ucyBhZnRlciB1bnN1YjogJHt0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnN9YClcblxuICAgIGlmICh0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMgPD0gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiVW5zdWJzY3JpYmUgZnJvbSBBY3Rpb25DYWJsZSBzdWJzY3JpcHRpb25cIilcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvKiogcmVnaXN0ZXJTdWJzY3JpcHRpb25zLiAqL1xuICByZWdpc3RlclN1YnNjcmlwdGlvbnMgKHN1YnNjcmlwdGlvbnMpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBzdWJzY3JpcHRpb25zXG5cbiAgICBsb2dnZXIuZGVidWcoKCkgPT4gW1wicmVnaXN0ZXJTdWJzY3JpcHRpb25zXCIsIHtzdWJzY3JpcHRpb25zfV0pXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBpbiBzdWJzY3JpcHRpb25zKSB7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLmNyZWF0ZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLmNyZWF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbm5lY3RVbnN1YnNjcmlwdGlvbkZvclN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5ldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLmV2ZW50cykge1xuICAgICAgICAgIGZvciAoY29uc3QgbW9kZWxJZCBpbiBzdWJzY3JpcHRpb25zW21vZGVsTmFtZV0uZXZlbnRzW2V2ZW50TmFtZV0pIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtZGVwdGhcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5ldmVudHNbZXZlbnROYW1lXVttb2RlbElkXSkge1xuICAgICAgICAgICAgICB0aGlzLmNvbm5lY3RVbnN1YnNjcmlwdGlvbkZvclN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJzY3JpcHRpb25zW21vZGVsTmFtZV0udXBkYXRlcykge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsSWQgaW4gc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLnVwZGF0ZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBzdWJzY3JpcHRpb25zW21vZGVsTmFtZV0udXBkYXRlc1ttb2RlbElkXSkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0VW5zdWJzY3JpcHRpb25Gb3JTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBjb25uZWN0VW5zdWJzY3JpcHRpb25Gb3JTdWJzY3JpcHRpb24uICovXG4gIGNvbm5lY3RVbnN1YnNjcmlwdGlvbkZvclN1YnNjcmlwdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCgpID0+IFtcIkNvbm5lY3RpbmcgdG8gdW5zdWJzY3JpYmUgb24gc3Vic2NyaXB0aW9uXCIsIHtzdWJzY3JpcHRpb259XSlcblxuICAgIHRoaXMuYWN0aXZlU3Vic2NyaXB0aW9ucyArPSAxXG5cbiAgICBzdWJzY3JpcHRpb24uZXZlbnRzLmFkZExpc3RlbmVyKFwidW5zdWJzY3JpYmVkXCIsICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkNhbGwgb25VbnN1YnNjcmliZSBvbiBzZWxmXCIpXG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHRoaXMub25VbnN1YnNjcmliZShzdWJzY3JpcHRpb24pXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgcmVzZXQgKCkge1xuICAgIHRoaXMuc2tpcERpc2Nvbm5lY3RIYW5kbGluZyA9IHRydWVcbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlXG4gICAgdGhpcy5yZWplY3RBdXRoUmVmcmVzaChuZXcgRXJyb3IoXCJTdWJzY3JpcHRpb24gcG9vbCB3YXMgcmVzZXRcIikpXG5cbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB1bmRlZmluZWRcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB1bmRlZmluZWRcbiAgICB0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMgPSAwXG4gIH1cbn1cbiJdfQ==
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FibGUtc3Vic2NyaXB0aW9uLXBvb2wuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNhYmxlLXN1YnNjcmlwdGlvbi1wb29sLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFDWixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFBLENBQUMsbUNBQW1DO0FBQ2pGLE9BQU8sWUFBWSxNQUFNLG1CQUFtQixDQUFBO0FBQzVDLE9BQU8sbUJBQW1CLE1BQU0sd0JBQXdCLENBQUE7QUFDeEQsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFBLENBQUMsbUNBQW1DO0FBRXBFLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUMsSUFBSSxFQUFFLGtDQUFrQyxFQUFDLENBQUMsQ0FBQTtBQUNyRSxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQTtBQUVwQyw2REFBNkQ7QUFDN0QsNkVBQTZFO0FBQzdFLHlFQUF5RTtBQUN6RSxzRkFBc0Y7QUFDdEYsNEVBQTRFO0FBQzVFLDBHQUEwRztBQUMxRyx5REFBeUQ7QUFDekQsbUhBQW1IO0FBQ25ILHNHQUFzRztBQUN0Rzs7Ozs7OztHQU9HO0FBRUgsMkRBQTJEO0FBQzNELE1BQU0sQ0FBQyxPQUFPLE9BQU8sNkJBQTZCO0lBQ2hELDRFQUE0RTtJQUM1RTtRQUNFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUE7UUFDNUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQTtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN0QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFBO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFFLGdCQUFnQjtRQUN2QixNQUFNLFVBQVUsR0FBRyxZQUFZ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bUJBQW1CO1lBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDbEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLEtBQUs7UUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUE7UUFFaEUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDakMsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFBO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFBO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUE7SUFDOUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgQ29tbWFuZHNQb29sIGZyb20gXCIuL2NvbW1hbmRzLXBvb2wuanNcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IERlc2VyaWFsaXplciBmcm9tIFwiLi9kZXNlcmlhbGl6ZXIuanNcIlxuaW1wb3J0IGdldENoYW5uZWxzQ29uc3VtZXIgZnJvbSBcIi4vY2hhbm5lbHMtY29uc3VtZXIuanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXIuanNcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKHtuYW1lOiBcIkFwaU1ha2VyIC8gQ2FibGVTdWJzY3JpcHRpb25Qb29sXCJ9KVxuY29uc3QgQVVUSF9SRUZSRVNIX1RJTUVPVVRfTVMgPSA1MDAwXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9iYXNlLW1vZGVsLmpzXCIpLmRlZmF1bHR9IEJhc2VNb2RlbCAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL2NhYmxlLXN1YnNjcmlwdGlvbi5qc1wiKS5kZWZhdWx0fSBDYWJsZVN1YnNjcmlwdGlvbiAqL1xuLyoqIEB0eXBlZGVmIHtzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbH0gRXZlbnRBcmd1bWVudFByaW1pdGl2ZSAqL1xuLyoqIEB0eXBlZGVmIHtFdmVudEFyZ3VtZW50UHJpbWl0aXZlIHwgRXZlbnRBcmd1bWVudFByaW1pdGl2ZVtdfSBFdmVudEFyZ3VtZW50VmFsdWUgKi9cbi8qKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgRXZlbnRBcmd1bWVudFZhbHVlPn0gU3Vic2NyaXB0aW9uUmVmcmVzaEFyZ3MgKi9cbi8qKiBAdHlwZWRlZiB7e2NoYW5uZWw6IHN0cmluZywgZ2xvYmFsOiBvYmplY3QsIHN1YnNjcmlwdGlvbl9kYXRhOiBvYmplY3R9fSBDYWJsZVN1YnNjcmlwdGlvbkNyZWF0ZUFyZ3MgKi9cbi8qKiBAdHlwZWRlZiB7e21vZGVsOiBCYXNlTW9kZWx9fSBNb2RlbE11dGF0aW9uUGF5bG9hZCAqL1xuLyoqIEB0eXBlZGVmIHt7YXJnczogUmVjb3JkPHN0cmluZywgRXZlbnRBcmd1bWVudFZhbHVlPiwgZXZlbnROYW1lOiBzdHJpbmcsIG1vZGVsOiBCYXNlTW9kZWx9fSBNb2RlbEV2ZW50UGF5bG9hZCAqL1xuLyoqIEB0eXBlZGVmIHt7YXJnczogUmVjb3JkPHN0cmluZywgRXZlbnRBcmd1bWVudFZhbHVlPiwgZXZlbnROYW1lOiBzdHJpbmd9fSBNb2RlbENsYXNzRXZlbnRQYXlsb2FkICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN1YnNjcmlwdGlvbkl0ZXJhdGlvbkFyZ3NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXZlbnROYW1lXVxuICogQHByb3BlcnR5IHtcImNyZWF0ZXNcInxcImRlc3Ryb3lzXCJ8XCJ1cGRhdGVzXCJ8XCJtb2RlbF9jbGFzc19ldmVudHNcIn0gbW9kZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttb2RlbElkXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1vZGVsTmFtZVxuICogQHByb3BlcnR5IHtDYWJsZVN1YnNjcmlwdGlvbn0gc3Vic2NyaXB0aW9uXG4gKi9cblxuLyoqIFN1YnNjcmlwdGlvbiBwb29sIGZvciBzaGFyaW5nIGNoYW5uZWwgc3Vic2NyaXB0aW9ucy4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyQ2FibGVTdWJzY3JpcHRpb25Qb29sIHtcbiAgLyoqIEluaXRpYWxpemVzIGJvb2trZWVwaW5nIGZvciBvbmUgc2hhcmVkIEFjdGlvbkNhYmxlIHN1YnNjcmlwdGlvbiBwb29sLiAqL1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5hY3RpdmVTdWJzY3JpcHRpb25zID0gMFxuICAgIHRoaXMuYXV0aFJlZnJlc2hDYWxsYmFja3MgPSB7fVxuICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2VcbiAgICB0aGlzLnNraXBEaXNjb25uZWN0SGFuZGxpbmcgPSBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBzaGFyZWQgQWN0aW9uQ2FibGUgc3Vic2NyaXB0aW9uIGZvciB0aGUgZ2l2ZW4gc3Vic2NyaXB0aW9uIHRyZWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJzY3JpcHRpb25EYXRhXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY29ubmVjdCAoc3Vic2NyaXB0aW9uRGF0YSkge1xuICAgIGNvbnN0IGdsb2JhbERhdGEgPSBDb21tYW5kc1Bvb2wuY3VycmVudCgpLmdsb2JhbFJlcXVlc3REYXRhXG5cbiAgICBsb2dnZXIuZGVidWcoKCkgPT4gW1wiQ3JlYXRpbmcgc3Vic2NyaXB0aW9uXCIsIHtzdWJzY3JpcHRpb25EYXRhfV0pXG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IGdldENoYW5uZWxzQ29uc3VtZXIoKS5zdWJzY3JpcHRpb25zLmNyZWF0ZShcbiAgICAgIC8qKiBAdHlwZSB7Q2FibGVTdWJzY3JpcHRpb25DcmVhdGVBcmdzfSAqLyAoe1xuICAgICAgICBjaGFubmVsOiBcIkFwaU1ha2VyOjpTdWJzY3JpcHRpb25zQ2hhbm5lbFwiLFxuICAgICAgICBnbG9iYWw6IGdsb2JhbERhdGEsXG4gICAgICAgIHN1YnNjcmlwdGlvbl9kYXRhOiBzdWJzY3JpcHRpb25EYXRhXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgY29ubmVjdGVkOiB0aGlzLm9uQ29ubmVjdGVkLFxuICAgICAgICBkaXNjb25uZWN0ZWQ6IHRoaXMub25EaXNjb25uZWN0ZWQsXG4gICAgICAgIHJlY2VpdmVkOiB0aGlzLm9uUmVjZWl2ZWQsXG4gICAgICAgIHJlamVjdGVkOiB0aGlzLm9uUmVqZWN0ZWQsXG4gICAgICAgIHN1YnNjcmliZWQ6IHRoaXMub25TdWJzY3JpYmVkXG4gICAgICB9XG4gICAgKVxuICAgIHRoaXMuY29ubmVjdGVkID0gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBhdXRoIGZvciB0aGUgZXhpc3Rpbmcgc3Vic2NyaXB0aW9uIHdpdGhvdXQgcmVjcmVhdGluZyB0aGUgcG9vbC5cbiAgICpcbiAgICogQHBhcmFtIHtTdWJzY3JpcHRpb25SZWZyZXNoQXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHJlZnJlc2hBdXRoZW50aWNhdGlvbiAoYXJncykge1xuICAgIGlmICghdGhpcy5jb25uZWN0ZWQgfHwgIXRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hdXRoUmVmcmVzaENhbGxiYWNrcy5wcm9taXNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdXRoUmVmcmVzaENhbGxiYWNrcy5wcm9taXNlXG4gICAgfVxuXG4gICAgdGhpcy5hdXRoUmVmcmVzaENhbGxiYWNrcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5hdXRoUmVmcmVzaENhbGxiYWNrcy5yZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgdGhpcy5hdXRoUmVmcmVzaENhbGxiYWNrcy5yZWplY3QgPSByZWplY3RcbiAgICAgIHRoaXMuYXV0aFJlZnJlc2hDYWxsYmFja3MudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVqZWN0QXV0aFJlZnJlc2gobmV3IEVycm9yKFwiU3Vic2NyaXB0aW9uIGF1dGggcmVmcmVzaCB0aW1lZCBvdXRcIikpXG4gICAgICB9LCBBVVRIX1JFRlJFU0hfVElNRU9VVF9NUylcbiAgICB9KVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24ucGVyZm9ybShcInJlZnJlc2hfYXV0aFwiLCBhcmdzKVxuXG4gICAgcmV0dXJuIHRoaXMuYXV0aFJlZnJlc2hDYWxsYmFja3MucHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgZXZlcnkgdHJhY2tlZCBzdWJzY3JpcHRpb24gd2l0aCBpdHMgc3RyZWFtIG1ldGFkYXRhLlxuICAgKiBAcGFyYW0geyhhcmdzOiBTdWJzY3JpcHRpb25JdGVyYXRpb25BcmdzKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgKi9cbiAgZm9yRWFjaFN1YnNjcmlwdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjb25zdCBtb2RlbElkTW9kZXMgPSAvKiogQHR5cGUge0FycmF5PFwiZGVzdHJveXNcInxcInVwZGF0ZXNcIj59ICovIChbXCJkZXN0cm95c1wiLCBcInVwZGF0ZXNcIl0pXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IGRpZ2codGhpcywgXCJzdWJzY3JpcHRpb25zXCIpXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBpbiBzdWJzY3JpcHRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IG1vZGVsSWRNb2RlIG9mIG1vZGVsSWRNb2Rlcykge1xuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdW21vZGVsSWRNb2RlXSkge1xuICAgICAgICAgIGZvciAoY29uc3QgbW9kZWxJZCBpbiBzdWJzY3JpcHRpb25zW21vZGVsTmFtZV1bbW9kZWxJZE1vZGVdKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWRlcHRoXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBzdWJzY3JpcHRpb25zW21vZGVsTmFtZV1bbW9kZWxJZE1vZGVdW21vZGVsSWRdKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHttb2RlOiBtb2RlbElkTW9kZSwgbW9kZWxJZCwgbW9kZWxOYW1lLCBzdWJzY3JpcHRpb259KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLmNyZWF0ZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLmNyZWF0ZXMpIHtcbiAgICAgICAgICBjYWxsYmFjayh7bW9kZTogXCJjcmVhdGVzXCIsIG1vZGVsTmFtZSwgc3Vic2NyaXB0aW9ufSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLm1vZGVsX2NsYXNzX2V2ZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50TmFtZSBpbiBzdWJzY3JpcHRpb25zW21vZGVsTmFtZV0ubW9kZWxfY2xhc3NfZXZlbnRzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLm1vZGVsX2NsYXNzX2V2ZW50c1tldmVudE5hbWVdKSB7XG4gICAgICAgICAgICBjYWxsYmFjayh7ZXZlbnROYW1lLCBtb2RlOiBcIm1vZGVsX2NsYXNzX2V2ZW50c1wiLCBtb2RlbE5hbWUsIHN1YnNjcmlwdGlvbn0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJzY3JpcHRpb25zW21vZGVsTmFtZV0uZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgbW9kZWxJZCBpbiBzdWJzY3JpcHRpb25zW21vZGVsTmFtZV0uZXZlbnRzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLmV2ZW50c1ttb2RlbElkXSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1kZXB0aFxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLmV2ZW50c1ttb2RlbElkXVtldmVudE5hbWVdKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHtldmVudE5hbWUsIG1vZGU6IFwidXBkYXRlc1wiLCBtb2RlbElkLCBtb2RlbE5hbWUsIHN1YnNjcmlwdGlvbn0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSAqL1xuICBpc0Nvbm5lY3RlZCA9ICgpID0+IGRpZ2codGhpcywgXCJjb25uZWN0ZWRcIilcblxuICAvKiogTWFya3MgdGhlIHBvb2wgY29ubmVjdGVkIGFuZCBub3RpZmllcyBlYWNoIHN1YnNjcmliZXIgb25jZSB0aGUgc3RyZWFtIGlzIHJlYWR5LiAqL1xuICBvbkNvbm5lY3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWVcblxuICAgIHRoaXMuZm9yRWFjaFN1YnNjcmlwdGlvbigoe3N1YnNjcmlwdGlvbn0pID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi5ldmVudHMuZW1pdChcImNvbm5lY3RlZFwiKVxuICAgIH0pXG4gIH1cblxuICAvKiogTWFya3MgdGhlIHBvb2wgZGlzY29ubmVjdGVkIGFuZCBmYWlscyBwZW5kaW5nIGF1dGggcmVmcmVzaGVzIHVubGVzcyB0ZWFyZG93biBpcyBpbnRlbnRpb25hbC4gKi9cbiAgb25EaXNjb25uZWN0ZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZVxuXG4gICAgaWYgKHRoaXMuc2tpcERpc2Nvbm5lY3RIYW5kbGluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZWplY3RBdXRoUmVmcmVzaChuZXcgRXJyb3IoXCJTdWJzY3JpcHRpb24gYXV0aCByZWZyZXNoIHdhcyBpbnRlcnJ1cHRlZCBieSBhIGRpc2Nvbm5lY3RcIikpXG4gIH1cblxuICAvKipcbiAgICogUm91dGVzIG9uZSBBY3Rpb25DYWJsZSBwYXlsb2FkIHRvIHRoZSBtYXRjaGluZyBsb2dpY2FsIHN1YnNjcmlwdGlvbnMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByYXdEYXRhXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25SZWNlaXZlZCA9IChyYXdEYXRhKSA9PiB7XG4gICAgaWYgKHJhd0RhdGEudHlwZSA9PSBcImFwaV9tYWtlcl9zdWJzY3JpcHRpb25fYXV0aF9yZWZyZXNoZWRcIikge1xuICAgICAgdGhpcy5yZXNvbHZlQXV0aFJlZnJlc2goKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHJhd0RhdGEudHlwZSA9PSBcImFwaV9tYWtlcl9zdWJzY3JpcHRpb25fYXV0aF9yZWZyZXNoX2Vycm9yXCIpIHtcbiAgICAgIHRoaXMucmVqZWN0QXV0aFJlZnJlc2gobmV3IEVycm9yKHJhd0RhdGEuZXJyb3I/Lm1lc3NhZ2UgfHwgXCJTdWJzY3JpcHRpb24gYXV0aCByZWZyZXNoIGZhaWxlZFwiKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBEZXNlcmlhbGl6ZXIucGFyc2UocmF3RGF0YSlcbiAgICBjb25zdCB7YTogYXJncywgZTogZXZlbnROYW1lLCBtOiBtb2RlbCwgbWk6IG1vZGVsSWQsIG10OiBtb2RlbFR5cGUsIHQ6IHR5cGV9ID0gZGF0YVxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBkaWdnKHRoaXMsIFwic3Vic2NyaXB0aW9uc1wiKVxuXG4gICAgbGV0IG1vZGVsTmFtZVxuXG4gICAgLy8gVGhpcyBpcyBtb3JlIGVmZmVjdGl2ZSBpZiBpdCBpcyBhbiBvcHRpb25cbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIG1vZGVsTmFtZSA9IGRpZ2cobW9kZWwubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGVsTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShtb2RlbFR5cGUpKVxuICAgIH1cblxuICAgIGlmICh0eXBlID09IFwidVwiKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBzdWJzY3JpcHRpb25zW21vZGVsTmFtZV0udXBkYXRlc1ttb2RlbElkXSkge1xuICAgICAgICBzdWJzY3JpcHRpb24uZXZlbnRzLmVtaXQoXCJyZWNlaXZlZFwiLCAvKiogQHR5cGUge01vZGVsTXV0YXRpb25QYXlsb2FkfSAqLyAoe21vZGVsfSkpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiY1wiKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBzdWJzY3JpcHRpb25zW21vZGVsTmFtZV0uY3JlYXRlcykge1xuICAgICAgICBzdWJzY3JpcHRpb24uZXZlbnRzLmVtaXQoXCJyZWNlaXZlZFwiLCAvKiogQHR5cGUge01vZGVsTXV0YXRpb25QYXlsb2FkfSAqLyAoe21vZGVsfSkpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiZFwiKSB7XG4gICAgICBjb25zdCBkZXN0cm95U3Vic2NyaXB0aW9ucyA9IGRpZ2coc3Vic2NyaXB0aW9ucywgbW9kZWxOYW1lLCBcImRlc3Ryb3lzXCIsIG1vZGVsSWQpXG5cbiAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIGRlc3Ryb3lTdWJzY3JpcHRpb25zKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5ldmVudHMuZW1pdChcInJlY2VpdmVkXCIsIC8qKiBAdHlwZSB7TW9kZWxNdXRhdGlvblBheWxvYWR9ICovICh7bW9kZWx9KSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJlXCIpIHtcbiAgICAgIGNvbnN0IGV2ZW50U3Vic2NyaXB0aW9ucyA9IGRpZ2coc3Vic2NyaXB0aW9ucywgbW9kZWxOYW1lLCBcImV2ZW50c1wiLCBldmVudE5hbWUsIG1vZGVsSWQpXG5cbiAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIGV2ZW50U3Vic2NyaXB0aW9ucykge1xuICAgICAgICBzdWJzY3JpcHRpb24uZXZlbnRzLmVtaXQoXCJyZWNlaXZlZFwiLCAvKiogQHR5cGUge01vZGVsRXZlbnRQYXlsb2FkfSAqLyAoe2FyZ3MsIGV2ZW50TmFtZSwgbW9kZWx9KSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJtY2VcIikge1xuICAgICAgY29uc3QgbW9kZWxDbGFzc0V2ZW50U3Vic2NyaXB0aW9ucyA9IGRpZ2coc3Vic2NyaXB0aW9ucywgbW9kZWxOYW1lLCBcIm1vZGVsX2NsYXNzX2V2ZW50c1wiLCBldmVudE5hbWUpXG5cbiAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIG1vZGVsQ2xhc3NFdmVudFN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmV2ZW50cy5lbWl0KFwicmVjZWl2ZWRcIiwgLyoqIEB0eXBlIHtNb2RlbENsYXNzRXZlbnRQYXlsb2FkfSAqLyAoe2FyZ3MsIGV2ZW50TmFtZX0pKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZTogJHtkYXRhLnR5cGV9YClcbiAgICB9XG4gIH1cblxuICAvKiogTG9ncyB3aGVuIEFjdGlvbkNhYmxlIGNvbmZpcm1zIHRoZSBzaGFyZWQgc3Vic2NyaXB0aW9uLiAqL1xuICBvblN1YnNjcmliZWQgPSAoKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKFwib25TdWJzY3JpYmVkXCIpXG4gIH1cblxuICAvKiogTWFya3MgdGhlIHBvb2wgZGlzY29ubmVjdGVkIHdoZW4gQWN0aW9uQ2FibGUgcmVqZWN0cyB0aGUgc2hhcmVkIHN1YnNjcmlwdGlvbi4gKi9cbiAgb25SZWplY3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlXG5cbiAgICBpZiAodGhpcy5za2lwRGlzY29ubmVjdEhhbmRsaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlamVjdEF1dGhSZWZyZXNoKG5ldyBFcnJvcihcIlN1YnNjcmlwdGlvbiBhdXRoIHJlZnJlc2ggd2FzIHJlamVjdGVkXCIpKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBjbGVhckF1dGhSZWZyZXNoQ2FsbGJhY2tzICgpIHtcbiAgICBpZiAodGhpcy5hdXRoUmVmcmVzaENhbGxiYWNrcy50aW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmF1dGhSZWZyZXNoQ2FsbGJhY2tzLnRpbWVvdXRJZClcbiAgICB9XG5cbiAgICB0aGlzLmF1dGhSZWZyZXNoQ2FsbGJhY2tzID0ge31cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgcmVzb2x2ZUF1dGhSZWZyZXNoICgpIHtcbiAgICB0aGlzLmF1dGhSZWZyZXNoQ2FsbGJhY2tzLnJlc29sdmU/LigpXG4gICAgdGhpcy5jbGVhckF1dGhSZWZyZXNoQ2FsbGJhY2tzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlamVjdEF1dGhSZWZyZXNoIChlcnJvcikge1xuICAgIHRoaXMuYXV0aFJlZnJlc2hDYWxsYmFja3MucmVqZWN0Py4oZXJyb3IpXG4gICAgdGhpcy5jbGVhckF1dGhSZWZyZXNoQ2FsbGJhY2tzKClcbiAgfVxuXG4gIC8qKiBSZWxlYXNlcyBvbmUgdHJhY2tlZCBsb2dpY2FsIHN1YnNjcmlwdGlvbiBhbmQgdGVhcnMgZG93biB0aGUgc2hhcmVkIHN0cmVhbSB3aGVuIHRoZSBwb29sIGJlY29tZXMgZW1wdHkuICovXG4gIG9uVW5zdWJzY3JpYmUgKCkge1xuICAgIGlmICh0aGlzLnNraXBEaXNjb25uZWN0SGFuZGxpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZygoKSA9PiBgYWN0aXZlU3Vic2NyaXB0aW9ucyBiZWZvcmUgdW5zdWI6ICR7dGhpcy5hY3RpdmVTdWJzY3JpcHRpb25zfWApXG4gICAgdGhpcy5hY3RpdmVTdWJzY3JpcHRpb25zIC09IDFcbiAgICBsb2dnZXIuZGVidWcoKCkgPT4gYGFjdGl2ZVN1YnNjcmlwdGlvbnMgYWZ0ZXIgdW5zdWI6ICR7dGhpcy5hY3RpdmVTdWJzY3JpcHRpb25zfWApXG5cbiAgICBpZiAodGhpcy5hY3RpdmVTdWJzY3JpcHRpb25zIDw9IDApIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIlVuc3Vic2NyaWJlIGZyb20gQWN0aW9uQ2FibGUgc3Vic2NyaXB0aW9uXCIpXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgbG9naWNhbCBzdWJzY3JpcHRpb25zIHNlcnZlZCBieSB0aGlzIHNoYXJlZCBBY3Rpb25DYWJsZSBzdHJlYW0uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJzY3JpcHRpb25zXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVnaXN0ZXJTdWJzY3JpcHRpb25zIChzdWJzY3JpcHRpb25zKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9uc1xuXG4gICAgbG9nZ2VyLmRlYnVnKCgpID0+IFtcInJlZ2lzdGVyU3Vic2NyaXB0aW9uc1wiLCB7c3Vic2NyaXB0aW9uc31dKVxuXG4gICAgZm9yIChjb25zdCBtb2RlbE5hbWUgaW4gc3Vic2NyaXB0aW9ucykge1xuICAgICAgaWYgKHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5jcmVhdGVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5jcmVhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jb25uZWN0VW5zdWJzY3JpcHRpb25Gb3JTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJzY3JpcHRpb25zW21vZGVsTmFtZV0uZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIGluIHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS5ldmVudHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1vZGVsSWQgaW4gc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLmV2ZW50c1tldmVudE5hbWVdKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWRlcHRoXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBzdWJzY3JpcHRpb25zW21vZGVsTmFtZV0uZXZlbnRzW2V2ZW50TmFtZV1bbW9kZWxJZF0pIHtcbiAgICAgICAgICAgICAgdGhpcy5jb25uZWN0VW5zdWJzY3JpcHRpb25Gb3JTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLnVwZGF0ZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBtb2RlbElkIGluIHN1YnNjcmlwdGlvbnNbbW9kZWxOYW1lXS51cGRhdGVzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9uc1ttb2RlbE5hbWVdLnVwZGF0ZXNbbW9kZWxJZF0pIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdFVuc3Vic2NyaXB0aW9uRm9yU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSG9va3MgcG9vbCBib29ra2VlcGluZyB1cCB0byBhIGNoaWxkIHN1YnNjcmlwdGlvbidzIHVuc3Vic2NyaWJlIGV2ZW50LlxuICAgKiBAcGFyYW0ge0NhYmxlU3Vic2NyaXB0aW9ufSBzdWJzY3JpcHRpb25cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb25uZWN0VW5zdWJzY3JpcHRpb25Gb3JTdWJzY3JpcHRpb24gKHN1YnNjcmlwdGlvbikge1xuICAgIGxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJDb25uZWN0aW5nIHRvIHVuc3Vic2NyaWJlIG9uIHN1YnNjcmlwdGlvblwiLCB7c3Vic2NyaXB0aW9ufV0pXG5cbiAgICB0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMgKz0gMVxuXG4gICAgc3Vic2NyaXB0aW9uLmV2ZW50cy5hZGRMaXN0ZW5lcihcInVuc3Vic2NyaWJlZFwiLCAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJDYWxsIG9uVW5zdWJzY3JpYmUgb24gc2VsZlwiKVxuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICB0aGlzLm9uVW5zdWJzY3JpYmUoc3Vic2NyaXB0aW9uKVxuICAgIH0pXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIHJlc2V0ICgpIHtcbiAgICB0aGlzLnNraXBEaXNjb25uZWN0SGFuZGxpbmcgPSB0cnVlXG4gICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmVqZWN0QXV0aFJlZnJlc2gobmV3IEVycm9yKFwiU3Vic2NyaXB0aW9uIHBvb2wgd2FzIHJlc2V0XCIpKVxuXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gdW5kZWZpbmVkXG4gICAgdGhpcy5hY3RpdmVTdWJzY3JpcHRpb25zID0gMFxuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cable-subscription.d.ts","sourceRoot":"/src/","sources":["cable-subscription.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cable-subscription.d.ts","sourceRoot":"/src/","sources":["cable-subscription.js"],"names":[],"mappings":"AAMA,0DAA0D;AAC1D;IAGI,2CAAgC;IAChC,oBAAsB;IAGxB,sBAAsB;IACtB,eADc,IAAI,CAWjB;CACF;6BAzB0B,eAAe"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { EventEmitter } from "eventemitter3";
|
|
2
3
|
import Logger from "./logger.js";
|
|
3
4
|
const logger = new Logger({ name: "ApiMaker / CableSubscription" });
|
|
4
5
|
/** Cable subscription wrapper with unsubscribe events. */
|
|
5
6
|
export default class ApiMakerCableSubscription {
|
|
6
|
-
/**
|
|
7
|
+
/** Creates one logical subscription wrapper around an EventEmitter. */
|
|
7
8
|
constructor() {
|
|
8
9
|
this.events = new EventEmitter();
|
|
9
10
|
this.subscribed = true;
|
|
@@ -19,4 +20,4 @@ export default class ApiMakerCableSubscription {
|
|
|
19
20
|
this.events.emit("unsubscribed");
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FibGUtc3Vic2NyaXB0aW9uLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJjYWJsZS1zdWJzY3JpcHRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUNaLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFBO0FBRWhDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUMsSUFBSSxFQUFFLDhCQUE4QixFQUFDLENBQUMsQ0FBQTtBQUVqRSwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE9BQU8sT0FBTyx5QkFBeUI7SUFDNUMsdUVBQXVFO0lBQ3ZFO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO0lBQ3hCLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1lBQzNDLE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO1FBRW5ELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gXCJldmVudGVtaXR0ZXIzXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4vbG9nZ2VyLmpzXCJcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcih7bmFtZTogXCJBcGlNYWtlciAvIENhYmxlU3Vic2NyaXB0aW9uXCJ9KVxuXG4vKiogQ2FibGUgc3Vic2NyaXB0aW9uIHdyYXBwZXIgd2l0aCB1bnN1YnNjcmliZSBldmVudHMuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlckNhYmxlU3Vic2NyaXB0aW9uIHtcbiAgLyoqIENyZWF0ZXMgb25lIGxvZ2ljYWwgc3Vic2NyaXB0aW9uIHdyYXBwZXIgYXJvdW5kIGFuIEV2ZW50RW1pdHRlci4gKi9cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gICAgdGhpcy5zdWJzY3JpYmVkID0gdHJ1ZVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICB1bnN1YnNjcmliZSAoKSB7XG4gICAgaWYgKCF0aGlzLnN1YnNjcmliZWQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIlVuc3Vic2NyaWJlZCBhbHJlYWR5IGNhbGxlZFwiKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFwiVW5zdWJzY3JpYmUgY2FsbGVkIGZvciBzdWJzY3JpcHRpb25cIilcblxuICAgIHRoaXMuc3Vic2NyaWJlZCA9IGZhbHNlXG4gICAgdGhpcy5ldmVudHMuZW1pdChcInVuc3Vic2NyaWJlZFwiKVxuICB9XG59XG4iXX0=
|