@data-client/core 0.1.0
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/LICENSE +201 -0
- package/README.md +71 -0
- package/dist/index.js +1643 -0
- package/dist/index.umd.min.js +1 -0
- package/dist/next.js +461 -0
- package/dist/package.json +1 -0
- package/legacy/actionTypes.js +12 -0
- package/legacy/compatibleActions.js +2 -0
- package/legacy/controller/BaseController.js +289 -0
- package/legacy/controller/Controller.js +20 -0
- package/legacy/controller/createFetch.js +42 -0
- package/legacy/controller/createInvalidate.js +12 -0
- package/legacy/controller/createInvalidateAll.js +8 -0
- package/legacy/controller/createOptimistic.js +33 -0
- package/legacy/controller/createReceive.js +36 -0
- package/legacy/controller/createReset.js +8 -0
- package/legacy/controller/createSubscription.js +30 -0
- package/legacy/controller/types.js +2 -0
- package/legacy/endpoint/index.js +2 -0
- package/legacy/endpoint/shapes.js +2 -0
- package/legacy/endpoint/types.js +2 -0
- package/legacy/fsa.js +2 -0
- package/legacy/index.js +22 -0
- package/legacy/internal.js +4 -0
- package/legacy/legacyActions.js +2 -0
- package/legacy/manager/ConnectionListener.js +2 -0
- package/legacy/manager/DefaultConnectionListener.js +40 -0
- package/legacy/manager/DevtoolsManager.js +73 -0
- package/legacy/manager/LogoutManager.js +34 -0
- package/legacy/manager/NetworkManager.js +291 -0
- package/legacy/manager/PollingSubscription.js +159 -0
- package/legacy/manager/SubscriptionManager.js +117 -0
- package/legacy/manager/applyManager.js +23 -0
- package/legacy/manager/devtoolsTypes.js +2 -0
- package/legacy/manager/index.js +6 -0
- package/legacy/middlewareTypes.js +2 -0
- package/legacy/newActions.js +2 -0
- package/legacy/next/Controller.js +24 -0
- package/legacy/next/index.js +3 -0
- package/legacy/previousActions.js +2 -0
- package/legacy/state/RIC.js +3 -0
- package/legacy/state/applyUpdatersToResults.js +4 -0
- package/legacy/state/legacy-actions/createFetch.js +62 -0
- package/legacy/state/legacy-actions/createReceive.js +37 -0
- package/legacy/state/legacy-actions/createReceiveError.js +28 -0
- package/legacy/state/legacy-actions/index.js +4 -0
- package/legacy/state/reducer/createReducer.js +54 -0
- package/legacy/state/reducer/fetchReducer.js +32 -0
- package/legacy/state/reducer/invalidateReducer.js +28 -0
- package/legacy/state/reducer/setReducer.js +113 -0
- package/legacy/state/reducerInstance.js +9 -0
- package/legacy/state/selectMeta.js +4 -0
- package/legacy/types.js +8 -0
- package/lib/actionTypes.d.ts +11 -0
- package/lib/actionTypes.d.ts.map +1 -0
- package/lib/actionTypes.js +12 -0
- package/lib/compatibleActions.d.ts +47 -0
- package/lib/compatibleActions.d.ts.map +1 -0
- package/lib/compatibleActions.js +2 -0
- package/lib/controller/BaseController.d.ts +128 -0
- package/lib/controller/BaseController.d.ts.map +1 -0
- package/lib/controller/BaseController.js +289 -0
- package/lib/controller/Controller.d.ts +14 -0
- package/lib/controller/Controller.d.ts.map +1 -0
- package/lib/controller/Controller.js +20 -0
- package/lib/controller/createFetch.d.ts +12 -0
- package/lib/controller/createFetch.d.ts.map +1 -0
- package/lib/controller/createFetch.js +42 -0
- package/lib/controller/createInvalidate.d.ts +6 -0
- package/lib/controller/createInvalidate.d.ts.map +1 -0
- package/lib/controller/createInvalidate.js +12 -0
- package/lib/controller/createInvalidateAll.d.ts +3 -0
- package/lib/controller/createInvalidateAll.d.ts.map +1 -0
- package/lib/controller/createInvalidateAll.js +8 -0
- package/lib/controller/createOptimistic.d.ts +10 -0
- package/lib/controller/createOptimistic.d.ts.map +1 -0
- package/lib/controller/createOptimistic.js +33 -0
- package/lib/controller/createReceive.d.ts +20 -0
- package/lib/controller/createReceive.d.ts.map +1 -0
- package/lib/controller/createReceive.js +36 -0
- package/lib/controller/createReset.d.ts +3 -0
- package/lib/controller/createReset.d.ts.map +1 -0
- package/lib/controller/createReset.js +8 -0
- package/lib/controller/createSubscription.d.ts +9 -0
- package/lib/controller/createSubscription.d.ts.map +1 -0
- package/lib/controller/createSubscription.js +30 -0
- package/lib/controller/types.d.ts +6 -0
- package/lib/controller/types.d.ts.map +1 -0
- package/lib/controller/types.js +2 -0
- package/lib/endpoint/index.d.ts +3 -0
- package/lib/endpoint/index.d.ts.map +1 -0
- package/lib/endpoint/index.js +2 -0
- package/lib/endpoint/shapes.d.ts +25 -0
- package/lib/endpoint/shapes.d.ts.map +1 -0
- package/lib/endpoint/shapes.js +2 -0
- package/lib/endpoint/types.d.ts +45 -0
- package/lib/endpoint/types.d.ts.map +1 -0
- package/lib/endpoint/types.js +2 -0
- package/lib/fsa.d.ts +41 -0
- package/lib/fsa.d.ts.map +1 -0
- package/lib/fsa.js +2 -0
- package/lib/index.d.ts +19 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +22 -0
- package/lib/internal.d.ts +4 -0
- package/lib/internal.d.ts.map +1 -0
- package/lib/internal.js +4 -0
- package/lib/legacyActions.d.ts +92 -0
- package/lib/legacyActions.d.ts.map +1 -0
- package/lib/legacyActions.js +2 -0
- package/lib/manager/ConnectionListener.d.ts +8 -0
- package/lib/manager/ConnectionListener.d.ts.map +1 -0
- package/lib/manager/ConnectionListener.js +2 -0
- package/lib/manager/DefaultConnectionListener.d.ts +20 -0
- package/lib/manager/DefaultConnectionListener.d.ts.map +1 -0
- package/lib/manager/DefaultConnectionListener.js +40 -0
- package/lib/manager/DevtoolsManager.d.ts +24 -0
- package/lib/manager/DevtoolsManager.d.ts.map +1 -0
- package/lib/manager/DevtoolsManager.js +74 -0
- package/lib/manager/LogoutManager.d.ts +25 -0
- package/lib/manager/LogoutManager.d.ts.map +1 -0
- package/lib/manager/LogoutManager.js +34 -0
- package/lib/manager/NetworkManager.d.ts +82 -0
- package/lib/manager/NetworkManager.d.ts.map +1 -0
- package/lib/manager/NetworkManager.js +295 -0
- package/lib/manager/PollingSubscription.d.ts +45 -0
- package/lib/manager/PollingSubscription.d.ts.map +1 -0
- package/lib/manager/PollingSubscription.js +159 -0
- package/lib/manager/SubscriptionManager.d.ts +55 -0
- package/lib/manager/SubscriptionManager.d.ts.map +1 -0
- package/lib/manager/SubscriptionManager.js +117 -0
- package/lib/manager/applyManager.d.ts +10 -0
- package/lib/manager/applyManager.d.ts.map +1 -0
- package/lib/manager/applyManager.js +23 -0
- package/lib/manager/devtoolsTypes.d.ts +205 -0
- package/lib/manager/devtoolsTypes.d.ts.map +1 -0
- package/lib/manager/devtoolsTypes.js +2 -0
- package/lib/manager/index.d.ts +8 -0
- package/lib/manager/index.d.ts.map +1 -0
- package/lib/manager/index.js +6 -0
- package/lib/middlewareTypes.d.ts +18 -0
- package/lib/middlewareTypes.d.ts.map +1 -0
- package/lib/middlewareTypes.js +2 -0
- package/lib/newActions.d.ts +85 -0
- package/lib/newActions.d.ts.map +1 -0
- package/lib/newActions.js +2 -0
- package/lib/next/Controller.d.ts +14 -0
- package/lib/next/Controller.d.ts.map +1 -0
- package/lib/next/Controller.js +24 -0
- package/lib/next/index.d.ts +3 -0
- package/lib/next/index.d.ts.map +1 -0
- package/lib/next/index.js +3 -0
- package/lib/previousActions.d.ts +91 -0
- package/lib/previousActions.d.ts.map +1 -0
- package/lib/previousActions.js +2 -0
- package/lib/state/RIC.d.ts +2 -0
- package/lib/state/RIC.js +3 -0
- package/lib/state/applyUpdatersToResults.d.ts +13 -0
- package/lib/state/applyUpdatersToResults.d.ts.map +1 -0
- package/lib/state/applyUpdatersToResults.js +7 -0
- package/lib/state/legacy-actions/createFetch.d.ts +19 -0
- package/lib/state/legacy-actions/createFetch.d.ts.map +1 -0
- package/lib/state/legacy-actions/createFetch.js +62 -0
- package/lib/state/legacy-actions/createReceive.d.ts +14 -0
- package/lib/state/legacy-actions/createReceive.d.ts.map +1 -0
- package/lib/state/legacy-actions/createReceive.js +37 -0
- package/lib/state/legacy-actions/createReceiveError.d.ts +9 -0
- package/lib/state/legacy-actions/createReceiveError.d.ts.map +1 -0
- package/lib/state/legacy-actions/createReceiveError.js +28 -0
- package/lib/state/legacy-actions/index.d.ts +4 -0
- package/lib/state/legacy-actions/index.d.ts.map +1 -0
- package/lib/state/legacy-actions/index.js +4 -0
- package/lib/state/reducer/createReducer.d.ts +7 -0
- package/lib/state/reducer/createReducer.d.ts.map +1 -0
- package/lib/state/reducer/createReducer.js +55 -0
- package/lib/state/reducer/fetchReducer.d.ts +4 -0
- package/lib/state/reducer/fetchReducer.d.ts.map +1 -0
- package/lib/state/reducer/fetchReducer.js +34 -0
- package/lib/state/reducer/invalidateReducer.d.ts +37 -0
- package/lib/state/reducer/invalidateReducer.d.ts.map +1 -0
- package/lib/state/reducer/invalidateReducer.js +34 -0
- package/lib/state/reducer/setReducer.d.ts +40 -0
- package/lib/state/reducer/setReducer.d.ts.map +1 -0
- package/lib/state/reducer/setReducer.js +119 -0
- package/lib/state/reducerInstance.d.ts +7 -0
- package/lib/state/reducerInstance.d.ts.map +1 -0
- package/lib/state/reducerInstance.js +9 -0
- package/lib/state/selectMeta.d.ts +3 -0
- package/lib/state/selectMeta.d.ts.map +1 -0
- package/lib/state/selectMeta.js +4 -0
- package/lib/types.d.ts +71 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +8 -0
- package/node.mjs +1 -0
- package/package.json +127 -0
- package/src/actionTypes.ts +11 -0
- package/src/compatibleActions.ts +96 -0
- package/src/controller/BaseController.ts +508 -0
- package/src/controller/Controller.ts +32 -0
- package/src/controller/__tests__/Controller.ts +29 -0
- package/src/controller/__tests__/__snapshots__/getResponse.ts.snap +35 -0
- package/src/controller/__tests__/getResponse.ts +182 -0
- package/src/controller/createFetch.ts +54 -0
- package/src/controller/createInvalidate.ts +16 -0
- package/src/controller/createInvalidateAll.ts +11 -0
- package/src/controller/createOptimistic.ts +47 -0
- package/src/controller/createReceive.ts +85 -0
- package/src/controller/createReset.ts +9 -0
- package/src/controller/createSubscription.ts +39 -0
- package/src/controller/types.ts +22 -0
- package/src/endpoint/index.ts +14 -0
- package/src/endpoint/shapes.ts +53 -0
- package/src/endpoint/types.ts +72 -0
- package/src/fsa.ts +99 -0
- package/src/index.ts +61 -0
- package/src/internal.ts +3 -0
- package/src/legacyActions.ts +163 -0
- package/src/manager/ConnectionListener.ts +7 -0
- package/src/manager/DefaultConnectionListener.ts +54 -0
- package/src/manager/DevtoolsManager.ts +99 -0
- package/src/manager/LogoutManager.ts +57 -0
- package/src/manager/NetworkManager.ts +346 -0
- package/src/manager/PollingSubscription.ts +190 -0
- package/src/manager/SubscriptionManager.ts +156 -0
- package/src/manager/__tests__/__snapshots__/pollingSubscription-endpoint.ts.snap +49 -0
- package/src/manager/__tests__/__snapshots__/pollingSubscription.ts.snap +43 -0
- package/src/manager/__tests__/logoutManager.ts +112 -0
- package/src/manager/__tests__/manager.ts +44 -0
- package/src/manager/__tests__/networkManager-legacy.ts +394 -0
- package/src/manager/__tests__/networkManager.ts +426 -0
- package/src/manager/__tests__/pollingSubscription-endpoint.ts +423 -0
- package/src/manager/__tests__/pollingSubscription.ts +313 -0
- package/src/manager/__tests__/subscriptionManager.ts +208 -0
- package/src/manager/applyManager.ts +33 -0
- package/src/manager/devtoolsTypes.ts +210 -0
- package/src/manager/index.ts +7 -0
- package/src/middlewareTypes.ts +49 -0
- package/src/newActions.ts +140 -0
- package/src/next/Controller.ts +39 -0
- package/src/next/index.ts +2 -0
- package/src/package.json +1 -0
- package/src/previousActions.ts +159 -0
- package/src/state/RIC.d.ts +2 -0
- package/src/state/RIC.js +5 -0
- package/src/state/__tests__/RIC.web.ts +16 -0
- package/src/state/__tests__/__snapshots__/reducer.ts.snap +56 -0
- package/src/state/__tests__/applyUpdatersToResults.ts +40 -0
- package/src/state/__tests__/reducer.ts +868 -0
- package/src/state/applyUpdatersToResults.ts +29 -0
- package/src/state/legacy-actions/createFetch.ts +95 -0
- package/src/state/legacy-actions/createReceive.ts +68 -0
- package/src/state/legacy-actions/createReceiveError.ts +43 -0
- package/src/state/legacy-actions/index.ts +3 -0
- package/src/state/reducer/createReducer.ts +80 -0
- package/src/state/reducer/fetchReducer.ts +48 -0
- package/src/state/reducer/invalidateReducer.ts +39 -0
- package/src/state/reducer/setReducer.ts +157 -0
- package/src/state/reducerInstance.ts +14 -0
- package/src/state/selectMeta.ts +8 -0
- package/src/types.ts +125 -0
- package/ts3.4/actionTypes.d.ts +11 -0
- package/ts3.4/compatibleActions.d.ts +47 -0
- package/ts3.4/controller/BaseController.d.ts +170 -0
- package/ts3.4/controller/Controller.d.ts +14 -0
- package/ts3.4/controller/createFetch.d.ts +14 -0
- package/ts3.4/controller/createInvalidate.d.ts +8 -0
- package/ts3.4/controller/createInvalidateAll.d.ts +3 -0
- package/ts3.4/controller/createOptimistic.d.ts +12 -0
- package/ts3.4/controller/createReceive.d.ts +24 -0
- package/ts3.4/controller/createReset.d.ts +3 -0
- package/ts3.4/controller/createSubscription.d.ts +13 -0
- package/ts3.4/controller/types.d.ts +6 -0
- package/ts3.4/endpoint/index.d.ts +3 -0
- package/ts3.4/endpoint/shapes.d.ts +25 -0
- package/ts3.4/endpoint/types.d.ts +45 -0
- package/ts3.4/fsa.d.ts +41 -0
- package/ts3.4/index.d.ts +22 -0
- package/ts3.4/internal.d.ts +4 -0
- package/ts3.4/legacyActions.d.ts +95 -0
- package/ts3.4/manager/ConnectionListener.d.ts +8 -0
- package/ts3.4/manager/DefaultConnectionListener.d.ts +20 -0
- package/ts3.4/manager/DevtoolsManager.d.ts +24 -0
- package/ts3.4/manager/LogoutManager.d.ts +25 -0
- package/ts3.4/manager/NetworkManager.d.ts +82 -0
- package/ts3.4/manager/PollingSubscription.d.ts +45 -0
- package/ts3.4/manager/SubscriptionManager.d.ts +55 -0
- package/ts3.4/manager/applyManager.d.ts +10 -0
- package/ts3.4/manager/devtoolsTypes.d.ts +205 -0
- package/ts3.4/manager/index.d.ts +8 -0
- package/ts3.4/middlewareTypes.d.ts +18 -0
- package/ts3.4/newActions.d.ts +88 -0
- package/ts3.4/next/Controller.d.ts +14 -0
- package/ts3.4/next/index.d.ts +3 -0
- package/ts3.4/previousActions.d.ts +94 -0
- package/ts3.4/state/RIC.d.ts +2 -0
- package/ts3.4/state/applyUpdatersToResults.d.ts +13 -0
- package/ts3.4/state/legacy-actions/createFetch.d.ts +19 -0
- package/ts3.4/state/legacy-actions/createReceive.d.ts +14 -0
- package/ts3.4/state/legacy-actions/createReceiveError.d.ts +9 -0
- package/ts3.4/state/legacy-actions/index.d.ts +4 -0
- package/ts3.4/state/reducer/createReducer.d.ts +7 -0
- package/ts3.4/state/reducer/fetchReducer.d.ts +4 -0
- package/ts3.4/state/reducer/invalidateReducer.d.ts +37 -0
- package/ts3.4/state/reducer/setReducer.d.ts +40 -0
- package/ts3.4/state/reducerInstance.d.ts +7 -0
- package/ts3.4/state/selectMeta.d.ts +3 -0
- package/ts3.4/types.d.ts +73 -0
- package/typescript.svg +8 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { WeakEntityMap, ExpiryStatus, denormalizeCached, isEntity } from '@data-client/normalizr';
|
|
2
|
+
import { inferResults, validateInference } from '@data-client/normalizr';
|
|
3
|
+
import createInvalidate from './createInvalidate.js';
|
|
4
|
+
import createInvalidateAll from './createInvalidateAll.js';
|
|
5
|
+
import createReceive from './createReceive.js';
|
|
6
|
+
import createReset from './createReset.js';
|
|
7
|
+
import { createUnsubscription, createSubscription } from './createSubscription.js';
|
|
8
|
+
import { initialState } from '../state/reducer/createReducer.js';
|
|
9
|
+
import selectMeta from '../state/selectMeta.js';
|
|
10
|
+
const unsetDispatch = action => {
|
|
11
|
+
throw new Error(`Dispatching while constructing your middleware is not allowed. ` + `Other middleware would not be applied to this dispatch.`);
|
|
12
|
+
};
|
|
13
|
+
const unsetState = () => {
|
|
14
|
+
// This is only the value until it is set by the CacheProvider
|
|
15
|
+
/* istanbul ignore next */
|
|
16
|
+
return initialState;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Imperative control of Rest Hooks store
|
|
21
|
+
* @see https://resthooks.io/docs/api/Controller
|
|
22
|
+
*/
|
|
23
|
+
export default class Controller {
|
|
24
|
+
/**
|
|
25
|
+
* Dispatches an action to Rest Hooks reducer.
|
|
26
|
+
*
|
|
27
|
+
* @see https://resthooks.io/docs/api/Controller#dispatch
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Gets the latest state snapshot that is fully committed.
|
|
32
|
+
*
|
|
33
|
+
* This can be useful for imperative use-cases like event handlers.
|
|
34
|
+
* This should *not* be used to render; instead useSuspense() or useCache()
|
|
35
|
+
* @see https://resthooks.io/docs/api/Controller#getState
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
constructor({
|
|
39
|
+
dispatch = unsetDispatch,
|
|
40
|
+
getState = unsetState,
|
|
41
|
+
globalCache = {
|
|
42
|
+
entities: {},
|
|
43
|
+
results: {}
|
|
44
|
+
}
|
|
45
|
+
} = {}) {
|
|
46
|
+
/*************** Action Dispatchers ***************/
|
|
47
|
+
/**
|
|
48
|
+
* Forces refetching and suspense on useSuspense with the same Endpoint and parameters.
|
|
49
|
+
* @see https://resthooks.io/docs/api/Controller#invalidate
|
|
50
|
+
*/
|
|
51
|
+
this.invalidate = (endpoint, ...args) => args[0] !== null ? this.dispatch(createInvalidate(endpoint, {
|
|
52
|
+
args: args
|
|
53
|
+
})) : Promise.resolve();
|
|
54
|
+
/**
|
|
55
|
+
* Forces refetching and suspense on useSuspense on all matching endpoint result keys.
|
|
56
|
+
* @see https://resthooks.io/docs/api/Controller#invalidateAll
|
|
57
|
+
*/
|
|
58
|
+
this.invalidateAll = options => this.dispatch(createInvalidateAll(key => options.testKey(key)));
|
|
59
|
+
/**
|
|
60
|
+
* Resets the entire Rest Hooks cache. All inflight requests will not resolve.
|
|
61
|
+
* @see https://resthooks.io/docs/api/Controller#resetEntireStore
|
|
62
|
+
*/
|
|
63
|
+
this.resetEntireStore = () => this.dispatch(createReset());
|
|
64
|
+
/**
|
|
65
|
+
* Stores response in cache for given Endpoint and args.
|
|
66
|
+
* @see https://resthooks.io/docs/api/Controller#set
|
|
67
|
+
*/
|
|
68
|
+
this.setResponse = (endpoint, ...rest) => {
|
|
69
|
+
const response = rest[rest.length - 1];
|
|
70
|
+
const action = createReceive(endpoint, {
|
|
71
|
+
args: rest.slice(0, rest.length - 1),
|
|
72
|
+
response
|
|
73
|
+
});
|
|
74
|
+
return this.dispatch(action);
|
|
75
|
+
};
|
|
76
|
+
// TODO: deprecate
|
|
77
|
+
/**
|
|
78
|
+
* Another name for setResponse
|
|
79
|
+
* @see https://resthooks.io/docs/api/Controller#setResponse
|
|
80
|
+
*/
|
|
81
|
+
/* istanbul ignore next */
|
|
82
|
+
this.receive = (endpoint, ...rest) => {
|
|
83
|
+
/* istanbul ignore next */
|
|
84
|
+
return this.setResponse(endpoint, ...rest);
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Stores the result of Endpoint and args as the error provided.
|
|
88
|
+
* @see https://resthooks.io/docs/api/Controller#setError
|
|
89
|
+
*/
|
|
90
|
+
this.setError = (endpoint, ...rest) => {
|
|
91
|
+
const response = rest[rest.length - 1];
|
|
92
|
+
const action = createReceive(endpoint, {
|
|
93
|
+
args: rest.slice(0, rest.length - 1),
|
|
94
|
+
response,
|
|
95
|
+
error: true
|
|
96
|
+
});
|
|
97
|
+
return this.dispatch(action);
|
|
98
|
+
};
|
|
99
|
+
// TODO: deprecate
|
|
100
|
+
/**
|
|
101
|
+
* Another name for setError
|
|
102
|
+
* @see https://resthooks.io/docs/api/Controller#setError
|
|
103
|
+
*/
|
|
104
|
+
/* istanbul ignore next */
|
|
105
|
+
this.receiveError = (endpoint, ...rest) => {
|
|
106
|
+
/* istanbul ignore next */
|
|
107
|
+
return this.setError(endpoint, ...rest);
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Resolves an inflight fetch. `fetchedAt` should `fetch`'s `createdAt`
|
|
111
|
+
* @see https://resthooks.io/docs/api/Controller#resolve
|
|
112
|
+
*/
|
|
113
|
+
this.resolve = (endpoint, meta) => {
|
|
114
|
+
return this.dispatch(createReceive(endpoint, meta));
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Marks a new subscription to a given Endpoint.
|
|
118
|
+
* @see https://resthooks.io/docs/api/Controller#subscribe
|
|
119
|
+
*/
|
|
120
|
+
this.subscribe = (endpoint, ...args) => args[0] !== null ? this.dispatch(createSubscription(endpoint, {
|
|
121
|
+
args: args
|
|
122
|
+
})) : Promise.resolve();
|
|
123
|
+
/**
|
|
124
|
+
* Marks completion of subscription to a given Endpoint.
|
|
125
|
+
* @see https://resthooks.io/docs/api/Controller#unsubscribe
|
|
126
|
+
*/
|
|
127
|
+
this.unsubscribe = (endpoint, ...args) => args[0] !== null ? this.dispatch(createUnsubscription(endpoint, {
|
|
128
|
+
args: args
|
|
129
|
+
})) : Promise.resolve();
|
|
130
|
+
/*************** More ***************/
|
|
131
|
+
/* TODO:
|
|
132
|
+
abort = <E extends EndpointInterface>(
|
|
133
|
+
endpoint: E,
|
|
134
|
+
...args: readonly [...Parameters<E>]
|
|
135
|
+
): Promise<void>
|
|
136
|
+
*/
|
|
137
|
+
/**
|
|
138
|
+
* Gets a snapshot (https://resthooks.io/docs/api/Snapshot)
|
|
139
|
+
* @see https://resthooks.io/docs/api/Controller#snapshot
|
|
140
|
+
*/
|
|
141
|
+
this.snapshot = (state, fetchedAt) => {
|
|
142
|
+
return new Snapshot(this, state, fetchedAt);
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Gets the error, if any, for a given endpoint. Returns undefined for no errors.
|
|
146
|
+
* @see https://resthooks.io/docs/api/Controller#getError
|
|
147
|
+
*/
|
|
148
|
+
this.getError = (endpoint, ...rest) => {
|
|
149
|
+
if (rest[0] === null) return;
|
|
150
|
+
const state = rest[rest.length - 1];
|
|
151
|
+
// this is typescript generics breaking
|
|
152
|
+
const args = rest.slice(0, rest.length - 1);
|
|
153
|
+
const key = endpoint.key(...args);
|
|
154
|
+
const meta = selectMeta(state, key);
|
|
155
|
+
const results = state.results[key];
|
|
156
|
+
if (results !== undefined && (meta == null ? void 0 : meta.errorPolicy) === 'soft') return;
|
|
157
|
+
return meta == null ? void 0 : meta.error;
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Gets the (globally referentially stable) response for a given endpoint/args pair from state given.
|
|
161
|
+
* @see https://resthooks.io/docs/api/Controller#getResponse
|
|
162
|
+
*/
|
|
163
|
+
this.getResponse = (endpoint, ...rest) => {
|
|
164
|
+
const state = rest[rest.length - 1];
|
|
165
|
+
// this is typescript generics breaking
|
|
166
|
+
const args = rest.slice(0, rest.length - 1);
|
|
167
|
+
const isActive = args.length !== 1 || args[0] !== null;
|
|
168
|
+
const key = isActive ? endpoint.key(...args) : '';
|
|
169
|
+
const cacheResults = isActive ? state.results[key] : undefined;
|
|
170
|
+
const schema = endpoint.schema;
|
|
171
|
+
const meta = selectMeta(state, key);
|
|
172
|
+
let expiresAt = meta == null ? void 0 : meta.expiresAt;
|
|
173
|
+
let invalidResults = false;
|
|
174
|
+
let results;
|
|
175
|
+
if (cacheResults === undefined && endpoint.schema !== undefined) {
|
|
176
|
+
results = inferResults(endpoint.schema, args, state.indexes, state.entities);
|
|
177
|
+
invalidResults = !validateInference(results);
|
|
178
|
+
if (!expiresAt && invalidResults) expiresAt = 1;
|
|
179
|
+
} else {
|
|
180
|
+
results = cacheResults;
|
|
181
|
+
}
|
|
182
|
+
if (!isActive) {
|
|
183
|
+
return {
|
|
184
|
+
data: results,
|
|
185
|
+
expiryStatus: ExpiryStatus.Valid,
|
|
186
|
+
expiresAt: Infinity
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (!endpoint.schema || !schemaHasEntity(endpoint.schema)) {
|
|
190
|
+
return {
|
|
191
|
+
data: results,
|
|
192
|
+
expiryStatus: meta != null && meta.invalidated ? ExpiryStatus.Invalid : cacheResults && !endpoint.invalidIfStale ? ExpiryStatus.Valid : ExpiryStatus.InvalidIfStale,
|
|
193
|
+
expiresAt: expiresAt || 0
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Warn users with bad configurations
|
|
198
|
+
/* istanbul ignore next */
|
|
199
|
+
if (process.env.NODE_ENV !== 'production' && schema && isEntity(schema)) {
|
|
200
|
+
if (Array.isArray(results)) {
|
|
201
|
+
throw new Error(`fetch key ${key} has list results when single result is expected`);
|
|
202
|
+
}
|
|
203
|
+
if (typeof results === 'object') {
|
|
204
|
+
throw new Error(`fetch key ${key} has object results when entity's primary key (string) result is expected`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (!this.globalCache.results[key]) this.globalCache.results[key] = new WeakEntityMap();
|
|
208
|
+
|
|
209
|
+
// second argument is false if any entities are missing
|
|
210
|
+
// eslint-disable-next-line prefer-const
|
|
211
|
+
const {
|
|
212
|
+
data,
|
|
213
|
+
paths
|
|
214
|
+
} = denormalizeCached(results, schema, state.entities, this.globalCache.entities, this.globalCache.results[key], args);
|
|
215
|
+
const invalidDenormalize = typeof data === 'symbol';
|
|
216
|
+
|
|
217
|
+
// fallback to entity expiry time
|
|
218
|
+
if (!expiresAt) {
|
|
219
|
+
expiresAt = entityExpiresAt(paths, state.entityMeta);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// https://resthooks.io/docs/concepts/expiry-policy#expiry-status
|
|
223
|
+
// we don't track the difference between stale or fresh because that is tied to triggering
|
|
224
|
+
// conditions
|
|
225
|
+
const expiryStatus = meta != null && meta.invalidated || invalidDenormalize && !(meta != null && meta.error) ? ExpiryStatus.Invalid : invalidDenormalize || endpoint.invalidIfStale || invalidResults ? ExpiryStatus.InvalidIfStale : ExpiryStatus.Valid;
|
|
226
|
+
return {
|
|
227
|
+
data,
|
|
228
|
+
expiryStatus,
|
|
229
|
+
expiresAt
|
|
230
|
+
};
|
|
231
|
+
};
|
|
232
|
+
this.dispatch = dispatch;
|
|
233
|
+
this.getState = getState;
|
|
234
|
+
this.globalCache = globalCache;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// benchmark: https://www.measurethat.net/Benchmarks/Show/24691/0/min-reducer-vs-imperative-with-paths
|
|
239
|
+
// earliest expiry dictates age
|
|
240
|
+
function entityExpiresAt(paths, entityMeta) {
|
|
241
|
+
let expiresAt = Infinity;
|
|
242
|
+
for (const {
|
|
243
|
+
pk,
|
|
244
|
+
key
|
|
245
|
+
} of paths) {
|
|
246
|
+
var _entityMeta$key, _entityMeta$key$pk;
|
|
247
|
+
const entityExpiry = (_entityMeta$key = entityMeta[key]) == null ? void 0 : (_entityMeta$key$pk = _entityMeta$key[pk]) == null ? void 0 : _entityMeta$key$pk.expiresAt;
|
|
248
|
+
// expiresAt will always resolve to false with any comparison
|
|
249
|
+
if (entityExpiry < expiresAt) expiresAt = entityExpiry;
|
|
250
|
+
}
|
|
251
|
+
return expiresAt;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/** Determine whether the schema has any entities.
|
|
255
|
+
*
|
|
256
|
+
* Without entities, denormalization is not needed, and results should not be inferred.
|
|
257
|
+
*/
|
|
258
|
+
function schemaHasEntity(schema) {
|
|
259
|
+
if (isEntity(schema)) return true;
|
|
260
|
+
if (Array.isArray(schema)) return schema.length !== 0 && schemaHasEntity(schema[0]);
|
|
261
|
+
if (schema && (typeof schema === 'object' || typeof schema === 'function')) {
|
|
262
|
+
const nestedSchema = 'schema' in schema ? schema.schema : schema;
|
|
263
|
+
if (typeof nestedSchema === 'function') {
|
|
264
|
+
return schemaHasEntity(nestedSchema);
|
|
265
|
+
}
|
|
266
|
+
return Object.values(nestedSchema).some(x => schemaHasEntity(x));
|
|
267
|
+
}
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
class Snapshot {
|
|
271
|
+
constructor(controller, state, fetchedAt = 0) {
|
|
272
|
+
this.state = void 0;
|
|
273
|
+
this.controller = void 0;
|
|
274
|
+
this.fetchedAt = void 0;
|
|
275
|
+
/*************** Data Access ***************/
|
|
276
|
+
/** @see https://resthooks.io/docs/api/Snapshot#getResponse */
|
|
277
|
+
this.getResponse = (endpoint, ...args) => {
|
|
278
|
+
return this.controller.getResponse(endpoint, ...args, this.state);
|
|
279
|
+
};
|
|
280
|
+
/** @see https://resthooks.io/docs/api/Snapshot#getError */
|
|
281
|
+
this.getError = (endpoint, ...args) => {
|
|
282
|
+
return this.controller.getError(endpoint, ...args, this.state);
|
|
283
|
+
};
|
|
284
|
+
this.state = state;
|
|
285
|
+
this.controller = controller;
|
|
286
|
+
this.fetchedAt = fetchedAt;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXZWFrRW50aXR5TWFwIiwiRXhwaXJ5U3RhdHVzIiwiZGVub3JtYWxpemVDYWNoZWQiLCJpc0VudGl0eSIsImluZmVyUmVzdWx0cyIsInZhbGlkYXRlSW5mZXJlbmNlIiwiY3JlYXRlSW52YWxpZGF0ZSIsImNyZWF0ZUludmFsaWRhdGVBbGwiLCJjcmVhdGVSZWNlaXZlIiwiY3JlYXRlUmVzZXQiLCJjcmVhdGVVbnN1YnNjcmlwdGlvbiIsImNyZWF0ZVN1YnNjcmlwdGlvbiIsImluaXRpYWxTdGF0ZSIsInNlbGVjdE1ldGEiLCJ1bnNldERpc3BhdGNoIiwiYWN0aW9uIiwiRXJyb3IiLCJ1bnNldFN0YXRlIiwiQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiZGlzcGF0Y2giLCJnZXRTdGF0ZSIsImdsb2JhbENhY2hlIiwiZW50aXRpZXMiLCJyZXN1bHRzIiwiaW52YWxpZGF0ZSIsImVuZHBvaW50IiwiYXJncyIsIlByb21pc2UiLCJyZXNvbHZlIiwiaW52YWxpZGF0ZUFsbCIsIm9wdGlvbnMiLCJrZXkiLCJ0ZXN0S2V5IiwicmVzZXRFbnRpcmVTdG9yZSIsInNldFJlc3BvbnNlIiwicmVzdCIsInJlc3BvbnNlIiwibGVuZ3RoIiwic2xpY2UiLCJyZWNlaXZlIiwic2V0RXJyb3IiLCJlcnJvciIsInJlY2VpdmVFcnJvciIsIm1ldGEiLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsInNuYXBzaG90Iiwic3RhdGUiLCJmZXRjaGVkQXQiLCJTbmFwc2hvdCIsImdldEVycm9yIiwidW5kZWZpbmVkIiwiZXJyb3JQb2xpY3kiLCJnZXRSZXNwb25zZSIsImlzQWN0aXZlIiwiY2FjaGVSZXN1bHRzIiwic2NoZW1hIiwiZXhwaXJlc0F0IiwiaW52YWxpZFJlc3VsdHMiLCJpbmRleGVzIiwiZGF0YSIsImV4cGlyeVN0YXR1cyIsIlZhbGlkIiwiSW5maW5pdHkiLCJzY2hlbWFIYXNFbnRpdHkiLCJpbnZhbGlkYXRlZCIsIkludmFsaWQiLCJpbnZhbGlkSWZTdGFsZSIsIkludmFsaWRJZlN0YWxlIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiQXJyYXkiLCJpc0FycmF5IiwicGF0aHMiLCJpbnZhbGlkRGVub3JtYWxpemUiLCJlbnRpdHlFeHBpcmVzQXQiLCJlbnRpdHlNZXRhIiwicGsiLCJfZW50aXR5TWV0YSRrZXkiLCJfZW50aXR5TWV0YSRrZXkkcGsiLCJlbnRpdHlFeHBpcnkiLCJuZXN0ZWRTY2hlbWEiLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb21lIiwieCIsImNvbnRyb2xsZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9CYXNlQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEVycm9yVHlwZXMsXG4gIFNuYXBzaG90SW50ZXJmYWNlLFxuICBEZW5vcm1hbGl6ZUNhY2hlLFxuICBTY2hlbWEsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuaW1wb3J0IHtcbiAgV2Vha0VudGl0eU1hcCxcbiAgRXhwaXJ5U3RhdHVzLFxuICBFbmRwb2ludEludGVyZmFjZSxcbiAgRmV0Y2hGdW5jdGlvbixcbiAgUmVzb2x2ZVR5cGUsXG4gIERlbm9ybWFsaXplTnVsbGFibGUsXG4gIFBhdGgsXG4gIGRlbm9ybWFsaXplQ2FjaGVkLFxuICBpc0VudGl0eSxcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5pbXBvcnQgeyBpbmZlclJlc3VsdHMsIHZhbGlkYXRlSW5mZXJlbmNlIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCBjcmVhdGVJbnZhbGlkYXRlIGZyb20gJy4vY3JlYXRlSW52YWxpZGF0ZS5qcyc7XG5pbXBvcnQgY3JlYXRlSW52YWxpZGF0ZUFsbCBmcm9tICcuL2NyZWF0ZUludmFsaWRhdGVBbGwuanMnO1xuaW1wb3J0IGNyZWF0ZVJlY2VpdmUgZnJvbSAnLi9jcmVhdGVSZWNlaXZlLmpzJztcbmltcG9ydCBjcmVhdGVSZXNldCBmcm9tICcuL2NyZWF0ZVJlc2V0LmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVVuc3Vic2NyaXB0aW9uLFxuICBjcmVhdGVTdWJzY3JpcHRpb24sXG59IGZyb20gJy4vY3JlYXRlU3Vic2NyaXB0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnRVcGRhdGVGdW5jdGlvbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnLi4vc3RhdGUvcmVkdWNlci9jcmVhdGVSZWR1Y2VyLmpzJztcbmltcG9ydCBzZWxlY3RNZXRhIGZyb20gJy4uL3N0YXRlL3NlbGVjdE1ldGEuanMnO1xuaW1wb3J0IHR5cGUge1xuICBBY3Rpb25UeXBlcyBhcyBCcm9hZEFjdGlvblR5cGVzLFxuICBDb21iaW5lZEFjdGlvblR5cGVzLFxuICBTdGF0ZSxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBHZW5lcmljRGlzcGF0Y2ggPSAodmFsdWU6IGFueSkgPT4gUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCB0eXBlIENvbXBhdGlibGVEaXNwYXRjaCA9ICh2YWx1ZTogQ29tYmluZWRBY3Rpb25UeXBlcykgPT4gUHJvbWlzZTx2b2lkPjtcbnR5cGUgUHJldmlvdXNEaXNwYXRjaCA9ICh2YWx1ZTogQnJvYWRBY3Rpb25UeXBlcykgPT4gUHJvbWlzZTx2b2lkPjtcblxuaW50ZXJmYWNlIENvbnN0cnVjdG9yUHJvcHM8RCBleHRlbmRzIEdlbmVyaWNEaXNwYXRjaCA9IENvbXBhdGlibGVEaXNwYXRjaD4ge1xuICBkaXNwYXRjaD86IEQ7XG4gIGdldFN0YXRlPzogKCkgPT4gU3RhdGU8dW5rbm93bj47XG4gIGdsb2JhbENhY2hlPzogRGVub3JtYWxpemVDYWNoZTtcbn1cblxuY29uc3QgdW5zZXREaXNwYXRjaCA9IChhY3Rpb246IHVua25vd24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBEaXNwYXRjaGluZyB3aGlsZSBjb25zdHJ1Y3RpbmcgeW91ciBtaWRkbGV3YXJlIGlzIG5vdCBhbGxvd2VkLiBgICtcbiAgICAgIGBPdGhlciBtaWRkbGV3YXJlIHdvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIHRoaXMgZGlzcGF0Y2guYCxcbiAgKTtcbn07XG5jb25zdCB1bnNldFN0YXRlID0gKCk6IFN0YXRlPHVua25vd24+ID0+IHtcbiAgLy8gVGhpcyBpcyBvbmx5IHRoZSB2YWx1ZSB1bnRpbCBpdCBpcyBzZXQgYnkgdGhlIENhY2hlUHJvdmlkZXJcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbn07XG5cbi8qKlxuICogSW1wZXJhdGl2ZSBjb250cm9sIG9mIFJlc3QgSG9va3Mgc3RvcmVcbiAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvQ29udHJvbGxlclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sbGVyPFxuICBEIGV4dGVuZHMgR2VuZXJpY0Rpc3BhdGNoID0gQ29tcGF0aWJsZURpc3BhdGNoLFxuPiB7XG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFuIGFjdGlvbiB0byBSZXN0IEhvb2tzIHJlZHVjZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNkaXNwYXRjaFxuICAgKi9cbiAgZGVjbGFyZSByZWFkb25seSBkaXNwYXRjaDogRDtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhdGVzdCBzdGF0ZSBzbmFwc2hvdCB0aGF0IGlzIGZ1bGx5IGNvbW1pdHRlZC5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBpbXBlcmF0aXZlIHVzZS1jYXNlcyBsaWtlIGV2ZW50IGhhbmRsZXJzLlxuICAgKiBUaGlzIHNob3VsZCAqbm90KiBiZSB1c2VkIHRvIHJlbmRlcjsgaW5zdGVhZCB1c2VTdXNwZW5zZSgpIG9yIHVzZUNhY2hlKClcbiAgICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFN0YXRlXG4gICAqL1xuICBkZWNsYXJlIHJlYWRvbmx5IGdldFN0YXRlOiAoKSA9PiBTdGF0ZTx1bmtub3duPjtcbiAgZGVjbGFyZSByZWFkb25seSBnbG9iYWxDYWNoZTogRGVub3JtYWxpemVDYWNoZTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZGlzcGF0Y2ggPSB1bnNldERpc3BhdGNoIGFzIGFueSxcbiAgICBnZXRTdGF0ZSA9IHVuc2V0U3RhdGUsXG4gICAgZ2xvYmFsQ2FjaGUgPSB7XG4gICAgICBlbnRpdGllczoge30sXG4gICAgICByZXN1bHRzOiB7fSxcbiAgICB9LFxuICB9OiBDb25zdHJ1Y3RvclByb3BzPEQ+ID0ge30pIHtcbiAgICB0aGlzLmRpc3BhdGNoID0gZGlzcGF0Y2g7XG4gICAgdGhpcy5nZXRTdGF0ZSA9IGdldFN0YXRlO1xuICAgIHRoaXMuZ2xvYmFsQ2FjaGUgPSBnbG9iYWxDYWNoZTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKiogQWN0aW9uIERpc3BhdGNoZXJzICoqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogRm9yY2VzIHJlZmV0Y2hpbmcgYW5kIHN1c3BlbnNlIG9uIHVzZVN1c3BlbnNlIHdpdGggdGhlIHNhbWUgRW5kcG9pbnQgYW5kIHBhcmFtZXRlcnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNpbnZhbGlkYXRlXG4gICAqL1xuICBpbnZhbGlkYXRlID0gPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBhcmdzWzBdICE9PSBudWxsXG4gICAgICA/IHRoaXMuZGlzcGF0Y2goXG4gICAgICAgICAgY3JlYXRlSW52YWxpZGF0ZShlbmRwb2ludCwge1xuICAgICAgICAgICAgYXJnczogYXJncyBhcyByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0sXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgIDogUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgLyoqXG4gICAqIEZvcmNlcyByZWZldGNoaW5nIGFuZCBzdXNwZW5zZSBvbiB1c2VTdXNwZW5zZSBvbiBhbGwgbWF0Y2hpbmcgZW5kcG9pbnQgcmVzdWx0IGtleXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNpbnZhbGlkYXRlQWxsXG4gICAqL1xuICBpbnZhbGlkYXRlQWxsID0gKG9wdGlvbnM6IHsgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaChjcmVhdGVJbnZhbGlkYXRlQWxsKChrZXk6IHN0cmluZykgPT4gb3B0aW9ucy50ZXN0S2V5KGtleSkpKTtcblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBlbnRpcmUgUmVzdCBIb29rcyBjYWNoZS4gQWxsIGluZmxpZ2h0IHJlcXVlc3RzIHdpbGwgbm90IHJlc29sdmUuXG4gICAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNyZXNldEVudGlyZVN0b3JlXG4gICAqL1xuICByZXNldEVudGlyZVN0b3JlID0gKCk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5kaXNwYXRjaChjcmVhdGVSZXNldCgpKTtcblxuICAvKipcbiAgICogU3RvcmVzIHJlc3BvbnNlIGluIGNhY2hlIGZvciBnaXZlbiBFbmRwb2ludCBhbmQgYXJncy5cbiAgICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldFxuICAgKi9cbiAgc2V0UmVzcG9uc2UgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+LCBhbnldXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNvbHZlVHlwZTxFPiA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVSZWNlaXZlKGVuZHBvaW50LCB7XG4gICAgICBhcmdzOiByZXN0LnNsaWNlKDAsIHJlc3QubGVuZ3RoIC0gMSkgYXMgUGFyYW1ldGVyczxFPixcbiAgICAgIHJlc3BvbnNlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKGFjdGlvbik7XG4gIH07XG5cbiAgLy8gVE9ETzogZGVwcmVjYXRlXG4gIC8qKlxuICAgKiBBbm90aGVyIG5hbWUgZm9yIHNldFJlc3BvbnNlXG4gICAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNzZXRSZXNwb25zZVxuICAgKi9cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gcmVjZWl2ZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIGFueV1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdGhpcy5zZXRSZXNwb25zZShlbmRwb2ludCwgLi4ucmVzdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFN0b3JlcyB0aGUgcmVzdWx0IG9mIEVuZHBvaW50IGFuZCBhcmdzIGFzIHRoZSBlcnJvciBwcm92aWRlZC5cbiAgICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9Db250cm9sbGVyI3NldEVycm9yXG4gICAqL1xuICBzZXRFcnJvciA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIEVycm9yXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZXNwb25zZTogRXJyb3IgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlUmVjZWl2ZShlbmRwb2ludCwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICByZXNwb25zZSxcbiAgICAgIGVycm9yOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKGFjdGlvbik7XG4gIH07XG5cbiAgLy8gVE9ETzogZGVwcmVjYXRlXG4gIC8qKlxuICAgKiBBbm90aGVyIG5hbWUgZm9yIHNldEVycm9yXG4gICAqIEBzZWUgaHR0cHM6Ly9yZXN0aG9va3MuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNzZXRFcnJvclxuICAgKi9cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gcmVjZWl2ZUVycm9yID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgRXJyb3JdXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHRoaXMuc2V0RXJyb3IoZW5kcG9pbnQsIC4uLnJlc3QpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBpbmZsaWdodCBmZXRjaC4gYGZldGNoZWRBdGAgc2hvdWxkIGBmZXRjaGAncyBgY3JlYXRlZEF0YFxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjcmVzb2x2ZVxuICAgKi9cbiAgcmVzb2x2ZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7XG4gICAgICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEU+O1xuICAgIH0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgbWV0YTpcbiAgICAgIHwge1xuICAgICAgICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICAgICAgICByZXNwb25zZTogRXJyb3I7XG4gICAgICAgICAgZmV0Y2hlZEF0OiBudW1iZXI7XG4gICAgICAgICAgZXJyb3I6IHRydWU7XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XTtcbiAgICAgICAgICByZXNwb25zZTogYW55O1xuICAgICAgICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICAgICAgICAgIGVycm9yPzogZmFsc2U7XG4gICAgICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKGNyZWF0ZVJlY2VpdmUoZW5kcG9pbnQsIG1ldGEgYXMgYW55KSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcmtzIGEgbmV3IHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc3Vic2NyaWJlXG4gICAqL1xuICBzdWJzY3JpYmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPFxuICAgICAgRmV0Y2hGdW5jdGlvbixcbiAgICAgIFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCB8IGZhbHNlXG4gICAgPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIGFyZ3NbMF0gIT09IG51bGxcbiAgICAgID8gdGhpcy5kaXNwYXRjaChcbiAgICAgICAgICBjcmVhdGVTdWJzY3JpcHRpb24oZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBNYXJrcyBjb21wbGV0aW9uIG9mIHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjdW5zdWJzY3JpYmVcbiAgICovXG4gIHVuc3Vic2NyaWJlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZTxcbiAgICAgIEZldGNoRnVuY3Rpb24sXG4gICAgICBTY2hlbWEgfCB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQgfCBmYWxzZVxuICAgID4sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBhcmdzWzBdICE9PSBudWxsXG4gICAgICA/IHRoaXMuZGlzcGF0Y2goXG4gICAgICAgICAgY3JlYXRlVW5zdWJzY3JpcHRpb24oZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKioqKioqKioqKioqKiogTW9yZSAqKioqKioqKioqKioqKiovXG5cbiAgLyogVE9ETzpcbiAgYWJvcnQgPSA8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKTogUHJvbWlzZTx2b2lkPlxuICAqL1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgc25hcHNob3QgKGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL1NuYXBzaG90KVxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc25hcHNob3RcbiAgICovXG4gIHNuYXBzaG90ID0gKHN0YXRlOiBTdGF0ZTx1bmtub3duPiwgZmV0Y2hlZEF0PzogbnVtYmVyKTogU25hcHNob3RJbnRlcmZhY2UgPT4ge1xuICAgIHJldHVybiBuZXcgU25hcHNob3QodGhpcywgc3RhdGUsIGZldGNoZWRBdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVycm9yLCBpZiBhbnksIGZvciBhIGdpdmVuIGVuZHBvaW50LiBSZXR1cm5zIHVuZGVmaW5lZCBmb3Igbm8gZXJyb3JzLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0RXJyb3JcbiAgICovXG4gIGdldEVycm9yID0gPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4sXG4gICAgQXJncyBleHRlbmRzIHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogWy4uLkFyZ3MsIFN0YXRlPHVua25vd24+XVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAocmVzdFswXSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPHVua25vd24+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEVbJ2tleSddPjtcbiAgICBjb25zdCBrZXkgPSBlbmRwb2ludC5rZXkoLi4uYXJncyk7XG5cbiAgICBjb25zdCBtZXRhID0gc2VsZWN0TWV0YShzdGF0ZSwga2V5KTtcbiAgICBjb25zdCByZXN1bHRzID0gc3RhdGUucmVzdWx0c1trZXldO1xuXG4gICAgaWYgKHJlc3VsdHMgIT09IHVuZGVmaW5lZCAmJiBtZXRhPy5lcnJvclBvbGljeSA9PT0gJ3NvZnQnKSByZXR1cm47XG5cbiAgICByZXR1cm4gbWV0YT8uZXJyb3IgYXMgYW55O1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSAoZ2xvYmFsbHkgcmVmZXJlbnRpYWxseSBzdGFibGUpIHJlc3BvbnNlIGZvciBhIGdpdmVuIGVuZHBvaW50L2FyZ3MgcGFpciBmcm9tIHN0YXRlIGdpdmVuLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0UmVzcG9uc2VcbiAgICovXG4gIGdldFJlc3BvbnNlID0gPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5JyB8ICdzY2hlbWEnIHwgJ2ludmFsaWRJZlN0YWxlJz4sXG4gICAgQXJncyBleHRlbmRzIHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF0sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDogWy4uLkFyZ3MsIFN0YXRlPHVua25vd24+XVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH0gPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdIGFzIFN0YXRlPHVua25vd24+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3Quc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKSBhcyBQYXJhbWV0ZXJzPEVbJ2tleSddPjtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IGFyZ3MubGVuZ3RoICE9PSAxIHx8IGFyZ3NbMF0gIT09IG51bGw7XG4gICAgY29uc3Qga2V5ID0gaXNBY3RpdmUgPyBlbmRwb2ludC5rZXkoLi4uYXJncykgOiAnJztcbiAgICBjb25zdCBjYWNoZVJlc3VsdHMgPSBpc0FjdGl2ZSA/IHN0YXRlLnJlc3VsdHNba2V5XSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzY2hlbWEgPSBlbmRwb2ludC5zY2hlbWE7XG4gICAgY29uc3QgbWV0YSA9IHNlbGVjdE1ldGEoc3RhdGUsIGtleSk7XG4gICAgbGV0IGV4cGlyZXNBdCA9IG1ldGE/LmV4cGlyZXNBdDtcblxuICAgIGxldCBpbnZhbGlkUmVzdWx0cyA9IGZhbHNlO1xuICAgIGxldCByZXN1bHRzO1xuICAgIGlmIChjYWNoZVJlc3VsdHMgPT09IHVuZGVmaW5lZCAmJiBlbmRwb2ludC5zY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0cyA9IGluZmVyUmVzdWx0cyhcbiAgICAgICAgZW5kcG9pbnQuc2NoZW1hLFxuICAgICAgICBhcmdzLFxuICAgICAgICBzdGF0ZS5pbmRleGVzLFxuICAgICAgICBzdGF0ZS5lbnRpdGllcyxcbiAgICAgICk7XG4gICAgICBpbnZhbGlkUmVzdWx0cyA9ICF2YWxpZGF0ZUluZmVyZW5jZShyZXN1bHRzKTtcbiAgICAgIGlmICghZXhwaXJlc0F0ICYmIGludmFsaWRSZXN1bHRzKSBleHBpcmVzQXQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzID0gY2FjaGVSZXN1bHRzO1xuICAgIH1cblxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHJlc3VsdHMgYXMgYW55LFxuICAgICAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cy5WYWxpZCxcbiAgICAgICAgZXhwaXJlc0F0OiBJbmZpbml0eSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFlbmRwb2ludC5zY2hlbWEgfHwgIXNjaGVtYUhhc0VudGl0eShlbmRwb2ludC5zY2hlbWEpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiByZXN1bHRzLFxuICAgICAgICBleHBpcnlTdGF0dXM6IG1ldGE/LmludmFsaWRhdGVkXG4gICAgICAgICAgPyBFeHBpcnlTdGF0dXMuSW52YWxpZFxuICAgICAgICAgIDogY2FjaGVSZXN1bHRzICYmICFlbmRwb2ludC5pbnZhbGlkSWZTdGFsZVxuICAgICAgICAgID8gRXhwaXJ5U3RhdHVzLlZhbGlkXG4gICAgICAgICAgOiBFeHBpcnlTdGF0dXMuSW52YWxpZElmU3RhbGUsXG4gICAgICAgIGV4cGlyZXNBdDogZXhwaXJlc0F0IHx8IDAsXG4gICAgICB9IGFzIHtcbiAgICAgICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgICAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gV2FybiB1c2VycyB3aXRoIGJhZCBjb25maWd1cmF0aW9uc1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2NoZW1hICYmIGlzRW50aXR5KHNjaGVtYSkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZmV0Y2gga2V5ICR7a2V5fSBoYXMgbGlzdCByZXN1bHRzIHdoZW4gc2luZ2xlIHJlc3VsdCBpcyBleHBlY3RlZGAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJlc3VsdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZmV0Y2gga2V5ICR7a2V5fSBoYXMgb2JqZWN0IHJlc3VsdHMgd2hlbiBlbnRpdHkncyBwcmltYXJ5IGtleSAoc3RyaW5nKSByZXN1bHQgaXMgZXhwZWN0ZWRgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5nbG9iYWxDYWNoZS5yZXN1bHRzW2tleV0pXG4gICAgICB0aGlzLmdsb2JhbENhY2hlLnJlc3VsdHNba2V5XSA9IG5ldyBXZWFrRW50aXR5TWFwKCk7XG5cbiAgICAvLyBzZWNvbmQgYXJndW1lbnQgaXMgZmFsc2UgaWYgYW55IGVudGl0aWVzIGFyZSBtaXNzaW5nXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGNvbnN0IHsgZGF0YSwgcGF0aHMgfSA9IGRlbm9ybWFsaXplQ2FjaGVkKFxuICAgICAgcmVzdWx0cyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIHN0YXRlLmVudGl0aWVzLFxuICAgICAgdGhpcy5nbG9iYWxDYWNoZS5lbnRpdGllcyxcbiAgICAgIHRoaXMuZ2xvYmFsQ2FjaGUucmVzdWx0c1trZXldLFxuICAgICAgYXJncyxcbiAgICApIGFzIHsgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47IHBhdGhzOiBQYXRoW10gfTtcbiAgICBjb25zdCBpbnZhbGlkRGVub3JtYWxpemUgPSB0eXBlb2YgZGF0YSA9PT0gJ3N5bWJvbCc7XG5cbiAgICAvLyBmYWxsYmFjayB0byBlbnRpdHkgZXhwaXJ5IHRpbWVcbiAgICBpZiAoIWV4cGlyZXNBdCkge1xuICAgICAgZXhwaXJlc0F0ID0gZW50aXR5RXhwaXJlc0F0KHBhdGhzLCBzdGF0ZS5lbnRpdHlNZXRhKTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2NvbmNlcHRzL2V4cGlyeS1wb2xpY3kjZXhwaXJ5LXN0YXR1c1xuICAgIC8vIHdlIGRvbid0IHRyYWNrIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc3RhbGUgb3IgZnJlc2ggYmVjYXVzZSB0aGF0IGlzIHRpZWQgdG8gdHJpZ2dlcmluZ1xuICAgIC8vIGNvbmRpdGlvbnNcbiAgICBjb25zdCBleHBpcnlTdGF0dXMgPVxuICAgICAgbWV0YT8uaW52YWxpZGF0ZWQgfHwgKGludmFsaWREZW5vcm1hbGl6ZSAmJiAhbWV0YT8uZXJyb3IpXG4gICAgICAgID8gRXhwaXJ5U3RhdHVzLkludmFsaWRcbiAgICAgICAgOiBpbnZhbGlkRGVub3JtYWxpemUgfHwgZW5kcG9pbnQuaW52YWxpZElmU3RhbGUgfHwgaW52YWxpZFJlc3VsdHNcbiAgICAgICAgPyBFeHBpcnlTdGF0dXMuSW52YWxpZElmU3RhbGVcbiAgICAgICAgOiBFeHBpcnlTdGF0dXMuVmFsaWQ7XG5cbiAgICByZXR1cm4geyBkYXRhLCBleHBpcnlTdGF0dXMsIGV4cGlyZXNBdCB9O1xuICB9O1xufVxuXG4vLyBiZW5jaG1hcms6IGh0dHBzOi8vd3d3Lm1lYXN1cmV0aGF0Lm5ldC9CZW5jaG1hcmtzL1Nob3cvMjQ2OTEvMC9taW4tcmVkdWNlci12cy1pbXBlcmF0aXZlLXdpdGgtcGF0aHNcbi8vIGVhcmxpZXN0IGV4cGlyeSBkaWN0YXRlcyBhZ2VcbmZ1bmN0aW9uIGVudGl0eUV4cGlyZXNBdChcbiAgcGF0aHM6IFBhdGhbXSxcbiAgZW50aXR5TWV0YToge1xuICAgIHJlYWRvbmx5IFtlbnRpdHlLZXk6IHN0cmluZ106IHtcbiAgICAgIHJlYWRvbmx5IFtwazogc3RyaW5nXToge1xuICAgICAgICByZWFkb25seSBkYXRlOiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgICByZWFkb25seSBmZXRjaGVkQXQ6IG51bWJlcjsgLy8gVGhpcyBpcyBvbmx5IHRoZSB2YWx1ZSB1bnRpbCBpdCBpcyBzZXQgYnkgdGhlIENhY2hlUHJvdmlkZXJcbiAgICAgIH07XG4gICAgfTtcbiAgfSxcbikge1xuICBsZXQgZXhwaXJlc0F0ID0gSW5maW5pdHk7XG4gIGZvciAoY29uc3QgeyBwaywga2V5IH0gb2YgcGF0aHMpIHtcbiAgICBjb25zdCBlbnRpdHlFeHBpcnkgPSBlbnRpdHlNZXRhW2tleV0/Lltwa10/LmV4cGlyZXNBdDtcbiAgICAvLyBleHBpcmVzQXQgd2lsbCBhbHdheXMgcmVzb2x2ZSB0byBmYWxzZSB3aXRoIGFueSBjb21wYXJpc29uXG4gICAgaWYgKGVudGl0eUV4cGlyeSA8IGV4cGlyZXNBdCkgZXhwaXJlc0F0ID0gZW50aXR5RXhwaXJ5O1xuICB9XG4gIHJldHVybiBleHBpcmVzQXQ7XG59XG5cbi8qKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgc2NoZW1hIGhhcyBhbnkgZW50aXRpZXMuXG4gKlxuICogV2l0aG91dCBlbnRpdGllcywgZGVub3JtYWxpemF0aW9uIGlzIG5vdCBuZWVkZWQsIGFuZCByZXN1bHRzIHNob3VsZCBub3QgYmUgaW5mZXJyZWQuXG4gKi9cbmZ1bmN0aW9uIHNjaGVtYUhhc0VudGl0eShzY2hlbWE6IFNjaGVtYSk6IGJvb2xlYW4ge1xuICBpZiAoaXNFbnRpdHkoc2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgcmV0dXJuIHNjaGVtYS5sZW5ndGggIT09IDAgJiYgc2NoZW1hSGFzRW50aXR5KHNjaGVtYVswXSk7XG4gIGlmIChzY2hlbWEgJiYgKHR5cGVvZiBzY2hlbWEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBzY2hlbWEgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY29uc3QgbmVzdGVkU2NoZW1hID1cbiAgICAgICdzY2hlbWEnIGluIHNjaGVtYSA/IChzY2hlbWEuc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIFNjaGVtYT4pIDogc2NoZW1hO1xuICAgIGlmICh0eXBlb2YgbmVzdGVkU2NoZW1hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2NoZW1hSGFzRW50aXR5KG5lc3RlZFNjaGVtYSk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG5lc3RlZFNjaGVtYSkuc29tZSh4ID0+IHNjaGVtYUhhc0VudGl0eSh4KSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgdHlwZSB7IEVycm9yVHlwZXMgfTtcblxuY2xhc3MgU25hcHNob3Q8VCA9IHVua25vd24+IGltcGxlbWVudHMgU25hcHNob3RJbnRlcmZhY2Uge1xuICBwcml2YXRlIHN0YXRlOiBTdGF0ZTxUPjtcbiAgcHJpdmF0ZSBjb250cm9sbGVyOiBDb250cm9sbGVyO1xuICByZWFkb25seSBmZXRjaGVkQXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyOiBDb250cm9sbGVyLCBzdGF0ZTogU3RhdGU8VD4sIGZldGNoZWRBdCA9IDApIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICB0aGlzLmZldGNoZWRBdCA9IGZldGNoZWRBdDtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKiogRGF0YSBBY2Nlc3MgKioqKioqKioqKioqKioqL1xuICAvKiogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRSZXNwb25zZSAqL1xuICBnZXRSZXNwb25zZSA9IDxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICAgIEFyZ3MgZXh0ZW5kcyByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dLFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IEFyZ3NcbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9ID0+IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFJlc3BvbnNlKGVuZHBvaW50LCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfTtcblxuICAvKiogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRFcnJvciAqL1xuICBnZXRFcnJvciA9IDxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleSc+LFxuICAgIEFyZ3MgZXh0ZW5kcyByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dLFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IEFyZ3NcbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRFcnJvcihlbmRwb2ludCwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQU1BLFNBQ0VBLGFBQWEsRUFDYkMsWUFBWSxFQU1aQyxpQkFBaUIsRUFDakJDLFFBQVEsUUFDSCx3QkFBd0I7QUFDL0IsU0FBU0MsWUFBWSxFQUFFQyxpQkFBaUIsUUFBUSx3QkFBd0I7QUFFeEUsT0FBT0MsZ0JBQWdCLE1BQU0sdUJBQXVCO0FBQ3BELE9BQU9DLG1CQUFtQixNQUFNLDBCQUEwQjtBQUMxRCxPQUFPQyxhQUFhLE1BQU0sb0JBQW9CO0FBQzlDLE9BQU9DLFdBQVcsTUFBTSxrQkFBa0I7QUFDMUMsU0FDRUMsb0JBQW9CLEVB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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EndpointInterface } from '@data-client/normalizr';
|
|
2
|
+
import BaseController, { CompatibleDispatch, GenericDispatch } from './BaseController.js';
|
|
3
|
+
import type { EndpointUpdateFunction } from './types.js';
|
|
4
|
+
export default class Controller<D extends GenericDispatch = CompatibleDispatch> extends BaseController<D> {
|
|
5
|
+
/**
|
|
6
|
+
* Fetches the endpoint with given args, updating the Rest Hooks cache with the response or error upon completion.
|
|
7
|
+
* @see https://resthooks.io/docs/api/Controller#fetch
|
|
8
|
+
*/
|
|
9
|
+
fetch: <E extends EndpointInterface<import("@data-client/normalizr").FetchFunction, import("@data-client/normalizr").Schema | undefined, boolean | undefined> & {
|
|
10
|
+
update?: EndpointUpdateFunction<E> | undefined;
|
|
11
|
+
}>(endpoint: E, ...args_0: Parameters<E>) => ReturnType<E>;
|
|
12
|
+
}
|
|
13
|
+
export * from './BaseController.js';
|
|
14
|
+
//# sourceMappingURL=Controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Controller.d.ts","sourceRoot":"","sources":["../../src/controller/Controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,cAAc,EAAE,EACrB,kBAAkB,EAClB,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,CAAC,OAAO,OAAO,UAAU,CAC7B,CAAC,SAAS,eAAe,GAAG,kBAAkB,CAC9C,SAAQ,cAAc,CAAC,CAAC,CAAC;IACzB;;;OAGG;IACH,KAAK;;+DAYH;CACH;AAED,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import BaseController from './BaseController.js';
|
|
2
|
+
import createFetch from './createFetch.js';
|
|
3
|
+
export default class Controller extends BaseController {
|
|
4
|
+
constructor(..._args) {
|
|
5
|
+
super(..._args);
|
|
6
|
+
/**
|
|
7
|
+
* Fetches the endpoint with given args, updating the Rest Hooks cache with the response or error upon completion.
|
|
8
|
+
* @see https://resthooks.io/docs/api/Controller#fetch
|
|
9
|
+
*/
|
|
10
|
+
this.fetch = (endpoint, ...args) => {
|
|
11
|
+
const action = createFetch(endpoint, {
|
|
12
|
+
args
|
|
13
|
+
});
|
|
14
|
+
this.dispatch(action);
|
|
15
|
+
return action.meta.promise;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export * from './BaseController.js';
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29udHJvbGxlciIsImNyZWF0ZUZldGNoIiwiQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiX2FyZ3MiLCJmZXRjaCIsImVuZHBvaW50IiwiYXJncyIsImFjdGlvbiIsImRpc3BhdGNoIiwibWV0YSIsInByb21pc2UiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9Db250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5kcG9pbnRJbnRlcmZhY2UgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IEJhc2VDb250cm9sbGVyLCB7XG4gIENvbXBhdGlibGVEaXNwYXRjaCxcbiAgR2VuZXJpY0Rpc3BhdGNoLFxufSBmcm9tICcuL0Jhc2VDb250cm9sbGVyLmpzJztcbmltcG9ydCBjcmVhdGVGZXRjaCBmcm9tICcuL2NyZWF0ZUZldGNoLmpzJztcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnRVcGRhdGVGdW5jdGlvbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sbGVyPFxuICBEIGV4dGVuZHMgR2VuZXJpY0Rpc3BhdGNoID0gQ29tcGF0aWJsZURpc3BhdGNoLFxuPiBleHRlbmRzIEJhc2VDb250cm9sbGVyPEQ+IHtcbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGVuZHBvaW50IHdpdGggZ2l2ZW4gYXJncywgdXBkYXRpbmcgdGhlIFJlc3QgSG9va3MgY2FjaGUgd2l0aCB0aGUgcmVzcG9uc2Ugb3IgZXJyb3IgdXBvbiBjb21wbGV0aW9uLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZmV0Y2hcbiAgICovXG4gIGZldGNoID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHsgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPiB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XVxuICApOiBSZXR1cm5UeXBlPEU+ID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVGZXRjaChlbmRwb2ludCwge1xuICAgICAgYXJncyxcbiAgICB9KTtcbiAgICB0aGlzLmRpc3BhdGNoKGFjdGlvbik7XG5cbiAgICByZXR1cm4gYWN0aW9uLm1ldGEucHJvbWlzZSBhcyBSZXR1cm5UeXBlPEU+O1xuICB9O1xufVxuXG5leHBvcnQgKiBmcm9tICcuL0Jhc2VDb250cm9sbGVyLmpzJztcbiJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBT0EsY0FBYyxNQUdkLHFCQUFxQjtBQUM1QixPQUFPQyxXQUFXLE1BQU0sa0JBQWtCO0FBRzFDLGVBQWUsTUFBTUMsVUFBVSxTQUVyQkYsY0FBYyxDQUFJO0VBQUFHLFlBQUEsR0FBQUMsS0FBQTtJQUFBLFNBQUFBLEtBQUE7SUFDMUI7QUFDRjtBQUNBO0FBQ0E7SUFIRSxLQUlBQyxLQUFLLEdBQUcsQ0FHTkMsUUFBVyxFQUNYLEdBQUdDLElBQWlDLEtBQ2xCO01BQ2xCLE1BQU1DLE1BQU0sR0FBR1AsV0FBVyxDQUFDSyxRQUFRLEVBQUU7UUFDbkNDO01BQ0YsQ0FBQyxDQUFDO01BQ0YsSUFBSSxDQUFDRSxRQUFRLENBQUNELE1BQU0sQ0FBQztNQUVyQixPQUFPQSxNQUFNLENBQUNFLElBQUksQ0FBQ0MsT0FBTztJQUM1QixDQUFDO0VBQUE7QUFDSDtBQUVBLGNBQWMscUJBQXFCIn0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EndpointInterface } from '@data-client/normalizr';
|
|
2
|
+
import { EndpointUpdateFunction } from './types.js';
|
|
3
|
+
import type { CompatibleFetchAction } from '../compatibleActions.js';
|
|
4
|
+
/**
|
|
5
|
+
* Requesting a fetch to begin
|
|
6
|
+
*/
|
|
7
|
+
export default function createFetch<E extends EndpointInterface & {
|
|
8
|
+
update?: EndpointUpdateFunction<E>;
|
|
9
|
+
}>(endpoint: E, { args }: {
|
|
10
|
+
args: readonly [...Parameters<E>];
|
|
11
|
+
}): CompatibleFetchAction<E>;
|
|
12
|
+
//# sourceMappingURL=createFetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createFetch.d.ts","sourceRoot":"","sources":["../../src/controller/createFetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,CAAC,SAAS,iBAAiB,GAAG;IAAE,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAA;CAAE,EAEpE,QAAQ,EAAE,CAAC,EACX,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,GAC9C,qBAAqB,CAAC,CAAC,CAAC,CAoC1B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { FETCH_TYPE } from '../actionTypes.js';
|
|
2
|
+
/**
|
|
3
|
+
* Requesting a fetch to begin
|
|
4
|
+
*/
|
|
5
|
+
export default function createFetch(endpoint, {
|
|
6
|
+
args
|
|
7
|
+
}) {
|
|
8
|
+
const key = endpoint.key(...args);
|
|
9
|
+
let resolve = 0;
|
|
10
|
+
let reject = 0;
|
|
11
|
+
const promise = new Promise((a, b) => {
|
|
12
|
+
[resolve, reject] = [a, b];
|
|
13
|
+
});
|
|
14
|
+
const meta = {
|
|
15
|
+
schema: endpoint.schema,
|
|
16
|
+
type: endpoint.sideEffect ? 'mutate' : 'read',
|
|
17
|
+
args,
|
|
18
|
+
key,
|
|
19
|
+
throttle: !endpoint.sideEffect,
|
|
20
|
+
options: endpoint,
|
|
21
|
+
resolve,
|
|
22
|
+
reject,
|
|
23
|
+
promise,
|
|
24
|
+
createdAt: Date.now()
|
|
25
|
+
};
|
|
26
|
+
if (endpoint.update) {
|
|
27
|
+
meta.update = endpoint.update;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// TODO: Remove once EOL on this deprecated piece
|
|
31
|
+
/* istanbul ignore if */
|
|
32
|
+
if (endpoint.optimisticUpdate) {
|
|
33
|
+
meta.optimisticResponse = endpoint.optimisticUpdate(...args);
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
type: FETCH_TYPE,
|
|
37
|
+
payload: () => endpoint(...args),
|
|
38
|
+
meta,
|
|
39
|
+
endpoint
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGRVRDSF9UWVBFIiwiY3JlYXRlRmV0Y2giLCJlbmRwb2ludCIsImFyZ3MiLCJrZXkiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZSIsIlByb21pc2UiLCJhIiwiYiIsIm1ldGEiLCJzY2hlbWEiLCJ0eXBlIiwic2lkZUVmZmVjdCIsInRocm90dGxlIiwib3B0aW9ucyIsImNyZWF0ZWRBdCIsIkRhdGUiLCJub3ciLCJ1cGRhdGUiLCJvcHRpbWlzdGljVXBkYXRlIiwib3B0aW1pc3RpY1Jlc3BvbnNlIiwicGF5bG9hZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL2NyZWF0ZUZldGNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5kcG9pbnRJbnRlcmZhY2UgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IHsgRW5kcG9pbnRVcGRhdGVGdW5jdGlvbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgRkVUQ0hfVFlQRSB9IGZyb20gJy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tcGF0aWJsZUZldGNoQWN0aW9uLFxuICBDb21wYXRpYmxlRmV0Y2hNZXRhLFxufSBmcm9tICcuLi9jb21wYXRpYmxlQWN0aW9ucy5qcyc7XG5cbi8qKlxuICogUmVxdWVzdGluZyBhIGZldGNoIHRvIGJlZ2luXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUZldGNoPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT4gfSxcbj4oXG4gIGVuZHBvaW50OiBFLFxuICB7IGFyZ3MgfTogeyBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfSxcbik6IENvbXBhdGlibGVGZXRjaEFjdGlvbjxFPiB7XG4gIGNvbnN0IGtleSA9IGVuZHBvaW50LmtleSguLi5hcmdzKTtcbiAgbGV0IHJlc29sdmU6ICh2YWx1ZT86IGFueSB8IFByb21pc2VMaWtlPGFueT4pID0+IHZvaWQgPSAwIGFzIGFueTtcbiAgbGV0IHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCA9IDAgYXMgYW55O1xuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8YW55PigoYSwgYikgPT4ge1xuICAgIFtyZXNvbHZlLCByZWplY3RdID0gW2EsIGJdO1xuICB9KTtcbiAgY29uc3QgbWV0YTogQ29tcGF0aWJsZUZldGNoTWV0YSA9IHtcbiAgICBzY2hlbWE6IGVuZHBvaW50LnNjaGVtYSxcbiAgICB0eXBlOiBlbmRwb2ludC5zaWRlRWZmZWN0ID8gKCdtdXRhdGUnIGFzIGNvbnN0KSA6ICgncmVhZCcgYXMgY29uc3QpLFxuICAgIGFyZ3MsXG4gICAga2V5LFxuICAgIHRocm90dGxlOiAhZW5kcG9pbnQuc2lkZUVmZmVjdCxcbiAgICBvcHRpb25zOiBlbmRwb2ludCxcbiAgICByZXNvbHZlLFxuICAgIHJlamVjdCxcbiAgICBwcm9taXNlLFxuICAgIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgfTtcblxuICBpZiAoZW5kcG9pbnQudXBkYXRlKSB7XG4gICAgbWV0YS51cGRhdGUgPSBlbmRwb2ludC51cGRhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgb25jZSBFT0wgb24gdGhpcyBkZXByZWNhdGVkIHBpZWNlXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZW5kcG9pbnQub3B0aW1pc3RpY1VwZGF0ZSkge1xuICAgIG1ldGEub3B0aW1pc3RpY1Jlc3BvbnNlID0gZW5kcG9pbnQub3B0aW1pc3RpY1VwZGF0ZSguLi5hcmdzKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogRkVUQ0hfVFlQRSxcbiAgICBwYXlsb2FkOiAoKSA9PiBlbmRwb2ludCguLi5hcmdzKSBhcyBhbnksXG4gICAgbWV0YSxcbiAgICBlbmRwb2ludCxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBR0EsU0FBU0EsVUFBVSxRQUFRLG1CQUFtQjtBQU05QztBQUNBO0FBQ0E7QUFDQSxlQUFlLFNBQVNDLFdBQVdBLENBR2pDQyxRQUFXLEVBQ1g7RUFBRUM7QUFBNEMsQ0FBQyxFQUNyQjtFQUMxQixNQUFNQyxHQUFHLEdBQUdGLFFBQVEsQ0FBQ0UsR0FBRyxDQUFDLEdBQUdELElBQUksQ0FBQztFQUNqQyxJQUFJRSxPQUFpRCxHQUFHLENBQVE7RUFDaEUsSUFBSUMsTUFBOEIsR0FBRyxDQUFRO0VBQzdDLE1BQU1DLE9BQU8sR0FBRyxJQUFJQyxPQUFPLENBQU0sQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUs7SUFDekMsQ0FBQ0wsT0FBTyxFQUFFQyxNQUFNLENBQUMsR0FBRyxDQUFDRyxDQUFDLEVBQUVDLENBQUMsQ0FBQztFQUM1QixDQUFDLENBQUM7RUFDRixNQUFNQyxJQUF5QixHQUFHO0lBQ2hDQyxNQUFNLEVBQUVWLFFBQVEsQ0FBQ1UsTUFBTTtJQUN2QkMsSUFBSSxFQUFFWCxRQUFRLENBQUNZLFVBQVUsR0FBSSxRQUFRLEdBQWMsTUFBZ0I7SUFDbkVYLElBQUk7SUFDSkMsR0FBRztJQUNIVyxRQUFRLEVBQUUsQ0FBQ2IsUUFBUSxDQUFDWSxVQUFVO0lBQzlCRSxPQUFPLEVBQUVkLFFBQVE7SUFDakJHLE9BQU87SUFDUEMsTUFBTTtJQUNOQyxPQUFPO0lBQ1BVLFNBQVMsRUFBRUMsSUFBSSxDQUFDQyxHQUFHLENBQUM7RUFDdEIsQ0FBQztFQUVELElBQUlqQixRQUFRLENBQUNrQixNQUFNLEVBQUU7SUFDbkJULElBQUksQ0FBQ1MsTUFBTSxHQUFHbEIsUUFBUSxDQUFDa0IsTUFBTTtFQUMvQjs7RUFFQTtFQUNBO0VBQ0EsSUFBSWxCLFFBQVEsQ0FBQ21CLGdCQUFnQixFQUFFO0lBQzdCVixJQUFJLENBQUNXLGtCQUFrQixHQUFHcEIsUUFBUSxDQUFDbUIsZ0JBQWdCLENBQUMsR0FBR2xCLElBQUksQ0FBQztFQUM5RDtFQUVBLE9BQU87SUFDTFUsSUFBSSxFQUFFYixVQUFVO0lBQ2hCdUIsT0FBTyxFQUFFQSxDQUFBLEtBQU1yQixRQUFRLENBQUMsR0FBR0MsSUFBSSxDQUFRO0lBQ3ZDUSxJQUFJO0lBQ0pUO0VBQ0YsQ0FBQztBQUNIIn0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { EndpointInterface } from '@data-client/normalizr';
|
|
2
|
+
import type { InvalidateAction } from '../newActions.js';
|
|
3
|
+
export default function createInvalidate<E extends EndpointInterface>(endpoint: E, { args }: {
|
|
4
|
+
args: readonly [...Parameters<E>];
|
|
5
|
+
}): InvalidateAction;
|
|
6
|
+
//# sourceMappingURL=createInvalidate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createInvalidate.d.ts","sourceRoot":"","sources":["../../src/controller/createInvalidate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,CAAC,SAAS,iBAAiB,EAClE,QAAQ,EAAE,CAAC,EACX,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,GAC9C,gBAAgB,CAOlB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { INVALIDATE_TYPE } from '../actionTypes.js';
|
|
2
|
+
export default function createInvalidate(endpoint, {
|
|
3
|
+
args
|
|
4
|
+
}) {
|
|
5
|
+
return {
|
|
6
|
+
type: INVALIDATE_TYPE,
|
|
7
|
+
meta: {
|
|
8
|
+
key: endpoint.key(...args)
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlZBTElEQVRFX1RZUEUiLCJjcmVhdGVJbnZhbGlkYXRlIiwiZW5kcG9pbnQiLCJhcmdzIiwidHlwZSIsIm1ldGEiLCJrZXkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9jcmVhdGVJbnZhbGlkYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW5kcG9pbnRJbnRlcmZhY2UgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IHsgSU5WQUxJREFURV9UWVBFIH0gZnJvbSAnLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBJbnZhbGlkYXRlQWN0aW9uIH0gZnJvbSAnLi4vbmV3QWN0aW9ucy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUludmFsaWRhdGU8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgZW5kcG9pbnQ6IEUsXG4gIHsgYXJncyB9OiB7IGFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB9LFxuKTogSW52YWxpZGF0ZUFjdGlvbiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogSU5WQUxJREFURV9UWVBFLFxuICAgIG1ldGE6IHtcbiAgICAgIGtleTogZW5kcG9pbnQua2V5KC4uLmFyZ3MpLFxuICAgIH0sXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUVBLFNBQVNBLGVBQWUsUUFBUSxtQkFBbUI7QUFHbkQsZUFBZSxTQUFTQyxnQkFBZ0JBLENBQ3RDQyxRQUFXLEVBQ1g7RUFBRUM7QUFBNEMsQ0FBQyxFQUM3QjtFQUNsQixPQUFPO0lBQ0xDLElBQUksRUFBRUosZUFBZTtJQUNyQkssSUFBSSxFQUFFO01BQ0pDLEdBQUcsRUFBRUosUUFBUSxDQUFDSSxHQUFHLENBQUMsR0FBR0gsSUFBSTtJQUMzQjtFQUNGLENBQUM7QUFDSCJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createInvalidateAll.d.ts","sourceRoot":"","sources":["../../src/controller/createInvalidateAll.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,CAAC,OAAO,UAAU,mBAAmB,CACzC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAChC,mBAAmB,CAKrB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { INVALIDATEALL_TYPE } from '../actionTypes.js';
|
|
2
|
+
export default function createInvalidateAll(testKey) {
|
|
3
|
+
return {
|
|
4
|
+
type: INVALIDATEALL_TYPE,
|
|
5
|
+
testKey
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJTlZBTElEQVRFQUxMX1RZUEUiLCJjcmVhdGVJbnZhbGlkYXRlQWxsIiwidGVzdEtleSIsInR5cGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9jcmVhdGVJbnZhbGlkYXRlQWxsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElOVkFMSURBVEVBTExfVFlQRSB9IGZyb20gJy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgSW52YWxpZGF0ZUFsbEFjdGlvbiB9IGZyb20gJy4uL25ld0FjdGlvbnMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkYXRlQWxsKFxuICB0ZXN0S2V5OiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW4sXG4pOiBJbnZhbGlkYXRlQWxsQWN0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBJTlZBTElEQVRFQUxMX1RZUEUsXG4gICAgdGVzdEtleSxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0Esa0JBQWtCLFFBQVEsbUJBQW1CO0FBR3RELGVBQWUsU0FBU0MsbUJBQW1CQSxDQUN6Q0MsT0FBaUMsRUFDWjtFQUNyQixPQUFPO0lBQ0xDLElBQUksRUFBRUgsa0JBQWtCO0lBQ3hCRTtFQUNGLENBQUM7QUFDSCJ9
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EndpointInterface } from '@data-client/normalizr';
|
|
2
|
+
import { EndpointUpdateFunction } from './types.js';
|
|
3
|
+
import { OptimisticAction } from '../newActions.js';
|
|
4
|
+
export default function createOptimistic<E extends EndpointInterface & {
|
|
5
|
+
update?: EndpointUpdateFunction<E>;
|
|
6
|
+
}>(endpoint: E, { args, fetchedAt, }: {
|
|
7
|
+
args: readonly [...Parameters<E>];
|
|
8
|
+
fetchedAt: number;
|
|
9
|
+
}): OptimisticAction<E>;
|
|
10
|
+
//# sourceMappingURL=createOptimistic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOptimistic.d.ts","sourceRoot":"","sources":["../../src/controller/createOptimistic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CACtC,CAAC,SAAS,iBAAiB,GAAG;IAC5B,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;CACpC,EAED,QAAQ,EAAE,CAAC,EACX,EACE,IAAI,EACJ,SAAS,GACV,EAAE;IACD,IAAI,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB,GACA,gBAAgB,CAAC,CAAC,CAAC,CA2BrB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { OPTIMISTIC_TYPE } from '../actionTypes.js';
|
|
2
|
+
export default function createOptimistic(endpoint, {
|
|
3
|
+
args,
|
|
4
|
+
fetchedAt
|
|
5
|
+
}) {
|
|
6
|
+
var _endpoint$dataExpiryL;
|
|
7
|
+
const expiryLength = (_endpoint$dataExpiryL = endpoint.dataExpiryLength) != null ? _endpoint$dataExpiryL : 60000;
|
|
8
|
+
/* istanbul ignore next */
|
|
9
|
+
if (process.env.NODE_ENV === 'development' && expiryLength < 0) {
|
|
10
|
+
throw new Error('Negative expiry length are not allowed.');
|
|
11
|
+
}
|
|
12
|
+
const now = Date.now();
|
|
13
|
+
// TODO: Use correct type once we no longer need backcompat
|
|
14
|
+
const meta = {
|
|
15
|
+
args,
|
|
16
|
+
fetchedAt,
|
|
17
|
+
date: now,
|
|
18
|
+
expiresAt: now + expiryLength,
|
|
19
|
+
// For legacy support; TODO: remove
|
|
20
|
+
schema: endpoint.schema,
|
|
21
|
+
key: endpoint.key(...args)
|
|
22
|
+
};
|
|
23
|
+
// For legacy support; TODO: remove
|
|
24
|
+
if (endpoint.update) meta.update = endpoint.update;
|
|
25
|
+
if (endpoint.errorPolicy) meta.errorPolicy = endpoint.errorPolicy;
|
|
26
|
+
const action = {
|
|
27
|
+
type: OPTIMISTIC_TYPE,
|
|
28
|
+
endpoint,
|
|
29
|
+
meta
|
|
30
|
+
};
|
|
31
|
+
return action;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPUFRJTUlTVElDX1RZUEUiLCJjcmVhdGVPcHRpbWlzdGljIiwiZW5kcG9pbnQiLCJhcmdzIiwiZmV0Y2hlZEF0IiwiX2VuZHBvaW50JGRhdGFFeHBpcnlMIiwiZXhwaXJ5TGVuZ3RoIiwiZGF0YUV4cGlyeUxlbmd0aCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkVycm9yIiwibm93IiwiRGF0ZSIsIm1ldGEiLCJkYXRlIiwiZXhwaXJlc0F0Iiwic2NoZW1hIiwia2V5IiwidXBkYXRlIiwiZXJyb3JQb2xpY3kiLCJhY3Rpb24iLCJ0eXBlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvY3JlYXRlT3B0aW1pc3RpYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IE9QVElNSVNUSUNfVFlQRSB9IGZyb20gJy4uL2FjdGlvblR5cGVzLmpzJztcbmltcG9ydCB7IE9wdGltaXN0aWNBY3Rpb24gfSBmcm9tICcuLi9uZXdBY3Rpb25zLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlT3B0aW1pc3RpYzxcbiAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gIH0sXG4+KFxuICBlbmRwb2ludDogRSxcbiAge1xuICAgIGFyZ3MsXG4gICAgZmV0Y2hlZEF0LFxuICB9OiB7XG4gICAgYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dO1xuICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICB9LFxuKTogT3B0aW1pc3RpY0FjdGlvbjxFPiB7XG4gIGNvbnN0IGV4cGlyeUxlbmd0aDogbnVtYmVyID0gZW5kcG9pbnQuZGF0YUV4cGlyeUxlbmd0aCA/PyA2MDAwMDtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGV4cGlyeUxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZ2F0aXZlIGV4cGlyeSBsZW5ndGggYXJlIG5vdCBhbGxvd2VkLicpO1xuICB9XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIC8vIFRPRE86IFVzZSBjb3JyZWN0IHR5cGUgb25jZSB3ZSBubyBsb25nZXIgbmVlZCBiYWNrY29tcGF0XG4gIGNvbnN0IG1ldGE6IGFueSA9IHtcbiAgICBhcmdzLFxuICAgIGZldGNoZWRBdCxcbiAgICBkYXRlOiBub3csXG4gICAgZXhwaXJlc0F0OiBub3cgKyBleHBpcnlMZW5ndGgsXG4gICAgLy8gRm9yIGxlZ2FjeSBzdXBwb3J0OyBUT0RPOiByZW1vdmVcbiAgICBzY2hlbWE6IGVuZHBvaW50LnNjaGVtYSxcbiAgICBrZXk6IGVuZHBvaW50LmtleSguLi5hcmdzKSxcbiAgfTtcbiAgLy8gRm9yIGxlZ2FjeSBzdXBwb3J0OyBUT0RPOiByZW1vdmVcbiAgaWYgKGVuZHBvaW50LnVwZGF0ZSkgbWV0YS51cGRhdGUgPSBlbmRwb2ludC51cGRhdGU7XG4gIGlmIChlbmRwb2ludC5lcnJvclBvbGljeSkgbWV0YS5lcnJvclBvbGljeSA9IGVuZHBvaW50LmVycm9yUG9saWN5O1xuXG4gIGNvbnN0IGFjdGlvbjogT3B0aW1pc3RpY0FjdGlvbjxFPiA9IHtcbiAgICB0eXBlOiBPUFRJTUlTVElDX1RZUEUsXG4gICAgZW5kcG9pbnQsXG4gICAgbWV0YSxcbiAgfTtcbiAgcmV0dXJuIGFjdGlvbjtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBR0EsU0FBU0EsZUFBZSxRQUFRLG1CQUFtQjtBQUduRCxlQUFlLFNBQVNDLGdCQUFnQkEsQ0FLdENDLFFBQVcsRUFDWDtFQUNFQyxJQUFJO0VBQ0pDO0FBSUYsQ0FBQyxFQUNvQjtFQUFBLElBQUFDLHFCQUFBO0VBQ3JCLE1BQU1DLFlBQW9CLElBQUFELHFCQUFBLEdBQUdILFFBQVEsQ0FBQ0ssZ0JBQWdCLFlBQUFGLHFCQUFBLEdBQUksS0FBSztFQUMvRDtFQUNBLElBQUlHLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLEtBQUssYUFBYSxJQUFJSixZQUFZLEdBQUcsQ0FBQyxFQUFFO0lBQzlELE1BQU0sSUFBSUssS0FBSyxDQUFDLHlDQUF5QyxDQUFDO0VBQzVEO0VBQ0EsTUFBTUMsR0FBRyxHQUFHQyxJQUFJLENBQUNELEdBQUcsQ0FBQyxDQUFDO0VBQ3RCO0VBQ0EsTUFBTUUsSUFBUyxHQUFHO0lBQ2hCWCxJQUFJO0lBQ0pDLFNBQVM7SUFDVFcsSUFBSSxFQUFFSCxHQUFHO0lBQ1RJLFNBQVMsRUFBRUosR0FBRyxHQUFHTixZQUFZO0lBQzdCO0lBQ0FXLE1BQU0sRUFBRWYsUUFBUSxDQUFDZSxNQUFNO0lBQ3ZCQyxHQUFHLEVBQUVoQixRQUFRLENBQUNnQixHQUFHLENBQUMsR0FBR2YsSUFBSTtFQUMzQixDQUFDO0VBQ0Q7RUFDQSxJQUFJRCxRQUFRLENBQUNpQixNQUFNLEVBQUVMLElBQUksQ0FBQ0ssTUFBTSxHQUFHakIsUUFBUSxDQUFDaUIsTUFBTTtFQUNsRCxJQUFJakIsUUFBUSxDQUFDa0IsV0FBVyxFQUFFTixJQUFJLENBQUNNLFdBQVcsR0FBR2xCLFFBQVEsQ0FBQ2tCLFdBQVc7RUFFakUsTUFBTUMsTUFBMkIsR0FBRztJQUNsQ0MsSUFBSSxFQUFFdEIsZUFBZTtJQUNyQkUsUUFBUTtJQUNSWTtFQUNGLENBQUM7RUFDRCxPQUFPTyxNQUFNO0FBQ2YifQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { EndpointInterface, ResolveType } from '@data-client/normalizr';
|
|
2
|
+
import { EndpointUpdateFunction } from './types.js';
|
|
3
|
+
import type { CompatibleReceiveAction } from '../compatibleActions.js';
|
|
4
|
+
export default function createReceive<E extends EndpointInterface & {
|
|
5
|
+
update?: EndpointUpdateFunction<E>;
|
|
6
|
+
}>(endpoint: E, options: {
|
|
7
|
+
args: readonly [...Parameters<E>];
|
|
8
|
+
response: Error;
|
|
9
|
+
fetchedAt?: number;
|
|
10
|
+
error: true;
|
|
11
|
+
}): CompatibleReceiveAction<E>;
|
|
12
|
+
export default function createReceive<E extends EndpointInterface & {
|
|
13
|
+
update?: EndpointUpdateFunction<E>;
|
|
14
|
+
}>(endpoint: E, options: {
|
|
15
|
+
args: readonly [...Parameters<E>];
|
|
16
|
+
response: ResolveType<E>;
|
|
17
|
+
fetchedAt?: number;
|
|
18
|
+
error?: false;
|
|
19
|
+
}): CompatibleReceiveAction<E>;
|
|
20
|
+
//# sourceMappingURL=createReceive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createReceive.d.ts","sourceRoot":"","sources":["../../src/controller/createReceive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,KAAK,EACV,uBAAuB,EAExB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,CAAC,SAAS,iBAAiB,GAAG;IAC5B,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;CACpC,EAED,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE;IACP,IAAI,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,QAAQ,EAAE,KAAK,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,CAAC;CACb,GACA,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAE9B,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,CAAC,SAAS,iBAAiB,GAAG;IAC5B,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;CACpC,EAED,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE;IACP,IAAI,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,GACA,uBAAuB,CAAC,CAAC,CAAC,CAAC"}
|