@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,53 +1,246 @@
|
|
|
1
1
|
/** Persistent table settings manager. */
|
|
2
2
|
export default class ApiMakerTableSettings {
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Constructor.
|
|
5
|
+
* @param {object} root0
|
|
6
|
+
* @param {TableSettingsTableLike} root0.table
|
|
7
|
+
*/
|
|
4
8
|
constructor({ table }: {
|
|
5
|
-
table:
|
|
9
|
+
table: TableSettingsTableLike;
|
|
6
10
|
});
|
|
7
|
-
table:
|
|
11
|
+
table: TableSettingsTableLike;
|
|
8
12
|
/** setTableSettingsLock. */
|
|
9
13
|
setTableSettingsLock(): void;
|
|
10
14
|
tableSettingsLock: any;
|
|
11
|
-
/**
|
|
12
|
-
columns: () =>
|
|
13
|
-
/**
|
|
14
|
-
columnsWithPositions: () =>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
/** @returns {TableColumnDefinition[]} */
|
|
16
|
+
columns: () => TableColumnDefinition[];
|
|
17
|
+
/** @returns {Array<{column: TableColumnDefinition, identifier: string, position: number}>} */
|
|
18
|
+
columnsWithPositions: () => Array<{
|
|
19
|
+
column: TableColumnDefinition;
|
|
20
|
+
identifier: string;
|
|
21
|
+
position: number;
|
|
22
|
+
}>;
|
|
23
|
+
/** @returns {CurrentUserModel | null} */
|
|
24
|
+
currentUser: () => CurrentUserModel | null;
|
|
25
|
+
/** @returns {string} */
|
|
26
|
+
identifier: () => string;
|
|
27
|
+
/**
|
|
28
|
+
* preparedColumns.
|
|
29
|
+
* @param {TableSettingRecord} tableSetting
|
|
30
|
+
* @returns {PreparedColumnsResult | undefined}
|
|
31
|
+
*/
|
|
32
|
+
preparedColumns: (tableSetting: TableSettingRecord) => PreparedColumnsResult | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* orderedTableSettingColumns.
|
|
35
|
+
* @param {TableSettingRecord} tableSetting
|
|
36
|
+
* @returns {TableSettingColumnRecord[]}
|
|
37
|
+
*/
|
|
38
|
+
orderedTableSettingColumns: (tableSetting: TableSettingRecord) => TableSettingColumnRecord[];
|
|
39
|
+
/** @returns {Promise<TableSettingRecord>} */
|
|
40
|
+
loadExistingOrCreateTableSettings: () => Promise<TableSettingRecord>;
|
|
41
|
+
/** @returns {Promise<TableSettingRecord | undefined>} */
|
|
42
|
+
loadTableSetting: () => Promise<TableSettingRecord | undefined>;
|
|
43
|
+
/**
|
|
44
|
+
* currentUserIdOrFallback.
|
|
45
|
+
* @returns {number | string}
|
|
46
|
+
*/
|
|
47
|
+
currentUserIdOrFallback(): number | string;
|
|
48
|
+
/**
|
|
49
|
+
* currentUserTypeOrFallback.
|
|
50
|
+
* @returns {string | null}
|
|
51
|
+
*/
|
|
52
|
+
currentUserTypeOrFallback(): string | null;
|
|
53
|
+
/**
|
|
54
|
+
* anonymouseUserId.
|
|
55
|
+
* @returns {string}
|
|
56
|
+
*/
|
|
57
|
+
anonymouseUserId(): string;
|
|
58
|
+
/** @returns {Promise<TableSettingRecord>} */
|
|
59
|
+
createInitialTableSetting: () => Promise<TableSettingRecord>;
|
|
60
|
+
/**
|
|
61
|
+
* columnSaveData.
|
|
62
|
+
* @param {TableColumnDefinition} column
|
|
63
|
+
* @param {object} root0
|
|
64
|
+
* @param {string} root0.identifier
|
|
65
|
+
* @param {number} root0.position
|
|
66
|
+
* @returns {TableColumnSaveData}
|
|
67
|
+
*/
|
|
68
|
+
columnSaveData(column: TableColumnDefinition, { identifier, position }: {
|
|
69
|
+
identifier: string;
|
|
70
|
+
position: number;
|
|
71
|
+
}): TableColumnSaveData;
|
|
72
|
+
/**
|
|
73
|
+
* updateTableSetting.
|
|
74
|
+
* @param {TableSettingRecord} tableSetting
|
|
75
|
+
* @returns {Promise<TableSettingRecord>}
|
|
76
|
+
*/
|
|
77
|
+
updateTableSetting: (tableSetting: TableSettingRecord) => Promise<TableSettingRecord>;
|
|
78
|
+
}
|
|
79
|
+
export type CurrentUserModel = {
|
|
80
|
+
abilities: import("../base-model.js").ModelAbilityMap;
|
|
81
|
+
changes: import("../base-model.js").ModelDataMap;
|
|
82
|
+
collection: import("../collection.js").default<any>;
|
|
83
|
+
_identifierKey: string | number;
|
|
84
|
+
_markedForDestruction: boolean;
|
|
85
|
+
modelData: import("../base-model.js").ModelDataMap;
|
|
86
|
+
newRecord: boolean;
|
|
87
|
+
previousModelData: any;
|
|
88
|
+
preloadedRelationships: import("../base-model.js").PreloadedRelationshipMap;
|
|
89
|
+
relationshipsCache: import("../base-model.js").LoadedRelationshipMap;
|
|
90
|
+
relationships: import("../base-model.js").LoadedRelationshipMap;
|
|
91
|
+
uniqueKeyValue: number;
|
|
92
|
+
assignAttributes(newAttributes: ModelDataMap): void;
|
|
93
|
+
attributes(): ModelDataMap;
|
|
94
|
+
can(givenAbilityName: string): boolean;
|
|
95
|
+
clone(): /*elided*/ any;
|
|
96
|
+
cacheKey(): number | string;
|
|
97
|
+
localCacheKey(): string;
|
|
98
|
+
fullCacheKey(): string;
|
|
99
|
+
create(attributes?: ModelDataMap, options?: ParseValidationErrorsOptions): Promise<{
|
|
100
|
+
model: /*elided*/ any;
|
|
101
|
+
response: ModelCommandResponse;
|
|
102
|
+
}>;
|
|
103
|
+
createRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions): Promise<{
|
|
104
|
+
model: /*elided*/ any;
|
|
105
|
+
response: ModelCommandResponse;
|
|
106
|
+
}>;
|
|
107
|
+
destroy(): Promise<{
|
|
108
|
+
model: /*elided*/ any;
|
|
109
|
+
response: ModelCommandResponse;
|
|
110
|
+
}>;
|
|
111
|
+
ensureAbilities(listOfAbilities: string[]): Promise<void>;
|
|
112
|
+
getAttributes(): ModelDataMap;
|
|
113
|
+
handleResponseError(response: ModelCommandResponse): never;
|
|
114
|
+
identifierKey(): number | string;
|
|
115
|
+
isAssociationLoaded(associationName: string): boolean;
|
|
116
|
+
isAssociationLoadedUnderscore(associationNameUnderscore: string): boolean;
|
|
117
|
+
isAssociationPresent(associationName: string): boolean;
|
|
118
|
+
ensureAssociationLoaded(associationName: string): Promise<LoadedRelationshipValue>;
|
|
119
|
+
ensureAssociationLoadedUnderscore(associationNameUnderscore: string): Promise<LoadedRelationshipValue>;
|
|
120
|
+
isAttributeChanged(attributeName: string): boolean;
|
|
121
|
+
isChanged(): boolean;
|
|
122
|
+
isNewRecord(): boolean;
|
|
123
|
+
isPersisted(): boolean;
|
|
124
|
+
savedChangeToAttribute(attributeName: string): boolean;
|
|
125
|
+
setNewModel(model: /*elided*/ any): void;
|
|
126
|
+
setNewModelData(model: /*elided*/ any): void;
|
|
127
|
+
_isDateChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
|
|
128
|
+
_isIntegerChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
|
|
129
|
+
_isStringChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
|
|
130
|
+
modelClassData(): ModelClassDataType;
|
|
131
|
+
reload(): Promise<void>;
|
|
132
|
+
save(): Promise<{
|
|
133
|
+
model: /*elided*/ any;
|
|
134
|
+
response?: object;
|
|
135
|
+
}>;
|
|
136
|
+
saveRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions & {
|
|
137
|
+
simpleModelErrors?: boolean;
|
|
138
|
+
}): Promise<{
|
|
139
|
+
model: /*elided*/ any;
|
|
140
|
+
response: ModelCommandResponse;
|
|
141
|
+
}>;
|
|
142
|
+
update(newAttributes?: ModelDataMap, options?: ParseValidationErrorsOptions): Promise<{
|
|
143
|
+
model: /*elided*/ any;
|
|
144
|
+
response?: object;
|
|
145
|
+
}>;
|
|
146
|
+
_refreshModelFromResponse(response: ModelCommandResponse): void;
|
|
147
|
+
_refreshModelDataFromResponse(response: ModelCommandResponse): void;
|
|
148
|
+
updateRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions & {
|
|
149
|
+
simpleModelErrors?: boolean;
|
|
150
|
+
}): Promise<{
|
|
151
|
+
response: ModelCommandResponse;
|
|
152
|
+
model: /*elided*/ any;
|
|
153
|
+
}>;
|
|
154
|
+
isValid(): never;
|
|
155
|
+
isValidOnServer(): Promise<{
|
|
156
|
+
valid: boolean;
|
|
157
|
+
errors: ValidationResponseErrors;
|
|
158
|
+
}>;
|
|
159
|
+
modelClass(): BaseModelClassType;
|
|
160
|
+
preloadRelationship(relationshipName: string, model: /*elided*/ any | /*elided*/ any[] | null): void;
|
|
161
|
+
markForDestruction(): void;
|
|
162
|
+
markedForDestruction(): boolean;
|
|
163
|
+
uniqueKey(): number;
|
|
164
|
+
_callMemberCommand(args: ModelCommandDescriptor, commandArgs: ModelCommandOptions): import("../command-execution.js").default;
|
|
165
|
+
readAttribute(attributeName: string): ModelValue | null | undefined;
|
|
166
|
+
readAttributeUnderscore(attributeName: string): ModelValue | null | undefined;
|
|
167
|
+
isAttributeLoaded(attributeName: string): boolean;
|
|
168
|
+
_isPresent(value: ModelValue | null | undefined): boolean;
|
|
169
|
+
_loadBelongsToReflection(args: RelationshipLoadArgs, queryArgs?: import("../collection.js").QueryArgsType): Promise</*elided*/ any | null>;
|
|
170
|
+
_readBelongsToReflection({ reflectionName }: RelationshipLoadArgs): /*elided*/ any | null;
|
|
171
|
+
_loadHasManyReflection(args: RelationshipLoadArgs, queryArgs?: import("../collection.js").QueryArgsType): Promise</*elided*/ any[]>;
|
|
172
|
+
_loadHasOneReflection(args: RelationshipLoadArgs, queryArgs?: import("../collection.js").QueryArgsType): Promise</*elided*/ any | null>;
|
|
173
|
+
_readHasOneReflection({ reflectionName }: RelationshipLoadArgs): /*elided*/ any | null;
|
|
174
|
+
_readModelDataFromArgs(args?: BaseModelArgsObject): void;
|
|
175
|
+
_readPreloadedRelationships(preloaded: {
|
|
176
|
+
getModel: (relationshipType: string, relationshipId: number | string) => /*elided*/ any;
|
|
177
|
+
}): void;
|
|
178
|
+
primaryKey(): number | string;
|
|
179
|
+
} & {
|
|
180
|
+
id(): number | string;
|
|
181
|
+
modelClassData(): {
|
|
182
|
+
name: string;
|
|
23
183
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
path: any;
|
|
46
|
-
position: any;
|
|
47
|
-
sort_key: any;
|
|
48
|
-
visible: any;
|
|
184
|
+
};
|
|
185
|
+
export type TableColumnDefinition = {
|
|
186
|
+
attribute?: string;
|
|
187
|
+
defaultVisible?: boolean;
|
|
188
|
+
identifier?: string;
|
|
189
|
+
label?: string;
|
|
190
|
+
path?: string[];
|
|
191
|
+
sortKey?: string;
|
|
192
|
+
};
|
|
193
|
+
export type TableSettingColumnRecord = {
|
|
194
|
+
id: () => number | string;
|
|
195
|
+
identifier: () => string;
|
|
196
|
+
path: () => string | null;
|
|
197
|
+
position: () => number;
|
|
198
|
+
sortKey: () => string | undefined;
|
|
199
|
+
visible: () => boolean | null;
|
|
200
|
+
attributeName: () => string | undefined;
|
|
201
|
+
};
|
|
202
|
+
export type TableSettingRecord = {
|
|
203
|
+
columns: () => {
|
|
204
|
+
loaded(): TableSettingColumnRecord[];
|
|
49
205
|
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
206
|
+
saveRaw: (data: FormData) => Promise<void>;
|
|
207
|
+
};
|
|
208
|
+
export type TableSettingRansackQuery = {
|
|
209
|
+
preload: (name: string) => TableSettingRansackQuery;
|
|
210
|
+
first: () => Promise<TableSettingRecord | undefined>;
|
|
211
|
+
};
|
|
212
|
+
export type TableSettingConstructor = new () => TableSettingRecord;
|
|
213
|
+
export type TableSettingStatic = TableSettingConstructor & {
|
|
214
|
+
ransack(args: {
|
|
215
|
+
identifier_eq: string;
|
|
216
|
+
user_id_eq: number | string;
|
|
217
|
+
user_type_eq: string | null;
|
|
218
|
+
}): TableSettingRansackQuery;
|
|
219
|
+
};
|
|
220
|
+
export type TableSettingsTableLike = {
|
|
221
|
+
props: {
|
|
222
|
+
currentUser?: CurrentUserModel | null;
|
|
223
|
+
};
|
|
224
|
+
state: {
|
|
225
|
+
identifier: string;
|
|
226
|
+
};
|
|
227
|
+
columnsAsArray: () => TableColumnDefinition[];
|
|
228
|
+
};
|
|
229
|
+
export type PreparedColumnsResult = {
|
|
230
|
+
columns: Array<{
|
|
231
|
+
column: TableColumnDefinition | undefined;
|
|
232
|
+
tableSettingColumn: TableSettingColumnRecord;
|
|
233
|
+
}>;
|
|
234
|
+
preload: string[];
|
|
235
|
+
};
|
|
236
|
+
export type TableColumnSaveData = {
|
|
237
|
+
attribute_name: string | undefined;
|
|
238
|
+
id?: number | string | undefined;
|
|
239
|
+
identifier: string;
|
|
240
|
+
path: string[] | undefined;
|
|
241
|
+
position?: number;
|
|
242
|
+
sort_key: string | undefined;
|
|
243
|
+
visible?: boolean | null;
|
|
244
|
+
_destroy?: true;
|
|
245
|
+
};
|
|
53
246
|
//# sourceMappingURL=table-settings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-settings.d.ts","sourceRoot":"/src/","sources":["table/table-settings.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"table-settings.d.ts","sourceRoot":"/src/","sources":["table/table-settings.js"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
/* eslint-disable arrow-body-style, import/no-unresolved, sort-imports */
|
|
2
3
|
import columnIdentifier from "./column-identifier.js";
|
|
3
4
|
import columnVisible from "./column-visible.js";
|
|
@@ -11,11 +12,66 @@ import { TableSetting } from "models.js";
|
|
|
11
12
|
// @ts-expect-error
|
|
12
13
|
import { v4 as uuidv4 } from "uuid";
|
|
13
14
|
const logger = new Logger({ name: "ApiMaker / TableSettings" });
|
|
15
|
+
/** @typedef {import("../base-model.js").default & {id(): number | string, modelClassData(): {name: string}}} CurrentUserModel */
|
|
16
|
+
/** @typedef {{attribute?: string, defaultVisible?: boolean, identifier?: string, label?: string, path?: string[], sortKey?: string}} TableColumnDefinition */
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {object} TableSettingColumnRecord
|
|
19
|
+
* @property {() => number | string} id
|
|
20
|
+
* @property {() => string} identifier
|
|
21
|
+
* @property {() => string | null} path
|
|
22
|
+
* @property {() => number} position
|
|
23
|
+
* @property {() => string | undefined} sortKey
|
|
24
|
+
* @property {() => boolean | null} visible
|
|
25
|
+
* @property {() => string | undefined} attributeName
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* @typedef {object} TableSettingRecord
|
|
29
|
+
* @property {() => {loaded(): TableSettingColumnRecord[]}} columns
|
|
30
|
+
* @property {(data: FormData) => Promise<void>} saveRaw
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* @typedef {object} TableSettingRansackQuery
|
|
34
|
+
* @property {(name: string) => TableSettingRansackQuery} preload
|
|
35
|
+
* @property {() => Promise<TableSettingRecord | undefined>} first
|
|
36
|
+
*/
|
|
37
|
+
/** @typedef {new () => TableSettingRecord} TableSettingConstructor */
|
|
38
|
+
/**
|
|
39
|
+
* @typedef {TableSettingConstructor & {
|
|
40
|
+
* ransack(args: {identifier_eq: string, user_id_eq: number | string, user_type_eq: string | null}): TableSettingRansackQuery
|
|
41
|
+
* }} TableSettingStatic
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* @typedef {object} TableSettingsTableLike
|
|
45
|
+
* @property {{currentUser?: CurrentUserModel | null}} props
|
|
46
|
+
* @property {{identifier: string}} state
|
|
47
|
+
* @property {() => TableColumnDefinition[]} columnsAsArray
|
|
48
|
+
*/
|
|
49
|
+
/**
|
|
50
|
+
* @typedef {object} PreparedColumnsResult
|
|
51
|
+
* @property {Array<{column: TableColumnDefinition | undefined, tableSettingColumn: TableSettingColumnRecord}>} columns
|
|
52
|
+
* @property {string[]} preload
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
* @typedef {object} TableColumnSaveData
|
|
56
|
+
* @property {string | undefined} attribute_name
|
|
57
|
+
* @property {number | string | undefined} [id]
|
|
58
|
+
* @property {string} identifier
|
|
59
|
+
* @property {string[] | undefined} path
|
|
60
|
+
* @property {number} [position]
|
|
61
|
+
* @property {string | undefined} sort_key
|
|
62
|
+
* @property {boolean | null} [visible]
|
|
63
|
+
* @property {true} [_destroy]
|
|
64
|
+
*/
|
|
65
|
+
const TableSettingModel = /** @type {TableSettingStatic} */ (TableSetting);
|
|
14
66
|
// Have a lock for each unique table identifier
|
|
15
|
-
const tableSettingsLocks = {};
|
|
67
|
+
const tableSettingsLocks = /** @type {Record<string, ReadersWriterLock>} */ ({});
|
|
16
68
|
/** Persistent table settings manager. */
|
|
17
69
|
export default class ApiMakerTableSettings {
|
|
18
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* Constructor.
|
|
72
|
+
* @param {object} root0
|
|
73
|
+
* @param {TableSettingsTableLike} root0.table
|
|
74
|
+
*/
|
|
19
75
|
constructor({ table }) {
|
|
20
76
|
this.table = table;
|
|
21
77
|
this.setTableSettingsLock();
|
|
@@ -28,19 +84,23 @@ export default class ApiMakerTableSettings {
|
|
|
28
84
|
}
|
|
29
85
|
this.tableSettingsLock = digg(tableSettingsLocks, identifier);
|
|
30
86
|
}
|
|
31
|
-
/**
|
|
87
|
+
/** @returns {TableColumnDefinition[]} */
|
|
32
88
|
columns = () => this.table.columnsAsArray();
|
|
33
|
-
/**
|
|
89
|
+
/** @returns {Array<{column: TableColumnDefinition, identifier: string, position: number}>} */
|
|
34
90
|
columnsWithPositions = () => {
|
|
35
91
|
return this
|
|
36
92
|
.columns()
|
|
37
93
|
.map((column, columnIndex) => ({ column, identifier: columnIdentifier(column), position: columnIndex + 1 }));
|
|
38
94
|
};
|
|
39
|
-
/**
|
|
95
|
+
/** @returns {CurrentUserModel | null} */
|
|
40
96
|
currentUser = () => digg(this, "table", "props", "currentUser");
|
|
41
|
-
/**
|
|
97
|
+
/** @returns {string} */
|
|
42
98
|
identifier = () => digg(this, "table", "state", "identifier");
|
|
43
|
-
/**
|
|
99
|
+
/**
|
|
100
|
+
* preparedColumns.
|
|
101
|
+
* @param {TableSettingRecord} tableSetting
|
|
102
|
+
* @returns {PreparedColumnsResult | undefined}
|
|
103
|
+
*/
|
|
44
104
|
preparedColumns = (tableSetting) => {
|
|
45
105
|
const columns = this.table.columnsAsArray();
|
|
46
106
|
const ordered = this.orderedTableSettingColumns(tableSetting);
|
|
@@ -64,14 +124,18 @@ export default class ApiMakerTableSettings {
|
|
|
64
124
|
}
|
|
65
125
|
return result;
|
|
66
126
|
};
|
|
67
|
-
/**
|
|
127
|
+
/**
|
|
128
|
+
* orderedTableSettingColumns.
|
|
129
|
+
* @param {TableSettingRecord} tableSetting
|
|
130
|
+
* @returns {TableSettingColumnRecord[]}
|
|
131
|
+
*/
|
|
68
132
|
orderedTableSettingColumns = (tableSetting) => {
|
|
69
133
|
return tableSetting
|
|
70
134
|
.columns()
|
|
71
135
|
.loaded()
|
|
72
136
|
.sort((tableSettingColumn1, tableSettingColumn2) => tableSettingColumn1.position() - tableSettingColumn2.position());
|
|
73
137
|
};
|
|
74
|
-
/**
|
|
138
|
+
/** @returns {Promise<TableSettingRecord>} */
|
|
75
139
|
loadExistingOrCreateTableSettings = async () => {
|
|
76
140
|
return await this.tableSettingsLock.write(async () => {
|
|
77
141
|
let tableSetting = await this.loadTableSetting();
|
|
@@ -86,11 +150,11 @@ export default class ApiMakerTableSettings {
|
|
|
86
150
|
return tableSetting;
|
|
87
151
|
});
|
|
88
152
|
};
|
|
89
|
-
/**
|
|
153
|
+
/** @returns {Promise<TableSettingRecord | undefined>} */
|
|
90
154
|
loadTableSetting = async () => {
|
|
91
|
-
if (!
|
|
155
|
+
if (!TableSettingModel)
|
|
92
156
|
throw new Error("TableSetting model isn't globally available");
|
|
93
|
-
const tableSetting = await
|
|
157
|
+
const tableSetting = await TableSettingModel
|
|
94
158
|
.ransack({
|
|
95
159
|
identifier_eq: this.identifier(),
|
|
96
160
|
user_id_eq: this.currentUserIdOrFallback(),
|
|
@@ -100,21 +164,30 @@ export default class ApiMakerTableSettings {
|
|
|
100
164
|
.first();
|
|
101
165
|
return tableSetting;
|
|
102
166
|
};
|
|
103
|
-
/**
|
|
167
|
+
/**
|
|
168
|
+
* currentUserIdOrFallback.
|
|
169
|
+
* @returns {number | string}
|
|
170
|
+
*/
|
|
104
171
|
currentUserIdOrFallback() {
|
|
105
172
|
const currentUser = this.currentUser();
|
|
106
173
|
if (currentUser)
|
|
107
174
|
return currentUser.id();
|
|
108
175
|
return this.anonymouseUserId();
|
|
109
176
|
}
|
|
110
|
-
/**
|
|
177
|
+
/**
|
|
178
|
+
* currentUserTypeOrFallback.
|
|
179
|
+
* @returns {string | null}
|
|
180
|
+
*/
|
|
111
181
|
currentUserTypeOrFallback() {
|
|
112
182
|
const currentUser = this.currentUser();
|
|
113
183
|
if (currentUser)
|
|
114
184
|
return digg(currentUser.modelClassData(), "name");
|
|
115
185
|
return null;
|
|
116
186
|
}
|
|
117
|
-
/**
|
|
187
|
+
/**
|
|
188
|
+
* anonymouseUserId.
|
|
189
|
+
* @returns {string}
|
|
190
|
+
*/
|
|
118
191
|
anonymouseUserId() {
|
|
119
192
|
const variableName = `ApiMakerTableAnonymousUserId-${this.identifier()}`;
|
|
120
193
|
if (!(variableName in localStorage)) {
|
|
@@ -123,7 +196,7 @@ export default class ApiMakerTableSettings {
|
|
|
123
196
|
}
|
|
124
197
|
return digg(localStorage, variableName);
|
|
125
198
|
}
|
|
126
|
-
/**
|
|
199
|
+
/** @returns {Promise<TableSettingRecord>} */
|
|
127
200
|
createInitialTableSetting = async () => {
|
|
128
201
|
const tableSettingData = {
|
|
129
202
|
identifier: this.identifier(),
|
|
@@ -134,7 +207,7 @@ export default class ApiMakerTableSettings {
|
|
|
134
207
|
for (const [columnKey, { column, identifier, position }] of this.columnsWithPositions().entries()) {
|
|
135
208
|
tableSettingData.columns_attributes[columnKey] = this.columnSaveData(column, { identifier, position });
|
|
136
209
|
}
|
|
137
|
-
const tableSetting = new
|
|
210
|
+
const tableSetting = new TableSettingModel();
|
|
138
211
|
const tableSettingFormData = objectToFormData({ table_setting: tableSettingData });
|
|
139
212
|
await tableSetting.saveRaw(tableSettingFormData);
|
|
140
213
|
const reloadedTableSetting = await this.loadTableSetting();
|
|
@@ -142,7 +215,14 @@ export default class ApiMakerTableSettings {
|
|
|
142
215
|
throw new Error("No reloadedTableSetting returned by loadTableSetting");
|
|
143
216
|
return reloadedTableSetting;
|
|
144
217
|
};
|
|
145
|
-
/**
|
|
218
|
+
/**
|
|
219
|
+
* columnSaveData.
|
|
220
|
+
* @param {TableColumnDefinition} column
|
|
221
|
+
* @param {object} root0
|
|
222
|
+
* @param {string} root0.identifier
|
|
223
|
+
* @param {number} root0.position
|
|
224
|
+
* @returns {TableColumnSaveData}
|
|
225
|
+
*/
|
|
146
226
|
columnSaveData(column, { identifier, position }) {
|
|
147
227
|
return {
|
|
148
228
|
attribute_name: column.attribute,
|
|
@@ -153,7 +233,11 @@ export default class ApiMakerTableSettings {
|
|
|
153
233
|
visible: null
|
|
154
234
|
};
|
|
155
235
|
}
|
|
156
|
-
/**
|
|
236
|
+
/**
|
|
237
|
+
* updateTableSetting.
|
|
238
|
+
* @param {TableSettingRecord} tableSetting
|
|
239
|
+
* @returns {Promise<TableSettingRecord>}
|
|
240
|
+
*/
|
|
157
241
|
updateTableSetting = async (tableSetting) => {
|
|
158
242
|
const changedAttributesList = ["attributeName", "sortKey"];
|
|
159
243
|
const columnsWithPositions = this.columnsWithPositions();
|
|
@@ -239,4 +323,4 @@ export default class ApiMakerTableSettings {
|
|
|
239
323
|
return tableSetting;
|
|
240
324
|
};
|
|
241
325
|
}
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInRhYmxlL3RhYmxlLXNldHRpbmdzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlFQUF5RTtBQUN6RSxPQUFPLGdCQUFnQixNQUFNLHdCQUF3QixDQUFBO0FBQ3JELE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ2pDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUM1QyxPQUFPLEVBQUMsU0FBUyxJQUFJLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDaEUsbUJBQW1CO0FBQ25CLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDdEMsbUJBQW1CO0FBQ25CLE9BQU8sRUFBQyxFQUFFLElBQUksTUFBTSxFQUFDLE1BQU0sTUFBTSxDQUFBO0FBRWpDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFDLENBQUMsQ0FBQTtBQUU3RCwrQ0FBK0M7QUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUE7QUFFN0IseUNBQXlDO0FBQ3pDLE1BQU0sQ0FBQyxPQUFPLE9BQU8scUJBQXFCO0lBQ3hDLG1CQUFtQjtJQUNuQixZQUFZLEVBQUMsS0FBSyxFQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO0lBQzdCLENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsb0JBQW9CO1FBQ2xCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUVwQyxJQUFJLENBQUMsQ0FB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QkFBZ0IsRUFBRSxDQUFBO1lBRTFELElBQUksQ0FBQyxvQkFBb0I7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFBO1lBRWxHLE9BQU8sb0JBQW9CLENBQUE7UUFDN0IsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUMsQ0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgYXJyb3ctYm9keS1zdHlsZSwgaW1wb3J0L25vLXVucmVzb2x2ZWQsIHNvcnQtaW1wb3J0cyAqL1xuaW1wb3J0IGNvbHVtbklkZW50aWZpZXIgZnJvbSBcIi4vY29sdW1uLWlkZW50aWZpZXIuanNcIlxuaW1wb3J0IGNvbHVtblZpc2libGUgZnJvbSBcIi4vY29sdW1uLXZpc2libGUuanNcIlxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCB7UmVhZGVyc1dyaXRlckxvY2t9IGZyb20gXCJlcGljLWxvY2tzXCJcbmltcG9ydCB7c2VyaWFsaXplIGFzIG9iamVjdFRvRm9ybURhdGF9IGZyb20gXCJvYmplY3QtdG8tZm9ybWRhdGFcIlxuLy8gQHRzLWV4cGVjdC1lcnJvclxuaW1wb3J0IHtUYWJsZVNldHRpbmd9IGZyb20gXCJtb2RlbHMuanNcIlxuLy8gQHRzLWV4cGVjdC1lcnJvclxuaW1wb3J0IHt2NCBhcyB1dWlkdjR9IGZyb20gXCJ1dWlkXCJcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcih7bmFtZTogXCJBcGlNYWtlciAvIFRhYmxlU2V0dGluZ3NcIn0pXG5cbi8vIEhhdmUgYSBsb2NrIGZvciBlYWNoIHVuaXF1ZSB0YWJsZSBpZGVudGlmaWVyXG5jb25zdCB0YWJsZVNldHRpbmdzTG9ja3MgPSB7fVxuXG4vKiogUGVyc2lzdGVudCB0YWJsZSBzZXR0aW5ncyBtYW5hZ2VyLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJUYWJsZVNldHRpbmdzIHtcbiAgLyoqIENvbnN0cnVjdG9yLiAqL1xuICBjb25zdHJ1Y3Rvcih7dGFibGV9KSB7XG4gICAgdGhpcy50YWJsZSA9IHRhYmxlXG4gICAgdGhpcy5zZXRUYWJsZVNldHRpbmdzTG9jaygpXG4gIH1cblxuICAvKiogc2V0VGFibGVTZXR0aW5nc0xvY2suICovXG4gIHNldFRhYmxlU2V0dGluZ3NMb2NrKCkge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLmlkZW50aWZpZXIoKVxuXG4gICAgaWYgKCEoaWRlbnRpZmllciBpbiB0YWJsZVNldHRpbmdzTG9ja3MpKSB7XG4gICAgICB0YWJsZVNldHRpbmdzTG9ja3NbaWRlbnRpZmllcl0gPSBuZXcgUmVhZGVyc1dyaXRlckxvY2soKVxuICAgIH1cblxuICAgIHRoaXMudGFibGVTZXR0aW5nc0xvY2sgPSBkaWdnKHRhYmxlU2V0dGluZ3NMb2NrcywgaWRlbnRpZmllcilcbiAgfVxuXG4gIC8qKiBjb2x1bW5zLiAqL1xuICBjb2x1bW5zID0gKCkgPT4gdGhpcy50YWJsZS5jb2x1bW5zQXNBcnJheSgpXG5cbiAgLyoqIGNvbHVtbnNXaXRoUG9zaXRpb25zLiAqL1xuICBjb2x1bW5zV2l0aFBvc2l0aW9ucyA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLmNvbHVtbnMoKVxuICAgICAgLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKHtjb2x1bW4sIGlkZW50aWZpZXI6IGNvbHVtbklkZW50aWZpZXIoY29sdW1uKSwgcG9zaXRpb246IGNvbHVtbkluZGV4ICsgMX0pKVxuICB9XG5cbiAgLyoqIGN1cnJlbnRVc2VyLiAqL1xuICBjdXJyZW50VXNlciA9ICgpID0+IGRpZ2codGhpcywgXCJ0YWJsZVwiLCBcInByb3BzXCIsIFwiY3VycmVudFVzZXJcIilcblxuICAvKiogaWRlbnRpZmllci4gKi9cbiAgaWRlbnRpZmllciA9ICgpID0+IGRpZ2codGhpcywgXCJ0YWJsZVwiLCBcInN0YXRlXCIsIFwiaWRlbnRpZmllclwiKVxuXG4gIC8qKiBwcmVwYXJlZENvbHVtbnMuICovXG4gIHByZXBhcmVkQ29sdW1ucyA9ICh0YWJsZVNldHRpbmcpID0+IHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy50YWJsZS5jb2x1bW5zQXNBcnJheSgpXG4gICAgY29uc3Qgb3JkZXJlZCA9IHRoaXMub3JkZXJlZFRhYmxlU2V0dGluZ0NvbHVtbnModGFibGVTZXR0aW5nKVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIGNvbHVtbnM6IFtdLFxuICAgICAgcHJlbG9hZDogW11cbiAgICB9XG5cbiAgICBpZiAoIW9yZGVyZWQpIHJldHVyblxuXG4gICAgZm9yIChjb25zdCB0YWJsZVNldHRpbmdDb2x1bW4gb2Ygb3JkZXJlZCkge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbklkZW50aWZpZXIoY29sdW1uKSA9PSB0YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpKVxuXG4gICAgICByZXN1bHQuY29sdW1ucy5wdXNoKHtjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbn0pXG5cbiAgICAgIC8vIEFkZCBuZWVkZWQgcHJlbG9hZHMgaWYgY29sdW1uIGlzIHZpc2libGVcbiAgICAgIGlmIChjb2x1bW5WaXNpYmxlKGNvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1uKSkge1xuICAgICAgICBpZiAoY29sdW1uLnBhdGgpIHtcbiAgICAgICAgICBjb25zdCBwcmVsb2FkID0gY29sdW1uLnBhdGgubWFwKChwYXRoUGFydCkgPT4gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHBhdGhQYXJ0KSkuam9pbihcIi5cIilcblxuICAgICAgICAgIGlmICghcmVzdWx0LnByZWxvYWQuaW5jbHVkZXMocHJlbG9hZCkpIHJlc3VsdC5wcmVsb2FkLnB1c2gocHJlbG9hZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKiBvcmRlcmVkVGFibGVTZXR0aW5nQ29sdW1ucy4gKi9cbiAgb3JkZXJlZFRhYmxlU2V0dGluZ0NvbHVtbnMgPSAodGFibGVTZXR0aW5nKSA9PiB7XG4gICAgcmV0dXJuIHRhYmxlU2V0dGluZ1xuICAgICAgLmNvbHVtbnMoKVxuICAgICAgLmxvYWRlZCgpXG4gICAgICAuc29ydCgodGFibGVTZXR0aW5nQ29sdW1uMSwgdGFibGVTZXR0aW5nQ29sdW1uMikgPT4gdGFibGVTZXR0aW5nQ29sdW1uMS5wb3NpdGlvbigpIC0gdGFibGVTZXR0aW5nQ29sdW1uMi5wb3NpdGlvbigpKVxuICB9XG5cbiAgLyoqIGxvYWRFeGlzdGluZ09yQ3JlYXRlVGFibGVTZXR0aW5ncy4gKi9cbiAgbG9hZEV4aXN0aW5nT3JDcmVhdGVUYWJsZVNldHRpbmdzID0gYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnRhYmxlU2V0dGluZ3NMb2NrLndyaXRlKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCB0YWJsZVNldHRpbmcgPSBhd2FpdCB0aGlzLmxvYWRUYWJsZVNldHRpbmcoKVxuXG4gICAgICBpZiAodGFibGVTZXR0aW5nKSB7XG4gICAgICAgIHRhYmxlU2V0dGluZyA9IGF3YWl0IHRoaXMudXBkYXRlVGFibGVTZXR0aW5nKHRhYmxlU2V0dGluZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhYmxlU2V0dGluZyA9IGF3YWl0IHRoaXMuY3JlYXRlSW5pdGlhbFRhYmxlU2V0dGluZygpXG5cbiAgICAgICAgaWYgKCF0YWJsZVNldHRpbmcpIHRocm93IG5ldyBFcnJvcihcIk5vIHRhYmxlU2V0dGluZyByZXR1cm5lZCBieSBjcmVhdGVJbml0aWFsVGFibGVTZXR0aW5nXCIpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YWJsZVNldHRpbmdcbiAgICB9KVxuICB9XG5cbiAgLyoqIGxvYWRUYWJsZVNldHRpbmcuICovXG4gIGxvYWRUYWJsZVNldHRpbmcgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFUYWJsZVNldHRpbmcpIHRocm93IG5ldyBFcnJvcihcIlRhYmxlU2V0dGluZyBtb2RlbCBpc24ndCBnbG9iYWxseSBhdmFpbGFibGVcIilcblxuICAgIGNvbnN0IHRhYmxlU2V0dGluZyA9IGF3YWl0IFRhYmxlU2V0dGluZ1xuICAgICAgLnJhbnNhY2soe1xuICAgICAgICBpZGVudGlmaWVyX2VxOiB0aGlzLmlkZW50aWZpZXIoKSxcbiAgICAgICAgdXNlcl9pZF9lcTogdGhpcy5jdXJyZW50VXNlcklkT3JGYWxsYmFjaygpLFxuICAgICAgICB1c2VyX3R5cGVfZXE6IHRoaXMuY3VycmVudFVzZXJUeXBlT3JGYWxsYmFjaygpXG4gICAgICB9KVxuICAgICAgLnByZWxvYWQoXCJjb2x1bW5zXCIpXG4gICAgICAuZmlyc3QoKVxuXG4gICAgcmV0dXJuIHRhYmxlU2V0dGluZ1xuICB9XG5cbiAgLyoqIGN1cnJlbnRVc2VySWRPckZhbGxiYWNrLiAqL1xuICBjdXJyZW50VXNlcklkT3JGYWxsYmFjaygpIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuY3VycmVudFVzZXIoKVxuXG4gICAgaWYgKGN1cnJlbnRVc2VyKSByZXR1cm4gY3VycmVudFVzZXIuaWQoKVxuXG4gICAgcmV0dXJuIHRoaXMuYW5vbnltb3VzZVVzZXJJZCgpXG4gIH1cblxuICAvKiogY3VycmVudFVzZXJUeXBlT3JGYWxsYmFjay4gKi9cbiAgY3VycmVudFVzZXJUeXBlT3JGYWxsYmFjaygpIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuY3VycmVudFVzZXIoKVxuXG4gICAgaWYgKGN1cnJlbnRVc2VyKSByZXR1cm4gZGlnZyhjdXJyZW50VXNlci5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKiogYW5vbnltb3VzZVVzZXJJZC4gKi9cbiAgYW5vbnltb3VzZVVzZXJJZCgpIHtcbiAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSBgQXBpTWFrZXJUYWJsZUFub255bW91c1VzZXJJZC0ke3RoaXMuaWRlbnRpZmllcigpfWBcblxuICAgIGlmICghKHZhcmlhYmxlTmFtZSBpbiBsb2NhbFN0b3JhZ2UpKSB7XG4gICAgICBjb25zdCBnZW5lcmF0ZWRJZCA9IHV1aWR2NCgpXG5cbiAgICAgIGxvY2FsU3RvcmFnZVt2YXJpYWJsZU5hbWVdID0gZ2VuZXJhdGVkSWRcbiAgICB9XG5cbiAgICByZXR1cm4gZGlnZyhsb2NhbFN0b3JhZ2UsIHZhcmlhYmxlTmFtZSlcbiAgfVxuXG4gIC8qKiBjcmVhdGVJbml0aWFsVGFibGVTZXR0aW5nLiAqL1xuICBjcmVhdGVJbml0aWFsVGFibGVTZXR0aW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlU2V0dGluZ0RhdGEgPSB7XG4gICAgICBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIoKSxcbiAgICAgIHVzZXJfaWQ6IHRoaXMuY3VycmVudFVzZXJJZE9yRmFsbGJhY2soKSxcbiAgICAgIHVzZXJfdHlwZTogdGhpcy5jdXJyZW50VXNlclR5cGVPckZhbGxiYWNrKCksXG4gICAgICBjb2x1bW5zX2F0dHJpYnV0ZXM6IHt9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbY29sdW1uS2V5LCB7Y29sdW1uLCBpZGVudGlmaWVyLCBwb3NpdGlvbn1dIG9mIHRoaXMuY29sdW1uc1dpdGhQb3NpdGlvbnMoKS5lbnRyaWVzKCkpIHtcbiAgICAgIHRhYmxlU2V0dGluZ0RhdGEuY29sdW1uc19hdHRyaWJ1dGVzW2NvbHVtbktleV0gPSB0aGlzLmNvbHVtblNhdmVEYXRhKGNvbHVtbiwge2lkZW50aWZpZXIsIHBvc2l0aW9ufSlcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZVNldHRpbmcgPSBuZXcgVGFibGVTZXR0aW5nKClcbiAgICBjb25zdCB0YWJsZVNldHRpbmdGb3JtRGF0YSA9IG9iamVjdFRvRm9ybURhdGEoe3RhYmxlX3NldHRpbmc6IHRhYmxlU2V0dGluZ0RhdGF9KVxuXG4gICAgYXdhaXQgdGFibGVTZXR0aW5nLnNhdmVSYXcodGFibGVTZXR0aW5nRm9ybURhdGEpXG5cbiAgICBjb25zdCByZWxvYWRlZFRhYmxlU2V0dGluZyA9IGF3YWl0IHRoaXMubG9hZFRhYmxlU2V0dGluZygpXG5cbiAgICBpZiAoIXJlbG9hZGVkVGFibGVTZXR0aW5nKSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWxvYWRlZFRhYmxlU2V0dGluZyByZXR1cm5lZCBieSBsb2FkVGFibGVTZXR0aW5nXCIpXG5cbiAgICByZXR1cm4gcmVsb2FkZWRUYWJsZVNldHRpbmdcbiAgfVxuXG4gIC8qKiBjb2x1bW5TYXZlRGF0YS4gKi9cbiAgY29sdW1uU2F2ZURhdGEoY29sdW1uLCB7aWRlbnRpZmllciwgcG9zaXRpb259KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJpYnV0ZV9uYW1lOiBjb2x1bW4uYXR0cmlidXRlLFxuICAgICAgaWRlbnRpZmllcixcbiAgICAgIHBhdGg6IGNvbHVtbi5wYXRoLFxuICAgICAgcG9zaXRpb24sXG4gICAgICBzb3J0X2tleTogY29sdW1uLnNvcnRLZXksXG4gICAgICB2aXNpYmxlOiBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqIHVwZGF0ZVRhYmxlU2V0dGluZy4gKi9cbiAgdXBkYXRlVGFibGVTZXR0aW5nID0gYXN5bmMgKHRhYmxlU2V0dGluZykgPT4ge1xuICAgIGNvbnN0IGNoYW5nZWRBdHRyaWJ1dGVzTGlzdCA9IFtcImF0dHJpYnV0ZU5hbWVcIiwgXCJzb3J0S2V5XCJdXG4gICAgY29uc3QgY29sdW1uc1dpdGhQb3NpdGlvbnMgPSB0aGlzLmNvbHVtbnNXaXRoUG9zaXRpb25zKClcbiAgICBjb25zdCBjb2x1bW5zRGF0YSA9IHt9XG4gICAgY29uc3QgdGFibGVTZXR0aW5nRGF0YSA9IHtjb2x1bW5zX2F0dHJpYnV0ZXM6IGNvbHVtbnNEYXRhfVxuICAgIGNvbnN0IGV4aXN0aW5nQ29sdW1ucyA9IHRhYmxlU2V0dGluZy5jb2x1bW5zKCkubG9hZGVkKClcbiAgICBsZXQgY29sdW1uc0tleUNvdW50ID0gMFxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcblxuICAgIC8vIEFkZCBtaXNzaW5nIGNvbHVtbnNcbiAgICBmb3IgKGNvbnN0IHtjb2x1bW4sIGlkZW50aWZpZXIsIHBvc2l0aW9ufSBvZiBjb2x1bW5zV2l0aFBvc2l0aW9ucykge1xuICAgICAgY29uc3QgdGFibGVTZXR0aW5nQ29sdW1uID0gZXhpc3RpbmdDb2x1bW5zLmZpbmQoKHRhYmxlU2V0dGluZ0NvbHVtbikgPT4gdGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyKVxuXG4gICAgICBpZiAoIXRhYmxlU2V0dGluZ0NvbHVtbikge1xuICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSArK2NvbHVtbnNLZXlDb3VudFxuXG4gICAgICAgIGNvbHVtbnNEYXRhW2NvbHVtbktleV0gPSB0aGlzLmNvbHVtblNhdmVEYXRhKFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZGVudGlmaWVyLFxuICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICB9XG4gICAgICAgIClcblxuICAgICAgICBsb2dnZXIuZGVidWcoKCkgPT4gYENoYW5nZWQgYmVjYXVzZSBvZiBuZXcgY29sdW1uIGF0IHBvc2l0aW9uICR7cG9zaXRpb259OiAke2NvbHVtbi5sYWJlbH1gKVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjb2x1bW5zIHRvIG1hdGNoIHRoZSBjdXJyZW50IGNvbHVtbiBtZXRhZGF0YSB3aXRob3V0IG92ZXJ3cml0aW5nIHVzZXItc2F2ZWQgb3JkZXIuXG4gICAgZm9yIChjb25zdCB7Y29sdW1uLCBpZGVudGlmaWVyfSBvZiBjb2x1bW5zV2l0aFBvc2l0aW9ucykge1xuICAgICAgY29uc3QgdGFibGVTZXR0aW5nQ29sdW1uID0gZXhpc3RpbmdDb2x1bW5zLmZpbmQoKHRhYmxlU2V0dGluZ0NvbHVtbikgPT4gdGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKSA9PSBpZGVudGlmaWVyKVxuXG4gICAgICBpZiAodGFibGVTZXR0aW5nQ29sdW1uKSB7XG4gICAgICAgIGxldCBjb2x1bW5DaGFuZ2VkID0gZmFsc2VcblxuICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZWRBdHRyaWJ1dGUgb2YgY2hhbmdlZEF0dHJpYnV0ZXNMaXN0KSB7XG4gICAgICAgICAgbGV0IGNvbHVtbkF0dHJpYnV0ZU5hbWVcblxuICAgICAgICAgIGlmIChjaGFuZ2VkQXR0cmlidXRlID09IFwiYXR0cmlidXRlTmFtZVwiKSB7XG4gICAgICAgICAgICBjb2x1bW5BdHRyaWJ1dGVOYW1lID0gXCJhdHRyaWJ1dGVcIlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2x1bW5BdHRyaWJ1dGVOYW1lID0gY2hhbmdlZEF0dHJpYnV0ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG9sZEF0dHJpYnV0ZVZhbHVlID0gdGFibGVTZXR0aW5nQ29sdW1uW2NoYW5nZWRBdHRyaWJ1dGVdKClcbiAgICAgICAgICBjb25zdCBuZXdBdHRyaWJ1dGVWYWx1ZSA9IGNvbHVtbltjb2x1bW5BdHRyaWJ1dGVOYW1lXVxuXG4gICAgICAgICAgaWYgKG9sZEF0dHJpYnV0ZVZhbHVlICE9IG5ld0F0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoKCkgPT4gYCR7Y2hhbmdlZEF0dHJpYnV0ZX0gY2hhbmdlZCBmcm9tICR7b2xkQXR0cmlidXRlVmFsdWV9IHRvICR7bmV3QXR0cmlidXRlVmFsdWV9IG9uIGNvbHVtbjogJHtjb2x1bW4ubGFiZWx9YClcbiAgICAgICAgICAgIGNvbHVtbkNoYW5nZWQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sdW1uUGF0aEFzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY29sdW1uLnBhdGgpXG4gICAgICAgIGNvbnN0IHRhYmxlU2V0dGluZ0NvbHVtblBhdGhBc1N0cmluZyA9IHRhYmxlU2V0dGluZ0NvbHVtbi5wYXRoKClcblxuICAgICAgICBpZiAoY29sdW1uUGF0aEFzU3RyaW5nICE9IHRhYmxlU2V0dGluZ0NvbHVtblBhdGhBc1N0cmluZykge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygoKSA9PiBgUGF0aCBjaGFuZ2VkIG9uICR7Y29sdW1uLmxhYmVsfSBmcm9tICR7Y29sdW1uUGF0aEFzU3RyaW5nfSB0byAke3RhYmxlU2V0dGluZ0NvbHVtblBhdGhBc1N0cmluZ31gKVxuICAgICAgICAgIGNvbHVtbkNoYW5nZWQgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sdW1uQ2hhbmdlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbktleSA9ICsrY29sdW1uc0tleUNvdW50XG5cbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICAgIGNvbHVtbnNEYXRhW2NvbHVtbktleV0gPSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVfbmFtZTogY29sdW1uLmF0dHJpYnV0ZSxcbiAgICAgICAgICAgIGlkOiB0YWJsZVNldHRpbmdDb2x1bW4uaWQoKSxcbiAgICAgICAgICAgIHBhdGg6IGNvbHVtbi5wYXRoLFxuICAgICAgICAgICAgc29ydF9rZXk6IGNvbHVtbi5zb3J0S2V5XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0YWJsZVNldHRpbmdDb2x1bW4gb2YgZXhpc3RpbmdDb2x1bW5zKSB7XG4gICAgICBjb25zdCBjb2x1bW5FeGlzdHMgPSBjb2x1bW5zV2l0aFBvc2l0aW9ucy5maW5kKCh7aWRlbnRpZmllcn0pID0+IGlkZW50aWZpZXIgPT0gdGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKSlcblxuICAgICAgaWYgKCFjb2x1bW5FeGlzdHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlZCBzYXZlZCBjb2x1bW5zIG5vIGxvbmdlciBmb3VuZC5cbiAgICAgICAgY29uc3QgY29sdW1uS2V5ID0gKytjb2x1bW5zS2V5Q291bnRcblxuICAgICAgICBjb2x1bW5zRGF0YVtjb2x1bW5LZXldID0ge1xuICAgICAgICAgIGlkOiB0YWJsZVNldHRpbmdDb2x1bW4uaWQoKSxcbiAgICAgICAgICBfZGVzdHJveTogdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCgpID0+IGBDb2x1bW4gZ290IHJlbW92ZWQ6ICR7dGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKX1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICBjb25zdCB0YWJsZVNldHRpbmdGb3JtRGF0YSA9IG9iamVjdFRvRm9ybURhdGEoe3RhYmxlX3NldHRpbmc6IHRhYmxlU2V0dGluZ0RhdGF9KVxuXG4gICAgICBhd2FpdCB0YWJsZVNldHRpbmcuc2F2ZVJhdyh0YWJsZVNldHRpbmdGb3JtRGF0YSlcblxuICAgICAgLy8gUmUtcmVhZCB0aGUgdGFibGUgc2V0dGluZyBhZnRlciBzdHJ1Y3R1cmFsIHVwZGF0ZXMgc28gcHJlcGFyZWQgY29sdW1ucyB1c2UgdGhlXG4gICAgICAvLyBwZXJzaXN0ZWQgY29sdW1uIGxpc3QgcmF0aGVyIHRoYW4gdGhlIHN0YWxlIHByZS1zYXZlIGFzc29jaWF0aW9uIGNhY2hlLlxuICAgICAgY29uc3QgcmVsb2FkZWRUYWJsZVNldHRpbmcgPSBhd2FpdCB0aGlzLmxvYWRUYWJsZVNldHRpbmcoKVxuXG4gICAgICBpZiAoIXJlbG9hZGVkVGFibGVTZXR0aW5nKSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWxvYWRlZFRhYmxlU2V0dGluZyByZXR1cm5lZCBieSBsb2FkVGFibGVTZXR0aW5nXCIpXG5cbiAgICAgIHJldHVybiByZWxvYWRlZFRhYmxlU2V0dGluZ1xuICAgIH1cblxuICAgIHJldHVybiB0YWJsZVNldHRpbmdcbiAgfVxufVxuIl19
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInRhYmxlL3RhYmxlLXNldHRpbmdzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFDWix5RUFBeUU7QUFDekUsT0FBTyxnQkFBZ0IsTUFBTSx3QkFBd0IsQ0FBQTtBQUNyRCxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUNqQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDNUMsT0FBTyxFQUFDLFNBQVMsSUFBSSxnQkFBZ0IsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ2hFLG1CQUFtQjtBQUNuQixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ3RDLG1CQUFtQjtBQUNuQixPQUFPLEVBQUMsRUFBRSxJQUFJLE1BQU0sRUFBQyxNQUFNLE1BQU0sQ0FBQTtBQUVqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBQyxDQUFDLENBQUE7QUFFN0QsaUlBQWlJO0FBQ2pJLDhKQUE4SjtBQUM5Sjs7Ozs7Ozs7O0dBU0c7QUFDSDs7OztHQUlHO0FBQ0g7Ozs7R0FJRztBQUNILHNFQUFzRTtBQUN0RTs7OztHQUlHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7OztHQUlHO0FBQ0g7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0saUJBQWlCLEdBQUcsaUNBQWlDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUUxRSwrQ0FBK0M7QUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxnREFBZ0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBRWhGLHlDQUF5QztBQUN6QyxNQUFNLENB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QUMsQ0FBQTtZQUM5RSxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQTtZQUVoRixNQUFNLFlBQVksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtZQUVoRCxpRkFBaUY7WUFDakYsMEVBQTBFO1lBQzFFLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUUxRCxJQUFJLENBQUMsb0JBQW9CO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQTtZQUVsRyxPQUFPLG9CQUFvQixDQUFBO1FBQzdCLENBQUM7UUFFRCxPQUFPLFlBQVksQ0FBQTtJQUNyQixDQUFDLENBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuLyogZXNsaW50LWRpc2FibGUgYXJyb3ctYm9keS1zdHlsZSwgaW1wb3J0L25vLXVucmVzb2x2ZWQsIHNvcnQtaW1wb3J0cyAqL1xuaW1wb3J0IGNvbHVtbklkZW50aWZpZXIgZnJvbSBcIi4vY29sdW1uLWlkZW50aWZpZXIuanNcIlxuaW1wb3J0IGNvbHVtblZpc2libGUgZnJvbSBcIi4vY29sdW1uLXZpc2libGUuanNcIlxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCB7UmVhZGVyc1dyaXRlckxvY2t9IGZyb20gXCJlcGljLWxvY2tzXCJcbmltcG9ydCB7c2VyaWFsaXplIGFzIG9iamVjdFRvRm9ybURhdGF9IGZyb20gXCJvYmplY3QtdG8tZm9ybWRhdGFcIlxuLy8gQHRzLWV4cGVjdC1lcnJvclxuaW1wb3J0IHtUYWJsZVNldHRpbmd9IGZyb20gXCJtb2RlbHMuanNcIlxuLy8gQHRzLWV4cGVjdC1lcnJvclxuaW1wb3J0IHt2NCBhcyB1dWlkdjR9IGZyb20gXCJ1dWlkXCJcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcih7bmFtZTogXCJBcGlNYWtlciAvIFRhYmxlU2V0dGluZ3NcIn0pXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0ICYge2lkKCk6IG51bWJlciB8IHN0cmluZywgbW9kZWxDbGFzc0RhdGEoKToge25hbWU6IHN0cmluZ319fSBDdXJyZW50VXNlck1vZGVsICovXG4vKiogQHR5cGVkZWYge3thdHRyaWJ1dGU/OiBzdHJpbmcsIGRlZmF1bHRWaXNpYmxlPzogYm9vbGVhbiwgaWRlbnRpZmllcj86IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIHBhdGg/OiBzdHJpbmdbXSwgc29ydEtleT86IHN0cmluZ319IFRhYmxlQ29sdW1uRGVmaW5pdGlvbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUYWJsZVNldHRpbmdDb2x1bW5SZWNvcmRcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gbnVtYmVyIHwgc3RyaW5nfSBpZFxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmd9IGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gc3RyaW5nIHwgbnVsbH0gcGF0aFxuICogQHByb3BlcnR5IHsoKSA9PiBudW1iZXJ9IHBvc2l0aW9uXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZyB8IHVuZGVmaW5lZH0gc29ydEtleVxuICogQHByb3BlcnR5IHsoKSA9PiBib29sZWFuIHwgbnVsbH0gdmlzaWJsZVxuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWR9IGF0dHJpYnV0ZU5hbWVcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUYWJsZVNldHRpbmdSZWNvcmRcbiAqIEBwcm9wZXJ0eSB7KCkgPT4ge2xvYWRlZCgpOiBUYWJsZVNldHRpbmdDb2x1bW5SZWNvcmRbXX19IGNvbHVtbnNcbiAqIEBwcm9wZXJ0eSB7KGRhdGE6IEZvcm1EYXRhKSA9PiBQcm9taXNlPHZvaWQ+fSBzYXZlUmF3XG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGFibGVTZXR0aW5nUmFuc2Fja1F1ZXJ5XG4gKiBAcHJvcGVydHkgeyhuYW1lOiBzdHJpbmcpID0+IFRhYmxlU2V0dGluZ1JhbnNhY2tRdWVyeX0gcHJlbG9hZFxuICogQHByb3BlcnR5IHsoKSA9PiBQcm9taXNlPFRhYmxlU2V0dGluZ1JlY29yZCB8IHVuZGVmaW5lZD59IGZpcnN0XG4gKi9cbi8qKiBAdHlwZWRlZiB7bmV3ICgpID0+IFRhYmxlU2V0dGluZ1JlY29yZH0gVGFibGVTZXR0aW5nQ29uc3RydWN0b3IgKi9cbi8qKlxuICogQHR5cGVkZWYge1RhYmxlU2V0dGluZ0NvbnN0cnVjdG9yICYge1xuICogICByYW5zYWNrKGFyZ3M6IHtpZGVudGlmaWVyX2VxOiBzdHJpbmcsIHVzZXJfaWRfZXE6IG51bWJlciB8IHN0cmluZywgdXNlcl90eXBlX2VxOiBzdHJpbmcgfCBudWxsfSk6IFRhYmxlU2V0dGluZ1JhbnNhY2tRdWVyeVxuICogfX0gVGFibGVTZXR0aW5nU3RhdGljXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGFibGVTZXR0aW5nc1RhYmxlTGlrZVxuICogQHByb3BlcnR5IHt7Y3VycmVudFVzZXI/OiBDdXJyZW50VXNlck1vZGVsIHwgbnVsbH19IHByb3BzXG4gKiBAcHJvcGVydHkge3tpZGVudGlmaWVyOiBzdHJpbmd9fSBzdGF0ZVxuICogQHByb3BlcnR5IHsoKSA9PiBUYWJsZUNvbHVtbkRlZmluaXRpb25bXX0gY29sdW1uc0FzQXJyYXlcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQcmVwYXJlZENvbHVtbnNSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8e2NvbHVtbjogVGFibGVDb2x1bW5EZWZpbml0aW9uIHwgdW5kZWZpbmVkLCB0YWJsZVNldHRpbmdDb2x1bW46IFRhYmxlU2V0dGluZ0NvbHVtblJlY29yZH0+fSBjb2x1bW5zXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBwcmVsb2FkXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGFibGVDb2x1bW5TYXZlRGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWR9IGF0dHJpYnV0ZV9uYW1lXG4gKiBAcHJvcGVydHkge251bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZH0gW2lkXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkZW50aWZpZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW10gfCB1bmRlZmluZWR9IHBhdGhcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9zaXRpb25dXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gc29ydF9rZXlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGx9IFt2aXNpYmxlXVxuICogQHByb3BlcnR5IHt0cnVlfSBbX2Rlc3Ryb3ldXG4gKi9cbmNvbnN0IFRhYmxlU2V0dGluZ01vZGVsID0gLyoqIEB0eXBlIHtUYWJsZVNldHRpbmdTdGF0aWN9ICovIChUYWJsZVNldHRpbmcpXG5cbi8vIEhhdmUgYSBsb2NrIGZvciBlYWNoIHVuaXF1ZSB0YWJsZSBpZGVudGlmaWVyXG5jb25zdCB0YWJsZVNldHRpbmdzTG9ja3MgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJlYWRlcnNXcml0ZXJMb2NrPn0gKi8gKHt9KVxuXG4vKiogUGVyc2lzdGVudCB0YWJsZSBzZXR0aW5ncyBtYW5hZ2VyLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJUYWJsZVNldHRpbmdzIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcm9vdDBcbiAgICogQHBhcmFtIHtUYWJsZVNldHRpbmdzVGFibGVMaWtlfSByb290MC50YWJsZVxuICAgKi9cbiAgY29uc3RydWN0b3Ioe3RhYmxlfSkge1xuICAgIHRoaXMudGFibGUgPSB0YWJsZVxuICAgIHRoaXMuc2V0VGFibGVTZXR0aW5nc0xvY2soKVxuICB9XG5cbiAgLyoqIHNldFRhYmxlU2V0dGluZ3NMb2NrLiAqL1xuICBzZXRUYWJsZVNldHRpbmdzTG9jaygpIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5pZGVudGlmaWVyKClcblxuICAgIGlmICghKGlkZW50aWZpZXIgaW4gdGFibGVTZXR0aW5nc0xvY2tzKSkge1xuICAgICAgdGFibGVTZXR0aW5nc0xvY2tzW2lkZW50aWZpZXJdID0gbmV3IFJlYWRlcnNXcml0ZXJMb2NrKClcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlU2V0dGluZ3NMb2NrID0gZGlnZyh0YWJsZVNldHRpbmdzTG9ja3MsIGlkZW50aWZpZXIpXG4gIH1cblxuICAvKiogQHJldHVybnMge1RhYmxlQ29sdW1uRGVmaW5pdGlvbltdfSAqL1xuICBjb2x1bW5zID0gKCkgPT4gdGhpcy50YWJsZS5jb2x1bW5zQXNBcnJheSgpXG5cbiAgLyoqIEByZXR1cm5zIHtBcnJheTx7Y29sdW1uOiBUYWJsZUNvbHVtbkRlZmluaXRpb24sIGlkZW50aWZpZXI6IHN0cmluZywgcG9zaXRpb246IG51bWJlcn0+fSAqL1xuICBjb2x1bW5zV2l0aFBvc2l0aW9ucyA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLmNvbHVtbnMoKVxuICAgICAgLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKHtjb2x1bW4sIGlkZW50aWZpZXI6IGNvbHVtbklkZW50aWZpZXIoY29sdW1uKSwgcG9zaXRpb246IGNvbHVtbkluZGV4ICsgMX0pKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtDdXJyZW50VXNlck1vZGVsIHwgbnVsbH0gKi9cbiAgY3VycmVudFVzZXIgPSAoKSA9PiBkaWdnKHRoaXMsIFwidGFibGVcIiwgXCJwcm9wc1wiLCBcImN1cnJlbnRVc2VyXCIpXG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIGlkZW50aWZpZXIgPSAoKSA9PiBkaWdnKHRoaXMsIFwidGFibGVcIiwgXCJzdGF0ZVwiLCBcImlkZW50aWZpZXJcIilcblxuICAvKipcbiAgICogcHJlcGFyZWRDb2x1bW5zLlxuICAgKiBAcGFyYW0ge1RhYmxlU2V0dGluZ1JlY29yZH0gdGFibGVTZXR0aW5nXG4gICAqIEByZXR1cm5zIHtQcmVwYXJlZENvbHVtbnNSZXN1bHQgfCB1bmRlZmluZWR9XG4gICAqL1xuICBwcmVwYXJlZENvbHVtbnMgPSAodGFibGVTZXR0aW5nKSA9PiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMudGFibGUuY29sdW1uc0FzQXJyYXkoKVxuICAgIGNvbnN0IG9yZGVyZWQgPSB0aGlzLm9yZGVyZWRUYWJsZVNldHRpbmdDb2x1bW5zKHRhYmxlU2V0dGluZylcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBjb2x1bW5zOiBbXSxcbiAgICAgIHByZWxvYWQ6IFtdXG4gICAgfVxuXG4gICAgaWYgKCFvcmRlcmVkKSByZXR1cm5cblxuICAgIGZvciAoY29uc3QgdGFibGVTZXR0aW5nQ29sdW1uIG9mIG9yZGVyZWQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW5JZGVudGlmaWVyKGNvbHVtbikgPT0gdGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKSlcblxuICAgICAgcmVzdWx0LmNvbHVtbnMucHVzaCh7Y29sdW1uLCB0YWJsZVNldHRpbmdDb2x1bW59KVxuXG4gICAgICAvLyBBZGQgbmVlZGVkIHByZWxvYWRzIGlmIGNvbHVtbiBpcyB2aXNpYmxlXG4gICAgICBpZiAoY29sdW1uVmlzaWJsZShjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbikpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5wYXRoKSB7XG4gICAgICAgICAgY29uc3QgcHJlbG9hZCA9IGNvbHVtbi5wYXRoLm1hcCgocGF0aFBhcnQpID0+IGluZmxlY3Rpb24udW5kZXJzY29yZShwYXRoUGFydCkpLmpvaW4oXCIuXCIpXG5cbiAgICAgICAgICBpZiAoIXJlc3VsdC5wcmVsb2FkLmluY2x1ZGVzKHByZWxvYWQpKSByZXN1bHQucHJlbG9hZC5wdXNoKHByZWxvYWQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogb3JkZXJlZFRhYmxlU2V0dGluZ0NvbHVtbnMuXG4gICAqIEBwYXJhbSB7VGFibGVTZXR0aW5nUmVjb3JkfSB0YWJsZVNldHRpbmdcbiAgICogQHJldHVybnMge1RhYmxlU2V0dGluZ0NvbHVtblJlY29yZFtdfVxuICAgKi9cbiAgb3JkZXJlZFRhYmxlU2V0dGluZ0NvbHVtbnMgPSAodGFibGVTZXR0aW5nKSA9PiB7XG4gICAgcmV0dXJuIHRhYmxlU2V0dGluZ1xuICAgICAgLmNvbHVtbnMoKVxuICAgICAgLmxvYWRlZCgpXG4gICAgICAuc29ydCgodGFibGVTZXR0aW5nQ29sdW1uMSwgdGFibGVTZXR0aW5nQ29sdW1uMikgPT4gdGFibGVTZXR0aW5nQ29sdW1uMS5wb3NpdGlvbigpIC0gdGFibGVTZXR0aW5nQ29sdW1uMi5wb3NpdGlvbigpKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPFRhYmxlU2V0dGluZ1JlY29yZD59ICovXG4gIGxvYWRFeGlzdGluZ09yQ3JlYXRlVGFibGVTZXR0aW5ncyA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy50YWJsZVNldHRpbmdzTG9jay53cml0ZShhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgdGFibGVTZXR0aW5nID0gYXdhaXQgdGhpcy5sb2FkVGFibGVTZXR0aW5nKClcblxuICAgICAgaWYgKHRhYmxlU2V0dGluZykge1xuICAgICAgICB0YWJsZVNldHRpbmcgPSBhd2FpdCB0aGlzLnVwZGF0ZVRhYmxlU2V0dGluZyh0YWJsZVNldHRpbmcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWJsZVNldHRpbmcgPSBhd2FpdCB0aGlzLmNyZWF0ZUluaXRpYWxUYWJsZVNldHRpbmcoKVxuXG4gICAgICAgIGlmICghdGFibGVTZXR0aW5nKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB0YWJsZVNldHRpbmcgcmV0dXJuZWQgYnkgY3JlYXRlSW5pdGlhbFRhYmxlU2V0dGluZ1wiKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFibGVTZXR0aW5nXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxUYWJsZVNldHRpbmdSZWNvcmQgfCB1bmRlZmluZWQ+fSAqL1xuICBsb2FkVGFibGVTZXR0aW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghVGFibGVTZXR0aW5nTW9kZWwpIHRocm93IG5ldyBFcnJvcihcIlRhYmxlU2V0dGluZyBtb2RlbCBpc24ndCBnbG9iYWxseSBhdmFpbGFibGVcIilcblxuICAgIGNvbnN0IHRhYmxlU2V0dGluZyA9IGF3YWl0IFRhYmxlU2V0dGluZ01vZGVsXG4gICAgICAucmFuc2Fjayh7XG4gICAgICAgIGlkZW50aWZpZXJfZXE6IHRoaXMuaWRlbnRpZmllcigpLFxuICAgICAgICB1c2VyX2lkX2VxOiB0aGlzLmN1cnJlbnRVc2VySWRPckZhbGxiYWNrKCksXG4gICAgICAgIHVzZXJfdHlwZV9lcTogdGhpcy5jdXJyZW50VXNlclR5cGVPckZhbGxiYWNrKClcbiAgICAgIH0pXG4gICAgICAucHJlbG9hZChcImNvbHVtbnNcIilcbiAgICAgIC5maXJzdCgpXG5cbiAgICByZXR1cm4gdGFibGVTZXR0aW5nXG4gIH1cblxuICAvKipcbiAgICogY3VycmVudFVzZXJJZE9yRmFsbGJhY2suXG4gICAqIEByZXR1cm5zIHtudW1iZXIgfCBzdHJpbmd9XG4gICAqL1xuICBjdXJyZW50VXNlcklkT3JGYWxsYmFjaygpIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuY3VycmVudFVzZXIoKVxuXG4gICAgaWYgKGN1cnJlbnRVc2VyKSByZXR1cm4gY3VycmVudFVzZXIuaWQoKVxuXG4gICAgcmV0dXJuIHRoaXMuYW5vbnltb3VzZVVzZXJJZCgpXG4gIH1cblxuICAvKipcbiAgICogY3VycmVudFVzZXJUeXBlT3JGYWxsYmFjay5cbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bGx9XG4gICAqL1xuICBjdXJyZW50VXNlclR5cGVPckZhbGxiYWNrKCkge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5jdXJyZW50VXNlcigpXG5cbiAgICBpZiAoY3VycmVudFVzZXIpIHJldHVybiBkaWdnKGN1cnJlbnRVc2VyLm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBhbm9ueW1vdXNlVXNlcklkLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgYW5vbnltb3VzZVVzZXJJZCgpIHtcbiAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSBgQXBpTWFrZXJUYWJsZUFub255bW91c1VzZXJJZC0ke3RoaXMuaWRlbnRpZmllcigpfWBcblxuICAgIGlmICghKHZhcmlhYmxlTmFtZSBpbiBsb2NhbFN0b3JhZ2UpKSB7XG4gICAgICBjb25zdCBnZW5lcmF0ZWRJZCA9IHV1aWR2NCgpXG5cbiAgICAgIGxvY2FsU3RvcmFnZVt2YXJpYWJsZU5hbWVdID0gZ2VuZXJhdGVkSWRcbiAgICB9XG5cbiAgICByZXR1cm4gZGlnZyhsb2NhbFN0b3JhZ2UsIHZhcmlhYmxlTmFtZSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxUYWJsZVNldHRpbmdSZWNvcmQ+fSAqL1xuICBjcmVhdGVJbml0aWFsVGFibGVTZXR0aW5nID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlU2V0dGluZ0RhdGEgPSB7XG4gICAgICBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIoKSxcbiAgICAgIHVzZXJfaWQ6IHRoaXMuY3VycmVudFVzZXJJZE9yRmFsbGJhY2soKSxcbiAgICAgIHVzZXJfdHlwZTogdGhpcy5jdXJyZW50VXNlclR5cGVPckZhbGxiYWNrKCksXG4gICAgICBjb2x1bW5zX2F0dHJpYnV0ZXM6IHt9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbY29sdW1uS2V5LCB7Y29sdW1uLCBpZGVudGlmaWVyLCBwb3NpdGlvbn1dIG9mIHRoaXMuY29sdW1uc1dpdGhQb3NpdGlvbnMoKS5lbnRyaWVzKCkpIHtcbiAgICAgIHRhYmxlU2V0dGluZ0RhdGEuY29sdW1uc19hdHRyaWJ1dGVzW2NvbHVtbktleV0gPSB0aGlzLmNvbHVtblNhdmVEYXRhKGNvbHVtbiwge2lkZW50aWZpZXIsIHBvc2l0aW9ufSlcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZVNldHRpbmcgPSBuZXcgVGFibGVTZXR0aW5nTW9kZWwoKVxuICAgIGNvbnN0IHRhYmxlU2V0dGluZ0Zvcm1EYXRhID0gb2JqZWN0VG9Gb3JtRGF0YSh7dGFibGVfc2V0dGluZzogdGFibGVTZXR0aW5nRGF0YX0pXG5cbiAgICBhd2FpdCB0YWJsZVNldHRpbmcuc2F2ZVJhdyh0YWJsZVNldHRpbmdGb3JtRGF0YSlcblxuICAgIGNvbnN0IHJlbG9hZGVkVGFibGVTZXR0aW5nID0gYXdhaXQgdGhpcy5sb2FkVGFibGVTZXR0aW5nKClcblxuICAgIGlmICghcmVsb2FkZWRUYWJsZVNldHRpbmcpIHRocm93IG5ldyBFcnJvcihcIk5vIHJlbG9hZGVkVGFibGVTZXR0aW5nIHJldHVybmVkIGJ5IGxvYWRUYWJsZVNldHRpbmdcIilcblxuICAgIHJldHVybiByZWxvYWRlZFRhYmxlU2V0dGluZ1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbHVtblNhdmVEYXRhLlxuICAgKiBAcGFyYW0ge1RhYmxlQ29sdW1uRGVmaW5pdGlvbn0gY29sdW1uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByb290MFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcm9vdDAuaWRlbnRpZmllclxuICAgKiBAcGFyYW0ge251bWJlcn0gcm9vdDAucG9zaXRpb25cbiAgICogQHJldHVybnMge1RhYmxlQ29sdW1uU2F2ZURhdGF9XG4gICAqL1xuICBjb2x1bW5TYXZlRGF0YShjb2x1bW4sIHtpZGVudGlmaWVyLCBwb3NpdGlvbn0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cmlidXRlX25hbWU6IGNvbHVtbi5hdHRyaWJ1dGUsXG4gICAgICBpZGVudGlmaWVyLFxuICAgICAgcGF0aDogY29sdW1uLnBhdGgsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIHNvcnRfa2V5OiBjb2x1bW4uc29ydEtleSxcbiAgICAgIHZpc2libGU6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlVGFibGVTZXR0aW5nLlxuICAgKiBAcGFyYW0ge1RhYmxlU2V0dGluZ1JlY29yZH0gdGFibGVTZXR0aW5nXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFRhYmxlU2V0dGluZ1JlY29yZD59XG4gICAqL1xuICB1cGRhdGVUYWJsZVNldHRpbmcgPSBhc3luYyAodGFibGVTZXR0aW5nKSA9PiB7XG4gICAgY29uc3QgY2hhbmdlZEF0dHJpYnV0ZXNMaXN0ID0gW1wiYXR0cmlidXRlTmFtZVwiLCBcInNvcnRLZXlcIl1cbiAgICBjb25zdCBjb2x1bW5zV2l0aFBvc2l0aW9ucyA9IHRoaXMuY29sdW1uc1dpdGhQb3NpdGlvbnMoKVxuICAgIGNvbnN0IGNvbHVtbnNEYXRhID0ge31cbiAgICBjb25zdCB0YWJsZVNldHRpbmdEYXRhID0ge2NvbHVtbnNfYXR0cmlidXRlczogY29sdW1uc0RhdGF9XG4gICAgY29uc3QgZXhpc3RpbmdDb2x1bW5zID0gdGFibGVTZXR0aW5nLmNvbHVtbnMoKS5sb2FkZWQoKVxuICAgIGxldCBjb2x1bW5zS2V5Q291bnQgPSAwXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuXG4gICAgLy8gQWRkIG1pc3NpbmcgY29sdW1uc1xuICAgIGZvciAoY29uc3Qge2NvbHVtbiwgaWRlbnRpZmllciwgcG9zaXRpb259IG9mIGNvbHVtbnNXaXRoUG9zaXRpb25zKSB7XG4gICAgICBjb25zdCB0YWJsZVNldHRpbmdDb2x1bW4gPSBleGlzdGluZ0NvbHVtbnMuZmluZCgodGFibGVTZXR0aW5nQ29sdW1uKSA9PiB0YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpXG5cbiAgICAgIGlmICghdGFibGVTZXR0aW5nQ29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbktleSA9ICsrY29sdW1uc0tleUNvdW50XG5cbiAgICAgICAgY29sdW1uc0RhdGFbY29sdW1uS2V5XSA9IHRoaXMuY29sdW1uU2F2ZURhdGEoXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgICAgICBwb3NpdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgKVxuXG4gICAgICAgIGxvZ2dlci5kZWJ1ZygoKSA9PiBgQ2hhbmdlZCBiZWNhdXNlIG9mIG5ldyBjb2x1bW4gYXQgcG9zaXRpb24gJHtwb3NpdGlvbn06ICR7Y29sdW1uLmxhYmVsfWApXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNvbHVtbnMgdG8gbWF0Y2ggdGhlIGN1cnJlbnQgY29sdW1uIG1ldGFkYXRhIHdpdGhvdXQgb3ZlcndyaXRpbmcgdXNlci1zYXZlZCBvcmRlci5cbiAgICBmb3IgKGNvbnN0IHtjb2x1bW4sIGlkZW50aWZpZXJ9IG9mIGNvbHVtbnNXaXRoUG9zaXRpb25zKSB7XG4gICAgICBjb25zdCB0YWJsZVNldHRpbmdDb2x1bW4gPSBleGlzdGluZ0NvbHVtbnMuZmluZCgodGFibGVTZXR0aW5nQ29sdW1uKSA9PiB0YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpXG5cbiAgICAgIGlmICh0YWJsZVNldHRpbmdDb2x1bW4pIHtcbiAgICAgICAgbGV0IGNvbHVtbkNoYW5nZWQgPSBmYWxzZVxuXG4gICAgICAgIGZvciAoY29uc3QgY2hhbmdlZEF0dHJpYnV0ZSBvZiBjaGFuZ2VkQXR0cmlidXRlc0xpc3QpIHtcbiAgICAgICAgICBsZXQgY29sdW1uQXR0cmlidXRlTmFtZVxuXG4gICAgICAgICAgaWYgKGNoYW5nZWRBdHRyaWJ1dGUgPT0gXCJhdHRyaWJ1dGVOYW1lXCIpIHtcbiAgICAgICAgICAgIGNvbHVtbkF0dHJpYnV0ZU5hbWUgPSBcImF0dHJpYnV0ZVwiXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbHVtbkF0dHJpYnV0ZU5hbWUgPSBjaGFuZ2VkQXR0cmlidXRlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgb2xkQXR0cmlidXRlVmFsdWUgPSB0YWJsZVNldHRpbmdDb2x1bW5bY2hhbmdlZEF0dHJpYnV0ZV0oKVxuICAgICAgICAgIGNvbnN0IG5ld0F0dHJpYnV0ZVZhbHVlID0gY29sdW1uW2NvbHVtbkF0dHJpYnV0ZU5hbWVdXG5cbiAgICAgICAgICBpZiAob2xkQXR0cmlidXRlVmFsdWUgIT0gbmV3QXR0cmlidXRlVmFsdWUpIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygoKSA9PiBgJHtjaGFuZ2VkQXR0cmlidXRlfSBjaGFuZ2VkIGZyb20gJHtvbGRBdHRyaWJ1dGVWYWx1ZX0gdG8gJHtuZXdBdHRyaWJ1dGVWYWx1ZX0gb24gY29sdW1uOiAke2NvbHVtbi5sYWJlbH1gKVxuICAgICAgICAgICAgY29sdW1uQ2hhbmdlZCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2x1bW5QYXRoQXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjb2x1bW4ucGF0aClcbiAgICAgICAgY29uc3QgdGFibGVTZXR0aW5nQ29sdW1uUGF0aEFzU3RyaW5nID0gdGFibGVTZXR0aW5nQ29sdW1uLnBhdGgoKVxuXG4gICAgICAgIGlmIChjb2x1bW5QYXRoQXNTdHJpbmcgIT0gdGFibGVTZXR0aW5nQ29sdW1uUGF0aEFzU3RyaW5nKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCgpID0+IGBQYXRoIGNoYW5nZWQgb24gJHtjb2x1bW4ubGFiZWx9IGZyb20gJHtjb2x1bW5QYXRoQXNTdHJpbmd9IHRvICR7dGFibGVTZXR0aW5nQ29sdW1uUGF0aEFzU3RyaW5nfWApXG4gICAgICAgICAgY29sdW1uQ2hhbmdlZCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW5DaGFuZ2VkKSB7XG4gICAgICAgICAgY29uc3QgY29sdW1uS2V5ID0gKytjb2x1bW5zS2V5Q291bnRcblxuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgICAgY29sdW1uc0RhdGFbY29sdW1uS2V5XSA9IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZV9uYW1lOiBjb2x1bW4uYXR0cmlidXRlLFxuICAgICAgICAgICAgaWQ6IHRhYmxlU2V0dGluZ0NvbHVtbi5pZCgpLFxuICAgICAgICAgICAgcGF0aDogY29sdW1uLnBhdGgsXG4gICAgICAgICAgICBzb3J0X2tleTogY29sdW1uLnNvcnRLZXlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlU2V0dGluZ0NvbHVtbiBvZiBleGlzdGluZ0NvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGNvbHVtbkV4aXN0cyA9IGNvbHVtbnNXaXRoUG9zaXRpb25zLmZpbmQoKHtpZGVudGlmaWVyfSkgPT4gaWRlbnRpZmllciA9PSB0YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpKVxuXG4gICAgICBpZiAoIWNvbHVtbkV4aXN0cykge1xuICAgICAgICAvLyBSZW1vdmVkIHNhdmVkIGNvbHVtbnMgbm8gbG9uZ2VyIGZvdW5kLlxuICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSArK2NvbHVtbnNLZXlDb3VudFxuXG4gICAgICAgIGNvbHVtbnNEYXRhW2NvbHVtbktleV0gPSB7XG4gICAgICAgICAgaWQ6IHRhYmxlU2V0dGluZ0NvbHVtbi5pZCgpLFxuICAgICAgICAgIF9kZXN0cm95OiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgY2hhbmdlZCA9IHRydWVcblxuICAgICAgICBsb2dnZXIuZGVidWcoKCkgPT4gYENvbHVtbiBnb3QgcmVtb3ZlZDogJHt0YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpfWApXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIGNvbnN0IHRhYmxlU2V0dGluZ0Zvcm1EYXRhID0gb2JqZWN0VG9Gb3JtRGF0YSh7dGFibGVfc2V0dGluZzogdGFibGVTZXR0aW5nRGF0YX0pXG5cbiAgICAgIGF3YWl0IHRhYmxlU2V0dGluZy5zYXZlUmF3KHRhYmxlU2V0dGluZ0Zvcm1EYXRhKVxuXG4gICAgICAvLyBSZS1yZWFkIHRoZSB0YWJsZSBzZXR0aW5nIGFmdGVyIHN0cnVjdHVyYWwgdXBkYXRlcyBzbyBwcmVwYXJlZCBjb2x1bW5zIHVzZSB0aGVcbiAgICAgIC8vIHBlcnNpc3RlZCBjb2x1bW4gbGlzdCByYXRoZXIgdGhhbiB0aGUgc3RhbGUgcHJlLXNhdmUgYXNzb2NpYXRpb24gY2FjaGUuXG4gICAgICBjb25zdCByZWxvYWRlZFRhYmxlU2V0dGluZyA9IGF3YWl0IHRoaXMubG9hZFRhYmxlU2V0dGluZygpXG5cbiAgICAgIGlmICghcmVsb2FkZWRUYWJsZVNldHRpbmcpIHRocm93IG5ldyBFcnJvcihcIk5vIHJlbG9hZGVkVGFibGVTZXR0aW5nIHJldHVybmVkIGJ5IGxvYWRUYWJsZVNldHRpbmdcIilcblxuICAgICAgcmV0dXJuIHJlbG9hZGVkVGFibGVTZXR0aW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlU2V0dGluZ1xuICB9XG59XG4iXX0=
|