@data-client/core 0.9.7 → 0.11.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/README.md +24 -1
- package/dist/index.js +132 -96
- package/dist/index.umd.min.js +1 -1
- package/legacy/actionTypes.js +1 -1
- package/legacy/actions.js +1 -1
- package/legacy/controller/AbortOptimistic.js +2 -0
- package/legacy/controller/Controller.js +110 -78
- package/legacy/controller/createExpireAll.js +1 -1
- package/legacy/controller/createFetch.js +1 -1
- package/legacy/controller/createInvalidate.js +1 -1
- package/legacy/controller/createInvalidateAll.js +1 -1
- package/legacy/controller/createOptimistic.js +1 -1
- package/legacy/controller/createReset.js +1 -1
- package/legacy/controller/createSet.js +1 -1
- package/legacy/controller/createSubscription.js +1 -1
- package/legacy/controller/ensurePojo.js +2 -3
- package/legacy/controller/types.js +1 -1
- package/legacy/index.js +1 -1
- package/legacy/internal.js +2 -2
- package/legacy/manager/ConnectionListener.js +1 -1
- package/legacy/manager/DefaultConnectionListener.js +1 -1
- package/legacy/manager/DevtoolsManager.js +6 -2
- package/legacy/manager/LogoutManager.js +1 -1
- package/legacy/manager/NetworkManager.js +1 -1
- package/legacy/manager/PollingSubscription.js +1 -1
- package/legacy/manager/SubscriptionManager.js +1 -1
- package/legacy/manager/applyManager.js +1 -1
- package/legacy/manager/devtoolsTypes.js +1 -1
- package/legacy/manager/index.js +1 -1
- package/legacy/middlewareTypes.js +1 -1
- package/legacy/next/index.js +1 -1
- package/legacy/state/RIC.js +1 -1
- package/legacy/state/reducer/createReducer.js +6 -6
- package/legacy/state/reducer/expireReducer.js +1 -1
- package/legacy/state/reducer/fetchReducer.js +1 -1
- package/legacy/state/reducer/invalidateReducer.js +5 -5
- package/legacy/state/reducer/setReducer.js +7 -7
- package/legacy/state/selectMeta.js +1 -1
- package/legacy/types.js +1 -1
- package/lib/actionTypes.js +1 -1
- package/lib/actions.d.ts +1 -1
- package/lib/actions.d.ts.map +1 -1
- package/lib/actions.js +1 -1
- package/lib/controller/AbortOptimistic.d.ts +3 -0
- package/lib/controller/AbortOptimistic.d.ts.map +1 -0
- package/lib/controller/AbortOptimistic.js +2 -0
- package/lib/controller/Controller.d.ts +36 -11
- package/lib/controller/Controller.d.ts.map +1 -1
- package/lib/controller/Controller.js +110 -78
- package/lib/controller/createExpireAll.js +1 -1
- package/lib/controller/createFetch.js +1 -1
- package/lib/controller/createInvalidate.js +1 -1
- package/lib/controller/createInvalidateAll.js +1 -1
- package/lib/controller/createOptimistic.js +1 -1
- package/lib/controller/createReset.js +1 -1
- package/lib/controller/createSet.js +1 -1
- package/lib/controller/createSubscription.js +1 -1
- package/lib/controller/ensurePojo.d.ts.map +1 -1
- package/lib/controller/ensurePojo.js +2 -3
- package/lib/controller/types.d.ts.map +1 -1
- package/lib/controller/types.js +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/internal.d.ts +1 -1
- package/lib/internal.d.ts.map +1 -1
- package/lib/internal.js +2 -2
- package/lib/manager/ConnectionListener.js +1 -1
- package/lib/manager/DefaultConnectionListener.js +1 -1
- package/lib/manager/DevtoolsManager.d.ts +1 -0
- package/lib/manager/DevtoolsManager.d.ts.map +1 -1
- package/lib/manager/DevtoolsManager.js +6 -2
- package/lib/manager/LogoutManager.js +1 -1
- package/lib/manager/NetworkManager.js +1 -1
- package/lib/manager/PollingSubscription.js +1 -1
- package/lib/manager/SubscriptionManager.js +1 -1
- package/lib/manager/applyManager.js +1 -1
- package/lib/manager/devtoolsTypes.js +1 -1
- package/lib/manager/index.js +1 -1
- package/lib/middlewareTypes.d.ts.map +1 -1
- package/lib/middlewareTypes.js +1 -1
- package/lib/next/index.js +1 -1
- package/lib/state/RIC.d.ts.map +1 -1
- package/lib/state/RIC.js +1 -1
- package/lib/state/reducer/createReducer.js +6 -6
- package/lib/state/reducer/expireReducer.d.ts +1 -1
- package/lib/state/reducer/expireReducer.js +1 -1
- package/lib/state/reducer/fetchReducer.js +1 -1
- package/lib/state/reducer/invalidateReducer.d.ts +1 -1
- package/lib/state/reducer/invalidateReducer.js +6 -6
- package/lib/state/reducer/setReducer.d.ts.map +1 -1
- package/lib/state/reducer/setReducer.js +8 -8
- package/lib/state/selectMeta.js +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +1 -1
- package/package.json +3 -3
- package/src/actions.ts +1 -1
- package/src/controller/AbortOptimistic.ts +1 -0
- package/src/controller/Controller.ts +215 -96
- package/src/controller/__tests__/Controller.ts +2 -4
- package/src/controller/__tests__/__snapshots__/get.ts.snap +120 -0
- package/src/controller/__tests__/get.ts +285 -0
- package/src/controller/__tests__/getResponse.ts +2 -2
- package/src/controller/createSet.ts +3 -2
- package/src/controller/ensurePojo.ts +6 -7
- package/src/controller/types.ts +2 -4
- package/src/index.ts +2 -1
- package/src/internal.ts +1 -1
- package/src/manager/DevtoolsManager.ts +8 -2
- package/src/manager/__tests__/subscriptionManager.ts +3 -2
- package/src/middlewareTypes.ts +4 -12
- package/src/state/RIC.ts +3 -4
- package/src/state/__tests__/__snapshots__/reducer.ts.snap +4 -4
- package/src/state/__tests__/reducer.ts +32 -34
- package/src/state/reducer/createReducer.ts +3 -3
- package/src/state/reducer/invalidateReducer.ts +4 -4
- package/src/state/reducer/setReducer.ts +10 -9
- package/src/types.ts +3 -1
- package/ts3.4/actions.d.ts +1 -1
- package/ts3.4/controller/AbortOptimistic.d.ts +3 -0
- package/ts3.4/controller/Controller.d.ts +47 -19
- package/ts3.4/index.d.ts +1 -1
- package/ts3.4/internal.d.ts +1 -1
- package/ts3.4/manager/DevtoolsManager.d.ts +1 -0
- package/ts3.4/state/reducer/expireReducer.d.ts +1 -1
- package/ts3.4/state/reducer/invalidateReducer.d.ts +1 -1
- package/ts3.4/types.d.ts +1 -1
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ function useSuspense(endpoint, ...args)
|
|
|
31
31
|
const controller = useController();
|
|
32
32
|
|
|
33
33
|
const key = args[0] !== null ? endpoint.key(...args) : '';
|
|
34
|
-
const cacheResults = key && state.
|
|
34
|
+
const cacheResults = key && state.endpoints[key];
|
|
35
35
|
const meta = state.meta[key];
|
|
36
36
|
|
|
37
37
|
// Compute denormalized value
|
|
@@ -69,3 +69,26 @@ function useSuspense(endpoint, ...args)
|
|
|
69
69
|
return data;
|
|
70
70
|
}
|
|
71
71
|
```
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
## API
|
|
75
|
+
|
|
76
|
+
- [Controller](https://dataclient.io/docs/api/Controller)
|
|
77
|
+
- [ctrl.fetch](https://dataclient.io/docs/api/Controller#fetch)
|
|
78
|
+
- [ctrl.fetchIfStale](https://dataclient.io/docs/api/Controller#fetchIfStale)
|
|
79
|
+
- [ctrl.expireAll](https://dataclient.io/docs/api/Controller#expireAll)
|
|
80
|
+
- [ctrl.invalidate](https://dataclient.io/docs/api/Controller#invalidate)
|
|
81
|
+
- [ctrl.invalidateAll](https://dataclient.io/docs/api/Controller#invalidateAll)
|
|
82
|
+
- [ctrl.resetEntireStore](https://dataclient.io/docs/api/Controller#resetEntireStore)
|
|
83
|
+
- [ctrl.setResponse](https://dataclient.io/docs/api/Controller#setResponse)
|
|
84
|
+
- [ctrl.setError](https://dataclient.io/docs/api/Controller#setError)
|
|
85
|
+
- [ctrl.resolve](https://dataclient.io/docs/api/Controller#resolve)
|
|
86
|
+
- [ctrl.subscribe](https://dataclient.io/docs/api/Controller#subscribe)
|
|
87
|
+
- [ctrl.unsubscribe](https://dataclient.io/docs/api/Controller#unsubscribe)
|
|
88
|
+
- [ctrl.get](https://dataclient.io/docs/api/Controller#get)
|
|
89
|
+
- [ctrl.getResponse](https://dataclient.io/docs/api/Controller#getResponse)
|
|
90
|
+
- [ctrl.getError](https://dataclient.io/docs/api/Controller#getError)
|
|
91
|
+
- [ctrl.snapshot](https://dataclient.io/docs/api/Controller#snapshot)
|
|
92
|
+
- [ctrl.getState](https://dataclient.io/docs/api/Controller#getState)
|
|
93
|
+
- Middleware: [LogoutManager](https://dataclient.io/docs/api/LogoutManager), [NetworkManager](https://dataclient.io/docs/api/NetworkManager), [SubscriptionManager](https://dataclient.io/docs/api/SubscriptionManager), [PollingSubscription](https://dataclient.io/docs/api/PollingSubscription), [DevToolsManager](https://dataclient.io/docs/api/DevToolsManager)
|
|
94
|
+
- State: createReducer(), initialState, applyManager
|
package/dist/index.js
CHANGED
|
@@ -100,14 +100,14 @@ function fetchReducer(state, action) {
|
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
function invalidateReducer(state, action) {
|
|
103
|
-
const
|
|
104
|
-
...state.
|
|
103
|
+
const endpoints = {
|
|
104
|
+
...state.endpoints
|
|
105
105
|
};
|
|
106
106
|
const meta = {
|
|
107
107
|
...state.meta
|
|
108
108
|
};
|
|
109
109
|
const invalidateKey = key => {
|
|
110
|
-
delete
|
|
110
|
+
delete endpoints[key];
|
|
111
111
|
const itemMeta = {
|
|
112
112
|
...meta[key],
|
|
113
113
|
expiresAt: 0,
|
|
@@ -119,7 +119,7 @@ function invalidateReducer(state, action) {
|
|
|
119
119
|
if (action.type === INVALIDATE_TYPE) {
|
|
120
120
|
invalidateKey(action.meta.key);
|
|
121
121
|
} else {
|
|
122
|
-
Object.keys(
|
|
122
|
+
Object.keys(endpoints).forEach(key => {
|
|
123
123
|
if (action.testKey(key)) {
|
|
124
124
|
invalidateKey(key);
|
|
125
125
|
}
|
|
@@ -127,11 +127,13 @@ function invalidateReducer(state, action) {
|
|
|
127
127
|
}
|
|
128
128
|
return {
|
|
129
129
|
...state,
|
|
130
|
-
|
|
130
|
+
endpoints,
|
|
131
131
|
meta
|
|
132
132
|
};
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
+
class AbortOptimistic extends Error {}
|
|
136
|
+
|
|
135
137
|
function setReducer(state, action, controller) {
|
|
136
138
|
if (action.error) {
|
|
137
139
|
return reduceError(state, action, action.payload);
|
|
@@ -147,9 +149,8 @@ function setReducer(state, action, controller) {
|
|
|
147
149
|
// compute optimistic response based on current state
|
|
148
150
|
payload = action.endpoint.getOptimisticResponse.call(action.endpoint, controller.snapshot(state, action.meta.fetchedAt), ...action.meta.args);
|
|
149
151
|
} catch (e) {
|
|
150
|
-
var _e$constructor;
|
|
151
152
|
// AbortOptimistic means 'do nothing', otherwise we count the exception as endpoint failure
|
|
152
|
-
if (
|
|
153
|
+
if (e.constructor === AbortOptimistic) {
|
|
153
154
|
return state;
|
|
154
155
|
}
|
|
155
156
|
throw e;
|
|
@@ -163,15 +164,15 @@ function setReducer(state, action, controller) {
|
|
|
163
164
|
indexes,
|
|
164
165
|
entityMeta
|
|
165
166
|
} = normalizr.normalize(payload, action.endpoint.schema, action.meta.args, state.entities, state.indexes, state.entityMeta, action.meta);
|
|
166
|
-
const
|
|
167
|
-
...state.
|
|
167
|
+
const endpoints = {
|
|
168
|
+
...state.endpoints,
|
|
168
169
|
[action.meta.key]: result
|
|
169
170
|
};
|
|
170
171
|
try {
|
|
171
172
|
if (action.endpoint.update) {
|
|
172
173
|
const updaters = action.endpoint.update(result, ...action.meta.args);
|
|
173
174
|
Object.keys(updaters).forEach(key => {
|
|
174
|
-
|
|
175
|
+
endpoints[key] = updaters[key](endpoints[key]);
|
|
175
176
|
});
|
|
176
177
|
}
|
|
177
178
|
// no reason to completely fail because of user-code error
|
|
@@ -183,7 +184,7 @@ function setReducer(state, action, controller) {
|
|
|
183
184
|
return {
|
|
184
185
|
entities,
|
|
185
186
|
indexes,
|
|
186
|
-
|
|
187
|
+
endpoints,
|
|
187
188
|
entityMeta,
|
|
188
189
|
meta: {
|
|
189
190
|
...state.meta,
|
|
@@ -196,7 +197,7 @@ function setReducer(state, action, controller) {
|
|
|
196
197
|
optimistic: filterOptimistic(state, action),
|
|
197
198
|
lastReset: state.lastReset
|
|
198
199
|
};
|
|
199
|
-
// reducer must update the state, so in case of processing errors we simply compute the
|
|
200
|
+
// reducer must update the state, so in case of processing errors we simply compute the endpoints inline
|
|
200
201
|
} catch (error) {
|
|
201
202
|
if (typeof error === 'object') {
|
|
202
203
|
error.message = `Error processing ${action.meta.key}\n\nFull Schema: ${JSON.stringify(action.endpoint.schema, undefined, 2)}\n\nError:\n${error.message}`;
|
|
@@ -249,11 +250,11 @@ function createReducer(controller) {
|
|
|
249
250
|
// inline deletes are fine as these should have 0 refcounts
|
|
250
251
|
action.entities.forEach(([key, pk]) => {
|
|
251
252
|
var _entities$key, _entityMeta$key;
|
|
252
|
-
(_entities$key = state.entities[key]) == null
|
|
253
|
-
(_entityMeta$key = state.entityMeta[key]) == null
|
|
253
|
+
(_entities$key = state.entities[key]) == null || delete _entities$key[pk];
|
|
254
|
+
(_entityMeta$key = state.entityMeta[key]) == null || delete _entityMeta$key[pk];
|
|
254
255
|
});
|
|
255
|
-
action.
|
|
256
|
-
delete state.
|
|
256
|
+
action.endpoints.forEach(fetchKey => {
|
|
257
|
+
delete state.endpoints[fetchKey];
|
|
257
258
|
delete state.meta[fetchKey];
|
|
258
259
|
});
|
|
259
260
|
return state;
|
|
@@ -283,7 +284,7 @@ function createReducer(controller) {
|
|
|
283
284
|
const initialState = {
|
|
284
285
|
entities: {},
|
|
285
286
|
indexes: {},
|
|
286
|
-
|
|
287
|
+
endpoints: {},
|
|
287
288
|
meta: {},
|
|
288
289
|
entityMeta: {},
|
|
289
290
|
optimistic: [],
|
|
@@ -292,7 +293,7 @@ const initialState = {
|
|
|
292
293
|
|
|
293
294
|
var internal = /*#__PURE__*/Object.freeze({
|
|
294
295
|
__proto__: null,
|
|
295
|
-
|
|
296
|
+
MemoCache: normalizr.MemoCache,
|
|
296
297
|
INVALID: normalizr.INVALID,
|
|
297
298
|
RIC: RIC$1,
|
|
298
299
|
initialState: initialState
|
|
@@ -363,8 +364,7 @@ function createReset() {
|
|
|
363
364
|
const ensurePojo =
|
|
364
365
|
// FormData doesn't exist in node
|
|
365
366
|
/* istanbul ignore else we don't run coverage when we test node*/
|
|
366
|
-
typeof FormData !== 'undefined' ? body => body instanceof FormData ? Object.fromEntries(body.entries()) : body : /* istanbul ignore next */
|
|
367
|
-
body => body;
|
|
367
|
+
typeof FormData !== 'undefined' ? body => body instanceof FormData ? Object.fromEntries(body.entries()) : body : /* istanbul ignore next */body => body;
|
|
368
368
|
var ensurePojo$1 = ensurePojo;
|
|
369
369
|
|
|
370
370
|
function createSet(endpoint, {
|
|
@@ -454,13 +454,14 @@ class Controller {
|
|
|
454
454
|
* @see https://dataclient.io/docs/api/Controller#getState
|
|
455
455
|
*/
|
|
456
456
|
|
|
457
|
+
/**
|
|
458
|
+
* Singleton to maintain referential equality between calls
|
|
459
|
+
*/
|
|
460
|
+
|
|
457
461
|
constructor({
|
|
458
462
|
dispatch = unsetDispatch,
|
|
459
463
|
getState = unsetState,
|
|
460
|
-
|
|
461
|
-
entities: {},
|
|
462
|
-
results: {}
|
|
463
|
-
}
|
|
464
|
+
memo = new normalizr.MemoCache()
|
|
464
465
|
} = {}) {
|
|
465
466
|
/*************** Action Dispatchers ***************/
|
|
466
467
|
/**
|
|
@@ -585,75 +586,96 @@ class Controller {
|
|
|
585
586
|
const args = rest.slice(0, rest.length - 1);
|
|
586
587
|
const key = endpoint.key(...args);
|
|
587
588
|
const meta = selectMeta(state, key);
|
|
588
|
-
const
|
|
589
|
-
if (
|
|
589
|
+
const error = state.endpoints[key];
|
|
590
|
+
if (error !== undefined && (meta == null ? void 0 : meta.errorPolicy) === 'soft') return;
|
|
590
591
|
return meta == null ? void 0 : meta.error;
|
|
591
592
|
};
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
593
|
+
this.dispatch = dispatch;
|
|
594
|
+
this.getState = getState;
|
|
595
|
+
this.memo = memo;
|
|
596
|
+
}
|
|
597
|
+
/**
|
|
598
|
+
* Gets the (globally referentially stable) response for a given endpoint/args pair from state given.
|
|
599
|
+
* @see https://dataclient.io/docs/api/Controller#getResponse
|
|
600
|
+
*/
|
|
601
|
+
getResponse(endpoint, ...rest) {
|
|
602
|
+
const state = rest[rest.length - 1];
|
|
603
|
+
// this is typescript generics breaking
|
|
604
|
+
const args = rest.slice(0, rest.length - 1)
|
|
605
|
+
// handle FormData
|
|
606
|
+
.map(ensurePojo$1);
|
|
607
|
+
const isActive = args.length !== 1 || args[0] !== null;
|
|
608
|
+
const key = isActive ? endpoint.key(...args) : '';
|
|
609
|
+
const cacheEndpoints = isActive ? state.endpoints[key] : undefined;
|
|
610
|
+
const schema = endpoint.schema;
|
|
611
|
+
const meta = selectMeta(state, key);
|
|
612
|
+
let expiresAt = meta == null ? void 0 : meta.expiresAt;
|
|
613
|
+
// if we have no endpoint entry, and our endpoint has a schema - try querying the store
|
|
614
|
+
const shouldQuery = cacheEndpoints === undefined && schema !== undefined;
|
|
615
|
+
const input = shouldQuery ?
|
|
616
|
+
// nothing in endpoints cache, so try querying if we have a schema to do so
|
|
617
|
+
this.memo.buildQueryKey(key, schema, args, state.entities, state.indexes) : cacheEndpoints;
|
|
618
|
+
if (!isActive) {
|
|
619
|
+
// when not active simply return the query input without denormalizing
|
|
620
|
+
return {
|
|
621
|
+
data: input,
|
|
622
|
+
expiryStatus: normalizr.ExpiryStatus.Valid,
|
|
623
|
+
expiresAt: Infinity
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
let isInvalid = false;
|
|
627
|
+
if (shouldQuery) {
|
|
628
|
+
isInvalid = !normalizr.validateQueryKey(input);
|
|
629
|
+
} else if (!schema || !schemaHasEntity(schema)) {
|
|
630
|
+
return {
|
|
631
|
+
data: cacheEndpoints,
|
|
632
|
+
expiryStatus: meta != null && meta.invalidated ? normalizr.ExpiryStatus.Invalid : cacheEndpoints && !endpoint.invalidIfStale ? normalizr.ExpiryStatus.Valid : normalizr.ExpiryStatus.InvalidIfStale,
|
|
633
|
+
expiresAt: expiresAt || 0
|
|
634
|
+
};
|
|
635
|
+
}
|
|
630
636
|
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
const invalidDenormalize = typeof data === 'symbol';
|
|
637
|
+
// second argument is false if any entities are missing
|
|
638
|
+
// eslint-disable-next-line prefer-const
|
|
639
|
+
const {
|
|
640
|
+
data,
|
|
641
|
+
paths
|
|
642
|
+
} = this.memo.denormalize(input, schema, state.entities, args);
|
|
638
643
|
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
644
|
+
// note: isInvalid can only be true if shouldQuery is true
|
|
645
|
+
if (!expiresAt && isInvalid) expiresAt = 1;
|
|
646
|
+
return this.getSchemaResponse(data, paths, state.entityMeta, expiresAt, endpoint.invalidIfStale || isInvalid, meta);
|
|
647
|
+
}
|
|
643
648
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
649
|
+
/**
|
|
650
|
+
* Queries the store for a Querable schema
|
|
651
|
+
* @see https://dataclient.io/docs/api/Controller#get
|
|
652
|
+
*/
|
|
653
|
+
get(schema, ...rest) {
|
|
654
|
+
const state = rest[rest.length - 1];
|
|
655
|
+
// this is typescript generics breaking
|
|
656
|
+
const args = rest.slice(0, rest.length - 1).map(ensurePojo$1);
|
|
657
|
+
|
|
658
|
+
// NOTE: different orders can result in cache busting here; but since it's just a perf penalty we will allow for now
|
|
659
|
+
const key = JSON.stringify(args);
|
|
660
|
+
return this.memo.query(key, schema, args, state.entities, state.indexes);
|
|
661
|
+
}
|
|
662
|
+
getSchemaResponse(data, paths, entityMeta, expiresAt, invalidIfStale, meta = {}) {
|
|
663
|
+
const invalidDenormalize = typeof data === 'symbol';
|
|
664
|
+
|
|
665
|
+
// fallback to entity expiry time
|
|
666
|
+
if (!expiresAt) {
|
|
667
|
+
expiresAt = entityExpiresAt(paths, entityMeta);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
// https://dataclient.io/docs/concepts/expiry-policy#expiry-status
|
|
671
|
+
// we don't track the difference between stale or fresh because that is tied to triggering
|
|
672
|
+
// conditions
|
|
673
|
+
const expiryStatus = meta != null && meta.invalidated || invalidDenormalize && !(meta != null && meta.error) ? normalizr.ExpiryStatus.Invalid : invalidDenormalize || invalidIfStale ? normalizr.ExpiryStatus.InvalidIfStale : normalizr.ExpiryStatus.Valid;
|
|
674
|
+
return {
|
|
675
|
+
data,
|
|
676
|
+
expiryStatus,
|
|
677
|
+
expiresAt
|
|
653
678
|
};
|
|
654
|
-
this.dispatch = dispatch;
|
|
655
|
-
this.getState = getState;
|
|
656
|
-
this.globalCache = globalCache;
|
|
657
679
|
}
|
|
658
680
|
}
|
|
659
681
|
|
|
@@ -665,8 +687,8 @@ function entityExpiresAt(paths, entityMeta) {
|
|
|
665
687
|
pk,
|
|
666
688
|
key
|
|
667
689
|
} of paths) {
|
|
668
|
-
var _entityMeta$key
|
|
669
|
-
const entityExpiry = (_entityMeta$key = entityMeta[key]) == null
|
|
690
|
+
var _entityMeta$key;
|
|
691
|
+
const entityExpiry = (_entityMeta$key = entityMeta[key]) == null || (_entityMeta$key = _entityMeta$key[pk]) == null ? void 0 : _entityMeta$key.expiresAt;
|
|
670
692
|
// expiresAt will always resolve to false with any comparison
|
|
671
693
|
if (entityExpiry < expiresAt) expiresAt = entityExpiry;
|
|
672
694
|
}
|
|
@@ -675,7 +697,7 @@ function entityExpiresAt(paths, entityMeta) {
|
|
|
675
697
|
|
|
676
698
|
/** Determine whether the schema has any entities.
|
|
677
699
|
*
|
|
678
|
-
* Without entities, denormalization is not needed, and results should not be
|
|
700
|
+
* Without entities, denormalization is not needed, and results should not be queried.
|
|
679
701
|
*/
|
|
680
702
|
function schemaHasEntity(schema) {
|
|
681
703
|
if (normalizr.isEntity(schema)) return true;
|
|
@@ -694,11 +716,7 @@ class Snapshot {
|
|
|
694
716
|
this.state = void 0;
|
|
695
717
|
this.controller = void 0;
|
|
696
718
|
this.fetchedAt = void 0;
|
|
697
|
-
|
|
698
|
-
/** @see https://dataclient.io/docs/api/Snapshot#getResponse */
|
|
699
|
-
this.getResponse = (endpoint, ...args) => {
|
|
700
|
-
return this.controller.getResponse(endpoint, ...args, this.state);
|
|
701
|
-
};
|
|
719
|
+
this.abort = new AbortOptimistic();
|
|
702
720
|
/** @see https://dataclient.io/docs/api/Snapshot#getError */
|
|
703
721
|
this.getError = (endpoint, ...args) => {
|
|
704
722
|
return this.controller.getError(endpoint, ...args, this.state);
|
|
@@ -707,6 +725,20 @@ class Snapshot {
|
|
|
707
725
|
this.controller = controller;
|
|
708
726
|
this.fetchedAt = fetchedAt;
|
|
709
727
|
}
|
|
728
|
+
|
|
729
|
+
/*************** Data Access ***************/
|
|
730
|
+
/** @see https://dataclient.io/docs/api/Snapshot#getResponse */
|
|
731
|
+
|
|
732
|
+
getResponse(endpoint, ...args) {
|
|
733
|
+
return this.controller.getResponse(endpoint, ...args, this.state);
|
|
734
|
+
}
|
|
735
|
+
/**
|
|
736
|
+
* Retrieved memoized value for any Querable schema
|
|
737
|
+
* @see https://dataclient.io/docs/api/Snapshot#get
|
|
738
|
+
*/
|
|
739
|
+
get(schema, ...args) {
|
|
740
|
+
return this.controller.get(schema, ...args, this.state);
|
|
741
|
+
}
|
|
710
742
|
}
|
|
711
743
|
|
|
712
744
|
class ResetError extends Error {
|
|
@@ -1270,7 +1302,7 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
1270
1302
|
var _toJSON, _endpoint$schema;
|
|
1271
1303
|
const serial = {
|
|
1272
1304
|
name: endpoint.name,
|
|
1273
|
-
schema: (_toJSON = (_endpoint$schema = endpoint.schema) == null
|
|
1305
|
+
schema: (_toJSON = (_endpoint$schema = endpoint.schema) == null || _endpoint$schema.toJSON == null ? void 0 : _endpoint$schema.toJSON()) != null ? _toJSON : endpoint.schema,
|
|
1274
1306
|
sideEffect: endpoint.sideEffect
|
|
1275
1307
|
};
|
|
1276
1308
|
extraEndpointKeys.forEach(key => {
|
|
@@ -1317,6 +1349,7 @@ class DevToolsManager {
|
|
|
1317
1349
|
constructor(config, skipLogging) {
|
|
1318
1350
|
this.started = false;
|
|
1319
1351
|
this.actions = [];
|
|
1352
|
+
this.maxBufferLength = 100;
|
|
1320
1353
|
/* istanbul ignore next */
|
|
1321
1354
|
this.devTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__.connect({
|
|
1322
1355
|
...DEFAULT_CONFIG,
|
|
@@ -1376,6 +1409,9 @@ class DevToolsManager {
|
|
|
1376
1409
|
if (this.started) {
|
|
1377
1410
|
this.devTools.send(action, state, undefined, 'RDC');
|
|
1378
1411
|
} else {
|
|
1412
|
+
// avoid this getting too big in case this is long running
|
|
1413
|
+
// we cut in half so we aren't constantly reallocating
|
|
1414
|
+
if (this.actions.length > this.maxBufferLength) this.actions = this.actions.slice(this.maxBufferLength / 2);
|
|
1379
1415
|
// queue actions
|
|
1380
1416
|
this.actions.push([action, state]);
|
|
1381
1417
|
}
|
package/dist/index.umd.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@data-client/normalizr")):"function"==typeof define&&define.amd?define(["exports","@data-client/normalizr"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).RDC=e.RDC||{},e.RDC.Core={}),e.normalizr)}(this,(function(e,t){"use strict";var s="function"==typeof requestIdleCallback?requestIdleCallback:e=>setTimeout(e,0);const i="rdc/fetch",r="rdc/set",n="rdc/optimistic",a="rdc/reset",o="rdc/subscribe",l="rdc/unsubscribe",c="rdc/invalidate",h="rdc/invalidateall",d="rdc/expireall",u="rdc/gc";var p=Object.freeze({__proto__:null,FETCH_TYPE:i,SET_TYPE:r,OPTIMISTIC_TYPE:n,RESET_TYPE:a,SUBSCRIBE_TYPE:o,UNSUBSCRIBE_TYPE:l,INVALIDATE_TYPE:c,INVALIDATEALL_TYPE:h,EXPIREALL_TYPE:d,GC_TYPE:u});function f(e,t){let s;return t.endpoint.getOptimisticResponse&&t.endpoint.sideEffect?(s=function(e,{args:t,fetchedAt:s}){var i;const r=null!=(i=e.dataExpiryLength)?i:6e4,a=Date.now(),o={args:t,fetchedAt:s,date:a,expiresAt:a+r,key:e.key(...t)};return{type:n,endpoint:e,meta:o}}(t.endpoint,{args:t.meta.args,fetchedAt:t.meta.createdAt}),Object.assign({},e,{optimistic:[...e.optimistic,s]})):e}function y(e,t,s){return"AbortError"===s.name?Object.assign({},e,{optimistic:m(e,t)}):Object.assign({},e,{meta:Object.assign({},e.meta,{[t.meta.key]:{date:t.meta.date,error:s,expiresAt:t.meta.expiresAt,errorPolicy:null==t.endpoint.errorPolicy?void 0:t.endpoint.errorPolicy(s)}}),optimistic:m(e,t)})}function m(e,t){return e.optimistic.filter((e=>e.meta.key!==t.meta.key||(e.type===n?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}function g(e){return function(s,o){switch(s||(s=v),o.type){case u:return o.entities.forEach((([e,t])=>{var i,r;null==(i=s.entities[e])||delete i[t],null==(r=s.entityMeta[e])||delete r[t]})),o.results.forEach((e=>{delete s.results[e],delete s.meta[e]})),s;case i:return f(s,o);case n:case r:return function(e,s,i){if(s.error)return y(e,s,s.payload);try{var r;let o;if(s.type===n){if(!s.endpoint.getOptimisticResponse)return e;try{o=s.endpoint.getOptimisticResponse.call(s.endpoint,i.snapshot(e,s.meta.fetchedAt),...s.meta.args)}catch(t){var a;if("AbortOptimistic"===(null==(a=t.constructor)?void 0:a.name))return e;throw t}}else o=s.payload;const{result:l,entities:c,indexes:h,entityMeta:d}=t.normalize(o,s.endpoint.schema,s.meta.args,e.entities,e.indexes,e.entityMeta,s.meta),u=Object.assign({},e.results,{[s.meta.key]:l});try{if(s.endpoint.update){const e=s.endpoint.update(l,...s.meta.args);Object.keys(e).forEach((t=>{u[t]=e[t](u[t])}))}}catch(e){console.error(`The following error occured during Endpoint.update() for ${s.meta.key}`),console.error(e)}return{entities:c,indexes:h,results:u,entityMeta:d,meta:Object.assign({},e.meta,{[s.meta.key]:{date:s.meta.date,expiresAt:s.meta.expiresAt,prevExpiresAt:null==(r=e.meta[s.meta.key])?void 0:r.expiresAt}}),optimistic:m(e,s),lastReset:e.lastReset}}catch(t){return"object"==typeof t&&(t.message=`Error processing ${s.meta.key}\n\nFull Schema: ${JSON.stringify(s.endpoint.schema,void 0,2)}\n\nError:\n${t.message}`,"payload"in s&&(t.payload=s.payload),t.status=400),y(e,s,t)}}(s,o,e);case h:case c:return function(e,t){const s=Object.assign({},e.results),i=Object.assign({},e.meta),r=e=>{delete s[e];const t=Object.assign({},i[e],{expiresAt:0,invalidated:!0});delete t.error,i[e]=t};return t.type===c?r(t.meta.key):Object.keys(s).forEach((e=>{t.testKey(e)&&r(e)})),Object.assign({},e,{results:s,meta:i})}(s,o);case d:return function(e,t){const s=Object.assign({},e.meta);return Object.keys(s).forEach((e=>{t.testKey(e)&&(s[e]=Object.assign({},s[e],{expiresAt:1}))})),Object.assign({},e,{meta:s})}(s,o);case a:return Object.assign({},v,{lastReset:o.date});default:return s}}}const v={entities:{},indexes:{},results:{},meta:{},entityMeta:{},optimistic:[],lastReset:0};var b=Object.freeze({__proto__:null,inferResults:t.inferResults,INVALID:t.INVALID,RIC:s,initialState:v});function E(e,{args:t}){const s=e.key(...t);let r=0,n=0;const a=new Promise(((e,t)=>{[r,n]=[e,t]})),o={args:t,key:s,throttle:!e.sideEffect,resolve:r,reject:n,promise:a,createdAt:Date.now(),nm:!1};return{type:i,payload:()=>e(...t),meta:o,endpoint:e}}var L="undefined"!=typeof FormData?e=>e instanceof FormData?Object.fromEntries(e.entries()):e:e=>e;function O(e,{args:t,fetchedAt:s,response:i,error:n=!1}){var a,o;const l=n?null!=(a=e.errorExpiryLength)?a:1e3:null!=(o=e.dataExpiryLength)?o:6e4,c=Date.now(),h={args:t.map(L),fetchedAt:null!=s?s:c,date:c,expiresAt:c+l,key:e.key(...t)},d={type:r,payload:i,endpoint:e,meta:h};return n&&(d.error=!0),d}function I(e,t){return e.meta[t]}const S=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},w=()=>v;class A{constructor({dispatch:e=S,getState:s=w,globalCache:i={entities:{},results:{}}}={}){this.fetch=(e,...s)=>{const i=E(e,{args:s});return this.dispatch(i),e.schema?i.meta.promise.then((i=>t.denormalize(i,e.schema,{},s))):i.meta.promise},this.fetchIfStale=(e,...s)=>{const{data:i,expiresAt:r,expiryStatus:n}=this.getResponse(e,...s,this.getState());return n!==t.ExpiryStatus.Invalid&&Date.now()<=r?i:this.fetch(e,...s)},this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:c,meta:{key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch({type:h,testKey:t=>e.testKey(t)}),this.expireAll=e=>this.dispatch({type:d,testKey:t=>e.testKey(t)}),this.resetEntireStore=()=>this.dispatch({type:a,date:Date.now()}),this.setResponse=(e,...t)=>{const s=t[t.length-1],i=O(e,{args:t.slice(0,t.length-1),response:s});return this.dispatch(i)},this.setError=(e,...t)=>{const s=t[t.length-1],i=O(e,{args:t.slice(0,t.length-1),response:s,error:!0});return this.dispatch(i)},this.resolve=(e,t)=>this.dispatch(O(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:o,endpoint:e,meta:{args:t,key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:l,endpoint:e,meta:{args:t,key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new x(this,e,t),this.getError=(e,...t)=>{if(null===t[0])return;const s=t[t.length-1],i=t.slice(0,t.length-1),r=e.key(...i),n=I(s,r);return void 0===s.results[r]||"soft"!==(null==n?void 0:n.errorPolicy)?null==n?void 0:n.error:void 0},this.getResponse=(e,...s)=>{const i=s[s.length-1],r=s.slice(0,s.length-1).map(L),n=1!==r.length||null!==r[0],a=n?e.key(...r):"",o=n?i.results[a]:void 0,l=e.schema,c=I(i,a);let h,d=null==c?void 0:c.expiresAt,u=!1;if(void 0===o&&void 0!==e.schema?(h=t.inferResults(e.schema,r,i.indexes,i.entities),u=!t.validateInference(h),!d&&u&&(d=1)):h=o,!n)return{data:h,expiryStatus:t.ExpiryStatus.Valid,expiresAt:1/0};if(!e.schema||!k(e.schema))return{data:h,expiryStatus:null!=c&&c.invalidated?t.ExpiryStatus.Invalid:o&&!e.invalidIfStale?t.ExpiryStatus.Valid:t.ExpiryStatus.InvalidIfStale,expiresAt:d||0};this.globalCache.results[a]||(this.globalCache.results[a]=new t.WeakEntityMap);const{data:p,paths:f}=t.denormalizeCached(h,l,i.entities,this.globalCache.entities,this.globalCache.results[a],r),y="symbol"==typeof p;d||(d=function(e,t){let s=1/0;for(const{pk:n,key:a}of e){var i,r;const e=null==(i=t[a])||null==(r=i[n])?void 0:r.expiresAt;e<s&&(s=e)}return s}(f,i.entityMeta));return{data:p,expiryStatus:null!=c&&c.invalidated||y&&(null==c||!c.error)?t.ExpiryStatus.Invalid:y||e.invalidIfStale||u?t.ExpiryStatus.InvalidIfStale:t.ExpiryStatus.Valid,expiresAt:d}},this.dispatch=e,this.getState=s,this.globalCache=i}}function k(e){if(t.isEntity(e))return!0;if(Array.isArray(e))return 0!==e.length&&k(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?k(t):Object.values(t).some((e=>k(e)))}return!1}class x{constructor(e,t,s=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.getResponse=(e,...t)=>this.controller.getResponse(e,...t,this.state),this.getError=(e,...t)=>this.controller.getError(e,...t,this.state),this.state=t,this.controller=e,this.fetchedAt=s}}class j extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}class T{isOnline(){return void 0===navigator.onLine||navigator.onLine}addOnlineListener(e){addEventListener("online",e)}removeOnlineListener(e){removeEventListener("online",e)}addOfflineListener(e){addEventListener("offline",e)}removeOfflineListener(e){removeEventListener("offline",e)}}class R{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let _;_="undefined"!=typeof navigator&&"function"==typeof addEventListener?T:R;var q=_;let P={};Object.hasOwn=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},Object.defineProperty(e,"ExpiryStatus",{enumerable:!0,get:function(){return t.ExpiryStatus}}),e.Controller=A,e.DefaultConnectionListener=q,e.DevToolsManager=class{constructor(e,t){this.started=!1,this.actions=[],this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(Object.assign({},P,{config:e})),this.devTools?this.middleware=e=>{this.controller=e;const s=g(e);let i=e.getState();return r=>n=>{const a=r(n);return i=this.started?s(i,n):e.getState(),a.then((()=>{null!=t&&t(n)||this.handleAction(n,i.optimistic.reduce(s,i))})),a}}:this.middleware=()=>e=>t=>e(t)}handleAction(e,t){this.started?this.devTools.send(e,t,void 0,"RDC"):this.actions.push([e,t])}init(e){this.devTools&&this.devTools.init(e)}cleanup(){}getMiddleware(){return this.middleware}},e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){e&&(this.handleLogout=e),t&&(this.shouldLogout=t),this.middleware=e=>t=>async s=>{await t(s),s.type===r&&s.error&&this.shouldLogout(s.payload)&&this.handleLogout(e)}}cleanup(){}getMiddleware(){return this.middleware}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor(e=6e4,t=1e3){this.fetched=Object.create(null),this.resolvers={},this.rejectors={},this.fetchedAt={},this.controller=new A,this.dataExpiryLength=e,this.errorExpiryLength=t,this.middleware=e=>(this.controller=e,t=>s=>{switch(s.type){case i:return this.handleFetch(s),void 0!==s.endpoint.getOptimisticResponse&&s.endpoint.sideEffect?t(s):Promise.resolve();case r:return t(s).then((()=>{if(s.meta.key in this.fetched){var t;const i=null==(t=e.getState().meta[s.meta.key])?void 0:t.error;i?this.handleSet(O(s.endpoint,{args:s.meta.args,response:i,fetchedAt:s.meta.fetchedAt,error:!0})):this.handleSet(s)}}));case a:{const e=Object.assign({},this.rejectors);return this.clearAll(),t(s).then((()=>{for(const t in e)e[t](new j)}))}default:return t(s)}})}skipLogging(e){return e.type===i&&e.meta.key in this.fetched}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}allSettled(){const e=Object.values(this.fetched);if(e.length)return Promise.allSettled(e)}clearAll(){for(const e in this.rejectors)this.clear(e)}clear(e){this.fetched[e].catch((()=>{})),delete this.resolvers[e],delete this.rejectors[e],delete this.fetched[e],delete this.fetchedAt[e]}getLastReset(){return this.cleanupDate?this.cleanupDate:this.controller.getState().lastReset}handleFetch(e){const t=e.payload,{key:s,throttle:i,resolve:r,reject:n,createdAt:a}=e.meta,o=()=>{let s=t();return i||(s=(e=>e.then((e=>(r(e),e))).catch((e=>{throw n(e),e})))(s)),s=s.then((t=>{let s=this.getLastReset();return a>=s&&this.controller.resolve(e.endpoint,{args:e.meta.args,response:t,fetchedAt:a}),t})).catch((t=>{const s=this.getLastReset();throw a>=s&&this.controller.resolve(e.endpoint,{args:e.meta.args,response:t,fetchedAt:a,error:!0}),t})),s};return i?this.throttle(s,o,a).then((e=>r(e))).catch((e=>n(e))):o().catch((()=>{}))}handleSet(e){if(e.meta.key in this.fetched){let t;t=e.error?this.rejectors[e.meta.key]:this.resolvers[e.meta.key],t(e.payload),this.clear(e.meta.key)}}getMiddleware(){return this.middleware}throttle(e,t,i){const r=this.getLastReset();return e in this.fetched&&this.fetchedAt[e]>r||(this.fetched[e]=new Promise(((t,s)=>{this.resolvers[e]=t,this.rejectors[e]=s})),this.fetchedAt[e]=i,s((()=>{t().catch((()=>null))}),{timeout:500})),this.fetched[e]}},e.PollingSubscription=class{constructor(e,t,s){if(this.frequencyHistogram=new Map,this.offlineListener=()=>{this.cleanup(),this.connectionListener.addOnlineListener(this.onlineListener)},this.onlineListener=()=>{this.connectionListener.removeOnlineListener(this.onlineListener);const e=Date.now();this.startId=setTimeout((()=>{this.startId&&(delete this.startId,this.update(),this.run())}),Math.max(0,this.lastFetchTime()-e+this.frequency)),this.connectionListener.addOfflineListener(this.offlineListener)},void 0===e.endpoint.pollFrequency)throw new Error("frequency needed for polling subscription");this.endpoint=e.endpoint,this.frequency=e.endpoint.pollFrequency,this.args=e.meta.args,this.key=e.meta.key,this.frequencyHistogram.set(this.frequency,1),this.controller=t,this.connectionListener=s||new q,this.connectionListener.isOnline()?this.onlineListener():this.offlineListener()}add(e){void 0!==e&&(this.frequencyHistogram.has(e)?this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)+1):(this.frequencyHistogram.set(e,1),e<this.frequency&&(this.frequency=e,this.run())))}remove(e){if(void 0===e)return!1;if(this.frequencyHistogram.has(e)&&(this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)-1),this.frequencyHistogram.get(e)<1)){if(this.frequencyHistogram.delete(e),0===this.frequencyHistogram.size)return this.cleanup(),!0;e<=this.frequency&&(this.frequency=Math.min(...this.frequencyHistogram.keys()),this.run())}return!1}cleanup(){this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId),this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.startId&&(clearTimeout(this.startId),delete this.startId),this.connectionListener.removeOnlineListener(this.onlineListener),this.connectionListener.removeOfflineListener(this.offlineListener)}update(){const e=this.endpoint,t=function(...t){return e.call(this,...t)};Object.assign(t,this.endpoint),t.dataExpiryLength=this.frequency/2,t.errorExpiryLength=this.frequency/10,t.errorPolicy=()=>"soft",t.key=()=>this.key,this.controller.fetch(t,...this.args).catch((()=>null))}run(){this.startId||(this.intervalId&&(this.lastIntervalId=this.intervalId),this.intervalId=setInterval((()=>{this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.intervalId&&this.update()}),this.frequency))}lastFetchTime(){var e,t;return null!=(e=null==(t=this.controller.getState().meta[this.key])?void 0:t.date)?e:0}},e.ResetError=j,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.controller=new A,this.Subscription=e,this.middleware=e=>(this.controller=e,e=>t=>{switch(t.type){case o:try{this.handleSubscribe(t)}catch(e){console.error(e)}return Promise.resolve();case l:return this.handleUnsubscribe(t),Promise.resolve();default:return e(t)}})}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e){const t=e.meta.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].add(s)}else this.subscriptions[t]=new this.Subscription(e,this.controller)}handleUnsubscribe(e){const t=e.meta.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].remove(s)&&delete this.subscriptions[t]}}getMiddleware(){return this.middleware}},e.__INTERNAL__=b,e.actionTypes=p,e.applyManager=function(e,t){return e.map((e=>{const s=e.getMiddleware();return({dispatch:e,getState:i})=>(t.dispatch=e,t.getState=i,s(t))}))},e.createFetch=E,e.createReducer=g,e.createSet=O,e.initialState=v,Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@data-client/normalizr")):"function"==typeof define&&define.amd?define(["exports","@data-client/normalizr"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).RDC=e.RDC||{},e.RDC.Core={}),e.normalizr)}(this,(function(e,t){"use strict";var s="function"==typeof requestIdleCallback?requestIdleCallback:e=>setTimeout(e,0);const i="rdc/fetch",n="rdc/set",r="rdc/optimistic",a="rdc/reset",o="rdc/subscribe",c="rdc/unsubscribe",l="rdc/invalidate",h="rdc/invalidateall",d="rdc/expireall",u="rdc/gc";var p=Object.freeze({__proto__:null,FETCH_TYPE:i,SET_TYPE:n,OPTIMISTIC_TYPE:r,RESET_TYPE:a,SUBSCRIBE_TYPE:o,UNSUBSCRIBE_TYPE:c,INVALIDATE_TYPE:l,INVALIDATEALL_TYPE:h,EXPIREALL_TYPE:d,GC_TYPE:u});function f(e,t){let s;return t.endpoint.getOptimisticResponse&&t.endpoint.sideEffect?(s=function(e,{args:t,fetchedAt:s}){var i;const n=null!=(i=e.dataExpiryLength)?i:6e4,a=Date.now(),o={args:t,fetchedAt:s,date:a,expiresAt:a+n,key:e.key(...t)};return{type:r,endpoint:e,meta:o}}(t.endpoint,{args:t.meta.args,fetchedAt:t.meta.createdAt}),Object.assign({},e,{optimistic:[...e.optimistic,s]})):e}class m extends Error{}function y(e,t,s){return"AbortError"===s.name?Object.assign({},e,{optimistic:g(e,t)}):Object.assign({},e,{meta:Object.assign({},e.meta,{[t.meta.key]:{date:t.meta.date,error:s,expiresAt:t.meta.expiresAt,errorPolicy:null==t.endpoint.errorPolicy?void 0:t.endpoint.errorPolicy(s)}}),optimistic:g(e,t)})}function g(e,t){return e.optimistic.filter((e=>e.meta.key!==t.meta.key||(e.type===r?e.meta.fetchedAt!==t.meta.fetchedAt:e.meta.date>t.meta.date)))}function v(e){return function(s,o){switch(s||(s=E),o.type){case u:return o.entities.forEach((([e,t])=>{var i,n;null==(i=s.entities[e])||delete i[t],null==(n=s.entityMeta[e])||delete n[t]})),o.endpoints.forEach((e=>{delete s.endpoints[e],delete s.meta[e]})),s;case i:return f(s,o);case r:case n:return function(e,s,i){if(s.error)return y(e,s,s.payload);try{var n;let a;if(s.type===r){if(!s.endpoint.getOptimisticResponse)return e;try{a=s.endpoint.getOptimisticResponse.call(s.endpoint,i.snapshot(e,s.meta.fetchedAt),...s.meta.args)}catch(t){if(t.constructor===m)return e;throw t}}else a=s.payload;const{result:o,entities:c,indexes:l,entityMeta:h}=t.normalize(a,s.endpoint.schema,s.meta.args,e.entities,e.indexes,e.entityMeta,s.meta),d=Object.assign({},e.endpoints,{[s.meta.key]:o});try{if(s.endpoint.update){const e=s.endpoint.update(o,...s.meta.args);Object.keys(e).forEach((t=>{d[t]=e[t](d[t])}))}}catch(e){console.error(`The following error occured during Endpoint.update() for ${s.meta.key}`),console.error(e)}return{entities:c,indexes:l,endpoints:d,entityMeta:h,meta:Object.assign({},e.meta,{[s.meta.key]:{date:s.meta.date,expiresAt:s.meta.expiresAt,prevExpiresAt:null==(n=e.meta[s.meta.key])?void 0:n.expiresAt}}),optimistic:g(e,s),lastReset:e.lastReset}}catch(t){return"object"==typeof t&&(t.message=`Error processing ${s.meta.key}\n\nFull Schema: ${JSON.stringify(s.endpoint.schema,void 0,2)}\n\nError:\n${t.message}`,"payload"in s&&(t.payload=s.payload),t.status=400),y(e,s,t)}}(s,o,e);case h:case l:return function(e,t){const s=Object.assign({},e.endpoints),i=Object.assign({},e.meta),n=e=>{delete s[e];const t=Object.assign({},i[e],{expiresAt:0,invalidated:!0});delete t.error,i[e]=t};return t.type===l?n(t.meta.key):Object.keys(s).forEach((e=>{t.testKey(e)&&n(e)})),Object.assign({},e,{endpoints:s,meta:i})}(s,o);case d:return function(e,t){const s=Object.assign({},e.meta);return Object.keys(s).forEach((e=>{t.testKey(e)&&(s[e]=Object.assign({},s[e],{expiresAt:1}))})),Object.assign({},e,{meta:s})}(s,o);case a:return Object.assign({},E,{lastReset:o.date});default:return s}}}const E={entities:{},indexes:{},endpoints:{},meta:{},entityMeta:{},optimistic:[],lastReset:0};var b=Object.freeze({__proto__:null,MemoCache:t.MemoCache,INVALID:t.INVALID,RIC:s,initialState:E});function L(e,{args:t}){const s=e.key(...t);let n=0,r=0;const a=new Promise(((e,t)=>{[n,r]=[e,t]})),o={args:t,key:s,throttle:!e.sideEffect,resolve:n,reject:r,promise:a,createdAt:Date.now(),nm:!1};return{type:i,payload:()=>e(...t),meta:o,endpoint:e}}var O="undefined"!=typeof FormData?e=>e instanceof FormData?Object.fromEntries(e.entries()):e:e=>e;function I(e,{args:t,fetchedAt:s,response:i,error:r=!1}){var a,o;const c=r?null!=(a=e.errorExpiryLength)?a:1e3:null!=(o=e.dataExpiryLength)?o:6e4,l=Date.now(),h={args:t.map(O),fetchedAt:null!=s?s:l,date:l,expiresAt:l+c,key:e.key(...t)},d={type:n,payload:i,endpoint:e,meta:h};return r&&(d.error=!0),d}function S(e,t){return e.meta[t]}const w=e=>{throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},A=()=>E;class x{constructor({dispatch:e=w,getState:s=A,memo:i=new t.MemoCache}={}){this.fetch=(e,...s)=>{const i=L(e,{args:s});return this.dispatch(i),e.schema?i.meta.promise.then((i=>t.denormalize(i,e.schema,{},s))):i.meta.promise},this.fetchIfStale=(e,...s)=>{const{data:i,expiresAt:n,expiryStatus:r}=this.getResponse(e,...s,this.getState());return r!==t.ExpiryStatus.Invalid&&Date.now()<=n?i:this.fetch(e,...s)},this.invalidate=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:l,meta:{key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.invalidateAll=e=>this.dispatch({type:h,testKey:t=>e.testKey(t)}),this.expireAll=e=>this.dispatch({type:d,testKey:t=>e.testKey(t)}),this.resetEntireStore=()=>this.dispatch({type:a,date:Date.now()}),this.setResponse=(e,...t)=>{const s=t[t.length-1],i=I(e,{args:t.slice(0,t.length-1),response:s});return this.dispatch(i)},this.setError=(e,...t)=>{const s=t[t.length-1],i=I(e,{args:t.slice(0,t.length-1),response:s,error:!0});return this.dispatch(i)},this.resolve=(e,t)=>this.dispatch(I(e,t)),this.subscribe=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:o,endpoint:e,meta:{args:t,key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.unsubscribe=(e,...t)=>null!==t[0]?this.dispatch(function(e,{args:t}){return{type:c,endpoint:e,meta:{args:t,key:e.key(...t)}}}(e,{args:t})):Promise.resolve(),this.snapshot=(e,t)=>new j(this,e,t),this.getError=(e,...t)=>{if(null===t[0])return;const s=t[t.length-1],i=t.slice(0,t.length-1),n=e.key(...i),r=S(s,n);return void 0===s.endpoints[n]||"soft"!==(null==r?void 0:r.errorPolicy)?null==r?void 0:r.error:void 0},this.dispatch=e,this.getState=s,this.memo=i}getResponse(e,...s){const i=s[s.length-1],n=s.slice(0,s.length-1).map(O),r=1!==n.length||null!==n[0],a=r?e.key(...n):"",o=r?i.endpoints[a]:void 0,c=e.schema,l=S(i,a);let h=null==l?void 0:l.expiresAt;const d=void 0===o&&void 0!==c,u=d?this.memo.buildQueryKey(a,c,n,i.entities,i.indexes):o;if(!r)return{data:u,expiryStatus:t.ExpiryStatus.Valid,expiresAt:1/0};let p=!1;if(d)p=!t.validateQueryKey(u);else if(!c||!k(c))return{data:o,expiryStatus:null!=l&&l.invalidated?t.ExpiryStatus.Invalid:o&&!e.invalidIfStale?t.ExpiryStatus.Valid:t.ExpiryStatus.InvalidIfStale,expiresAt:h||0};const{data:f,paths:m}=this.memo.denormalize(u,c,i.entities,n);return!h&&p&&(h=1),this.getSchemaResponse(f,m,i.entityMeta,h,e.invalidIfStale||p,l)}get(e,...t){const s=t[t.length-1],i=t.slice(0,t.length-1).map(O),n=JSON.stringify(i);return this.memo.query(n,e,i,s.entities,s.indexes)}getSchemaResponse(e,s,i,n,r,a={}){const o="symbol"==typeof e;n||(n=function(e,t){let s=1/0;for(const{pk:n,key:r}of e){var i;const e=null==(i=t[r])||null==(i=i[n])?void 0:i.expiresAt;e<s&&(s=e)}return s}(s,i));return{data:e,expiryStatus:null!=a&&a.invalidated||o&&(null==a||!a.error)?t.ExpiryStatus.Invalid:o||r?t.ExpiryStatus.InvalidIfStale:t.ExpiryStatus.Valid,expiresAt:n}}}function k(e){if(t.isEntity(e))return!0;if(Array.isArray(e))return 0!==e.length&&k(e[0]);if(e&&("object"==typeof e||"function"==typeof e)){const t="schema"in e?e.schema:e;return"function"==typeof t?k(t):Object.values(t).some((e=>k(e)))}return!1}class j{constructor(e,t,s=0){this.state=void 0,this.controller=void 0,this.fetchedAt=void 0,this.abort=new m,this.getError=(e,...t)=>this.controller.getError(e,...t,this.state),this.state=t,this.controller=e,this.fetchedAt=s}getResponse(e,...t){return this.controller.getResponse(e,...t,this.state)}get(e,...t){return this.controller.get(e,...t,this.state)}}class T extends Error{constructor(){super("Aborted due to RESET"),this.name="ResetError"}}class R{isOnline(){return void 0===navigator.onLine||navigator.onLine}addOnlineListener(e){addEventListener("online",e)}removeOnlineListener(e){removeEventListener("online",e)}addOfflineListener(e){addEventListener("offline",e)}removeOfflineListener(e){removeEventListener("offline",e)}}class _{isOnline(){return!0}addOnlineListener(){}removeOnlineListener(){}addOfflineListener(){}removeOfflineListener(){}}let q;q="undefined"!=typeof navigator&&"function"==typeof addEventListener?R:_;var P=q;let D={};Object.hasOwn=Object.hasOwn||function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},Object.defineProperty(e,"ExpiryStatus",{enumerable:!0,get:function(){return t.ExpiryStatus}}),e.Controller=x,e.DefaultConnectionListener=P,e.DevToolsManager=class{constructor(e,t){this.started=!1,this.actions=[],this.maxBufferLength=100,this.devTools="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__.connect(Object.assign({},D,{config:e})),this.devTools?this.middleware=e=>{this.controller=e;const s=v(e);let i=e.getState();return n=>r=>{const a=n(r);return i=this.started?s(i,r):e.getState(),a.then((()=>{null!=t&&t(r)||this.handleAction(r,i.optimistic.reduce(s,i))})),a}}:this.middleware=()=>e=>t=>e(t)}handleAction(e,t){this.started?this.devTools.send(e,t,void 0,"RDC"):(this.actions.length>this.maxBufferLength&&(this.actions=this.actions.slice(this.maxBufferLength/2)),this.actions.push([e,t]))}init(e){this.devTools&&this.devTools.init(e)}cleanup(){}getMiddleware(){return this.middleware}},e.LogoutManager=class{constructor({handleLogout:e,shouldLogout:t}={}){e&&(this.handleLogout=e),t&&(this.shouldLogout=t),this.middleware=e=>t=>async s=>{await t(s),s.type===n&&s.error&&this.shouldLogout(s.payload)&&this.handleLogout(e)}}cleanup(){}getMiddleware(){return this.middleware}shouldLogout(e){return 401===e.status}handleLogout(e){e.resetEntireStore()}},e.NetworkManager=class{constructor(e=6e4,t=1e3){this.fetched=Object.create(null),this.resolvers={},this.rejectors={},this.fetchedAt={},this.controller=new x,this.dataExpiryLength=e,this.errorExpiryLength=t,this.middleware=e=>(this.controller=e,t=>s=>{switch(s.type){case i:return this.handleFetch(s),void 0!==s.endpoint.getOptimisticResponse&&s.endpoint.sideEffect?t(s):Promise.resolve();case n:return t(s).then((()=>{if(s.meta.key in this.fetched){var t;const i=null==(t=e.getState().meta[s.meta.key])?void 0:t.error;i?this.handleSet(I(s.endpoint,{args:s.meta.args,response:i,fetchedAt:s.meta.fetchedAt,error:!0})):this.handleSet(s)}}));case a:{const e=Object.assign({},this.rejectors);return this.clearAll(),t(s).then((()=>{for(const t in e)e[t](new T)}))}default:return t(s)}})}skipLogging(e){return e.type===i&&e.meta.key in this.fetched}init(){delete this.cleanupDate}cleanup(){this.cleanupDate=Date.now()}allSettled(){const e=Object.values(this.fetched);if(e.length)return Promise.allSettled(e)}clearAll(){for(const e in this.rejectors)this.clear(e)}clear(e){this.fetched[e].catch((()=>{})),delete this.resolvers[e],delete this.rejectors[e],delete this.fetched[e],delete this.fetchedAt[e]}getLastReset(){return this.cleanupDate?this.cleanupDate:this.controller.getState().lastReset}handleFetch(e){const t=e.payload,{key:s,throttle:i,resolve:n,reject:r,createdAt:a}=e.meta,o=()=>{let s=t();return i||(s=(e=>e.then((e=>(n(e),e))).catch((e=>{throw r(e),e})))(s)),s=s.then((t=>{let s=this.getLastReset();return a>=s&&this.controller.resolve(e.endpoint,{args:e.meta.args,response:t,fetchedAt:a}),t})).catch((t=>{const s=this.getLastReset();throw a>=s&&this.controller.resolve(e.endpoint,{args:e.meta.args,response:t,fetchedAt:a,error:!0}),t})),s};return i?this.throttle(s,o,a).then((e=>n(e))).catch((e=>r(e))):o().catch((()=>{}))}handleSet(e){if(e.meta.key in this.fetched){let t;t=e.error?this.rejectors[e.meta.key]:this.resolvers[e.meta.key],t(e.payload),this.clear(e.meta.key)}}getMiddleware(){return this.middleware}throttle(e,t,i){const n=this.getLastReset();return e in this.fetched&&this.fetchedAt[e]>n||(this.fetched[e]=new Promise(((t,s)=>{this.resolvers[e]=t,this.rejectors[e]=s})),this.fetchedAt[e]=i,s((()=>{t().catch((()=>null))}),{timeout:500})),this.fetched[e]}},e.PollingSubscription=class{constructor(e,t,s){if(this.frequencyHistogram=new Map,this.offlineListener=()=>{this.cleanup(),this.connectionListener.addOnlineListener(this.onlineListener)},this.onlineListener=()=>{this.connectionListener.removeOnlineListener(this.onlineListener);const e=Date.now();this.startId=setTimeout((()=>{this.startId&&(delete this.startId,this.update(),this.run())}),Math.max(0,this.lastFetchTime()-e+this.frequency)),this.connectionListener.addOfflineListener(this.offlineListener)},void 0===e.endpoint.pollFrequency)throw new Error("frequency needed for polling subscription");this.endpoint=e.endpoint,this.frequency=e.endpoint.pollFrequency,this.args=e.meta.args,this.key=e.meta.key,this.frequencyHistogram.set(this.frequency,1),this.controller=t,this.connectionListener=s||new P,this.connectionListener.isOnline()?this.onlineListener():this.offlineListener()}add(e){void 0!==e&&(this.frequencyHistogram.has(e)?this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)+1):(this.frequencyHistogram.set(e,1),e<this.frequency&&(this.frequency=e,this.run())))}remove(e){if(void 0===e)return!1;if(this.frequencyHistogram.has(e)&&(this.frequencyHistogram.set(e,this.frequencyHistogram.get(e)-1),this.frequencyHistogram.get(e)<1)){if(this.frequencyHistogram.delete(e),0===this.frequencyHistogram.size)return this.cleanup(),!0;e<=this.frequency&&(this.frequency=Math.min(...this.frequencyHistogram.keys()),this.run())}return!1}cleanup(){this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId),this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.startId&&(clearTimeout(this.startId),delete this.startId),this.connectionListener.removeOnlineListener(this.onlineListener),this.connectionListener.removeOfflineListener(this.offlineListener)}update(){const e=this.endpoint,t=function(...t){return e.call(this,...t)};Object.assign(t,this.endpoint),t.dataExpiryLength=this.frequency/2,t.errorExpiryLength=this.frequency/10,t.errorPolicy=()=>"soft",t.key=()=>this.key,this.controller.fetch(t,...this.args).catch((()=>null))}run(){this.startId||(this.intervalId&&(this.lastIntervalId=this.intervalId),this.intervalId=setInterval((()=>{this.lastIntervalId&&(clearInterval(this.lastIntervalId),delete this.lastIntervalId),this.intervalId&&this.update()}),this.frequency))}lastFetchTime(){var e,t;return null!=(e=null==(t=this.controller.getState().meta[this.key])?void 0:t.date)?e:0}},e.ResetError=T,e.SubscriptionManager=class{constructor(e){this.subscriptions={},this.controller=new x,this.Subscription=e,this.middleware=e=>(this.controller=e,e=>t=>{switch(t.type){case o:try{this.handleSubscribe(t)}catch(e){console.error(e)}return Promise.resolve();case c:return this.handleUnsubscribe(t),Promise.resolve();default:return e(t)}})}cleanup(){for(const e in this.subscriptions)this.subscriptions[e].cleanup()}handleSubscribe(e){const t=e.meta.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].add(s)}else this.subscriptions[t]=new this.Subscription(e,this.controller)}handleUnsubscribe(e){const t=e.meta.key;if(t in this.subscriptions){const s=e.endpoint.pollFrequency;this.subscriptions[t].remove(s)&&delete this.subscriptions[t]}}getMiddleware(){return this.middleware}},e.__INTERNAL__=b,e.actionTypes=p,e.applyManager=function(e,t){return e.map((e=>{const s=e.getMiddleware();return({dispatch:e,getState:i})=>(t.dispatch=e,t.getState=i,s(t))}))},e.createFetch=L,e.createReducer=v,e.createSet=I,e.initialState=E,Object.defineProperty(e,"__esModule",{value:!0})}));
|
package/legacy/actionTypes.js
CHANGED
|
@@ -8,4 +8,4 @@ export const INVALIDATE_TYPE = 'rdc/invalidate';
|
|
|
8
8
|
export const INVALIDATEALL_TYPE = 'rdc/invalidateall';
|
|
9
9
|
export const EXPIREALL_TYPE = 'rdc/expireall';
|
|
10
10
|
export const GC_TYPE = 'rdc/gc';
|
|
11
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGRVRDSF9UWVBFIiwiU0VUX1RZUEUiLCJPUFRJTUlTVElDX1RZUEUiLCJSRVNFVF9UWVBFIiwiU1VCU0NSSUJFX1RZUEUiLCJVTlNVQlNDUklCRV9UWVBFIiwiSU5WQUxJREFURV9UWVBFIiwiSU5WQUxJREFURUFMTF9UWVBFIiwiRVhQSVJFQUxMX1RZUEUiLCJHQ19UWVBFIl0sInNvdXJjZXMiOlsiLi4vc3JjL2FjdGlvblR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBGRVRDSF9UWVBFID0gJ3JkYy9mZXRjaCcgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgU0VUX1RZUEUgPSAncmRjL3NldCcgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgT1BUSU1JU1RJQ19UWVBFID0gJ3JkYy9vcHRpbWlzdGljJyBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBSRVNFVF9UWVBFID0gJ3JkYy9yZXNldCcgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgU1VCU0NSSUJFX1RZUEUgPSAncmRjL3N1YnNjcmliZScgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgVU5TVUJTQ1JJQkVfVFlQRSA9ICdyZGMvdW5zdWJzY3JpYmUnIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IElOVkFMSURBVEVfVFlQRSA9ICdyZGMvaW52YWxpZGF0ZScgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgSU5WQUxJREFURUFMTF9UWVBFID0gJ3JkYy9pbnZhbGlkYXRlYWxsJyBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBFWFBJUkVBTExfVFlQRSA9ICdyZGMvZXhwaXJlYWxsJyBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBHQ19UWVBFID0gJ3JkYy9nYycgYXMgY29uc3Q7XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTUEsVUFBVSxHQUFHLFdBQW9CO0FBQzlDLE9BQU8sTUFBTUMsUUFBUSxHQUFHLFNBQWtCO0FBQzFDLE9BQU8sTUFBTUMsZUFBZSxHQUFHLGdCQUF5QjtBQUN4RCxPQUFPLE1BQU1DLFVBQVUsR0FBRyxXQUFvQjtBQUM5QyxPQUFPLE1BQU1DLGNBQWMsR0FBRyxlQUF3QjtBQUN0RCxPQUFPLE1BQU1DLGdCQUFnQixHQUFHLGlCQUEwQjtBQUMxRCxPQUFPLE1BQU1DLGVBQWUsR0FBRyxnQkFBeUI7QUFDeEQsT0FBTyxNQUFNQyxrQkFBa0IsR0FBRyxtQkFBNEI7QUFDOUQsT0FBTyxNQUFNQyxjQUFjLEdBQUcsZUFBd0I7QUFDdEQsT0FBTyxNQUFNQyxPQUFPLEdBQUcsUUFBaUIiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/legacy/actions.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBFbmRwb2ludEludGVyZmFjZSxcbiAgUmVzb2x2ZVR5cGUsXG4gIFVua25vd25FcnJvcixcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB0eXBlIHtcbiAgU0VUX1RZUEUsXG4gIFJFU0VUX1RZUEUsXG4gIEZFVENIX1RZUEUsXG4gIFNVQlNDUklCRV9UWVBFLFxuICBVTlNVQlNDUklCRV9UWVBFLFxuICBJTlZBTElEQVRFX1RZUEUsXG4gIEdDX1RZUEUsXG4gIE9QVElNSVNUSUNfVFlQRSxcbiAgSU5WQUxJREFURUFMTF9UWVBFLFxuICBFWFBJUkVBTExfVFlQRSxcbn0gZnJvbSAnLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL2NvbnRyb2xsZXIvdHlwZXMuanMnO1xuXG50eXBlIEVuZHBvaW50QW5kVXBkYXRlPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4gPSBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbn07XG50eXBlIEVuZHBvaW50RGVmYXVsdCA9IEVuZHBvaW50SW50ZXJmYWNlICYge1xuICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEVuZHBvaW50SW50ZXJmYWNlPjtcbn07XG5cbi8qIFNFVCAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXRNZXRhIHtcbiAgYXJnczogcmVhZG9ubHkgYW55W107XG4gIGtleTogc3RyaW5nO1xuICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgZGF0ZTogbnVtYmVyO1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2V0QWN0aW9uU3VjY2VzczxcbiAgRSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0LFxuPiB7XG4gIHR5cGU6IHR5cGVvZiBTRVRfVFlQRTtcbiAgZW5kcG9pbnQ6IEU7XG4gIG1ldGE6IFNldE1ldGE7XG4gIHBheWxvYWQ6IFJlc29sdmVUeXBlPEU+O1xuICBlcnJvcj86IGZhbHNlO1xufVxuZXhwb3J0IGludGVyZmFjZSBTZXRBY3Rpb25FcnJvcjxcbiAgRSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0LFxuPiB7XG4gIHR5cGU6IHR5cGVvZiBTRVRfVFlQRTtcbiAgZW5kcG9pbnQ6IEU7XG4gIG1ldGE6IFNldE1ldGE7XG4gIHBheWxvYWQ6IFVua25vd25FcnJvcjtcbiAgZXJyb3I6IHRydWU7XG59XG5leHBvcnQgdHlwZSBTZXRBY3Rpb248RSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0PiA9XG4gIHwgU2V0QWN0aW9uU3VjY2VzczxFPlxuICB8IFNldEFjdGlvbkVycm9yPEU+O1xuXG4vKiBGRVRDSCAqL1xuZXhwb3J0IGludGVyZmFjZSBGZXRjaE1ldGEge1xuICBhcmdzOiByZWFkb25seSBhbnlbXTtcbiAga2V5OiBzdHJpbmc7XG4gIHRocm90dGxlOiBib29sZWFuO1xuICByZXNvbHZlOiAodmFsdWU/OiBhbnkgfCBQcm9taXNlTGlrZTxhbnk+KSA9PiB2b2lkO1xuICByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG4gIHByb21pc2U6IFByb21pc2VMaWtlPGFueT47XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xuICAvLyBpbmRpY2F0ZXMgd2hldGhlciBuZXR3b3JrIG1hbmFnZXIgcHJvY2Vzc2VkIGl0XG4gIG5tPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZXRjaEFjdGlvbjxFIGV4dGVuZHMgRW5kcG9pbnRBbmRVcGRhdGU8RT4gPSBFbmRwb2ludERlZmF1bHQ+IHtcbiAgdHlwZTogdHlwZW9mIEZFVENIX1RZUEU7XG4gIGVuZHBvaW50OiBFO1xuICBtZXRhOiBGZXRjaE1ldGE7XG4gIHBheWxvYWQ6ICgpID0+IFJldHVyblR5cGU8RT47XG59XG5cbi8qIE9QVElNSVNUSUMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW1pc3RpY0FjdGlvbjxcbiAgRSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0LFxuPiB7XG4gIHR5cGU6IHR5cGVvZiBPUFRJTUlTVElDX1RZUEU7XG4gIGVuZHBvaW50OiBFO1xuICBtZXRhOiBTZXRNZXRhO1xuICBlcnJvcj86IGZhbHNlO1xufVxuXG4vKiBTVUJTQ1JJQkUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaWJlQWN0aW9uPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRBbmRVcGRhdGU8RT4gPSBFbmRwb2ludERlZmF1bHQsXG4+IHtcbiAgdHlwZTogdHlwZW9mIFNVQlNDUklCRV9UWVBFO1xuICBlbmRwb2ludDogRTtcbiAgbWV0YToge1xuICAgIGFyZ3M6IHJlYWRvbmx5IGFueVtdO1xuICAgIGtleTogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuc3Vic2NyaWJlQWN0aW9uPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRBbmRVcGRhdGU8RT4gPSBFbmRwb2ludERlZmF1bHQsXG4+
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBFbmRwb2ludEludGVyZmFjZSxcbiAgUmVzb2x2ZVR5cGUsXG4gIFVua25vd25FcnJvcixcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB0eXBlIHtcbiAgU0VUX1RZUEUsXG4gIFJFU0VUX1RZUEUsXG4gIEZFVENIX1RZUEUsXG4gIFNVQlNDUklCRV9UWVBFLFxuICBVTlNVQlNDUklCRV9UWVBFLFxuICBJTlZBTElEQVRFX1RZUEUsXG4gIEdDX1RZUEUsXG4gIE9QVElNSVNUSUNfVFlQRSxcbiAgSU5WQUxJREFURUFMTF9UWVBFLFxuICBFWFBJUkVBTExfVFlQRSxcbn0gZnJvbSAnLi9hY3Rpb25UeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL2NvbnRyb2xsZXIvdHlwZXMuanMnO1xuXG50eXBlIEVuZHBvaW50QW5kVXBkYXRlPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4gPSBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbn07XG50eXBlIEVuZHBvaW50RGVmYXVsdCA9IEVuZHBvaW50SW50ZXJmYWNlICYge1xuICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEVuZHBvaW50SW50ZXJmYWNlPjtcbn07XG5cbi8qIFNFVCAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXRNZXRhIHtcbiAgYXJnczogcmVhZG9ubHkgYW55W107XG4gIGtleTogc3RyaW5nO1xuICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgZGF0ZTogbnVtYmVyO1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2V0QWN0aW9uU3VjY2VzczxcbiAgRSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0LFxuPiB7XG4gIHR5cGU6IHR5cGVvZiBTRVRfVFlQRTtcbiAgZW5kcG9pbnQ6IEU7XG4gIG1ldGE6IFNldE1ldGE7XG4gIHBheWxvYWQ6IFJlc29sdmVUeXBlPEU+O1xuICBlcnJvcj86IGZhbHNlO1xufVxuZXhwb3J0IGludGVyZmFjZSBTZXRBY3Rpb25FcnJvcjxcbiAgRSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0LFxuPiB7XG4gIHR5cGU6IHR5cGVvZiBTRVRfVFlQRTtcbiAgZW5kcG9pbnQ6IEU7XG4gIG1ldGE6IFNldE1ldGE7XG4gIHBheWxvYWQ6IFVua25vd25FcnJvcjtcbiAgZXJyb3I6IHRydWU7XG59XG5leHBvcnQgdHlwZSBTZXRBY3Rpb248RSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0PiA9XG4gIHwgU2V0QWN0aW9uU3VjY2VzczxFPlxuICB8IFNldEFjdGlvbkVycm9yPEU+O1xuXG4vKiBGRVRDSCAqL1xuZXhwb3J0IGludGVyZmFjZSBGZXRjaE1ldGEge1xuICBhcmdzOiByZWFkb25seSBhbnlbXTtcbiAga2V5OiBzdHJpbmc7XG4gIHRocm90dGxlOiBib29sZWFuO1xuICByZXNvbHZlOiAodmFsdWU/OiBhbnkgfCBQcm9taXNlTGlrZTxhbnk+KSA9PiB2b2lkO1xuICByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG4gIHByb21pc2U6IFByb21pc2VMaWtlPGFueT47XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xuICAvLyBpbmRpY2F0ZXMgd2hldGhlciBuZXR3b3JrIG1hbmFnZXIgcHJvY2Vzc2VkIGl0XG4gIG5tPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZXRjaEFjdGlvbjxFIGV4dGVuZHMgRW5kcG9pbnRBbmRVcGRhdGU8RT4gPSBFbmRwb2ludERlZmF1bHQ+IHtcbiAgdHlwZTogdHlwZW9mIEZFVENIX1RZUEU7XG4gIGVuZHBvaW50OiBFO1xuICBtZXRhOiBGZXRjaE1ldGE7XG4gIHBheWxvYWQ6ICgpID0+IFJldHVyblR5cGU8RT47XG59XG5cbi8qIE9QVElNSVNUSUMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW1pc3RpY0FjdGlvbjxcbiAgRSBleHRlbmRzIEVuZHBvaW50QW5kVXBkYXRlPEU+ID0gRW5kcG9pbnREZWZhdWx0LFxuPiB7XG4gIHR5cGU6IHR5cGVvZiBPUFRJTUlTVElDX1RZUEU7XG4gIGVuZHBvaW50OiBFO1xuICBtZXRhOiBTZXRNZXRhO1xuICBlcnJvcj86IGZhbHNlO1xufVxuXG4vKiBTVUJTQ1JJQkUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaWJlQWN0aW9uPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRBbmRVcGRhdGU8RT4gPSBFbmRwb2ludERlZmF1bHQsXG4+IHtcbiAgdHlwZTogdHlwZW9mIFNVQlNDUklCRV9UWVBFO1xuICBlbmRwb2ludDogRTtcbiAgbWV0YToge1xuICAgIGFyZ3M6IHJlYWRvbmx5IGFueVtdO1xuICAgIGtleTogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuc3Vic2NyaWJlQWN0aW9uPFxuICBFIGV4dGVuZHMgRW5kcG9pbnRBbmRVcGRhdGU8RT4gPSBFbmRwb2ludERlZmF1bHQsXG4+IHtcbiAgdHlwZTogdHlwZW9mIFVOU1VCU0NSSUJFX1RZUEU7XG4gIGVuZHBvaW50OiBFO1xuICBtZXRhOiB7XG4gICAgYXJnczogcmVhZG9ubHkgYW55W107XG4gICAga2V5OiBzdHJpbmc7XG4gIH07XG59XG5cbi8qIEVYUElSWSAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBpcmVBbGxBY3Rpb24ge1xuICB0eXBlOiB0eXBlb2YgRVhQSVJFQUxMX1RZUEU7XG4gIHRlc3RLZXk6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbjtcbn1cblxuLyogSU5WQUxJREFURSAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnZhbGlkYXRlQWxsQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIElOVkFMSURBVEVBTExfVFlQRTtcbiAgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludmFsaWRhdGVBY3Rpb24ge1xuICB0eXBlOiB0eXBlb2YgSU5WQUxJREFURV9UWVBFO1xuICBtZXRhOiB7XG4gICAga2V5OiBzdHJpbmc7XG4gIH07XG59XG5cbi8qIFJFU0VUICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc2V0QWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIFJFU0VUX1RZUEU7XG4gIGRhdGU6IG51bWJlcjtcbn1cblxuLyogR0MgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR0NBY3Rpb24ge1xuICB0eXBlOiB0eXBlb2YgR0NfVFlQRTtcbiAgZW50aXRpZXM6IFtzdHJpbmcsIHN0cmluZ11bXTtcbiAgZW5kcG9pbnRzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uVHlwZXMgPVxuICB8IEZldGNoQWN0aW9uXG4gIHwgT3B0aW1pc3RpY0FjdGlvblxuICB8IFNldEFjdGlvblxuICB8IFN1YnNjcmliZUFjdGlvblxuICB8IFVuc3Vic2NyaWJlQWN0aW9uXG4gIHwgSW52YWxpZGF0ZUFjdGlvblxuICB8IEludmFsaWRhdGVBbGxBY3Rpb25cbiAgfCBFeHBpcmVBbGxBY3Rpb25cbiAgfCBSZXNldEFjdGlvblxuICB8IEdDQWN0aW9uO1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export default class AbortOptimistic extends Error {}
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBYm9ydE9wdGltaXN0aWMiLCJFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL0Fib3J0T3B0aW1pc3RpYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBBYm9ydE9wdGltaXN0aWMgZXh0ZW5kcyBFcnJvciB7fVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLE1BQU1BLGVBQWUsU0FBU0MsS0FBSyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|