@kaspernj/api-maker 1.0.2159 → 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 +14 -1
- 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 +10 -1
- package/build/bootstrap/attribute-rows.d.ts.map +1 -1
- package/build/bootstrap/attribute-rows.js +14 -5
- package/build/bootstrap/card.d.ts +19 -1
- package/build/bootstrap/card.d.ts.map +1 -1
- package/build/bootstrap/card.js +33 -13
- package/build/bootstrap/checkbox.d.ts +18 -1
- package/build/bootstrap/checkbox.d.ts.map +1 -1
- package/build/bootstrap/checkbox.js +23 -3
- package/build/bootstrap/checkboxes.d.ts +33 -1
- package/build/bootstrap/checkboxes.d.ts.map +1 -1
- package/build/bootstrap/checkboxes.js +50 -17
- 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 +7 -1
- 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 +12 -1
- package/build/bootstrap/sort-link.d.ts.map +1 -1
- package/build/bootstrap/sort-link.js +19 -10
- 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.d.ts +4 -1
- 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 +57 -1
- 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 +56 -1
- package/build/draggable-sort/item.d.ts.map +1 -1
- package/build/draggable-sort/item.js +98 -10
- 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 +24 -1
- 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 +13 -1
- package/build/inputs/attachment.d.ts.map +1 -1
- package/build/inputs/attachment.js +22 -8
- 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 +17 -1
- package/build/inputs/checkbox.d.ts.map +1 -1
- package/build/inputs/checkbox.js +25 -11
- 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 +38 -1
- package/build/inputs/input.d.ts.map +1 -1
- package/build/inputs/input.js +29 -10
- package/build/inputs/money.d.ts +4 -1
- 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 +35 -1
- 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 +32 -1
- 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 +4 -1
- 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 +1 -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 +51 -1
- package/build/router/route.d.ts.map +1 -1
- package/build/router/route.js +48 -12
- package/build/router/switch.d.ts +38 -2
- package/build/router/switch.d.ts.map +1 -1
- package/build/router/switch.js +34 -13
- package/build/router.d.ts +21 -1
- 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 +12 -1
- package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-checkbox.js +22 -8
- package/build/super-admin/edit-page/edit-attribute-content.d.ts +10 -1
- package/build/super-admin/edit-page/edit-attribute-content.d.ts.map +1 -1
- package/build/super-admin/edit-page/edit-attribute-content.js +20 -9
- package/build/super-admin/edit-page/edit-attribute-input.d.ts +10 -1
- 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 +8 -1
- 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 +7 -1
- 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 +6 -1
- 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 +6 -1
- package/build/super-admin/index.d.ts.map +1 -1
- package/build/super-admin/index.js +16 -10
- package/build/super-admin/layout/header/index.d.ts +6 -1
- package/build/super-admin/layout/header/index.d.ts.map +1 -1
- package/build/super-admin/layout/header/index.js +18 -12
- package/build/super-admin/layout/index.d.ts +26 -1
- package/build/super-admin/layout/index.d.ts.map +1 -1
- package/build/super-admin/layout/index.js +41 -7
- package/build/super-admin/layout/menu/index.d.ts +4 -1
- package/build/super-admin/layout/menu/index.d.ts.map +1 -1
- package/build/super-admin/layout/menu/index.js +13 -7
- package/build/super-admin/layout/menu/menu-content.d.ts +4 -1
- 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 +11 -1
- package/build/super-admin/layout/menu/menu-item.d.ts.map +1 -1
- package/build/super-admin/layout/menu/menu-item.js +19 -9
- package/build/super-admin/layout/no-access.d.ts +4 -1
- 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 +6 -1
- 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 +4 -1
- 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 +18 -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 +6 -1
- package/build/super-admin/show-page/index.d.ts.map +1 -1
- package/build/super-admin/show-page/index.js +11 -5
- package/build/super-admin/show-reflection-actions.d.ts +8 -1
- 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 +6 -1
- package/build/super-admin/show-reflection-link.d.ts.map +1 -1
- package/build/super-admin/show-reflection-link.js +12 -5
- package/build/super-admin/show-reflection-page.d.ts +7 -1
- 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 +4 -1
- 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 +4 -1
- 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 +4 -1
- 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 +4 -1
- 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 +4 -1
- 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 +60 -1
- package/build/table/filters/filter-form.d.ts.map +1 -1
- package/build/table/filters/filter-form.js +89 -28
- package/build/table/filters/filter.d.ts +4 -1
- 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 +129 -1
- package/build/table/filters/index.d.ts.map +1 -1
- package/build/table/filters/index.js +26 -9
- package/build/table/filters/load-search-modal.d.ts +132 -1
- package/build/table/filters/load-search-modal.d.ts.map +1 -1
- package/build/table/filters/load-search-modal.js +32 -10
- package/build/table/filters/reflection-element.d.ts +4 -1
- 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 +136 -1
- package/build/table/filters/save-search-modal.d.ts.map +1 -1
- package/build/table/filters/save-search-modal.js +39 -6
- package/build/table/filters/scope-element.d.ts +8 -1
- 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 +9 -1
- 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 +52 -1
- package/build/table/header-column.d.ts.map +1 -1
- package/build/table/header-column.js +39 -10
- package/build/table/header-select.d.ts +20 -1
- package/build/table/header-select.d.ts.map +1 -1
- package/build/table/header-select.js +27 -8
- 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 +138 -1
- 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 +21 -1
- 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 +8 -1
- 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 +7 -1
- 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 +7 -1
- 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 +105 -21
- package/build/table/table.d.ts +273 -1
- package/build/table/table.d.ts.map +1 -1
- package/build/table/table.js +210 -53
- 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 +20 -1
- package/build/table/worker-plugins-check-all-checkbox.d.ts.map +1 -1
- package/build/table/worker-plugins-check-all-checkbox.js +29 -9
- package/build/table/worker-plugins-checkbox.d.ts +7 -1
- package/build/table/worker-plugins-checkbox.d.ts.map +1 -1
- package/build/table/worker-plugins-checkbox.js +14 -8
- 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 +8 -0
- package/build/use-can-can.d.ts.map +1 -1
- package/build/use-can-can.js +39 -13
- package/build/use-collection.d.ts +174 -117
- package/build/use-collection.d.ts.map +1 -1
- package/build/use-collection.js +133 -51
- 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 +165 -243
- package/build/use-model.d.ts.map +1 -1
- package/build/use-model.js +94 -35
- 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 +16 -1
- package/build/utils/button.d.ts.map +1 -1
- package/build/utils/button.js +27 -8
- package/build/utils/card.d.ts +11 -1
- package/build/utils/card.d.ts.map +1 -1
- package/build/utils/card.js +13 -2
- package/build/utils/checkbox.d.ts +14 -1
- package/build/utils/checkbox.d.ts.map +1 -1
- package/build/utils/checkbox.js +22 -9
- package/build/utils/checkboxes.d.ts +27 -1
- package/build/utils/checkboxes.d.ts.map +1 -1
- package/build/utils/checkboxes.js +44 -17
- package/build/utils/default-style.d.ts +11 -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 +9 -7
- package/build/utils/icon.d.ts.map +1 -1
- package/build/utils/icon.js +12 -11
- package/build/utils/invalid-feedback.d.ts +6 -1
- package/build/utils/invalid-feedback.d.ts.map +1 -1
- package/build/utils/invalid-feedback.js +8 -2
- package/build/utils/modal.d.ts +4 -1
- package/build/utils/modal.d.ts.map +1 -1
- package/build/utils/modal.js +11 -9
- package/build/utils/text.d.ts +9 -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 +2 -1
- package/build/with-api-maker.d.ts.map +1 -1
- package/build/with-api-maker.js +2 -1
- package/build/with-collection.d.ts +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 +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 +6 -5
- package/build/base-component.d.ts +0 -4
- package/build/base-component.d.ts.map +0 -1
- package/build/base-component.js +0 -4
package/build/can-can.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
/* eslint-disable sort-imports */
|
|
2
3
|
import * as inflection from "inflection";
|
|
3
4
|
import { EventEmitter } from "eventemitter3";
|
|
@@ -5,6 +6,21 @@ import { ReadersWriterLock } from "epic-locks";
|
|
|
5
6
|
import { digg } from "diggerize";
|
|
6
7
|
import Services from "./services.js";
|
|
7
8
|
const shared = {};
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {{debug?: boolean}} CanOptions
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* @typedef {import("./base-model.js").BaseModelClassType | {
|
|
14
|
+
* modelClassData?: () => {name?: string},
|
|
15
|
+
* name?: string,
|
|
16
|
+
* resourceData?: () => {name?: string}
|
|
17
|
+
* } | string} AbilitySubject
|
|
18
|
+
*/
|
|
19
|
+
/** @typedef {{ability: string, can: boolean, subject: string}} LoadedAbility */
|
|
20
|
+
/** @typedef {{ability: string, callbacks: Array<() => void>, subject: AbilitySubject}} PendingAbility */
|
|
21
|
+
/** @typedef {{request: Array<{ability: string, subject: AbilitySubject}>}} LoadAbilitiesRequest */
|
|
22
|
+
/** @typedef {{abilities: LoadedAbility[]}} LoadAbilitiesResponse */
|
|
23
|
+
/** @typedef {[AbilitySubject, string[]]} AbilityRequest */
|
|
8
24
|
/** Ability helper and query mapper. */
|
|
9
25
|
export default class ApiMakerCanCan {
|
|
10
26
|
abilities = [];
|
|
@@ -22,13 +38,22 @@ export default class ApiMakerCanCan {
|
|
|
22
38
|
lock = new ReadersWriterLock();
|
|
23
39
|
abilitiesByName = new Map();
|
|
24
40
|
debugTokens = new Set();
|
|
25
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* Returns the shared CanCan helper instance.
|
|
43
|
+
* @returns {ApiMakerCanCan}
|
|
44
|
+
*/
|
|
26
45
|
static current() {
|
|
27
46
|
if (!shared.currentApiMakerCanCan)
|
|
28
47
|
shared.currentApiMakerCanCan = new ApiMakerCanCan();
|
|
29
48
|
return shared.currentApiMakerCanCan;
|
|
30
49
|
}
|
|
31
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* Returns the loaded permission value for one ability and subject pair.
|
|
52
|
+
* @param {string} ability
|
|
53
|
+
* @param {AbilitySubject} subject
|
|
54
|
+
* @param {CanOptions} options
|
|
55
|
+
* @returns {boolean | null}
|
|
56
|
+
*/
|
|
32
57
|
can(ability, subject, options = {}) {
|
|
33
58
|
const foundAbility = this.findAbility(ability, subject);
|
|
34
59
|
if (foundAbility === undefined) {
|
|
@@ -48,7 +73,11 @@ export default class ApiMakerCanCan {
|
|
|
48
73
|
return digg(foundAbility, "can");
|
|
49
74
|
}
|
|
50
75
|
}
|
|
51
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Queues one ability lookup to be loaded from the backend.
|
|
78
|
+
* @param {string} ability
|
|
79
|
+
* @param {AbilitySubject} subject
|
|
80
|
+
*/
|
|
52
81
|
recordMissingAbility(ability, subject) {
|
|
53
82
|
let missingAbilitySet = this.missingAbilities.get(subject);
|
|
54
83
|
if (!missingAbilitySet) {
|
|
@@ -71,7 +100,7 @@ export default class ApiMakerCanCan {
|
|
|
71
100
|
const missingAbilities = this.missingAbilities;
|
|
72
101
|
this.missingAbilities = new Map();
|
|
73
102
|
this.missingAbilitiesTimeout = null;
|
|
74
|
-
const abilitiesToLoad = [];
|
|
103
|
+
const abilitiesToLoad = /** @type {AbilityRequest[]} */ ([]);
|
|
75
104
|
for (const [subject, abilities] of missingAbilities.entries()) {
|
|
76
105
|
abilitiesToLoad.push([subject, Array.from(abilities)]);
|
|
77
106
|
}
|
|
@@ -79,26 +108,46 @@ export default class ApiMakerCanCan {
|
|
|
79
108
|
this.loadAbilities(abilitiesToLoad);
|
|
80
109
|
}
|
|
81
110
|
};
|
|
82
|
-
/**
|
|
111
|
+
/**
|
|
112
|
+
* Finds one previously loaded ability result.
|
|
113
|
+
* @param {string} ability
|
|
114
|
+
* @param {AbilitySubject} subject
|
|
115
|
+
* @returns {LoadedAbility | undefined}
|
|
116
|
+
*/
|
|
83
117
|
findAbility(ability, subject) {
|
|
84
118
|
const abilityKey = this.abilityKey(ability, subject);
|
|
85
119
|
if (!abilityKey)
|
|
86
120
|
return undefined;
|
|
87
121
|
return this.abilitiesByName.get(abilityKey);
|
|
88
122
|
}
|
|
89
|
-
/**
|
|
123
|
+
/**
|
|
124
|
+
* Returns whether one ability has already been loaded.
|
|
125
|
+
* @param {string} ability
|
|
126
|
+
* @param {AbilitySubject} subject
|
|
127
|
+
* @returns {boolean}
|
|
128
|
+
*/
|
|
90
129
|
isAbilityLoaded(ability, subject) {
|
|
91
130
|
return this.findAbility(ability, subject) !== undefined;
|
|
92
131
|
}
|
|
93
|
-
/**
|
|
132
|
+
/**
|
|
133
|
+
* Returns whether abilities are currently loading or resetting.
|
|
134
|
+
* @returns {boolean}
|
|
135
|
+
*/
|
|
94
136
|
isReloading() {
|
|
95
137
|
return this.loadingCount > 0 || this.resettingGeneration !== null;
|
|
96
138
|
}
|
|
97
|
-
/**
|
|
139
|
+
/**
|
|
140
|
+
* Returns the cache key that changes whenever loaded abilities change.
|
|
141
|
+
* @returns {number}
|
|
142
|
+
*/
|
|
98
143
|
getCacheKey() {
|
|
99
144
|
return this.cacheKey;
|
|
100
145
|
}
|
|
101
|
-
/**
|
|
146
|
+
/**
|
|
147
|
+
* Enables or disables debug logging for one caller token.
|
|
148
|
+
* @param {string | symbol} token
|
|
149
|
+
* @param {boolean} enabled
|
|
150
|
+
*/
|
|
102
151
|
setDebug(token, enabled) {
|
|
103
152
|
if (!token)
|
|
104
153
|
return;
|
|
@@ -109,16 +158,27 @@ export default class ApiMakerCanCan {
|
|
|
109
158
|
this.debugTokens.delete(token);
|
|
110
159
|
}
|
|
111
160
|
}
|
|
112
|
-
/**
|
|
161
|
+
/**
|
|
162
|
+
* Returns whether any caller has enabled CanCan debug logging.
|
|
163
|
+
* @returns {boolean}
|
|
164
|
+
*/
|
|
113
165
|
isDebugging() {
|
|
114
166
|
return this.debugTokens.size > 0;
|
|
115
167
|
}
|
|
116
|
-
/**
|
|
168
|
+
/**
|
|
169
|
+
* Writes one debug log message when debugging is enabled.
|
|
170
|
+
* @param {string} message
|
|
171
|
+
*/
|
|
117
172
|
debugLog(message) {
|
|
118
173
|
if (this.isDebugging()) {
|
|
119
174
|
console.log(message);
|
|
120
175
|
}
|
|
121
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Loads a batch of abilities from the backend.
|
|
179
|
+
* @param {AbilityRequest[]} abilities
|
|
180
|
+
* @returns {Promise<void>}
|
|
181
|
+
*/
|
|
122
182
|
async loadAbilities(abilities) {
|
|
123
183
|
const generation = this.abilitiesGeneration;
|
|
124
184
|
const loadSummary = [
|
|
@@ -159,7 +219,12 @@ export default class ApiMakerCanCan {
|
|
|
159
219
|
this.resettingGeneration = null;
|
|
160
220
|
}
|
|
161
221
|
}
|
|
162
|
-
/**
|
|
222
|
+
/**
|
|
223
|
+
* Loads one ability and resolves once it is available locally.
|
|
224
|
+
* @param {string} ability
|
|
225
|
+
* @param {AbilitySubject} subject
|
|
226
|
+
* @returns {Promise<void>}
|
|
227
|
+
*/
|
|
163
228
|
loadAbility(ability, subject) {
|
|
164
229
|
return new Promise((resolve) => {
|
|
165
230
|
const normalizedAbility = inflection.underscore(ability);
|
|
@@ -212,6 +277,12 @@ export default class ApiMakerCanCan {
|
|
|
212
277
|
this.resetPromise = null;
|
|
213
278
|
}
|
|
214
279
|
}
|
|
280
|
+
/**
|
|
281
|
+
* Resets and reloads one batch of abilities, optionally deduped by key.
|
|
282
|
+
* @param {AbilityRequest[]} abilities
|
|
283
|
+
* @param {string | undefined} reloadKey
|
|
284
|
+
* @returns {Promise<void>}
|
|
285
|
+
*/
|
|
215
286
|
async reloadAbilities(abilities, reloadKey) {
|
|
216
287
|
if (reloadKey && this.reloadPromises.has(reloadKey)) {
|
|
217
288
|
this.debugLog(`[can-can-debug] reloadAbilities:dedupe reloadKey=${reloadKey}`);
|
|
@@ -254,9 +325,9 @@ export default class ApiMakerCanCan {
|
|
|
254
325
|
let requestError;
|
|
255
326
|
// Load abilities from backend
|
|
256
327
|
try {
|
|
257
|
-
const result = await Services.current().sendRequest("CanCan::LoadAbilities", {
|
|
328
|
+
const result = /** @type {LoadAbilitiesResponse} */ (await Services.current().sendRequest("CanCan::LoadAbilities", /** @type {LoadAbilitiesRequest} */ ({
|
|
258
329
|
request: abilitiesToLoadData
|
|
259
|
-
});
|
|
330
|
+
})));
|
|
260
331
|
abilities = digg(result, "abilities");
|
|
261
332
|
if (!Array.isArray(abilities)) {
|
|
262
333
|
throw new Error(`Expected CanCan::LoadAbilities response abilities to be an array, got: ${typeof abilities}`);
|
|
@@ -307,7 +378,10 @@ export default class ApiMakerCanCan {
|
|
|
307
378
|
}
|
|
308
379
|
}
|
|
309
380
|
};
|
|
310
|
-
/**
|
|
381
|
+
/**
|
|
382
|
+
* Indexes loaded abilities by the lookup key used by `findAbility`.
|
|
383
|
+
* @param {LoadedAbility[]} abilities
|
|
384
|
+
*/
|
|
311
385
|
indexAbilitiesByName(abilities) {
|
|
312
386
|
for (const abilityData of abilities) {
|
|
313
387
|
if (abilityData && typeof abilityData == "object") {
|
|
@@ -318,7 +392,12 @@ export default class ApiMakerCanCan {
|
|
|
318
392
|
}
|
|
319
393
|
}
|
|
320
394
|
}
|
|
321
|
-
/**
|
|
395
|
+
/**
|
|
396
|
+
* Builds the internal key used to look up one ability result.
|
|
397
|
+
* @param {string} ability
|
|
398
|
+
* @param {AbilitySubject} subject
|
|
399
|
+
* @returns {null | string}
|
|
400
|
+
*/
|
|
322
401
|
abilityKey(ability, subject) {
|
|
323
402
|
if (!ability)
|
|
324
403
|
return null;
|
|
@@ -327,7 +406,11 @@ export default class ApiMakerCanCan {
|
|
|
327
406
|
return null;
|
|
328
407
|
return `${inflection.underscore(ability)}:${subjectName}`;
|
|
329
408
|
}
|
|
330
|
-
/**
|
|
409
|
+
/**
|
|
410
|
+
* Extracts the subject name sent to the backend ability loader.
|
|
411
|
+
* @param {AbilitySubject} subject
|
|
412
|
+
* @returns {string | null}
|
|
413
|
+
*/
|
|
331
414
|
subjectName(subject) {
|
|
332
415
|
if (!subject)
|
|
333
416
|
return null;
|
|
@@ -345,11 +428,14 @@ export default class ApiMakerCanCan {
|
|
|
345
428
|
}
|
|
346
429
|
return null;
|
|
347
430
|
}
|
|
348
|
-
/**
|
|
431
|
+
/**
|
|
432
|
+
* Re-throws an async error on the microtask queue for existing handlers.
|
|
433
|
+
* @param {Error} error
|
|
434
|
+
*/
|
|
349
435
|
reportUnhandledAsyncError(error) {
|
|
350
436
|
if (!error)
|
|
351
437
|
return;
|
|
352
438
|
Promise.reject(error);
|
|
353
439
|
}
|
|
354
440
|
}
|
|
355
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWNhbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY2FuLWNhbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFFcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBRWpCLHVDQUF1QztBQUN2QyxNQUFNLENBQUMsT0FBTyxPQUFPLGNBQWM7SUFDakMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtJQUNkLGVBQWUsR0FBRyxFQUFFLENBQUE7SUFDcEIsbUJBQW1CLEdBQUcsRUFBRSxDQUFBO0lBQ3hCLG1CQUFtQixHQUFHLENBQUMsQ0FBQTtJQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFBO0lBQ1osWUFBWSxHQUFHLENBQUMsQ0FBQTtJQUNoQixnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzVCLHVCQUF1QixHQUFHLElBQUksQ0FBQTtJQUM5QixjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUMxQixZQUFZLEdBQUcsSUFBSSxDQUFBO0lBQ25CLG1CQUFtQixHQUFHLElBQUksQ0FBQTtJQUMxQixNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtJQUMzQixJQUFJLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFBO0lBQzlCLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzNCLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRXZCLGVBQWU7SUFDZixNQUFNLENBQUMsT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMscUJB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QUNoQixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQy9DLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDN0MsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNyQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLHlCQUF5QixDQUFFLEtBQUs7UUFDOUIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFNO1FBRWxCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgc29ydC1pbXBvcnRzICovXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiXG5pbXBvcnQge1JlYWRlcnNXcml0ZXJMb2NrfSBmcm9tIFwiZXBpYy1sb2Nrc1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFNlcnZpY2VzIGZyb20gXCIuL3NlcnZpY2VzLmpzXCJcblxuY29uc3Qgc2hhcmVkID0ge31cblxuLyoqIEFiaWxpdHkgaGVscGVyIGFuZCBxdWVyeSBtYXBwZXIuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlckNhbkNhbiB7XG4gIGFiaWxpdGllcyA9IFtdXG4gIGFiaWxpdGllc1RvTG9hZCA9IFtdXG4gIGFiaWxpdGllc1RvTG9hZERhdGEgPSBbXVxuICBhYmlsaXRpZXNHZW5lcmF0aW9uID0gMFxuICBjYWNoZUtleSA9IDBcbiAgbG9hZGluZ0NvdW50ID0gMFxuICBtaXNzaW5nQWJpbGl0aWVzID0gbmV3IE1hcCgpXG4gIG1pc3NpbmdBYmlsaXRpZXNUaW1lb3V0ID0gbnVsbFxuICByZWxvYWRQcm9taXNlcyA9IG5ldyBNYXAoKVxuICByZXNldFByb21pc2UgPSBudWxsXG4gIHJlc2V0dGluZ0dlbmVyYXRpb24gPSBudWxsXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBsb2NrID0gbmV3IFJlYWRlcnNXcml0ZXJMb2NrKClcbiAgYWJpbGl0aWVzQnlOYW1lID0gbmV3IE1hcCgpXG4gIGRlYnVnVG9rZW5zID0gbmV3IFNldCgpXG5cbiAgLyoqIGN1cnJlbnQuICovXG4gIHN0YXRpYyBjdXJyZW50ICgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW4pIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW4gPSBuZXcgQXBpTWFrZXJDYW5DYW4oKVxuXG4gICAgcmV0dXJuIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDYW5DYW5cbiAgfVxuXG4gIC8qKiBjYW4uICovXG4gIGNhbiAoYWJpbGl0eSwgc3ViamVjdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KVxuXG4gICAgaWYgKGZvdW5kQWJpbGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQWJpbGl0eSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuICAgICAgdGhpcy5yZWNvcmRNaXNzaW5nQWJpbGl0eShub3JtYWxpemVkQWJpbGl0eSwgc3ViamVjdClcblxuICAgICAgaWYgKG9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgbGV0IHN1YmplY3RMYWJlbCA9IHN1YmplY3RcblxuICAgICAgICAvLyBUcmFuc2xhdGUgcmVzb3VyY2UtbW9kZWxzIGludG8gY2xhc3MgbmFtZSBzdHJpbmdzXG4gICAgICAgIGlmICh0eXBlb2Ygc3ViamVjdCA9PSBcImZ1bmN0aW9uXCIgJiYgc3ViamVjdC5tb2RlbENsYXNzRGF0YSkge1xuICAgICAgICAgIHN1YmplY3RMYWJlbCA9IGRpZ2coc3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEFiaWxpdHkgbm90IGxvYWRlZCAke3N1YmplY3RMYWJlbH0jJHtub3JtYWxpemVkQWJpbGl0eX1gLCB7YWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllcywgYWJpbGl0eSwgc3ViamVjdH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkaWdnKGZvdW5kQWJpbGl0eSwgXCJjYW5cIilcbiAgICB9XG4gIH1cblxuICAvKiogcmVjb3JkTWlzc2luZ0FiaWxpdHkuICovXG4gIHJlY29yZE1pc3NpbmdBYmlsaXR5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgbGV0IG1pc3NpbmdBYmlsaXR5U2V0ID0gdGhpcy5taXNzaW5nQWJpbGl0aWVzLmdldChzdWJqZWN0KVxuXG4gICAgaWYgKCFtaXNzaW5nQWJpbGl0eVNldCkge1xuICAgICAgbWlzc2luZ0FiaWxpdHlTZXQgPSBuZXcgU2V0KClcbiAgICAgIHRoaXMubWlzc2luZ0FiaWxpdGllcy5zZXQoc3ViamVjdCwgbWlzc2luZ0FiaWxpdHlTZXQpXG4gICAgfVxuXG4gICAgaWYgKG1pc3NpbmdBYmlsaXR5U2V0LmhhcyhhYmlsaXR5KSkgcmV0dXJuXG5cbiAgICBtaXNzaW5nQWJpbGl0eVNldC5hZGQoYWJpbGl0eSlcbiAgICB0aGlzLnF1ZXVlTWlzc2luZ0FiaWxpdGllc0xvYWQoKVxuICB9XG5cbiAgLyoqIHF1ZXVlTWlzc2luZ0FiaWxpdGllc0xvYWQuICovXG4gIHF1ZXVlTWlzc2luZ0FiaWxpdGllc0xvYWQgKCkge1xuICAgIGlmICh0aGlzLm1pc3NpbmdBYmlsaXRpZXNUaW1lb3V0KSByZXR1cm5cblxuICAgIHRoaXMubWlzc2luZ0FiaWxpdGllc1RpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMubG9hZE1pc3NpbmdBYmlsaXRpZXMsIDApXG4gIH1cblxuICAvKiogbG9hZE1pc3NpbmdBYmlsaXRpZXMuICovXG4gIGxvYWRNaXNzaW5nQWJpbGl0aWVzID0gKCkgPT4ge1xuICAgIGNvbnN0IG1pc3NpbmdBYmlsaXRpZXMgPSB0aGlzLm1pc3NpbmdBYmlsaXRpZXNcblxuICAgIHRoaXMubWlzc2luZ0FiaWxpdGllcyA9IG5ldyBNYXAoKVxuICAgIHRoaXMubWlzc2luZ0FiaWxpdGllc1RpbWVvdXQgPSBudWxsXG5cbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWQgPSBbXVxuXG4gICAgZm9yIChjb25zdCBbc3ViamVjdCwgYWJpbGl0aWVzXSBvZiBtaXNzaW5nQWJpbGl0aWVzLmVudHJpZXMoKSkge1xuICAgICAgYWJpbGl0aWVzVG9Mb2FkLnB1c2goW3N1YmplY3QsIEFycmF5LmZyb20oYWJpbGl0aWVzKV0pXG4gICAgfVxuXG4gICAgaWYgKGFiaWxpdGllc1RvTG9hZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvYWRBYmlsaXRpZXMoYWJpbGl0aWVzVG9Mb2FkKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBmaW5kQWJpbGl0eS4gKi9cbiAgZmluZEFiaWxpdHkgKGFiaWxpdHksIHN1YmplY3QpIHtcbiAgICBjb25zdCBhYmlsaXR5S2V5ID0gdGhpcy5hYmlsaXR5S2V5KGFiaWxpdHksIHN1YmplY3QpXG4gICAgaWYgKCFhYmlsaXR5S2V5KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gdGhpcy5hYmlsaXRpZXNCeU5hbWUuZ2V0KGFiaWxpdHlLZXkpXG4gIH1cblxuICAvKiogaXNBYmlsaXR5TG9hZGVkLiAqL1xuICBpc0FiaWxpdHlMb2FkZWQgKGFiaWxpdHksIHN1YmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KSAhPT0gdW5kZWZpbmVkXG4gIH1cblxuICAvKiogaXNSZWxvYWRpbmcuICovXG4gIGlzUmVsb2FkaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwIHx8IHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiAhPT0gbnVsbFxuICB9XG5cbiAgLyoqIGdldENhY2hlS2V5LiAqL1xuICBnZXRDYWNoZUtleSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVLZXlcbiAgfVxuXG4gIC8qKiBzZXREZWJ1Zy4gKi9cbiAgc2V0RGVidWcgKHRva2VuLCBlbmFibGVkKSB7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuXG5cbiAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgdGhpcy5kZWJ1Z1Rva2Vucy5hZGQodG9rZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVidWdUb2tlbnMuZGVsZXRlKHRva2VuKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBpc0RlYnVnZ2luZy4gKi9cbiAgaXNEZWJ1Z2dpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmRlYnVnVG9rZW5zLnNpemUgPiAwXG4gIH1cblxuICAvKiogZGVidWdMb2cuICovXG4gIGRlYnVnTG9nIChtZXNzYWdlKSB7XG4gICAgaWYgKHRoaXMuaXNEZWJ1Z2dpbmcoKSkge1xuICAgICAgY29uc29sZS5sb2cobWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkQWJpbGl0aWVzIChhYmlsaXRpZXMpIHtcbiAgICBjb25zdCBnZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG4gICAgY29uc3QgbG9hZFN1bW1hcnkgPSBbXG4gICAgICBcIltjYW4tY2FuLWRlYnVnXSBsb2FkQWJpbGl0aWVzOnN0YXJ0XCIsXG4gICAgICBgZ2VuZXJhdGlvbj0ke2dlbmVyYXRpb259YCxcbiAgICAgIGByZXF1ZXN0cz0ke2FiaWxpdGllcy5sZW5ndGh9YFxuICAgIF0uam9pbihcIjsgXCIpXG4gICAgdGhpcy5kZWJ1Z0xvZyhsb2FkU3VtbWFyeSlcblxuICAgIHRoaXMubG9hZGluZ0NvdW50ICs9IDFcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvY2sucmVhZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllcykge1xuICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSBhYmlsaXR5RGF0YVswXVxuXG4gICAgICAgICAgaWYgKCFzdWJqZWN0KSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3ViamVjdCBnaXZlbiBpbiBhYmlsaXRpZXM6ICR7c3ViamVjdH0gLSAke0pTT04uc3RyaW5naWZ5KGFiaWxpdGllcyl9YClcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWJpbGl0eURhdGFbMV0pKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGFycmF5IG9mIGFiaWxpdGllcyBidXQgZ290OiAke3R5cGVvZiBhYmlsaXR5RGF0YVsxXX06ICR7YWJpbGl0eURhdGFbMV19YClcblxuICAgICAgICAgIGZvciAoY29uc3QgYWJpbGl0eSBvZiBhYmlsaXR5RGF0YVsxXSkge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMubG9hZEFiaWxpdHkoYWJpbGl0eSwgc3ViamVjdClcblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgfSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29uc3QgZG9uZVN1bW1hcnkgPSBbXG4gICAgICAgIFwiW2Nhbi1jYW4tZGVidWddIGxvYWRBYmlsaXRpZXM6ZG9uZVwiLFxuICAgICAgICBgZ2VuZXJhdGlvbj0ke2dlbmVyYXRpb259YCxcbiAgICAgICAgYGN1cnJlbnRHZW5lcmF0aW9uPSR7dGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9ufWAsXG4gICAgICAgIGBsb2FkaW5nQ291bnQ9JHt0aGlzLmxvYWRpbmdDb3VudH1gXG4gICAgICBdLmpvaW4oXCI7IFwiKVxuICAgICAgdGhpcy5kZWJ1Z0xvZyhkb25lU3VtbWFyeSlcbiAgICAgIGlmICh0aGlzLmxvYWRpbmdDb3VudCA+IDApIHRoaXMubG9hZGluZ0NvdW50IC09IDFcbiAgICAgIGlmICh0aGlzLnJlc2V0dGluZ0dlbmVyYXRpb24gPT09IGdlbmVyYXRpb24pIHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKiogbG9hZEFiaWxpdHkuICovXG4gIGxvYWRBYmlsaXR5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQWJpbGl0eSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuXG4gICAgICBpZiAodGhpcy5pc0FiaWxpdHlMb2FkZWQobm9ybWFsaXplZEFiaWxpdHksIHN1YmplY3QpKSB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5hYmlsaXRpZXNUb0xvYWQuZmluZCgoYWJpbGl0eVRvTG9hZCkgPT4gZGlnZyhhYmlsaXR5VG9Mb2FkLCBcImFiaWxpdHlcIikgPT0gbm9ybWFsaXplZEFiaWxpdHkgJiZcbiAgICAgICAgZGlnZyhhYmlsaXR5VG9Mb2FkLCBcInN1YmplY3RcIikgPT0gc3ViamVjdFxuICAgICAgKVxuXG4gICAgICBpZiAoZm91bmRBYmlsaXR5KSB7XG4gICAgICAgIGZvdW5kQWJpbGl0eS5jYWxsYmFja3MucHVzaChyZXNvbHZlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNUb0xvYWQucHVzaCh7YWJpbGl0eTogbm9ybWFsaXplZEFiaWxpdHksIGNhbGxiYWNrczogW3Jlc29sdmVdLCBzdWJqZWN0fSlcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhLnB1c2goe2FiaWxpdHk6IG5vcm1hbGl6ZWRBYmlsaXR5LCBzdWJqZWN0fSlcblxuICAgICAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBxdWV1ZUFiaWxpdGllc1JlcXVlc3QuICovXG4gIHF1ZXVlQWJpbGl0aWVzUmVxdWVzdCAoKSB7XG4gICAgaWYgKHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCkgcmV0dXJuXG5cbiAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuc2VuZEFiaWxpdGllc1JlcXVlc3QsIDApXG4gIH1cblxuICBhc3luYyByZXNldEFiaWxpdGllcyAoKSB7XG4gICAgaWYgKHRoaXMucmVzZXRQcm9taXNlKSByZXR1cm4gdGhpcy5yZXNldFByb21pc2VcblxuICAgIHRoaXMucmVzZXRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMubG9jay53cml0ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWJpbGl0aWVzID0gW11cbiAgICAgICAgdGhpcy5hYmlsaXRpZXNCeU5hbWUgPSBuZXcgTWFwKClcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uICs9IDFcbiAgICAgICAgdGhpcy5yZXNldHRpbmdHZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG4gICAgICAgIHRoaXMuY2FjaGVLZXkgKz0gMVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc2V0U3VtbWFyeSA9IFtcbiAgICAgICAgXCJbY2FuLWNhbi1kZWJ1Z10gcmVzZXRBYmlsaXRpZXNcIixcbiAgICAgICAgYGdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YCxcbiAgICAgICAgYGNhY2hlS2V5PSR7dGhpcy5jYWNoZUtleX1gLFxuICAgICAgICBgcXVldWVkPSR7dGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhLmxlbmd0aH1gXG4gICAgICBdLmpvaW4oXCI7IFwiKVxuICAgICAgdGhpcy5kZWJ1Z0xvZyhyZXNldFN1bW1hcnkpXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwib25SZXNldEFiaWxpdGllc1wiKVxuICAgIH0pKClcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlc2V0UHJvbWlzZVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJlc2V0UHJvbWlzZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWxvYWRBYmlsaXRpZXMgKGFiaWxpdGllcywgcmVsb2FkS2V5KSB7XG4gICAgaWYgKHJlbG9hZEtleSAmJiB0aGlzLnJlbG9hZFByb21pc2VzLmhhcyhyZWxvYWRLZXkpKSB7XG4gICAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gcmVsb2FkQWJpbGl0aWVzOmRlZHVwZSByZWxvYWRLZXk9JHtyZWxvYWRLZXl9YClcbiAgICAgIHJldHVybiB0aGlzLnJlbG9hZFByb21pc2VzLmdldChyZWxvYWRLZXkpXG4gICAgfVxuXG4gICAgY29uc3QgcmVsb2FkU3VtbWFyeSA9IFtcbiAgICAgIFwiW2Nhbi1jYW4tZGVidWddIHJlbG9hZEFiaWxpdGllczpzdGFydFwiLFxuICAgICAgYHJlbG9hZEtleT0ke3JlbG9hZEtleSB8fCBcIm5vbmVcIn1gLFxuICAgICAgYGdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YCxcbiAgICAgIGByZXF1ZXN0cz0ke2FiaWxpdGllcy5sZW5ndGh9YFxuICAgIF0uam9pbihcIjsgXCIpXG4gICAgdGhpcy5kZWJ1Z0xvZyhyZWxvYWRTdW1tYXJ5KVxuXG4gICAgLyoqIHByb21pc2UuICovXG4gICAgY29uc3QgcHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnJlc2V0QWJpbGl0aWVzKClcbiAgICAgIGF3YWl0IHRoaXMubG9hZEFiaWxpdGllcyhhYmlsaXRpZXMpXG4gICAgfSkoKVxuXG4gICAgaWYgKHJlbG9hZEtleSkgdGhpcy5yZWxvYWRQcm9taXNlcy5zZXQocmVsb2FkS2V5LCBwcm9taXNlKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHByb21pc2VcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kZWJ1Z0xvZyhgW2Nhbi1jYW4tZGVidWddIHJlbG9hZEFiaWxpdGllczpkb25lIHJlbG9hZEtleT0ke3JlbG9hZEtleSB8fCBcIm5vbmVcIn07IGdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YClcbiAgICAgIGlmIChyZWxvYWRLZXkpIHRoaXMucmVsb2FkUHJvbWlzZXMuZGVsZXRlKHJlbG9hZEtleSlcbiAgICB9XG4gIH1cblxuICAvKiogc2VuZEFiaWxpdGllc1JlcXVlc3QuICovXG4gIHNlbmRBYmlsaXRpZXNSZXF1ZXN0ID0gYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCA9IG51bGxcbiAgICBjb25zdCBnZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkID0gdGhpcy5hYmlsaXRpZXNUb0xvYWRcbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWREYXRhID0gdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhXG5cbiAgICB0aGlzLmFiaWxpdGllc1RvTG9hZCA9IFtdXG4gICAgdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhID0gW11cbiAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6c3RhcnQgZ2VuZXJhdGlvbj0ke2dlbmVyYXRpb259OyBxdWV1ZWQ9JHthYmlsaXRpZXNUb0xvYWREYXRhLmxlbmd0aH1gKVxuXG4gICAgbGV0IGFiaWxpdGllcyA9IFtdXG4gICAgbGV0IGRpZEZhaWwgPSBmYWxzZVxuICAgIGxldCByZXF1ZXN0RXJyb3JcblxuICAgIC8vIExvYWQgYWJpbGl0aWVzIGZyb20gYmFja2VuZFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJDYW5DYW46OkxvYWRBYmlsaXRpZXNcIiwge1xuICAgICAgICByZXF1ZXN0OiBhYmlsaXRpZXNUb0xvYWREYXRhXG4gICAgICB9KVxuICAgICAgYWJpbGl0aWVzID0gZGlnZyhyZXN1bHQsIFwiYWJpbGl0aWVzXCIpXG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXRpZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgQ2FuQ2FuOjpMb2FkQWJpbGl0aWVzIHJlc3BvbnNlIGFiaWxpdGllcyB0byBiZSBhbiBhcnJheSwgZ290OiAke3R5cGVvZiBhYmlsaXRpZXN9YClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGlkRmFpbCA9IHRydWVcbiAgICAgIHJlcXVlc3RFcnJvciA9IGVycm9yXG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGxvYWQgYWJpbGl0aWVzXCIsIGVycm9yKVxuICAgIH1cblxuICAgIGlmIChnZW5lcmF0aW9uICE9PSB0aGlzLmFiaWxpdGllc0dlbmVyYXRpb24pIHtcbiAgICAgIGNvbnN0IHN0YWxlUmVzcG9uc2VEZWJ1ZyA9IFtcbiAgICAgICAgXCJbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6c3RhbGUtcmVzcG9uc2VcIixcbiAgICAgICAgYHJlcXVlc3RHZW5lcmF0aW9uPSR7Z2VuZXJhdGlvbn1gLFxuICAgICAgICBgY3VycmVudEdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YCxcbiAgICAgICAgYHJlcXVldWU9JHthYmlsaXRpZXNUb0xvYWQubGVuZ3RofWBcbiAgICAgIF0uam9pbihcIjsgXCIpXG4gICAgICB0aGlzLmRlYnVnTG9nKHN0YWxlUmVzcG9uc2VEZWJ1ZylcbiAgICAgIGZvciAoY29uc3QgYWJpbGl0eURhdGEgb2YgYWJpbGl0aWVzVG9Mb2FkKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgYWJpbGl0eURhdGEuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkQWJpbGl0eShhYmlsaXR5RGF0YS5hYmlsaXR5LCBhYmlsaXR5RGF0YS5zdWJqZWN0KS50aGVuKGNhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChkaWRGYWlsKSB7XG4gICAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6ZmFpbGVkIGdlbmVyYXRpb249JHtnZW5lcmF0aW9ufTsgcXVldWVkPSR7YWJpbGl0aWVzVG9Mb2FkLmxlbmd0aH1gKVxuICAgICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXNUb0xvYWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBhYmlsaXR5RGF0YS5jYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVzb2x2ZSBjYWxsYmFja3MgdG8gYXZvaWQgZGVhZGxvY2tzIGZvciB3YWl0ZXJzIGV2ZW4gd2hlbiBsb2FkIGZhaWxlZC5cbiAgICAgIGlmIChyZXF1ZXN0RXJyb3IpIHRoaXMucmVwb3J0VW5oYW5kbGVkQXN5bmNFcnJvcihyZXF1ZXN0RXJyb3IpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxvYWRlZCBhYmlsaXRpZXNcbiAgICB0aGlzLmFiaWxpdGllcyA9IHRoaXMuYWJpbGl0aWVzLmNvbmNhdChhYmlsaXRpZXMpXG4gICAgdGhpcy5pbmRleEFiaWxpdGllc0J5TmFtZShhYmlsaXRpZXMpXG4gICAgdGhpcy5jYWNoZUtleSArPSAxXG4gICAgdGhpcy5kZWJ1Z0xvZyhcbiAgICAgIGBbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6c3VjY2VzcyBnZW5lcmF0aW9uPSR7Z2VuZXJhdGlvbn07IGxvYWRlZD0ke2FiaWxpdGllcy5sZW5ndGh9OyBjYWNoZUtleT0ke3RoaXMuY2FjaGVLZXl9YFxuICAgIClcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib25BYmlsaXRpZXNMb2FkZWRcIiwge2NhY2hlS2V5OiB0aGlzLmNhY2hlS2V5fSlcblxuICAgIC8vIENhbGwgdGhlIGNhbGxiYWNrcyB0aGF0IGFyZSB3YWl0aW5nIGZvciB0aGUgYWJpbGl0eSB0byBoYXZlIGJlZW4gbG9hZGVkXG4gICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXNUb0xvYWQpIHtcbiAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgYWJpbGl0eURhdGEuY2FsbGJhY2tzKSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogaW5kZXhBYmlsaXRpZXNCeU5hbWUuICovXG4gIGluZGV4QWJpbGl0aWVzQnlOYW1lIChhYmlsaXRpZXMpIHtcbiAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllcykge1xuICAgICAgaWYgKGFiaWxpdHlEYXRhICYmIHR5cGVvZiBhYmlsaXR5RGF0YSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGNvbnN0IGFiaWxpdHlLZXkgPSB0aGlzLmFiaWxpdHlLZXkoZGlnZyhhYmlsaXR5RGF0YSwgXCJhYmlsaXR5XCIpLCBkaWdnKGFiaWxpdHlEYXRhLCBcInN1YmplY3RcIikpXG5cbiAgICAgICAgaWYgKGFiaWxpdHlLZXkpIHtcbiAgICAgICAgICB0aGlzLmFiaWxpdGllc0J5TmFtZS5zZXQoYWJpbGl0eUtleSwgYWJpbGl0eURhdGEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogYWJpbGl0eUtleS4gKi9cbiAgYWJpbGl0eUtleSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIGlmICghYWJpbGl0eSkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHN1YmplY3ROYW1lID0gdGhpcy5zdWJqZWN0TmFtZShzdWJqZWN0KVxuICAgIGlmICghc3ViamVjdE5hbWUpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gYCR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKGFiaWxpdHkpfToke3N1YmplY3ROYW1lfWBcbiAgfVxuXG4gIC8qKiBzdWJqZWN0TmFtZS4gKi9cbiAgc3ViamVjdE5hbWUoc3ViamVjdCkge1xuICAgIGlmICghc3ViamVjdCkgcmV0dXJuIG51bGxcblxuICAgIGlmICh0eXBlb2Ygc3ViamVjdCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gc3ViamVjdFxuICAgIH1cblxuICAgIGlmIChzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKSB7XG4gICAgICByZXR1cm4gZGlnZyhzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuICAgIH1cblxuICAgIGlmIChzdWJqZWN0LnJlc291cmNlRGF0YSkge1xuICAgICAgcmV0dXJuIGRpZ2coc3ViamVjdC5yZXNvdXJjZURhdGEoKSwgXCJuYW1lXCIpXG4gICAgfVxuXG4gICAgaWYgKHN1YmplY3QubmFtZSkge1xuICAgICAgcmV0dXJuIHN1YmplY3QubmFtZVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKiogcmVwb3J0VW5oYW5kbGVkQXN5bmNFcnJvci4gKi9cbiAgcmVwb3J0VW5oYW5kbGVkQXN5bmNFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAoIWVycm9yKSByZXR1cm5cblxuICAgIFByb21pc2UucmVqZWN0KGVycm9yKVxuICB9XG59XG4iXX0=
|
|
441
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWNhbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY2FuLWNhbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBQ1osaUNBQWlDO0FBQ2pDLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sWUFBWSxDQUFBO0FBQzVDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBRXBDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtBQUVqQjs7R0FFRztBQUNIOzs7Ozs7R0FNRztBQUNILGdGQUFnRjtBQUNoRix5R0FBeUc7QUFDekcsbUdBQW1HO0FBQ25HLG9FQUFvRTtBQUNwRSwyREFBMkQ7QUFFM0QsdUNBQXVDO0FBQ3ZDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ2QsZUFBZSxHQUFHLEVBQUUsQ0FBQTtJQUNwQixtQkFBbUIsR0FBRyxFQUFFLENBQUE7SUFDeEIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUE7SUFDWixZQUFZLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFDNUIsdUJBQXVCLEdBQUcsSUFBSSxDQUFBO0lBQzlCLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQzFCLFlBQVksR0FBRyxJQUFJLENBQUE7SUFDbkIsbUJBQW1CLEdBQUcsSUFBSSxDQUFBO0lBQzFCLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO0lBQzNCLElBQUksR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUE7SUFDOUIsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFF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RyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFBO0lBQzNELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLE9BQU87UUFDakIsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQTtRQUV6QixJQUFJLE9BQU8sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE9BQU8sT0FBTyxDQUFBO1FBQ2hCLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDL0MsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUM3QyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFBO1FBQ3JCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBRSxLQUFLO1FBQzlCLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTTtRQUVsQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuLyogZXNsaW50LWRpc2FibGUgc29ydC1pbXBvcnRzICovXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiXG5pbXBvcnQge1JlYWRlcnNXcml0ZXJMb2NrfSBmcm9tIFwiZXBpYy1sb2Nrc1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFNlcnZpY2VzIGZyb20gXCIuL3NlcnZpY2VzLmpzXCJcblxuY29uc3Qgc2hhcmVkID0ge31cblxuLyoqXG4gKiBAdHlwZWRlZiB7e2RlYnVnPzogYm9vbGVhbn19IENhbk9wdGlvbnNcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9iYXNlLW1vZGVsLmpzXCIpLkJhc2VNb2RlbENsYXNzVHlwZSB8IHtcbiAqICAgbW9kZWxDbGFzc0RhdGE/OiAoKSA9PiB7bmFtZT86IHN0cmluZ30sXG4gKiAgIG5hbWU/OiBzdHJpbmcsXG4gKiAgIHJlc291cmNlRGF0YT86ICgpID0+IHtuYW1lPzogc3RyaW5nfVxuICogfSB8IHN0cmluZ30gQWJpbGl0eVN1YmplY3RcbiAqL1xuLyoqIEB0eXBlZGVmIHt7YWJpbGl0eTogc3RyaW5nLCBjYW46IGJvb2xlYW4sIHN1YmplY3Q6IHN0cmluZ319IExvYWRlZEFiaWxpdHkgKi9cbi8qKiBAdHlwZWRlZiB7e2FiaWxpdHk6IHN0cmluZywgY2FsbGJhY2tzOiBBcnJheTwoKSA9PiB2b2lkPiwgc3ViamVjdDogQWJpbGl0eVN1YmplY3R9fSBQZW5kaW5nQWJpbGl0eSAqL1xuLyoqIEB0eXBlZGVmIHt7cmVxdWVzdDogQXJyYXk8e2FiaWxpdHk6IHN0cmluZywgc3ViamVjdDogQWJpbGl0eVN1YmplY3R9Pn19IExvYWRBYmlsaXRpZXNSZXF1ZXN0ICovXG4vKiogQHR5cGVkZWYge3thYmlsaXRpZXM6IExvYWRlZEFiaWxpdHlbXX19IExvYWRBYmlsaXRpZXNSZXNwb25zZSAqL1xuLyoqIEB0eXBlZGVmIHtbQWJpbGl0eVN1YmplY3QsIHN0cmluZ1tdXX0gQWJpbGl0eVJlcXVlc3QgKi9cblxuLyoqIEFiaWxpdHkgaGVscGVyIGFuZCBxdWVyeSBtYXBwZXIuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlckNhbkNhbiB7XG4gIGFiaWxpdGllcyA9IFtdXG4gIGFiaWxpdGllc1RvTG9hZCA9IFtdXG4gIGFiaWxpdGllc1RvTG9hZERhdGEgPSBbXVxuICBhYmlsaXRpZXNHZW5lcmF0aW9uID0gMFxuICBjYWNoZUtleSA9IDBcbiAgbG9hZGluZ0NvdW50ID0gMFxuICBtaXNzaW5nQWJpbGl0aWVzID0gbmV3IE1hcCgpXG4gIG1pc3NpbmdBYmlsaXRpZXNUaW1lb3V0ID0gbnVsbFxuICByZWxvYWRQcm9taXNlcyA9IG5ldyBNYXAoKVxuICByZXNldFByb21pc2UgPSBudWxsXG4gIHJlc2V0dGluZ0dlbmVyYXRpb24gPSBudWxsXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBsb2NrID0gbmV3IFJlYWRlcnNXcml0ZXJMb2NrKClcbiAgYWJpbGl0aWVzQnlOYW1lID0gbmV3IE1hcCgpXG4gIGRlYnVnVG9rZW5zID0gbmV3IFNldCgpXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNoYXJlZCBDYW5DYW4gaGVscGVyIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7QXBpTWFrZXJDYW5DYW59XG4gICAqL1xuICBzdGF0aWMgY3VycmVudCAoKSB7XG4gICAgaWYgKCFzaGFyZWQuY3VycmVudEFwaU1ha2VyQ2FuQ2FuKSBzaGFyZWQuY3VycmVudEFwaU1ha2VyQ2FuQ2FuID0gbmV3IEFwaU1ha2VyQ2FuQ2FuKClcblxuICAgIHJldHVybiBzaGFyZWQuY3VycmVudEFwaU1ha2VyQ2FuQ2FuXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbG9hZGVkIHBlcm1pc3Npb24gdmFsdWUgZm9yIG9uZSBhYmlsaXR5IGFuZCBzdWJqZWN0IHBhaXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhYmlsaXR5XG4gICAqIEBwYXJhbSB7QWJpbGl0eVN1YmplY3R9IHN1YmplY3RcbiAgICogQHBhcmFtIHtDYW5PcHRpb25zfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtib29sZWFuIHwgbnVsbH1cbiAgICovXG4gIGNhbiAoYWJpbGl0eSwgc3ViamVjdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KVxuXG4gICAgaWYgKGZvdW5kQWJpbGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQWJpbGl0eSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuICAgICAgdGhpcy5yZWNvcmRNaXNzaW5nQWJpbGl0eShub3JtYWxpemVkQWJpbGl0eSwgc3ViamVjdClcblxuICAgICAgaWYgKG9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgbGV0IHN1YmplY3RMYWJlbCA9IHN1YmplY3RcblxuICAgICAgICAvLyBUcmFuc2xhdGUgcmVzb3VyY2UtbW9kZWxzIGludG8gY2xhc3MgbmFtZSBzdHJpbmdzXG4gICAgICAgIGlmICh0eXBlb2Ygc3ViamVjdCA9PSBcImZ1bmN0aW9uXCIgJiYgc3ViamVjdC5tb2RlbENsYXNzRGF0YSkge1xuICAgICAgICAgIHN1YmplY3RMYWJlbCA9IGRpZ2coc3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEFiaWxpdHkgbm90IGxvYWRlZCAke3N1YmplY3RMYWJlbH0jJHtub3JtYWxpemVkQWJpbGl0eX1gLCB7YWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllcywgYWJpbGl0eSwgc3ViamVjdH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkaWdnKGZvdW5kQWJpbGl0eSwgXCJjYW5cIilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUXVldWVzIG9uZSBhYmlsaXR5IGxvb2t1cCB0byBiZSBsb2FkZWQgZnJvbSB0aGUgYmFja2VuZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFiaWxpdHlcbiAgICogQHBhcmFtIHtBYmlsaXR5U3ViamVjdH0gc3ViamVjdFxuICAgKi9cbiAgcmVjb3JkTWlzc2luZ0FiaWxpdHkgKGFiaWxpdHksIHN1YmplY3QpIHtcbiAgICBsZXQgbWlzc2luZ0FiaWxpdHlTZXQgPSB0aGlzLm1pc3NpbmdBYmlsaXRpZXMuZ2V0KHN1YmplY3QpXG5cbiAgICBpZiAoIW1pc3NpbmdBYmlsaXR5U2V0KSB7XG4gICAgICBtaXNzaW5nQWJpbGl0eVNldCA9IG5ldyBTZXQoKVxuICAgICAgdGhpcy5taXNzaW5nQWJpbGl0aWVzLnNldChzdWJqZWN0LCBtaXNzaW5nQWJpbGl0eVNldClcbiAgICB9XG5cbiAgICBpZiAobWlzc2luZ0FiaWxpdHlTZXQuaGFzKGFiaWxpdHkpKSByZXR1cm5cblxuICAgIG1pc3NpbmdBYmlsaXR5U2V0LmFkZChhYmlsaXR5KVxuICAgIHRoaXMucXVldWVNaXNzaW5nQWJpbGl0aWVzTG9hZCgpXG4gIH1cblxuICAvKiogcXVldWVNaXNzaW5nQWJpbGl0aWVzTG9hZC4gKi9cbiAgcXVldWVNaXNzaW5nQWJpbGl0aWVzTG9hZCAoKSB7XG4gICAgaWYgKHRoaXMubWlzc2luZ0FiaWxpdGllc1RpbWVvdXQpIHJldHVyblxuXG4gICAgdGhpcy5taXNzaW5nQWJpbGl0aWVzVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5sb2FkTWlzc2luZ0FiaWxpdGllcywgMClcbiAgfVxuXG4gIC8qKiBsb2FkTWlzc2luZ0FiaWxpdGllcy4gKi9cbiAgbG9hZE1pc3NpbmdBYmlsaXRpZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgbWlzc2luZ0FiaWxpdGllcyA9IHRoaXMubWlzc2luZ0FiaWxpdGllc1xuXG4gICAgdGhpcy5taXNzaW5nQWJpbGl0aWVzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5taXNzaW5nQWJpbGl0aWVzVGltZW91dCA9IG51bGxcblxuICAgIGNvbnN0IGFiaWxpdGllc1RvTG9hZCA9IC8qKiBAdHlwZSB7QWJpbGl0eVJlcXVlc3RbXX0gKi8gKFtdKVxuXG4gICAgZm9yIChjb25zdCBbc3ViamVjdCwgYWJpbGl0aWVzXSBvZiBtaXNzaW5nQWJpbGl0aWVzLmVudHJpZXMoKSkge1xuICAgICAgYWJpbGl0aWVzVG9Mb2FkLnB1c2goW3N1YmplY3QsIEFycmF5LmZyb20oYWJpbGl0aWVzKV0pXG4gICAgfVxuXG4gICAgaWYgKGFiaWxpdGllc1RvTG9hZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvYWRBYmlsaXRpZXMoYWJpbGl0aWVzVG9Mb2FkKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBvbmUgcHJldmlvdXNseSBsb2FkZWQgYWJpbGl0eSByZXN1bHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhYmlsaXR5XG4gICAqIEBwYXJhbSB7QWJpbGl0eVN1YmplY3R9IHN1YmplY3RcbiAgICogQHJldHVybnMge0xvYWRlZEFiaWxpdHkgfCB1bmRlZmluZWR9XG4gICAqL1xuICBmaW5kQWJpbGl0eSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIGNvbnN0IGFiaWxpdHlLZXkgPSB0aGlzLmFiaWxpdHlLZXkoYWJpbGl0eSwgc3ViamVjdClcbiAgICBpZiAoIWFiaWxpdHlLZXkpIHJldHVybiB1bmRlZmluZWRcblxuICAgIHJldHVybiB0aGlzLmFiaWxpdGllc0J5TmFtZS5nZXQoYWJpbGl0eUtleSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgb25lIGFiaWxpdHkgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhYmlsaXR5XG4gICAqIEBwYXJhbSB7QWJpbGl0eVN1YmplY3R9IHN1YmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0FiaWxpdHlMb2FkZWQgKGFiaWxpdHksIHN1YmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KSAhPT0gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIGFiaWxpdGllcyBhcmUgY3VycmVudGx5IGxvYWRpbmcgb3IgcmVzZXR0aW5nLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzUmVsb2FkaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwIHx8IHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiAhPT0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNhY2hlIGtleSB0aGF0IGNoYW5nZXMgd2hlbmV2ZXIgbG9hZGVkIGFiaWxpdGllcyBjaGFuZ2UuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRDYWNoZUtleSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVLZXlcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGRlYnVnIGxvZ2dpbmcgZm9yIG9uZSBjYWxsZXIgdG9rZW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3ltYm9sfSB0b2tlblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWRcbiAgICovXG4gIHNldERlYnVnICh0b2tlbiwgZW5hYmxlZCkge1xuICAgIGlmICghdG9rZW4pIHJldHVyblxuXG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIHRoaXMuZGVidWdUb2tlbnMuYWRkKHRva2VuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlYnVnVG9rZW5zLmRlbGV0ZSh0b2tlbilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIGFueSBjYWxsZXIgaGFzIGVuYWJsZWQgQ2FuQ2FuIGRlYnVnIGxvZ2dpbmcuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNEZWJ1Z2dpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLmRlYnVnVG9rZW5zLnNpemUgPiAwXG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIG9uZSBkZWJ1ZyBsb2cgbWVzc2FnZSB3aGVuIGRlYnVnZ2luZyBpcyBlbmFibGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKi9cbiAgZGVidWdMb2cgKG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5pc0RlYnVnZ2luZygpKSB7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIGJhdGNoIG9mIGFiaWxpdGllcyBmcm9tIHRoZSBiYWNrZW5kLlxuICAgKiBAcGFyYW0ge0FiaWxpdHlSZXF1ZXN0W119IGFiaWxpdGllc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGxvYWRBYmlsaXRpZXMgKGFiaWxpdGllcykge1xuICAgIGNvbnN0IGdlbmVyYXRpb24gPSB0aGlzLmFiaWxpdGllc0dlbmVyYXRpb25cbiAgICBjb25zdCBsb2FkU3VtbWFyeSA9IFtcbiAgICAgIFwiW2Nhbi1jYW4tZGVidWddIGxvYWRBYmlsaXRpZXM6c3RhcnRcIixcbiAgICAgIGBnZW5lcmF0aW9uPSR7Z2VuZXJhdGlvbn1gLFxuICAgICAgYHJlcXVlc3RzPSR7YWJpbGl0aWVzLmxlbmd0aH1gXG4gICAgXS5qb2luKFwiOyBcIilcbiAgICB0aGlzLmRlYnVnTG9nKGxvYWRTdW1tYXJ5KVxuXG4gICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gMVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubG9jay5yZWFkKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgYWJpbGl0eURhdGEgb2YgYWJpbGl0aWVzKSB7XG4gICAgICAgICAgY29uc3Qgc3ViamVjdCA9IGFiaWxpdHlEYXRhWzBdXG5cbiAgICAgICAgICBpZiAoIXN1YmplY3QpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdWJqZWN0IGdpdmVuIGluIGFiaWxpdGllczogJHtzdWJqZWN0fSAtICR7SlNPTi5zdHJpbmdpZnkoYWJpbGl0aWVzKX1gKVxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhYmlsaXR5RGF0YVsxXSkpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYW4gYXJyYXkgb2YgYWJpbGl0aWVzIGJ1dCBnb3Q6ICR7dHlwZW9mIGFiaWxpdHlEYXRhWzFdfTogJHthYmlsaXR5RGF0YVsxXX1gKVxuXG4gICAgICAgICAgZm9yIChjb25zdCBhYmlsaXR5IG9mIGFiaWxpdHlEYXRhWzFdKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5sb2FkQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KVxuXG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICB9KVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCBkb25lU3VtbWFyeSA9IFtcbiAgICAgICAgXCJbY2FuLWNhbi1kZWJ1Z10gbG9hZEFiaWxpdGllczpkb25lXCIsXG4gICAgICAgIGBnZW5lcmF0aW9uPSR7Z2VuZXJhdGlvbn1gLFxuICAgICAgICBgY3VycmVudEdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YCxcbiAgICAgICAgYGxvYWRpbmdDb3VudD0ke3RoaXMubG9hZGluZ0NvdW50fWBcbiAgICAgIF0uam9pbihcIjsgXCIpXG4gICAgICB0aGlzLmRlYnVnTG9nKGRvbmVTdW1tYXJ5KVxuICAgICAgaWYgKHRoaXMubG9hZGluZ0NvdW50ID4gMCkgdGhpcy5sb2FkaW5nQ291bnQgLT0gMVxuICAgICAgaWYgKHRoaXMucmVzZXR0aW5nR2VuZXJhdGlvbiA9PT0gZ2VuZXJhdGlvbikgdGhpcy5yZXNldHRpbmdHZW5lcmF0aW9uID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBvbmUgYWJpbGl0eSBhbmQgcmVzb2x2ZXMgb25jZSBpdCBpcyBhdmFpbGFibGUgbG9jYWxseS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFiaWxpdHlcbiAgICogQHBhcmFtIHtBYmlsaXR5U3ViamVjdH0gc3ViamVjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGxvYWRBYmlsaXR5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkQWJpbGl0eSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuXG4gICAgICBpZiAodGhpcy5pc0FiaWxpdHlMb2FkZWQobm9ybWFsaXplZEFiaWxpdHksIHN1YmplY3QpKSB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5hYmlsaXRpZXNUb0xvYWQuZmluZCgoYWJpbGl0eVRvTG9hZCkgPT4gZGlnZyhhYmlsaXR5VG9Mb2FkLCBcImFiaWxpdHlcIikgPT0gbm9ybWFsaXplZEFiaWxpdHkgJiZcbiAgICAgICAgZGlnZyhhYmlsaXR5VG9Mb2FkLCBcInN1YmplY3RcIikgPT0gc3ViamVjdFxuICAgICAgKVxuXG4gICAgICBpZiAoZm91bmRBYmlsaXR5KSB7XG4gICAgICAgIGZvdW5kQWJpbGl0eS5jYWxsYmFja3MucHVzaChyZXNvbHZlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNUb0xvYWQucHVzaCh7YWJpbGl0eTogbm9ybWFsaXplZEFiaWxpdHksIGNhbGxiYWNrczogW3Jlc29sdmVdLCBzdWJqZWN0fSlcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhLnB1c2goe2FiaWxpdHk6IG5vcm1hbGl6ZWRBYmlsaXR5LCBzdWJqZWN0fSlcblxuICAgICAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBxdWV1ZUFiaWxpdGllc1JlcXVlc3QuICovXG4gIHF1ZXVlQWJpbGl0aWVzUmVxdWVzdCAoKSB7XG4gICAgaWYgKHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCkgcmV0dXJuXG5cbiAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuc2VuZEFiaWxpdGllc1JlcXVlc3QsIDApXG4gIH1cblxuICBhc3luYyByZXNldEFiaWxpdGllcyAoKSB7XG4gICAgaWYgKHRoaXMucmVzZXRQcm9taXNlKSByZXR1cm4gdGhpcy5yZXNldFByb21pc2VcblxuICAgIHRoaXMucmVzZXRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMubG9jay53cml0ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWJpbGl0aWVzID0gW11cbiAgICAgICAgdGhpcy5hYmlsaXRpZXNCeU5hbWUgPSBuZXcgTWFwKClcbiAgICAgICAgdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uICs9IDFcbiAgICAgICAgdGhpcy5yZXNldHRpbmdHZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG4gICAgICAgIHRoaXMuY2FjaGVLZXkgKz0gMVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc2V0U3VtbWFyeSA9IFtcbiAgICAgICAgXCJbY2FuLWNhbi1kZWJ1Z10gcmVzZXRBYmlsaXRpZXNcIixcbiAgICAgICAgYGdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YCxcbiAgICAgICAgYGNhY2hlS2V5PSR7dGhpcy5jYWNoZUtleX1gLFxuICAgICAgICBgcXVldWVkPSR7dGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhLmxlbmd0aH1gXG4gICAgICBdLmpvaW4oXCI7IFwiKVxuICAgICAgdGhpcy5kZWJ1Z0xvZyhyZXNldFN1bW1hcnkpXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwib25SZXNldEFiaWxpdGllc1wiKVxuICAgIH0pKClcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlc2V0UHJvbWlzZVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJlc2V0UHJvbWlzZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIGFuZCByZWxvYWRzIG9uZSBiYXRjaCBvZiBhYmlsaXRpZXMsIG9wdGlvbmFsbHkgZGVkdXBlZCBieSBrZXkuXG4gICAqIEBwYXJhbSB7QWJpbGl0eVJlcXVlc3RbXX0gYWJpbGl0aWVzXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSByZWxvYWRLZXlcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyByZWxvYWRBYmlsaXRpZXMgKGFiaWxpdGllcywgcmVsb2FkS2V5KSB7XG4gICAgaWYgKHJlbG9hZEtleSAmJiB0aGlzLnJlbG9hZFByb21pc2VzLmhhcyhyZWxvYWRLZXkpKSB7XG4gICAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gcmVsb2FkQWJpbGl0aWVzOmRlZHVwZSByZWxvYWRLZXk9JHtyZWxvYWRLZXl9YClcbiAgICAgIHJldHVybiB0aGlzLnJlbG9hZFByb21pc2VzLmdldChyZWxvYWRLZXkpXG4gICAgfVxuXG4gICAgY29uc3QgcmVsb2FkU3VtbWFyeSA9IFtcbiAgICAgIFwiW2Nhbi1jYW4tZGVidWddIHJlbG9hZEFiaWxpdGllczpzdGFydFwiLFxuICAgICAgYHJlbG9hZEtleT0ke3JlbG9hZEtleSB8fCBcIm5vbmVcIn1gLFxuICAgICAgYGdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YCxcbiAgICAgIGByZXF1ZXN0cz0ke2FiaWxpdGllcy5sZW5ndGh9YFxuICAgIF0uam9pbihcIjsgXCIpXG4gICAgdGhpcy5kZWJ1Z0xvZyhyZWxvYWRTdW1tYXJ5KVxuXG4gICAgLyoqIHByb21pc2UuICovXG4gICAgY29uc3QgcHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnJlc2V0QWJpbGl0aWVzKClcbiAgICAgIGF3YWl0IHRoaXMubG9hZEFiaWxpdGllcyhhYmlsaXRpZXMpXG4gICAgfSkoKVxuXG4gICAgaWYgKHJlbG9hZEtleSkgdGhpcy5yZWxvYWRQcm9taXNlcy5zZXQocmVsb2FkS2V5LCBwcm9taXNlKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHByb21pc2VcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kZWJ1Z0xvZyhgW2Nhbi1jYW4tZGVidWddIHJlbG9hZEFiaWxpdGllczpkb25lIHJlbG9hZEtleT0ke3JlbG9hZEtleSB8fCBcIm5vbmVcIn07IGdlbmVyYXRpb249JHt0aGlzLmFiaWxpdGllc0dlbmVyYXRpb259YClcbiAgICAgIGlmIChyZWxvYWRLZXkpIHRoaXMucmVsb2FkUHJvbWlzZXMuZGVsZXRlKHJlbG9hZEtleSlcbiAgICB9XG4gIH1cblxuICAvKiogc2VuZEFiaWxpdGllc1JlcXVlc3QuICovXG4gIHNlbmRBYmlsaXRpZXNSZXF1ZXN0ID0gYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCA9IG51bGxcbiAgICBjb25zdCBnZW5lcmF0aW9uID0gdGhpcy5hYmlsaXRpZXNHZW5lcmF0aW9uXG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkID0gdGhpcy5hYmlsaXRpZXNUb0xvYWRcbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWREYXRhID0gdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhXG5cbiAgICB0aGlzLmFiaWxpdGllc1RvTG9hZCA9IFtdXG4gICAgdGhpcy5hYmlsaXRpZXNUb0xvYWREYXRhID0gW11cbiAgICB0aGlzLmRlYnVnTG9nKGBbY2FuLWNhbi1kZWJ1Z10gc2VuZEFiaWxpdGllc1JlcXVlc3Q6c3RhcnQgZ2VuZXJhdGlvbj0ke2dlbmVyYXRpb259OyBxdWV1ZWQ9JHthYmlsaXRpZXNUb0xvYWREYXRhLmxlbmd0aH1gKVxuXG4gICAgbGV0IGFiaWxpdGllcyA9IFtdXG4gICAgbGV0IGRpZEZhaWwgPSBmYWxzZVxuICAgIGxldCByZXF1ZXN0RXJyb3JcblxuICAgIC8vIExvYWQgYWJpbGl0aWVzIGZyb20gYmFja2VuZFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAvKiogQHR5cGUge0xvYWRBYmlsaXRpZXNSZXNwb25zZX0gKi8gKGF3YWl0IFNlcnZpY2VzLmN1cnJlbnQoKS5zZW5kUmVxdWVzdChcIkNhbkNhbjo6TG9hZEFiaWxpdGllc1wiLCAvKiogQHR5cGUge0xvYWRBYmlsaXRpZXNSZXF1ZXN0fSAqLyAoe1xuICAgICAgICByZXF1ZXN0OiBhYmlsaXRpZXNUb0xvYWREYXRhXG4gICAgICB9KSkpXG4gICAgICBhYmlsaXRpZXMgPSBkaWdnKHJlc3VsdCwgXCJhYmlsaXRpZXNcIilcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFiaWxpdGllcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBDYW5DYW46OkxvYWRBYmlsaXRpZXMgcmVzcG9uc2UgYWJpbGl0aWVzIHRvIGJlIGFuIGFycmF5LCBnb3Q6ICR7dHlwZW9mIGFiaWxpdGllc31gKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkaWRGYWlsID0gdHJ1ZVxuICAgICAgcmVxdWVzdEVycm9yID0gZXJyb3JcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBhYmlsaXRpZXNcIiwgZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKGdlbmVyYXRpb24gIT09IHRoaXMuYWJpbGl0aWVzR2VuZXJhdGlvbikge1xuICAgICAgY29uc3Qgc3RhbGVSZXNwb25zZURlYnVnID0gW1xuICAgICAgICBcIltjYW4tY2FuLWRlYnVnXSBzZW5kQWJpbGl0aWVzUmVxdWVzdDpzdGFsZS1yZXNwb25zZVwiLFxuICAgICAgICBgcmVxdWVzdEdlbmVyYXRpb249JHtnZW5lcmF0aW9ufWAsXG4gICAgICAgIGBjdXJyZW50R2VuZXJhdGlvbj0ke3RoaXMuYWJpbGl0aWVzR2VuZXJhdGlvbn1gLFxuICAgICAgICBgcmVxdWV1ZT0ke2FiaWxpdGllc1RvTG9hZC5sZW5ndGh9YFxuICAgICAgXS5qb2luKFwiOyBcIilcbiAgICAgIHRoaXMuZGVidWdMb2coc3RhbGVSZXNwb25zZURlYnVnKVxuICAgICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXNUb0xvYWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBhYmlsaXR5RGF0YS5jYWxsYmFja3MpIHtcbiAgICAgICAgICB0aGlzLmxvYWRBYmlsaXR5KGFiaWxpdHlEYXRhLmFiaWxpdHksIGFiaWxpdHlEYXRhLnN1YmplY3QpLnRoZW4oY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGRpZEZhaWwpIHtcbiAgICAgIHRoaXMuZGVidWdMb2coYFtjYW4tY2FuLWRlYnVnXSBzZW5kQWJpbGl0aWVzUmVxdWVzdDpmYWlsZWQgZ2VuZXJhdGlvbj0ke2dlbmVyYXRpb259OyBxdWV1ZWQ9JHthYmlsaXRpZXNUb0xvYWQubGVuZ3RofWApXG4gICAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllc1RvTG9hZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGFiaWxpdHlEYXRhLmNhbGxiYWNrcykge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZXNvbHZlIGNhbGxiYWNrcyB0byBhdm9pZCBkZWFkbG9ja3MgZm9yIHdhaXRlcnMgZXZlbiB3aGVuIGxvYWQgZmFpbGVkLlxuICAgICAgaWYgKHJlcXVlc3RFcnJvcikgdGhpcy5yZXBvcnRVbmhhbmRsZWRBc3luY0Vycm9yKHJlcXVlc3RFcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgbG9hZGVkIGFiaWxpdGllc1xuICAgIHRoaXMuYWJpbGl0aWVzID0gdGhpcy5hYmlsaXRpZXMuY29uY2F0KGFiaWxpdGllcylcbiAgICB0aGlzLmluZGV4QWJpbGl0aWVzQnlOYW1lKGFiaWxpdGllcylcbiAgICB0aGlzLmNhY2hlS2V5ICs9IDFcbiAgICB0aGlzLmRlYnVnTG9nKFxuICAgICAgYFtjYW4tY2FuLWRlYnVnXSBzZW5kQWJpbGl0aWVzUmVxdWVzdDpzdWNjZXNzIGdlbmVyYXRpb249JHtnZW5lcmF0aW9ufTsgbG9hZGVkPSR7YWJpbGl0aWVzLmxlbmd0aH07IGNhY2hlS2V5PSR7dGhpcy5jYWNoZUtleX1gXG4gICAgKVxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvbkFiaWxpdGllc0xvYWRlZFwiLCB7Y2FjaGVLZXk6IHRoaXMuY2FjaGVLZXl9KVxuXG4gICAgLy8gQ2FsbCB0aGUgY2FsbGJhY2tzIHRoYXQgYXJlIHdhaXRpbmcgZm9yIHRoZSBhYmlsaXR5IHRvIGhhdmUgYmVlbiBsb2FkZWRcbiAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllc1RvTG9hZCkge1xuICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBhYmlsaXR5RGF0YS5jYWxsYmFja3MpIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRleGVzIGxvYWRlZCBhYmlsaXRpZXMgYnkgdGhlIGxvb2t1cCBrZXkgdXNlZCBieSBgZmluZEFiaWxpdHlgLlxuICAgKiBAcGFyYW0ge0xvYWRlZEFiaWxpdHlbXX0gYWJpbGl0aWVzXG4gICAqL1xuICBpbmRleEFiaWxpdGllc0J5TmFtZSAoYWJpbGl0aWVzKSB7XG4gICAgZm9yIChjb25zdCBhYmlsaXR5RGF0YSBvZiBhYmlsaXRpZXMpIHtcbiAgICAgIGlmIChhYmlsaXR5RGF0YSAmJiB0eXBlb2YgYWJpbGl0eURhdGEgPT0gXCJvYmplY3RcIikge1xuICAgICAgICBjb25zdCBhYmlsaXR5S2V5ID0gdGhpcy5hYmlsaXR5S2V5KGRpZ2coYWJpbGl0eURhdGEsIFwiYWJpbGl0eVwiKSwgZGlnZyhhYmlsaXR5RGF0YSwgXCJzdWJqZWN0XCIpKVxuXG4gICAgICAgIGlmIChhYmlsaXR5S2V5KSB7XG4gICAgICAgICAgdGhpcy5hYmlsaXRpZXNCeU5hbWUuc2V0KGFiaWxpdHlLZXksIGFiaWxpdHlEYXRhKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgaW50ZXJuYWwga2V5IHVzZWQgdG8gbG9vayB1cCBvbmUgYWJpbGl0eSByZXN1bHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhYmlsaXR5XG4gICAqIEBwYXJhbSB7QWJpbGl0eVN1YmplY3R9IHN1YmplY3RcbiAgICogQHJldHVybnMge251bGwgfCBzdHJpbmd9XG4gICAqL1xuICBhYmlsaXR5S2V5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgaWYgKCFhYmlsaXR5KSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3Qgc3ViamVjdE5hbWUgPSB0aGlzLnN1YmplY3ROYW1lKHN1YmplY3QpXG4gICAgaWYgKCFzdWJqZWN0TmFtZSkgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYWJpbGl0eSl9OiR7c3ViamVjdE5hbWV9YFxuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBzdWJqZWN0IG5hbWUgc2VudCB0byB0aGUgYmFja2VuZCBhYmlsaXR5IGxvYWRlci5cbiAgICogQHBhcmFtIHtBYmlsaXR5U3ViamVjdH0gc3ViamVjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG4gIHN1YmplY3ROYW1lKHN1YmplY3QpIHtcbiAgICBpZiAoIXN1YmplY3QpIHJldHVybiBudWxsXG5cbiAgICBpZiAodHlwZW9mIHN1YmplY3QgPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHN1YmplY3RcbiAgICB9XG5cbiAgICBpZiAoc3ViamVjdC5tb2RlbENsYXNzRGF0YSkge1xuICAgICAgcmV0dXJuIGRpZ2coc3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcbiAgICB9XG5cbiAgICBpZiAoc3ViamVjdC5yZXNvdXJjZURhdGEpIHtcbiAgICAgIHJldHVybiBkaWdnKHN1YmplY3QucmVzb3VyY2VEYXRhKCksIFwibmFtZVwiKVxuICAgIH1cblxuICAgIGlmIChzdWJqZWN0Lm5hbWUpIHtcbiAgICAgIHJldHVybiBzdWJqZWN0Lm5hbWVcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXRocm93cyBhbiBhc3luYyBlcnJvciBvbiB0aGUgbWljcm90YXNrIHF1ZXVlIGZvciBleGlzdGluZyBoYW5kbGVycy5cbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3JcbiAgICovXG4gIHJlcG9ydFVuaGFuZGxlZEFzeW5jRXJyb3IgKGVycm9yKSB7XG4gICAgaWYgKCFlcnJvcikgcmV0dXJuXG5cbiAgICBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgfVxufVxuIl19
|
|
@@ -1,4 +1,26 @@
|
|
|
1
|
-
declare function _default():
|
|
1
|
+
declare function _default(): ActionCableConsumer;
|
|
2
2
|
export default _default;
|
|
3
3
|
export function resetChannelsConsumer(): void;
|
|
4
|
+
export type ActionCablePayloadValue = object | string | number | boolean | null | Array<object | string | number | boolean | null>;
|
|
5
|
+
export type ActionCableSubscription = {
|
|
6
|
+
perform: (action: string, data: {
|
|
7
|
+
[key: string]: ActionCablePayloadValue;
|
|
8
|
+
}) => void;
|
|
9
|
+
unsubscribe: () => void;
|
|
10
|
+
};
|
|
11
|
+
export type ActionCableChannelCallbacks = {
|
|
12
|
+
connected?: () => void;
|
|
13
|
+
disconnected?: () => void;
|
|
14
|
+
received?: (data: {
|
|
15
|
+
[key: string]: ActionCablePayloadValue;
|
|
16
|
+
}) => void;
|
|
17
|
+
rejected?: () => void;
|
|
18
|
+
subscribed?: () => void;
|
|
19
|
+
};
|
|
20
|
+
export type ActionCableConsumer = {
|
|
21
|
+
disconnect: () => void;
|
|
22
|
+
subscriptions: {
|
|
23
|
+
create: (channel: string | object, callbacks?: ActionCableChannelCallbacks) => ActionCableSubscription;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
4
26
|
//# sourceMappingURL=channels-consumer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels-consumer.d.ts","sourceRoot":"/src/","sources":["channels-consumer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channels-consumer.d.ts","sourceRoot":"/src/","sources":["channels-consumer.js"],"names":[],"mappings":"AAsBe,6BADD,mBAAmB,CAShC;;AAGM,yCADO,IAAI,CAUjB;sCApCY,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;;aAE3F,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAAA;KAAC,KAAK,IAAI;iBACxE,MAAM,IAAI;;;gBAEV,MAAM,IAAI;mBACV,MAAM,IAAI;eACV,CAAC,IAAI,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,CAAA;KAAC,KAAK,IAAI;eACxD,MAAM,IAAI;iBACV,MAAM,IAAI;;;gBAEV,MAAM,IAAI;mBACV;QAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,2BAA2B,KAAK,uBAAuB,CAAA;KAAC"}
|
|
@@ -1,19 +1,37 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import Config from "./config.js";
|
|
2
3
|
// @ts-expect-error
|
|
3
4
|
import { createConsumer } from "@rails/actioncable"; // eslint-disable-line import/no-unresolved
|
|
4
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {object | string | number | boolean | null | Array<object | string | number | boolean | null>} ActionCablePayloadValue
|
|
7
|
+
* @typedef {object} ActionCableSubscription
|
|
8
|
+
* @property {(action: string, data: {[key: string]: ActionCablePayloadValue}) => void} perform
|
|
9
|
+
* @property {() => void} unsubscribe
|
|
10
|
+
* @typedef {object} ActionCableChannelCallbacks
|
|
11
|
+
* @property {() => void} [connected]
|
|
12
|
+
* @property {() => void} [disconnected]
|
|
13
|
+
* @property {(data: {[key: string]: ActionCablePayloadValue}) => void} [received]
|
|
14
|
+
* @property {() => void} [rejected]
|
|
15
|
+
* @property {() => void} [subscribed]
|
|
16
|
+
* @typedef {object} ActionCableConsumer
|
|
17
|
+
* @property {() => void} disconnect
|
|
18
|
+
* @property {{create: (channel: string | object, callbacks?: ActionCableChannelCallbacks) => ActionCableSubscription}} subscriptions
|
|
19
|
+
*/
|
|
20
|
+
/** @returns {ActionCableConsumer} */
|
|
5
21
|
export default () => {
|
|
6
|
-
|
|
7
|
-
|
|
22
|
+
const globalChannelsConsumer = /** @type {{apiMakerChannelsConsumer?: ActionCableConsumer}} */ (globalThis);
|
|
23
|
+
if (!globalChannelsConsumer.apiMakerChannelsConsumer) {
|
|
24
|
+
globalChannelsConsumer.apiMakerChannelsConsumer = /** @type {ActionCableConsumer} */ (createConsumer(Config.getCableUrl()));
|
|
8
25
|
}
|
|
9
|
-
return
|
|
26
|
+
return globalChannelsConsumer.apiMakerChannelsConsumer;
|
|
10
27
|
};
|
|
11
28
|
/** @returns {void} */
|
|
12
29
|
export const resetChannelsConsumer = () => {
|
|
13
|
-
|
|
30
|
+
const globalChannelsConsumer = /** @type {{apiMakerChannelsConsumer?: ActionCableConsumer}} */ (globalThis);
|
|
31
|
+
if (!globalChannelsConsumer.apiMakerChannelsConsumer) {
|
|
14
32
|
return;
|
|
15
33
|
}
|
|
16
|
-
|
|
17
|
-
delete
|
|
34
|
+
globalChannelsConsumer.apiMakerChannelsConsumer.disconnect();
|
|
35
|
+
delete globalChannelsConsumer.apiMakerChannelsConsumer;
|
|
18
36
|
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbHMtY29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNoYW5uZWxzLWNvbnN1bWVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFDWixPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsbUJBQW1CO0FBQ25CLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQSxDQUFDLDJDQUEyQztBQUU3Rjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILHFDQUFxQztBQUNyQyxlQUFlLEdBQUcsRUFBRTtJQUNsQixNQUFNLHNCQUFzQixHQUFHLCtEQUErRCxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUE7SUFFM0csSUFBSSxDQUFDLHNCQUFzQixDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDckQsc0JBQXNCLENBQUMsd0JBQXdCLEdBQUcsa0NBQWtDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUM3SCxDQUFDO0lBRUQsT0FBTyxzQkFBc0IsQ0FBQyx3QkFBd0IsQ0FBQTtBQUN4RCxDQUFDLENBQUE7QUFFRCxzQkFBc0I7QUFDdEIsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxFQUFFO0lBQ3hDLE1BQU0sc0JBQXNCLEdBQUcsK0RBQStELENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUUzRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNyRCxPQUFNO0lBQ1IsQ0FBQztJQUVELHNCQUFzQixDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxDQUFBO0lBQzVELE9BQU8sc0JBQXNCLENBQUMsd0JBQXdCLENBQUE7QUFDeEQsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuL2NvbmZpZy5qc1wiXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5pbXBvcnQge2NyZWF0ZUNvbnN1bWVyfSBmcm9tIFwiQHJhaWxzL2FjdGlvbmNhYmxlXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3QgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IEFycmF5PG9iamVjdCB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsPn0gQWN0aW9uQ2FibGVQYXlsb2FkVmFsdWVcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFjdGlvbkNhYmxlU3Vic2NyaXB0aW9uXG4gKiBAcHJvcGVydHkgeyhhY3Rpb246IHN0cmluZywgZGF0YToge1trZXk6IHN0cmluZ106IEFjdGlvbkNhYmxlUGF5bG9hZFZhbHVlfSkgPT4gdm9pZH0gcGVyZm9ybVxuICogQHByb3BlcnR5IHsoKSA9PiB2b2lkfSB1bnN1YnNjcmliZVxuICogQHR5cGVkZWYge29iamVjdH0gQWN0aW9uQ2FibGVDaGFubmVsQ2FsbGJhY2tzXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IFtjb25uZWN0ZWRdXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IFtkaXNjb25uZWN0ZWRdXG4gKiBAcHJvcGVydHkgeyhkYXRhOiB7W2tleTogc3RyaW5nXTogQWN0aW9uQ2FibGVQYXlsb2FkVmFsdWV9KSA9PiB2b2lkfSBbcmVjZWl2ZWRdXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IFtyZWplY3RlZF1cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gW3N1YnNjcmliZWRdXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpb25DYWJsZUNvbnN1bWVyXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IGRpc2Nvbm5lY3RcbiAqIEBwcm9wZXJ0eSB7e2NyZWF0ZTogKGNoYW5uZWw6IHN0cmluZyB8IG9iamVjdCwgY2FsbGJhY2tzPzogQWN0aW9uQ2FibGVDaGFubmVsQ2FsbGJhY2tzKSA9PiBBY3Rpb25DYWJsZVN1YnNjcmlwdGlvbn19IHN1YnNjcmlwdGlvbnNcbiAqL1xuXG4vKiogQHJldHVybnMge0FjdGlvbkNhYmxlQ29uc3VtZXJ9ICovXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IGdsb2JhbENoYW5uZWxzQ29uc3VtZXIgPSAvKiogQHR5cGUge3thcGlNYWtlckNoYW5uZWxzQ29uc3VtZXI/OiBBY3Rpb25DYWJsZUNvbnN1bWVyfX0gKi8gKGdsb2JhbFRoaXMpXG5cbiAgaWYgKCFnbG9iYWxDaGFubmVsc0NvbnN1bWVyLmFwaU1ha2VyQ2hhbm5lbHNDb25zdW1lcikge1xuICAgIGdsb2JhbENoYW5uZWxzQ29uc3VtZXIuYXBpTWFrZXJDaGFubmVsc0NvbnN1bWVyID0gLyoqIEB0eXBlIHtBY3Rpb25DYWJsZUNvbnN1bWVyfSAqLyAoY3JlYXRlQ29uc3VtZXIoQ29uZmlnLmdldENhYmxlVXJsKCkpKVxuICB9XG5cbiAgcmV0dXJuIGdsb2JhbENoYW5uZWxzQ29uc3VtZXIuYXBpTWFrZXJDaGFubmVsc0NvbnN1bWVyXG59XG5cbi8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbmV4cG9ydCBjb25zdCByZXNldENoYW5uZWxzQ29uc3VtZXIgPSAoKSA9PiB7XG4gIGNvbnN0IGdsb2JhbENoYW5uZWxzQ29uc3VtZXIgPSAvKiogQHR5cGUge3thcGlNYWtlckNoYW5uZWxzQ29uc3VtZXI/OiBBY3Rpb25DYWJsZUNvbnN1bWVyfX0gKi8gKGdsb2JhbFRoaXMpXG5cbiAgaWYgKCFnbG9iYWxDaGFubmVsc0NvbnN1bWVyLmFwaU1ha2VyQ2hhbm5lbHNDb25zdW1lcikge1xuICAgIHJldHVyblxuICB9XG5cbiAgZ2xvYmFsQ2hhbm5lbHNDb25zdW1lci5hcGlNYWtlckNoYW5uZWxzQ29uc3VtZXIuZGlzY29ubmVjdCgpXG4gIGRlbGV0ZSBnbG9iYWxDaGFubmVsc0NvbnN1bWVyLmFwaU1ha2VyQ2hhbm5lbHNDb25zdW1lclxufVxuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import Collection from "./collection.js";
|
|
2
3
|
import { digg } from "diggerize";
|
|
3
4
|
import memo from "set-state-compare/build/memo.js";
|
|
@@ -52,4 +53,4 @@ CollectionLoader.propTypes = propTypesExact({
|
|
|
52
53
|
selectColumns: PropTypes.object
|
|
53
54
|
});
|
|
54
55
|
export default memo(CollectionLoader);
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNvbGxlY3Rpb24tbG9hZGVyLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBQ1osT0FBTyxVQUFVLE1BQU0saUJBQWlCLENBQUE7QUFDeEMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQy9CLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQSxDQUFDLG1DQUFtQztBQUN0RSxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVyQyxTQUFTLGdCQUFnQixDQUFDLEVBQUMsU0FBUyxFQUFFLEdBQUcsU0FBUyxFQUFDO0lBQ2pELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUM3QixNQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDekcsTUFBTSxjQUFjLEdBQUc7UUFDckIscUJBQXFCO1FBQ3JCLGNBQWM7UUFDZCxTQUFTO1FBQ1QsV0FBVztRQUNYLGFBQWE7UUFDYixZQUFZO1FBQ1osWUFBWTtRQUNaLGVBQWU7UUFDZixjQUFjO1FBQ2QsK0JBQStCO1FBQy9CLDJCQUEyQjtLQUM1QixDQUFBO0lBQ0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0lBRXJCLEtBQUksTUFBTSxhQUFhLElBQUksY0FBYyxFQUFFLENBQUM7UUFDMUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFDLFNBQVMsRUFBRSxtQkFBbUIsRUFBQyxDQUFDLENBQUE7SUFFOUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLHVIQUF1SDtRQUN2SCxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ2pELENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUVkLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELGdCQUFnQixDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFDMUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNO0lBQzNCLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztJQUM1QyxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO0lBQ3RDLGFBQWEsRUFBRSxTQUFTLENBQUMsTUFBTTtJQUMvQixPQUFPLEVBQUUsU0FBUyxDQUFDLEtBQUs7SUFDeEIsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtJQUNyQyx5QkFBeUIsRUFBRSxTQUFTLENBQUMsSUFBSTtJQUN6QyxxQkFBcUIsRUFBRSxTQUFTLENBQUMsSUFBSTtJQUNyQyxjQUFjLEVBQUUsU0FBUyxDQUFDLElBQUk7SUFDOUIsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJO0lBQzFCLFFBQVEsRUFBRSxTQUFTLENBQUMsS0FBSztJQUN6QixXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUk7SUFDM0IsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNO0lBQzNCLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTTtJQUN6QixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07SUFDeEIsYUFBYSxFQUFFLFNBQVMsQ0FBQyxNQUFNO0NBQ2hDLENBQUMsQ0FBQTtBQUVGLGVBQWUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcbmltcG9ydCBDb2xsZWN0aW9uIGZyb20gXCIuL2NvbGxlY3Rpb24uanNcIlxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCB7dXNlRWZmZWN0fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc29ydC1pbXBvcnRzXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IHVzZUNvbGxlY3Rpb24gZnJvbSBcIi4vdXNlLWNvbGxlY3Rpb24uanNcIlxuaW1wb3J0IHVzZVNoYXBlIGZyb20gXCIuL3VzZS1zaGFwZS5qc1wiXG5cbmZ1bmN0aW9uIENvbGxlY3Rpb25Mb2FkZXIoe2NvbXBvbmVudCwgLi4ucmVzdFByb3BzfSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtc3R5bGVcbiAgY29uc3QgcyA9IHVzZVNoYXBlKHJlc3RQcm9wcylcbiAgY29uc3QgdXNlQ29sbGVjdGlvblJlc3VsdCA9IHVzZUNvbGxlY3Rpb24oLyoqIEB0eXBlIHtQYXJhbWV0ZXJzPHR5cGVvZiB1c2VDb2xsZWN0aW9uPlswXX0gKi8gKHJlc3RQcm9wcykpXG4gIGNvbnN0IGNhY2hlUGFydHNLZXlzID0gW1xuICAgIFwibW9kZWxJZHNDYWNoZVN0cmluZ1wiLFxuICAgIFwib3ZlcmFsbENvdW50XCIsXG4gICAgXCJxUGFyYW1zXCIsXG4gICAgXCJxdWVyeU5hbWVcIixcbiAgICBcInF1ZXJ5UGVyS2V5XCIsXG4gICAgXCJxdWVyeVFOYW1lXCIsXG4gICAgXCJxdWVyeVNOYW1lXCIsXG4gICAgXCJxdWVyeVBhZ2VOYW1lXCIsXG4gICAgXCJzZWFyY2hQYXJhbXNcIixcbiAgICBcInNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50XCIsXG4gICAgXCJzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XCJcbiAgXVxuICBjb25zdCBjYWNoZVBhcnRzID0gW11cblxuICBmb3IoY29uc3QgY2FjaGVQYXJ0c0tleSBvZiBjYWNoZVBhcnRzS2V5cykge1xuICAgIGNhY2hlUGFydHMucHVzaChkaWdnKHVzZUNvbGxlY3Rpb25SZXN1bHQsIGNhY2hlUGFydHNLZXkpKVxuICB9XG5cbiAgcy51cGRhdGVNZXRhKHtjb21wb25lbnQsIHVzZUNvbGxlY3Rpb25SZXN1bHR9KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gTWlycm9yIGNvbGxlY3Rpb24gcmVzdWx0cyBpbnRvIHRoZSBob3N0IGNvbXBvbmVudCBhZnRlciBjb21taXQgc28gYXN5bmMgbG9hZHMgbmV2ZXIgdXBkYXRlIGFuIHVubW91bnRlZCByZW5kZXIgcGF0aC5cbiAgICBzLm0uY29tcG9uZW50LnNldFN0YXRlKHMubS51c2VDb2xsZWN0aW9uUmVzdWx0KVxuICB9LCBjYWNoZVBhcnRzKVxuXG4gIHJldHVybiBudWxsXG59XG5cbkNvbGxlY3Rpb25Mb2FkZXIucHJvcFR5cGVzID0gcHJvcFR5cGVzRXhhY3Qoe1xuICBhYmlsaXRpZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNvbGxlY3Rpb246IFByb3BUeXBlcy5pbnN0YW5jZU9mKENvbGxlY3Rpb24pLFxuICBjb21wb25lbnQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZGVmYXVsdFBhcmFtczogUHJvcFR5cGVzLm9iamVjdCxcbiAgZ3JvdXBCeTogUHJvcFR5cGVzLmFycmF5LFxuICBtb2RlbENsYXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgbm9SZWNvcmRzRm91bmRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb2RlbHNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICBwYWdpbmF0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHJlbG9hZHM6IFByb3BUeXBlcy5hcnJheSxcbiAgcXVlcnlNZXRob2Q6IFByb3BUeXBlcy5mdW5jLFxuICBxdWVyeU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJhbnNhY2s6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlbGVjdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2VsZWN0Q29sdW1uczogUHJvcFR5cGVzLm9iamVjdFxufSlcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhDb2xsZWN0aW9uTG9hZGVyKVxuIl19
|