@kaspernj/api-maker 1.0.445 → 1.0.447
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/{.eslintrc.cjs → .eslintrc.js} +4 -0
- package/README.md +35 -0
- package/android/build.gradle +43 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/expo/modules/api_maker/ApiMakerModule.kt +50 -0
- package/android/src/main/java/expo/modules/api_maker/ApiMakerView.kt +30 -0
- package/build/api.js +120 -0
- package/build/attribute-not-loaded-error.js +2 -0
- package/build/base-component.js +5 -0
- package/build/base-error.js +33 -0
- package/build/base-model/attribute.js +25 -0
- package/build/base-model/column.js +11 -0
- package/build/base-model/reflection.js +14 -0
- package/build/base-model/scope.js +11 -0
- package/build/base-model.js +828 -0
- package/build/bootstrap/attribute-row/index.js +105 -0
- package/build/bootstrap/attribute-rows.js +31 -0
- package/build/bootstrap/card.js +138 -0
- package/build/bootstrap/checkbox.js +97 -0
- package/build/bootstrap/checkboxes.js +183 -0
- package/build/bootstrap/index.js +2 -0
- package/build/bootstrap/input.js +128 -0
- package/build/bootstrap/invalid-feedback.js +27 -0
- package/build/bootstrap/paginate.js +150 -0
- package/build/bootstrap/radio-buttons.js +72 -0
- package/build/bootstrap/select.js +88 -0
- package/build/bootstrap/sort-link.js +130 -0
- package/build/cable-connection-pool.js +128 -0
- package/build/cable-subscription-pool.js +207 -0
- package/build/cable-subscription.js +21 -0
- package/build/cache-key-generator.js +81 -0
- package/build/can-can.js +134 -0
- package/build/channels-consumer.js +3 -0
- package/build/collection-loader.js +48 -0
- package/build/collection.js +279 -0
- package/build/command-submit-data.js +81 -0
- package/build/commands-pool.js +195 -0
- package/build/compose.js +9 -0
- package/build/config.js +53 -0
- package/build/custom-error.js +5 -0
- package/build/data-set-to-attributes.js +10 -0
- package/build/deserializer.js +56 -0
- package/build/destroy-error.js +5 -0
- package/build/devise.js +109 -0
- package/build/draggable-sort/controller.js +136 -0
- package/build/draggable-sort/index.js +114 -0
- package/build/draggable-sort/item.js +188 -0
- package/build/error-logger.js +101 -0
- package/build/error-messages.js +13 -0
- package/build/event-connection.js +32 -0
- package/build/event-model-class.js +24 -0
- package/build/events.js +5 -0
- package/build/form.js +83 -0
- package/build/index.js +3 -0
- package/build/inputs/attachment.js +121 -0
- package/build/inputs/auto-submit.js +36 -0
- package/build/inputs/checkbox.js +145 -0
- package/build/inputs/checkboxes.js +111 -0
- package/build/inputs/id-for-component.js +15 -0
- package/build/inputs/input-wrapper.js +18 -0
- package/build/inputs/input.js +230 -0
- package/build/inputs/money.js +179 -0
- package/build/inputs/name-for-component.js +13 -0
- package/build/inputs/select.js +92 -0
- package/build/instance-of-class-name.js +23 -0
- package/build/key-value-store.js +53 -0
- package/build/link.js +68 -0
- package/build/logger.js +30 -0
- package/build/modal.js +37 -0
- package/build/model-class-require.js +13 -0
- package/build/model-events.js +30 -0
- package/build/model-name.js +28 -0
- package/build/model-prop-type.js +101 -0
- package/build/model-recipes-loader.js +32 -0
- package/build/model-recipes-model-loader.js +357 -0
- package/build/models-response-reader.js +40 -0
- package/build/models.js +8 -0
- package/build/money-formatter.js +77 -0
- package/build/not-loaded-error.js +2 -0
- package/build/params.js +60 -0
- package/build/preloaded.js +38 -0
- package/build/resize-observer.js +11 -0
- package/build/result.js +13 -0
- package/build/router/route.js +262 -0
- package/build/router/switch.js +72 -0
- package/build/router.js +57 -0
- package/build/routes-native.js +202 -0
- package/build/routes.js +50 -0
- package/build/run-last.js +35 -0
- package/build/serializer.js +63 -0
- package/build/services.js +20 -0
- package/build/session-status-updater.js +126 -0
- package/build/source-maps-loader.js +171 -0
- package/build/super-admin/config-reader.js +84 -0
- package/build/super-admin/edit-page/edit-attribute-checkbox.js +85 -0
- package/build/super-admin/edit-page/edit-attribute-content.js +54 -0
- package/build/super-admin/edit-page/edit-attribute-input.js +79 -0
- package/build/super-admin/edit-page/edit-attribute.js +76 -0
- package/build/super-admin/edit-page.js +120 -0
- package/build/super-admin/has-edit-config.js +12 -0
- package/build/super-admin/index-page.js +24 -0
- package/build/super-admin/index.js +180 -0
- package/build/super-admin/layout/header/index.js +151 -0
- package/build/super-admin/layout/index.js +109 -0
- package/build/super-admin/layout/menu/index.js +93 -0
- package/build/super-admin/layout/menu/menu-content.js +40 -0
- package/build/super-admin/layout/menu/menu-item.js +83 -0
- package/build/super-admin/layout/no-access.js +25 -0
- package/build/super-admin/model-class-table.js +61 -0
- package/build/super-admin/models.js +8 -0
- package/build/super-admin/show-nav.js +49 -0
- package/build/super-admin/show-page/belongs-to-attribute-row.js +28 -0
- package/build/super-admin/show-page/index.js +141 -0
- package/build/super-admin/show-reflection-actions.js +47 -0
- package/build/super-admin/show-reflection-link.js +46 -0
- package/build/super-admin/show-reflection-page.js +47 -0
- package/build/table/column-content.js +112 -0
- package/build/table/column-identifier.js +18 -0
- package/build/table/column-visible.js +7 -0
- package/build/table/components/column.js +20 -0
- package/build/table/components/flat-list.js +20 -0
- package/build/table/components/header.js +25 -0
- package/build/table/components/row.js +25 -0
- package/build/table/filters/attribute-element.js +43 -0
- package/build/table/filters/filter-form.js +392 -0
- package/build/table/filters/filter.js +89 -0
- package/build/table/filters/index.js +182 -0
- package/build/table/filters/load-search-modal.js +174 -0
- package/build/table/filters/reflection-element.js +36 -0
- package/build/table/filters/save-search-modal.js +86 -0
- package/build/table/filters/scope-element.js +41 -0
- package/build/table/header-column-content.js +67 -0
- package/build/table/header-column.js +144 -0
- package/build/table/header-select.js +104 -0
- package/build/table/model-callback-args.js +10 -0
- package/build/table/model-column.js +87 -0
- package/build/table/model-row.js +179 -0
- package/build/table/select-calculator.js +63 -0
- package/build/table/settings/column-row.js +97 -0
- package/build/table/settings/download-action.js +78 -0
- package/build/table/settings/index.js +92 -0
- package/build/table/table-settings.js +219 -0
- package/build/table/table.js +972 -0
- package/build/table/use-sorting.js +34 -0
- package/build/table/widths.js +75 -0
- package/build/table/worker-plugins-check-all-checkbox.js +125 -0
- package/build/table/worker-plugins-checkbox.js +115 -0
- package/build/translated-attributes.js +10 -0
- package/build/translated-collections.js +11 -0
- package/build/updated-attribute.js +76 -0
- package/build/url-encode.js +15 -0
- package/build/use-breakpoint.js +44 -0
- package/build/use-can-can.js +55 -0
- package/build/use-collection.js +225 -0
- package/build/use-created-event.js +52 -0
- package/build/use-current-user.js +73 -0
- package/build/use-destroyed-event.js +60 -0
- package/build/use-event-emitter.js +13 -0
- package/build/use-event-listener.js +16 -0
- package/build/use-input.js +140 -0
- package/build/use-model-event.js +60 -0
- package/build/use-model.js +169 -0
- package/build/use-resize-observer.js +23 -0
- package/build/use-router.js +102 -0
- package/build/use-screen-layout.js +39 -0
- package/build/use-updated-event.js +60 -0
- package/build/use-validation-errors.js +30 -0
- package/build/utils/card.js +51 -0
- package/build/utils/checkbox.js +48 -0
- package/build/utils/default-style.js +18 -0
- package/build/utils/modal.js +61 -0
- package/build/utils/text.js +18 -0
- package/build/validation-error.js +28 -0
- package/build/validation-errors.js +98 -0
- package/build/with-collection.js +13 -0
- package/build/with-current-user.js +9 -0
- package/build/with-model.js +14 -0
- package/build/with-router.js +21 -0
- package/expo-module.config.json +17 -0
- package/ios/ApiMaker.podspec +29 -0
- package/ios/ApiMakerModule.swift +48 -0
- package/ios/ApiMakerView.swift +38 -0
- package/package.json +35 -14
- package/src/{api.mjs → api.js} +5 -5
- package/src/{base-error.mjs → base-error.js} +1 -1
- package/src/base-model/{attribute.mjs → attribute.js} +1 -1
- package/src/base-model/{reflection.mjs → reflection.js} +1 -1
- package/src/{base-model.mjs → base-model.js} +14 -14
- package/src/bootstrap/attribute-row/index.jsx +2 -2
- package/src/bootstrap/attribute-rows.jsx +1 -1
- package/src/bootstrap/card.jsx +1 -1
- package/src/bootstrap/checkbox.jsx +1 -1
- package/src/bootstrap/checkboxes.jsx +1 -1
- package/src/bootstrap/input.jsx +1 -1
- package/src/bootstrap/paginate.jsx +2 -2
- package/src/bootstrap/sort-link.jsx +3 -3
- package/src/{cable-connection-pool.mjs → cable-connection-pool.js} +3 -3
- package/src/{cable-subscription-pool.mjs → cable-subscription-pool.js} +4 -4
- package/src/{cable-subscription.mjs → cable-subscription.js} +1 -1
- package/src/{can-can.mjs → can-can.js} +1 -1
- package/src/collection-loader.jsx +2 -2
- package/src/{collection.mjs → collection.js} +3 -3
- package/src/{commands-pool.mjs → commands-pool.js} +11 -11
- package/src/{custom-error.mjs → custom-error.js} +1 -1
- package/src/{deserializer.mjs → deserializer.js} +2 -2
- package/src/{destroy-error.mjs → destroy-error.js} +1 -1
- package/src/{devise.mjs → devise.js} +5 -9
- package/src/draggable-sort/controller.js +137 -0
- package/src/draggable-sort/index.jsx +108 -0
- package/src/draggable-sort/item.jsx +174 -0
- package/src/{error-logger.mjs → error-logger.js} +1 -1
- package/src/event-connection.jsx +1 -1
- package/src/event-model-class.jsx +1 -1
- package/src/form.jsx +1 -1
- package/src/index.js +3 -0
- package/src/inputs/attachment.jsx +2 -2
- package/src/inputs/checkbox.jsx +7 -6
- package/src/inputs/checkboxes.jsx +1 -1
- package/src/inputs/input-wrapper.jsx +1 -1
- package/src/inputs/input.jsx +8 -7
- package/src/inputs/money.jsx +3 -3
- package/src/inputs/select.jsx +1 -1
- package/src/{key-value-store.mjs → key-value-store.js} +1 -1
- package/src/link.jsx +2 -2
- package/src/modal.jsx +1 -1
- package/src/{model-class-require.mjs → model-class-require.js} +4 -2
- package/src/{model-events.mjs → model-events.js} +1 -1
- package/src/{model-name.mjs → model-name.js} +1 -1
- package/src/{model-recipes-loader.mjs → model-recipes-loader.js} +1 -1
- package/src/{model-recipes-model-loader.mjs → model-recipes-model-loader.js} +2 -2
- package/src/{models-response-reader.mjs → models-response-reader.js} +2 -2
- package/src/models.js +7 -0
- package/src/{models.mjs.erb → models.js.erb} +1 -1
- package/src/{params.mjs → params.js} +2 -2
- package/src/{preloaded.mjs → preloaded.js} +1 -1
- package/src/resize-observer.jsx +1 -1
- package/src/router/route.jsx +1 -1
- package/src/router/switch.jsx +1 -1
- package/src/router.jsx +1 -1
- package/src/{routes-native.mjs → routes-native.js} +1 -1
- package/src/{services.mjs → services.js} +1 -1
- package/src/{session-status-updater.mjs → session-status-updater.js} +3 -3
- package/src/{source-maps-loader.mjs → source-maps-loader.js} +1 -1
- package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +1 -1
- package/src/super-admin/edit-page/edit-attribute-content.jsx +1 -1
- package/src/super-admin/edit-page/edit-attribute-input.jsx +1 -1
- package/src/super-admin/edit-page/edit-attribute.jsx +1 -1
- package/src/super-admin/edit-page.jsx +2 -2
- package/src/super-admin/has-edit-config.js +1 -1
- package/src/super-admin/index-page.jsx +1 -1
- package/src/super-admin/index.jsx +7 -7
- package/src/super-admin/layout/header/index.jsx +2 -2
- package/src/super-admin/layout/index.jsx +3 -3
- package/src/super-admin/layout/menu/index.jsx +3 -3
- package/src/super-admin/layout/menu/menu-content.jsx +2 -2
- package/src/super-admin/layout/menu/{menu-item/index.jsx → menu-item.jsx} +5 -6
- package/src/super-admin/layout/no-access.jsx +2 -2
- package/src/super-admin/model-class-table.jsx +3 -3
- package/src/super-admin/models.js +1 -1
- package/src/super-admin/show-nav.jsx +2 -2
- package/src/super-admin/show-page/belongs-to-attribute-row.jsx +1 -1
- package/src/super-admin/show-page/index.jsx +2 -2
- package/src/super-admin/show-reflection-actions.jsx +1 -1
- package/src/super-admin/show-reflection-link.jsx +1 -1
- package/src/super-admin/show-reflection-page.jsx +1 -1
- package/src/table/column-content.jsx +1 -1
- package/src/table/components/column.jsx +8 -2
- package/src/table/components/header.jsx +2 -2
- package/src/table/filters/filter-form.jsx +1 -1
- package/src/table/filters/index.jsx +5 -3
- package/src/table/filters/load-search-modal.jsx +6 -4
- package/src/table/filters/save-search-modal.jsx +4 -4
- package/src/table/header-column.jsx +59 -79
- package/src/table/header-select.jsx +1 -1
- package/src/table/model-column.jsx +12 -6
- package/src/table/model-row.jsx +11 -7
- package/src/table/{select-calculator.mjs → select-calculator.js} +1 -1
- package/src/table/settings/column-row.jsx +4 -3
- package/src/table/settings/download-action.jsx +3 -3
- package/src/table/settings/index.jsx +3 -3
- package/src/table/table-settings.js +5 -4
- package/src/table/table.jsx +149 -71
- package/src/table/{use-sorting.mjs → use-sorting.js} +1 -1
- package/src/table/{widths.mjs → widths.jsx} +11 -2
- package/src/table/worker-plugins-check-all-checkbox.jsx +2 -2
- package/src/table/worker-plugins-checkbox.jsx +2 -2
- package/src/{translated-collections.mjs → translated-collections.js} +1 -1
- package/src/updated-attribute.jsx +1 -1
- package/src/{use-breakpoint.mjs → use-breakpoint.js} +2 -2
- package/src/use-can-can.js +55 -0
- package/src/{use-collection.mjs → use-collection.js} +4 -4
- package/src/{use-created-event.mjs → use-created-event.js} +2 -2
- package/src/{use-current-user.mjs → use-current-user.js} +6 -5
- package/src/{use-destroyed-event.mjs → use-destroyed-event.js} +2 -2
- package/src/{use-input.mjs → use-input.js} +5 -5
- package/src/use-model-event.js +2 -2
- package/src/{use-model.mjs → use-model.js} +4 -4
- package/src/{use-resize-observer.mjs → use-resize-observer.js} +1 -1
- package/src/use-router.jsx +2 -2
- package/src/{use-updated-event.mjs → use-updated-event.js} +2 -2
- package/src/{use-validation-errors.mjs → use-validation-errors.js} +3 -3
- package/src/utils/checkbox.jsx +2 -2
- package/src/{validation-error.mjs → validation-error.js} +1 -1
- package/src/{validation-errors.mjs → validation-errors.js} +1 -1
- package/src/with-current-user.jsx +1 -1
- package/src/with-model.jsx +1 -1
- package/__tests__/base-model.test.mjs +0 -71
- package/__tests__/cable-connection-pool.test.mjs +0 -227
- package/__tests__/cable-subscription-pool.test.mjs +0 -27
- package/__tests__/can-can.test.mjs +0 -34
- package/__tests__/collection.test.mjs +0 -51
- package/__tests__/custom-error.test.mjs +0 -13
- package/__tests__/model-name.test.mjs +0 -34
- package/__tests__/model-prop-type.test.mjs +0 -113
- package/__tests__/params.test.mjs +0 -40
- package/__tests__/routes-native.test.mjs +0 -104
- package/__tests__/routes.test.mjs +0 -47
- package/__tests__/serializer.test.mjs +0 -30
- package/__tests__/support/task.mjs +0 -27
- package/__tests__/support/user.mjs +0 -32
- package/index.js +0 -1
- package/jest.config.js +0 -9
- package/src/event-created.jsx +0 -12
- package/src/event-destroyed.jsx +0 -25
- package/src/event-emitter-listener.jsx +0 -10
- package/src/event-listener.jsx +0 -25
- package/src/event-updated.jsx +0 -27
- package/src/super-admin/layout/menu/menu-item/style.scss +0 -10
- package/src/use-can-can.mjs +0 -48
- package/src/with-can-can.jsx +0 -12
- package/webpack.config.js +0 -15
- /package/src/{attribute-not-loaded-error.mjs → attribute-not-loaded-error.js} +0 -0
- /package/src/base-model/{column.mjs → column.js} +0 -0
- /package/src/base-model/{scope.mjs → scope.js} +0 -0
- /package/src/{cache-key-generator.mjs → cache-key-generator.js} +0 -0
- /package/src/{channels-consumer.mjs → channels-consumer.js} +0 -0
- /package/src/{command-submit-data.mjs → command-submit-data.js} +0 -0
- /package/src/{config.mjs → config.js} +0 -0
- /package/src/{data-set-to-attributes.mjs → data-set-to-attributes.js} +0 -0
- /package/src/{error-messages.mjs → error-messages.js} +0 -0
- /package/src/{events.mjs → events.js} +0 -0
- /package/src/inputs/{auto-submit.mjs → auto-submit.js} +0 -0
- /package/src/inputs/{id-for-component.mjs → id-for-component.js} +0 -0
- /package/src/inputs/{name-for-component.mjs → name-for-component.js} +0 -0
- /package/src/{instance-of-class-name.mjs → instance-of-class-name.js} +0 -0
- /package/src/{logger.mjs → logger.js} +0 -0
- /package/src/{model-prop-type.mjs → model-prop-type.js} +0 -0
- /package/src/{money-formatter.mjs → money-formatter.js} +0 -0
- /package/src/{not-loaded-error.mjs → not-loaded-error.js} +0 -0
- /package/src/{result.mjs → result.js} +0 -0
- /package/src/{routes.mjs → routes.js} +0 -0
- /package/src/{run-last.mjs → run-last.js} +0 -0
- /package/src/{serializer.mjs → serializer.js} +0 -0
- /package/src/table/{column-identifier.mjs → column-identifier.js} +0 -0
- /package/src/table/{column-visible.mjs → column-visible.js} +0 -0
- /package/src/table/{model-callback-args.mjs → model-callback-args.js} +0 -0
- /package/src/{translated-collections-data.mjs.erb → translated-collections-data.js.erb} +0 -0
- /package/src/{url-encode.mjs → url-encode.js} +0 -0
- /package/src/{use-event-emitter.mjs → use-event-emitter.js} +0 -0
- /package/src/{use-event-listener.mjs → use-event-listener.js} +0 -0
- /package/src/{use-screen-layout.mjs → use-screen-layout.js} +0 -0
package/build/can-can.js
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { digg } from "diggerize";
|
|
2
|
+
import EventEmitter from "events";
|
|
3
|
+
import * as inflection from "inflection";
|
|
4
|
+
import { ReadersWriterLock } from "epic-locks";
|
|
5
|
+
import Services from "./services";
|
|
6
|
+
const shared = {};
|
|
7
|
+
export default class ApiMakerCanCan {
|
|
8
|
+
abilities = [];
|
|
9
|
+
abilitiesToLoad = [];
|
|
10
|
+
abilitiesToLoadData = [];
|
|
11
|
+
events = new EventEmitter();
|
|
12
|
+
lock = new ReadersWriterLock();
|
|
13
|
+
static current() {
|
|
14
|
+
if (!shared.currentApiMakerCanCan) shared.currentApiMakerCanCan = new ApiMakerCanCan();
|
|
15
|
+
return shared.currentApiMakerCanCan;
|
|
16
|
+
}
|
|
17
|
+
can(ability, subject) {
|
|
18
|
+
let abilityToUse = inflection.underscore(ability);
|
|
19
|
+
const foundAbility = this.findAbility(abilityToUse, subject);
|
|
20
|
+
if (foundAbility === undefined) {
|
|
21
|
+
let subjectLabel = subject;
|
|
22
|
+
|
|
23
|
+
// Translate resource-models into class name strings
|
|
24
|
+
if (typeof subject == "function" && subject.modelClassData) {
|
|
25
|
+
subjectLabel = digg(subject.modelClassData(), "name");
|
|
26
|
+
}
|
|
27
|
+
console.error(`Ability not loaded ${subjectLabel}#${abilityToUse}`, {
|
|
28
|
+
abilities: this.abilities,
|
|
29
|
+
ability,
|
|
30
|
+
subject
|
|
31
|
+
});
|
|
32
|
+
return false;
|
|
33
|
+
} else {
|
|
34
|
+
return digg(foundAbility, "can");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
findAbility(ability, subject) {
|
|
38
|
+
return this.abilities.find(abilityData => {
|
|
39
|
+
const abilityDataSubject = digg(abilityData, "subject");
|
|
40
|
+
const abilityDataAbility = digg(abilityData, "ability");
|
|
41
|
+
if (abilityDataAbility == ability) {
|
|
42
|
+
// If actually same class
|
|
43
|
+
if (abilityDataSubject == subject) return true;
|
|
44
|
+
|
|
45
|
+
// Sometimes in dev when using linking it will actually be two different but identical resource classes
|
|
46
|
+
if (typeof subject == "function" && subject.modelClassData && typeof abilityDataSubject == "function" && abilityDataSubject.modelClassData && digg(subject.modelClassData(), "name") == digg(abilityDataSubject.modelClassData(), "name")) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
isAbilityLoaded(ability, subject) {
|
|
54
|
+
const foundAbility = this.findAbility(ability, subject);
|
|
55
|
+
if (foundAbility !== undefined) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
async loadAbilities(abilities) {
|
|
61
|
+
await this.lock.read(async () => {
|
|
62
|
+
const promises = [];
|
|
63
|
+
for (const abilityData of abilities) {
|
|
64
|
+
const subject = abilityData[0];
|
|
65
|
+
if (!subject) throw new Error(`Invalid subject given in abilities: ${subject} - ${JSON.stringify(abilities)}`);
|
|
66
|
+
if (!Array.isArray(abilityData[1])) throw new Error(`Expected an array of abilities but got: ${typeof abilityData[1]}: ${abilityData[1]}`);
|
|
67
|
+
for (const ability of abilityData[1]) {
|
|
68
|
+
const promise = this.loadAbility(ability, subject);
|
|
69
|
+
promises.push(promise);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
await Promise.all(promises);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
loadAbility(ability, subject) {
|
|
76
|
+
return new Promise(resolve => {
|
|
77
|
+
ability = inflection.underscore(ability);
|
|
78
|
+
if (this.isAbilityLoaded(ability, subject)) {
|
|
79
|
+
resolve();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const foundAbility = this.abilitiesToLoad.find(abilityToLoad => digg(abilityToLoad, "ability") == ability && digg(abilityToLoad, "subject") == subject);
|
|
83
|
+
if (foundAbility) {
|
|
84
|
+
foundAbility.callbacks.push(resolve);
|
|
85
|
+
} else {
|
|
86
|
+
this.abilitiesToLoad.push({
|
|
87
|
+
ability,
|
|
88
|
+
callbacks: [resolve],
|
|
89
|
+
subject
|
|
90
|
+
});
|
|
91
|
+
this.abilitiesToLoadData.push({
|
|
92
|
+
ability,
|
|
93
|
+
subject
|
|
94
|
+
});
|
|
95
|
+
this.queueAbilitiesRequest();
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
queueAbilitiesRequest() {
|
|
100
|
+
if (this.queueAbilitiesRequestTimeout) {
|
|
101
|
+
clearTimeout(this.queueAbilitiesRequestTimeout);
|
|
102
|
+
}
|
|
103
|
+
this.queueAbilitiesRequestTimeout = setTimeout(this.sendAbilitiesRequest, 0);
|
|
104
|
+
}
|
|
105
|
+
async resetAbilities() {
|
|
106
|
+
await this.lock.write(() => {
|
|
107
|
+
this.abilities = [];
|
|
108
|
+
});
|
|
109
|
+
this.events.emit("onResetAbilities");
|
|
110
|
+
}
|
|
111
|
+
sendAbilitiesRequest = async () => {
|
|
112
|
+
const abilitiesToLoad = this.abilitiesToLoad;
|
|
113
|
+
const abilitiesToLoadData = this.abilitiesToLoadData;
|
|
114
|
+
this.abilitiesToLoad = [];
|
|
115
|
+
this.abilitiesToLoadData = [];
|
|
116
|
+
|
|
117
|
+
// Load abilities from backend
|
|
118
|
+
const result = await Services.current().sendRequest("CanCan::LoadAbilities", {
|
|
119
|
+
request: abilitiesToLoadData
|
|
120
|
+
});
|
|
121
|
+
const abilities = digg(result, "abilities");
|
|
122
|
+
|
|
123
|
+
// Set the loaded abilities
|
|
124
|
+
this.abilities = this.abilities.concat(abilities);
|
|
125
|
+
|
|
126
|
+
// Call the callbacks that are waiting for the ability to have been loaded
|
|
127
|
+
for (const abilityData of abilitiesToLoad) {
|
|
128
|
+
for (const callback of abilityData.callbacks) {
|
|
129
|
+
callback();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiRXZlbnRFbWl0dGVyIiwiaW5mbGVjdGlvbiIsIlJlYWRlcnNXcml0ZXJMb2NrIiwiU2VydmljZXMiLCJzaGFyZWQiLCJBcGlNYWtlckNhbkNhbiIsImFiaWxpdGllcyIsImFiaWxpdGllc1RvTG9hZCIsImFiaWxpdGllc1RvTG9hZERhdGEiLCJldmVudHMiLCJsb2NrIiwiY3VycmVudCIsImN1cnJlbnRBcGlNYWtlckNhbkNhbiIsImNhbiIsImFiaWxpdHkiLCJzdWJqZWN0IiwiYWJpbGl0eVRvVXNlIiwidW5kZXJzY29yZSIsImZvdW5kQWJpbGl0eSIsImZpbmRBYmlsaXR5IiwidW5kZWZpbmVkIiwic3ViamVjdExhYmVsIiwibW9kZWxDbGFzc0RhdGEiLCJjb25zb2xlIiwiZXJyb3IiLCJmaW5kIiwiYWJpbGl0eURhdGEiLCJhYmlsaXR5RGF0YVN1YmplY3QiLCJhYmlsaXR5RGF0YUFiaWxpdHkiLCJpc0FiaWxpdHlMb2FkZWQiLCJsb2FkQWJpbGl0aWVzIiwicmVhZCIsInByb21pc2VzIiwiRXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiQXJyYXkiLCJpc0FycmF5IiwicHJvbWlzZSIsImxvYWRBYmlsaXR5IiwicHVzaCIsIlByb21pc2UiLCJhbGwiLCJyZXNvbHZlIiwiYWJpbGl0eVRvTG9hZCIsImNhbGxiYWNrcyIsInF1ZXVlQWJpbGl0aWVzUmVxdWVzdCIsInF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwic2VuZEFiaWxpdGllc1JlcXVlc3QiLCJyZXNldEFiaWxpdGllcyIsIndyaXRlIiwiZW1pdCIsInJlc3VsdCIsInNlbmRSZXF1ZXN0IiwicmVxdWVzdCIsImNvbmNhdCIsImNhbGxiYWNrIl0sInNvdXJjZXMiOlsiLi4vc3JjL2Nhbi1jYW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7UmVhZGVyc1dyaXRlckxvY2t9IGZyb20gXCJlcGljLWxvY2tzXCJcbmltcG9ydCBTZXJ2aWNlcyBmcm9tIFwiLi9zZXJ2aWNlc1wiXG5cbmNvbnN0IHNoYXJlZCA9IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyQ2FuQ2FuIHtcbiAgYWJpbGl0aWVzID0gW11cbiAgYWJpbGl0aWVzVG9Mb2FkID0gW11cbiAgYWJpbGl0aWVzVG9Mb2FkRGF0YSA9IFtdXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBsb2NrID0gbmV3IFJlYWRlcnNXcml0ZXJMb2NrKClcblxuICBzdGF0aWMgY3VycmVudCAoKSB7XG4gICAgaWYgKCFzaGFyZWQuY3VycmVudEFwaU1ha2VyQ2FuQ2FuKSBzaGFyZWQuY3VycmVudEFwaU1ha2VyQ2FuQ2FuID0gbmV3IEFwaU1ha2VyQ2FuQ2FuKClcblxuICAgIHJldHVybiBzaGFyZWQuY3VycmVudEFwaU1ha2VyQ2FuQ2FuXG4gIH1cblxuICBjYW4gKGFiaWxpdHksIHN1YmplY3QpIHtcbiAgICBsZXQgYWJpbGl0eVRvVXNlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGFiaWxpdHkpXG4gICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5VG9Vc2UsIHN1YmplY3QpXG5cbiAgICBpZiAoZm91bmRBYmlsaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBzdWJqZWN0TGFiZWwgPSBzdWJqZWN0XG5cbiAgICAgIC8vIFRyYW5zbGF0ZSByZXNvdXJjZS1tb2RlbHMgaW50byBjbGFzcyBuYW1lIHN0cmluZ3NcbiAgICAgIGlmICh0eXBlb2Ygc3ViamVjdCA9PSBcImZ1bmN0aW9uXCIgJiYgc3ViamVjdC5tb2RlbENsYXNzRGF0YSkge1xuICAgICAgICBzdWJqZWN0TGFiZWwgPSBkaWdnKHN1YmplY3QubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpXG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoYEFiaWxpdHkgbm90IGxvYWRlZCAke3N1YmplY3RMYWJlbH0jJHthYmlsaXR5VG9Vc2V9YCwge2FiaWxpdGllczogdGhpcy5hYmlsaXRpZXMsIGFiaWxpdHksIHN1YmplY3R9KVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRpZ2coZm91bmRBYmlsaXR5LCBcImNhblwiKVxuICAgIH1cbiAgfVxuXG4gIGZpbmRBYmlsaXR5IChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuYWJpbGl0aWVzLmZpbmQoKGFiaWxpdHlEYXRhKSA9PiB7XG4gICAgICBjb25zdCBhYmlsaXR5RGF0YVN1YmplY3QgPSBkaWdnKGFiaWxpdHlEYXRhLCBcInN1YmplY3RcIilcbiAgICAgIGNvbnN0IGFiaWxpdHlEYXRhQWJpbGl0eSA9IGRpZ2coYWJpbGl0eURhdGEsIFwiYWJpbGl0eVwiKVxuXG4gICAgICBpZiAoYWJpbGl0eURhdGFBYmlsaXR5ID09IGFiaWxpdHkpIHtcbiAgICAgICAgLy8gSWYgYWN0dWFsbHkgc2FtZSBjbGFzc1xuICAgICAgICBpZiAoYWJpbGl0eURhdGFTdWJqZWN0ID09IHN1YmplY3QpIHJldHVybiB0cnVlXG5cbiAgICAgICAgLy8gU29tZXRpbWVzIGluIGRldiB3aGVuIHVzaW5nIGxpbmtpbmcgaXQgd2lsbCBhY3R1YWxseSBiZSB0d28gZGlmZmVyZW50IGJ1dCBpZGVudGljYWwgcmVzb3VyY2UgY2xhc3Nlc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIHN1YmplY3QgPT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgc3ViamVjdC5tb2RlbENsYXNzRGF0YSAmJlxuICAgICAgICAgIHR5cGVvZiBhYmlsaXR5RGF0YVN1YmplY3QgPT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgYWJpbGl0eURhdGFTdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhICYmXG4gICAgICAgICAgZGlnZyhzdWJqZWN0Lm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKSA9PSBkaWdnKGFiaWxpdHlEYXRhU3ViamVjdC5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9KVxuICB9XG5cbiAgaXNBYmlsaXR5TG9hZGVkIChhYmlsaXR5LCBzdWJqZWN0KSB7XG4gICAgY29uc3QgZm91bmRBYmlsaXR5ID0gdGhpcy5maW5kQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KVxuXG4gICAgaWYgKGZvdW5kQWJpbGl0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgYXN5bmMgbG9hZEFiaWxpdGllcyAoYWJpbGl0aWVzKSB7XG4gICAgYXdhaXQgdGhpcy5sb2NrLnJlYWQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllcykge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gYWJpbGl0eURhdGFbMF1cblxuICAgICAgICBpZiAoIXN1YmplY3QpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdWJqZWN0IGdpdmVuIGluIGFiaWxpdGllczogJHtzdWJqZWN0fSAtICR7SlNPTi5zdHJpbmdpZnkoYWJpbGl0aWVzKX1gKVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWJpbGl0eURhdGFbMV0pKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGFycmF5IG9mIGFiaWxpdGllcyBidXQgZ290OiAke3R5cGVvZiBhYmlsaXR5RGF0YVsxXX06ICR7YWJpbGl0eURhdGFbMV19YClcblxuICAgICAgICBmb3IgKGNvbnN0IGFiaWxpdHkgb2YgYWJpbGl0eURhdGFbMV0pIHtcbiAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5sb2FkQWJpbGl0eShhYmlsaXR5LCBzdWJqZWN0KVxuXG4gICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgIH0pXG4gIH1cblxuICBsb2FkQWJpbGl0eSAoYWJpbGl0eSwgc3ViamVjdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgYWJpbGl0eSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5KVxuXG4gICAgICBpZiAodGhpcy5pc0FiaWxpdHlMb2FkZWQoYWJpbGl0eSwgc3ViamVjdCkpIHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZEFiaWxpdHkgPSB0aGlzLmFiaWxpdGllc1RvTG9hZC5maW5kKChhYmlsaXR5VG9Mb2FkKSA9PiBkaWdnKGFiaWxpdHlUb0xvYWQsIFwiYWJpbGl0eVwiKSA9PSBhYmlsaXR5ICYmIGRpZ2coYWJpbGl0eVRvTG9hZCwgXCJzdWJqZWN0XCIpID09IHN1YmplY3QpXG5cbiAgICAgIGlmIChmb3VuZEFiaWxpdHkpIHtcbiAgICAgICAgZm91bmRBYmlsaXR5LmNhbGxiYWNrcy5wdXNoKHJlc29sdmUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFiaWxpdGllc1RvTG9hZC5wdXNoKHthYmlsaXR5LCBjYWxsYmFja3M6IFtyZXNvbHZlXSwgc3ViamVjdH0pXG4gICAgICAgIHRoaXMuYWJpbGl0aWVzVG9Mb2FkRGF0YS5wdXNoKHthYmlsaXR5LCBzdWJqZWN0fSlcblxuICAgICAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHF1ZXVlQWJpbGl0aWVzUmVxdWVzdCAoKSB7XG4gICAgaWYgKHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucXVldWVBYmlsaXRpZXNSZXF1ZXN0VGltZW91dClcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXVlQWJpbGl0aWVzUmVxdWVzdFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuc2VuZEFiaWxpdGllc1JlcXVlc3QsIDApXG4gIH1cblxuICBhc3luYyByZXNldEFiaWxpdGllcyAoKSB7XG4gICAgYXdhaXQgdGhpcy5sb2NrLndyaXRlKCgpID0+IHtcbiAgICAgIHRoaXMuYWJpbGl0aWVzID0gW11cbiAgICB9KVxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvblJlc2V0QWJpbGl0aWVzXCIpXG4gIH1cblxuICBzZW5kQWJpbGl0aWVzUmVxdWVzdCA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWQgPSB0aGlzLmFiaWxpdGllc1RvTG9hZFxuICAgIGNvbnN0IGFiaWxpdGllc1RvTG9hZERhdGEgPSB0aGlzLmFiaWxpdGllc1RvTG9hZERhdGFcblxuICAgIHRoaXMuYWJpbGl0aWVzVG9Mb2FkID0gW11cbiAgICB0aGlzLmFiaWxpdGllc1RvTG9hZERhdGEgPSBbXVxuXG4gICAgLy8gTG9hZCBhYmlsaXRpZXMgZnJvbSBiYWNrZW5kXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgU2VydmljZXMuY3VycmVudCgpLnNlbmRSZXF1ZXN0KFwiQ2FuQ2FuOjpMb2FkQWJpbGl0aWVzXCIsIHtcbiAgICAgIHJlcXVlc3Q6IGFiaWxpdGllc1RvTG9hZERhdGFcbiAgICB9KVxuICAgIGNvbnN0IGFiaWxpdGllcyA9IGRpZ2cocmVzdWx0LCBcImFiaWxpdGllc1wiKVxuXG4gICAgLy8gU2V0IHRoZSBsb2FkZWQgYWJpbGl0aWVzXG4gICAgdGhpcy5hYmlsaXRpZXMgPSB0aGlzLmFiaWxpdGllcy5jb25jYXQoYWJpbGl0aWVzKVxuXG4gICAgLy8gQ2FsbCB0aGUgY2FsbGJhY2tzIHRoYXQgYXJlIHdhaXRpbmcgZm9yIHRoZSBhYmlsaXR5IHRvIGhhdmUgYmVlbiBsb2FkZWRcbiAgICBmb3IgKGNvbnN0IGFiaWxpdHlEYXRhIG9mIGFiaWxpdGllc1RvTG9hZCkge1xuICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBhYmlsaXR5RGF0YS5jYWxsYmFja3MpIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxJQUFJLFFBQU8sV0FBVztBQUM5QixPQUFPQyxZQUFZLE1BQU0sUUFBUTtBQUNqQyxPQUFPLEtBQUtDLFVBQVUsTUFBTSxZQUFZO0FBQ3hDLFNBQVFDLGlCQUFpQixRQUFPLFlBQVk7QUFDNUMsT0FBT0MsUUFBUSxNQUFNLFlBQVk7QUFFakMsTUFBTUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVqQixlQUFlLE1BQU1DLGNBQWMsQ0FBQztFQUNsQ0MsU0FBUyxHQUFHLEVBQUU7RUFDZEMsZUFBZSxHQUFHLEVBQUU7RUFDcEJDLG1CQUFtQixHQUFHLEVBQUU7RUFDeEJDLE1BQU0sR0FBRyxJQUFJVCxZQUFZLENBQUMsQ0FBQztFQUMzQlUsSUFBSSxHQUFHLElBQUlSLGlCQUFpQixDQUFDLENBQUM7RUFFOUIsT0FBT1MsT0FBT0EsQ0FBQSxFQUFJO0lBQ2hCLElBQUksQ0FBQ1AsTUFBTSxDQUFDUSxxQkFBcUIsRUFBRVIsTUFBTSxDQUFDUSxxQkFBcUIsR0FBRyxJQUFJUCxjQUFjLENBQUMsQ0FBQztJQUV0RixPQUFPRCxNQUFNLENBQUNRLHFCQUFxQjtFQUNyQztFQUVBQyxHQUFHQSxDQUFFQyxPQUFPLEVBQUVDLE9BQU8sRUFBRTtJQUNyQixJQUFJQyxZQUFZLEdBQUdmLFVBQVUsQ0FBQ2dCLFVBQVUsQ0FBQ0gsT0FBTyxDQUFDO0lBQ2pELE1BQU1JLFlBQVksR0FBRyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0gsWUFBWSxFQUFFRCxPQUFPLENBQUM7SUFFNUQsSUFB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
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { createConsumer } from "@rails/actioncable";
|
|
2
|
+
export default createConsumer();
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVDb25zdW1lciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jaGFubmVscy1jb25zdW1lci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZUNvbnN1bWVyfSBmcm9tIFwiQHJhaWxzL2FjdGlvbmNhYmxlXCJcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29uc3VtZXIoKVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxjQUFjLFFBQU8sb0JBQW9CO0FBRWpELGVBQWVBLGNBQWMsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import Collection from "./collection";
|
|
2
|
+
import { digg } from "diggerize";
|
|
3
|
+
import memo from "set-state-compare/src/memo";
|
|
4
|
+
import { useMemo } from "react";
|
|
5
|
+
import PropTypes from "prop-types";
|
|
6
|
+
import PropTypesExact from "prop-types-exact";
|
|
7
|
+
import useCollection from "./use-collection";
|
|
8
|
+
import useShape from "set-state-compare/src/use-shape";
|
|
9
|
+
const CollectionLoader = ({
|
|
10
|
+
component,
|
|
11
|
+
...restProps
|
|
12
|
+
}) => {
|
|
13
|
+
const s = useShape(restProps);
|
|
14
|
+
const useCollectionResult = useCollection(restProps);
|
|
15
|
+
const cachePartsKeys = ["modelIdsCacheString", "overallCount", "qParams", "queryName", "queryPerKey", "queryQName", "querySName", "queryPageName", "searchParams", "showNoRecordsAvailableContent", "showNoRecordsFoundContent"];
|
|
16
|
+
const cacheParts = [];
|
|
17
|
+
for (const cachePartsKey of cachePartsKeys) {
|
|
18
|
+
cacheParts.push(digg(useCollectionResult, cachePartsKey));
|
|
19
|
+
}
|
|
20
|
+
s.updateMeta({
|
|
21
|
+
component,
|
|
22
|
+
useCollectionResult
|
|
23
|
+
});
|
|
24
|
+
useMemo(() => {
|
|
25
|
+
s.m.component.setState(s.m.useCollectionResult);
|
|
26
|
+
}, cacheParts);
|
|
27
|
+
return null;
|
|
28
|
+
};
|
|
29
|
+
CollectionLoader.propTypes = PropTypesExact({
|
|
30
|
+
abilities: PropTypes.object,
|
|
31
|
+
collection: PropTypes.instanceOf(Collection),
|
|
32
|
+
component: PropTypes.object.isRequired,
|
|
33
|
+
defaultParams: PropTypes.object,
|
|
34
|
+
groupBy: PropTypes.array,
|
|
35
|
+
modelClass: PropTypes.func.isRequired,
|
|
36
|
+
noRecordsAvailableContent: PropTypes.func,
|
|
37
|
+
noRecordsFoundContent: PropTypes.func,
|
|
38
|
+
onModelsLoaded: PropTypes.func,
|
|
39
|
+
pagination: PropTypes.bool,
|
|
40
|
+
preloads: PropTypes.array,
|
|
41
|
+
queryMethod: PropTypes.func,
|
|
42
|
+
queryName: PropTypes.string,
|
|
43
|
+
ransack: PropTypes.object,
|
|
44
|
+
select: PropTypes.object,
|
|
45
|
+
selectColumns: PropTypes.object
|
|
46
|
+
});
|
|
47
|
+
export default memo(CollectionLoader);
|
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsZWN0aW9uIiwiZGlnZyIsIm1lbW8iLCJ1c2VNZW1vIiwiUHJvcFR5cGVzIiwiUHJvcFR5cGVzRXhhY3QiLCJ1c2VDb2xsZWN0aW9uIiwidXNlU2hhcGUiLCJDb2xsZWN0aW9uTG9hZGVyIiwiY29tcG9uZW50IiwicmVzdFByb3BzIiwicyIsInVzZUNvbGxlY3Rpb25SZXN1bHQiLCJjYWNoZVBhcnRzS2V5cyIsImNhY2hlUGFydHMiLCJjYWNoZVBhcnRzS2V5IiwicHVzaCIsInVwZGF0ZU1ldGEiLCJtIiwic2V0U3RhdGUiLCJwcm9wVHlwZXMiLCJhYmlsaXRpZXMiLCJvYmplY3QiLCJjb2xsZWN0aW9uIiwiaW5zdGFuY2VPZiIsImlzUmVxdWlyZWQiLCJkZWZhdWx0UGFyYW1zIiwiZ3JvdXBCeSIsImFycmF5IiwibW9kZWxDbGFzcyIsImZ1bmMiLCJub1JlY29yZHNBdmFpbGFibGVDb250ZW50Iiwibm9SZWNvcmRzRm91bmRDb250ZW50Iiwib25Nb2RlbHNMb2FkZWQiLCJwYWdpbmF0aW9uIiwiYm9vbCIsInByZWxvYWRzIiwicXVlcnlNZXRob2QiLCJxdWVyeU5hbWUiLCJzdHJpbmciLCJyYW5zYWNrIiwic2VsZWN0Iiwic2VsZWN0Q29sdW1ucyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0aW9uLWxvYWRlci5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbGxlY3Rpb24gZnJvbSBcIi4vY29sbGVjdGlvblwiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IG1lbW8gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9tZW1vXCJcbmltcG9ydCB7dXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCB1c2VDb2xsZWN0aW9uIGZyb20gXCIuL3VzZS1jb2xsZWN0aW9uXCJcbmltcG9ydCB1c2VTaGFwZSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL3VzZS1zaGFwZVwiXG5cbmNvbnN0IENvbGxlY3Rpb25Mb2FkZXIgPSAoe2NvbXBvbmVudCwgLi4ucmVzdFByb3BzfSkgPT4ge1xuICBjb25zdCBzID0gdXNlU2hhcGUocmVzdFByb3BzKVxuICBjb25zdCB1c2VDb2xsZWN0aW9uUmVzdWx0ID0gdXNlQ29sbGVjdGlvbihyZXN0UHJvcHMpXG4gIGNvbnN0IGNhY2hlUGFydHNLZXlzID0gW1xuICAgIFwibW9kZWxJZHNDYWNoZVN0cmluZ1wiLFxuICAgIFwib3ZlcmFsbENvdW50XCIsXG4gICAgXCJxUGFyYW1zXCIsXG4gICAgXCJxdWVyeU5hbWVcIixcbiAgICBcInF1ZXJ5UGVyS2V5XCIsXG4gICAgXCJxdWVyeVFOYW1lXCIsXG4gICAgXCJxdWVyeVNOYW1lXCIsXG4gICAgXCJxdWVyeVBhZ2VOYW1lXCIsXG4gICAgXCJzZWFyY2hQYXJhbXNcIixcbiAgICBcInNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50XCIsXG4gICAgXCJzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XCJcbiAgXVxuICBjb25zdCBjYWNoZVBhcnRzID0gW11cblxuICBmb3IoY29uc3QgY2FjaGVQYXJ0c0tleSBvZiBjYWNoZVBhcnRzS2V5cykge1xuICAgIGNhY2hlUGFydHMucHVzaChkaWdnKHVzZUNvbGxlY3Rpb25SZXN1bHQsIGNhY2hlUGFydHNLZXkpKVxuICB9XG5cbiAgcy51cGRhdGVNZXRhKHtjb21wb25lbnQsIHVzZUNvbGxlY3Rpb25SZXN1bHR9KVxuXG4gIHVzZU1lbW8oKCkgPT4ge1xuICAgIHMubS5jb21wb25lbnQuc2V0U3RhdGUocy5tLnVzZUNvbGxlY3Rpb25SZXN1bHQpXG4gIH0sIGNhY2hlUGFydHMpXG5cbiAgcmV0dXJuIG51bGxcbn1cblxuQ29sbGVjdGlvbkxvYWRlci5wcm9wVHlwZXMgPSBQcm9wVHlwZXNFeGFjdCh7XG4gIGFiaWxpdGllczogUHJvcFR5cGVzLm9iamVjdCxcbiAgY29sbGVjdGlvbjogUHJvcFR5cGVzLmluc3RhbmNlT2YoQ29sbGVjdGlvbiksXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBkZWZhdWx0UGFyYW1zOiBQcm9wVHlwZXMub2JqZWN0LFxuICBncm91cEJ5OiBQcm9wVHlwZXMuYXJyYXksXG4gIG1vZGVsQ2xhc3M6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICBub1JlY29yZHNGb3VuZENvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICBvbk1vZGVsc0xvYWRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIHBhZ2luYXRpb246IFByb3BUeXBlcy5ib29sLFxuICBwcmVsb2FkczogUHJvcFR5cGVzLmFycmF5LFxuICBxdWVyeU1ldGhvZDogUHJvcFR5cGVzLmZ1bmMsXG4gIHF1ZXJ5TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmFuc2FjazogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2VsZWN0OiBQcm9wVHlwZXMub2JqZWN0LFxuICBzZWxlY3RDb2x1bW5zOiBQcm9wVHlwZXMub2JqZWN0XG59KVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKENvbGxlY3Rpb25Mb2FkZXIpXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFVBQVUsTUFBTSxjQUFjO0FBQ3JDLFNBQVFDLElBQUksUUFBTyxXQUFXO0FBQzlCLE9BQU9DLElBQUksTUFBTSw0QkFBNEI7QUFDN0MsU0FBUUMsT0FBTyxRQUFPLE9BQU87QUFDN0IsT0FBT0MsU0FBUyxNQUFNLFlBQVk7QUFDbEMsT0FBT0MsY0FBYyxNQUFNLGtCQUFrQjtBQUM3QyxPQUFPQyxhQUFhLE1BQU0sa0JBQWtCO0FBQzVDLE9BQU9DLFFBQVEsTUFBTSxpQ0FBaUM7QUFFdEQsTUFBTUMsZ0JBQWdCLEdBQUdBLENBQUM7RUFBQ0MsU0FBUztFQUFFLEdBQUdDO0FBQVMsQ0FBQyxLQUFLO0VBQ3RELE1BQU1DLENBQUMsR0FBR0osUUFBUSxDQUFDRyxTQUFTLENBQUM7RUFDN0IsTUFBTUUsbUJBQW1CLEdBQUdOLGFBQWEsQ0FBQ0ksU0FBUyxDQUFDO0VBQ3BELE1BQU1HLGNBQWMsR0FBRyxDQUNyQixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFNBQVMsRUFDVCxXQUFXLEVBQ1gsYUFBYSxFQUNiLFlBQVksRUFDWixZQUFZLEVBQ1osZUFBZSxFQUNmLGNBQWMsRUFDZCwrQkFBK0IsRUFDL0IsMkJBQTJCLENBQzVCO0VBQ0QsTUFBTUMsVUFBVSxHQUFHLEVBQUU7RUFFckIsS0FBSSxNQUFNQyxhQUFhLElBQUlGLGNBQWMsRUFBRTtJQUN6Q0MsVUFBVSxDQUFDRSxJQUFJLENBQUNmLElBQUksQ0FBQ1csbUJBQW1CLEVBQUVHLGFBQWEsQ0FBQyxDQUFDO0VBQzNEO0VBRUFKLENBQUMsQ0FBQ00sVUFBVSxDQUFDO0lBQUNSLFNBQVM7SUFBRUc7RUFBbUIsQ0FBQyxDQUFDO0VBRTlDVCxPQUFPLENBQUMsTUFBTTtJQUNaUSxDQUFDLENBQUNPLENBQUMsQ0FBQ1QsU0FBUyxDQUFDVSxRQUFRLENBQUNSLENBQUMsQ0FBQ08sQ0FBQyxDQUFDTixtQkFBbUIsQ0FBQztFQUNqRCxDQUFDLEVBQUVFLFVBQVUsQ0FBQztFQUVkLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRE4sZ0JBQWdCLENBQUNZLFNBQVMsR0FBR2YsY0FBYyxDQUFDO0VBQzFDZ0IsU0FBUyxFQUFFakIsU0FBUyxDQUFDa0IsTUFBTTtFQUMzQkMsVUFBVSxFQUFFbkIsU0FBUyxDQUFDb0IsVUFBVSxDQUFDeEIsVUFBVSxDQUFDO0VBQzVDUyxTQUFTLEVBQUVMLFNBQVMsQ0FBQ2tCLE1BQU0sQ0FBQ0csVUFBVTtFQUN0Q0MsYUFBYSxFQUFFdEIsU0FBUyxDQUFDa0IsTUFBTTtFQUMvQkssT0FBTyxFQUFFdkIsU0FBUyxDQUFDd0IsS0FBSztFQUN4QkMsVUFBVSxFQUFFekIsU0FBUyxDQUFDMEIsSUFBSSxDQUFDTCxVQUFVO0VBQ3JDTSx5QkFBeUIsRUFBRTNCLFNBQVMsQ0FBQzBCLElBQUk7RUFDekNFLHFCQUFxQixFQUFFNUIsU0FBUyxDQUFDMEIsSUFBSTtFQUNyQ0csY0FBYyxFQUFFN0IsU0FBUyxDQUFDMEIsSUFBSTtFQUM5QkksVUFBVSxFQUFFOUIsU0FBUyxDQUFDK0IsSUFBSTtFQUMxQkMsUUFBUSxFQUFFaEMsU0FBUyxDQUFDd0IsS0FBSztFQUN6QlMsV0FBVyxFQUFFakMsU0FBUyxDQUFDMEIsSUFBSTtFQUMzQlEsU0FBUyxFQUFFbEMsU0FBUyxDQUFDbUMsTUFBTTtFQUMzQkMsT0FBTyxFQUFFcEMsU0FBUyxDQUFDa0IsTUFBTTtFQUN6Qm1CLE1BQU0sRUFBRXJDLFNBQVMsQ0FBQ2tCLE1BQU07RUFDeEJvQixhQUFhLEVBQUV0QyxTQUFTLENBQUNrQjtBQUMzQixDQUFDLENBQUM7QUFFRixlQUFlcEIsSUFBSSxDQUFDTSxnQkFBZ0IsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import cloneDeep from "clone-deep";
|
|
2
|
+
import CommandsPool from "./commands-pool";
|
|
3
|
+
import { digg } from "diggerize";
|
|
4
|
+
import * as inflection from "inflection";
|
|
5
|
+
import { incorporate } from "incorporator";
|
|
6
|
+
import modelClassRequire from "./model-class-require";
|
|
7
|
+
import Result from "./result";
|
|
8
|
+
export default class ApiMakerCollection {
|
|
9
|
+
static apiMakerType = "Collection";
|
|
10
|
+
constructor(args, queryArgs = {}) {
|
|
11
|
+
this.queryArgs = queryArgs;
|
|
12
|
+
this.args = args;
|
|
13
|
+
}
|
|
14
|
+
abilities(originalAbilities) {
|
|
15
|
+
const newAbilities = {};
|
|
16
|
+
for (const originalAbilityName in originalAbilities) {
|
|
17
|
+
const newModelName = inflection.underscore(originalAbilityName);
|
|
18
|
+
const newValues = [];
|
|
19
|
+
const originalValues = originalAbilities[originalAbilityName];
|
|
20
|
+
for (const originalAbilityName of originalValues) {
|
|
21
|
+
const newAbilityName = inflection.underscore(originalAbilityName);
|
|
22
|
+
newValues.push(newAbilityName);
|
|
23
|
+
}
|
|
24
|
+
newAbilities[newModelName] = newValues;
|
|
25
|
+
}
|
|
26
|
+
return this._merge({
|
|
27
|
+
abilities: newAbilities
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
accessibleBy(abilityName) {
|
|
31
|
+
return this._merge({
|
|
32
|
+
accessibleBy: inflection.underscore(abilityName)
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async count() {
|
|
36
|
+
const response = await this.clone()._merge({
|
|
37
|
+
count: true
|
|
38
|
+
})._response();
|
|
39
|
+
return digg(response, "count");
|
|
40
|
+
}
|
|
41
|
+
distinct() {
|
|
42
|
+
return this._merge({
|
|
43
|
+
distinct: true
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async each(callback) {
|
|
47
|
+
const array = await this.toArray();
|
|
48
|
+
for (const model in array) {
|
|
49
|
+
callback.call(model);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
except(...keys) {
|
|
53
|
+
for (const key of keys) {
|
|
54
|
+
if (key == "page") {
|
|
55
|
+
delete this.queryArgs[key];
|
|
56
|
+
} else {
|
|
57
|
+
throw new Error(`Unhandled key: ${key}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return this;
|
|
61
|
+
}
|
|
62
|
+
async first() {
|
|
63
|
+
const models = await this.toArray();
|
|
64
|
+
return models[0];
|
|
65
|
+
}
|
|
66
|
+
groupBy(...arrayOfTablesAndColumns) {
|
|
67
|
+
const arrayOfTablesAndColumnsWithLowercaseColumns = arrayOfTablesAndColumns.map(tableAndColumn => {
|
|
68
|
+
if (Array.isArray(tableAndColumn)) {
|
|
69
|
+
return [tableAndColumn[0], tableAndColumn[1].toLowerCase()];
|
|
70
|
+
} else {
|
|
71
|
+
return tableAndColumn.toLowerCase();
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
const currentGroupBy = this.queryArgs.groupBy || [];
|
|
75
|
+
const newGroupBy = currentGroupBy.concat(arrayOfTablesAndColumnsWithLowercaseColumns);
|
|
76
|
+
return this._merge({
|
|
77
|
+
groupBy: newGroupBy
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
isLoaded() {
|
|
81
|
+
if (this.args.reflectionName in this.args.model.relationshipsCache) return true;
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
limit(amount) {
|
|
85
|
+
return this._merge({
|
|
86
|
+
limit: amount
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
preloaded() {
|
|
90
|
+
if (!(this.args.reflectionName in this.args.model.relationshipsCache)) {
|
|
91
|
+
throw new Error(`${this.args.reflectionName} hasnt been loaded yet`);
|
|
92
|
+
}
|
|
93
|
+
return this.args.model.relationshipsCache[this.args.reflectionName];
|
|
94
|
+
}
|
|
95
|
+
loaded() {
|
|
96
|
+
const {
|
|
97
|
+
model,
|
|
98
|
+
reflectionName
|
|
99
|
+
} = this.args;
|
|
100
|
+
if (reflectionName in model.relationships) {
|
|
101
|
+
return model.relationships[reflectionName];
|
|
102
|
+
} else if (reflectionName in model.relationshipsCache) {
|
|
103
|
+
return model.relationshipsCache[reflectionName];
|
|
104
|
+
} else if (model.isNewRecord()) {
|
|
105
|
+
const reflectionNameUnderscore = inflection.underscore(reflectionName);
|
|
106
|
+
|
|
107
|
+
// Initialize as empty and try again to return the empty result
|
|
108
|
+
this.set([]);
|
|
109
|
+
return digg(model.relationships, reflectionNameUnderscore);
|
|
110
|
+
} else {
|
|
111
|
+
const relationshipsLoaded = uniqunize(Object.keys(model.relationships).concat(Object.keys(model.relationshipsCache)));
|
|
112
|
+
throw new Error(`${reflectionName} hasnt been loaded yet on ${model.modelClassData().name}. Loaded was: ${relationshipsLoaded.join(", ")}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Replaces the relationships with the given new collection.
|
|
117
|
+
set(newCollection) {
|
|
118
|
+
this.args.model.relationships[this.args.reflectionName] = newCollection;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Pushes another model onto the given collection.
|
|
122
|
+
push(newModel) {
|
|
123
|
+
if (!(this.args.reflectionName in this.args.model.relationships)) {
|
|
124
|
+
this.args.model.relationships[this.args.reflectionName] = [];
|
|
125
|
+
}
|
|
126
|
+
this.args.model.relationships[this.args.reflectionName].push(newModel);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Array shortcuts
|
|
130
|
+
find = (...args) => this.loaded().find(...args);
|
|
131
|
+
forEach = (...args) => this.loaded().forEach(...args);
|
|
132
|
+
map = (...args) => this.loaded().map(...args);
|
|
133
|
+
preload(preloadValue) {
|
|
134
|
+
return this._merge({
|
|
135
|
+
preload: preloadValue
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
page(page) {
|
|
139
|
+
if (!page) page = 1;
|
|
140
|
+
return this._merge({
|
|
141
|
+
page
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
pageKey(pageKey) {
|
|
145
|
+
return this._merge({
|
|
146
|
+
pageKey
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
params() {
|
|
150
|
+
let params = {};
|
|
151
|
+
if (this.queryArgs.params) params = incorporate(params, this.queryArgs.params);
|
|
152
|
+
if (this.queryArgs.abilities) params.abilities = this.queryArgs.abilities;
|
|
153
|
+
if (this.queryArgs.accessibleBy) params.accessible_by = inflection.underscore(this.queryArgs.accessibleBy);
|
|
154
|
+
if (this.queryArgs.count) params.count = this.queryArgs.count;
|
|
155
|
+
if (this.queryArgs.distinct) params.distinct = this.queryArgs.distinct;
|
|
156
|
+
if (this.queryArgs.groupBy) params.group_by = this.queryArgs.groupBy;
|
|
157
|
+
if (this.queryArgs.ransack) params.q = this.queryArgs.ransack;
|
|
158
|
+
if (this.queryArgs.limit) params.limit = this.queryArgs.limit;
|
|
159
|
+
if (this.queryArgs.preload) params.preload = this.queryArgs.preload;
|
|
160
|
+
if (this.queryArgs.page) params.page = this.queryArgs.page;
|
|
161
|
+
if (this.queryArgs.per) params.per = this.queryArgs.per;
|
|
162
|
+
if (this.queryArgs.search) params.search = this.queryArgs.search;
|
|
163
|
+
if (this.queryArgs.select) params.select = this.queryArgs.select;
|
|
164
|
+
if (this.queryArgs.selectColumns) params.select_columns = this.queryArgs.selectColumns;
|
|
165
|
+
return params;
|
|
166
|
+
}
|
|
167
|
+
per(per) {
|
|
168
|
+
return this._merge({
|
|
169
|
+
per
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
perKey(perKey) {
|
|
173
|
+
return this._merge({
|
|
174
|
+
perKey
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
ransack(params) {
|
|
178
|
+
if (params) this._merge({
|
|
179
|
+
ransack: params
|
|
180
|
+
});
|
|
181
|
+
return this;
|
|
182
|
+
}
|
|
183
|
+
async result() {
|
|
184
|
+
const response = await this._response();
|
|
185
|
+
const models = digg(response, "collection");
|
|
186
|
+
this._addQueryToModels(models);
|
|
187
|
+
const result = new Result({
|
|
188
|
+
collection: this,
|
|
189
|
+
models,
|
|
190
|
+
response
|
|
191
|
+
});
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
search(params) {
|
|
195
|
+
if (params) this._merge({
|
|
196
|
+
search: params
|
|
197
|
+
});
|
|
198
|
+
return this;
|
|
199
|
+
}
|
|
200
|
+
searchKey(searchKey) {
|
|
201
|
+
return this._merge({
|
|
202
|
+
searchKey
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
select(originalSelect) {
|
|
206
|
+
const newSelect = {};
|
|
207
|
+
for (const originalModelName in originalSelect) {
|
|
208
|
+
const newModelName = inflection.underscore(originalModelName);
|
|
209
|
+
const newValues = [];
|
|
210
|
+
const originalValues = originalSelect[originalModelName];
|
|
211
|
+
for (const originalAttributeName of originalValues) {
|
|
212
|
+
const newAttributeName = inflection.underscore(originalAttributeName);
|
|
213
|
+
newValues.push(newAttributeName);
|
|
214
|
+
}
|
|
215
|
+
newSelect[newModelName] = newValues;
|
|
216
|
+
}
|
|
217
|
+
return this._merge({
|
|
218
|
+
select: newSelect
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
selectColumns(originalSelect) {
|
|
222
|
+
const newSelect = {};
|
|
223
|
+
for (const originalModelName in originalSelect) {
|
|
224
|
+
const newModelName = inflection.underscore(inflection.underscore(originalModelName));
|
|
225
|
+
const newValues = [];
|
|
226
|
+
const originalValues = originalSelect[originalModelName];
|
|
227
|
+
for (const originalAttributeName of originalValues) {
|
|
228
|
+
const newAttributeName = inflection.underscore(originalAttributeName);
|
|
229
|
+
newValues.push(newAttributeName);
|
|
230
|
+
}
|
|
231
|
+
newSelect[newModelName] = newValues;
|
|
232
|
+
}
|
|
233
|
+
return this._merge({
|
|
234
|
+
selectColumns: newSelect
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
sort(sortBy) {
|
|
238
|
+
return this._merge({
|
|
239
|
+
ransack: {
|
|
240
|
+
s: sortBy
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
async toArray() {
|
|
245
|
+
const response = await this._response();
|
|
246
|
+
const models = digg(response, "collection");
|
|
247
|
+
this._addQueryToModels(models);
|
|
248
|
+
return models;
|
|
249
|
+
}
|
|
250
|
+
modelClass() {
|
|
251
|
+
const modelName = digg(this.args.modelClass.modelClassData(), "name");
|
|
252
|
+
return modelClassRequire(modelName);
|
|
253
|
+
}
|
|
254
|
+
clone() {
|
|
255
|
+
const clonedQueryArgs = cloneDeep(this.queryArgs);
|
|
256
|
+
return new ApiMakerCollection(this.args, clonedQueryArgs);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// This is needed when reloading a version of the model with the same selected attributes and preloads
|
|
260
|
+
_addQueryToModels(models) {
|
|
261
|
+
for (const model of models) {
|
|
262
|
+
model.collection = this;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
_merge(newQueryArgs) {
|
|
266
|
+
incorporate(this.queryArgs, newQueryArgs);
|
|
267
|
+
return this;
|
|
268
|
+
}
|
|
269
|
+
_response() {
|
|
270
|
+
const modelClassData = this.args.modelClass.modelClassData();
|
|
271
|
+
return CommandsPool.addCommand({
|
|
272
|
+
args: this.params(),
|
|
273
|
+
command: `${modelClassData.collectionName}-index`,
|
|
274
|
+
collectionName: modelClassData.collectionName,
|
|
275
|
+
type: "index"
|
|
276
|
+
}, {});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbG9uZURlZXAiLCJDb21tYW5kc1Bvb2wiLCJkaWdnIiwiaW5mbGVjdGlvbiIsImluY29ycG9yYXRlIiwibW9kZWxDbGFzc1JlcXVpcmUiLCJSZXN1bHQiLCJBcGlNYWtlckNvbGxlY3Rpb24iLCJhcGlNYWtlclR5cGUiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJxdWVyeUFyZ3MiLCJhYmlsaXRpZXMiLCJvcmlnaW5hbEFiaWxpdGllcyIsIm5ld0FiaWxpdGllcyIsIm9yaWdpbmFsQWJpbGl0eU5hbWUiLCJuZXdNb2RlbE5hbWUiLCJ1bmRlcnNjb3JlIiwibmV3VmFsdWVzIiwib3JpZ2luYWxWYWx1ZXMiLCJuZXdBYmlsaXR5TmFtZSIsInB1c2giLCJfbWVyZ2UiLCJhY2Nlc3NpYmxlQnkiLCJhYmlsaXR5TmFtZSIsImNvdW50IiwicmVzcG9uc2UiLCJjbG9uZSIsIl9yZXNwb25zZSIsImRpc3RpbmN0IiwiZWFjaCIsImNhbGxiYWNrIiwiYXJyYXkiLCJ0b0FycmF5IiwibW9kZWwiLCJjYWxsIiwiZXhjZXB0Iiwia2V5cyIsImtleSIsIkVycm9yIiwiZmlyc3QiLCJtb2RlbHMiLCJncm91cEJ5IiwiYXJyYXlPZlRhYmxlc0FuZENvbHVtbnMiLCJhcnJheU9mVGFibGVzQW5kQ29sdW1uc1dpdGhMb3dlcmNhc2VDb2x1bW5zIiwibWFwIiwidGFibGVBbmRDb2x1bW4iLCJBcnJheSIsImlzQXJyYXkiLCJ0b0xvd2VyQ2FzZSIsImN1cnJlbnRHcm91cEJ5IiwibmV3R3JvdXBCeSIsImNvbmNhdCIsImlzTG9hZGVkIiwicmVmbGVjdGlvbk5hbWUiLCJyZWxhdGlvbnNoaXBzQ2FjaGUiLCJsaW1pdCIsImFtb3VudCIsInByZWxvYWRlZCIsImxvYWRlZCIsInJlbGF0aW9uc2hpcHMiLCJpc05ld1JlY29yZCIsInJlZmxlY3Rpb25OYW1lVW5kZXJzY29yZSIsInNldCIsInJlbGF0aW9uc2hpcHNMb2FkZWQiLCJ1bmlxdW5pemUiLCJPYmplY3QiLCJtb2RlbENsYXNzRGF0YSIsIm5hbWUiLCJqb2luIiwibmV3Q29sbGVjdGlvbiIsIm5ld01vZGVsIiwiZmluZCIsImZvckVhY2giLCJwcmVsb2FkIiwicHJlbG9hZFZhbHVlIiwicGFnZSIsInBhZ2VLZXkiLCJwYXJhbXMiLCJhY2Nlc3NpYmxlX2J5IiwiZ3JvdXBfYnkiLCJyYW5zYWNrIiwicSIsInBlciIsInNlYXJjaCIsInNlbGVjdCIsInNlbGVjdENvbHVtbnMiLCJzZWxlY3RfY29sdW1ucyIsInBlcktleSIsInJlc3VsdCIsIl9hZGRRdWVyeVRvTW9kZWxzIiwiY29sbGVjdGlvbiIsInNlYXJjaEtleSIsIm9yaWdpbmFsU2VsZWN0IiwibmV3U2VsZWN0Iiwib3JpZ2luYWxNb2RlbE5hbWUiLCJvcmlnaW5hbEF0dHJpYnV0ZU5hbWUiLCJuZXdBdHRyaWJ1dGVOYW1lIiwic29ydCIsInNvcnRCeSIsInMiLCJtb2RlbENsYXNzIiwibW9kZWxOYW1lIiwiY2xvbmVkUXVlcnlBcmdzIiwibmV3UXVlcnlBcmdzIiwiYWRkQ29tbWFuZCIsImNvbW1hbmQiLCJjb2xsZWN0aW9uTmFtZSIsInR5cGUiXSwic291cmNlcyI6WyIuLi9zcmMvY29sbGVjdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xvbmVEZWVwIGZyb20gXCJjbG9uZS1kZWVwXCJcbmltcG9ydCBDb21tYW5kc1Bvb2wgZnJvbSBcIi4vY29tbWFuZHMtcG9vbFwiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge2luY29ycG9yYXRlfSBmcm9tIFwiaW5jb3Jwb3JhdG9yXCJcbmltcG9ydCBtb2RlbENsYXNzUmVxdWlyZSBmcm9tIFwiLi9tb2RlbC1jbGFzcy1yZXF1aXJlXCJcbmltcG9ydCBSZXN1bHQgZnJvbSBcIi4vcmVzdWx0XCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJDb2xsZWN0aW9uIHtcbiAgc3RhdGljIGFwaU1ha2VyVHlwZSA9IFwiQ29sbGVjdGlvblwiXG5cbiAgY29uc3RydWN0b3IoYXJncywgcXVlcnlBcmdzID0ge30pIHtcbiAgICB0aGlzLnF1ZXJ5QXJncyA9IHF1ZXJ5QXJnc1xuICAgIHRoaXMuYXJncyA9IGFyZ3NcbiAgfVxuXG4gIGFiaWxpdGllcyhvcmlnaW5hbEFiaWxpdGllcykge1xuICAgIGNvbnN0IG5ld0FiaWxpdGllcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG9yaWdpbmFsQWJpbGl0eU5hbWUgaW4gb3JpZ2luYWxBYmlsaXRpZXMpIHtcbiAgICAgIGNvbnN0IG5ld01vZGVsTmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbEFiaWxpdHlOYW1lKVxuICAgICAgY29uc3QgbmV3VmFsdWVzID0gW11cbiAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gb3JpZ2luYWxBYmlsaXRpZXNbb3JpZ2luYWxBYmlsaXR5TmFtZV1cblxuICAgICAgZm9yIChjb25zdCBvcmlnaW5hbEFiaWxpdHlOYW1lIG9mIG9yaWdpbmFsVmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IG5ld0FiaWxpdHlOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsQWJpbGl0eU5hbWUpXG4gICAgICAgIG5ld1ZhbHVlcy5wdXNoKG5ld0FiaWxpdHlOYW1lKVxuICAgICAgfVxuXG4gICAgICBuZXdBYmlsaXRpZXNbbmV3TW9kZWxOYW1lXSA9IG5ld1ZhbHVlc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7YWJpbGl0aWVzOiBuZXdBYmlsaXRpZXN9KVxuICB9XG5cbiAgYWNjZXNzaWJsZUJ5KGFiaWxpdHlOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHthY2Nlc3NpYmxlQnk6IGluZmxlY3Rpb24udW5kZXJzY29yZShhYmlsaXR5TmFtZSl9KVxuICB9XG5cbiAgYXN5bmMgY291bnQoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsb25lKCkuX21lcmdlKHtjb3VudDogdHJ1ZX0pLl9yZXNwb25zZSgpXG5cbiAgICByZXR1cm4gZGlnZyhyZXNwb25zZSwgXCJjb3VudFwiKVxuICB9XG5cbiAgZGlzdGluY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtkaXN0aW5jdDogdHJ1ZX0pXG4gIH1cblxuICBhc3luYyBlYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYXJyYXkgPSBhd2FpdCB0aGlzLnRvQXJyYXkoKVxuXG4gICAgZm9yIChjb25zdCBtb2RlbCBpbiBhcnJheSkge1xuICAgICAgY2FsbGJhY2suY2FsbChtb2RlbClcbiAgICB9XG4gIH1cblxuICBleGNlcHQoLi4ua2V5cykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGlmIChrZXkgPT0gXCJwYWdlXCIpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucXVlcnlBcmdzW2tleV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGtleTogJHtrZXl9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgYXN5bmMgZmlyc3QoKSB7XG4gICAgY29uc3QgbW9kZWxzID0gYXdhaXQgdGhpcy50b0FycmF5KClcbiAgICByZXR1cm4gbW9kZWxzWzBdXG4gIH1cblxuICBncm91cEJ5KC4uLmFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zKSB7XG4gICAgY29uc3QgYXJyYXlPZlRhYmxlc0FuZENvbHVtbnNXaXRoTG93ZXJjYXNlQ29sdW1ucyA9IGFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zLm1hcCgodGFibGVBbmRDb2x1bW4pID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhYmxlQW5kQ29sdW1uKSkge1xuICAgICAgICByZXR1cm4gW3RhYmxlQW5kQ29sdW1uWzBdLCB0YWJsZUFuZENvbHVtblsxXS50b0xvd2VyQ2FzZSgpXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRhYmxlQW5kQ29sdW1uLnRvTG93ZXJDYXNlKClcbiAgICAgIH1cbiAgICB9KVxuICAgIGNvbnN0IGN1cnJlbnRHcm91cEJ5ID0gdGhpcy5xdWVyeUFyZ3MuZ3JvdXBCeSB8fCBbXVxuICAgIGNvbnN0IG5ld0dyb3VwQnkgPSBjdXJyZW50R3JvdXBCeS5jb25jYXQoYXJyYXlPZlRhYmxlc0FuZENvbHVtbnNXaXRoTG93ZXJjYXNlQ29sdW1ucylcblxuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7XG4gICAgICBncm91cEJ5OiBuZXdHcm91cEJ5XG4gICAgfSlcbiAgfVxuXG4gIGlzTG9hZGVkKCkge1xuICAgIGlmICh0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWUgaW4gdGhpcy5hcmdzLm1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSlcbiAgICAgIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGxpbWl0KGFtb3VudCkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7bGltaXQ6IGFtb3VudH0pXG4gIH1cblxuICBwcmVsb2FkZWQoKSB7XG4gICAgaWYgKCEodGhpcy5hcmdzLnJlZmxlY3Rpb25OYW1lIGluIHRoaXMuYXJncy5tb2RlbC5yZWxhdGlvbnNoaXBzQ2FjaGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5hcmdzLnJlZmxlY3Rpb25OYW1lfSBoYXNudCBiZWVuIGxvYWRlZCB5ZXRgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFyZ3MubW9kZWwucmVsYXRpb25zaGlwc0NhY2hlW3RoaXMuYXJncy5yZWZsZWN0aW9uTmFtZV1cbiAgfVxuXG4gIGxvYWRlZCgpIHtcbiAgICBjb25zdCB7bW9kZWwsIHJlZmxlY3Rpb25OYW1lfSA9IHRoaXMuYXJnc1xuXG4gICAgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIHJldHVybiBtb2RlbC5yZWxhdGlvbnNoaXBzW3JlZmxlY3Rpb25OYW1lXVxuICAgIH0gZWxzZSBpZiAocmVmbGVjdGlvbk5hbWUgaW4gbW9kZWwucmVsYXRpb25zaGlwc0NhY2hlKSB7XG4gICAgICByZXR1cm4gbW9kZWwucmVsYXRpb25zaGlwc0NhY2hlW3JlZmxlY3Rpb25OYW1lXVxuICAgIH0gZWxzZSBpZiAobW9kZWwuaXNOZXdSZWNvcmQoKSkge1xuICAgICAgY29uc3QgcmVmbGVjdGlvbk5hbWVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHJlZmxlY3Rpb25OYW1lKVxuXG4gICAgICAvLyBJbml0aWFsaXplIGFzIGVtcHR5IGFuZCB0cnkgYWdhaW4gdG8gcmV0dXJuIHRoZSBlbXB0eSByZXN1bHRcbiAgICAgIHRoaXMuc2V0KFtdKVxuXG4gICAgICByZXR1cm4gZGlnZyhtb2RlbC5yZWxhdGlvbnNoaXBzLCByZWZsZWN0aW9uTmFtZVVuZGVyc2NvcmUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHNMb2FkZWQgPSB1bmlxdW5pemUoT2JqZWN0LmtleXMobW9kZWwucmVsYXRpb25zaGlwcykuY29uY2F0KE9iamVjdC5rZXlzKG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSkpKVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVmbGVjdGlvbk5hbWV9IGhhc250IGJlZW4gbG9hZGVkIHlldCBvbiAke21vZGVsLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX0uIExvYWRlZCB3YXM6ICR7cmVsYXRpb25zaGlwc0xvYWRlZC5qb2luKFwiLCBcIil9YClcbiAgICB9XG4gIH1cblxuICAvLyBSZXBsYWNlcyB0aGUgcmVsYXRpb25zaGlwcyB3aXRoIHRoZSBnaXZlbiBuZXcgY29sbGVjdGlvbi5cbiAgc2V0KG5ld0NvbGxlY3Rpb24pIHtcbiAgICB0aGlzLmFyZ3MubW9kZWwucmVsYXRpb25zaGlwc1t0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWVdID0gbmV3Q29sbGVjdGlvblxuICB9XG5cbiAgLy8gUHVzaGVzIGFub3RoZXIgbW9kZWwgb250byB0aGUgZ2l2ZW4gY29sbGVjdGlvbi5cbiAgcHVzaChuZXdNb2RlbCkge1xuICAgIGlmICghKHRoaXMuYXJncy5yZWZsZWN0aW9uTmFtZSBpbiB0aGlzLmFyZ3MubW9kZWwucmVsYXRpb25zaGlwcykpIHtcbiAgICAgIHRoaXMuYXJncy5tb2RlbC5yZWxhdGlvbnNoaXBzW3RoaXMuYXJncy5yZWZsZWN0aW9uTmFtZV0gPSBbXVxuICAgIH1cblxuICAgIHRoaXMuYXJncy5tb2RlbC5yZWxhdGlvbnNoaXBzW3RoaXMuYXJncy5yZWZsZWN0aW9uTmFtZV0ucHVzaChuZXdNb2RlbClcbiAgfVxuXG4gIC8vIEFycmF5IHNob3J0Y3V0c1xuICBmaW5kID0gKC4uLmFyZ3MpID0+IHRoaXMubG9hZGVkKCkuZmluZCguLi5hcmdzKVxuICBmb3JFYWNoID0gKC4uLmFyZ3MpID0+IHRoaXMubG9hZGVkKCkuZm9yRWFjaCguLi5hcmdzKVxuICBtYXAgPSAoLi4uYXJncykgPT4gdGhpcy5sb2FkZWQoKS5tYXAoLi4uYXJncylcblxuICBwcmVsb2FkKHByZWxvYWRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cHJlbG9hZDogcHJlbG9hZFZhbHVlfSlcbiAgfVxuXG4gIHBhZ2UocGFnZSkge1xuICAgIGlmICghcGFnZSlcbiAgICAgIHBhZ2UgPSAxXG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3BhZ2V9KVxuICB9XG5cbiAgcGFnZUtleShwYWdlS2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtwYWdlS2V5fSlcbiAgfVxuXG4gIHBhcmFtcygpIHtcbiAgICBsZXQgcGFyYW1zID0ge31cblxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5wYXJhbXMpIHBhcmFtcyA9IGluY29ycG9yYXRlKHBhcmFtcywgdGhpcy5xdWVyeUFyZ3MucGFyYW1zKVxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5hYmlsaXRpZXMpIHBhcmFtcy5hYmlsaXRpZXMgPSB0aGlzLnF1ZXJ5QXJncy5hYmlsaXRpZXNcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuYWNjZXNzaWJsZUJ5KSBwYXJhbXMuYWNjZXNzaWJsZV9ieSA9IGluZmxlY3Rpb24udW5kZXJzY29yZSh0aGlzLnF1ZXJ5QXJncy5hY2Nlc3NpYmxlQnkpXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmNvdW50KSBwYXJhbXMuY291bnQgPSB0aGlzLnF1ZXJ5QXJncy5jb3VudFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5kaXN0aW5jdCkgcGFyYW1zLmRpc3RpbmN0ID0gdGhpcy5xdWVyeUFyZ3MuZGlzdGluY3RcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuZ3JvdXBCeSkgcGFyYW1zLmdyb3VwX2J5ID0gdGhpcy5xdWVyeUFyZ3MuZ3JvdXBCeVxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5yYW5zYWNrKSBwYXJhbXMucSA9IHRoaXMucXVlcnlBcmdzLnJhbnNhY2tcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MubGltaXQpIHBhcmFtcy5saW1pdCA9IHRoaXMucXVlcnlBcmdzLmxpbWl0XG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnByZWxvYWQpIHBhcmFtcy5wcmVsb2FkID0gdGhpcy5xdWVyeUFyZ3MucHJlbG9hZFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5wYWdlKSBwYXJhbXMucGFnZSA9IHRoaXMucXVlcnlBcmdzLnBhZ2VcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MucGVyKSBwYXJhbXMucGVyID0gdGhpcy5xdWVyeUFyZ3MucGVyXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnNlYXJjaCkgcGFyYW1zLnNlYXJjaCA9IHRoaXMucXVlcnlBcmdzLnNlYXJjaFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5zZWxlY3QpIHBhcmFtcy5zZWxlY3QgPSB0aGlzLnF1ZXJ5QXJncy5zZWxlY3RcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3Muc2VsZWN0Q29sdW1ucykgcGFyYW1zLnNlbGVjdF9jb2x1bW5zID0gdGhpcy5xdWVyeUFyZ3Muc2VsZWN0Q29sdW1uc1xuXG4gICAgcmV0dXJuIHBhcmFtc1xuICB9XG5cbiAgcGVyKHBlcikge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cGVyfSlcbiAgfVxuXG4gIHBlcktleShwZXJLZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3BlcktleX0pXG4gIH1cblxuICByYW5zYWNrKHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMpIHRoaXMuX21lcmdlKHtyYW5zYWNrOiBwYXJhbXN9KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBhc3luYyByZXN1bHQoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9yZXNwb25zZSgpXG4gICAgY29uc3QgbW9kZWxzID0gZGlnZyhyZXNwb25zZSwgXCJjb2xsZWN0aW9uXCIpXG5cbiAgICB0aGlzLl9hZGRRdWVyeVRvTW9kZWxzKG1vZGVscylcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBSZXN1bHQoe2NvbGxlY3Rpb246IHRoaXMsIG1vZGVscywgcmVzcG9uc2V9KVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgc2VhcmNoKHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMpIHRoaXMuX21lcmdlKHtzZWFyY2g6IHBhcmFtc30pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHNlYXJjaEtleShzZWFyY2hLZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3NlYXJjaEtleX0pXG4gIH1cblxuICBzZWxlY3Qob3JpZ2luYWxTZWxlY3QpIHtcbiAgICBjb25zdCBuZXdTZWxlY3QgPSB7fVxuXG4gICAgZm9yIChjb25zdCBvcmlnaW5hbE1vZGVsTmFtZSBpbiBvcmlnaW5hbFNlbGVjdCkge1xuICAgICAgY29uc3QgbmV3TW9kZWxOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsTW9kZWxOYW1lKVxuICAgICAgY29uc3QgbmV3VmFsdWVzID0gW11cbiAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gb3JpZ2luYWxTZWxlY3Rbb3JpZ2luYWxNb2RlbE5hbWVdXG5cbiAgICAgIGZvciAoY29uc3Qgb3JpZ2luYWxBdHRyaWJ1dGVOYW1lIG9mIG9yaWdpbmFsVmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IG5ld0F0dHJpYnV0ZU5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUob3JpZ2luYWxBdHRyaWJ1dGVOYW1lKVxuICAgICAgICBuZXdWYWx1ZXMucHVzaChuZXdBdHRyaWJ1dGVOYW1lKVxuICAgICAgfVxuXG4gICAgICBuZXdTZWxlY3RbbmV3TW9kZWxOYW1lXSA9IG5ld1ZhbHVlc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7c2VsZWN0OiBuZXdTZWxlY3R9KVxuICB9XG5cbiAgc2VsZWN0Q29sdW1ucyhvcmlnaW5hbFNlbGVjdCkge1xuICAgIGNvbnN0IG5ld1NlbGVjdCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG9yaWdpbmFsTW9kZWxOYW1lIGluIG9yaWdpbmFsU2VsZWN0KSB7XG4gICAgICBjb25zdCBuZXdNb2RlbE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsTW9kZWxOYW1lKSlcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IFtdXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IG9yaWdpbmFsU2VsZWN0W29yaWdpbmFsTW9kZWxOYW1lXVxuXG4gICAgICBmb3IgKGNvbnN0IG9yaWdpbmFsQXR0cmlidXRlTmFtZSBvZiBvcmlnaW5hbFZhbHVlcykge1xuICAgICAgICBjb25zdCBuZXdBdHRyaWJ1dGVOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsQXR0cmlidXRlTmFtZSlcbiAgICAgICAgbmV3VmFsdWVzLnB1c2gobmV3QXR0cmlidXRlTmFtZSlcbiAgICAgIH1cblxuICAgICAgbmV3U2VsZWN0W25ld01vZGVsTmFtZV0gPSBuZXdWYWx1ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3NlbGVjdENvbHVtbnM6IG5ld1NlbGVjdH0pXG4gIH1cblxuICBzb3J0KHNvcnRCeSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7cmFuc2Fjazoge3M6IHNvcnRCeX19KVxuICB9XG5cbiAgYXN5bmMgdG9BcnJheSgpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX3Jlc3BvbnNlKClcbiAgICBjb25zdCBtb2RlbHMgPSBkaWdnKHJlc3BvbnNlLCBcImNvbGxlY3Rpb25cIilcblxuICAgIHRoaXMuX2FkZFF1ZXJ5VG9Nb2RlbHMobW9kZWxzKVxuXG4gICAgcmV0dXJuIG1vZGVsc1xuICB9XG5cbiAgbW9kZWxDbGFzcygpIHtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBkaWdnKHRoaXMuYXJncy5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuXG4gICAgcmV0dXJuIG1vZGVsQ2xhc3NSZXF1aXJlKG1vZGVsTmFtZSlcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IGNsb25lZFF1ZXJ5QXJncyA9IGNsb25lRGVlcCh0aGlzLnF1ZXJ5QXJncylcblxuICAgIHJldHVybiBuZXcgQXBpTWFrZXJDb2xsZWN0aW9uKHRoaXMuYXJncywgY2xvbmVkUXVlcnlBcmdzKVxuICB9XG5cbiAgLy8gVGhpcyBpcyBuZWVkZWQgd2hlbiByZWxvYWRpbmcgYSB2ZXJzaW9uIG9mIHRoZSBtb2RlbCB3aXRoIHRoZSBzYW1lIHNlbGVjdGVkIGF0dHJpYnV0ZXMgYW5kIHByZWxvYWRzXG4gIF9hZGRRdWVyeVRvTW9kZWxzKG1vZGVscykge1xuICAgIGZvcihjb25zdCBtb2RlbCBvZiBtb2RlbHMpIHtcbiAgICAgIG1vZGVsLmNvbGxlY3Rpb24gPSB0aGlzXG4gICAgfVxuICB9XG5cbiAgX21lcmdlKG5ld1F1ZXJ5QXJncykge1xuICAgIGluY29ycG9yYXRlKHRoaXMucXVlcnlBcmdzLCBuZXdRdWVyeUFyZ3MpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgX3Jlc3BvbnNlKCkge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3NEYXRhID0gdGhpcy5hcmdzLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKVxuXG4gICAgcmV0dXJuIENvbW1hbmRzUG9vbC5hZGRDb21tYW5kKFxuICAgICAge1xuICAgICAgICBhcmdzOiB0aGlzLnBhcmFtcygpLFxuICAgICAgICBjb21tYW5kOiBgJHttb2RlbENsYXNzRGF0YS5jb2xsZWN0aW9uTmFtZX0taW5kZXhgLFxuICAgICAgICBjb2xsZWN0aW9uTmFtZTogbW9kZWxDbGFzc0RhdGEuY29sbGVjdGlvbk5hbWUsXG4gICAgICAgIHR5cGU6IFwiaW5kZXhcIlxuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFNBQVMsTUFBTSxZQUFZO0FBQ2xDLE9BQU9DLFlBQVksTUFBTSxpQkFBaUI7QUFDMUMsU0FBUUMsSUFBSSxRQUFPLFdBQVc7QUFDOUIsT0FBTyxLQUFLQyxVQUFVLE1BQU0sWUFBWTtBQUN4QyxTQUFRQyxXQUFXLFFBQU8sY0FBYztBQUN4QyxPQUFPQyxpQkFBaUIsTUFBTSx1QkFBdUI7QUFDckQsT0FBT0MsTUFBTSxNQUFNLFVBQVU7QUFFN0IsZUFBZSxNQUFNQyxrQkFBa0IsQ0FBQztFQUN0QyxPQUFPQyxZQUFZLEdBQUcsWUFBWTtFQUVsQ0MsV0FBV0EsQ0FBQ0MsSUFBSSxFQUFFQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDQSxTQUFTLEdBQUdBLFNBQVM7SUFDMUIsSUFBSSxDQUFDRCxJQUFJLEdBQUdBLElBQUk7RUFDbEI7RUFFQUUsU0FBU0EsQ0FBQ0MsaUJBQWlCLEVBQUU7SUFDM0IsTUFBTUMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUV2QixLQUFLLE1BQU1DLG1CQUFtQixJQUFJRixpQkFBaUIsRUFBRTtNQUNuRCxNQUFNRyxZQUFZLEdBQUdiLFVBQVUsQ0FBQ2MsVUFBVSxDQUFDRixtQkFBbUIsQ0FBQztNQUMvRCxNQUFNRyxTQUFTLEdBQUcsRUFBRTtNQUNwQixNQUFNQyxjQUFjLEdBQUdOLGlC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
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import objectToFormData from "object-to-formdata";
|
|
2
|
+
export default class ApiMakerCommandSubmitData {
|
|
3
|
+
constructor(data) {
|
|
4
|
+
this.data = data;
|
|
5
|
+
this.filesCount = 0;
|
|
6
|
+
this.jsonData = this.traverseObject(this.data, "json");
|
|
7
|
+
}
|
|
8
|
+
getFilesCount = () => this.filesCount;
|
|
9
|
+
getJsonData = () => this.jsonData;
|
|
10
|
+
getRawData() {
|
|
11
|
+
if (!this.rawData) {
|
|
12
|
+
this.rawData = this.traverseObject(this.data, "raw");
|
|
13
|
+
}
|
|
14
|
+
return this.rawData;
|
|
15
|
+
}
|
|
16
|
+
getFormData() {
|
|
17
|
+
const objectForFormData = this.getRawData() || {};
|
|
18
|
+
objectForFormData.json = JSON.stringify(this.getJsonData());
|
|
19
|
+
const formData = objectToFormData.serialize(objectForFormData);
|
|
20
|
+
return formData;
|
|
21
|
+
}
|
|
22
|
+
convertDynamic(value, type) {
|
|
23
|
+
if (Array.isArray(value)) {
|
|
24
|
+
return this.traverseArray(value, type);
|
|
25
|
+
} else if (typeof value == "object" && value !== null && value.constructor.name == "Object") {
|
|
26
|
+
return this.traverseObject(value, type);
|
|
27
|
+
} else {
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
shouldSkip(object, type) {
|
|
32
|
+
if (type == "json" && object instanceof File) {
|
|
33
|
+
this.filesCount += 1;
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if (type == "raw" && !Array.isArray(object) && !this.isObject(object) && !(object instanceof File)) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
isObject(value) {
|
|
42
|
+
if (typeof value == "object" && value !== null && value.constructor.name == "Object") {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
traverseArray(array, type) {
|
|
48
|
+
const newArray = [];
|
|
49
|
+
for (const value of array) {
|
|
50
|
+
if (this.shouldSkip(value, type)) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
newArray.push(this.convertDynamic(value, type));
|
|
55
|
+
} else if (this.isObject(value)) {
|
|
56
|
+
newArray.push(this.convertDynamic(value, type));
|
|
57
|
+
} else {
|
|
58
|
+
newArray.push(value);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return newArray;
|
|
62
|
+
}
|
|
63
|
+
traverseObject(object, type) {
|
|
64
|
+
const newObject = {};
|
|
65
|
+
for (const key in object) {
|
|
66
|
+
const value = object[key];
|
|
67
|
+
if (this.shouldSkip(value, type)) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (Array.isArray(value)) {
|
|
71
|
+
newObject[key] = this.convertDynamic(value, type);
|
|
72
|
+
} else if (this.isObject(value)) {
|
|
73
|
+
newObject[key] = this.convertDynamic(value, type);
|
|
74
|
+
} else {
|
|
75
|
+
newObject[key] = value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return newObject;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvYmplY3RUb0Zvcm1EYXRhIiwiQXBpTWFrZXJDb21tYW5kU3VibWl0RGF0YSIsImNvbnN0cnVjdG9yIiwiZGF0YSIsImZpbGVzQ291bnQiLCJqc29uRGF0YSIsInRyYXZlcnNlT2JqZWN0IiwiZ2V0RmlsZXNDb3VudCIsImdldEpzb25EYXRhIiwiZ2V0UmF3RGF0YSIsInJhd0RhdGEiLCJnZXRGb3JtRGF0YSIsIm9iamVjdEZvckZvcm1EYXRhIiwianNvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJmb3JtRGF0YSIsInNlcmlhbGl6ZSIsImNvbnZlcnREeW5hbWljIiwidmFsdWUiLCJ0eXBlIiwiQXJyYXkiLCJpc0FycmF5IiwidHJhdmVyc2VBcnJheSIsIm5hbWUiLCJzaG91bGRTa2lwIiwib2JqZWN0IiwiRmlsZSIsImlzT2JqZWN0IiwiYXJyYXkiLCJuZXdBcnJheSIsInB1c2giLCJuZXdPYmplY3QiLCJrZXkiXSwic291cmNlcyI6WyIuLi9zcmMvY29tbWFuZC1zdWJtaXQtZGF0YS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb2JqZWN0VG9Gb3JtRGF0YSBmcm9tIFwib2JqZWN0LXRvLWZvcm1kYXRhXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJDb21tYW5kU3VibWl0RGF0YSB7XG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuZmlsZXNDb3VudCA9IDBcbiAgICB0aGlzLmpzb25EYXRhID0gdGhpcy50cmF2ZXJzZU9iamVjdCh0aGlzLmRhdGEsIFwianNvblwiKVxuICB9XG5cbiAgZ2V0RmlsZXNDb3VudCA9ICgpID0+IHRoaXMuZmlsZXNDb3VudFxuICBnZXRKc29uRGF0YSA9ICgpID0+IHRoaXMuanNvbkRhdGFcblxuICBnZXRSYXdEYXRhICgpIHtcbiAgICBpZiAoIXRoaXMucmF3RGF0YSkge1xuICAgICAgdGhpcy5yYXdEYXRhID0gdGhpcy50cmF2ZXJzZU9iamVjdCh0aGlzLmRhdGEsIFwicmF3XCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmF3RGF0YVxuICB9XG5cbiAgZ2V0Rm9ybURhdGEgKCkge1xuICAgIGNvbnN0IG9iamVjdEZvckZvcm1EYXRhID0gdGhpcy5nZXRSYXdEYXRhKCkgfHwge31cblxuICAgIG9iamVjdEZvckZvcm1EYXRhLmpzb24gPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldEpzb25EYXRhKCkpXG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IG9iamVjdFRvRm9ybURhdGEuc2VyaWFsaXplKG9iamVjdEZvckZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIGZvcm1EYXRhXG4gIH1cblxuICBjb252ZXJ0RHluYW1pYyAodmFsdWUsIHR5cGUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYXZlcnNlQXJyYXkodmFsdWUsIHR5cGUpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwiT2JqZWN0XCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYXZlcnNlT2JqZWN0KHZhbHVlLCB0eXBlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gIH1cblxuICBzaG91bGRTa2lwIChvYmplY3QsIHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcImpzb25cIiAmJiBvYmplY3QgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICB0aGlzLmZpbGVzQ291bnQgKz0gMVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PSBcInJhd1wiICYmICFBcnJheS5pc0FycmF5KG9iamVjdCkgJiYgIXRoaXMuaXNPYmplY3Qob2JqZWN0KSAmJiAhKG9iamVjdCBpbnN0YW5jZW9mIEZpbGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaXNPYmplY3QgKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT0gXCJPYmplY3RcIikge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHRyYXZlcnNlQXJyYXkgKGFycmF5LCB0eXBlKSB7XG4gICAgY29uc3QgbmV3QXJyYXkgPSBbXVxuXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhcnJheSkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkU2tpcCh2YWx1ZSwgdHlwZSkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIG5ld0FycmF5LnB1c2godGhpcy5jb252ZXJ0RHluYW1pYyh2YWx1ZSwgdHlwZSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIG5ld0FycmF5LnB1c2godGhpcy5jb252ZXJ0RHluYW1pYyh2YWx1ZSwgdHlwZSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdBcnJheS5wdXNoKHZhbHVlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdBcnJheVxuICB9XG5cbiAgdHJhdmVyc2VPYmplY3QgKG9iamVjdCwgdHlwZSkge1xuICAgIGNvbnN0IG5ld09iamVjdCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cblxuICAgICAgaWYgKHRoaXMuc2hvdWxkU2tpcCh2YWx1ZSwgdHlwZSkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIG5ld09iamVjdFtrZXldID0gdGhpcy5jb252ZXJ0RHluYW1pYyh2YWx1ZSwgdHlwZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgbmV3T2JqZWN0W2tleV0gPSB0aGlzLmNvbnZlcnREeW5hbWljKHZhbHVlLCB0eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3T2JqZWN0W2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdPYmplY3RcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxnQkFBZ0IsTUFBTSxvQkFBb0I7QUFFakQsZUFBZSxNQUFNQyx5QkFBeUIsQ0FBQztFQUM3Q0MsV0FBV0EsQ0FBRUMsSUFBSSxFQUFFO0lBQ2pCLElBQUksQ0FBQ0EsSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0MsVUFBVSxHQUFHLENBQUM7SUFDbkIsSUFBSSxDQUFDQyxRQUFRLEdBQUcsSUFBSSxDQUFDQyxjQUFjLENBQUMsSUFBSSxDQUFDSCxJQUFJLEVBQUUsTUFBTSxDQUFDO0VBQ3hEO0VBRUFJLGFBQWEsR0FBR0EsQ0FBQSxLQUFNLElBQUksQ0FBQ0gsVUFBVTtFQUNyQ0ksV0FBVyxHQUFHQSxDQUFBLEtBQU0sSUFBSSxDQUFDSCxRQUFRO0VBRWpDSSxVQUFVQSxDQUFBLEVBQUk7SUFDWixJQUFJLENBQUMsSUFBSSxDQUFDQyxPQUFPLEVBQUU7TUFDakIsSUFBSSxDQUFDQSxPQUFPLEdBQUcsSUFBSSxDQUFDSixjQUFjLENBQUMsSUFBSSxDQUFDSCxJQUFJLEVBQUUsS0FBSyxDQUFDO0lBQ3REO0lBRUEsT0FBTyxJQUFJLENBQUNPLE9BQU87RUFDckI7RUFFQUMsV0FBV0EsQ0FBQSxFQUFJO0lBQ2IsTUFBTUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDSCxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqREcsaUJBQWlCLENBQUNDLElBQUksR0FBR0MsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDUCxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBRTNELE1BQU1RLFFBQVEsR0FBR2hCLGdCQUFnQixDQUFDaUIsU0FBUyxDQUFDTCxpQkFBaUIsQ0FBQztJQUU5RCxPQUFPSSxRQUFRO0VBQ2pCO0VBRUFFLGNBQWNBLENBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFO0lBQzNCLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxLQUFLLENBQUMsRUFBRTtNQUN4QixPQUFPLElBQUksQ0FBQ0ksYUFBYSxDQUFDSixLQUFLLEVBQUVDLElBQUksQ0FBQztJQUN4QyxDQUFDLE1BQU0sSUFBSSxPQUFPRCxLQUFLLElBQUksUUFBUSxJQUFJQSxLQUFLLEtBQUssSUFBSSxJQUFJQSxLQUFLLENBQUNqQixXQUFXLENBQUNzQixJQUFJLElBQUksUUFBUSxFQUFFO01BQzNGLE9BQU8sSUFBSSxDQUFDbEIsY0FBYyxDQUFDYSxLQUFLLEVBQUVDLElBQUksQ0FBQztJQUN6QyxDQUFDLE1BQU07TUFDTCxPQUFPRCxLQUFLO0lBQ2Q7RUFDRjtFQUVBTSxVQUFVQSxDQUFFQyxNQUFNLEVBQUVOLElBQUksRUFBRTtJQUN4QixJQUFJQSxJQUFJLElBQUksTUFBTSxJQUFJTSxNQUFNLFlBQVlDLElBQUksRUFBRTtNQUM1QyxJQUFJLENBQUN2QixVQUFVLElBQUksQ0FBQztNQUNwQixPQUFPLElBQUk7SUFDYjtJQUVBLElBQUlnQixJQUFJLElBQUksS0FBSyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQ0UsUUFBUSxDQUFDRixNQUFNLENBQUMsSUFBSSxFQUFFQSxNQUFNLFlBQVlDLElBQUksQ0FBQyxFQUFFO01BQ2xHLE9BQU8sSUFBSTtJQUNiO0lBRUEsT0FBTyxLQUFLO0VBQ2Q7RUFFQUMsUUFBUUEsQ0FBRVQsS0FBSyxFQUFFO0lBQ2YsSUFBSSxPQUFPQSxLQUFLLElBQUksUUFBUSxJQUFJQSxLQUFLLEtBQUssSUFBSSxJQUFJQSxLQUFLLENBQUNqQixXQUFXLENBQUNzQixJQUFJLElBQUksUUFBUSxFQUFFO01BQ3BGLE9BQU8sSUFBSTtJQUNiO0lBRUEsT0FBTyxLQUFLO0VBQ2Q7RUFFQUQsYUFBYUEsQ0FBRU0sS0FBSyxFQUFFVCxJQUFJLEVBQUU7SUFDMUIsTUFBTVUsUUFBUSxHQUFHLEVBQUU7SUFFbkIsS0FBSyxNQUFNWCxLQUFLLElBQUlVLEtBQUssRUFBRTtNQUN6QixJQUFJLElBQUksQ0FBQ0osVUFBVSxDQUFDTixLQUFLLEVBQUVDLElBQUksQ0FBQyxFQUFFO1FBQ2hDO01BQ0Y7TUFFQSxJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0gsS0FBSyxDQUFDLEVBQUU7UUFDeEJXLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ2IsY0FBYyxDQUFDQyxLQUFLLEVBQUVDLElBQUksQ0FBQyxDQUFDO01BQ2pELENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ1EsUUFBUSxDQUFDVCxLQUFLLENBQUMsRUFBRTtRQUMvQlcsUUFBUSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDYixjQUFjLENBQUNDLEtBQUssRUFBRUMsSUFBSSxDQUFDLENBQUM7TUFDakQsQ0FBQyxNQUFNO1FBQ0xVLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDWixLQUFLLENBQUM7TUFDdEI7SUFDRjtJQUVBLE9BQU9XLFFBQVE7RUFDakI7RUFFQXhCLGNBQWNBLENBQUVvQixNQUFNLEVBQUVOLElBQUksRUFBRTtJQUM1QixNQUFNWSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRXBCLEtBQUssTUFBTUMsR0FBRyxJQUFJUCxNQUFNLEVBQUU7TUFDeEIsTUFBTVAsS0FBSyxHQUFHTyxNQUFNLENBQUNPLEdBQUcsQ0FBQztNQUV6QixJQUFJLElBQUksQ0FBQ1IsVUFBVSxDQUFDTixLQUFLLEVBQUVDLElBQUksQ0FBQyxFQUFFO1FBQ2hDO01BQ0Y7TUFFQSxJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0gsS0FBSyxDQUFDLEVBQUU7UUFDeEJhLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDZixjQUFjLENBQUNDLEtBQUssRUFBRUMsSUFBSSxDQUFDO01BQ25ELENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ1EsUUFBUSxDQUFDVCxLQUFLLENBQUMsRUFBRTtRQUMvQmEsU0FBUyxDQUFDQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUNmLGNBQWMsQ0FBQ0MsS0FBSyxFQUFFQyxJQUFJLENBQUM7TUFDbkQsQ0FBQyxNQUFNO1FBQ0xZLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLEdBQUdkLEtBQUs7TUFDeEI7SUFDRjtJQUVBLE9BQU9hLFNBQVM7RUFDbEI7QUFDRiIsImlnbm9yZUxpc3QiOltdfQ==
|