@kaspernj/api-maker 1.0.2011 → 1.0.2013
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} +10 -1
- 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.js +135 -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 +129 -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 +131 -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 +9 -0
- package/build/collection-loader.js +48 -0
- package/build/collection.js +280 -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 +62 -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 +112 -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-emitter-listener.js +15 -0
- package/build/event-model-class.js +24 -0
- package/build/events.js +5 -0
- package/build/flash-message.js +79 -0
- package/build/form.js +83 -0
- package/build/history-expo.js +20 -0
- package/build/history-react-native.js +20 -0
- package/build/history.js +3 -0
- package/build/index.js +3 -0
- package/build/inputs/attachment.js +133 -0
- package/build/inputs/auto-submit.js +36 -0
- package/build/inputs/checkbox.js +138 -0
- package/build/inputs/checkboxes.js +112 -0
- package/build/inputs/id-for-component.js +15 -0
- package/build/inputs/input-wrapper.js +19 -0
- package/build/inputs/input.js +243 -0
- package/build/inputs/money.js +179 -0
- package/build/inputs/name-for-component.js +13 -0
- package/build/inputs/select.js +93 -0
- package/build/instance-of-class-name.js +23 -0
- package/build/is-expo.js +22 -0
- package/build/key-value-store.js +53 -0
- package/build/link.js +73 -0
- package/build/logger.js +30 -0
- package/build/modal.js +38 -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 +78 -0
- package/build/not-loaded-error.js +2 -0
- package/build/params.js +61 -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 +270 -0
- package/build/router/switch.js +72 -0
- package/build/router.js +59 -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 +134 -0
- package/build/source-maps-loader.js +184 -0
- package/build/super-admin/config-reader.js +85 -0
- package/build/super-admin/edit-page/edit-attribute-checkbox.js +85 -0
- package/build/super-admin/edit-page/edit-attribute-content.js +55 -0
- package/build/super-admin/edit-page/edit-attribute-input.js +79 -0
- package/build/super-admin/edit-page/edit-attribute.js +77 -0
- package/build/super-admin/edit-page.js +123 -0
- package/build/super-admin/has-edit-config.js +12 -0
- package/build/super-admin/index-page.js +25 -0
- package/build/super-admin/index.js +181 -0
- package/build/super-admin/layout/header/index.js +161 -0
- package/build/super-admin/layout/index.js +164 -0
- package/build/super-admin/layout/menu/index.js +206 -0
- package/build/super-admin/layout/menu/menu-content.js +46 -0
- package/build/super-admin/layout/menu/menu-item.js +84 -0
- package/build/super-admin/layout/no-access.js +27 -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 +51 -0
- package/build/super-admin/show-page/belongs-to-attribute-row.js +29 -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 +48 -0
- package/build/super-admin/show-reflection-page.js +48 -0
- package/build/table/column-content.js +117 -0
- package/build/table/column-identifier.js +18 -0
- package/build/table/column-visible.js +7 -0
- package/build/table/components/column.js +21 -0
- package/build/table/components/flat-list.js +21 -0
- package/build/table/components/header.js +26 -0
- package/build/table/components/row.js +26 -0
- package/build/table/filters/attribute-element.js +44 -0
- package/build/table/filters/filter-form.js +402 -0
- package/build/table/filters/filter.js +90 -0
- package/build/table/filters/index.js +184 -0
- package/build/table/filters/load-search-modal.js +175 -0
- package/build/table/filters/reflection-element.js +37 -0
- package/build/table/filters/save-search-modal.js +88 -0
- package/build/table/filters/scope-element.js +42 -0
- package/build/table/header-column-content.js +68 -0
- package/build/table/header-column.js +144 -0
- package/build/table/header-select.js +105 -0
- package/build/table/model-callback-args.js +10 -0
- package/build/table/model-column.js +97 -0
- package/build/table/model-row.js +193 -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 +79 -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 +12 -0
- package/build/updated-attribute.js +76 -0
- package/build/url-encode.js +15 -0
- package/build/use-breakpoint.js +71 -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 +76 -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 +137 -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 +104 -0
- package/build/use-screen-layout.js +39 -0
- package/build/use-styles.js +41 -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 +78 -0
- package/build/utils/checkboxes.js +163 -0
- package/build/utils/default-style.js +18 -0
- package/build/utils/icon.js +23 -0
- package/build/utils/invalid-feedback.js +19 -0
- package/build/utils/modal.js +62 -0
- package/build/utils/text.js +44 -0
- package/build/validation-error.js +28 -0
- package/build/validation-errors.js +98 -0
- package/build/with-api-maker.js +29 -0
- package/build/with-collection.js +14 -0
- package/build/with-current-user.js +10 -0
- package/build/with-model.js +15 -0
- package/build/with-router.js +22 -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 +49 -46
- package/src/{api.mjs → api.js} +38 -37
- package/src/base-component.jsx +5 -0
- package/src/{base-error.mjs → base-error.js} +4 -6
- package/src/base-model/attribute.js +33 -0
- package/src/base-model/column.js +13 -0
- package/src/base-model/reflection.js +15 -0
- package/src/base-model/scope.js +12 -0
- package/src/{base-model.mjs → base-model.js} +302 -144
- package/src/bootstrap/attribute-row.jsx +135 -0
- package/src/bootstrap/attribute-rows.jsx +27 -0
- package/src/bootstrap/card.jsx +149 -0
- package/src/bootstrap/checkbox.jsx +86 -0
- package/src/bootstrap/checkboxes.jsx +185 -0
- package/src/bootstrap/index.js +0 -0
- package/src/bootstrap/input.jsx +173 -0
- package/src/bootstrap/invalid-feedback.jsx +31 -0
- package/src/bootstrap/paginate.jsx +187 -0
- package/src/bootstrap/radio-buttons.jsx +87 -0
- package/src/bootstrap/select.jsx +110 -0
- package/src/bootstrap/sort-link.jsx +106 -0
- package/src/{cable-connection-pool.mjs → cable-connection-pool.js} +16 -36
- package/src/{cable-subscription-pool.mjs → cable-subscription-pool.js} +26 -21
- package/src/{cable-subscription.mjs → cable-subscription.js} +6 -4
- package/src/cache-key-generator.js +100 -0
- package/src/{can-can.mjs → can-can.js} +13 -12
- package/src/channels-consumer.js +10 -0
- package/src/collection-loader.jsx +58 -224
- package/src/{collection.mjs → collection.js} +98 -44
- package/src/{command-submit-data.mjs → command-submit-data.js} +2 -7
- package/src/{commands-pool.mjs → commands-pool.js} +57 -41
- package/src/compose.js +11 -0
- package/src/{config.mjs → config.js} +6 -2
- package/src/{custom-error.mjs → custom-error.js} +1 -1
- package/src/data-set-to-attributes.js +13 -0
- package/src/{deserializer.mjs → deserializer.js} +3 -3
- package/src/destroy-error.js +7 -0
- package/src/devise.js +129 -0
- package/src/draggable-sort/controller.js +137 -0
- package/src/draggable-sort/index.jsx +108 -0
- package/src/draggable-sort/item.jsx +174 -0
- package/src/{error-logger.mjs → error-logger.js} +12 -7
- package/src/{error-messages.mjs → error-messages.js} +1 -0
- package/src/event-connection.jsx +1 -1
- package/src/event-emitter-listener.jsx +8 -27
- package/src/event-model-class.jsx +2 -4
- package/src/events.js +7 -0
- package/src/flash-message.js +70 -0
- package/src/form.jsx +91 -0
- package/src/history-expo.js +23 -0
- package/src/history-react-native.js +25 -0
- package/src/history.js +3 -0
- package/src/index.js +3 -0
- package/src/inputs/attachment.jsx +108 -0
- package/src/inputs/auto-submit.js +37 -0
- package/src/inputs/checkbox.jsx +125 -0
- package/src/inputs/checkboxes.jsx +116 -0
- package/src/inputs/id-for-component.js +15 -0
- package/src/inputs/input-wrapper.jsx +16 -0
- package/src/inputs/input.jsx +260 -0
- package/src/inputs/money.jsx +187 -0
- package/src/inputs/name-for-component.js +15 -0
- package/src/inputs/select.jsx +104 -0
- package/src/is-expo.js +18 -0
- package/src/{key-value-store.mjs → key-value-store.js} +1 -1
- package/src/link.jsx +54 -9
- package/src/logger.js +38 -0
- package/src/modal.jsx +37 -0
- package/src/model-class-require.js +17 -0
- package/src/{model-events.mjs → model-events.js} +1 -1
- package/src/{model-name.mjs → model-name.js} +8 -8
- package/src/{model-recipes-loader.mjs → model-recipes-loader.js} +1 -1
- package/src/{model-recipes-model-loader.mjs → model-recipes-model-loader.js} +5 -5
- package/src/{models-response-reader.mjs → models-response-reader.js} +3 -4
- package/src/models.js +7 -0
- package/src/{models.mjs.erb → models.js.erb} +6 -3
- package/src/{money-formatter.mjs → money-formatter.js} +5 -4
- package/src/{params.mjs → params.js} +17 -7
- package/src/{preloaded.mjs → preloaded.js} +2 -2
- package/src/resize-observer.jsx +10 -0
- package/src/result.js +13 -0
- package/src/router/route.jsx +246 -0
- package/src/router/switch.jsx +76 -0
- package/src/router.jsx +23 -21
- package/src/{routes-native.mjs → routes-native.js} +12 -6
- package/src/{routes.mjs → routes.js} +1 -1
- package/src/run-last.js +39 -0
- package/src/{serializer.mjs → serializer.js} +2 -2
- package/src/{services.mjs → services.js} +1 -1
- package/src/session-status-updater.js +172 -0
- package/src/{source-maps-loader.mjs → source-maps-loader.js} +54 -28
- package/src/super-admin/config-reader.jsx +93 -0
- package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +81 -0
- package/src/super-admin/edit-page/edit-attribute-content.jsx +57 -0
- package/src/super-admin/edit-page/edit-attribute-input.jsx +71 -0
- package/src/super-admin/edit-page/edit-attribute.jsx +81 -0
- package/src/super-admin/edit-page.jsx +117 -0
- package/src/super-admin/has-edit-config.js +15 -0
- package/src/super-admin/index-page.jsx +23 -0
- package/src/super-admin/index.jsx +197 -0
- package/src/super-admin/layout/header/index.jsx +144 -0
- package/src/super-admin/layout/header/style.scss +45 -0
- package/src/super-admin/layout/index.jsx +154 -0
- package/src/super-admin/layout/menu/index.jsx +171 -0
- package/src/super-admin/layout/menu/menu-content.jsx +43 -0
- package/src/super-admin/layout/menu/menu-item.jsx +70 -0
- package/src/super-admin/layout/menu/style.scss +11 -0
- package/src/super-admin/layout/no-access.jsx +26 -0
- package/src/super-admin/model-class-table.jsx +66 -0
- package/src/super-admin/models.js +11 -0
- package/src/super-admin/show-nav.jsx +44 -0
- package/src/super-admin/show-page/belongs-to-attribute-row.jsx +30 -0
- package/src/super-admin/show-page/index.jsx +141 -0
- package/src/super-admin/show-reflection-actions.jsx +49 -0
- package/src/super-admin/show-reflection-link.jsx +40 -0
- package/src/super-admin/show-reflection-page.jsx +47 -0
- package/src/super-admin/stylesheets/variables.scss +11 -0
- package/src/table/column-content.jsx +122 -0
- package/src/table/column-identifier.js +23 -0
- package/src/table/column-visible.js +7 -0
- package/src/table/components/column.jsx +19 -0
- package/src/table/components/flat-list.jsx +19 -0
- package/src/table/components/header.jsx +21 -0
- package/src/table/components/row.jsx +23 -0
- package/src/table/filters/attribute-element.jsx +47 -0
- package/src/table/filters/filter-form.jsx +407 -0
- package/src/table/filters/filter.jsx +70 -0
- package/src/table/filters/index.jsx +170 -0
- package/src/table/filters/load-search-modal.jsx +146 -0
- package/src/table/filters/reflection-element.jsx +38 -0
- package/src/table/filters/save-search-modal.jsx +74 -0
- package/src/table/filters/scope-element.jsx +44 -0
- package/src/table/header-column-content.jsx +55 -0
- package/src/table/header-column.jsx +129 -0
- package/src/table/header-select.jsx +73 -0
- package/src/table/model-callback-args.js +10 -0
- package/src/table/model-column.jsx +82 -0
- package/src/table/model-row.jsx +136 -0
- package/src/table/select-calculator.js +65 -0
- package/src/table/settings/column-row.jsx +93 -0
- package/src/table/settings/download-action.jsx +68 -0
- package/src/table/settings/index.jsx +65 -0
- package/src/table/table-settings.js +263 -0
- package/src/table/table.jsx +950 -0
- package/src/table/use-sorting.js +35 -0
- package/src/table/variables.scss +11 -0
- package/src/table/widths.jsx +87 -0
- package/src/table/worker-plugins-check-all-checkbox.jsx +112 -0
- package/src/table/worker-plugins-checkbox.jsx +104 -0
- package/src/translated-attributes.js +11 -0
- package/src/{translated-collections.mjs → translated-collections.js} +3 -2
- package/src/updated-attribute.jsx +1 -1
- package/src/url-encode.js +18 -0
- package/src/use-breakpoint.js +87 -0
- package/src/use-can-can.js +55 -0
- package/src/use-collection.js +280 -0
- package/src/use-created-event.js +55 -0
- package/src/use-current-user.js +88 -0
- package/src/use-destroyed-event.js +60 -0
- package/src/use-event-emitter.js +15 -0
- package/src/use-event-listener.js +19 -0
- package/src/use-input.js +157 -0
- package/src/use-model-event.js +60 -0
- package/src/use-model.js +189 -0
- package/src/use-resize-observer.js +24 -0
- package/src/use-router.jsx +128 -0
- package/src/use-screen-layout.js +49 -0
- package/src/use-styles.js +50 -0
- package/src/use-updated-event.js +60 -0
- package/src/use-validation-errors.js +33 -0
- package/src/utils/card.jsx +49 -0
- package/src/utils/checkbox.jsx +80 -0
- package/src/utils/checkboxes.jsx +158 -0
- package/src/utils/default-style.jsx +25 -0
- package/src/utils/icon.jsx +21 -0
- package/src/utils/invalid-feedback.jsx +20 -0
- package/src/utils/modal.jsx +60 -0
- package/src/utils/text.jsx +38 -0
- package/src/{validation-error.mjs → validation-error.js} +9 -5
- package/src/{validation-errors.mjs → validation-errors.js} +15 -27
- package/src/with-api-maker.jsx +31 -0
- package/src/with-collection.jsx +17 -0
- package/src/with-current-user.jsx +7 -25
- package/src/with-model.jsx +16 -0
- package/src/with-router.jsx +7 -129
- package/__tests__/base-model.test.js +0 -71
- package/__tests__/cable-connection-pool.test.js +0 -227
- package/__tests__/cable-subscription-pool.test.js +0 -26
- package/__tests__/can-can.test.js +0 -34
- package/__tests__/collection.test.js +0 -51
- package/__tests__/custom-error.test.js +0 -13
- package/__tests__/model-name.test.js +0 -34
- package/__tests__/model-prop-type.test.js +0 -113
- package/__tests__/params.test.js +0 -40
- package/__tests__/routes-native.test.js +0 -103
- package/__tests__/routes.test.js +0 -46
- package/__tests__/serializer.test.js +0 -30
- package/__tests__/support/task.js +0 -27
- package/__tests__/support/user.js +0 -32
- package/index.js +0 -1
- package/jest.config.js +0 -4
- package/src/can-can-loader.jsx +0 -54
- package/src/channels-consumer.mjs +0 -3
- package/src/destroy-error.mjs +0 -7
- package/src/devise.mjs +0 -122
- package/src/event-created.jsx +0 -65
- package/src/event-destroyed.jsx +0 -29
- package/src/event-listener.jsx +0 -38
- package/src/event-updated.jsx +0 -74
- package/src/logger.mjs +0 -25
- package/src/model-class-require.mjs +0 -10
- package/src/model-load-wrapper.jsx +0 -116
- package/src/result.mjs +0 -29
- package/src/session-status-updater.mjs +0 -116
- package/webpack.config.js +0 -15
- /package/src/{attribute-not-loaded-error.mjs → attribute-not-loaded-error.js} +0 -0
- /package/src/{instance-of-class-name.mjs → instance-of-class-name.js} +0 -0
- /package/src/{model-prop-type.mjs → model-prop-type.js} +0 -0
- /package/src/{not-loaded-error.mjs → not-loaded-error.js} +0 -0
- /package/src/{translated-collections-data.mjs.erb → translated-collections-data.js.erb} +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import memo from "set-state-compare/src/memo";
|
|
3
|
+
import React, { useMemo } from "react";
|
|
4
|
+
import { Text } from "react-native";
|
|
5
|
+
import { useDefaultStyle, WithDefaultStyle } from "./default-style";
|
|
6
|
+
export default memo(props => {
|
|
7
|
+
const {
|
|
8
|
+
style,
|
|
9
|
+
...restProps
|
|
10
|
+
} = props;
|
|
11
|
+
const defaultStyle = useDefaultStyle();
|
|
12
|
+
const {
|
|
13
|
+
actualStyle,
|
|
14
|
+
stylesList
|
|
15
|
+
} = useMemo(() => {
|
|
16
|
+
const stylesList = [];
|
|
17
|
+
const actualStyle = {};
|
|
18
|
+
if (defaultStyle?.Text) {
|
|
19
|
+
Object.assign(actualStyle, defaultStyle.Text);
|
|
20
|
+
stylesList.push(defaultStyle.Text);
|
|
21
|
+
}
|
|
22
|
+
if (style) {
|
|
23
|
+
if (Array.isArray(style)) {
|
|
24
|
+
for (const styleI of style) {
|
|
25
|
+
Object.assign(actualStyle, styleI);
|
|
26
|
+
stylesList.push(styleI);
|
|
27
|
+
}
|
|
28
|
+
} else {
|
|
29
|
+
Object.assign(actualStyle, style);
|
|
30
|
+
stylesList.push(style);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
actualStyle,
|
|
35
|
+
stylesList
|
|
36
|
+
};
|
|
37
|
+
}, [defaultStyle?.Text, style]);
|
|
38
|
+
return /*#__PURE__*/React.createElement(WithDefaultStyle, {
|
|
39
|
+
style: actualStyle
|
|
40
|
+
}, /*#__PURE__*/React.createElement(Text, _extends({
|
|
41
|
+
style: stylesList
|
|
42
|
+
}, restProps)));
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZW1vIiwiUmVhY3QiLCJ1c2VNZW1vIiwiVGV4dCIsInVzZURlZmF1bHRTdHlsZSIsIldpdGhEZWZhdWx0U3R5bGUiLCJwcm9wcyIsInN0eWxlIiwicmVzdFByb3BzIiwiZGVmYXVsdFN0eWxlIiwiYWN0dWFsU3R5bGUiLCJzdHlsZXNMaXN0IiwiT2JqZWN0IiwiYXNzaWduIiwicHVzaCIsIkFycmF5IiwiaXNBcnJheSIsInN0eWxlSSIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90ZXh0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL21lbW9cIlxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7VGV4dH0gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQge3VzZURlZmF1bHRTdHlsZSwgV2l0aERlZmF1bHRTdHlsZX0gZnJvbSBcIi4vZGVmYXVsdC1zdHlsZVwiXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtzdHlsZSwgLi4ucmVzdFByb3BzfSA9IHByb3BzXG4gIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHVzZURlZmF1bHRTdHlsZSgpXG4gIGNvbnN0IHthY3R1YWxTdHlsZSwgc3R5bGVzTGlzdH0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBzdHlsZXNMaXN0ID0gW11cbiAgICBjb25zdCBhY3R1YWxTdHlsZSA9IHt9XG5cbiAgICBpZiAoZGVmYXVsdFN0eWxlPy5UZXh0KSB7XG4gICAgICBPYmplY3QuYXNzaWduKGFjdHVhbFN0eWxlLCBkZWZhdWx0U3R5bGUuVGV4dClcbiAgICAgIHN0eWxlc0xpc3QucHVzaChkZWZhdWx0U3R5bGUuVGV4dClcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHN0eWxlSSBvZiBzdHlsZSkge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oYWN0dWFsU3R5bGUsIHN0eWxlSSlcbiAgICAgICAgICBzdHlsZXNMaXN0LnB1c2goc3R5bGVJKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuYXNzaWduKGFjdHVhbFN0eWxlLCBzdHlsZSlcbiAgICAgICAgc3R5bGVzTGlzdC5wdXNoKHN0eWxlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7YWN0dWFsU3R5bGUsIHN0eWxlc0xpc3R9XG4gIH0sIFtkZWZhdWx0U3R5bGU/LlRleHQsIHN0eWxlXSlcblxuICByZXR1cm4gKFxuICAgIDxXaXRoRGVmYXVsdFN0eWxlIHN0eWxlPXthY3R1YWxTdHlsZX0+XG4gICAgICA8VGV4dCBzdHlsZT17c3R5bGVzTGlzdH0gey4uLnJlc3RQcm9wc30gLz5cbiAgICA8L1dpdGhEZWZhdWx0U3R5bGU+XG4gIClcbn0pXG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxJQUFJLE1BQU0sNEJBQTRCO0FBQzdDLE9BQU9DLEtBQUssSUFBR0MsT0FBTyxRQUFPLE9BQU87QUFDcEMsU0FBUUMsSUFBSSxRQUFPLGNBQWM7QUFDakMsU0FBUUMsZUFBZSxFQUFFQyxnQkFBZ0IsUUFBTyxpQkFBaUI7QUFFakUsZUFBZUwsSUFBSSxDQUFFTSxLQUFLLElBQUs7RUFDN0IsTUFBTTtJQUFDQyxLQUFLO0lBQUUsR0FBR0M7RUFBUyxDQUFDLEdBQUdGLEtBQUs7RUFDbkMsTUFBTUcsWUFBWSxHQUFHTCxlQUFlLENBQUMsQ0FBQztFQUN0QyxNQUFNO0lBQUNNLFdBQVc7SUFBRUM7RUFBVSxDQUFDLEdBQUdULE9BQU8sQ0FBQyxNQUFNO0lBQzlDLE1BQU1TLFVBQVUsR0FBRyxFQUFFO0lBQ3JCLE1BQU1ELFdBQVcsR0FBRyxDQUFDLENBQUM7SUFFdEIsSUFBSUQsWUFBWSxFQUFFTixJQUFJLEVBQUU7TUFDdEJTLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDSCxXQUFXLEVBQUVELFlBQVksQ0FBQ04sSUFBSSxDQUFDO01BQzdDUSxVQUFVLENBQUNHLElBQUksQ0FBQ0wsWUFBWSxDQUFDTixJQUFJLENBQUM7SUFDcEM7SUFFQSxJQUFJSSxLQUFLLEVBQUU7TUFDVCxJQUFJUSxLQUFLLENBQUNDLE9BQU8sQ0FBQ1QsS0FBSyxDQUFDLEVBQUU7UUFDeEIsS0FBSyxNQUFNVSxNQUFNLElBQUlWLEtBQUssRUFBRTtVQUMxQkssTUFBTSxDQUFDQyxNQUFNLENBQUNILFdBQVcsRUFBRU8sTUFBTSxDQUFDO1VBQ2xDTixVQUFVLENBQUNHLElBQUksQ0FBQ0csTUFBTSxDQUFDO1FBQ3pCO01BQ0YsQ0FBQyxNQUFNO1FBQ0xMLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDSCxXQUFXLEVBQUVILEtBQUssQ0FBQztRQUNqQ0ksVUFBVSxDQUFDRyxJQUFJLENBQUNQLEtBQUssQ0FBQztNQUN4QjtJQUNGO0lBRUEsT0FBTztNQUFDRyxXQUFXO01BQUVDO0lBQVUsQ0FBQztFQUNsQyxDQUFDLEVBQUUsQ0FBQ0YsWUFBWSxFQUFFTixJQUFJLEVBQUVJLEtBQUssQ0FBQyxDQUFDO0VBRS9CLG9CQUNFTixLQUFBLENBQUFpQixhQUFBLENBQUNiLGdCQUFnQjtJQUFDRSxLQUFLLEVBQUVHO0VBQVksZ0JBQ25DVCxLQUFBLENBQUFpQixhQUFBLENBQUNmLElBQUksRUFBQWdCLFFBQUE7SUFBQ1osS0FBSyxFQUFFSTtFQUFXLEdBQUtILFNBQVMsQ0FBRyxDQUN6QixDQUFDO0FBRXZCLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import BaseError from "./base-error";
|
|
2
|
+
import * as inflection from "inflection";
|
|
3
|
+
class ValidationError extends BaseError {
|
|
4
|
+
constructor(validationErrors, args) {
|
|
5
|
+
const errorMessage = validationErrors.getUnhandledErrorMessage() || validationErrors.getErrorMessage();
|
|
6
|
+
const forwardedArgs = {
|
|
7
|
+
addResponseErrorsToErrorMessage: false
|
|
8
|
+
};
|
|
9
|
+
const newArgs = Object.assign({}, args, forwardedArgs);
|
|
10
|
+
super(errorMessage, newArgs);
|
|
11
|
+
this.validationErrors = validationErrors;
|
|
12
|
+
}
|
|
13
|
+
getUnhandledErrors = () => this.validationErrors.getValidationErrors().filter(validationError => !validationError.getHandled());
|
|
14
|
+
getValidationErrors = () => digg(this, "validationErrors");
|
|
15
|
+
hasUnhandledErrors() {
|
|
16
|
+
const unhandledError = this.validationErrors.getValidationErrors().find(validationError => !validationError.getHandled());
|
|
17
|
+
return Boolean(unhandledError);
|
|
18
|
+
}
|
|
19
|
+
hasValidationErrorForAttribute(attributeName) {
|
|
20
|
+
const underscoredAttributeName = inflection.underscore(attributeName);
|
|
21
|
+
const foundAttribute = this.validationErrors.getValidationErrors().find(validationError => validationError.getAttributeName() == underscoredAttributeName);
|
|
22
|
+
if (foundAttribute) return true;
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
ValidationError.apiMakerType = "ValidationError";
|
|
27
|
+
export default ValidationError;
|
|
28
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlRXJyb3IiLCJpbmZsZWN0aW9uIiwiVmFsaWRhdGlvbkVycm9yIiwiY29uc3RydWN0b3IiLCJ2YWxpZGF0aW9uRXJyb3JzIiwiYXJncyIsImVycm9yTWVzc2FnZSIsImdldFVuaGFuZGxlZEVycm9yTWVzc2FnZSIsImdldEVycm9yTWVzc2FnZSIsImZvcndhcmRlZEFyZ3MiLCJhZGRSZXNwb25zZUVycm9yc1RvRXJyb3JNZXNzYWdlIiwibmV3QXJncyIsIk9iamVjdCIsImFzc2lnbiIsImdldFVuaGFuZGxlZEVycm9ycyIsImdldFZhbGlkYXRpb25FcnJvcnMiLCJmaWx0ZXIiLCJ2YWxpZGF0aW9uRXJyb3IiLCJnZXRIYW5kbGVkIiwiZGlnZyIsImhhc1VuaGFuZGxlZEVycm9ycyIsInVuaGFuZGxlZEVycm9yIiwiZmluZCIsIkJvb2xlYW4iLCJoYXNWYWxpZGF0aW9uRXJyb3JGb3JBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVOYW1lIiwidW5kZXJzY29yZWRBdHRyaWJ1dGVOYW1lIiwidW5kZXJzY29yZSIsImZvdW5kQXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlTmFtZSIsImFwaU1ha2VyVHlwZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy92YWxpZGF0aW9uLWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlRXJyb3IgZnJvbSBcIi4vYmFzZS1lcnJvclwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcblxuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHtcbiAgY29uc3RydWN0b3IodmFsaWRhdGlvbkVycm9ycywgYXJncykge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHZhbGlkYXRpb25FcnJvcnMuZ2V0VW5oYW5kbGVkRXJyb3JNZXNzYWdlKCkgfHwgdmFsaWRhdGlvbkVycm9ycy5nZXRFcnJvck1lc3NhZ2UoKVxuICAgIGNvbnN0IGZvcndhcmRlZEFyZ3MgPSB7YWRkUmVzcG9uc2VFcnJvcnNUb0Vycm9yTWVzc2FnZTogZmFsc2V9XG4gICAgY29uc3QgbmV3QXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MsIGZvcndhcmRlZEFyZ3MpXG5cbiAgICBzdXBlcihlcnJvck1lc3NhZ2UsIG5ld0FyZ3MpXG4gICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGlvbkVycm9yc1xuICB9XG5cbiAgZ2V0VW5oYW5kbGVkRXJyb3JzID0gKCkgPT4gdGhpcy52YWxpZGF0aW9uRXJyb3JzLmdldFZhbGlkYXRpb25FcnJvcnMoKS5maWx0ZXIoKHZhbGlkYXRpb25FcnJvcikgPT4gIXZhbGlkYXRpb25FcnJvci5nZXRIYW5kbGVkKCkpXG4gIGdldFZhbGlkYXRpb25FcnJvcnMgPSAoKSA9PiBkaWdnKHRoaXMsIFwidmFsaWRhdGlvbkVycm9yc1wiKVxuXG4gIGhhc1VuaGFuZGxlZEVycm9ycygpIHtcbiAgICBjb25zdCB1bmhhbmRsZWRFcnJvciA9IHRoaXMudmFsaWRhdGlvbkVycm9ycy5nZXRWYWxpZGF0aW9uRXJyb3JzKCkuZmluZCgodmFsaWRhdGlvbkVycm9yKSA9PiAhdmFsaWRhdGlvbkVycm9yLmdldEhhbmRsZWQoKSlcblxuICAgIHJldHVybiBCb29sZWFuKHVuaGFuZGxlZEVycm9yKVxuICB9XG5cbiAgaGFzVmFsaWRhdGlvbkVycm9yRm9yQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgICBjb25zdCB1bmRlcnNjb3JlZEF0dHJpYnV0ZU5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYXR0cmlidXRlTmFtZSlcbiAgICBjb25zdCBmb3VuZEF0dHJpYnV0ZSA9IHRoaXMudmFsaWRhdGlvbkVycm9ycy5nZXRWYWxpZGF0aW9uRXJyb3JzKCkuZmluZCgodmFsaWRhdGlvbkVycm9yKSA9PiB2YWxpZGF0aW9uRXJyb3IuZ2V0QXR0cmlidXRlTmFtZSgpID09IHVuZGVyc2NvcmVkQXR0cmlidXRlTmFtZSlcblxuICAgIGlmIChmb3VuZEF0dHJpYnV0ZSkgcmV0dXJuIHRydWVcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cblZhbGlkYXRpb25FcnJvci5hcGlNYWtlclR5cGUgPSBcIlZhbGlkYXRpb25FcnJvclwiXG5cbmV4cG9ydCBkZWZhdWx0IFZhbGlkYXRpb25FcnJvclxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxTQUFTLE1BQU0sY0FBYztBQUNwQyxPQUFPLEtBQUtDLFVBQVUsTUFBTSxZQUFZO0FBRXhDLE1BQU1DLGVBQWUsU0FBU0YsU0FBUyxDQUFDO0VBQ3RDRyxXQUFXQSxDQUFDQyxnQkFBZ0IsRUFBRUMsSUFBSSxFQUFFO0lBQ2xDLE1BQU1DLFlBQVksR0FBR0YsZ0JBQWdCLENBQUNHLHdCQUF3QixDQUFDLENBQUMsSUFBSUgsZ0JBQWdCLENBQUNJLGVBQWUsQ0FBQyxDQUFDO0lBQ3RHLE1BQU1DLGFBQWEsR0FBRztNQUFDQywrQkFBK0IsRUFBRTtJQUFLLENBQUM7SUFDOUQsTUFBTUMsT0FBTyxHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRVIsSUFBSSxFQUFFSSxhQUFhLENBQUM7SUFFdEQsS0FBSyxDQUFDSCxZQUFZLEVBQUVLLE9BQU8sQ0FBQztJQUM1QixJQUFJLENBQUNQLGdCQUFnQixHQUFHQSxnQkFBZ0I7RUFDMUM7RUFFQVUsa0JBQWtCLEdBQUdBLENBQUEsS0FBTSxJQUFJLENBQUNWLGdCQUFnQixDQUFDVyxtQkFBbUIsQ0FBQyxDQUFDLENBQUNDLE1BQU0sQ0FBRUMsZUFBZSxJQUFLLENBQUNBLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDLENBQUMsQ0FBQztFQUNqSUgsbUJBQW1CLEdBQUdBLENBQUEsS0FBTUksSUFBSSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQztFQUUxREMsa0JBQWtCQSxDQUFBLEVBQUc7SUFDbkIsTUFBTUMsY0FBYyxHQUFHLElBQUksQ0FBQ2pCLGdCQUFnQixDQUFDVyxtQkFBbUIsQ0FBQyxDQUFDLENBQUNPLElBQUksQ0FBRUwsZUFBZSxJQUFLLENBQUNBLGVBQWUsQ0FBQ0MsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUUzSCxPQUFPSyxPQUFPLENBQUNGLGNBQWMsQ0FBQztFQUNoQztFQUVBRyw4QkFBOEJBLENBQUNDLGFBQWEsRUFBRTtJQUM1QyxNQUFNQyx3QkFBd0IsR0FBR3pCLFVBQVUsQ0FBQzBCLFVBQVUsQ0FBQ0YsYUFBYSxDQUFDO0lBQ3JFLE1BQU1HLGNBQWMsR0FBRyxJQUFJLENBQUN4QixnQkFBZ0IsQ0FBQ1csbUJBQW1CLENBQUMsQ0FBQyxDQUFDTyxJQUFJLENBQUVMLGVBQWUsSUFBS0EsZUFBZSxDQUFDWSxnQkFBZ0IsQ0FBQyxDQUFDLElBQUlILHdCQUF3QixDQUFDO0lBRTVKLElBQUlFLGNBQWMsRUFBRSxPQUFPLElBQUk7SUFFL0IsT0FBTyxLQUFLO0VBQ2Q7QUFDRjtBQUVBMUIsZUFBZSxDQUFDNEIsWUFBWSxHQUFHLGlCQUFpQjtBQUVoRCxlQUFlNUIsZUFBZSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { digg, digs } from "diggerize";
|
|
2
|
+
import * as inflection from "inflection";
|
|
3
|
+
import modelClassRequire from "./model-class-require";
|
|
4
|
+
class ValidationError {
|
|
5
|
+
constructor(args) {
|
|
6
|
+
this.attributeName = digg(args, "attribute_name");
|
|
7
|
+
this.attributeType = digg(args, "attribute_type");
|
|
8
|
+
this.errorMessages = digg(args, "error_messages");
|
|
9
|
+
this.errorTypes = digg(args, "error_types");
|
|
10
|
+
this.inputName = args.input_name;
|
|
11
|
+
this.handled = false;
|
|
12
|
+
this.modelName = digg(args, "model_name");
|
|
13
|
+
}
|
|
14
|
+
matchesAttributeAndInputName(attributeName, inputName) {
|
|
15
|
+
if (this.getInputName() == inputName) return true;
|
|
16
|
+
if (!attributeName) return false;
|
|
17
|
+
|
|
18
|
+
// A relationship column ends with "_id". We should try for validation errors on an attribute without the "_id" as well
|
|
19
|
+
const attributeNameIdMatch = attributeName.match(/^(.+)Id$/);
|
|
20
|
+
if (!attributeNameIdMatch) return false;
|
|
21
|
+
const attributeNameWithoutId = inflection.underscore(attributeNameIdMatch[1]);
|
|
22
|
+
const attributeUnderScoreName = inflection.underscore(attributeName);
|
|
23
|
+
const inputNameWithoutId = inputName.replace(`[${attributeUnderScoreName}]`, `[${attributeNameWithoutId}]`);
|
|
24
|
+
if (this.getInputName() == inputNameWithoutId) return true;
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
getAttributeName = () => digg(this, "attributeName");
|
|
28
|
+
getErrorMessages = () => digg(this, "errorMessages");
|
|
29
|
+
getFullErrorMessages() {
|
|
30
|
+
const {
|
|
31
|
+
attributeType
|
|
32
|
+
} = digs(this, "attributeType");
|
|
33
|
+
if (attributeType == "base") {
|
|
34
|
+
return this.getErrorMessages();
|
|
35
|
+
} else {
|
|
36
|
+
const fullErrorMessages = [];
|
|
37
|
+
for (const errorMessage of this.getErrorMessages()) {
|
|
38
|
+
const attributeHumanName = this.getModelClass().humanAttributeName(this.getAttributeName());
|
|
39
|
+
fullErrorMessages.push(`${attributeHumanName} ${errorMessage}`);
|
|
40
|
+
}
|
|
41
|
+
return fullErrorMessages;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
getHandled = () => digg(this, "handled");
|
|
45
|
+
getInputName = () => digg(this, "inputName");
|
|
46
|
+
getModelClass() {
|
|
47
|
+
const modelName = inflection.classify(digg(this, "modelName"));
|
|
48
|
+
return modelClassRequire(modelName);
|
|
49
|
+
}
|
|
50
|
+
setHandled() {
|
|
51
|
+
this.handled = true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
class ValidationErrors {
|
|
55
|
+
constructor(args) {
|
|
56
|
+
this.rootModel = digg(args, "model");
|
|
57
|
+
this.validationErrors = digg(args, "validationErrors").map(validationError => new ValidationError(validationError));
|
|
58
|
+
}
|
|
59
|
+
getErrorMessage() {
|
|
60
|
+
const fullErrorMessages = [];
|
|
61
|
+
for (const validationError of this.validationErrors) {
|
|
62
|
+
for (const fullErrorMessage of validationError.getFullErrorMessages()) {
|
|
63
|
+
fullErrorMessages.push(fullErrorMessage);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return fullErrorMessages.join(". ");
|
|
67
|
+
}
|
|
68
|
+
getValidationErrors = () => this.validationErrors;
|
|
69
|
+
getValidationErrorsForInput({
|
|
70
|
+
attribute,
|
|
71
|
+
inputName,
|
|
72
|
+
onMatchValidationError
|
|
73
|
+
}) {
|
|
74
|
+
const validationErrors = this.validationErrors.filter(validationError => {
|
|
75
|
+
if (onMatchValidationError) {
|
|
76
|
+
return onMatchValidationError(validationError);
|
|
77
|
+
} else {
|
|
78
|
+
return validationError.matchesAttributeAndInputName(attribute, inputName);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
validationErrors.map(validationError => validationError.setHandled());
|
|
82
|
+
return validationErrors;
|
|
83
|
+
}
|
|
84
|
+
getUnhandledErrorMessage() {
|
|
85
|
+
const unhandledValidationErrors = this.validationErrors.filter(validationError => !validationError.getHandled());
|
|
86
|
+
if (unhandledValidationErrors.length > 0) {
|
|
87
|
+
const unhandledValidationErrorMessages = [];
|
|
88
|
+
for (const unhandledValidationError of unhandledValidationErrors) {
|
|
89
|
+
for (const errorMessage of unhandledValidationError.getFullErrorMessages()) {
|
|
90
|
+
unhandledValidationErrorMessages.push(errorMessage);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return unhandledValidationErrorMessages.join(". ");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export { ValidationError, ValidationErrors };
|
|
98
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwiZGlncyIsImluZmxlY3Rpb24iLCJtb2RlbENsYXNzUmVxdWlyZSIsIlZhbGlkYXRpb25FcnJvciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImF0dHJpYnV0ZU5hbWUiLCJhdHRyaWJ1dGVUeXBlIiwiZXJyb3JNZXNzYWdlcyIsImVycm9yVHlwZXMiLCJpbnB1dE5hbWUiLCJpbnB1dF9uYW1lIiwiaGFuZGxlZCIsIm1vZGVsTmFtZSIsIm1hdGNoZXNBdHRyaWJ1dGVBbmRJbnB1dE5hbWUiLCJnZXRJbnB1dE5hbWUiLCJhdHRyaWJ1dGVOYW1lSWRNYXRjaCIsIm1hdGNoIiwiYXR0cmlidXRlTmFtZVdpdGhvdXRJZCIsInVuZGVyc2NvcmUiLCJhdHRyaWJ1dGVVbmRlclNjb3JlTmFtZSIsImlucHV0TmFtZVdpdGhvdXRJZCIsInJlcGxhY2UiLCJnZXRBdHRyaWJ1dGVOYW1lIiwiZ2V0RXJyb3JNZXNzYWdlcyIsImdldEZ1bGxFcnJvck1lc3NhZ2VzIiwiZnVsbEVycm9yTWVzc2FnZXMiLCJlcnJvck1lc3NhZ2UiLCJhdHRyaWJ1dGVIdW1hbk5hbWUiLCJnZXRNb2RlbENsYXNzIiwiaHVtYW5BdHRyaWJ1dGVOYW1lIiwicHVzaCIsImdldEhhbmRsZWQiLCJjbGFzc2lmeSIsInNldEhhbmRsZWQiLCJWYWxpZGF0aW9uRXJyb3JzIiwicm9vdE1vZGVsIiwidmFsaWRhdGlvbkVycm9ycyIsIm1hcCIsInZhbGlkYXRpb25FcnJvciIsImdldEVycm9yTWVzc2FnZSIsImZ1bGxFcnJvck1lc3NhZ2UiLCJqb2luIiwiZ2V0VmFsaWRhdGlvbkVycm9ycyIsImdldFZhbGlkYXRpb25FcnJvcnNGb3JJbnB1dCIsImF0dHJpYnV0ZSIsIm9uTWF0Y2hWYWxpZGF0aW9uRXJyb3IiLCJmaWx0ZXIiLCJnZXRVbmhhbmRsZWRFcnJvck1lc3NhZ2UiLCJ1bmhhbmRsZWRWYWxpZGF0aW9uRXJyb3JzIiwibGVuZ3RoIiwidW5oYW5kbGVkVmFsaWRhdGlvbkVycm9yTWVzc2FnZXMiLCJ1bmhhbmRsZWRWYWxpZGF0aW9uRXJyb3IiXSwic291cmNlcyI6WyIuLi9zcmMvdmFsaWRhdGlvbi1lcnJvcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWdnLCBkaWdzfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IG1vZGVsQ2xhc3NSZXF1aXJlIGZyb20gXCIuL21vZGVsLWNsYXNzLXJlcXVpcmVcIlxuXG5jbGFzcyBWYWxpZGF0aW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihhcmdzKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVOYW1lID0gZGlnZyhhcmdzLCBcImF0dHJpYnV0ZV9uYW1lXCIpXG4gICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gZGlnZyhhcmdzLCBcImF0dHJpYnV0ZV90eXBlXCIpXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gZGlnZyhhcmdzLCBcImVycm9yX21lc3NhZ2VzXCIpXG4gICAgdGhpcy5lcnJvclR5cGVzID0gZGlnZyhhcmdzLCBcImVycm9yX3R5cGVzXCIpXG4gICAgdGhpcy5pbnB1dE5hbWUgPSBhcmdzLmlucHV0X25hbWVcbiAgICB0aGlzLmhhbmRsZWQgPSBmYWxzZVxuICAgIHRoaXMubW9kZWxOYW1lID0gZGlnZyhhcmdzLCBcIm1vZGVsX25hbWVcIilcbiAgfVxuXG4gIG1hdGNoZXNBdHRyaWJ1dGVBbmRJbnB1dE5hbWUoYXR0cmlidXRlTmFtZSwgaW5wdXROYW1lKSB7XG4gICAgaWYgKHRoaXMuZ2V0SW5wdXROYW1lKCkgPT0gaW5wdXROYW1lKSByZXR1cm4gdHJ1ZVxuICAgIGlmICghYXR0cmlidXRlTmFtZSkgcmV0dXJuIGZhbHNlXG5cbiAgICAvLyBBIHJlbGF0aW9uc2hpcCBjb2x1bW4gZW5kcyB3aXRoIFwiX2lkXCIuIFdlIHNob3VsZCB0cnkgZm9yIHZhbGlkYXRpb24gZXJyb3JzIG9uIGFuIGF0dHJpYnV0ZSB3aXRob3V0IHRoZSBcIl9pZFwiIGFzIHdlbGxcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lSWRNYXRjaCA9IGF0dHJpYnV0ZU5hbWUubWF0Y2goL14oLispSWQkLylcbiAgICBpZiAoIWF0dHJpYnV0ZU5hbWVJZE1hdGNoKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWVXaXRob3V0SWQgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYXR0cmlidXRlTmFtZUlkTWF0Y2hbMV0pXG4gICAgY29uc3QgYXR0cmlidXRlVW5kZXJTY29yZU5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYXR0cmlidXRlTmFtZSlcbiAgICBjb25zdCBpbnB1dE5hbWVXaXRob3V0SWQgPSBpbnB1dE5hbWUucmVwbGFjZShgWyR7YXR0cmlidXRlVW5kZXJTY29yZU5hbWV9XWAsIGBbJHthdHRyaWJ1dGVOYW1lV2l0aG91dElkfV1gKVxuXG4gICAgaWYgKHRoaXMuZ2V0SW5wdXROYW1lKCkgPT0gaW5wdXROYW1lV2l0aG91dElkKSByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBnZXRBdHRyaWJ1dGVOYW1lID0gKCkgPT4gZGlnZyh0aGlzLCBcImF0dHJpYnV0ZU5hbWVcIilcbiAgZ2V0RXJyb3JNZXNzYWdlcyA9ICgpID0+IGRpZ2codGhpcywgXCJlcnJvck1lc3NhZ2VzXCIpXG5cbiAgZ2V0RnVsbEVycm9yTWVzc2FnZXMoKSB7XG4gICAgY29uc3Qge2F0dHJpYnV0ZVR5cGV9ID0gZGlncyh0aGlzLCBcImF0dHJpYnV0ZVR5cGVcIilcblxuICAgIGlmIChhdHRyaWJ1dGVUeXBlID09IFwiYmFzZVwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRFcnJvck1lc3NhZ2VzKClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZnVsbEVycm9yTWVzc2FnZXMgPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IGVycm9yTWVzc2FnZSBvZiB0aGlzLmdldEVycm9yTWVzc2FnZXMoKSkge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVIdW1hbk5hbWUgPSB0aGlzLmdldE1vZGVsQ2xhc3MoKS5odW1hbkF0dHJpYnV0ZU5hbWUodGhpcy5nZXRBdHRyaWJ1dGVOYW1lKCkpXG4gICAgICAgIGZ1bGxFcnJvck1lc3NhZ2VzLnB1c2goYCR7YXR0cmlidXRlSHVtYW5OYW1lfSAke2Vycm9yTWVzc2FnZX1gKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVsbEVycm9yTWVzc2FnZXNcbiAgICB9XG4gIH1cblxuICBnZXRIYW5kbGVkID0gKCkgPT4gZGlnZyh0aGlzLCBcImhhbmRsZWRcIilcbiAgZ2V0SW5wdXROYW1lID0gKCkgPT4gZGlnZyh0aGlzLCBcImlucHV0TmFtZVwiKVxuXG4gIGdldE1vZGVsQ2xhc3MoKSB7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gaW5mbGVjdGlvbi5jbGFzc2lmeShkaWdnKHRoaXMsIFwibW9kZWxOYW1lXCIpKVxuXG4gICAgcmV0dXJuIG1vZGVsQ2xhc3NSZXF1aXJlKG1vZGVsTmFtZSlcbiAgfVxuXG4gIHNldEhhbmRsZWQoKSB7XG4gICAgdGhpcy5oYW5kbGVkID0gdHJ1ZVxuICB9XG59XG5cbmNsYXNzIFZhbGlkYXRpb25FcnJvcnMge1xuICBjb25zdHJ1Y3RvcihhcmdzKSB7XG4gICAgdGhpcy5yb290TW9kZWwgPSBkaWdnKGFyZ3MsIFwibW9kZWxcIilcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBkaWdnKGFyZ3MsIFwidmFsaWRhdGlvbkVycm9yc1wiKS5tYXAoKHZhbGlkYXRpb25FcnJvcikgPT4gbmV3IFZhbGlkYXRpb25FcnJvcih2YWxpZGF0aW9uRXJyb3IpKVxuICB9XG5cbiAgZ2V0RXJyb3JNZXNzYWdlKCkge1xuICAgIGNvbnN0IGZ1bGxFcnJvck1lc3NhZ2VzID0gW11cblxuICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbkVycm9yIG9mIHRoaXMudmFsaWRhdGlvbkVycm9ycykge1xuICAgICAgZm9yIChjb25zdCBmdWxsRXJyb3JNZXNzYWdlIG9mIHZhbGlkYXRpb25FcnJvci5nZXRGdWxsRXJyb3JNZXNzYWdlcygpKSB7XG4gICAgICAgIGZ1bGxFcnJvck1lc3NhZ2VzLnB1c2goZnVsbEVycm9yTWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZnVsbEVycm9yTWVzc2FnZXMuam9pbihcIi4gXCIpXG4gIH1cblxuICBnZXRWYWxpZGF0aW9uRXJyb3JzID0gKCkgPT4gdGhpcy52YWxpZGF0aW9uRXJyb3JzXG5cbiAgZ2V0VmFsaWRhdGlvbkVycm9yc0ZvcklucHV0ICh7YXR0cmlidXRlLCBpbnB1dE5hbWUsIG9uTWF0Y2hWYWxpZGF0aW9uRXJyb3J9KSB7XG4gICAgY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IHRoaXMudmFsaWRhdGlvbkVycm9ycy5maWx0ZXIoKHZhbGlkYXRpb25FcnJvcikgPT4ge1xuICAgICAgaWYgKG9uTWF0Y2hWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG9uTWF0Y2hWYWxpZGF0aW9uRXJyb3IodmFsaWRhdGlvbkVycm9yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5tYXRjaGVzQXR0cmlidXRlQW5kSW5wdXROYW1lKGF0dHJpYnV0ZSwgaW5wdXROYW1lKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB2YWxpZGF0aW9uRXJyb3JzLm1hcCgodmFsaWRhdGlvbkVycm9yKSA9PiB2YWxpZGF0aW9uRXJyb3Iuc2V0SGFuZGxlZCgpKVxuXG4gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcnNcbiAgfVxuXG4gIGdldFVuaGFuZGxlZEVycm9yTWVzc2FnZSAoKSB7XG4gICAgY29uc3QgdW5oYW5kbGVkVmFsaWRhdGlvbkVycm9ycyA9IHRoaXMudmFsaWRhdGlvbkVycm9ycy5maWx0ZXIoKHZhbGlkYXRpb25FcnJvcikgPT4gIXZhbGlkYXRpb25FcnJvci5nZXRIYW5kbGVkKCkpXG5cbiAgICBpZiAodW5oYW5kbGVkVmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB1bmhhbmRsZWRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlcyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgdW5oYW5kbGVkVmFsaWRhdGlvbkVycm9yIG9mIHVuaGFuZGxlZFZhbGlkYXRpb25FcnJvcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBlcnJvck1lc3NhZ2Ugb2YgdW5oYW5kbGVkVmFsaWRhdGlvbkVycm9yLmdldEZ1bGxFcnJvck1lc3NhZ2VzKCkpIHtcbiAgICAgICAgICB1bmhhbmRsZWRWYWxpZGF0aW9uRXJyb3JNZXNzYWdlcy5wdXNoKGVycm9yTWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5oYW5kbGVkVmFsaWRhdGlvbkVycm9yTWVzc2FnZXMuam9pbihcIi4gXCIpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7XG4gIFZhbGlkYXRpb25FcnJvcixcbiAgVmFsaWRhdGlvbkVycm9yc1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxJQUFJLEVBQUVDLElBQUksUUFBTyxXQUFXO0FBQ3BDLE9BQU8sS0FBS0MsVUFBVSxNQUFNLFlBQVk7QUFDeEMsT0FBT0MsaUJBQWlCLE1BQU0sdUJBQXVCO0FBRXJELE1BQU1DLGVBQWUsQ0FBQztFQUNwQkMsV0FBV0EsQ0FBQ0MsSUFBSSxFQUFFO0lBQ2hCLElBQUksQ0FBQ0MsYUFBYSxHQUFHUCxJQUFJLENBQUNNLElBQUksRUFBRSxnQkFBZ0IsQ0FBQztJQUNqRCxJQUFJLENBQUNFLGFBQWEsR0FBR1IsSUFBSSxDQUFDTSxJQUFJLEVBQUUsZ0JBQWdCLENBQUM7SUFDakQsSUFBSSxDQUFDRyxhQUFhLEdBQUdULElBQUksQ0FBQ00sSUFBSSxFQUFFLGdCQUFnQixDQUFDO0lBQ2pELElBQUksQ0FBQ0ksVUFBVSxHQUFHVixJQUFJLENBQUNNLElBQUksRUFBRSxhQUFhLENBQUM7SUFDM0MsSUFBSSxDQUFDSyxTQUFTLEdBQUdMLElBQUksQ0FBQ00sVUFBVTtJQUNoQyxJQUFJLENBQUNDLE9BQU8sR0FB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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React, { createContext, useContext, useMemo } from "react";
|
|
2
|
+
import ApiMakerConfig from "./config";
|
|
3
|
+
import memo from "set-state-compare/src/memo";
|
|
4
|
+
const ApiMakerContext = /*#__PURE__*/createContext();
|
|
5
|
+
const useApiMaker = () => {
|
|
6
|
+
const apiMakerContext = useContext(ApiMakerContext);
|
|
7
|
+
if (apiMakerContext) {
|
|
8
|
+
return apiMakerContext;
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
config: ApiMakerConfig
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
const WithApiMaker = memo(({
|
|
15
|
+
children,
|
|
16
|
+
config,
|
|
17
|
+
...restProps
|
|
18
|
+
}) => {
|
|
19
|
+
const restPropsKeys = Object.keys(restProps);
|
|
20
|
+
const value = useMemo(() => ({
|
|
21
|
+
config
|
|
22
|
+
}), [config]);
|
|
23
|
+
if (restPropsKeys.length > 0) throw new Error(`Unhandled props: ${restPropsKeys.join(", ")}`);
|
|
24
|
+
return /*#__PURE__*/React.createElement(ApiMakerContext.Provider, {
|
|
25
|
+
value: value
|
|
26
|
+
}, children);
|
|
27
|
+
});
|
|
28
|
+
export { useApiMaker, WithApiMaker };
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwidXNlTWVtbyIsIkFwaU1ha2VyQ29uZmlnIiwibWVtbyIsIkFwaU1ha2VyQ29udGV4dCIsInVzZUFwaU1ha2VyIiwiYXBpTWFrZXJDb250ZXh0IiwiY29uZmlnIiwiV2l0aEFwaU1ha2VyIiwiY2hpbGRyZW4iLCJyZXN0UHJvcHMiLCJyZXN0UHJvcHNLZXlzIiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlIiwibGVuZ3RoIiwiRXJyb3IiLCJqb2luIiwiY3JlYXRlRWxlbWVudCIsIlByb3ZpZGVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL3dpdGgtYXBpLW1ha2VyLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IEFwaU1ha2VyQ29uZmlnIGZyb20gXCIuL2NvbmZpZ1wiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvc3JjL21lbW9cIlxuXG5jb25zdCBBcGlNYWtlckNvbnRleHQgPSBjcmVhdGVDb250ZXh0KClcbmNvbnN0IHVzZUFwaU1ha2VyID0gKCkgPT4ge1xuICBjb25zdCBhcGlNYWtlckNvbnRleHQgPSB1c2VDb250ZXh0KEFwaU1ha2VyQ29udGV4dClcblxuICBpZiAoYXBpTWFrZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIGFwaU1ha2VyQ29udGV4dFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb25maWc6IEFwaU1ha2VyQ29uZmlnXG4gIH1cbn1cblxuY29uc3QgV2l0aEFwaU1ha2VyID0gbWVtbygoe2NoaWxkcmVuLCBjb25maWcsIC4uLnJlc3RQcm9wc30pID0+IHtcbiAgY29uc3QgcmVzdFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKHJlc3RQcm9wcylcbiAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKCgpID0+ICh7Y29uZmlnfSksIFtjb25maWddKVxuXG4gIGlmIChyZXN0UHJvcHNLZXlzLmxlbmd0aCA+IDApIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIHByb3BzOiAke3Jlc3RQcm9wc0tleXMuam9pbihcIiwgXCIpfWApXG5cbiAgcmV0dXJuIChcbiAgICA8QXBpTWFrZXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9BcGlNYWtlckNvbnRleHQuUHJvdmlkZXI+XG4gIClcbn0pXG5cbmV4cG9ydCB7dXNlQXBpTWFrZXIsIFdpdGhBcGlNYWtlcn0iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLEtBQUssSUFBR0MsYUFBYSxFQUFFQyxVQUFVLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBQy9ELE9BQU9DLGNBQWMsTUFBTSxVQUFVO0FBQ3JDLE9BQU9DLElBQUksTUFBTSw0QkFBNEI7QUFFN0MsTUFBTUMsZUFBZSxnQkFBR0wsYUFBYSxDQUFDLENBQUM7QUFDdkMsTUFBTU0sV0FBVyxHQUFHQSxDQUFBLEtBQU07RUFDeEIsTUFBTUMsZUFBZSxHQUFHTixVQUFVLENBQUNJLGVBQWUsQ0FBQztFQUVuRCxJQUFJRSxlQUFlLEVBQUU7SUFDbkIsT0FBT0EsZUFBZTtFQUN4QjtFQUVBLE9BQU87SUFDTEMsTUFBTSxFQUFFTDtFQUNWLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTU0sWUFBWSxHQUFHTCxJQUFJLENBQUMsQ0FBQztFQUFDTSxRQUFRO0VBQUVGLE1BQU07RUFBRSxHQUFHRztBQUFTLENBQUMsS0FBSztFQUM5RCxNQUFNQyxhQUFhLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSCxTQUFTLENBQUM7RUFDNUMsTUFBTUksS0FBSyxHQUFHYixPQUFPLENBQUMsT0FBTztJQUFDTTtFQUFNLENBQUMsQ0FBQyxFQUFFLENBQUNBLE1BQU0sQ0FBQyxDQUFDO0VBRWpELElBQUlJLGFBQWEsQ0FBQ0ksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLElBQUlDLEtBQUssQ0FBQyxvQkFBb0JMLGFBQWEsQ0FBQ00sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7RUFFN0Ysb0JBQ0VuQixLQUFBLENBQUFvQixhQUFBLENBQUNkLGVBQWUsQ0FBQ2UsUUFBUTtJQUFDTCxLQUFLLEVBQUVBO0VBQU0sR0FDcENMLFFBQ3VCLENBQUM7QUFFL0IsQ0FBQyxDQUFDO0FBRUYsU0FBUUosV0FBVyxFQUFFRyxZQUFZIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import { digg } from "diggerize";
|
|
3
|
+
import memo from "set-state-compare/src/memo";
|
|
4
|
+
import React from "react";
|
|
5
|
+
import useCollection from "./use-collection";
|
|
6
|
+
export default (WrappedComponent, withCollectionArgs) => memo(() => {
|
|
7
|
+
const useCollectionResult = useCollection(withCollectionArgs);
|
|
8
|
+
const models = digg(useCollectionResult, "models");
|
|
9
|
+
const modelsArgName = inflection.camelize(digg(withCollectionArgs.modelClass.modelClassData(), "pluralName"), true);
|
|
10
|
+
const forwardArgs = {};
|
|
11
|
+
forwardArgs[modelsArgName] = models;
|
|
12
|
+
return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, forwardArgs, this.props));
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaWdnIiwibWVtbyIsIlJlYWN0IiwidXNlQ29sbGVjdGlvbiIsIldyYXBwZWRDb21wb25lbnQiLCJ3aXRoQ29sbGVjdGlvbkFyZ3MiLCJ1c2VDb2xsZWN0aW9uUmVzdWx0IiwibW9kZWxzIiwibW9kZWxzQXJnTmFtZSIsImluZmxlY3Rpb24iLCJjYW1lbGl6ZSIsIm1vZGVsQ2xhc3MiLCJtb2RlbENsYXNzRGF0YSIsImZvcndhcmRBcmdzIiwiY3JlYXRlRWxlbWVudCIsIl9leHRlbmRzIiwicHJvcHMiXSwic291cmNlcyI6WyIuLi9zcmMvd2l0aC1jb2xsZWN0aW9uLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IG1lbW8gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL3NyYy9tZW1vXCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHVzZUNvbGxlY3Rpb24gZnJvbSBcIi4vdXNlLWNvbGxlY3Rpb25cIlxuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudCwgd2l0aENvbGxlY3Rpb25BcmdzKSA9PiBtZW1vKCgpID0+IHtcbiAgY29uc3QgdXNlQ29sbGVjdGlvblJlc3VsdCA9IHVzZUNvbGxlY3Rpb24od2l0aENvbGxlY3Rpb25BcmdzKVxuICBjb25zdCBtb2RlbHMgPSBkaWdnKHVzZUNvbGxlY3Rpb25SZXN1bHQsIFwibW9kZWxzXCIpXG4gIGNvbnN0IG1vZGVsc0FyZ05hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGRpZ2cod2l0aENvbGxlY3Rpb25BcmdzLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKSwgXCJwbHVyYWxOYW1lXCIpLCB0cnVlKVxuICBjb25zdCBmb3J3YXJkQXJncyA9IHt9XG5cbiAgZm9yd2FyZEFyZ3NbbW9kZWxzQXJnTmFtZV0gPSBtb2RlbHNcblxuICByZXR1cm4gKFxuICAgIDxXcmFwcGVkQ29tcG9uZW50IHsuLi5mb3J3YXJkQXJnc30gey4uLnRoaXMucHJvcHN9IC8+XG4gIClcbn0pXG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFRQSxJQUFJLFFBQU8sV0FBVztBQUM5QixPQUFPQyxJQUFJLE1BQU0sNEJBQTRCO0FBQzdDLE9BQU9DLEtBQUssTUFBTSxPQUFPO0FBQ3pCLE9BQU9DLGFBQWEsTUFBTSxrQkFBa0I7QUFFNUMsZUFBZSxDQUFDQyxnQkFBZ0IsRUFBRUMsa0JBQWtCLEtBQUtKLElBQUksQ0FBQyxNQUFNO0VBQ2xFLE1BQU1LLG1CQUFtQixHQUFHSCxhQUFhLENBQUNFLGtCQUFrQixDQUFDO0VBQzdELE1BQU1FLE1BQU0sR0FBR1AsSUFBSSxDQUFDTSxtQkFBbUIsRUFBRSxRQUFRLENBQUM7RUFDbEQsTUFBTUUsYUFBYSxHQUFHQyxVQUFVLENBQUNDLFFBQVEsQ0FBQ1YsSUFBSSxDQUFDSyxrQkFBa0IsQ0FBQ00sVUFBVSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQztFQUNuSCxNQUFNQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0VBRXRCQSxXQUFXLENBQUNMLGFBQWEsQ0FBQyxHQUFHRCxNQUFNO0VBRW5DLG9CQUNFTCxLQUFBLENBQUFZLGFBQUEsQ0FBQ1YsZ0JBQWdCLEVBQUFXLFFBQUEsS0FBS0YsV0FBVyxFQUFNLElBQUksQ0FBQ0csS0FBSyxDQUFHLENBQUM7QUFFekQsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import React from "react";
|
|
3
|
+
import useCurrentUser from "./use-current-user";
|
|
4
|
+
export default WrappedComponent => props => {
|
|
5
|
+
const currentUser = useCurrentUser();
|
|
6
|
+
return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {
|
|
7
|
+
currentUser: currentUser
|
|
8
|
+
}));
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUN1cnJlbnRVc2VyIiwiV3JhcHBlZENvbXBvbmVudCIsInByb3BzIiwiY3VycmVudFVzZXIiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMiXSwic291cmNlcyI6WyIuLi9zcmMvd2l0aC1jdXJyZW50LXVzZXIuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHVzZUN1cnJlbnRVc2VyIGZyb20gXCIuL3VzZS1jdXJyZW50LXVzZXJcIlxuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudCkgPT4gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlQ3VycmVudFVzZXIoKVxuXG4gIHJldHVybiAoXG4gICAgPFdyYXBwZWRDb21wb25lbnQgey4uLnByb3BzfSBjdXJyZW50VXNlcj17Y3VycmVudFVzZXJ9IC8+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLEtBQUssTUFBTSxPQUFPO0FBQ3pCLE9BQU9DLGNBQWMsTUFBTSxvQkFBb0I7QUFFL0MsZUFBZ0JDLGdCQUFnQixJQUFNQyxLQUFLLElBQUs7RUFDOUMsTUFBTUMsV0FBVyxHQUFHSCxjQUFjLENBQUMsQ0FBQztFQUVwQyxvQkFDRUQsS0FBQSxDQUFBSyxhQUFBLENBQUNILGdCQUFnQixFQUFBSSxRQUFBLEtBQUtILEtBQUs7SUFBRUMsV0FBVyxFQUFFQTtFQUFZLEVBQUUsQ0FBQztBQUU3RCxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import memo from "set-state-compare/src/memo";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import useModel from "./use-model";
|
|
5
|
+
export default (WrappedComponent, modelClass, givenArgs) => {
|
|
6
|
+
const ApiMakerWithModel = props => {
|
|
7
|
+
const args = Object.assign({
|
|
8
|
+
match: props.match
|
|
9
|
+
}, givenArgs);
|
|
10
|
+
const useModelResult = useModel(modelClass, args);
|
|
11
|
+
return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, useModelResult, props));
|
|
12
|
+
};
|
|
13
|
+
return memo(ApiMakerWithModel);
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZW1vIiwiUmVhY3QiLCJ1c2VNb2RlbCIsIldyYXBwZWRDb21wb25lbnQiLCJtb2RlbENsYXNzIiwiZ2l2ZW5BcmdzIiwiQXBpTWFrZXJXaXRoTW9kZWwiLCJwcm9wcyIsImFyZ3MiLCJPYmplY3QiLCJhc3NpZ24iLCJtYXRjaCIsInVzZU1vZGVsUmVzdWx0IiwiY3JlYXRlRWxlbWVudCIsIl9leHRlbmRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3dpdGgtbW9kZWwuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9zcmMvbWVtb1wiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB1c2VNb2RlbCBmcm9tIFwiLi91c2UtbW9kZWxcIlxuXG5leHBvcnQgZGVmYXVsdCAoV3JhcHBlZENvbXBvbmVudCwgbW9kZWxDbGFzcywgZ2l2ZW5BcmdzKSA9PiB7XG4gIGNvbnN0IEFwaU1ha2VyV2l0aE1vZGVsID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgYXJncyA9IE9iamVjdC5hc3NpZ24oe21hdGNoOiBwcm9wcy5tYXRjaH0sIGdpdmVuQXJncylcbiAgICBjb25zdCB1c2VNb2RlbFJlc3VsdCA9IHVzZU1vZGVsKG1vZGVsQ2xhc3MsIGFyZ3MpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFdyYXBwZWRDb21wb25lbnQgey4uLnVzZU1vZGVsUmVzdWx0fSB7Li4ucHJvcHN9IC8+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIG1lbW8oQXBpTWFrZXJXaXRoTW9kZWwpXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxJQUFJLE1BQU0sNEJBQTRCO0FBQzdDLE9BQU9DLEtBQUssTUFBTSxPQUFPO0FBQ3pCLE9BQU9DLFFBQVEsTUFBTSxhQUFhO0FBRWxDLGVBQWUsQ0FBQ0MsZ0JBQWdCLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxLQUFLO0VBQzFELE1BQU1DLGlCQUFpQixHQUFJQyxLQUFLLElBQUs7SUFDbkMsTUFBTUMsSUFBSSxHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQztNQUFDQyxLQUFLLEVBQUVKLEtBQUssQ0FBQ0k7SUFBSyxDQUFDLEVBQUVOLFNBQVMsQ0FBQztJQUMzRCxNQUFNTyxjQUFjLEdBQUdWLFFBQVEsQ0FBQ0UsVUFBVSxFQUFFSSxJQUFJLENBQUM7SUFFakQsb0JBQ0VQLEtBQUEsQ0FBQVksYUFBQSxDQUFDVixnQkFBZ0IsRUFBQVcsUUFBQSxLQUFLRixjQUFjLEVBQU1MLEtBQUssQ0FBRyxDQUFDO0VBRXZELENBQUM7RUFFRCxPQUFPUCxJQUFJLENBQUNNLGlCQUFpQixDQUFDO0FBQ2hDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import React from "react";
|
|
3
|
+
import useRouter from "./use-router";
|
|
4
|
+
export default WrapperComponent => props => {
|
|
5
|
+
const {
|
|
6
|
+
path,
|
|
7
|
+
routes,
|
|
8
|
+
routeDefinitions,
|
|
9
|
+
...restProps
|
|
10
|
+
} = props;
|
|
11
|
+
const {
|
|
12
|
+
match
|
|
13
|
+
} = useRouter({
|
|
14
|
+
path,
|
|
15
|
+
routes,
|
|
16
|
+
routeDefinitions
|
|
17
|
+
});
|
|
18
|
+
return /*#__PURE__*/React.createElement(WrapperComponent, _extends({
|
|
19
|
+
match: match
|
|
20
|
+
}, restProps));
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVJvdXRlciIsIldyYXBwZXJDb21wb25lbnQiLCJwcm9wcyIsInBhdGgiLCJyb3V0ZXMiLCJyb3V0ZURlZmluaXRpb25zIiwicmVzdFByb3BzIiwibWF0Y2giLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMiXSwic291cmNlcyI6WyIuLi9zcmMvd2l0aC1yb3V0ZXIuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHVzZVJvdXRlciBmcm9tIFwiLi91c2Utcm91dGVyXCJcblxuZXhwb3J0IGRlZmF1bHQgKFdyYXBwZXJDb21wb25lbnQpID0+IChwcm9wcykgPT4ge1xuICBjb25zdCB7cGF0aCwgcm91dGVzLCByb3V0ZURlZmluaXRpb25zLCAuLi5yZXN0UHJvcHN9ID0gcHJvcHNcbiAgY29uc3Qge21hdGNofSA9IHVzZVJvdXRlcih7cGF0aCwgcm91dGVzLCByb3V0ZURlZmluaXRpb25zfSlcblxuICByZXR1cm4gKFxuICAgIDxXcmFwcGVyQ29tcG9uZW50IG1hdGNoPXttYXRjaH0gey4uLnJlc3RQcm9wc30gLz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBT0EsS0FBSyxNQUFNLE9BQU87QUFDekIsT0FBT0MsU0FBUyxNQUFNLGNBQWM7QUFFcEMsZUFBZ0JDLGdCQUFnQixJQUFNQyxLQUFLLElBQUs7RUFDOUMsTUFBTTtJQUFDQyxJQUFJO0lBQUVDLE1BQU07SUFBRUMsZ0JBQWdCO0lBQUUsR0FBR0M7RUFBUyxDQUFDLEdBQUdKLEtBQUs7RUFDNUQsTUFBTTtJQUFDSztFQUFLLENBQUMsR0FBR1AsU0FBUyxDQUFDO0lBQUNHLElBQUk7SUFBRUMsTUFBTTtJQUFFQztFQUFnQixDQUFDLENBQUM7RUFFM0Qsb0JBQ0VOLEtBQUEsQ0FBQVMsYUFBQSxDQUFDUCxnQkFBZ0IsRUFBQVEsUUFBQTtJQUFDRixLQUFLLEVBQUVBO0VBQU0sR0FBS0QsU0FBUyxDQUFHLENBQUM7QUFFckQsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))
|
|
4
|
+
|
|
5
|
+
Pod::Spec.new do |s|
|
|
6
|
+
s.name = 'ApiMaker'
|
|
7
|
+
s.version = package['version']
|
|
8
|
+
s.summary = package['description']
|
|
9
|
+
s.description = package['description']
|
|
10
|
+
s.license = package['license']
|
|
11
|
+
s.author = package['author']
|
|
12
|
+
s.homepage = package['homepage']
|
|
13
|
+
s.platforms = {
|
|
14
|
+
:ios => '15.1',
|
|
15
|
+
:tvos => '15.1'
|
|
16
|
+
}
|
|
17
|
+
s.swift_version = '5.4'
|
|
18
|
+
s.source = { git: 'https://github.com/kaspernj/api_maker' }
|
|
19
|
+
s.static_framework = true
|
|
20
|
+
|
|
21
|
+
s.dependency 'ExpoModulesCore'
|
|
22
|
+
|
|
23
|
+
# Swift/Objective-C compatibility
|
|
24
|
+
s.pod_target_xcconfig = {
|
|
25
|
+
'DEFINES_MODULE' => 'YES',
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
s.source_files = "**/*.{h,m,mm,swift,hpp,cpp}"
|
|
29
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import ExpoModulesCore
|
|
2
|
+
|
|
3
|
+
public class ApiMakerModule: Module {
|
|
4
|
+
// Each module class must implement the definition function. The definition consists of components
|
|
5
|
+
// that describes the module's functionality and behavior.
|
|
6
|
+
// See https://docs.expo.dev/modules/module-api for more details about available components.
|
|
7
|
+
public func definition() -> ModuleDefinition {
|
|
8
|
+
// Sets the name of the module that JavaScript code will use to refer to the module. Takes a string as an argument.
|
|
9
|
+
// Can be inferred from module's class name, but it's recommended to set it explicitly for clarity.
|
|
10
|
+
// The module will be accessible from `requireNativeModule('ApiMaker')` in JavaScript.
|
|
11
|
+
Name("ApiMaker")
|
|
12
|
+
|
|
13
|
+
// Sets constant properties on the module. Can take a dictionary or a closure that returns a dictionary.
|
|
14
|
+
Constants([
|
|
15
|
+
"PI": Double.pi
|
|
16
|
+
])
|
|
17
|
+
|
|
18
|
+
// Defines event names that the module can send to JavaScript.
|
|
19
|
+
Events("onChange")
|
|
20
|
+
|
|
21
|
+
// Defines a JavaScript synchronous function that runs the native code on the JavaScript thread.
|
|
22
|
+
Function("hello") {
|
|
23
|
+
return "Hello world! 👋"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Defines a JavaScript function that always returns a Promise and whose native code
|
|
27
|
+
// is by default dispatched on the different thread than the JavaScript runtime runs on.
|
|
28
|
+
AsyncFunction("setValueAsync") { (value: String) in
|
|
29
|
+
// Send an event to JavaScript.
|
|
30
|
+
self.sendEvent("onChange", [
|
|
31
|
+
"value": value
|
|
32
|
+
])
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Enables the module to be used as a native view. Definition components that are accepted as part of the
|
|
36
|
+
// view definition: Prop, Events.
|
|
37
|
+
View(ApiMakerView.self) {
|
|
38
|
+
// Defines a setter for the `url` prop.
|
|
39
|
+
Prop("url") { (view: ApiMakerView, url: URL) in
|
|
40
|
+
if view.webView.url != url {
|
|
41
|
+
view.webView.load(URLRequest(url: url))
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
Events("onLoad")
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import ExpoModulesCore
|
|
2
|
+
import WebKit
|
|
3
|
+
|
|
4
|
+
// This view will be used as a native component. Make sure to inherit from `ExpoView`
|
|
5
|
+
// to apply the proper styling (e.g. border radius and shadows).
|
|
6
|
+
class ApiMakerView: ExpoView {
|
|
7
|
+
let webView = WKWebView()
|
|
8
|
+
let onLoad = EventDispatcher()
|
|
9
|
+
var delegate: WebViewDelegate?
|
|
10
|
+
|
|
11
|
+
required init(appContext: AppContext? = nil) {
|
|
12
|
+
super.init(appContext: appContext)
|
|
13
|
+
clipsToBounds = true
|
|
14
|
+
delegate = WebViewDelegate { url in
|
|
15
|
+
self.onLoad(["url": url])
|
|
16
|
+
}
|
|
17
|
+
webView.navigationDelegate = delegate
|
|
18
|
+
addSubview(webView)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override func layoutSubviews() {
|
|
22
|
+
webView.frame = bounds
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
class WebViewDelegate: NSObject, WKNavigationDelegate {
|
|
27
|
+
let onUrlChange: (String) -> Void
|
|
28
|
+
|
|
29
|
+
init(onUrlChange: @escaping (String) -> Void) {
|
|
30
|
+
self.onUrlChange = onUrlChange
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation) {
|
|
34
|
+
if let url = webView.url {
|
|
35
|
+
onUrlChange(url.absoluteString)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
package/package.json
CHANGED
|
@@ -1,46 +1,45 @@
|
|
|
1
1
|
{
|
|
2
|
-
"babel": {
|
|
3
|
-
"presets": [
|
|
4
|
-
[
|
|
5
|
-
"@babel/preset-env",
|
|
6
|
-
{
|
|
7
|
-
"targets": {
|
|
8
|
-
"node": "current"
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
],
|
|
12
|
-
"@babel/preset-react"
|
|
13
|
-
],
|
|
14
|
-
"plugins": [
|
|
15
|
-
"@babel/plugin-proposal-class-properties"
|
|
16
|
-
]
|
|
17
|
-
},
|
|
18
2
|
"name": "@kaspernj/api-maker",
|
|
19
|
-
"version": "1.0.
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
3
|
+
"version": "1.0.2013",
|
|
4
|
+
"description": "My new module",
|
|
5
|
+
"main": "build/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "babel src --out-dir build --extensions \".js,.jsx\" --source-maps inline",
|
|
8
|
+
"build-expo": "expo-module build",
|
|
9
|
+
"clean": "expo-module clean",
|
|
10
|
+
"lint": "expo-module lint",
|
|
11
|
+
"test": "expo-module test",
|
|
12
|
+
"prepare": "npm run clean && npm run build",
|
|
13
|
+
"prepublishOnly": "expo-module prepublishOnly",
|
|
14
|
+
"expo-module": "expo-module",
|
|
15
|
+
"open:ios": "xed example/ios",
|
|
16
|
+
"open:android": "open -a \"Android Studio\" example/android",
|
|
17
|
+
"eslint": "eslint --ext .js,.jsx",
|
|
18
|
+
"eslint-find-rules": "eslint-find-rules",
|
|
19
|
+
"watch": "babel src --out-dir build --extensions \".js,.jsx\" --source-maps inline --watch"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"react-native",
|
|
23
|
+
"expo",
|
|
24
|
+
"api-maker",
|
|
25
|
+
"ApiMaker"
|
|
26
|
+
],
|
|
23
27
|
"repository": {
|
|
24
28
|
"type": "git",
|
|
25
29
|
"url": "git+https://github.com/kaspernj/api_maker.git"
|
|
26
30
|
},
|
|
27
|
-
"author": "kaspernj",
|
|
28
|
-
"license": "ISC",
|
|
29
31
|
"bugs": {
|
|
30
32
|
"url": "https://github.com/kaspernj/api_maker/issues"
|
|
31
33
|
},
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
"eslint-find-rules": "eslint-find-rules",
|
|
36
|
-
"test": "jest"
|
|
37
|
-
},
|
|
34
|
+
"author": "kaspernj <kasper@diestoeckels.de> (github.com/kaspernj)",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"homepage": "https://github.com/kaspernj/api_maker#readme",
|
|
38
37
|
"dependencies": {
|
|
39
|
-
"@rails/actioncable": ">= 6.1.0",
|
|
40
38
|
"clone-deep": ">= 4.0.1",
|
|
41
|
-
"debounce": ">=
|
|
39
|
+
"debounce": ">= 2.0.0",
|
|
42
40
|
"diggerize": ">= 1.0.5",
|
|
43
|
-
"epic-locks": ">= 1.0.
|
|
41
|
+
"epic-locks": ">= 1.0.2",
|
|
42
|
+
"file-saver": "^2.0.5",
|
|
44
43
|
"form-data-objectizer": ">= 1.0.0",
|
|
45
44
|
"form-serialize": ">= 0.7.2",
|
|
46
45
|
"format-number": ">= 3.0.0",
|
|
@@ -49,31 +48,35 @@
|
|
|
49
48
|
"js-money": ">= 0.6.3",
|
|
50
49
|
"numberable": ">= 1.0.0",
|
|
51
50
|
"object-to-formdata": ">= 4.1.0",
|
|
51
|
+
"on-location-changed": ">= 1.0.18",
|
|
52
52
|
"qs": ">= 6.9.3",
|
|
53
53
|
"replaceall": ">= 0.1.6",
|
|
54
|
+
"set-state-compare": ">= 1.0.55",
|
|
55
|
+
"spark-md5": "^3.0.2",
|
|
56
|
+
"stacktrace-parser": "^0.1.10",
|
|
54
57
|
"strftime": ">= 0.10.0",
|
|
55
58
|
"uniqunize": "^1.0.1",
|
|
59
|
+
"url-parse": "^1.5.10",
|
|
56
60
|
"wake-event": ">= 0.0.1"
|
|
57
61
|
},
|
|
58
|
-
"peerDependencies": {
|
|
59
|
-
"prop-types": "^15.7.2",
|
|
60
|
-
"prop-types-exact": ">= 1.2.0",
|
|
61
|
-
"react": ">= 17.0.2",
|
|
62
|
-
"react-test-renderer": "^17.0.1",
|
|
63
|
-
"source-map": "^0.7.3",
|
|
64
|
-
"stacktrace-parser": ">= 0.1.9"
|
|
65
|
-
},
|
|
66
62
|
"devDependencies": {
|
|
67
63
|
"@babel/eslint-parser": "^7.16.3",
|
|
68
64
|
"@babel/preset-env": "^7.12.11",
|
|
69
|
-
"@babel/preset-react": "^7.
|
|
70
|
-
"babel-jest": "^
|
|
65
|
+
"@babel/preset-react": "^7.26.3",
|
|
66
|
+
"babel-jest": "^29.0.1",
|
|
71
67
|
"eslint": "^8.2.0",
|
|
72
|
-
"eslint-find-rules": "^
|
|
73
|
-
"eslint-plugin-jest": "^
|
|
68
|
+
"eslint-find-rules": "^5.0.0",
|
|
69
|
+
"eslint-plugin-jest": "^28.2.0",
|
|
74
70
|
"eslint-plugin-react": "^7.23.2",
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
71
|
+
"expo": "~52.0.0",
|
|
72
|
+
"expo-module-scripts": "^4.0.2",
|
|
73
|
+
"jest": "^29.0.1"
|
|
74
|
+
},
|
|
75
|
+
"peerDependencies": {
|
|
76
|
+
"expo": "*",
|
|
77
|
+
"i18n-on-steroids": "*",
|
|
78
|
+
"react": "*",
|
|
79
|
+
"react-native": "*",
|
|
80
|
+
"react-native-vector-icons": "*"
|
|
78
81
|
}
|
|
79
82
|
}
|