@kaspernj/api-maker 1.0.2054 → 1.0.2056
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.js +65 -213
- package/build/attribute-not-loaded-error.js +3 -26
- package/build/base-component.js +4 -27
- package/build/base-error.js +21 -46
- package/build/base-model/attribute.js +15 -22
- package/build/base-model/column.js +5 -9
- package/build/base-model/reflection.js +12 -52
- package/build/base-model/scope.js +9 -46
- package/build/base-model.js +584 -837
- package/build/bootstrap/attribute-row.js +88 -173
- package/build/bootstrap/attribute-rows.js +22 -51
- package/build/bootstrap/card.js +77 -160
- package/build/bootstrap/checkbox.js +54 -103
- package/build/bootstrap/checkboxes.js +117 -203
- package/build/bootstrap/index.js +1 -1
- package/build/bootstrap/input.js +81 -132
- package/build/bootstrap/invalid-feedback.js +19 -47
- package/build/bootstrap/paginate.js +100 -165
- package/build/bootstrap/radio-buttons.js +44 -81
- package/build/bootstrap/select.js +44 -91
- package/build/bootstrap/sort-link.js +69 -152
- package/build/cable-connection-pool.js +44 -66
- package/build/cable-subscription-pool.js +105 -162
- package/build/cable-subscription.js +10 -17
- package/build/cache-key-generator.js +28 -37
- package/build/can-can.js +81 -202
- package/build/channels-consumer.js +6 -11
- package/build/collection-loader.js +36 -54
- package/build/collection.d.ts.map +1 -1
- package/build/collection.js +160 -308
- package/build/command-submit-data.d.ts +1 -1
- package/build/command-submit-data.d.ts.map +1 -1
- package/build/command-submit-data.js +30 -39
- package/build/commands-pool.js +140 -216
- package/build/compose.js +4 -12
- package/build/config.js +21 -68
- package/build/custom-error.js +5 -30
- package/build/data-set-to-attributes.js +6 -42
- package/build/deserializer.js +27 -80
- package/build/destroy-error.js +5 -30
- package/build/devise.js +84 -188
- package/build/draggable-sort/controller.js +88 -111
- package/build/draggable-sort/index.js +68 -145
- package/build/draggable-sort/item.js +132 -198
- package/build/error-logger.js +79 -164
- package/build/error-messages.js +5 -8
- package/build/event-connection.js +24 -62
- package/build/event-emitter-listener.js +7 -24
- package/build/event-model-class.js +20 -47
- package/build/events.js +4 -9
- package/build/form.js +66 -154
- package/build/history-expo.js +13 -25
- package/build/history-react-native.js +15 -27
- package/build/history.js +3 -5
- package/build/index.js +3 -6
- package/build/inputs/attachment.js +72 -123
- package/build/inputs/auto-submit.js +16 -55
- package/build/inputs/checkbox.js +78 -167
- package/build/inputs/checkboxes.js +76 -159
- package/build/inputs/id-for-component.js +5 -41
- package/build/inputs/input-wrapper.js +8 -27
- package/build/inputs/input.js +159 -245
- package/build/inputs/money.js +124 -186
- package/build/inputs/name-for-component.js +5 -41
- package/build/inputs/select.js +69 -123
- package/build/instance-of-class-name.js +16 -21
- package/build/is-expo.js +9 -11
- package/build/key-value-store.js +52 -128
- package/build/link.js +52 -115
- package/build/logger.js +20 -26
- package/build/merge-styles.js +6 -10
- package/build/modal.js +15 -62
- package/build/model-class-require.js +9 -44
- package/build/model-events.js +25 -34
- package/build/model-name.js +16 -57
- package/build/model-prop-type.js +52 -63
- package/build/model-recipes-loader.js +17 -25
- package/build/model-recipes-model-loader.d.ts +1 -1
- package/build/model-recipes-model-loader.js +130 -208
- package/build/models-response-reader.js +25 -66
- package/build/models.js +6 -11
- package/build/money-formatter.d.ts +2 -2
- package/build/money-formatter.d.ts.map +1 -1
- package/build/money-formatter.js +46 -56
- package/build/not-loaded-error.js +3 -26
- package/build/params.js +32 -42
- package/build/preloaded.js +19 -59
- package/build/resize-observer.js +6 -12
- package/build/rest-props-validator.js +5 -7
- package/build/result.js +11 -15
- package/build/router/route.js +179 -312
- package/build/router/switch.js +56 -130
- package/build/router.js +34 -94
- package/build/routes-native.js +64 -148
- package/build/routes.js +26 -80
- package/build/run-last.js +20 -25
- package/build/serializer.js +29 -34
- package/build/services.js +10 -19
- package/build/session-status-updater.js +85 -184
- package/build/source-maps-loader.d.ts +37 -0
- package/build/source-maps-loader.d.ts.map +1 -0
- package/build/source-maps-loader.js +103 -225
- package/build/super-admin/config-reader.d.ts +2 -2
- package/build/super-admin/config-reader.js +42 -83
- package/build/super-admin/edit-page/edit-attribute-checkbox.js +53 -115
- package/build/super-admin/edit-page/edit-attribute-content.js +47 -77
- package/build/super-admin/edit-page/edit-attribute-input.js +57 -119
- package/build/super-admin/edit-page/edit-attribute.js +40 -104
- package/build/super-admin/edit-page.js +88 -201
- package/build/super-admin/has-edit-config.js +7 -13
- package/build/super-admin/index-page.js +17 -44
- package/build/super-admin/index.js +87 -210
- package/build/super-admin/layout/header/index.js +91 -152
- package/build/super-admin/layout/index.js +70 -153
- package/build/super-admin/layout/menu/index.js +85 -161
- package/build/super-admin/layout/menu/menu-content.js +25 -85
- package/build/super-admin/layout/menu/menu-item.js +52 -102
- package/build/super-admin/layout/no-access.js +19 -45
- package/build/super-admin/model-class-table.js +45 -129
- package/build/super-admin/models.js +6 -42
- package/build/super-admin/show-nav.js +27 -89
- package/build/super-admin/show-page/belongs-to-attribute-row.js +18 -76
- package/build/super-admin/show-page/index.js +101 -187
- package/build/super-admin/show-reflection-actions.js +39 -100
- package/build/super-admin/show-reflection-link.js +27 -99
- package/build/super-admin/show-reflection-page.js +34 -97
- package/build/table/column-content.js +77 -121
- package/build/table/column-identifier.js +7 -11
- package/build/table/column-visible.js +2 -5
- package/build/table/components/column.js +13 -60
- package/build/table/components/flat-list.js +13 -60
- package/build/table/components/header.js +15 -62
- package/build/table/components/row.js +16 -63
- package/build/table/filters/attribute-element.js +34 -62
- package/build/table/filters/filter-form.js +280 -483
- package/build/table/filters/filter.js +45 -73
- package/build/table/filters/index.js +95 -139
- package/build/table/filters/load-search-modal.js +64 -212
- package/build/table/filters/reflection-element.js +27 -55
- package/build/table/filters/save-search-modal.js +44 -140
- package/build/table/filters/scope-element.js +28 -56
- package/build/table/header-column-content.js +33 -71
- package/build/table/header-column.js +89 -218
- package/build/table/header-select.js +45 -77
- package/build/table/model-callback-args.js +5 -41
- package/build/table/model-column.js +59 -144
- package/build/table/model-row.js +75 -187
- package/build/table/select-calculator.js +27 -86
- package/build/table/settings/column-row.js +66 -186
- package/build/table/settings/download-action.js +38 -74
- package/build/table/settings/index.js +38 -102
- package/build/table/table-settings.js +185 -323
- package/build/table/table.js +583 -781
- package/build/table/use-sorting.js +16 -35
- package/build/table/widths.js +32 -38
- package/build/table/worker-plugins-check-all-checkbox.js +77 -225
- package/build/table/worker-plugins-checkbox.js +74 -185
- package/build/translated-attributes.js +6 -11
- package/build/translated-collections.js +11 -20
- package/build/updated-attribute.js +47 -120
- package/build/url-encode.js +6 -12
- package/build/use-breakpoint.js +43 -95
- package/build/use-can-can.js +30 -92
- package/build/use-collection.js +119 -229
- package/build/use-created-event.js +27 -44
- package/build/use-current-user-context.js +57 -151
- package/build/use-current-user.js +14 -32
- package/build/use-destroyed-event.js +22 -43
- package/build/use-event-emitter.d.ts +1 -2
- package/build/use-event-emitter.d.ts.map +1 -1
- package/build/use-event-emitter.js +10 -16
- package/build/use-event-listener.js +13 -22
- package/build/use-input.js +49 -69
- package/build/use-model-event.js +22 -43
- package/build/use-model.js +96 -199
- package/build/use-resize-observer.js +11 -21
- package/build/use-router.js +65 -107
- package/build/use-screen-layout.js +17 -19
- package/build/use-styles.js +24 -75
- package/build/use-updated-event.js +22 -44
- package/build/use-validation-errors.js +12 -18
- package/build/utils/button.js +86 -136
- package/build/utils/card.js +31 -106
- package/build/utils/checkbox.js +51 -112
- package/build/utils/checkboxes.js +109 -182
- package/build/utils/default-style.js +29 -103
- package/build/utils/header.js +8 -35
- package/build/utils/icon.js +36 -117
- package/build/utils/invalid-feedback.js +16 -43
- package/build/utils/modal.js +25 -108
- package/build/utils/text.js +10 -37
- package/build/validation-error.js +31 -89
- package/build/validation-errors.js +61 -111
- package/build/with-api-maker.js +15 -67
- package/build/with-collection.js +14 -64
- package/build/with-current-user.js +7 -23
- package/build/with-model.js +11 -27
- package/build/with-router.js +8 -35
- package/package.json +4 -3
- package/build/api.js.map +0 -1
- package/build/attribute-not-loaded-error.js.map +0 -1
- package/build/base-component.js.map +0 -1
- package/build/base-error.js.map +0 -1
- package/build/base-model/attribute.js.map +0 -1
- package/build/base-model/column.js.map +0 -1
- package/build/base-model/reflection.js.map +0 -1
- package/build/base-model/scope.js.map +0 -1
- package/build/base-model.js.map +0 -1
- package/build/bootstrap/attribute-row.js.map +0 -1
- package/build/bootstrap/attribute-rows.js.map +0 -1
- package/build/bootstrap/card.js.map +0 -1
- package/build/bootstrap/checkbox.js.map +0 -1
- package/build/bootstrap/checkboxes.js.map +0 -1
- package/build/bootstrap/index.js.map +0 -1
- package/build/bootstrap/input.js.map +0 -1
- package/build/bootstrap/invalid-feedback.js.map +0 -1
- package/build/bootstrap/paginate.js.map +0 -1
- package/build/bootstrap/radio-buttons.js.map +0 -1
- package/build/bootstrap/select.js.map +0 -1
- package/build/bootstrap/sort-link.js.map +0 -1
- package/build/cable-connection-pool.js.map +0 -1
- package/build/cable-subscription-pool.js.map +0 -1
- package/build/cable-subscription.js.map +0 -1
- package/build/cache-key-generator.js.map +0 -1
- package/build/can-can.js.map +0 -1
- package/build/channels-consumer.js.map +0 -1
- package/build/collection-loader.js.map +0 -1
- package/build/collection.js.map +0 -1
- package/build/command-submit-data.js.map +0 -1
- package/build/commands-pool.js.map +0 -1
- package/build/compose.js.map +0 -1
- package/build/config.js.map +0 -1
- package/build/custom-error.js.map +0 -1
- package/build/data-set-to-attributes.js.map +0 -1
- package/build/deserializer.js.map +0 -1
- package/build/destroy-error.js.map +0 -1
- package/build/devise.js.map +0 -1
- package/build/draggable-sort/controller.js.map +0 -1
- package/build/draggable-sort/index.js.map +0 -1
- package/build/draggable-sort/item.js.map +0 -1
- package/build/error-logger.js.map +0 -1
- package/build/error-messages.js.map +0 -1
- package/build/event-connection.js.map +0 -1
- package/build/event-emitter-listener.js.map +0 -1
- package/build/event-model-class.js.map +0 -1
- package/build/events.js.map +0 -1
- package/build/form.js.map +0 -1
- package/build/history-expo.js.map +0 -1
- package/build/history-react-native.js.map +0 -1
- package/build/history.js.map +0 -1
- package/build/index.js.map +0 -1
- package/build/inputs/attachment.js.map +0 -1
- package/build/inputs/auto-submit.js.map +0 -1
- package/build/inputs/checkbox.js.map +0 -1
- package/build/inputs/checkboxes.js.map +0 -1
- package/build/inputs/id-for-component.js.map +0 -1
- package/build/inputs/input-wrapper.js.map +0 -1
- package/build/inputs/input.js.map +0 -1
- package/build/inputs/money.js.map +0 -1
- package/build/inputs/name-for-component.js.map +0 -1
- package/build/inputs/select.js.map +0 -1
- package/build/instance-of-class-name.js.map +0 -1
- package/build/is-expo.js.map +0 -1
- package/build/key-value-store.js.map +0 -1
- package/build/link.js.map +0 -1
- package/build/logger.js.map +0 -1
- package/build/merge-styles.js.map +0 -1
- package/build/modal.js.map +0 -1
- package/build/model-class-require.js.map +0 -1
- package/build/model-events.js.map +0 -1
- package/build/model-name.js.map +0 -1
- package/build/model-prop-type.js.map +0 -1
- package/build/model-recipes-loader.js.map +0 -1
- package/build/model-recipes-model-loader.js.map +0 -1
- package/build/models-response-reader.js.map +0 -1
- package/build/models.js.map +0 -1
- package/build/money-formatter.js.map +0 -1
- package/build/not-loaded-error.js.map +0 -1
- package/build/params.js.map +0 -1
- package/build/preloaded.js.map +0 -1
- package/build/resize-observer.js.map +0 -1
- package/build/rest-props-validator.js.map +0 -1
- package/build/result.js.map +0 -1
- package/build/router/route.js.map +0 -1
- package/build/router/switch.js.map +0 -1
- package/build/router.js.map +0 -1
- package/build/routes-native.js.map +0 -1
- package/build/routes.js.map +0 -1
- package/build/run-last.js.map +0 -1
- package/build/serializer.js.map +0 -1
- package/build/services.js.map +0 -1
- package/build/session-status-updater.js.map +0 -1
- package/build/source-maps-loader.js.map +0 -1
- package/build/super-admin/config-reader.js.map +0 -1
- package/build/super-admin/edit-page/edit-attribute-checkbox.js.map +0 -1
- package/build/super-admin/edit-page/edit-attribute-content.js.map +0 -1
- package/build/super-admin/edit-page/edit-attribute-input.js.map +0 -1
- package/build/super-admin/edit-page/edit-attribute.js.map +0 -1
- package/build/super-admin/edit-page.js.map +0 -1
- package/build/super-admin/has-edit-config.js.map +0 -1
- package/build/super-admin/index-page.js.map +0 -1
- package/build/super-admin/index.js.map +0 -1
- package/build/super-admin/layout/header/index.js.map +0 -1
- package/build/super-admin/layout/index.js.map +0 -1
- package/build/super-admin/layout/menu/index.js.map +0 -1
- package/build/super-admin/layout/menu/menu-content.js.map +0 -1
- package/build/super-admin/layout/menu/menu-item.js.map +0 -1
- package/build/super-admin/layout/no-access.js.map +0 -1
- package/build/super-admin/model-class-table.js.map +0 -1
- package/build/super-admin/models.js.map +0 -1
- package/build/super-admin/show-nav.js.map +0 -1
- package/build/super-admin/show-page/belongs-to-attribute-row.js.map +0 -1
- package/build/super-admin/show-page/index.js.map +0 -1
- package/build/super-admin/show-reflection-actions.js.map +0 -1
- package/build/super-admin/show-reflection-link.js.map +0 -1
- package/build/super-admin/show-reflection-page.js.map +0 -1
- package/build/table/column-content.js.map +0 -1
- package/build/table/column-identifier.js.map +0 -1
- package/build/table/column-visible.js.map +0 -1
- package/build/table/components/column.js.map +0 -1
- package/build/table/components/flat-list.js.map +0 -1
- package/build/table/components/header.js.map +0 -1
- package/build/table/components/row.js.map +0 -1
- package/build/table/filters/attribute-element.js.map +0 -1
- package/build/table/filters/filter-form.js.map +0 -1
- package/build/table/filters/filter.js.map +0 -1
- package/build/table/filters/index.js.map +0 -1
- package/build/table/filters/load-search-modal.js.map +0 -1
- package/build/table/filters/reflection-element.js.map +0 -1
- package/build/table/filters/save-search-modal.js.map +0 -1
- package/build/table/filters/scope-element.js.map +0 -1
- package/build/table/header-column-content.js.map +0 -1
- package/build/table/header-column.js.map +0 -1
- package/build/table/header-select.js.map +0 -1
- package/build/table/model-callback-args.js.map +0 -1
- package/build/table/model-column.js.map +0 -1
- package/build/table/model-row.js.map +0 -1
- package/build/table/select-calculator.js.map +0 -1
- package/build/table/settings/column-row.js.map +0 -1
- package/build/table/settings/download-action.js.map +0 -1
- package/build/table/settings/index.js.map +0 -1
- package/build/table/table-settings.js.map +0 -1
- package/build/table/table.js.map +0 -1
- package/build/table/use-sorting.js.map +0 -1
- package/build/table/widths.js.map +0 -1
- package/build/table/worker-plugins-check-all-checkbox.js.map +0 -1
- package/build/table/worker-plugins-checkbox.js.map +0 -1
- package/build/translated-attributes.js.map +0 -1
- package/build/translated-collections.js.map +0 -1
- package/build/updated-attribute.js.map +0 -1
- package/build/url-encode.js.map +0 -1
- package/build/use-breakpoint.js.map +0 -1
- package/build/use-can-can.js.map +0 -1
- package/build/use-collection.js.map +0 -1
- package/build/use-created-event.js.map +0 -1
- package/build/use-current-user-context.js.map +0 -1
- package/build/use-current-user.js.map +0 -1
- package/build/use-destroyed-event.js.map +0 -1
- package/build/use-event-emitter.js.map +0 -1
- package/build/use-event-listener.js.map +0 -1
- package/build/use-input.js.map +0 -1
- package/build/use-model-event.js.map +0 -1
- package/build/use-model.js.map +0 -1
- package/build/use-resize-observer.js.map +0 -1
- package/build/use-router.js.map +0 -1
- package/build/use-screen-layout.js.map +0 -1
- package/build/use-styles.js.map +0 -1
- package/build/use-updated-event.js.map +0 -1
- package/build/use-validation-errors.js.map +0 -1
- package/build/utils/button.js.map +0 -1
- package/build/utils/card.js.map +0 -1
- package/build/utils/checkbox.js.map +0 -1
- package/build/utils/checkboxes.js.map +0 -1
- package/build/utils/default-style.js.map +0 -1
- package/build/utils/header.js.map +0 -1
- package/build/utils/icon.js.map +0 -1
- package/build/utils/invalid-feedback.js.map +0 -1
- package/build/utils/modal.js.map +0 -1
- package/build/utils/text.js.map +0 -1
- package/build/validation-error.js.map +0 -1
- package/build/validation-errors.js.map +0 -1
- package/build/with-api-maker.js.map +0 -1
- package/build/with-collection.js.map +0 -1
- package/build/with-current-user.js.map +0 -1
- package/build/with-model.js.map +0 -1
- package/build/with-router.js.map +0 -1
package/build/collection.js
CHANGED
|
@@ -1,85 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
45
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
46
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
47
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
48
|
-
function step(op) {
|
|
49
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
50
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
51
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
52
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
53
|
-
switch (op[0]) {
|
|
54
|
-
case 0: case 1: t = op; break;
|
|
55
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
56
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
57
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
58
|
-
default:
|
|
59
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
60
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
61
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
62
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
63
|
-
if (t[2]) _.ops.pop();
|
|
64
|
-
_.trys.pop(); continue;
|
|
65
|
-
}
|
|
66
|
-
op = body.call(thisArg, _);
|
|
67
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
68
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
72
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
73
|
-
};
|
|
74
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
75
|
-
var clone_deep_1 = __importDefault(require("clone-deep"));
|
|
76
|
-
var commands_pool_js_1 = __importDefault(require("./commands-pool.js"));
|
|
77
|
-
var diggerize_1 = require("diggerize");
|
|
78
|
-
var inflection = __importStar(require("inflection"));
|
|
79
|
-
var incorporator_1 = require("incorporator");
|
|
80
|
-
var model_class_require_js_1 = __importDefault(require("./model-class-require.js"));
|
|
81
|
-
var result_js_1 = __importDefault(require("./result.js"));
|
|
82
|
-
var uniqunize_1 = __importDefault(require("uniqunize"));
|
|
1
|
+
import cloneDeep from "clone-deep";
|
|
2
|
+
import CommandsPool from "./commands-pool.js";
|
|
3
|
+
import { digg } from "diggerize";
|
|
4
|
+
import * as inflection from "inflection";
|
|
5
|
+
import { incorporate } from "incorporator";
|
|
6
|
+
import Result from "./result.js";
|
|
7
|
+
import uniqunize from "uniqunize";
|
|
83
8
|
/**
|
|
84
9
|
* @template {typeof import("./base-model.js").default} MC
|
|
85
10
|
* @typedef {InstanceType<MC>} ModelOf
|
|
@@ -111,124 +36,86 @@ var uniqunize_1 = __importDefault(require("uniqunize"));
|
|
|
111
36
|
/**
|
|
112
37
|
* @template {typeof import("./base-model.js").default} MC
|
|
113
38
|
*/
|
|
114
|
-
|
|
39
|
+
export default class ApiMakerCollection {
|
|
40
|
+
static apiMakerType = "Collection";
|
|
115
41
|
/**
|
|
116
42
|
* @param {CollectionArgsType<MC>} args
|
|
117
43
|
* @param {QueryArgsType} queryArgs
|
|
118
44
|
*/
|
|
119
|
-
|
|
120
|
-
if (queryArgs === void 0) { queryArgs = {}; }
|
|
45
|
+
constructor(args, queryArgs = {}) {
|
|
121
46
|
if (!args.modelClass)
|
|
122
|
-
throw new Error(
|
|
47
|
+
throw new Error(`No modelClass given in ${Object.keys(args).join(", ")}`);
|
|
123
48
|
this.queryArgs = queryArgs;
|
|
124
49
|
this.args = args;
|
|
125
50
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
for (
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
for (
|
|
133
|
-
|
|
134
|
-
var newAbilityName = inflection.underscore(originalAbilityName_1);
|
|
51
|
+
abilities(originalAbilities) {
|
|
52
|
+
const newAbilities = {};
|
|
53
|
+
for (const originalAbilityName in originalAbilities) {
|
|
54
|
+
const newModelName = inflection.underscore(originalAbilityName);
|
|
55
|
+
const newValues = [];
|
|
56
|
+
const originalValues = originalAbilities[originalAbilityName];
|
|
57
|
+
for (const originalAbilityName of originalValues) {
|
|
58
|
+
const newAbilityName = inflection.underscore(originalAbilityName);
|
|
135
59
|
newValues.push(newAbilityName);
|
|
136
60
|
}
|
|
137
61
|
newAbilities[newModelName] = newValues;
|
|
138
62
|
}
|
|
139
63
|
return this._merge({ abilities: newAbilities });
|
|
140
|
-
}
|
|
64
|
+
}
|
|
141
65
|
/**
|
|
142
66
|
* @param {string} abilityName
|
|
143
67
|
* @returns {this}
|
|
144
68
|
*/
|
|
145
|
-
|
|
69
|
+
accessibleBy(abilityName) {
|
|
146
70
|
return this._merge({ accessibleBy: inflection.underscore(abilityName) });
|
|
147
|
-
}
|
|
71
|
+
}
|
|
148
72
|
/**
|
|
149
73
|
* @returns {Promise<number>}
|
|
150
74
|
*/
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
switch (_a.label) {
|
|
156
|
-
case 0: return [4 /*yield*/, this.clone()._merge({ count: true })._response()];
|
|
157
|
-
case 1:
|
|
158
|
-
response = _a.sent();
|
|
159
|
-
return [2 /*return*/, (0, diggerize_1.digg)(response, "count")];
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
};
|
|
75
|
+
async count() {
|
|
76
|
+
const response = await this.clone()._merge({ count: true })._response();
|
|
77
|
+
return digg(response, "count");
|
|
78
|
+
}
|
|
164
79
|
/**
|
|
165
80
|
* @returns {this}
|
|
166
81
|
*/
|
|
167
|
-
|
|
82
|
+
distinct() {
|
|
168
83
|
return this._merge({ distinct: true });
|
|
169
|
-
}
|
|
84
|
+
}
|
|
170
85
|
/**
|
|
171
86
|
* @param {function(import("./base-model.js").default) : void} callback
|
|
172
87
|
* @returns {Promise<void>}
|
|
173
88
|
*/
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
case 1:
|
|
181
|
-
array = _a.sent();
|
|
182
|
-
for (model in array) {
|
|
183
|
-
callback.call(model);
|
|
184
|
-
}
|
|
185
|
-
return [2 /*return*/];
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
};
|
|
89
|
+
async each(callback) {
|
|
90
|
+
const array = await this.toArray();
|
|
91
|
+
for (const model in array) {
|
|
92
|
+
callback.call(model);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
190
95
|
/**
|
|
191
96
|
* @param {...string} keys
|
|
192
97
|
* @returns {this}
|
|
193
98
|
*/
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
197
|
-
keys[_i] = arguments[_i];
|
|
198
|
-
}
|
|
199
|
-
for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) {
|
|
200
|
-
var key = keys_1[_a];
|
|
99
|
+
except(...keys) {
|
|
100
|
+
for (const key of keys) {
|
|
201
101
|
if (key == "page") {
|
|
202
102
|
delete this.queryArgs[key];
|
|
203
103
|
}
|
|
204
104
|
else {
|
|
205
|
-
throw new Error(
|
|
105
|
+
throw new Error(`Unhandled key: ${key}`);
|
|
206
106
|
}
|
|
207
107
|
}
|
|
208
108
|
return this;
|
|
209
|
-
}
|
|
109
|
+
}
|
|
210
110
|
/**
|
|
211
111
|
* @returns {Promise<ModelOf<MC>>}
|
|
212
112
|
*/
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
case 1:
|
|
220
|
-
models = _a.sent();
|
|
221
|
-
return [2 /*return*/, models[0]];
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
});
|
|
225
|
-
};
|
|
226
|
-
ApiMakerCollection.prototype.groupBy = function () {
|
|
227
|
-
var arrayOfTablesAndColumns = [];
|
|
228
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
229
|
-
arrayOfTablesAndColumns[_i] = arguments[_i];
|
|
230
|
-
}
|
|
231
|
-
var arrayOfTablesAndColumnsWithLowercaseColumns = arrayOfTablesAndColumns.map(function (tableAndColumn) {
|
|
113
|
+
async first() {
|
|
114
|
+
const models = await this.toArray();
|
|
115
|
+
return models[0];
|
|
116
|
+
}
|
|
117
|
+
groupBy(...arrayOfTablesAndColumns) {
|
|
118
|
+
const arrayOfTablesAndColumnsWithLowercaseColumns = arrayOfTablesAndColumns.map((tableAndColumn) => {
|
|
232
119
|
if (Array.isArray(tableAndColumn)) {
|
|
233
120
|
return [tableAndColumn[0], tableAndColumn[1].toLowerCase()];
|
|
234
121
|
}
|
|
@@ -236,34 +123,24 @@ var ApiMakerCollection = /** @class */ (function () {
|
|
|
236
123
|
return tableAndColumn.toLowerCase();
|
|
237
124
|
}
|
|
238
125
|
});
|
|
239
|
-
|
|
240
|
-
|
|
126
|
+
const currentGroupBy = this.queryArgs.groupBy || [];
|
|
127
|
+
const newGroupBy = currentGroupBy.concat(arrayOfTablesAndColumnsWithLowercaseColumns);
|
|
241
128
|
return this._merge({
|
|
242
129
|
groupBy: newGroupBy
|
|
243
130
|
});
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
return [4 /*yield*/, this.toArray()];
|
|
253
|
-
case 1:
|
|
254
|
-
models = _a.sent();
|
|
255
|
-
this.set(models);
|
|
256
|
-
_a.label = 2;
|
|
257
|
-
case 2: return [2 /*return*/, this.loaded()];
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
};
|
|
131
|
+
}
|
|
132
|
+
async ensureLoaded() {
|
|
133
|
+
if (!this.isLoaded()) {
|
|
134
|
+
const models = await this.toArray();
|
|
135
|
+
this.set(models);
|
|
136
|
+
}
|
|
137
|
+
return this.loaded();
|
|
138
|
+
}
|
|
262
139
|
/**
|
|
263
140
|
* @returns {boolean}
|
|
264
141
|
*/
|
|
265
|
-
|
|
266
|
-
|
|
142
|
+
isLoaded() {
|
|
143
|
+
const { model, reflectionName } = this.args;
|
|
267
144
|
if (reflectionName in model.relationshipsCache) {
|
|
268
145
|
return true;
|
|
269
146
|
}
|
|
@@ -271,28 +148,28 @@ var ApiMakerCollection = /** @class */ (function () {
|
|
|
271
148
|
return true;
|
|
272
149
|
}
|
|
273
150
|
return false;
|
|
274
|
-
}
|
|
151
|
+
}
|
|
275
152
|
/**
|
|
276
153
|
* @param {number} amount
|
|
277
154
|
* @returns {this}
|
|
278
155
|
*/
|
|
279
|
-
|
|
156
|
+
limit(amount) {
|
|
280
157
|
return this._merge({ limit: amount });
|
|
281
|
-
}
|
|
158
|
+
}
|
|
282
159
|
/**
|
|
283
160
|
* @returns {Array<ModelOf<MC>>}
|
|
284
161
|
*/
|
|
285
|
-
|
|
162
|
+
preloaded() {
|
|
286
163
|
if (!(this.args.reflectionName in this.args.model.relationshipsCache)) {
|
|
287
|
-
throw new Error(
|
|
164
|
+
throw new Error(`${this.args.reflectionName} hasnt been loaded yet`);
|
|
288
165
|
}
|
|
289
166
|
return this.args.model.relationshipsCache[this.args.reflectionName];
|
|
290
|
-
}
|
|
167
|
+
}
|
|
291
168
|
/**
|
|
292
169
|
* @returns {ModelOf<MC> | Array<ModelOf<MC>>}
|
|
293
170
|
*/
|
|
294
|
-
|
|
295
|
-
|
|
171
|
+
loaded() {
|
|
172
|
+
const { model, reflectionName } = this.args;
|
|
296
173
|
if (reflectionName in model.relationships) {
|
|
297
174
|
return model.relationships[reflectionName];
|
|
298
175
|
}
|
|
@@ -300,84 +177,84 @@ var ApiMakerCollection = /** @class */ (function () {
|
|
|
300
177
|
return model.relationshipsCache[reflectionName];
|
|
301
178
|
}
|
|
302
179
|
else if (model.isNewRecord()) {
|
|
303
|
-
|
|
180
|
+
const reflectionNameUnderscore = inflection.underscore(reflectionName);
|
|
304
181
|
// Initialize as empty and try again to return the empty result
|
|
305
182
|
this.set([]);
|
|
306
|
-
return
|
|
183
|
+
return digg(model.relationships, reflectionNameUnderscore);
|
|
307
184
|
}
|
|
308
185
|
else {
|
|
309
|
-
|
|
310
|
-
throw new Error(
|
|
186
|
+
const relationshipsLoaded = uniqunize(Object.keys(model.relationships).concat(Object.keys(model.relationshipsCache)));
|
|
187
|
+
throw new Error(`${reflectionName} hasnt been loaded yet on ${model.modelClassData().name}. Loaded was: ${relationshipsLoaded.join(", ")}`);
|
|
311
188
|
}
|
|
312
|
-
}
|
|
189
|
+
}
|
|
313
190
|
/** @returns {Array<ModelOf<MC>>} */
|
|
314
|
-
|
|
315
|
-
|
|
191
|
+
loadedArray() {
|
|
192
|
+
const loaded = this.loaded();
|
|
316
193
|
if (Array.isArray(loaded)) {
|
|
317
194
|
return loaded;
|
|
318
195
|
}
|
|
319
196
|
else {
|
|
320
197
|
throw new Error("'loaded' wasn't an array");
|
|
321
198
|
}
|
|
322
|
-
}
|
|
199
|
+
}
|
|
323
200
|
// Replaces the relationships with the given new collection.
|
|
324
|
-
|
|
201
|
+
set(newCollection) {
|
|
325
202
|
this.args.model.relationships[this.args.reflectionName] = newCollection;
|
|
326
|
-
}
|
|
203
|
+
}
|
|
327
204
|
// Pushes another model onto the given collection.
|
|
328
|
-
|
|
329
|
-
|
|
205
|
+
push(newModel) {
|
|
206
|
+
const { model, reflectionName } = this.args;
|
|
330
207
|
if (!(reflectionName in model.relationships)) {
|
|
331
208
|
model.relationships[reflectionName] = [];
|
|
332
209
|
}
|
|
333
210
|
if (!model.relationships[reflectionName].includes(newModel)) {
|
|
334
211
|
model.relationships[reflectionName].push(newModel);
|
|
335
212
|
}
|
|
336
|
-
}
|
|
213
|
+
}
|
|
337
214
|
// Array shortcuts
|
|
338
215
|
/**
|
|
339
216
|
* @param {function(import("./base-model.js").default): boolean} callback
|
|
340
217
|
* @returns {import("./base-model.js").default}
|
|
341
218
|
*/
|
|
342
|
-
|
|
219
|
+
find(callback) { return this.loadedArray().find(callback); }
|
|
343
220
|
/**
|
|
344
221
|
* @param {function(import("./base-model.js").default): void} callback
|
|
345
222
|
* @returns {void}
|
|
346
223
|
*/
|
|
347
|
-
|
|
224
|
+
forEach(callback) { return this.loadedArray().forEach(callback); }
|
|
348
225
|
/**
|
|
349
226
|
* @param {function(import("./base-model.js").default): void} callback
|
|
350
227
|
* @returns {any[]}
|
|
351
228
|
*/
|
|
352
|
-
|
|
229
|
+
map(callback) { return this.loadedArray().map(callback); }
|
|
353
230
|
/**
|
|
354
231
|
* @param {string[]} preloadValue
|
|
355
232
|
* @returns {this}
|
|
356
233
|
*/
|
|
357
|
-
|
|
234
|
+
preload(preloadValue) {
|
|
358
235
|
return this._merge({ preload: preloadValue });
|
|
359
|
-
}
|
|
236
|
+
}
|
|
360
237
|
/**
|
|
361
238
|
* @param {number} page
|
|
362
239
|
* @returns {this}
|
|
363
240
|
*/
|
|
364
|
-
|
|
241
|
+
page(page) {
|
|
365
242
|
if (!page)
|
|
366
243
|
page = 1;
|
|
367
|
-
return this._merge({ page
|
|
368
|
-
}
|
|
244
|
+
return this._merge({ page });
|
|
245
|
+
}
|
|
369
246
|
/**
|
|
370
247
|
* @param {string} pageKey
|
|
371
248
|
* @returns {this}
|
|
372
249
|
*/
|
|
373
|
-
|
|
374
|
-
return this._merge({ pageKey
|
|
375
|
-
}
|
|
250
|
+
pageKey(pageKey) {
|
|
251
|
+
return this._merge({ pageKey });
|
|
252
|
+
}
|
|
376
253
|
/**
|
|
377
254
|
* @returns {boolean}
|
|
378
255
|
*/
|
|
379
|
-
|
|
380
|
-
|
|
256
|
+
isFiltered() {
|
|
257
|
+
const { queryArgs } = this;
|
|
381
258
|
if (queryArgs.accessibleBy ||
|
|
382
259
|
queryArgs.count ||
|
|
383
260
|
queryArgs.limit ||
|
|
@@ -389,14 +266,14 @@ var ApiMakerCollection = /** @class */ (function () {
|
|
|
389
266
|
return true;
|
|
390
267
|
}
|
|
391
268
|
return false;
|
|
392
|
-
}
|
|
269
|
+
}
|
|
393
270
|
/**
|
|
394
271
|
* @returns {Record<string, any>}
|
|
395
272
|
*/
|
|
396
|
-
|
|
397
|
-
|
|
273
|
+
params() {
|
|
274
|
+
let params = {};
|
|
398
275
|
if (this.queryArgs.params)
|
|
399
|
-
params =
|
|
276
|
+
params = incorporate(params, this.queryArgs.params);
|
|
400
277
|
if (this.queryArgs.abilities)
|
|
401
278
|
params.abilities = this.queryArgs.abilities;
|
|
402
279
|
if (this.queryArgs.accessibleBy)
|
|
@@ -424,173 +301,148 @@ var ApiMakerCollection = /** @class */ (function () {
|
|
|
424
301
|
if (this.queryArgs.selectColumns)
|
|
425
302
|
params.select_columns = this.queryArgs.selectColumns;
|
|
426
303
|
return params;
|
|
427
|
-
}
|
|
304
|
+
}
|
|
428
305
|
/**
|
|
429
306
|
* @param {number} per
|
|
430
307
|
* @returns {this}
|
|
431
308
|
*/
|
|
432
|
-
|
|
433
|
-
return this._merge({ per
|
|
434
|
-
}
|
|
309
|
+
per(per) {
|
|
310
|
+
return this._merge({ per });
|
|
311
|
+
}
|
|
435
312
|
/**
|
|
436
313
|
* @param {string} perKey
|
|
437
314
|
* @returns {this}
|
|
438
315
|
*/
|
|
439
|
-
|
|
440
|
-
return this._merge({ perKey
|
|
441
|
-
}
|
|
316
|
+
perKey(perKey) {
|
|
317
|
+
return this._merge({ perKey });
|
|
318
|
+
}
|
|
442
319
|
/**
|
|
443
320
|
* @param {Record<string, any>} params
|
|
444
321
|
* @returns {this}
|
|
445
322
|
*/
|
|
446
|
-
|
|
323
|
+
ransack(params) {
|
|
447
324
|
if (params)
|
|
448
325
|
this._merge({ ransack: params });
|
|
449
326
|
return this;
|
|
450
|
-
}
|
|
327
|
+
}
|
|
451
328
|
/**
|
|
452
329
|
* @returns {Promise<Result>}
|
|
453
330
|
*/
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
response = _a.sent();
|
|
462
|
-
models = (0, diggerize_1.digg)(response, "collection");
|
|
463
|
-
this._addQueryToModels(models);
|
|
464
|
-
result = new result_js_1.default({ collection: this, models: models, response: response });
|
|
465
|
-
return [2 /*return*/, result];
|
|
466
|
-
}
|
|
467
|
-
});
|
|
468
|
-
});
|
|
469
|
-
};
|
|
331
|
+
async result() {
|
|
332
|
+
const response = await this._response();
|
|
333
|
+
const models = digg(response, "collection");
|
|
334
|
+
this._addQueryToModels(models);
|
|
335
|
+
const result = new Result({ collection: this, models, response });
|
|
336
|
+
return result;
|
|
337
|
+
}
|
|
470
338
|
/**
|
|
471
339
|
* @param {Record<string, any>} params
|
|
472
340
|
* @returns {this}
|
|
473
341
|
*/
|
|
474
|
-
|
|
342
|
+
search(params) {
|
|
475
343
|
if (params)
|
|
476
344
|
this._merge({ search: params });
|
|
477
345
|
return this;
|
|
478
|
-
}
|
|
346
|
+
}
|
|
479
347
|
/**
|
|
480
348
|
* @param {string} searchKey
|
|
481
349
|
* @returns {this}
|
|
482
350
|
*/
|
|
483
|
-
|
|
484
|
-
return this._merge({ searchKey
|
|
485
|
-
}
|
|
351
|
+
searchKey(searchKey) {
|
|
352
|
+
return this._merge({ searchKey });
|
|
353
|
+
}
|
|
486
354
|
/**
|
|
487
355
|
* @param {Record<string, string[]>} originalSelect
|
|
488
356
|
* @returns {this}
|
|
489
357
|
*/
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
for (
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
for (
|
|
497
|
-
|
|
498
|
-
var newAttributeName = inflection.underscore(originalAttributeName);
|
|
358
|
+
select(originalSelect) {
|
|
359
|
+
const newSelect = {};
|
|
360
|
+
for (const originalModelName in originalSelect) {
|
|
361
|
+
const newModelName = inflection.underscore(originalModelName);
|
|
362
|
+
const newValues = [];
|
|
363
|
+
const originalValues = originalSelect[originalModelName];
|
|
364
|
+
for (const originalAttributeName of originalValues) {
|
|
365
|
+
const newAttributeName = inflection.underscore(originalAttributeName);
|
|
499
366
|
newValues.push(newAttributeName);
|
|
500
367
|
}
|
|
501
368
|
newSelect[newModelName] = newValues;
|
|
502
369
|
}
|
|
503
370
|
return this._merge({ select: newSelect });
|
|
504
|
-
}
|
|
371
|
+
}
|
|
505
372
|
/**
|
|
506
373
|
* @param {Record<string, string[]>} originalSelect
|
|
507
374
|
* @returns {this}
|
|
508
375
|
*/
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
for (
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
for (
|
|
516
|
-
|
|
517
|
-
var newAttributeName = inflection.underscore(originalAttributeName);
|
|
376
|
+
selectColumns(originalSelect) {
|
|
377
|
+
const newSelect = {};
|
|
378
|
+
for (const originalModelName in originalSelect) {
|
|
379
|
+
const newModelName = inflection.underscore(inflection.underscore(originalModelName));
|
|
380
|
+
const newValues = [];
|
|
381
|
+
const originalValues = originalSelect[originalModelName];
|
|
382
|
+
for (const originalAttributeName of originalValues) {
|
|
383
|
+
const newAttributeName = inflection.underscore(originalAttributeName);
|
|
518
384
|
newValues.push(newAttributeName);
|
|
519
385
|
}
|
|
520
386
|
newSelect[newModelName] = newValues;
|
|
521
387
|
}
|
|
522
388
|
return this._merge({ selectColumns: newSelect });
|
|
523
|
-
}
|
|
389
|
+
}
|
|
524
390
|
/**
|
|
525
391
|
* @param {string} sortBy
|
|
526
392
|
* @returns {this}
|
|
527
393
|
*/
|
|
528
|
-
|
|
394
|
+
sort(sortBy) {
|
|
529
395
|
return this._merge({ ransack: { s: sortBy } });
|
|
530
|
-
}
|
|
396
|
+
}
|
|
531
397
|
/**
|
|
532
398
|
* @returns {Promise<Array<ModelOf<MC>>>}
|
|
533
399
|
*/
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
case 1:
|
|
541
|
-
response = _a.sent();
|
|
542
|
-
models = (0, diggerize_1.digg)(response, "collection");
|
|
543
|
-
this._addQueryToModels(models);
|
|
544
|
-
return [2 /*return*/, models];
|
|
545
|
-
}
|
|
546
|
-
});
|
|
547
|
-
});
|
|
548
|
-
};
|
|
400
|
+
async toArray() {
|
|
401
|
+
const response = await this._response();
|
|
402
|
+
const models = digg(response, "collection");
|
|
403
|
+
this._addQueryToModels(models);
|
|
404
|
+
return models;
|
|
405
|
+
}
|
|
549
406
|
/**
|
|
550
407
|
* @returns {MC}
|
|
551
408
|
*/
|
|
552
|
-
|
|
409
|
+
modelClass() {
|
|
553
410
|
if (!this.args.modelClass) {
|
|
554
411
|
throw new Error("No model class given in args");
|
|
555
412
|
}
|
|
556
413
|
return this.args.modelClass;
|
|
557
|
-
}
|
|
414
|
+
}
|
|
558
415
|
/**
|
|
559
416
|
* @returns {ApiMakerCollection}
|
|
560
417
|
*/
|
|
561
|
-
|
|
562
|
-
|
|
418
|
+
clone() {
|
|
419
|
+
const clonedQueryArgs = cloneDeep(this.queryArgs);
|
|
563
420
|
return new ApiMakerCollection(this.args, clonedQueryArgs);
|
|
564
|
-
}
|
|
421
|
+
}
|
|
565
422
|
// This is needed when reloading a version of the model with the same selected attributes and preloads
|
|
566
|
-
|
|
567
|
-
for (
|
|
568
|
-
var model = models_1[_i];
|
|
423
|
+
_addQueryToModels(models) {
|
|
424
|
+
for (const model of models) {
|
|
569
425
|
model.collection = this;
|
|
570
426
|
}
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
|
|
427
|
+
}
|
|
428
|
+
_merge(newQueryArgs) {
|
|
429
|
+
incorporate(this.queryArgs, newQueryArgs);
|
|
574
430
|
return this;
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
var _a;
|
|
431
|
+
}
|
|
432
|
+
_response() {
|
|
578
433
|
if (!this.args)
|
|
579
434
|
throw new Error("No args?");
|
|
580
435
|
if (!this.args.modelClass)
|
|
581
436
|
throw new Error("No modelClass in args");
|
|
582
437
|
if (!this.args.modelClass.modelClassData)
|
|
583
|
-
throw new Error(
|
|
584
|
-
|
|
585
|
-
return
|
|
438
|
+
throw new Error(`No modelClassData on modelClass ${this.args.modelClass?.name} (${typeof this.args.modelClass})`);
|
|
439
|
+
const modelClassData = this.args.modelClass.modelClassData();
|
|
440
|
+
return CommandsPool.addCommand({
|
|
586
441
|
args: this.params(),
|
|
587
|
-
command:
|
|
442
|
+
command: `${modelClassData.collectionName}-index`,
|
|
588
443
|
collectionName: modelClassData.collectionName,
|
|
589
444
|
type: "index"
|
|
590
445
|
}, {});
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
return ApiMakerCollection;
|
|
594
|
-
}());
|
|
595
|
-
exports.default = ApiMakerCollection;
|
|
596
|
-
//# sourceMappingURL=collection.js.map
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY29sbGVjdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ3hDLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUE7QUFFakM7OztHQUdHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sa0JBQWtCO0lBQ3JDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0lBRWxDOzs7T0FHRztJQUNILFlBQVksSUFBSSxFQUFFLFNBQVMsR0FBRyxFQUFFO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUUvRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtJQUNsQixDQUFDO0lBRUQsU0FBUyxDQUFDLGlCQUFpQjtRQUN6QixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUE7UUFFdkIsS0FBSyxNQUFNLG1CQUFtQixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDcEQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxD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SSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07WUFBRSxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzlFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTO1lBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQTtRQUN6RSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWTtZQUFFLE1BQU0sQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQUUsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQTtRQUM3RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUE7UUFDdEUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFBRSxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFBO1FBQ3BFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO1lBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQTtRQUM3RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztZQUFFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUE7UUFDN0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFBO1FBQ25FLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1lBQUUsTUFBTSxDQUFD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QUMsVUFBVSxHQUFHLENBQUMsQ0FBQTtRQUUzSixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUU1RCxPQUFPLFlBQVksQ0FBQyxVQUFVLENBQzVCO1lBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbkIsT0FBTyxFQUFFLEdBQUcsY0FBYyxDQUFDLGNBQWMsUUFBUTtZQUNqRCxjQUFjLEVBQUUsY0FBYyxDQUFDLGNBQWM7WUFDN0MsSUFBSSxFQUFFLE9BQU87U0FDZCxFQUNELEVBQUUsQ0FDSCxDQUFBO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbG9uZURlZXAgZnJvbSBcImNsb25lLWRlZXBcIlxuaW1wb3J0IENvbW1hbmRzUG9vbCBmcm9tIFwiLi9jb21tYW5kcy1wb29sLmpzXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0IFJlc3VsdCBmcm9tIFwiLi9yZXN1bHQuanNcIlxuaW1wb3J0IHVuaXF1bml6ZSBmcm9tIFwidW5pcXVuaXplXCJcblxuLyoqXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH0gTUNcbiAqIEB0eXBlZGVmIHtJbnN0YW5jZVR5cGU8TUM+fSBNb2RlbE9mXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH0gTUNcbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbGxlY3Rpb25BcmdzVHlwZVxuICogQHByb3BlcnR5IHtNb2RlbE9mPE1DPn0gW21vZGVsXVxuICogQHByb3BlcnR5IHtNQ30gbW9kZWxDbGFzc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZWZsZWN0aW9uTmFtZV1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFF1ZXJ5QXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSBbYWJpbGl0aWVzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthY2Nlc3NpYmxlQnldXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2NvdW50XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkaXN0aW5jdF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtncm91cEJ5XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtsaW1pdF1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGFnZV1cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3BhcmFtc11cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGVyXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3ByZWxvYWRdXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IFtyYW5zYWNrXVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbc2VhcmNoXVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IFtzZWxlY3RdXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gW3NlbGVjdENvbHVtbnNdXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH0gTUNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJDb2xsZWN0aW9uIHtcbiAgc3RhdGljIGFwaU1ha2VyVHlwZSA9IFwiQ29sbGVjdGlvblwiXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29sbGVjdGlvbkFyZ3NUeXBlPE1DPn0gYXJnc1xuICAgKiBAcGFyYW0ge1F1ZXJ5QXJnc1R5cGV9IHF1ZXJ5QXJnc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYXJncywgcXVlcnlBcmdzID0ge30pIHtcbiAgICBpZiAoIWFyZ3MubW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGBObyBtb2RlbENsYXNzIGdpdmVuIGluICR7T2JqZWN0LmtleXMoYXJncykuam9pbihcIiwgXCIpfWApXG5cbiAgICB0aGlzLnF1ZXJ5QXJncyA9IHF1ZXJ5QXJnc1xuICAgIHRoaXMuYXJncyA9IGFyZ3NcbiAgfVxuXG4gIGFiaWxpdGllcyhvcmlnaW5hbEFiaWxpdGllcykge1xuICAgIGNvbnN0IG5ld0FiaWxpdGllcyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG9yaWdpbmFsQWJpbGl0eU5hbWUgaW4gb3JpZ2luYWxBYmlsaXRpZXMpIHtcbiAgICAgIGNvbnN0IG5ld01vZGVsTmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbEFiaWxpdHlOYW1lKVxuICAgICAgY29uc3QgbmV3VmFsdWVzID0gW11cbiAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gb3JpZ2luYWxBYmlsaXRpZXNbb3JpZ2luYWxBYmlsaXR5TmFtZV1cblxuICAgICAgZm9yIChjb25zdCBvcmlnaW5hbEFiaWxpdHlOYW1lIG9mIG9yaWdpbmFsVmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IG5ld0FiaWxpdHlOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsQWJpbGl0eU5hbWUpXG4gICAgICAgIG5ld1ZhbHVlcy5wdXNoKG5ld0FiaWxpdHlOYW1lKVxuICAgICAgfVxuXG4gICAgICBuZXdBYmlsaXRpZXNbbmV3TW9kZWxOYW1lXSA9IG5ld1ZhbHVlc1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7YWJpbGl0aWVzOiBuZXdBYmlsaXRpZXN9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhYmlsaXR5TmFtZVxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIGFjY2Vzc2libGVCeShhYmlsaXR5TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7YWNjZXNzaWJsZUJ5OiBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYWJpbGl0eU5hbWUpfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fVxuICAgKi9cbiAgYXN5bmMgY291bnQoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsb25lKCkuX21lcmdlKHtjb3VudDogdHJ1ZX0pLl9yZXNwb25zZSgpXG5cbiAgICByZXR1cm4gZGlnZyhyZXNwb25zZSwgXCJjb3VudFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgZGlzdGluY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtkaXN0aW5jdDogdHJ1ZX0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbihpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCkgOiB2b2lkfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGVhY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBhcnJheSA9IGF3YWl0IHRoaXMudG9BcnJheSgpXG5cbiAgICBmb3IgKGNvbnN0IG1vZGVsIGluIGFycmF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG1vZGVsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ30ga2V5c1xuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIGV4Y2VwdCguLi5rZXlzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKGtleSA9PSBcInBhZ2VcIikge1xuICAgICAgICBkZWxldGUgdGhpcy5xdWVyeUFyZ3Nba2V5XVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQga2V5OiAke2tleX1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8TW9kZWxPZjxNQz4+fVxuICAgKi9cbiAgYXN5bmMgZmlyc3QoKSB7XG4gICAgY29uc3QgbW9kZWxzID0gYXdhaXQgdGhpcy50b0FycmF5KClcbiAgICByZXR1cm4gbW9kZWxzWzBdXG4gIH1cblxuICBncm91cEJ5KC4uLmFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zKSB7XG4gICAgY29uc3QgYXJyYXlPZlRhYmxlc0FuZENvbHVtbnNXaXRoTG93ZXJjYXNlQ29sdW1ucyA9IGFycmF5T2ZUYWJsZXNBbmRDb2x1bW5zLm1hcCgodGFibGVBbmRDb2x1bW4pID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhYmxlQW5kQ29sdW1uKSkge1xuICAgICAgICByZXR1cm4gW3RhYmxlQW5kQ29sdW1uWzBdLCB0YWJsZUFuZENvbHVtblsxXS50b0xvd2VyQ2FzZSgpXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRhYmxlQW5kQ29sdW1uLnRvTG93ZXJDYXNlKClcbiAgICAgIH1cbiAgICB9KVxuICAgIGNvbnN0IGN1cnJlbnRHcm91cEJ5ID0gdGhpcy5xdWVyeUFyZ3MuZ3JvdXBCeSB8fCBbXVxuICAgIGNvbnN0IG5ld0dyb3VwQnkgPSBjdXJyZW50R3JvdXBCeS5jb25jYXQoYXJyYXlPZlRhYmxlc0FuZENvbHVtbnNXaXRoTG93ZXJjYXNlQ29sdW1ucylcblxuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7XG4gICAgICBncm91cEJ5OiBuZXdHcm91cEJ5XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGVuc3VyZUxvYWRlZCgpIHtcbiAgICBpZiAoIXRoaXMuaXNMb2FkZWQoKSkge1xuICAgICAgY29uc3QgbW9kZWxzID0gYXdhaXQgdGhpcy50b0FycmF5KClcblxuICAgICAgdGhpcy5zZXQobW9kZWxzKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxvYWRlZCgpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0xvYWRlZCgpIHtcbiAgICBjb25zdCB7bW9kZWwsIHJlZmxlY3Rpb25OYW1lfSA9IHRoaXMuYXJnc1xuXG4gICAgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudFxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIGxpbWl0KGFtb3VudCkge1xuICAgIHJldHVybiB0aGlzLl9tZXJnZSh7bGltaXQ6IGFtb3VudH0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge0FycmF5PE1vZGVsT2Y8TUM+Pn1cbiAgICovXG4gIHByZWxvYWRlZCgpIHtcbiAgICBpZiAoISh0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWUgaW4gdGhpcy5hcmdzLm1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWV9IGhhc250IGJlZW4gbG9hZGVkIHlldGApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXJncy5tb2RlbC5yZWxhdGlvbnNoaXBzQ2FjaGVbdGhpcy5hcmdzLnJlZmxlY3Rpb25OYW1lXVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtNb2RlbE9mPE1DPiB8IEFycmF5PE1vZGVsT2Y8TUM+Pn1cbiAgICovXG4gIGxvYWRlZCgpIHtcbiAgICBjb25zdCB7bW9kZWwsIHJlZmxlY3Rpb25OYW1lfSA9IHRoaXMuYXJnc1xuXG4gICAgaWYgKHJlZmxlY3Rpb25OYW1lIGluIG1vZGVsLnJlbGF0aW9uc2hpcHMpIHtcbiAgICAgIHJldHVybiBtb2RlbC5yZWxhdGlvbnNoaXBzW3JlZmxlY3Rpb25OYW1lXVxuICAgIH0gZWxzZSBpZiAocmVmbGVjdGlvbk5hbWUgaW4gbW9kZWwucmVsYXRpb25zaGlwc0NhY2hlKSB7XG4gICAgICByZXR1cm4gbW9kZWwucmVsYXRpb25zaGlwc0NhY2hlW3JlZmxlY3Rpb25OYW1lXVxuICAgIH0gZWxzZSBpZiAobW9kZWwuaXNOZXdSZWNvcmQoKSkge1xuICAgICAgY29uc3QgcmVmbGVjdGlvbk5hbWVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHJlZmxlY3Rpb25OYW1lKVxuXG4gICAgICAvLyBJbml0aWFsaXplIGFzIGVtcHR5IGFuZCB0cnkgYWdhaW4gdG8gcmV0dXJuIHRoZSBlbXB0eSByZXN1bHRcbiAgICAgIHRoaXMuc2V0KFtdKVxuXG4gICAgICByZXR1cm4gZGlnZyhtb2RlbC5yZWxhdGlvbnNoaXBzLCByZWZsZWN0aW9uTmFtZVVuZGVyc2NvcmUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHNMb2FkZWQgPSB1bmlxdW5pemUoT2JqZWN0LmtleXMobW9kZWwucmVsYXRpb25zaGlwcykuY29uY2F0KE9iamVjdC5rZXlzKG1vZGVsLnJlbGF0aW9uc2hpcHNDYWNoZSkpKVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVmbGVjdGlvbk5hbWV9IGhhc250IGJlZW4gbG9hZGVkIHlldCBvbiAke21vZGVsLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX0uIExvYWRlZCB3YXM6ICR7cmVsYXRpb25zaGlwc0xvYWRlZC5qb2luKFwiLCBcIil9YClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge0FycmF5PE1vZGVsT2Y8TUM+Pn0gKi9cbiAgbG9hZGVkQXJyYXkoKSB7XG4gICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQoKVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobG9hZGVkKSkge1xuICAgICAgcmV0dXJuIGxvYWRlZFxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCInbG9hZGVkJyB3YXNuJ3QgYW4gYXJyYXlcIilcbiAgICB9XG4gIH1cblxuICAvLyBSZXBsYWNlcyB0aGUgcmVsYXRpb25zaGlwcyB3aXRoIHRoZSBnaXZlbiBuZXcgY29sbGVjdGlvbi5cbiAgc2V0KG5ld0NvbGxlY3Rpb24pIHtcbiAgICB0aGlzLmFyZ3MubW9kZWwucmVsYXRpb25zaGlwc1t0aGlzLmFyZ3MucmVmbGVjdGlvbk5hbWVdID0gbmV3Q29sbGVjdGlvblxuICB9XG5cbiAgLy8gUHVzaGVzIGFub3RoZXIgbW9kZWwgb250byB0aGUgZ2l2ZW4gY29sbGVjdGlvbi5cbiAgcHVzaChuZXdNb2RlbCkge1xuICAgIGNvbnN0IHttb2RlbCwgcmVmbGVjdGlvbk5hbWV9ID0gdGhpcy5hcmdzXG5cbiAgICBpZiAoIShyZWZsZWN0aW9uTmFtZSBpbiBtb2RlbC5yZWxhdGlvbnNoaXBzKSkge1xuICAgICAgbW9kZWwucmVsYXRpb25zaGlwc1tyZWZsZWN0aW9uTmFtZV0gPSBbXVxuICAgIH1cblxuICAgIGlmICghbW9kZWwucmVsYXRpb25zaGlwc1tyZWZsZWN0aW9uTmFtZV0uaW5jbHVkZXMobmV3TW9kZWwpKSB7XG4gICAgICBtb2RlbC5yZWxhdGlvbnNoaXBzW3JlZmxlY3Rpb25OYW1lXS5wdXNoKG5ld01vZGVsKVxuICAgIH1cbiAgfVxuXG4gIC8vIEFycmF5IHNob3J0Y3V0c1xuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbihpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCk6IGJvb2xlYW59IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH1cbiAgICovXG4gIGZpbmQoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMubG9hZGVkQXJyYXkoKS5maW5kKGNhbGxiYWNrKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oaW1wb3J0KFwiLi9iYXNlLW1vZGVsLmpzXCIpLmRlZmF1bHQpOiB2b2lkfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMubG9hZGVkQXJyYXkoKS5mb3JFYWNoKGNhbGxiYWNrKSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oaW1wb3J0KFwiLi9iYXNlLW1vZGVsLmpzXCIpLmRlZmF1bHQpOiB2b2lkfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7YW55W119XG4gICAqL1xuICBtYXAoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMubG9hZGVkQXJyYXkoKS5tYXAoY2FsbGJhY2spIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcHJlbG9hZFZhbHVlXG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgcHJlbG9hZChwcmVsb2FkVmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3ByZWxvYWQ6IHByZWxvYWRWYWx1ZX0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBwYWdlKHBhZ2UpIHtcbiAgICBpZiAoIXBhZ2UpIHBhZ2UgPSAxXG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3BhZ2V9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYWdlS2V5XG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgcGFnZUtleShwYWdlS2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtwYWdlS2V5fSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRmlsdGVyZWQoKSB7XG4gICAgY29uc3Qge3F1ZXJ5QXJnc30gPSB0aGlzXG5cbiAgICBpZiAoXG4gICAgICBxdWVyeUFyZ3MuYWNjZXNzaWJsZUJ5IHx8XG4gICAgICBxdWVyeUFyZ3MuY291bnQgfHxcbiAgICAgIHF1ZXJ5QXJncy5saW1pdCB8fFxuICAgICAgcXVlcnlBcmdzLnBhZ2UgfHxcbiAgICAgIHF1ZXJ5QXJncy5wYXJhbXMgfHxcbiAgICAgIHF1ZXJ5QXJncy5wZXIgfHxcbiAgICAgIHF1ZXJ5QXJncy5yYW5zYWNrIHx8XG4gICAgICBxdWVyeUFyZ3Muc2VhcmNoXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fVxuICAgKi9cbiAgcGFyYW1zKCkge1xuICAgIGxldCBwYXJhbXMgPSB7fVxuXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnBhcmFtcykgcGFyYW1zID0gaW5jb3Jwb3JhdGUocGFyYW1zLCB0aGlzLnF1ZXJ5QXJncy5wYXJhbXMpXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmFiaWxpdGllcykgcGFyYW1zLmFiaWxpdGllcyA9IHRoaXMucXVlcnlBcmdzLmFiaWxpdGllc1xuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5hY2Nlc3NpYmxlQnkpIHBhcmFtcy5hY2Nlc3NpYmxlX2J5ID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHRoaXMucXVlcnlBcmdzLmFjY2Vzc2libGVCeSlcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MuY291bnQpIHBhcmFtcy5jb3VudCA9IHRoaXMucXVlcnlBcmdzLmNvdW50XG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLmRpc3RpbmN0KSBwYXJhbXMuZGlzdGluY3QgPSB0aGlzLnF1ZXJ5QXJncy5kaXN0aW5jdFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5ncm91cEJ5KSBwYXJhbXMuZ3JvdXBfYnkgPSB0aGlzLnF1ZXJ5QXJncy5ncm91cEJ5XG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnJhbnNhY2spIHBhcmFtcy5xID0gdGhpcy5xdWVyeUFyZ3MucmFuc2Fja1xuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5saW1pdCkgcGFyYW1zLmxpbWl0ID0gdGhpcy5xdWVyeUFyZ3MubGltaXRcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3MucHJlbG9hZCkgcGFyYW1zLnByZWxvYWQgPSB0aGlzLnF1ZXJ5QXJncy5wcmVsb2FkXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnBhZ2UpIHBhcmFtcy5wYWdlID0gdGhpcy5xdWVyeUFyZ3MucGFnZVxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5wZXIpIHBhcmFtcy5wZXIgPSB0aGlzLnF1ZXJ5QXJncy5wZXJcbiAgICBpZiAodGhpcy5xdWVyeUFyZ3Muc2VhcmNoKSBwYXJhbXMuc2VhcmNoID0gdGhpcy5xdWVyeUFyZ3Muc2VhcmNoXG4gICAgaWYgKHRoaXMucXVlcnlBcmdzLnNlbGVjdCkgcGFyYW1zLnNlbGVjdCA9IHRoaXMucXVlcnlBcmdzLnNlbGVjdFxuICAgIGlmICh0aGlzLnF1ZXJ5QXJncy5zZWxlY3RDb2x1bW5zKSBwYXJhbXMuc2VsZWN0X2NvbHVtbnMgPSB0aGlzLnF1ZXJ5QXJncy5zZWxlY3RDb2x1bW5zXG5cbiAgICByZXR1cm4gcGFyYW1zXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBlclxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHBlcihwZXIpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3Blcn0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBlcktleVxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHBlcktleShwZXJLZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3BlcktleX0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBwYXJhbXNcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICByYW5zYWNrKHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMpIHRoaXMuX21lcmdlKHtyYW5zYWNrOiBwYXJhbXN9KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8UmVzdWx0Pn1cbiAgICovXG4gIGFzeW5jIHJlc3VsdCgpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX3Jlc3BvbnNlKClcbiAgICBjb25zdCBtb2RlbHMgPSBkaWdnKHJlc3BvbnNlLCBcImNvbGxlY3Rpb25cIilcblxuICAgIHRoaXMuX2FkZFF1ZXJ5VG9Nb2RlbHMobW9kZWxzKVxuXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFJlc3VsdCh7Y29sbGVjdGlvbjogdGhpcywgbW9kZWxzLCByZXNwb25zZX0pXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBwYXJhbXNcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBzZWFyY2gocGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcykgdGhpcy5fbWVyZ2Uoe3NlYXJjaDogcGFyYW1zfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hLZXlcbiAgICogQHJldHVybnMge3RoaXN9XG4gICAqL1xuICBzZWFyY2hLZXkoc2VhcmNoS2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtzZWFyY2hLZXl9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSBvcmlnaW5hbFNlbGVjdFxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHNlbGVjdChvcmlnaW5hbFNlbGVjdCkge1xuICAgIGNvbnN0IG5ld1NlbGVjdCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG9yaWdpbmFsTW9kZWxOYW1lIGluIG9yaWdpbmFsU2VsZWN0KSB7XG4gICAgICBjb25zdCBuZXdNb2RlbE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUob3JpZ2luYWxNb2RlbE5hbWUpXG4gICAgICBjb25zdCBuZXdWYWx1ZXMgPSBbXVxuICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZXMgPSBvcmlnaW5hbFNlbGVjdFtvcmlnaW5hbE1vZGVsTmFtZV1cblxuICAgICAgZm9yIChjb25zdCBvcmlnaW5hbEF0dHJpYnV0ZU5hbWUgb2Ygb3JpZ2luYWxWYWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV3QXR0cmlidXRlTmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShvcmlnaW5hbEF0dHJpYnV0ZU5hbWUpXG4gICAgICAgIG5ld1ZhbHVlcy5wdXNoKG5ld0F0dHJpYnV0ZU5hbWUpXG4gICAgICB9XG5cbiAgICAgIG5ld1NlbGVjdFtuZXdNb2RlbE5hbWVdID0gbmV3VmFsdWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtzZWxlY3Q6IG5ld1NlbGVjdH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IG9yaWdpbmFsU2VsZWN0XG4gICAqIEByZXR1cm5zIHt0aGlzfVxuICAgKi9cbiAgc2VsZWN0Q29sdW1ucyhvcmlnaW5hbFNlbGVjdCkge1xuICAgIGNvbnN0IG5ld1NlbGVjdCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IG9yaWdpbmFsTW9kZWxOYW1lIGluIG9yaWdpbmFsU2VsZWN0KSB7XG4gICAgICBjb25zdCBuZXdNb2RlbE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsTW9kZWxOYW1lKSlcbiAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IFtdXG4gICAgICBjb25zdCBvcmlnaW5hbFZhbHVlcyA9IG9yaWdpbmFsU2VsZWN0W29yaWdpbmFsTW9kZWxOYW1lXVxuXG4gICAgICBmb3IgKGNvbnN0IG9yaWdpbmFsQXR0cmlidXRlTmFtZSBvZiBvcmlnaW5hbFZhbHVlcykge1xuICAgICAgICBjb25zdCBuZXdBdHRyaWJ1dGVOYW1lID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG9yaWdpbmFsQXR0cmlidXRlTmFtZSlcbiAgICAgICAgbmV3VmFsdWVzLnB1c2gobmV3QXR0cmlidXRlTmFtZSlcbiAgICAgIH1cblxuICAgICAgbmV3U2VsZWN0W25ld01vZGVsTmFtZV0gPSBuZXdWYWx1ZXNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWVyZ2Uoe3NlbGVjdENvbHVtbnM6IG5ld1NlbGVjdH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvcnRCeVxuICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICovXG4gIHNvcnQoc29ydEJ5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21lcmdlKHtyYW5zYWNrOiB7czogc29ydEJ5fX0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8TW9kZWxPZjxNQz4+Pn1cbiAgICovXG4gIGFzeW5jIHRvQXJyYXkoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9yZXNwb25zZSgpXG4gICAgY29uc3QgbW9kZWxzID0gZGlnZyhyZXNwb25zZSwgXCJjb2xsZWN0aW9uXCIpXG5cbiAgICB0aGlzLl9hZGRRdWVyeVRvTW9kZWxzKG1vZGVscylcblxuICAgIHJldHVybiBtb2RlbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7TUN9XG4gICAqL1xuICBtb2RlbENsYXNzKCkge1xuICAgIGlmICghdGhpcy5hcmdzLm1vZGVsQ2xhc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1vZGVsIGNsYXNzIGdpdmVuIGluIGFyZ3NcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcmdzLm1vZGVsQ2xhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7QXBpTWFrZXJDb2xsZWN0aW9ufVxuICAgKi9cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgY2xvbmVkUXVlcnlBcmdzID0gY2xvbmVEZWVwKHRoaXMucXVlcnlBcmdzKVxuXG4gICAgcmV0dXJuIG5ldyBBcGlNYWtlckNvbGxlY3Rpb24odGhpcy5hcmdzLCBjbG9uZWRRdWVyeUFyZ3MpXG4gIH1cblxuICAvLyBUaGlzIGlzIG5lZWRlZCB3aGVuIHJlbG9hZGluZyBhIHZlcnNpb24gb2YgdGhlIG1vZGVsIHdpdGggdGhlIHNhbWUgc2VsZWN0ZWQgYXR0cmlidXRlcyBhbmQgcHJlbG9hZHNcbiAgX2FkZFF1ZXJ5VG9Nb2RlbHMobW9kZWxzKSB7XG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiBtb2RlbHMpIHtcbiAgICAgIG1vZGVsLmNvbGxlY3Rpb24gPSB0aGlzXG4gICAgfVxuICB9XG5cbiAgX21lcmdlKG5ld1F1ZXJ5QXJncykge1xuICAgIGluY29ycG9yYXRlKHRoaXMucXVlcnlBcmdzLCBuZXdRdWVyeUFyZ3MpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgX3Jlc3BvbnNlKCkge1xuICAgIGlmICghdGhpcy5hcmdzKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBhcmdzP1wiKVxuICAgIGlmICghdGhpcy5hcmdzLm1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIk5vIG1vZGVsQ2xhc3MgaW4gYXJnc1wiKVxuICAgIGlmICghdGhpcy5hcmdzLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEpIHRocm93IG5ldyBFcnJvcihgTm8gbW9kZWxDbGFzc0RhdGEgb24gbW9kZWxDbGFzcyAke3RoaXMuYXJncy5tb2RlbENsYXNzPy5uYW1lfSAoJHt0eXBlb2YgdGhpcy5hcmdzLm1vZGVsQ2xhc3N9KWApXG5cbiAgICBjb25zdCBtb2RlbENsYXNzRGF0YSA9IHRoaXMuYXJncy5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKClcblxuICAgIHJldHVybiBDb21tYW5kc1Bvb2wuYWRkQ29tbWFuZChcbiAgICAgIHtcbiAgICAgICAgYXJnczogdGhpcy5wYXJhbXMoKSxcbiAgICAgICAgY29tbWFuZDogYCR7bW9kZWxDbGFzc0RhdGEuY29sbGVjdGlvbk5hbWV9LWluZGV4YCxcbiAgICAgICAgY29sbGVjdGlvbk5hbWU6IG1vZGVsQ2xhc3NEYXRhLmNvbGxlY3Rpb25OYW1lLFxuICAgICAgICB0eXBlOiBcImluZGV4XCJcbiAgICAgIH0sXG4gICAgICB7fVxuICAgIClcbiAgfVxufVxuIl19
|