@kaspernj/api-maker 1.0.446 → 1.0.448
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 -16
- 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/index.jsx +3 -3
- package/src/draggable-sort/item.jsx +2 -2
- 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/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-select.jsx +1 -1
- package/src/table/model-column.jsx +1 -1
- package/src/table/model-row.jsx +2 -2
- package/src/table/{select-calculator.mjs → select-calculator.js} +1 -1
- package/src/table/settings/column-row.jsx +2 -2
- 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 +8 -8
- package/src/table/{use-sorting.mjs → use-sorting.js} +1 -1
- 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/draggable-sort/{controller.mjs → controller.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
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { dig, digg, digs } from "diggerize";
|
|
2
|
+
import * as inflection from "inflection";
|
|
3
|
+
import qs from "qs";
|
|
4
|
+
import urlEncode from "./url-encode";
|
|
5
|
+
export default class ApiMakerRoutesNative {
|
|
6
|
+
constructor({
|
|
7
|
+
getLocale
|
|
8
|
+
}) {
|
|
9
|
+
this.getLocale = getLocale;
|
|
10
|
+
this.routeDefinitions = [];
|
|
11
|
+
this.routeTranslationParts = {};
|
|
12
|
+
}
|
|
13
|
+
loadRouteDefinitions(routeDefinitions, routeDefinitionArgs) {
|
|
14
|
+
for (const routeDefinition of digg(routeDefinitions, "routes")) {
|
|
15
|
+
const {
|
|
16
|
+
name,
|
|
17
|
+
path
|
|
18
|
+
} = digs(routeDefinition, "name", "path");
|
|
19
|
+
const rawPathParts = path.split("/");
|
|
20
|
+
const pathMethodName = `${inflection.camelize(name, true)}Path`;
|
|
21
|
+
const urlMethodName = `${inflection.camelize(name, true)}Url`;
|
|
22
|
+
if (routeDefinitionArgs && routeDefinitionArgs.localized) {
|
|
23
|
+
const localizedRoutes = {};
|
|
24
|
+
for (const locale in this.routeTranslationParts) {
|
|
25
|
+
let variableCount = 0;
|
|
26
|
+
const localizedPathParts = [{
|
|
27
|
+
type: "pathPart",
|
|
28
|
+
name: ""
|
|
29
|
+
}, {
|
|
30
|
+
type: "pathPart",
|
|
31
|
+
name: locale
|
|
32
|
+
}];
|
|
33
|
+
for (let i = 1; i < rawPathParts.length; i++) {
|
|
34
|
+
const pathPart = rawPathParts[i];
|
|
35
|
+
const variableMatch = pathPart.match(/^:([A-z_]+)$/);
|
|
36
|
+
if (variableMatch) {
|
|
37
|
+
localizedPathParts.push({
|
|
38
|
+
type: "variable",
|
|
39
|
+
count: variableCount++
|
|
40
|
+
});
|
|
41
|
+
} else if (pathPart) {
|
|
42
|
+
const name = this.i18n.t(`routes.${pathPart}`, null, {
|
|
43
|
+
default: pathPart,
|
|
44
|
+
locale
|
|
45
|
+
});
|
|
46
|
+
localizedPathParts.push({
|
|
47
|
+
type: "pathPart",
|
|
48
|
+
name
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
localizedRoutes[locale] = localizedPathParts;
|
|
53
|
+
}
|
|
54
|
+
this[pathMethodName] = (...args) => this.translateRoute({
|
|
55
|
+
args,
|
|
56
|
+
localizedRoutes
|
|
57
|
+
});
|
|
58
|
+
this[urlMethodName] = (...args) => this.translateRoute({
|
|
59
|
+
args,
|
|
60
|
+
localizedRoutes,
|
|
61
|
+
url: true
|
|
62
|
+
});
|
|
63
|
+
} else {
|
|
64
|
+
let variableCount = 0;
|
|
65
|
+
const pathParts = rawPathParts.map(pathPart => {
|
|
66
|
+
const variableMatch = pathPart.match(/^:([A-z_]+)$/);
|
|
67
|
+
if (variableMatch) {
|
|
68
|
+
return {
|
|
69
|
+
type: "variable",
|
|
70
|
+
count: variableCount
|
|
71
|
+
};
|
|
72
|
+
} else {
|
|
73
|
+
return {
|
|
74
|
+
type: "pathPart",
|
|
75
|
+
name: pathPart
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
this[pathMethodName] = (...args) => this.translateRoute({
|
|
80
|
+
args,
|
|
81
|
+
pathParts
|
|
82
|
+
});
|
|
83
|
+
this[urlMethodName] = (...args) => this.translateRoute({
|
|
84
|
+
args,
|
|
85
|
+
pathParts,
|
|
86
|
+
url: true
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
loadRouteTranslations(i18n) {
|
|
92
|
+
this.i18n = i18n;
|
|
93
|
+
const locales = digg(i18n, "locales");
|
|
94
|
+
for (const locale in locales) {
|
|
95
|
+
const routeTranslations = dig(locales, locale, "routes");
|
|
96
|
+
if (!routeTranslations) continue;
|
|
97
|
+
if (!(locale in this.routeTranslationParts)) this.routeTranslationParts[locale] = {};
|
|
98
|
+
for (const key in routeTranslations) {
|
|
99
|
+
this.routeTranslationParts[locale][key] = routeTranslations[key];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
translateRoute({
|
|
104
|
+
args,
|
|
105
|
+
localizedRoutes,
|
|
106
|
+
pathParts,
|
|
107
|
+
url
|
|
108
|
+
}) {
|
|
109
|
+
let options;
|
|
110
|
+
|
|
111
|
+
// Extract options from args if any
|
|
112
|
+
const lastArg = args[args.length - 1];
|
|
113
|
+
if (lastArg && typeof lastArg == "object") {
|
|
114
|
+
options = args.pop();
|
|
115
|
+
} else {
|
|
116
|
+
options = {};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Take locale from options if given or fall back to fallback
|
|
120
|
+
const {
|
|
121
|
+
locale,
|
|
122
|
+
host,
|
|
123
|
+
port,
|
|
124
|
+
protocol,
|
|
125
|
+
...restOptions
|
|
126
|
+
} = options;
|
|
127
|
+
if (localizedRoutes) {
|
|
128
|
+
// Put together route with variables and static translated parts (which were translated and cached previously)
|
|
129
|
+
let translatedRoute = digg(localizedRoutes, locale || this.getLocale()).map(pathPart => {
|
|
130
|
+
if (pathPart.type == "pathPart") {
|
|
131
|
+
return pathPart.name;
|
|
132
|
+
} else if (pathPart.type == "variable") {
|
|
133
|
+
// Args might not contain the right amount of variables, so dont change this to 'digg'
|
|
134
|
+
return dig(args, digg(pathPart, "count"));
|
|
135
|
+
} else {
|
|
136
|
+
throw new Error(`Unhandled path part type: ${pathPart.type}`);
|
|
137
|
+
}
|
|
138
|
+
}).join("/");
|
|
139
|
+
if (restOptions && Object.keys(restOptions).length > 0) {
|
|
140
|
+
translatedRoute += `?${qs.stringify(restOptions, {
|
|
141
|
+
encoder: urlEncode
|
|
142
|
+
})}`;
|
|
143
|
+
}
|
|
144
|
+
if (url) return this.addHostToRoute({
|
|
145
|
+
host,
|
|
146
|
+
port,
|
|
147
|
+
protocol,
|
|
148
|
+
translatedRoute
|
|
149
|
+
});
|
|
150
|
+
return translatedRoute;
|
|
151
|
+
} else if (pathParts) {
|
|
152
|
+
// Put together route with variables and static translated parts (which were translated and cached previously)
|
|
153
|
+
let translatedRoute = pathParts.map(pathPart => {
|
|
154
|
+
if (pathPart.type == "pathPart") {
|
|
155
|
+
return pathPart.name;
|
|
156
|
+
} else if (pathPart.type == "variable") {
|
|
157
|
+
return digg(args, digg(pathPart, "count"));
|
|
158
|
+
} else {
|
|
159
|
+
throw new Error(`Unhandled path part type: ${pathPart.type}`);
|
|
160
|
+
}
|
|
161
|
+
}).join("/");
|
|
162
|
+
if (restOptions && Object.keys(restOptions).length > 0) {
|
|
163
|
+
translatedRoute += `?${qs.stringify(restOptions, {
|
|
164
|
+
encoder: urlEncode
|
|
165
|
+
})}`;
|
|
166
|
+
}
|
|
167
|
+
if (url) return this.addHostToRoute({
|
|
168
|
+
host,
|
|
169
|
+
port,
|
|
170
|
+
protocol,
|
|
171
|
+
translatedRoute
|
|
172
|
+
});
|
|
173
|
+
return translatedRoute;
|
|
174
|
+
}
|
|
175
|
+
throw new Error("Unhandled state");
|
|
176
|
+
}
|
|
177
|
+
addHostToRoute({
|
|
178
|
+
host,
|
|
179
|
+
port,
|
|
180
|
+
protocol,
|
|
181
|
+
translatedRoute
|
|
182
|
+
}) {
|
|
183
|
+
let fullUrl = "";
|
|
184
|
+
const hostToUse = host || globalThis.location && globalThis.location.host;
|
|
185
|
+
const portToUse = port || globalThis.location && globalThis.location.port;
|
|
186
|
+
if (!hostToUse) throw new Error("Unable to detect host");
|
|
187
|
+
if (protocol) {
|
|
188
|
+
fullUrl += `${protocol}://`;
|
|
189
|
+
} else if (globalThis.location && globalThis.location.protocol) {
|
|
190
|
+
fullUrl += `${globalThis.location.protocol}//`;
|
|
191
|
+
} else {
|
|
192
|
+
fullUrl += "https://";
|
|
193
|
+
}
|
|
194
|
+
fullUrl += hostToUse;
|
|
195
|
+
if (portToUse && (protocol == "http" && portToUse != 80 || protocol == "https" && port != 443)) {
|
|
196
|
+
fullUrl += `:${portToUse}`;
|
|
197
|
+
}
|
|
198
|
+
fullUrl += translatedRoute;
|
|
199
|
+
return fullUrl;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWciLCJkaWdnIiwiZGlncyIsImluZmxlY3Rpb24iLCJxcyIsInVybEVuY29kZSIsIkFwaU1ha2VyUm91dGVzTmF0aXZlIiwiY29uc3RydWN0b3IiLCJnZXRMb2NhbGUiLCJyb3V0ZURlZmluaXRpb25zIiwicm91dGVUcmFuc2xhdGlvblBhcnRzIiwibG9hZFJvdXRlRGVmaW5pdGlvbnMiLCJyb3V0ZURlZmluaXRpb25BcmdzIiwicm91dGVEZWZpbml0aW9uIiwibmFtZSIsInBhdGgiLCJyYXdQYXRoUGFydHMiLCJzcGxpdCIsInBhdGhNZXRob2ROYW1lIiwiY2FtZWxpemUiLCJ1cmxNZXRob2ROYW1lIiwibG9jYWxpemVkIiwibG9jYWxpemVkUm91dGVzIiwibG9jYWxlIiwidmFyaWFibGVDb3VudCIsImxvY2FsaXplZFBhdGhQYXJ0cyIsInR5cGUiLCJpIiwibGVuZ3RoIiwicGF0aFBhcnQiLCJ2YXJpYWJsZU1hdGNoIiwibWF0Y2giLCJwdXNoIiwiY291bnQiLCJpMThuIiwidCIsImRlZmF1bHQiLCJhcmdzIiwidHJhbnNsYXRlUm91dGUiLCJ1cmwiLCJwYXRoUGFydHMiLCJtYXAiLCJsb2FkUm91dGVUcmFuc2xhdGlvbnMiLCJsb2NhbGVzIiwicm91dGVUcmFuc2xhdGlvbnMiLCJrZXkiLCJvcHRpb25zIiwibGFzdEFyZyIsInBvcCIsImhvc3QiLCJwb3J0IiwicHJvdG9jb2wiLCJyZXN0T3B0aW9ucyIsInRyYW5zbGF0ZWRSb3V0ZSIsIkVycm9yIiwiam9pbiIsIk9iamVjdCIsImtleXMiLCJzdHJpbmdpZnkiLCJlbmNvZGVyIiwiYWRkSG9zdFRvUm91dGUiLCJmdWxsVXJsIiwiaG9zdFRvVXNlIiwiZ2xvYmFsVGhpcyIsImxvY2F0aW9uIiwicG9ydFRvVXNlIl0sInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlcy1uYXRpdmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWcsIGRpZ2csIGRpZ3N9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgcXMgZnJvbSBcInFzXCJcbmltcG9ydCB1cmxFbmNvZGUgZnJvbSBcIi4vdXJsLWVuY29kZVwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyUm91dGVzTmF0aXZlIHtcbiAgY29uc3RydWN0b3IgKHtnZXRMb2NhbGV9KSB7XG4gICAgdGhpcy5nZXRMb2NhbGUgPSBnZXRMb2NhbGVcbiAgICB0aGlzLnJvdXRlRGVmaW5pdGlvbnMgPSBbXVxuICAgIHRoaXMucm91dGVUcmFuc2xhdGlvblBhcnRzID0ge31cbiAgfVxuXG4gIGxvYWRSb3V0ZURlZmluaXRpb25zIChyb3V0ZURlZmluaXRpb25zLCByb3V0ZURlZmluaXRpb25BcmdzKSB7XG4gICAgZm9yIChjb25zdCByb3V0ZURlZmluaXRpb24gb2YgZGlnZyhyb3V0ZURlZmluaXRpb25zLCBcInJvdXRlc1wiKSkge1xuICAgICAgY29uc3Qge25hbWUsIHBhdGh9ID0gZGlncyhyb3V0ZURlZmluaXRpb24sIFwibmFtZVwiLCBcInBhdGhcIilcbiAgICAgIGNvbnN0IHJhd1BhdGhQYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpXG4gICAgICBjb25zdCBwYXRoTWV0aG9kTmFtZSA9IGAke2luZmxlY3Rpb24uY2FtZWxpemUobmFtZSwgdHJ1ZSl9UGF0aGBcbiAgICAgIGNvbnN0IHVybE1ldGhvZE5hbWUgPSBgJHtpbmZsZWN0aW9uLmNhbWVsaXplKG5hbWUsIHRydWUpfVVybGBcblxuICAgICAgaWYgKHJvdXRlRGVmaW5pdGlvbkFyZ3MgJiYgcm91dGVEZWZpbml0aW9uQXJncy5sb2NhbGl6ZWQpIHtcbiAgICAgICAgY29uc3QgbG9jYWxpemVkUm91dGVzID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGxvY2FsZSBpbiB0aGlzLnJvdXRlVHJhbnNsYXRpb25QYXJ0cykge1xuICAgICAgICAgIGxldCB2YXJpYWJsZUNvdW50ID0gMFxuXG4gICAgICAgICAgY29uc3QgbG9jYWxpemVkUGF0aFBhcnRzID0gW1xuICAgICAgICAgICAge3R5cGU6IFwicGF0aFBhcnRcIiwgbmFtZTogXCJcIn0sXG4gICAgICAgICAgICB7dHlwZTogXCJwYXRoUGFydFwiLCBuYW1lOiBsb2NhbGV9XG4gICAgICAgICAgXVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByYXdQYXRoUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0ID0gcmF3UGF0aFBhcnRzW2ldXG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZU1hdGNoID0gcGF0aFBhcnQubWF0Y2goL146KFtBLXpfXSspJC8pXG5cbiAgICAgICAgICAgIGlmICh2YXJpYWJsZU1hdGNoKSB7XG4gICAgICAgICAgICAgIGxvY2FsaXplZFBhdGhQYXJ0cy5wdXNoKHt0eXBlOiBcInZhcmlhYmxlXCIsIGNvdW50OiB2YXJpYWJsZUNvdW50Kyt9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXRoUGFydCkge1xuICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5pMThuLnQoYHJvdXRlcy4ke3BhdGhQYXJ0fWAsIG51bGwsIHtkZWZhdWx0OiBwYXRoUGFydCwgbG9jYWxlfSlcblxuICAgICAgICAgICAgICBsb2NhbGl6ZWRQYXRoUGFydHMucHVzaCh7dHlwZTogXCJwYXRoUGFydFwiLCBuYW1lfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2NhbGl6ZWRSb3V0ZXNbbG9jYWxlXSA9IGxvY2FsaXplZFBhdGhQYXJ0c1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1twYXRoTWV0aG9kTmFtZV0gPSAoLi4uYXJncykgPT4gdGhpcy50cmFuc2xhdGVSb3V0ZSh7YXJncywgbG9jYWxpemVkUm91dGVzfSlcbiAgICAgICAgdGhpc1t1cmxNZXRob2ROYW1lXSA9ICguLi5hcmdzKSA9PiB0aGlzLnRyYW5zbGF0ZVJvdXRlKHthcmdzLCBsb2NhbGl6ZWRSb3V0ZXMsIHVybDogdHJ1ZX0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdmFyaWFibGVDb3VudCA9IDBcblxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSByYXdQYXRoUGFydHMubWFwKChwYXRoUGFydCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhcmlhYmxlTWF0Y2ggPSBwYXRoUGFydC5tYXRjaCgvXjooW0Etel9dKykkLylcblxuICAgICAgICAgIGlmICh2YXJpYWJsZU1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6IFwidmFyaWFibGVcIiwgY291bnQ6IHZhcmlhYmxlQ291bnR9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogXCJwYXRoUGFydFwiLCBuYW1lOiBwYXRoUGFydH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpc1twYXRoTWV0aG9kTmFtZV0gPSAoLi4uYXJncykgPT4gdGhpcy50cmFuc2xhdGVSb3V0ZSh7YXJncywgcGF0aFBhcnRzfSlcbiAgICAgICAgdGhpc1t1cmxNZXRob2ROYW1lXSA9ICguLi5hcmdzKSA9PiB0aGlzLnRyYW5zbGF0ZVJvdXRlKHthcmdzLCBwYXRoUGFydHMsIHVybDogdHJ1ZX0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbG9hZFJvdXRlVHJhbnNsYXRpb25zIChpMThuKSB7XG4gICAgdGhpcy5pMThuID0gaTE4blxuICAgIGNvbnN0IGxvY2FsZXMgPSBkaWdnKGkxOG4sIFwibG9jYWxlc1wiKVxuXG4gICAgZm9yIChjb25zdCBsb2NhbGUgaW4gbG9jYWxlcykge1xuICAgICAgY29uc3Qgcm91dGVUcmFuc2xhdGlvbnMgPSBkaWcobG9jYWxlcywgbG9jYWxlLCBcInJvdXRlc1wiKVxuXG4gICAgICBpZiAoIXJvdXRlVHJhbnNsYXRpb25zKSBjb250aW51ZVxuICAgICAgaWYgKCEobG9jYWxlIGluIHRoaXMucm91dGVUcmFuc2xhdGlvblBhcnRzKSkgdGhpcy5yb3V0ZVRyYW5zbGF0aW9uUGFydHNbbG9jYWxlXSA9IHt9XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHJvdXRlVHJhbnNsYXRpb25zKSB7XG4gICAgICAgIHRoaXMucm91dGVUcmFuc2xhdGlvblBhcnRzW2xvY2FsZV1ba2V5XSA9IHJvdXRlVHJhbnNsYXRpb25zW2tleV1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0cmFuc2xhdGVSb3V0ZSAoe2FyZ3MsIGxvY2FsaXplZFJvdXRlcywgcGF0aFBhcnRzLCB1cmx9KSB7XG4gICAgbGV0IG9wdGlvbnNcblxuICAgIC8vIEV4dHJhY3Qgb3B0aW9ucyBmcm9tIGFyZ3MgaWYgYW55XG4gICAgY29uc3QgbGFzdEFyZyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXVxuXG4gICAgaWYgKGxhc3RBcmcgJiYgdHlwZW9mIGxhc3RBcmcgPT0gXCJvYmplY3RcIikge1xuICAgICAgb3B0aW9ucyA9IGFyZ3MucG9wKClcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgfVxuXG4gICAgLy8gVGFrZSBsb2NhbGUgZnJvbSBvcHRpb25zIGlmIGdpdmVuIG9yIGZhbGwgYmFjayB0byBmYWxsYmFja1xuICAgIGNvbnN0IHtsb2NhbGUsIGhvc3QsIHBvcnQsIHByb3RvY29sLCAuLi5yZXN0T3B0aW9uc30gPSBvcHRpb25zXG5cbiAgICBpZiAobG9jYWxpemVkUm91dGVzKSB7XG4gICAgICAvLyBQdXQgdG9nZXRoZXIgcm91dGUgd2l0aCB2YXJpYWJsZXMgYW5kIHN0YXRpYyB0cmFuc2xhdGVkIHBhcnRzICh3aGljaCB3ZXJlIHRyYW5zbGF0ZWQgYW5kIGNhY2hlZCBwcmV2aW91c2x5KVxuICAgICAgbGV0IHRyYW5zbGF0ZWRSb3V0ZSA9IGRpZ2cobG9jYWxpemVkUm91dGVzLCBsb2NhbGUgfHwgdGhpcy5nZXRMb2NhbGUoKSlcbiAgICAgICAgLm1hcCgocGF0aFBhcnQpID0+IHtcbiAgICAgICAgICBpZiAocGF0aFBhcnQudHlwZSA9PSBcInBhdGhQYXJ0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoUGFydC5uYW1lXG4gICAgICAgICAgfSBlbHNlIGlmIChwYXRoUGFydC50eXBlID09IFwidmFyaWFibGVcIikge1xuICAgICAgICAgICAgLy8gQXJncyBtaWdodCBub3QgY29udGFpbiB0aGUgcmlnaHQgYW1vdW50IG9mIHZhcmlhYmxlcywgc28gZG9udCBjaGFuZ2UgdGhpcyB0byAnZGlnZydcbiAgICAgICAgICAgIHJldHVybiBkaWcoYXJncywgZGlnZyhwYXRoUGFydCwgXCJjb3VudFwiKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgcGF0aCBwYXJ0IHR5cGU6ICR7cGF0aFBhcnQudHlwZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIvXCIpXG5cbiAgICAgIGlmIChyZXN0T3B0aW9ucyAmJiBPYmplY3Qua2V5cyhyZXN0T3B0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgICB0cmFuc2xhdGVkUm91dGUgKz0gYD8ke3FzLnN0cmluZ2lmeShyZXN0T3B0aW9ucywge2VuY29kZXI6IHVybEVuY29kZX0pfWBcbiAgICAgIH1cblxuICAgICAgaWYgKHVybCkgcmV0dXJuIHRoaXMuYWRkSG9zdFRvUm91dGUoe2hvc3QsIHBvcnQsIHByb3RvY29sLCB0cmFuc2xhdGVkUm91dGV9KVxuXG4gICAgICByZXR1cm4gdHJhbnNsYXRlZFJvdXRlXG4gICAgfSBlbHNlIGlmIChwYXRoUGFydHMpIHtcbiAgICAgIC8vIFB1dCB0b2dldGhlciByb3V0ZSB3aXRoIHZhcmlhYmxlcyBhbmQgc3RhdGljIHRyYW5zbGF0ZWQgcGFydHMgKHdoaWNoIHdlcmUgdHJhbnNsYXRlZCBhbmQgY2FjaGVkIHByZXZpb3VzbHkpXG4gICAgICBsZXQgdHJhbnNsYXRlZFJvdXRlID0gcGF0aFBhcnRzXG4gICAgICAgIC5tYXAoKHBhdGhQYXJ0KSA9PiB7XG4gICAgICAgICAgaWYgKHBhdGhQYXJ0LnR5cGUgPT0gXCJwYXRoUGFydFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQubmFtZVxuICAgICAgICAgIH0gZWxzZSBpZiAocGF0aFBhcnQudHlwZSA9PSBcInZhcmlhYmxlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBkaWdnKGFyZ3MsIGRpZ2cocGF0aFBhcnQsIFwiY291bnRcIikpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIHBhdGggcGFydCB0eXBlOiAke3BhdGhQYXJ0LnR5cGV9YClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiL1wiKVxuXG4gICAgICBpZiAocmVzdE9wdGlvbnMgJiYgT2JqZWN0LmtleXMocmVzdE9wdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdHJhbnNsYXRlZFJvdXRlICs9IGA/JHtxcy5zdHJpbmdpZnkocmVzdE9wdGlvbnMsIHtlbmNvZGVyOiB1cmxFbmNvZGV9KX1gXG4gICAgICB9XG5cbiAgICAgIGlmICh1cmwpIHJldHVybiB0aGlzLmFkZEhvc3RUb1JvdXRlKHtob3N0LCBwb3J0LCBwcm90b2NvbCwgdHJhbnNsYXRlZFJvdXRlfSlcblxuICAgICAgcmV0dXJuIHRyYW5zbGF0ZWRSb3V0ZVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBzdGF0ZVwiKVxuICB9XG5cbiAgYWRkSG9zdFRvUm91dGUgKHtob3N0LCBwb3J0LCBwcm90b2NvbCwgdHJhbnNsYXRlZFJvdXRlfSkge1xuICAgIGxldCBmdWxsVXJsID0gXCJcIlxuXG4gICAgY29uc3QgaG9zdFRvVXNlID0gaG9zdCB8fCBnbG9iYWxUaGlzLmxvY2F0aW9uICYmIGdsb2JhbFRoaXMubG9jYXRpb24uaG9zdFxuICAgIGNvbnN0IHBvcnRUb1VzZSA9IHBvcnQgfHwgZ2xvYmFsVGhpcy5sb2NhdGlvbiAmJiBnbG9iYWxUaGlzLmxvY2F0aW9uLnBvcnRcblxuICAgIGlmICghaG9zdFRvVXNlKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZGV0ZWN0IGhvc3RcIilcblxuICAgIGlmIChwcm90b2NvbCkge1xuICAgICAgZnVsbFVybCArPSBgJHtwcm90b2NvbH06Ly9gXG4gICAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmxvY2F0aW9uICYmIGdsb2JhbFRoaXMubG9jYXRpb24ucHJvdG9jb2wpIHtcbiAgICAgIGZ1bGxVcmwgKz0gYCR7Z2xvYmFsVGhpcy5sb2NhdGlvbi5wcm90b2NvbH0vL2BcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsbFVybCArPSBcImh0dHBzOi8vXCJcbiAgICB9XG5cbiAgICBmdWxsVXJsICs9IGhvc3RUb1VzZVxuXG4gICAgaWYgKHBvcnRUb1VzZSAmJiAoKHByb3RvY29sID09IFwiaHR0cFwiICYmIHBvcnRUb1VzZSAhPSA4MCkgfHwgKHByb3RvY29sID09IFwiaHR0cHNcIiAmJiBwb3J0ICE9IDQ0MykpKSB7XG4gICAgICBmdWxsVXJsICs9IGA6JHtwb3J0VG9Vc2V9YFxuICAgIH1cblxuICAgIGZ1bGxVcmwgKz0gdHJhbnNsYXRlZFJvdXRlXG5cbiAgICByZXR1cm4gZnVsbFVybFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLEdBQUcsRUFBRUMsSUFBSSxFQUFFQyxJQUFJLFFBQU8sV0FBVztBQUN6QyxPQUFPLEtBQUtDLFVBQVUsTUFBTSxZQUFZO0FBQ3hDLE9BQU9DLEVBQUUsTUFBTSxJQUFJO0FBQ25CLE9BQU9DLFNBQVMsTUFBTSxjQUFjO0FBRXBDLGVBQWUsTUFBTUMsb0JBQW9CLENBQUM7RUFDeENDLFdBQVdBLENBQUU7SUFBQ0M7RUFBUyxDQUFDLEVBQUU7SUFDeEIsSUFBSSxDQUFDQSxTQUFTLEdBQUdBLFNBQVM7SUFDMUIsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxFQUFFO0lBQzFCLElBQUksQ0FBQ0MscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0VBQ2pDO0VBRUFDLG9CQUFvQkEsQ0FB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
|
package/build/routes.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { digg } from "diggerize";
|
|
2
|
+
import * as inflection from "inflection";
|
|
3
|
+
export default class ApiMakerRoutes {
|
|
4
|
+
constructor({
|
|
5
|
+
jsRoutes,
|
|
6
|
+
locale,
|
|
7
|
+
routeDefinitions
|
|
8
|
+
}) {
|
|
9
|
+
if (!jsRoutes) throw new Error("'jsRoutes' wasn't given");
|
|
10
|
+
this.jsRoutes = jsRoutes;
|
|
11
|
+
this.routeDefinitions = routeDefinitions;
|
|
12
|
+
for (const routeDefinition of digg(this, "routeDefinitions", "routes")) {
|
|
13
|
+
let testRouteNamePath, testRouteNameUrl;
|
|
14
|
+
const routeNamePath = inflection.camelize(`${digg(routeDefinition, "name")}_path`, true);
|
|
15
|
+
const routeNameUrl = inflection.camelize(`${digg(routeDefinition, "name")}_url`, true);
|
|
16
|
+
if (locale) {
|
|
17
|
+
testRouteNamePath = inflection.camelize(`${digg(routeDefinition, "name")}_${locale}_path`, true);
|
|
18
|
+
testRouteNameUrl = inflection.camelize(`${digg(routeDefinition, "name")}_${locale}_url`, true);
|
|
19
|
+
} else {
|
|
20
|
+
testRouteNamePath = inflection.camelize(`${digg(routeDefinition, "name")}_path`, true);
|
|
21
|
+
testRouteNameUrl = inflection.camelize(`${digg(routeDefinition, "name")}_url`, true);
|
|
22
|
+
}
|
|
23
|
+
if (!(testRouteNamePath in this.jsRoutes)) {
|
|
24
|
+
throw new Error(`No such path in JS routes: ${testRouteNamePath}: ${Object.keys(this.jsRoutes).join(", ")}`);
|
|
25
|
+
}
|
|
26
|
+
this[routeNamePath] = (...args) => {
|
|
27
|
+
let routeNamePathToUse;
|
|
28
|
+
if (locale) {
|
|
29
|
+
routeNamePathToUse = inflection.camelize(`${digg(routeDefinition, "name")}_${I18n.locale}_path`, true);
|
|
30
|
+
} else {
|
|
31
|
+
routeNamePathToUse = routeNamePath;
|
|
32
|
+
}
|
|
33
|
+
return this.jsRoutes[routeNamePathToUse](...args);
|
|
34
|
+
};
|
|
35
|
+
if (!(testRouteNameUrl in this.jsRoutes)) {
|
|
36
|
+
throw new Error(`No such URL in JS routes: ${testRouteNameUrl}: ${Object.keys(this.jsRoutes).join(", ")}`);
|
|
37
|
+
}
|
|
38
|
+
this[routeNameUrl] = (...args) => {
|
|
39
|
+
let routeNameUrlToUse;
|
|
40
|
+
if (locale) {
|
|
41
|
+
routeNameUrlToUse = inflection.camelize(`${digg(routeDefinition, "name")}_${I18n.locale}_url`, true);
|
|
42
|
+
} else {
|
|
43
|
+
routeNameUrlToUse = routeNameUrl;
|
|
44
|
+
}
|
|
45
|
+
return this.jsRoutes[routeNameUrlToUse](...args);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiaW5mbGVjdGlvbiIsIkFwaU1ha2VyUm91dGVzIiwiY29uc3RydWN0b3IiLCJqc1JvdXRlcyIsImxvY2FsZSIsInJvdXRlRGVmaW5pdGlvbnMiLCJFcnJvciIsInJvdXRlRGVmaW5pdGlvbiIsInRlc3RSb3V0ZU5hbWVQYXRoIiwidGVzdFJvdXRlTmFtZVVybCIsInJvdXRlTmFtZVBhdGgiLCJjYW1lbGl6ZSIsInJvdXRlTmFtZVVybCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwiYXJncyIsInJvdXRlTmFtZVBhdGhUb1VzZSIsIkkxOG4iLCJyb3V0ZU5hbWVVcmxUb1VzZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9yb3V0ZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlclJvdXRlcyB7XG4gIGNvbnN0cnVjdG9yICh7anNSb3V0ZXMsIGxvY2FsZSwgcm91dGVEZWZpbml0aW9uc30pIHtcbiAgICBpZiAoIWpzUm91dGVzKSB0aHJvdyBuZXcgRXJyb3IoXCInanNSb3V0ZXMnIHdhc24ndCBnaXZlblwiKVxuXG4gICAgdGhpcy5qc1JvdXRlcyA9IGpzUm91dGVzXG4gICAgdGhpcy5yb3V0ZURlZmluaXRpb25zID0gcm91dGVEZWZpbml0aW9uc1xuXG4gICAgZm9yIChjb25zdCByb3V0ZURlZmluaXRpb24gb2YgZGlnZyh0aGlzLCBcInJvdXRlRGVmaW5pdGlvbnNcIiwgXCJyb3V0ZXNcIikpIHtcbiAgICAgIGxldCB0ZXN0Um91dGVOYW1lUGF0aCwgdGVzdFJvdXRlTmFtZVVybFxuXG4gICAgICBjb25zdCByb3V0ZU5hbWVQYXRoID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShgJHtkaWdnKHJvdXRlRGVmaW5pdGlvbiwgXCJuYW1lXCIpfV9wYXRoYCwgdHJ1ZSlcbiAgICAgIGNvbnN0IHJvdXRlTmFtZVVybCA9IGluZmxlY3Rpb24uY2FtZWxpemUoYCR7ZGlnZyhyb3V0ZURlZmluaXRpb24sIFwibmFtZVwiKX1fdXJsYCwgdHJ1ZSlcblxuICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICB0ZXN0Um91dGVOYW1lUGF0aCA9IGluZmxlY3Rpb24uY2FtZWxpemUoYCR7ZGlnZyhyb3V0ZURlZmluaXRpb24sIFwibmFtZVwiKX1fJHtsb2NhbGV9X3BhdGhgLCB0cnVlKVxuICAgICAgICB0ZXN0Um91dGVOYW1lVXJsID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShgJHtkaWdnKHJvdXRlRGVmaW5pdGlvbiwgXCJuYW1lXCIpfV8ke2xvY2FsZX1fdXJsYCwgdHJ1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlc3RSb3V0ZU5hbWVQYXRoID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShgJHtkaWdnKHJvdXRlRGVmaW5pdGlvbiwgXCJuYW1lXCIpfV9wYXRoYCwgdHJ1ZSlcbiAgICAgICAgdGVzdFJvdXRlTmFtZVVybCA9IGluZmxlY3Rpb24uY2FtZWxpemUoYCR7ZGlnZyhyb3V0ZURlZmluaXRpb24sIFwibmFtZVwiKX1fdXJsYCwgdHJ1ZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCEodGVzdFJvdXRlTmFtZVBhdGggaW4gdGhpcy5qc1JvdXRlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIHBhdGggaW4gSlMgcm91dGVzOiAke3Rlc3RSb3V0ZU5hbWVQYXRofTogJHtPYmplY3Qua2V5cyh0aGlzLmpzUm91dGVzKS5qb2luKFwiLCBcIil9YClcbiAgICAgIH1cblxuICAgICAgdGhpc1tyb3V0ZU5hbWVQYXRoXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGxldCByb3V0ZU5hbWVQYXRoVG9Vc2VcblxuICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgcm91dGVOYW1lUGF0aFRvVXNlID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShgJHtkaWdnKHJvdXRlRGVmaW5pdGlvbiwgXCJuYW1lXCIpfV8ke0kxOG4ubG9jYWxlfV9wYXRoYCwgdHJ1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3V0ZU5hbWVQYXRoVG9Vc2UgPSByb3V0ZU5hbWVQYXRoXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5qc1JvdXRlc1tyb3V0ZU5hbWVQYXRoVG9Vc2VdKC4uLmFyZ3MpXG4gICAgICB9XG5cbiAgICAgIGlmICghKHRlc3RSb3V0ZU5hbWVVcmwgaW4gdGhpcy5qc1JvdXRlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIFVSTCBpbiBKUyByb3V0ZXM6ICR7dGVzdFJvdXRlTmFtZVVybH06ICR7T2JqZWN0LmtleXModGhpcy5qc1JvdXRlcykuam9pbihcIiwgXCIpfWApXG4gICAgICB9XG5cbiAgICAgIHRoaXNbcm91dGVOYW1lVXJsXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGxldCByb3V0ZU5hbWVVcmxUb1VzZVxuXG4gICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICByb3V0ZU5hbWVVcmxUb1VzZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoYCR7ZGlnZyhyb3V0ZURlZmluaXRpb24sIFwibmFtZVwiKX1fJHtJMThuLmxvY2FsZX1fdXJsYCwgdHJ1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3V0ZU5hbWVVcmxUb1VzZSA9IHJvdXRlTmFtZVVybFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuanNSb3V0ZXNbcm91dGVOYW1lVXJsVG9Vc2VdKC4uLmFyZ3MpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLElBQUksUUFBTyxXQUFXO0FBQzlCLE9BQU8sS0FBS0MsVUFBVSxNQUFNLFlBQVk7QUFFeEMsZUFBZSxNQUFNQyxjQUFjLENBQUM7RUFDbENDLFdBQVdBLENBQUU7SUFBQ0MsUUFBUTtJQUFFQyxNQUFNO0lBQUVDO0VBQWdCLENBQUMsRUFBRTtJQUNqRCxJQUFJLENBQUNGLFFBQVEsRUFBRSxNQUFNLElBQUlHLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQztJQUV6RCxJQUFJLENBQUNILFFBQVEsR0FBR0EsUUFBUTtJQUN4QixJQUFJLENBQUNFLGdCQUFnQixHQUFHQSxnQkFBZ0I7SUFFeEMsS0FBSyxNQUFNRSxlQUFlLElBQUlSLElBQUksQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLEVBQUU7TUFDdEUsSUFBSVMsaUJBQWlCLEVBQUVDLGdCQUFnQjtNQUV2QyxNQUFNQyxhQUFhLEdBQUdWLFVBQVUsQ0FBQ1csUUFBUSxDQUFDLEdBQUdaLElBQUksQ0FBQ1EsZUFBZSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO01BQ3hGLE1BQU1LLFlBQVksR0FBR1osVUFBVSxDQUFDVyxRQUFRLENBQUMsR0FBR1osSUFBSSxDQUFDUSxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7TUFFdEYsSUFBSUgsTUFBTSxFQUFFO1FBQ1ZJLGlCQUFpQixHQUFHUixVQUFVLENBQUNXLFFBQVEsQ0FBQyxHQUFHWixJQUFJLENBQUNRLGVBQWUsRUFBRSxNQUFNLENBQUMsSUFBSUgsTUFBTSxPQUFPLEVBQUUsSUFBSSxDQUFDO1FBQ2hHSyxnQkFBZ0IsR0FBR1QsVUFBVSxDQUFDVyxRQUFRLENBQUMsR0FBR1osSUFBSSxDQUFDUSxlQUFlLEVBQUUsTUFBTSxDQUFDLElBQUlILE1BQU0sTUFBTSxFQUFFLElBQUksQ0FBQztNQUNoRyxDQUFDLE1BQU07UUFDTEksaUJBQWlCLEdBQUdSLFVBQVUsQ0FBQ1csUUFBUSxDQUFDLEdBQUdaLElBQUksQ0FBQ1EsZUFBZSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO1FBQ3RGRSxnQkFBZ0IsR0FBR1QsVUFBVSxDQUFDVyxRQUFRLENBQUMsR0FBR1osSUFBSSxDQUFDUSxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7TUFDdEY7TUFFQSxJQUFJLEVBQUVDLGlCQUFpQixJQUFJLElBQUksQ0FBQ0wsUUFBUSxDQUFDLEVBQUU7UUFDekMsTUFBTSxJQUFJRyxLQUFLLENBQUMsOEJBQThCRSxpQkFBaUIsS0FBS0ssTUFBTSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDWCxRQUFRLENBQUMsQ0FBQ1ksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7TUFDOUc7TUFFQSxJQUFJLENBQUNMLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBR00sSUFBSSxLQUFLO1FBQ2pDLElBQUlDLGtCQUFrQjtRQUV0QixJQUFJYixNQUFNLEVBQUU7VUFDVmEsa0JBQWtCLEdBQUdqQixVQUFVLENBQUNXLFFBQVEsQ0FBQyxHQUFHWixJQUFJLENBQUNRLGVBQWUsRUFBRSxNQUFNLENBQUMsSUFBSVcsSUFBSSxDQUFDZCxNQUFNLE9BQU8sRUFBRSxJQUFJLENBQUM7UUFDeEcsQ0FBQyxNQUFNO1VBQ0xhLGtCQUFrQixHQUFHUCxhQUFhO1FBQ3BDO1FBRUEsT0FBTyxJQUFJLENBQUNQLFFBQVEsQ0FBQ2Msa0JBQWtCLENBQUMsQ0FBQyxHQUFHRCxJQUFJLENBQUM7TUFDbkQsQ0FBQztNQUVELElBQUksRUFBRVAsZ0JBQWdCLElBQUksSUFBSSxDQUFDTixRQUFRLENBQUMsRUFBRTtRQUN4QyxNQUFNLElBQUlHLEtBQUssQ0FBQyw2QkFBNkJHLGdCQUFnQixLQUFLSSxNQUFNLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUNYLFFBQVEsQ0FBQyxDQUFDWSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztNQUM1RztNQUVBLElBQUksQ0FBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHSSxJQUFJLEtBQUs7UUFDaEMsSUFBSUcsaUJBQWlCO1FBRXJCLElBQUlmLE1BQU0sRUFBRTtVQUNWZSxpQkFBaUIsR0FBR25CLFVBQVUsQ0FBQ1csUUFBUSxDQUFDLEdBQUdaLElBQUksQ0FBQ1EsZUFBZSxFQUFFLE1BQU0sQ0FBQyxJQUFJVyxJQUFJLENBQUNkLE1BQU0sTUFBTSxFQUFFLElBQUksQ0FBQztRQUN0RyxDQUFDLE1BQU07VUFDTGUsaUJBQWlCLEdBQUdQLFlBQVk7UUFDbEM7UUFFQSxPQUFPLElBQUksQ0FBQ1QsUUFBUSxDQUFDZ0IsaUJBQWlCLENBQUMsQ0FBQyxHQUFHSCxJQUFJLENBQUM7TUFDbEQsQ0FBQztJQUNIO0VBQ0Y7QUFDRiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export default class RunLast {
|
|
2
|
+
constructor(callback) {
|
|
3
|
+
if (!callback) throw new Error("Empty callback given");
|
|
4
|
+
this.callback = callback;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// Try to batch calls to backend while waiting for the event-queue-call to clear any other jobs before the request and reset on every flush call
|
|
8
|
+
// If only waiting a single time, then other event-queue-jobs might be before us and queue other jobs that might queue calls to the backend
|
|
9
|
+
queue() {
|
|
10
|
+
this.flushTriggerCount = 0;
|
|
11
|
+
this.clearTimeout();
|
|
12
|
+
this.flushTrigger();
|
|
13
|
+
}
|
|
14
|
+
flushTrigger = () => {
|
|
15
|
+
if (this.flushTriggerCount >= 10) {
|
|
16
|
+
this.run();
|
|
17
|
+
} else {
|
|
18
|
+
this.flushTriggerCount++;
|
|
19
|
+
this.flushTriggerQueue();
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
flushTriggerQueue() {
|
|
23
|
+
this.flushTimeout = setTimeout(this.flushTrigger, 0);
|
|
24
|
+
}
|
|
25
|
+
clearTimeout() {
|
|
26
|
+
if (this.flushTimeout) {
|
|
27
|
+
clearTimeout(this.flushTimeout);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
run() {
|
|
31
|
+
this.clearTimeout();
|
|
32
|
+
this.callback();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSdW5MYXN0IiwiY29uc3RydWN0b3IiLCJjYWxsYmFjayIsIkVycm9yIiwicXVldWUiLCJmbHVzaFRyaWdnZXJDb3VudCIsImNsZWFyVGltZW91dCIsImZsdXNoVHJpZ2dlciIsInJ1biIsImZsdXNoVHJpZ2dlclF1ZXVlIiwiZmx1c2hUaW1lb3V0Iiwic2V0VGltZW91dCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW4tbGFzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBSdW5MYXN0IHtcbiAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICBpZiAoIWNhbGxiYWNrKSB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBjYWxsYmFjayBnaXZlblwiKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gIH1cblxuICAvLyBUcnkgdG8gYmF0Y2ggY2FsbHMgdG8gYmFja2VuZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZXZlbnQtcXVldWUtY2FsbCB0byBjbGVhciBhbnkgb3RoZXIgam9icyBiZWZvcmUgdGhlIHJlcXVlc3QgYW5kIHJlc2V0IG9uIGV2ZXJ5IGZsdXNoIGNhbGxcbiAgLy8gSWYgb25seSB3YWl0aW5nIGEgc2luZ2xlIHRpbWUsIHRoZW4gb3RoZXIgZXZlbnQtcXVldWUtam9icyBtaWdodCBiZSBiZWZvcmUgdXMgYW5kIHF1ZXVlIG90aGVyIGpvYnMgdGhhdCBtaWdodCBxdWV1ZSBjYWxscyB0byB0aGUgYmFja2VuZFxuICBxdWV1ZSgpIHtcbiAgICB0aGlzLmZsdXNoVHJpZ2dlckNvdW50ID0gMFxuICAgIHRoaXMuY2xlYXJUaW1lb3V0KClcbiAgICB0aGlzLmZsdXNoVHJpZ2dlcigpXG4gIH1cblxuICBmbHVzaFRyaWdnZXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZmx1c2hUcmlnZ2VyQ291bnQgPj0gMTApIHtcbiAgICAgIHRoaXMucnVuKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mbHVzaFRyaWdnZXJDb3VudCsrXG4gICAgICB0aGlzLmZsdXNoVHJpZ2dlclF1ZXVlKClcbiAgICB9XG4gIH1cblxuICBmbHVzaFRyaWdnZXJRdWV1ZSgpIHtcbiAgICB0aGlzLmZsdXNoVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5mbHVzaFRyaWdnZXIsIDApXG4gIH1cblxuICBjbGVhclRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMuZmx1c2hUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mbHVzaFRpbWVvdXQpXG4gICAgfVxuICB9XG5cbiAgcnVuKCkge1xuICAgIHRoaXMuY2xlYXJUaW1lb3V0KClcbiAgICB0aGlzLmNhbGxiYWNrKClcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLE1BQU1BLE9BQU8sQ0FBQztFQUMzQkMsV0FBV0EsQ0FBQ0MsUUFBUSxFQUFFO0lBQ3BCLElBQUksQ0FBQ0EsUUFBUSxFQUFFLE1BQU0sSUFBSUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDO0lBRXRELElBQUksQ0FBQ0QsUUFBUSxHQUFHQSxRQUFRO0VBQzFCOztFQUVBO0VBQ0E7RUFDQUUsS0FBS0EsQ0FBQSxFQUFHO0lBQ04sSUFBSSxDQUFDQyxpQkFBaUIsR0FBRyxDQUFDO0lBQzFCLElBQUksQ0FBQ0MsWUFBWSxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDQyxZQUFZLENBQUMsQ0FBQztFQUNyQjtFQUVBQSxZQUFZLEdBQUdBLENBQUEsS0FBTTtJQUNuQixJQUFJLElBQUksQ0FBQ0YsaUJBQWlCLElBQUksRUFBRSxFQUFFO01BQ2hDLElBQUksQ0FBQ0csR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDLE1BQU07TUFDTCxJQUFJLENBQUNILGlCQUFpQixFQUFFO01BQ3hCLElBQUksQ0FBQ0ksaUJBQWlCLENBQUMsQ0FBQztJQUMxQjtFQUNGLENBQUM7RUFFREEsaUJBQWlCQSxDQUFBLEVBQUc7SUFDbEIsSUFBSSxDQUFDQyxZQUFZLEdBQUdDLFVBQVUsQ0FBQyxJQUFJLENBQUNKLFlBQVksRUFBRSxDQUFDLENBQUM7RUFDdEQ7RUFFQUQsWUFBWUEsQ0FBQSxFQUFHO0lBQ2IsSUFBSSxJQUFJLENBQUNJLFlBQVksRUFBRTtNQUNyQkosWUFBWSxDQUFDLElBQUksQ0FBQ0ksWUFBWSxDQUFDO0lBQ2pDO0VBQ0Y7RUFFQUYsR0FBR0EsQ0FBQSxFQUFHO0lBQ0osSUFBSSxDQUFDRixZQUFZLENBQUMsQ0FBQztJQUNuQixJQUFJLENBQUNKLFFBQVEsQ0FBQyxDQUFDO0VBQ2pCO0FBQ0YiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { digg } from "diggerize";
|
|
2
|
+
export default class Serializer {
|
|
3
|
+
static serialize(arg) {
|
|
4
|
+
const serialize = new Serializer(arg);
|
|
5
|
+
return serialize.serialize();
|
|
6
|
+
}
|
|
7
|
+
constructor(arg) {
|
|
8
|
+
this.arg = arg;
|
|
9
|
+
}
|
|
10
|
+
serialize() {
|
|
11
|
+
return this.serializeArgument(this.arg);
|
|
12
|
+
}
|
|
13
|
+
serializeArgument(arg) {
|
|
14
|
+
if (typeof arg == "object" && arg && arg.constructor.apiMakerType == "BaseModel") {
|
|
15
|
+
return {
|
|
16
|
+
api_maker_type: "model",
|
|
17
|
+
model_class_name: digg(arg.modelClassData(), "name"),
|
|
18
|
+
model_id: arg.id()
|
|
19
|
+
};
|
|
20
|
+
} else if (typeof arg == "function" && arg.apiMakerType == "BaseModel") {
|
|
21
|
+
return {
|
|
22
|
+
api_maker_type: "resource",
|
|
23
|
+
name: digg(arg.modelClassData(), "name")
|
|
24
|
+
};
|
|
25
|
+
} else if (arg instanceof Date) {
|
|
26
|
+
let offsetNumber = parseInt(arg.getTimezoneOffset() / 60 * 100, 10);
|
|
27
|
+
offsetNumber = -offsetNumber;
|
|
28
|
+
let offset = `${offsetNumber}`;
|
|
29
|
+
while (offset.length < 4) {
|
|
30
|
+
offset = `0${offset}`;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
api_maker_type: "datetime",
|
|
34
|
+
value: `${arg.getFullYear()}-${arg.getMonth() + 1}-${arg.getDate()} ${arg.getHours()}:${arg.getMinutes()}:${arg.getSeconds()}+${offset}`
|
|
35
|
+
};
|
|
36
|
+
} else if (Array.isArray(arg)) {
|
|
37
|
+
return this.serializeArray(arg);
|
|
38
|
+
} else if (typeof arg == "object" && arg && arg.constructor && arg.constructor.apiMakerType == "Collection") {
|
|
39
|
+
return {
|
|
40
|
+
api_maker_type: "collection",
|
|
41
|
+
value: this.serializeObject(arg)
|
|
42
|
+
};
|
|
43
|
+
} else if (typeof arg == "object" && arg !== null && arg.constructor.name == "Object") {
|
|
44
|
+
return this.serializeObject(arg);
|
|
45
|
+
} else {
|
|
46
|
+
return arg;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
serializeArray(arg) {
|
|
50
|
+
return arg.map(value => this.serializeArgument(value));
|
|
51
|
+
}
|
|
52
|
+
serializeObject(arg) {
|
|
53
|
+
const newObject = {};
|
|
54
|
+
for (const key in arg) {
|
|
55
|
+
const value = arg[key];
|
|
56
|
+
const newValue = this.serializeArgument(value);
|
|
57
|
+
const newKey = this.serializeArgument(key);
|
|
58
|
+
newObject[newKey] = newValue;
|
|
59
|
+
}
|
|
60
|
+
return newObject;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsImFyZyIsImNvbnN0cnVjdG9yIiwic2VyaWFsaXplQXJndW1lbnQiLCJhcGlNYWtlclR5cGUiLCJhcGlfbWFrZXJfdHlwZSIsIm1vZGVsX2NsYXNzX25hbWUiLCJtb2RlbENsYXNzRGF0YSIsIm1vZGVsX2lkIiwiaWQiLCJuYW1lIiwiRGF0ZSIsIm9mZnNldE51bWJlciIsInBhcnNlSW50IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJvZmZzZXQiLCJsZW5ndGgiLCJ2YWx1ZSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsIkFycmF5IiwiaXNBcnJheSIsInNlcmlhbGl6ZUFycmF5Iiwic2VyaWFsaXplT2JqZWN0IiwibWFwIiwibmV3T2JqZWN0Iiwia2V5IiwibmV3VmFsdWUiLCJuZXdLZXkiXSwic291cmNlcyI6WyIuLi9zcmMvc2VyaWFsaXplci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXJpYWxpemVyIHtcbiAgc3RhdGljIHNlcmlhbGl6ZSAoYXJnKSB7XG4gICAgY29uc3Qgc2VyaWFsaXplID0gbmV3IFNlcmlhbGl6ZXIoYXJnKVxuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZS5zZXJpYWxpemUoKVxuICB9XG5cbiAgY29uc3RydWN0b3IgKGFyZykge1xuICAgIHRoaXMuYXJnID0gYXJnXG4gIH1cblxuICBzZXJpYWxpemUgKCkge1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZUFyZ3VtZW50KHRoaXMuYXJnKVxuICB9XG5cbiAgc2VyaWFsaXplQXJndW1lbnQgKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnID09IFwib2JqZWN0XCIgJiYgYXJnICYmIGFyZy5jb25zdHJ1Y3Rvci5hcGlNYWtlclR5cGUgPT0gXCJCYXNlTW9kZWxcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXBpX21ha2VyX3R5cGU6IFwibW9kZWxcIixcbiAgICAgICAgbW9kZWxfY2xhc3NfbmFtZTogZGlnZyhhcmcubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpLFxuICAgICAgICBtb2RlbF9pZDogYXJnLmlkKClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcgPT0gXCJmdW5jdGlvblwiICYmIGFyZy5hcGlNYWtlclR5cGUgPT0gXCJCYXNlTW9kZWxcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXBpX21ha2VyX3R5cGU6IFwicmVzb3VyY2VcIixcbiAgICAgICAgbmFtZTogZGlnZyhhcmcubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBsZXQgb2Zmc2V0TnVtYmVyID0gcGFyc2VJbnQoKGFyZy5nZXRUaW1lem9uZU9mZnNldCgpIC8gNjApICogMTAwLCAxMClcblxuICAgICAgb2Zmc2V0TnVtYmVyID0gLW9mZnNldE51bWJlclxuXG4gICAgICBsZXQgb2Zmc2V0ID0gYCR7b2Zmc2V0TnVtYmVyfWBcblxuICAgICAgd2hpbGUgKG9mZnNldC5sZW5ndGggPCA0KSB7XG4gICAgICAgIG9mZnNldCA9IGAwJHtvZmZzZXR9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcGlfbWFrZXJfdHlwZTogXCJkYXRldGltZVwiLFxuICAgICAgICB2YWx1ZTogYCR7YXJnLmdldEZ1bGxZZWFyKCl9LSR7YXJnLmdldE1vbnRoKCkgKyAxfS0ke2FyZy5nZXREYXRlKCl9ICR7YXJnLmdldEhvdXJzKCl9OiR7YXJnLmdldE1pbnV0ZXMoKX06JHthcmcuZ2V0U2Vjb25kcygpfSske29mZnNldH1gXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZUFycmF5KGFyZylcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcgPT0gXCJvYmplY3RcIiAmJiBhcmcgJiYgYXJnLmNvbnN0cnVjdG9yICYmIGFyZy5jb25zdHJ1Y3Rvci5hcGlNYWtlclR5cGUgPT0gXCJDb2xsZWN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFwaV9tYWtlcl90eXBlOiBcImNvbGxlY3Rpb25cIixcbiAgICAgICAgdmFsdWU6IHRoaXMuc2VyaWFsaXplT2JqZWN0KGFyZylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcgPT0gXCJvYmplY3RcIiAmJiBhcmcgIT09IG51bGwgJiYgYXJnLmNvbnN0cnVjdG9yLm5hbWUgPT0gXCJPYmplY3RcIikge1xuICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplT2JqZWN0KGFyZylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFyZ1xuICAgIH1cbiAgfVxuXG4gIHNlcmlhbGl6ZUFycmF5IChhcmcpIHtcbiAgICByZXR1cm4gYXJnLm1hcCgodmFsdWUpID0+IHRoaXMuc2VyaWFsaXplQXJndW1lbnQodmFsdWUpKVxuICB9XG5cbiAgc2VyaWFsaXplT2JqZWN0IChhcmcpIHtcbiAgICBjb25zdCBuZXdPYmplY3QgPSB7fVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXJnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGFyZ1trZXldXG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuc2VyaWFsaXplQXJndW1lbnQodmFsdWUpXG4gICAgICBjb25zdCBuZXdLZXkgPSB0aGlzLnNlcmlhbGl6ZUFyZ3VtZW50KGtleSlcblxuICAgICAgbmV3T2JqZWN0W25ld0tleV0gPSBuZXdWYWx1ZVxuICAgIH1cblxuICAgIHJldHVybiBuZXdPYmplY3RcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxJQUFJLFFBQU8sV0FBVztBQUU5QixlQUFlLE1BQU1DLFVBQVUsQ0FBQztF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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import CommandsPool from "./commands-pool";
|
|
2
|
+
const shared = {};
|
|
3
|
+
export default class ApiMakerServices {
|
|
4
|
+
static current() {
|
|
5
|
+
if (!shared.currentApiMakerService) shared.currentApiMakerService = new ApiMakerServices();
|
|
6
|
+
return shared.currentApiMakerService;
|
|
7
|
+
}
|
|
8
|
+
sendRequest(serviceName, args) {
|
|
9
|
+
return CommandsPool.addCommand({
|
|
10
|
+
args: {
|
|
11
|
+
service_args: args,
|
|
12
|
+
service_name: serviceName
|
|
13
|
+
},
|
|
14
|
+
command: "services",
|
|
15
|
+
collectionName: "calls",
|
|
16
|
+
type: "service"
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb21tYW5kc1Bvb2wiLCJzaGFyZWQiLCJBcGlNYWtlclNlcnZpY2VzIiwiY3VycmVudCIsImN1cnJlbnRBcGlNYWtlclNlcnZpY2UiLCJzZW5kUmVxdWVzdCIsInNlcnZpY2VOYW1lIiwiYXJncyIsImFkZENvbW1hbmQiLCJzZXJ2aWNlX2FyZ3MiLCJzZXJ2aWNlX25hbWUiLCJjb21tYW5kIiwiY29sbGVjdGlvbk5hbWUiLCJ0eXBlIl0sInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZpY2VzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tYW5kc1Bvb2wgZnJvbSBcIi4vY29tbWFuZHMtcG9vbFwiXG5cbmNvbnN0IHNoYXJlZCA9IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyU2VydmljZXMge1xuICBzdGF0aWMgY3VycmVudCAoKSB7XG4gICAgaWYgKCFzaGFyZWQuY3VycmVudEFwaU1ha2VyU2VydmljZSkgc2hhcmVkLmN1cnJlbnRBcGlNYWtlclNlcnZpY2UgPSBuZXcgQXBpTWFrZXJTZXJ2aWNlcygpXG5cbiAgICByZXR1cm4gc2hhcmVkLmN1cnJlbnRBcGlNYWtlclNlcnZpY2VcbiAgfVxuXG4gIHNlbmRSZXF1ZXN0IChzZXJ2aWNlTmFtZSwgYXJncykge1xuICAgIHJldHVybiBDb21tYW5kc1Bvb2wuYWRkQ29tbWFuZCh7XG4gICAgICBhcmdzOiB7XG4gICAgICAgIHNlcnZpY2VfYXJnczogYXJncyxcbiAgICAgICAgc2VydmljZV9uYW1lOiBzZXJ2aWNlTmFtZVxuICAgICAgfSxcbiAgICAgIGNvbW1hbmQ6IFwic2VydmljZXNcIixcbiAgICAgIGNvbGxlY3Rpb25OYW1lOiBcImNhbGxzXCIsXG4gICAgICB0eXBlOiBcInNlcnZpY2VcIlxuICAgIH0pXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxNQUFNLGlCQUFpQjtBQUUxQyxNQUFNQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWpCLGVBQWUsTUFBTUMsZ0JBQWdCLENBQUM7RUFDcEMsT0FBT0MsT0FBT0EsQ0FBQSxFQUFJO0lBQ2hCLElBQUksQ0FBQ0YsTUFBTSxDQUFDRyxzQkFBc0IsRUFBRUgsTUFBTSxDQUFDRyxzQkFBc0IsR0FBRyxJQUFJRixnQkFBZ0IsQ0FBQyxDQUFDO0lBRTFGLE9BQU9ELE1BQU0sQ0FBQ0csc0JBQXNCO0VBQ3RDO0VBRUFDLFdBQVdBLENBQUVDLFdBQVcsRUFBRUMsSUFBSSxFQUFFO0lBQzlCLE9BQU9QLFlBQVksQ0FBQ1EsVUFBVSxDQUFDO01BQzdCRCxJQUFJLEVBQUU7UUFDSkUsWUFBWSxFQUFFRixJQUFJO1FBQ2xCRyxZQUFZLEVBQUVKO01BQ2hCLENBQUM7TUFDREssT0FBTyxFQUFFLFVBQVU7TUFDbkJDLGNBQWMsRUFBRSxPQUFPO01BQ3ZCQyxJQUFJLEVBQUU7SUFDUixDQUFDLENBQUM7RUFDSjtBQUNGIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import config from "./config";
|
|
2
|
+
import Devise from "./devise";
|
|
3
|
+
import * as inflection from "inflection";
|
|
4
|
+
import Logger from "./logger";
|
|
5
|
+
import wakeEvent from "wake-event";
|
|
6
|
+
const logger = new Logger({
|
|
7
|
+
name: "ApiMaker / SessionStatusUpdater"
|
|
8
|
+
});
|
|
9
|
+
const shared = {};
|
|
10
|
+
|
|
11
|
+
// logger.setDebug(true)
|
|
12
|
+
|
|
13
|
+
export default class ApiMakerSessionStatusUpdater {
|
|
14
|
+
static current(args) {
|
|
15
|
+
if (!shared.apiMakerSessionStatusUpdater) {
|
|
16
|
+
shared.apiMakerSessionStatusUpdater = new ApiMakerSessionStatusUpdater(args);
|
|
17
|
+
}
|
|
18
|
+
return shared.apiMakerSessionStatusUpdater;
|
|
19
|
+
}
|
|
20
|
+
constructor(args = {}) {
|
|
21
|
+
this.events = {};
|
|
22
|
+
this.timeout = args.timeout || 600000;
|
|
23
|
+
this.useMetaElement = "useMetaElement" in args ? args.useMetaElement : true;
|
|
24
|
+
this.connectOnlineEvent();
|
|
25
|
+
this.connectWakeEvent();
|
|
26
|
+
}
|
|
27
|
+
connectOnlineEvent() {
|
|
28
|
+
window.addEventListener("online", this.updateSessionStatus, false);
|
|
29
|
+
}
|
|
30
|
+
connectWakeEvent() {
|
|
31
|
+
wakeEvent(this.updateSessionStatus);
|
|
32
|
+
}
|
|
33
|
+
async getCsrfToken() {
|
|
34
|
+
if (this.csrfToken) {
|
|
35
|
+
logger.debug(`Get CSRF token from set variable: ${this.csrfToken}`);
|
|
36
|
+
return this.csrfToken;
|
|
37
|
+
}
|
|
38
|
+
if (this.useMetaElement) {
|
|
39
|
+
const csrfTokenElement = document.querySelector("meta[name='csrf-token']");
|
|
40
|
+
if (csrfTokenElement) {
|
|
41
|
+
logger.debug(() => `Get CSRF token from meta element: ${csrfTokenElement.getAttribute("content")}`);
|
|
42
|
+
this.csrfToken = csrfTokenElement.getAttribute("content");
|
|
43
|
+
return this.csrfToken;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
logger.debug("Updating session status because no CSRF token set yet");
|
|
47
|
+
await this.updateSessionStatus();
|
|
48
|
+
if (this.csrfToken) {
|
|
49
|
+
logger.debug(() => `Returning CSRF token after updating session status: ${this.csrfToken}`);
|
|
50
|
+
return this.csrfToken;
|
|
51
|
+
}
|
|
52
|
+
throw new Error("CSRF token hasn't been set");
|
|
53
|
+
}
|
|
54
|
+
sessionStatus() {
|
|
55
|
+
return new Promise(resolve => {
|
|
56
|
+
const host = config.getHost();
|
|
57
|
+
let requestPath = "";
|
|
58
|
+
if (host) requestPath += host;
|
|
59
|
+
requestPath += "/api_maker/session_statuses";
|
|
60
|
+
const xhr = new XMLHttpRequest();
|
|
61
|
+
xhr.open("POST", requestPath, true);
|
|
62
|
+
xhr.onload = () => {
|
|
63
|
+
const response = JSON.parse(xhr.responseText);
|
|
64
|
+
resolve(response);
|
|
65
|
+
};
|
|
66
|
+
xhr.send();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
onSignedOut(callback) {
|
|
70
|
+
this.addEvent("onSignedOut", callback);
|
|
71
|
+
}
|
|
72
|
+
startTimeout() {
|
|
73
|
+
logger.debug("startTimeout");
|
|
74
|
+
if (this.updateTimeout) clearTimeout(this.updateTimeout);
|
|
75
|
+
this.updateTimeout = setTimeout(() => {
|
|
76
|
+
this.startTimeout();
|
|
77
|
+
this.updateSessionStatus();
|
|
78
|
+
}, this.timeout);
|
|
79
|
+
}
|
|
80
|
+
stopTimeout() {
|
|
81
|
+
if (this.updateTimeout) clearTimeout(this.updateTimeout);
|
|
82
|
+
}
|
|
83
|
+
updateSessionStatus = async () => {
|
|
84
|
+
logger.debug("updateSessionStatus");
|
|
85
|
+
const result = await this.sessionStatus();
|
|
86
|
+
logger.debug(() => `Result: ${JSON.stringify(result, null, 2)}`);
|
|
87
|
+
this.updateMetaElementsFromResult(result);
|
|
88
|
+
this.updateUserSessionsFromResult(result);
|
|
89
|
+
};
|
|
90
|
+
updateMetaElementsFromResult(result) {
|
|
91
|
+
logger.debug("updateMetaElementsFromResult");
|
|
92
|
+
this.csrfToken = result.csrf_token;
|
|
93
|
+
if (this.useMetaElement) {
|
|
94
|
+
const csrfTokenElement = document.querySelector("meta[name='csrf-token']");
|
|
95
|
+
if (csrfTokenElement) {
|
|
96
|
+
logger.debug(() => `Changing token from "${csrfTokenElement.getAttribute("content")}" to "${result.csrf_token}"`);
|
|
97
|
+
csrfTokenElement.setAttribute("content", result.csrf_token);
|
|
98
|
+
} else {
|
|
99
|
+
logger.debug("csrf token element couldn't be found");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
updateUserSessionsFromResult(result) {
|
|
104
|
+
for (const scopeName in result.scopes) {
|
|
105
|
+
this.updateUserSessionScopeFromResult(scopeName, result.scopes[scopeName]);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
updateUserSessionScopeFromResult(scopeName, scope) {
|
|
109
|
+
const deviseIsSignedInMethodName = `is${inflection.camelize(scopeName)}SignedIn`;
|
|
110
|
+
if (!(deviseIsSignedInMethodName in Devise)) {
|
|
111
|
+
throw new Error(`No such method in Devise: ${deviseIsSignedInMethodName}`);
|
|
112
|
+
}
|
|
113
|
+
const currentlySignedIn = Devise[deviseIsSignedInMethodName]();
|
|
114
|
+
const signedInOnBackend = scope.signed_in;
|
|
115
|
+
if (currentlySignedIn && !signedInOnBackend) {
|
|
116
|
+
logger.debug(() => `${inflection.camelize(scopeName)} signed in on frontend but not in backend!`);
|
|
117
|
+
Devise.setSignedOut({
|
|
118
|
+
scope: scopeName
|
|
119
|
+
});
|
|
120
|
+
Devise.callSignOutEvent({
|
|
121
|
+
scope: scopeName
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb25maWciLCJEZXZpc2UiLCJpbmZsZWN0aW9uIiwiTG9nZ2VyIiwid2FrZUV2ZW50IiwibG9nZ2VyIiwibmFtZSIsInNoYXJlZCIsIkFwaU1ha2VyU2Vzc2lvblN0YXR1c1VwZGF0ZXIiLCJjdXJyZW50IiwiYXJncyIsImFwaU1ha2VyU2Vzc2lvblN0YXR1c1VwZGF0ZXIiLCJjb25zdHJ1Y3RvciIsImV2ZW50cyIsInRpbWVvdXQiLCJ1c2VNZXRhRWxlbWVudCIsImNvbm5lY3RPbmxpbmVFdmVudCIsImNvbm5lY3RXYWtlRXZlbnQiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwidXBkYXRlU2Vzc2lvblN0YXR1cyIsImdldENzcmZUb2tlbiIsImNzcmZUb2tlbiIsImRlYnVnIiwiY3NyZlRva2VuRWxlbWVudCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsIkVycm9yIiwic2Vzc2lvblN0YXR1cyIsIlByb21pc2UiLCJyZXNvbHZlIiwiaG9zdCIsImdldEhvc3QiLCJyZXF1ZXN0UGF0aCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ubG9hZCIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic2VuZCIsIm9uU2lnbmVkT3V0IiwiY2FsbGJhY2siLCJhZGRFdmVudCIsInN0YXJ0VGltZW91dCIsInVwZGF0ZVRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwic3RvcFRpbWVvdXQiLCJyZXN1bHQiLCJzdHJpbmdpZnkiLCJ1cGRhdGVNZXRhRWxlbWVudHNGcm9tUmVzdWx0IiwidXBkYXRlVXNlclNlc3Npb25zRnJvbVJlc3VsdCIsImNzcmZfdG9rZW4iLCJzZXRBdHRyaWJ1dGUiLCJzY29wZU5hbWUiLCJzY29wZXMiLCJ1cGRhdGVVc2VyU2Vzc2lvblNjb3BlRnJvbVJlc3VsdCIsInNjb3BlIiwiZGV2aXNlSXNTaWduZWRJbk1ldGhvZE5hbWUiLCJjYW1lbGl6ZSIsImN1cnJlbnRseVNpZ25lZEluIiwic2lnbmVkSW5PbkJhY2tlbmQiLCJzaWduZWRfaW4iLCJzZXRTaWduZWRPdXQiLCJjYWxsU2lnbk91dEV2ZW50Il0sInNvdXJjZXMiOlsiLi4vc3JjL3Nlc3Npb24tc3RhdHVzLXVwZGF0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi9jb25maWdcIlxuaW1wb3J0IERldmlzZSBmcm9tIFwiLi9kZXZpc2VcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiXG5pbXBvcnQgd2FrZUV2ZW50IGZyb20gXCJ3YWtlLWV2ZW50XCJcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcih7bmFtZTogXCJBcGlNYWtlciAvIFNlc3Npb25TdGF0dXNVcGRhdGVyXCJ9KVxuY29uc3Qgc2hhcmVkID0ge31cblxuLy8gbG9nZ2VyLnNldERlYnVnKHRydWUpXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyU2Vzc2lvblN0YXR1c1VwZGF0ZXIge1xuICBzdGF0aWMgY3VycmVudChhcmdzKSB7XG4gICAgaWYgKCFzaGFyZWQuYXBpTWFrZXJTZXNzaW9uU3RhdHVzVXBkYXRlcikge1xuICAgICAgc2hhcmVkLmFwaU1ha2VyU2Vzc2lvblN0YXR1c1VwZGF0ZXIgPSBuZXcgQXBpTWFrZXJTZXNzaW9uU3RhdHVzVXBkYXRlcihhcmdzKVxuICAgIH1cblxuICAgIHJldHVybiBzaGFyZWQuYXBpTWFrZXJTZXNzaW9uU3RhdHVzVXBkYXRlclxuICB9XG5cbiAgY29uc3RydWN0b3IoYXJncyA9IHt9KSB7XG4gICAgdGhpcy5ldmVudHMgPSB7fVxuICAgIHRoaXMudGltZW91dCA9IGFyZ3MudGltZW91dCB8fCA2MDAwMDBcbiAgICB0aGlzLnVzZU1ldGFFbGVtZW50ID0gKFwidXNlTWV0YUVsZW1lbnRcIiBpbiBhcmdzKSA/IGFyZ3MudXNlTWV0YUVsZW1lbnQgOiB0cnVlXG5cbiAgICB0aGlzLmNvbm5lY3RPbmxpbmVFdmVudCgpXG4gICAgdGhpcy5jb25uZWN0V2FrZUV2ZW50KClcbiAgfVxuXG4gIGNvbm5lY3RPbmxpbmVFdmVudCgpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLnVwZGF0ZVNlc3Npb25TdGF0dXMsIGZhbHNlKVxuICB9XG5cbiAgY29ubmVjdFdha2VFdmVudCgpIHtcbiAgICB3YWtlRXZlbnQodGhpcy51cGRhdGVTZXNzaW9uU3RhdHVzKVxuICB9XG5cbiAgYXN5bmMgZ2V0Q3NyZlRva2VuKCkge1xuICAgIGlmICh0aGlzLmNzcmZUb2tlbikge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBHZXQgQ1NSRiB0b2tlbiBmcm9tIHNldCB2YXJpYWJsZTogJHt0aGlzLmNzcmZUb2tlbn1gKVxuXG4gICAgICByZXR1cm4gdGhpcy5jc3JmVG9rZW5cbiAgICB9XG5cbiAgICBpZiAodGhpcy51c2VNZXRhRWxlbWVudCkge1xuICAgICAgY29uc3QgY3NyZlRva2VuRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J2NzcmYtdG9rZW4nXVwiKVxuXG4gICAgICBpZiAoY3NyZlRva2VuRWxlbWVudCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoKCkgPT4gYEdldCBDU1JGIHRva2VuIGZyb20gbWV0YSBlbGVtZW50OiAke2NzcmZUb2tlbkVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKX1gKVxuXG4gICAgICAgIHRoaXMuY3NyZlRva2VuID0gY3NyZlRva2VuRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY3NyZlRva2VuXG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFwiVXBkYXRpbmcgc2Vzc2lvbiBzdGF0dXMgYmVjYXVzZSBubyBDU1JGIHRva2VuIHNldCB5ZXRcIilcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVNlc3Npb25TdGF0dXMoKVxuXG4gICAgaWYgKHRoaXMuY3NyZlRva2VuKSB7XG4gICAgICBsb2dnZXIuZGVidWcoKCkgPT4gYFJldHVybmluZyBDU1JGIHRva2VuIGFmdGVyIHVwZGF0aW5nIHNlc3Npb24gc3RhdHVzOiAke3RoaXMuY3NyZlRva2VufWApXG5cbiAgICAgIHJldHVybiB0aGlzLmNzcmZUb2tlblxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIkNTUkYgdG9rZW4gaGFzbid0IGJlZW4gc2V0XCIpXG4gIH1cblxuICBzZXNzaW9uU3RhdHVzKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgaG9zdCA9IGNvbmZpZy5nZXRIb3N0KClcbiAgICAgIGxldCByZXF1ZXN0UGF0aCA9IFwiXCJcblxuICAgICAgaWYgKGhvc3QpIHJlcXVlc3RQYXRoICs9IGhvc3RcblxuICAgICAgcmVxdWVzdFBhdGggKz0gXCIvYXBpX21ha2VyL3Nlc3Npb25fc3RhdHVzZXNcIlxuXG4gICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIHJlcXVlc3RQYXRoLCB0cnVlKVxuICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpXG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpXG4gICAgICB9XG4gICAgICB4aHIuc2VuZCgpXG4gICAgfSlcbiAgfVxuXG4gIG9uU2lnbmVkT3V0KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hZGRFdmVudChcIm9uU2lnbmVkT3V0XCIsIGNhbGxiYWNrKVxuICB9XG5cbiAgc3RhcnRUaW1lb3V0KCkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInN0YXJ0VGltZW91dFwiKVxuXG4gICAgaWYgKHRoaXMudXBkYXRlVGltZW91dClcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnVwZGF0ZVRpbWVvdXQpXG5cbiAgICB0aGlzLnVwZGF0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnN0YXJ0VGltZW91dCgpXG4gICAgICAgIHRoaXMudXBkYXRlU2Vzc2lvblN0YXR1cygpXG4gICAgICB9LFxuICAgICAgdGhpcy50aW1lb3V0XG4gICAgKVxuICB9XG5cbiAgc3RvcFRpbWVvdXQoKSB7XG4gICAgaWYgKHRoaXMudXBkYXRlVGltZW91dClcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnVwZGF0ZVRpbWVvdXQpXG4gIH1cblxuICB1cGRhdGVTZXNzaW9uU3RhdHVzID0gYXN5bmMgKCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInVwZGF0ZVNlc3Npb25TdGF0dXNcIilcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2Vzc2lvblN0YXR1cygpXG5cbiAgICBsb2dnZXIuZGVidWcoKCkgPT4gYFJlc3VsdDogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpfWApXG4gICAgdGhpcy51cGRhdGVNZXRhRWxlbWVudHNGcm9tUmVzdWx0KHJlc3VsdClcbiAgICB0aGlzLnVwZGF0ZVVzZXJTZXNzaW9uc0Zyb21SZXN1bHQocmVzdWx0KVxuICB9XG5cbiAgdXBkYXRlTWV0YUVsZW1lbnRzRnJvbVJlc3VsdChyZXN1bHQpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJ1cGRhdGVNZXRhRWxlbWVudHNGcm9tUmVzdWx0XCIpXG5cbiAgICB0aGlzLmNzcmZUb2tlbiA9IHJlc3VsdC5jc3JmX3Rva2VuXG5cbiAgICBpZiAodGhpcy51c2VNZXRhRWxlbWVudCkge1xuICAgICAgY29uc3QgY3NyZlRva2VuRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J2NzcmYtdG9rZW4nXVwiKVxuXG4gICAgICBpZiAoY3NyZlRva2VuRWxlbWVudCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoKCkgPT4gYENoYW5naW5nIHRva2VuIGZyb20gXCIke2NzcmZUb2tlbkVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKX1cIiB0byBcIiR7cmVzdWx0LmNzcmZfdG9rZW59XCJgKVxuICAgICAgICBjc3JmVG9rZW5FbGVtZW50LnNldEF0dHJpYnV0ZShcImNvbnRlbnRcIiwgcmVzdWx0LmNzcmZfdG9rZW4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJjc3JmIHRva2VuIGVsZW1lbnQgY291bGRuJ3QgYmUgZm91bmRcIilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVVc2VyU2Vzc2lvbnNGcm9tUmVzdWx0KHJlc3VsdCkge1xuICAgIGZvciAoY29uc3Qgc2NvcGVOYW1lIGluIHJlc3VsdC5zY29wZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlclNlc3Npb25TY29wZUZyb21SZXN1bHQoc2NvcGVOYW1lLCByZXN1bHQuc2NvcGVzW3Njb3BlTmFtZV0pXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVXNlclNlc3Npb25TY29wZUZyb21SZXN1bHQoc2NvcGVOYW1lLCBzY29wZSkge1xuICAgIGNvbnN0IGRldmlzZUlzU2lnbmVkSW5NZXRob2ROYW1lID0gYGlzJHtpbmZsZWN0aW9uLmNhbWVsaXplKHNjb3BlTmFtZSl9U2lnbmVkSW5gXG5cbiAgICBpZiAoIShkZXZpc2VJc1NpZ25lZEluTWV0aG9kTmFtZSBpbiBEZXZpc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggbWV0aG9kIGluIERldmlzZTogJHtkZXZpc2VJc1NpZ25lZEluTWV0aG9kTmFtZX1gKVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRseVNpZ25lZEluID0gRGV2aXNlW2RldmlzZUlzU2lnbmVkSW5NZXRob2ROYW1lXSgpXG4gICAgY29uc3Qgc2lnbmVkSW5PbkJhY2tlbmQgPSBzY29wZS5zaWduZWRfaW5cblxuICAgIGlmIChjdXJyZW50bHlTaWduZWRJbiAmJiAhc2lnbmVkSW5PbkJhY2tlbmQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygoKSA9PiBgJHtpbmZsZWN0aW9uLmNhbWVsaXplKHNjb3BlTmFtZSl9IHNpZ25lZCBpbiBvbiBmcm9udGVuZCBidXQgbm90IGluIGJhY2tlbmQhYClcblxuICAgICAgRGV2aXNlLnNldFNpZ25lZE91dCh7c2NvcGU6IHNjb3BlTmFtZX0pXG4gICAgICBEZXZpc2UuY2FsbFNpZ25PdXRFdmVudCh7c2NvcGU6IHNjb3BlTmFtZX0pXG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sTUFBTSxVQUFVO0FBQzdCLE9BQU9DLE1BQU0sTUFBTSxVQUFVO0FBQzdCLE9BQU8sS0FBS0MsVUFBVSxNQUFNLFlBQVk7QUFDeEMsT0FBT0MsTUFBTSxNQUFNLFVBQVU7QUFDN0IsT0FBT0MsU0FBUyxNQUFNLFlBQVk7QUFFbEMsTUFBTUMsTUFBTSxHQUFHLElBQUlGLE1BQU0sQ0FBQztFQUFDRyxJQUFJLEVBQUU7QUFBaUMsQ0FBQyxDQUFDO0FBQ3BFLE1BQU1DLE1BQU0sR0FBRyxDQUFDLENBQUM7O0FBRWpCOztBQUVBLGVBQWUsTUFBTUMsNEJBQTRCLENBQUM7RUFDaEQsT0FBT0MsT0FBT0EsQ0FBQ0MsSUFBSSxFQUFFO0lBQ25CLElBQUksQ0FBQ0gsTUFBTSxDQUFDSSw0QkFBNEIsRUFBRTtNQUN4Q0osTUFBTSxDQUFDSSw0QkFBNEIsR0FBRyxJQUFJSCw0QkFBNEIsQ0FBQ0UsSUFBSSxDQUFDO0lBQzlFO0lBRUEsT0FBT0gsTUFBTSxDQUFDSSw0QkFBNEI7RUFDNUM7RUFFQUMsV0FBV0EsQ0FBQ0YsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3JCLElBQUksQ0FBQ0csTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUNDLE9BQU8sR0FBR0osSUFBSSxDQUFDSSxPQUFPLElBQUksTUFBTTtJQUNyQyxJQUFJLENBQUNDLGNBQWMsR0FBSSxnQkFBZ0IsSUFBSUwsSUFBSSxHQUFJQSxJQUFJLENBQUNLLGNBQWMs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
|