@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,45 @@
|
|
|
1
|
+
import type { Schema } from '@data-client/normalizr';
|
|
2
|
+
import ConnectionListener from './ConnectionListener.js';
|
|
3
|
+
import { Subscription, SubscriptionInit } from './SubscriptionManager.js';
|
|
4
|
+
import type { State, Dispatch } from '../types.js';
|
|
5
|
+
/**
|
|
6
|
+
* PollingSubscription keeps a given resource updated by
|
|
7
|
+
* dispatching a fetch at a rate equal to the minimum update
|
|
8
|
+
* interval requested.
|
|
9
|
+
*
|
|
10
|
+
* @see https://resthooks.io/docs/api/PollingSubscription
|
|
11
|
+
*/
|
|
12
|
+
export default class PollingSubscription implements Subscription {
|
|
13
|
+
protected readonly schema: Schema | undefined;
|
|
14
|
+
protected readonly fetch: () => Promise<any>;
|
|
15
|
+
protected readonly key: string;
|
|
16
|
+
protected frequency: number;
|
|
17
|
+
protected frequencyHistogram: Map<number, number>;
|
|
18
|
+
protected dispatch: Dispatch<any>;
|
|
19
|
+
protected getState: () => State<unknown>;
|
|
20
|
+
protected intervalId?: ReturnType<typeof setInterval>;
|
|
21
|
+
protected lastIntervalId?: ReturnType<typeof setInterval>;
|
|
22
|
+
protected startId?: ReturnType<typeof setTimeout>;
|
|
23
|
+
private connectionListener;
|
|
24
|
+
constructor({ key, schema, fetch, frequency, getState }: SubscriptionInit, dispatch: Dispatch<any>, connectionListener?: ConnectionListener);
|
|
25
|
+
/** Subscribe to a frequency */
|
|
26
|
+
add(frequency?: number): void;
|
|
27
|
+
/** Unsubscribe from a frequency */
|
|
28
|
+
remove(frequency?: number): boolean;
|
|
29
|
+
/** Cleanup means clearing out background interval. */
|
|
30
|
+
cleanup(): void;
|
|
31
|
+
/** Trigger request for latest resource */
|
|
32
|
+
protected update(): void;
|
|
33
|
+
/** What happens when browser goes offline */
|
|
34
|
+
protected offlineListener: () => void;
|
|
35
|
+
/** What happens when browser comes online */
|
|
36
|
+
protected onlineListener: () => void;
|
|
37
|
+
/** Run polling process with current frequency
|
|
38
|
+
*
|
|
39
|
+
* Will clean up old poll interval on next run
|
|
40
|
+
*/
|
|
41
|
+
protected run(): void;
|
|
42
|
+
/** Last fetch time */
|
|
43
|
+
protected lastFetchTime(): number;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=PollingSubscription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PollingSubscription.d.ts","sourceRoot":"","sources":["../../src/manager/PollingSubscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,YAAY;IAC9D,mBAA2B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACtD,mBAA2B,KAAK,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,mBAA2B,GAAG,EAAE,MAAM,CAAC;IACvC,UAAkB,SAAS,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAC9D,UAAkB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1C,UAAkB,QAAQ,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,UAAkB,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IAC9D,UAAkB,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IAClE,UAAkB,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAC1D,QAAgB,kBAAkB,CAAqB;gBAGrD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAC7D,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EACvB,kBAAkB,CAAC,EAAE,kBAAkB;IAsBzC,+BAA+B;IAC/B,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM;IAkBtB,mCAAmC;IACnC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM;IAgCzB,sDAAsD;IACtD,OAAO;IAiBP,0CAA0C;IAC1C,SAAS,CAAC,MAAM;IAahB,6CAA6C;IAC7C,SAAS,CAAC,eAAe,aAIvB;IAEF,6CAA6C;IAC7C,SAAS,CAAC,cAAc,aAetB;IAEF;;;OAGG;IACH,SAAS,CAAC,GAAG;IAmBb,sBAAsB;IACtB,SAAS,CAAC,aAAa;CAGxB"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import DefaultConnectionListener from './DefaultConnectionListener.js';
|
|
2
|
+
import createFetch from '../controller/createFetch.js';
|
|
3
|
+
/**
|
|
4
|
+
* PollingSubscription keeps a given resource updated by
|
|
5
|
+
* dispatching a fetch at a rate equal to the minimum update
|
|
6
|
+
* interval requested.
|
|
7
|
+
*
|
|
8
|
+
* @see https://resthooks.io/docs/api/PollingSubscription
|
|
9
|
+
*/
|
|
10
|
+
export default class PollingSubscription {
|
|
11
|
+
constructor({
|
|
12
|
+
key,
|
|
13
|
+
schema,
|
|
14
|
+
fetch,
|
|
15
|
+
frequency,
|
|
16
|
+
getState
|
|
17
|
+
}, dispatch, connectionListener) {
|
|
18
|
+
this.frequencyHistogram = new Map();
|
|
19
|
+
/** What happens when browser goes offline */
|
|
20
|
+
this.offlineListener = () => {
|
|
21
|
+
// this clears existing listeners, so no need to clear offline listener
|
|
22
|
+
this.cleanup();
|
|
23
|
+
this.connectionListener.addOnlineListener(this.onlineListener);
|
|
24
|
+
};
|
|
25
|
+
/** What happens when browser comes online */
|
|
26
|
+
this.onlineListener = () => {
|
|
27
|
+
this.connectionListener.removeOnlineListener(this.onlineListener);
|
|
28
|
+
const now = Date.now();
|
|
29
|
+
this.startId = setTimeout(() => {
|
|
30
|
+
if (this.startId) {
|
|
31
|
+
delete this.startId;
|
|
32
|
+
this.update();
|
|
33
|
+
this.run();
|
|
34
|
+
} else if (process.env.NODE_ENV !== 'production') {
|
|
35
|
+
console.warn(`Poll setTimeout for ${this.key} still running, but timeoutId deleted`);
|
|
36
|
+
}
|
|
37
|
+
}, Math.max(0, this.lastFetchTime() - now + this.frequency));
|
|
38
|
+
this.connectionListener.addOfflineListener(this.offlineListener);
|
|
39
|
+
};
|
|
40
|
+
if (frequency === undefined) throw new Error('frequency needed for polling subscription');
|
|
41
|
+
this.schema = schema;
|
|
42
|
+
this.fetch = fetch;
|
|
43
|
+
this.frequency = frequency;
|
|
44
|
+
this.key = key;
|
|
45
|
+
this.frequencyHistogram.set(this.frequency, 1);
|
|
46
|
+
this.dispatch = dispatch;
|
|
47
|
+
this.getState = getState;
|
|
48
|
+
this.connectionListener = connectionListener || new DefaultConnectionListener();
|
|
49
|
+
|
|
50
|
+
// Kickstart running since this is initialized after the online notif is sent
|
|
51
|
+
if (this.connectionListener.isOnline()) {
|
|
52
|
+
this.onlineListener();
|
|
53
|
+
} else {
|
|
54
|
+
this.offlineListener();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Subscribe to a frequency */
|
|
59
|
+
add(frequency) {
|
|
60
|
+
if (frequency === undefined) return;
|
|
61
|
+
if (this.frequencyHistogram.has(frequency)) {
|
|
62
|
+
this.frequencyHistogram.set(frequency, this.frequencyHistogram.get(frequency) + 1);
|
|
63
|
+
} else {
|
|
64
|
+
this.frequencyHistogram.set(frequency, 1);
|
|
65
|
+
|
|
66
|
+
// new min so restart service
|
|
67
|
+
if (frequency < this.frequency) {
|
|
68
|
+
this.frequency = frequency;
|
|
69
|
+
this.run();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Unsubscribe from a frequency */
|
|
75
|
+
remove(frequency) {
|
|
76
|
+
if (frequency === undefined) return false;
|
|
77
|
+
if (this.frequencyHistogram.has(frequency)) {
|
|
78
|
+
this.frequencyHistogram.set(frequency, this.frequencyHistogram.get(frequency) - 1);
|
|
79
|
+
if (this.frequencyHistogram.get(frequency) < 1) {
|
|
80
|
+
this.frequencyHistogram.delete(frequency);
|
|
81
|
+
|
|
82
|
+
// nothing subscribed to this anymore...it is invalid
|
|
83
|
+
if (this.frequencyHistogram.size === 0) {
|
|
84
|
+
this.cleanup();
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// this was the min, so find the next size
|
|
89
|
+
if (frequency <= this.frequency) {
|
|
90
|
+
this.frequency = Math.min(...this.frequencyHistogram.keys());
|
|
91
|
+
this.run();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
} /* istanbul ignore next */else if (process.env.NODE_ENV !== 'production') {
|
|
95
|
+
console.error(`Mismatched remove: ${frequency} is not subscribed for ${this.key}`);
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** Cleanup means clearing out background interval. */
|
|
101
|
+
cleanup() {
|
|
102
|
+
if (this.intervalId) {
|
|
103
|
+
clearInterval(this.intervalId);
|
|
104
|
+
delete this.intervalId;
|
|
105
|
+
}
|
|
106
|
+
if (this.lastIntervalId) {
|
|
107
|
+
clearInterval(this.lastIntervalId);
|
|
108
|
+
delete this.lastIntervalId;
|
|
109
|
+
}
|
|
110
|
+
if (this.startId) {
|
|
111
|
+
clearTimeout(this.startId);
|
|
112
|
+
delete this.startId;
|
|
113
|
+
}
|
|
114
|
+
this.connectionListener.removeOnlineListener(this.onlineListener);
|
|
115
|
+
this.connectionListener.removeOfflineListener(this.offlineListener);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** Trigger request for latest resource */
|
|
119
|
+
update() {
|
|
120
|
+
const endpoint = () => this.fetch();
|
|
121
|
+
endpoint.schema = this.schema;
|
|
122
|
+
endpoint.key = () => this.key;
|
|
123
|
+
endpoint.dataExpiryLength = this.frequency / 2;
|
|
124
|
+
endpoint.errorExpiryLength = this.frequency / 10;
|
|
125
|
+
endpoint.errorPolicy = () => 'soft';
|
|
126
|
+
const action = createFetch(endpoint, {
|
|
127
|
+
args: []
|
|
128
|
+
});
|
|
129
|
+
// stop any errors here from bubbling
|
|
130
|
+
action.meta.promise.catch(e => null);
|
|
131
|
+
this.dispatch(action);
|
|
132
|
+
}
|
|
133
|
+
/** Run polling process with current frequency
|
|
134
|
+
*
|
|
135
|
+
* Will clean up old poll interval on next run
|
|
136
|
+
*/
|
|
137
|
+
run() {
|
|
138
|
+
if (this.startId) return;
|
|
139
|
+
if (this.intervalId) this.lastIntervalId = this.intervalId;
|
|
140
|
+
this.intervalId = setInterval(() => {
|
|
141
|
+
// since we don't know how long into the last poll it was before resetting
|
|
142
|
+
// we wait til the next fetch to clear old intervals
|
|
143
|
+
if (this.lastIntervalId) {
|
|
144
|
+
clearInterval(this.lastIntervalId);
|
|
145
|
+
delete this.lastIntervalId;
|
|
146
|
+
}
|
|
147
|
+
if (this.intervalId) this.update();else if (process.env.NODE_ENV !== 'production') {
|
|
148
|
+
console.warn(`Poll intervalId for ${this.key} still running, but intervalId deleted`);
|
|
149
|
+
}
|
|
150
|
+
}, this.frequency);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Last fetch time */
|
|
154
|
+
lastFetchTime() {
|
|
155
|
+
var _this$getState$meta$t, _this$getState$meta$t2;
|
|
156
|
+
return (_this$getState$meta$t = (_this$getState$meta$t2 = this.getState().meta[this.key]) == null ? void 0 : _this$getState$meta$t2.date) != null ? _this$getState$meta$t : 0;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWZhdWx0Q29ubmVjdGlvbkxpc3RlbmVyIiwiY3JlYXRlRmV0Y2giLCJQb2xsaW5nU3Vic2NyaXB0aW9uIiwiY29uc3RydWN0b3IiLCJrZXkiLCJzY2hlbWEiLCJmZXRjaCIsImZyZXF1ZW5jeSIsImdldFN0YXRlIiwiZGlzcGF0Y2giLCJjb25uZWN0aW9uTGlzdGVuZXIiLCJmcmVxdWVuY3lIaXN0b2dyYW0iLCJNYXAiLCJvZmZsaW5lTGlzdGVuZXIiLCJjbGVhbnVwIiwiYWRkT25saW5lTGlzdGVuZXIiLCJvbmxpbmVMaXN0ZW5lciIsInJlbW92ZU9ubGluZUxpc3RlbmVyIiwibm93IiwiRGF0ZSIsInN0YXJ0SWQiLCJzZXRUaW1lb3V0IiwidXBkYXRlIiwicnVuIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uc29sZSIsIndhcm4iLCJNYXRoIiwibWF4IiwibGFzdEZldGNoVGltZSIsImFkZE9mZmxpbmVMaXN0ZW5lciIsInVuZGVmaW5lZCIsIkVycm9yIiwic2V0IiwiaXNPbmxpbmUiLCJhZGQiLCJoYXMiLCJnZXQiLCJyZW1vdmUiLCJkZWxldGUiLCJzaXplIiwibWluIiwia2V5cyIsImVycm9yIiwiaW50ZXJ2YWxJZCIsImNsZWFySW50ZXJ2YWwiLCJsYXN0SW50ZXJ2YWxJZCIsImNsZWFyVGltZW91dCIsInJlbW92ZU9mZmxpbmVMaXN0ZW5lciIsImVuZHBvaW50IiwiZGF0YUV4cGlyeUxlbmd0aCIsImVycm9yRXhwaXJ5TGVuZ3RoIiwiZXJyb3JQb2xpY3kiLCJhY3Rpb24iLCJhcmdzIiwibWV0YSIsInByb21pc2UiLCJjYXRjaCIsImUiLCJzZXRJbnRlcnZhbCIsIl90aGlzJGdldFN0YXRlJG1ldGEkdCIsIl90aGlzJGdldFN0YXRlJG1ldGEkdDIiLCJkYXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hbmFnZXIvUG9sbGluZ1N1YnNjcmlwdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVuZHBvaW50SW50ZXJmYWNlLCBTY2hlbWEgfSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcblxuaW1wb3J0IENvbm5lY3Rpb25MaXN0ZW5lciBmcm9tICcuL0Nvbm5lY3Rpb25MaXN0ZW5lci5qcyc7XG5pbXBvcnQgRGVmYXVsdENvbm5lY3Rpb25MaXN0ZW5lciBmcm9tICcuL0RlZmF1bHRDb25uZWN0aW9uTGlzdGVuZXIuanMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJzY3JpcHRpb25Jbml0IH0gZnJvbSAnLi9TdWJzY3JpcHRpb25NYW5hZ2VyLmpzJztcbmltcG9ydCBjcmVhdGVGZXRjaCBmcm9tICcuLi9jb250cm9sbGVyL2NyZWF0ZUZldGNoLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhdGUsIERpc3BhdGNoIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKipcbiAqIFBvbGxpbmdTdWJzY3JpcHRpb24ga2VlcHMgYSBnaXZlbiByZXNvdXJjZSB1cGRhdGVkIGJ5XG4gKiBkaXNwYXRjaGluZyBhIGZldGNoIGF0IGEgcmF0ZSBlcXVhbCB0byB0aGUgbWluaW11bSB1cGRhdGVcbiAqIGludGVydmFsIHJlcXVlc3RlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVzdGhvb2tzLmlvL2RvY3MvYXBpL1BvbGxpbmdTdWJzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9sbGluZ1N1YnNjcmlwdGlvbiBpbXBsZW1lbnRzIFN1YnNjcmlwdGlvbiB7XG4gIHByb3RlY3RlZCBkZWNsYXJlIHJlYWRvbmx5IHNjaGVtYTogU2NoZW1hIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgZGVjbGFyZSByZWFkb25seSBmZXRjaDogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICBwcm90ZWN0ZWQgZGVjbGFyZSByZWFkb25seSBrZXk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGRlY2xhcmUgZnJlcXVlbmN5OiBudW1iZXI7XG4gIHByb3RlY3RlZCBmcmVxdWVuY3lIaXN0b2dyYW06IE1hcDxudW1iZXIsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gIHByb3RlY3RlZCBkZWNsYXJlIGRpc3BhdGNoOiBEaXNwYXRjaDxhbnk+O1xuICBwcm90ZWN0ZWQgZGVjbGFyZSBnZXRTdGF0ZTogKCkgPT4gU3RhdGU8dW5rbm93bj47XG4gIHByb3RlY3RlZCBkZWNsYXJlIGludGVydmFsSWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG4gIHByb3RlY3RlZCBkZWNsYXJlIGxhc3RJbnRlcnZhbElkPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuICBwcm90ZWN0ZWQgZGVjbGFyZSBzdGFydElkPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgZGVjbGFyZSBjb25uZWN0aW9uTGlzdGVuZXI6IENvbm5lY3Rpb25MaXN0ZW5lcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB7IGtleSwgc2NoZW1hLCBmZXRjaCwgZnJlcXVlbmN5LCBnZXRTdGF0ZSB9OiBTdWJzY3JpcHRpb25Jbml0LFxuICAgIGRpc3BhdGNoOiBEaXNwYXRjaDxhbnk+LFxuICAgIGNvbm5lY3Rpb25MaXN0ZW5lcj86IENvbm5lY3Rpb25MaXN0ZW5lcixcbiAgKSB7XG4gICAgaWYgKGZyZXF1ZW5jeSA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmcmVxdWVuY3kgbmVlZGVkIGZvciBwb2xsaW5nIHN1YnNjcmlwdGlvbicpO1xuICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIHRoaXMuZmV0Y2ggPSBmZXRjaDtcbiAgICB0aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgICB0aGlzLmZyZXF1ZW5jeUhpc3RvZ3JhbS5zZXQodGhpcy5mcmVxdWVuY3ksIDEpO1xuICAgIHRoaXMuZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICB0aGlzLmdldFN0YXRlID0gZ2V0U3RhdGU7XG4gICAgdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIgPVxuICAgICAgY29ubmVjdGlvbkxpc3RlbmVyIHx8IG5ldyBEZWZhdWx0Q29ubmVjdGlvbkxpc3RlbmVyKCk7XG5cbiAgICAvLyBLaWNrc3RhcnQgcnVubmluZyBzaW5jZSB0aGlzIGlzIGluaXRpYWxpemVkIGFmdGVyIHRoZSBvbmxpbmUgbm90aWYgaXMgc2VudFxuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25MaXN0ZW5lci5pc09ubGluZSgpKSB7XG4gICAgICB0aGlzLm9ubGluZUxpc3RlbmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byBhIGZyZXF1ZW5jeSAqL1xuICBhZGQoZnJlcXVlbmN5PzogbnVtYmVyKSB7XG4gICAgaWYgKGZyZXF1ZW5jeSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZnJlcXVlbmN5SGlzdG9ncmFtLmhhcyhmcmVxdWVuY3kpKSB7XG4gICAgICB0aGlzLmZyZXF1ZW5jeUhpc3RvZ3JhbS5zZXQoXG4gICAgICAgIGZyZXF1ZW5jeSxcbiAgICAgICAgKHRoaXMuZnJlcXVlbmN5SGlzdG9ncmFtLmdldChmcmVxdWVuY3kpIGFzIG51bWJlcikgKyAxLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mcmVxdWVuY3lIaXN0b2dyYW0uc2V0KGZyZXF1ZW5jeSwgMSk7XG5cbiAgICAgIC8vIG5ldyBtaW4gc28gcmVzdGFydCBzZXJ2aWNlXG4gICAgICBpZiAoZnJlcXVlbmN5IDwgdGhpcy5mcmVxdWVuY3kpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3kgPSBmcmVxdWVuY3k7XG4gICAgICAgIHRoaXMucnVuKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFVuc3Vic2NyaWJlIGZyb20gYSBmcmVxdWVuY3kgKi9cbiAgcmVtb3ZlKGZyZXF1ZW5jeT86IG51bWJlcikge1xuICAgIGlmIChmcmVxdWVuY3kgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmZyZXF1ZW5jeUhpc3RvZ3JhbS5oYXMoZnJlcXVlbmN5KSkge1xuICAgICAgdGhpcy5mcmVxdWVuY3lIaXN0b2dyYW0uc2V0KFxuICAgICAgICBmcmVxdWVuY3ksXG4gICAgICAgICh0aGlzLmZyZXF1ZW5jeUhpc3RvZ3JhbS5nZXQoZnJlcXVlbmN5KSBhcyBudW1iZXIpIC0gMSxcbiAgICAgICk7XG4gICAgICBpZiAoKHRoaXMuZnJlcXVlbmN5SGlzdG9ncmFtLmdldChmcmVxdWVuY3kpIGFzIG51bWJlcikgPCAxKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5SGlzdG9ncmFtLmRlbGV0ZShmcmVxdWVuY3kpO1xuXG4gICAgICAgIC8vIG5vdGhpbmcgc3Vic2NyaWJlZCB0byB0aGlzIGFueW1vcmUuLi5pdCBpcyBpbnZhbGlkXG4gICAgICAgIGlmICh0aGlzLmZyZXF1ZW5jeUhpc3RvZ3JhbS5zaXplID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzIHdhcyB0aGUgbWluLCBzbyBmaW5kIHRoZSBuZXh0IHNpemVcbiAgICAgICAgaWYgKGZyZXF1ZW5jeSA8PSB0aGlzLmZyZXF1ZW5jeSkge1xuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5ID0gTWF0aC5taW4oLi4udGhpcy5mcmVxdWVuY3lIaXN0b2dyYW0ua2V5cygpKTtcbiAgICAgICAgICB0aGlzLnJ1bigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBlbHNlIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBNaXNtYXRjaGVkIHJlbW92ZTogJHtmcmVxdWVuY3l9IGlzIG5vdCBzdWJzY3JpYmVkIGZvciAke3RoaXMua2V5fWAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQ2xlYW51cCBtZWFucyBjbGVhcmluZyBvdXQgYmFja2dyb3VuZCBpbnRlcnZhbC4gKi9cbiAgY2xlYW51cCgpIHtcbiAgICBpZiAodGhpcy5pbnRlcnZhbElkKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgICBkZWxldGUgdGhpcy5pbnRlcnZhbElkO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0SW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmxhc3RJbnRlcnZhbElkKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmxhc3RJbnRlcnZhbElkO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGFydElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGFydElkKTtcbiAgICAgIGRlbGV0ZSB0aGlzLnN0YXJ0SWQ7XG4gICAgfVxuICAgIHRoaXMuY29ubmVjdGlvbkxpc3RlbmVyLnJlbW92ZU9ubGluZUxpc3RlbmVyKHRoaXMub25saW5lTGlzdGVuZXIpO1xuICAgIHRoaXMuY29ubmVjdGlvbkxpc3RlbmVyLnJlbW92ZU9mZmxpbmVMaXN0ZW5lcih0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gIH1cblxuICAvKiogVHJpZ2dlciByZXF1ZXN0IGZvciBsYXRlc3QgcmVzb3VyY2UgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZSgpIHtcbiAgICBjb25zdCBlbmRwb2ludDogRW5kcG9pbnRJbnRlcmZhY2UgPSAoKSA9PiB0aGlzLmZldGNoKCk7XG4gICAgKGVuZHBvaW50IGFzIGFueSkuc2NoZW1hID0gdGhpcy5zY2hlbWE7XG4gICAgZW5kcG9pbnQua2V5ID0gKCkgPT4gdGhpcy5rZXk7XG4gICAgKGVuZHBvaW50IGFzIGFueSkuZGF0YUV4cGlyeUxlbmd0aCA9IHRoaXMuZnJlcXVlbmN5IC8gMjtcbiAgICAoZW5kcG9pbnQgYXMgYW55KS5lcnJvckV4cGlyeUxlbmd0aCA9IHRoaXMuZnJlcXVlbmN5IC8gMTA7XG4gICAgZW5kcG9pbnQuZXJyb3JQb2xpY3kgPSAoKSA9PiAnc29mdCcgYXMgY29uc3Q7XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlRmV0Y2goZW5kcG9pbnQsIHsgYXJnczogW10gfSk7XG4gICAgLy8gc3RvcCBhbnkgZXJyb3JzIGhlcmUgZnJvbSBidWJibGluZ1xuICAgIChhY3Rpb24ubWV0YS5wcm9taXNlIGFzIFByb21pc2U8YW55PikuY2F0Y2goZSA9PiBudWxsKTtcbiAgICB0aGlzLmRpc3BhdGNoKGFjdGlvbik7XG4gIH1cblxuICAvKiogV2hhdCBoYXBwZW5zIHdoZW4gYnJvd3NlciBnb2VzIG9mZmxpbmUgKi9cbiAgcHJvdGVjdGVkIG9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAvLyB0aGlzIGNsZWFycyBleGlzdGluZyBsaXN0ZW5lcnMsIHNvIG5vIG5lZWQgdG8gY2xlYXIgb2ZmbGluZSBsaXN0ZW5lclxuICAgIHRoaXMuY2xlYW51cCgpO1xuICAgIHRoaXMuY29ubmVjdGlvbkxpc3RlbmVyLmFkZE9ubGluZUxpc3RlbmVyKHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9O1xuXG4gIC8qKiBXaGF0IGhhcHBlbnMgd2hlbiBicm93c2VyIGNvbWVzIG9ubGluZSAqL1xuICBwcm90ZWN0ZWQgb25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIucmVtb3ZlT25saW5lTGlzdGVuZXIodGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnN0YXJ0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0SWQpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RhcnRJZDtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFBvbGwgc2V0VGltZW91dCBmb3IgJHt0aGlzLmtleX0gc3RpbGwgcnVubmluZywgYnV0IHRpbWVvdXRJZCBkZWxldGVkYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LCBNYXRoLm1heCgwLCB0aGlzLmxhc3RGZXRjaFRpbWUoKSAtIG5vdyArIHRoaXMuZnJlcXVlbmN5KSk7XG4gICAgdGhpcy5jb25uZWN0aW9uTGlzdGVuZXIuYWRkT2ZmbGluZUxpc3RlbmVyKHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgfTtcblxuICAvKiogUnVuIHBvbGxpbmcgcHJvY2VzcyB3aXRoIGN1cnJlbnQgZnJlcXVlbmN5XG4gICAqXG4gICAqIFdpbGwgY2xlYW4gdXAgb2xkIHBvbGwgaW50ZXJ2YWwgb24gbmV4dCBydW5cbiAgICovXG4gIHByb3RlY3RlZCBydW4oKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRJZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHRoaXMubGFzdEludGVydmFsSWQgPSB0aGlzLmludGVydmFsSWQ7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgLy8gc2luY2Ugd2UgZG9uJ3Qga25vdyBob3cgbG9uZyBpbnRvIHRoZSBsYXN0IHBvbGwgaXQgd2FzIGJlZm9yZSByZXNldHRpbmdcbiAgICAgIC8vIHdlIHdhaXQgdGlsIHRoZSBuZXh0IGZldGNoIHRvIGNsZWFyIG9sZCBpbnRlcnZhbHNcbiAgICAgIGlmICh0aGlzLmxhc3RJbnRlcnZhbElkKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5sYXN0SW50ZXJ2YWxJZCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmxhc3RJbnRlcnZhbElkO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkgdGhpcy51cGRhdGUoKTtcbiAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBQb2xsIGludGVydmFsSWQgZm9yICR7dGhpcy5rZXl9IHN0aWxsIHJ1bm5pbmcsIGJ1dCBpbnRlcnZhbElkIGRlbGV0ZWRgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sIHRoaXMuZnJlcXVlbmN5KTtcbiAgfVxuXG4gIC8qKiBMYXN0IGZldGNoIHRpbWUgKi9cbiAgcHJvdGVjdGVkIGxhc3RGZXRjaFRpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhdGUoKS5tZXRhW3RoaXMua2V5XT8uZGF0ZSA/PyAwO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUdBLE9BQU9BLHlCQUF5QixNQUFNLGdDQUFnQztBQUV0RSxPQUFPQyxXQUFXLE1BQU0sOEJBQThCO0FBR3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNQyxtQkFBbUIsQ0FBeUI7RUFhL0RDLFdBQVdBLENBQ1Q7SUFBRUMsR0FBRztJQUFFQyxNQUFNO0lBQUVDLEtBQUs7SUFBRUMsU0FBUztJQUFFQztFQUEyQixDQUFDLEVBQzdEQyxRQUF1QixFQUN2QkMsa0JBQXVDLEVBQ3ZDO0lBQUEsS0FaUUMsa0JBQWtCLEdBQXdCLElBQUlDLEdBQUcsQ0FBQyxDQUFDO0lBcUg3RDtJQUFBLEtBQ1VDLGVBQWUsR0FBRyxNQUFNO01BQ2hDO01BQ0EsSUFBSSxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUNkLElBQUksQ0FBQ0osa0JBQWtCLENBQUNLLGlCQUFpQixDQUFDLElBQUksQ0FBQ0MsY0FBYyxDQUFDO0lBQ2hFLENBQUM7SUFFRDtJQUFBLEtBQ1VBLGNBQWMsR0FBRyxNQUFNO01BQy9CLElBQUksQ0FBQ04sa0JBQWtCLENBQUNPLG9CQUFvQixDQUFDLElBQUksQ0FBQ0QsY0FBYyxDQUFDO01BQ2pFLE1BQU1FLEdBQUcsR0FBR0MsSUFBSSxDQUFDRCxHQUFHLENB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
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { Schema } from '@data-client/normalizr';
|
|
2
|
+
import type { Manager, State, Middleware, Dispatch, UnsubscribeAction, SubscribeAction } from '../types.js';
|
|
3
|
+
/** Properties sent to Subscription constructor */
|
|
4
|
+
export interface SubscriptionInit {
|
|
5
|
+
schema?: Schema | undefined;
|
|
6
|
+
fetch: () => Promise<any>;
|
|
7
|
+
key: string;
|
|
8
|
+
getState: () => State<unknown>;
|
|
9
|
+
frequency?: number | undefined;
|
|
10
|
+
}
|
|
11
|
+
/** Interface handling a single resource subscription */
|
|
12
|
+
export interface Subscription {
|
|
13
|
+
add(frequency?: number): void;
|
|
14
|
+
remove(frequency?: number): boolean;
|
|
15
|
+
cleanup(): void;
|
|
16
|
+
}
|
|
17
|
+
/** The static class that constructs Subscription */
|
|
18
|
+
export interface SubscriptionConstructable {
|
|
19
|
+
new (init: SubscriptionInit, dispatch: Dispatch<any>): Subscription;
|
|
20
|
+
}
|
|
21
|
+
/** Handles subscription actions -> fetch or receive actions
|
|
22
|
+
*
|
|
23
|
+
* Constructor takes a SubscriptionConstructable class to control how
|
|
24
|
+
* subscriptions are handled. (e.g., polling, websockets)
|
|
25
|
+
*
|
|
26
|
+
* @see https://resthooks.io/docs/api/SubscriptionManager
|
|
27
|
+
*/
|
|
28
|
+
export default class SubscriptionManager<S extends SubscriptionConstructable> implements Manager {
|
|
29
|
+
protected subscriptions: {
|
|
30
|
+
[key: string]: InstanceType<S>;
|
|
31
|
+
};
|
|
32
|
+
protected readonly Subscription: S;
|
|
33
|
+
protected middleware: Middleware;
|
|
34
|
+
constructor(Subscription: S);
|
|
35
|
+
/** Ensures all subscriptions are cleaned up. */
|
|
36
|
+
cleanup(): void;
|
|
37
|
+
/** Called when middleware intercepts 'rest-hooks/subscribe' action.
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
protected handleSubscribe(action: SubscribeAction, dispatch: (action: any) => Promise<void>, getState: () => State<unknown>): void;
|
|
41
|
+
/** Called when middleware intercepts 'rest-hooks/unsubscribe' action.
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
44
|
+
protected handleUnsubscribe(action: UnsubscribeAction, dispatch: (action: any) => Promise<void>): void;
|
|
45
|
+
/** Attaches Manager to store
|
|
46
|
+
*
|
|
47
|
+
* Intercepts 'rest-hooks/subscribe'/'rest-hooks/unsubscribe' to register resources that
|
|
48
|
+
* need to be kept up to date.
|
|
49
|
+
*
|
|
50
|
+
* Will possibly dispatch 'rest-hooks/fetch' or 'rest-hooks/receive' to keep resources fresh
|
|
51
|
+
*
|
|
52
|
+
*/
|
|
53
|
+
getMiddleware(): Middleware;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=SubscriptionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionManager.d.ts","sourceRoot":"","sources":["../../src/manager/SubscriptionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,KAAK,EACV,OAAO,EACP,KAAK,EAEL,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,eAAe,EAChB,MAAM,aAAa,CAAC;AAIrB,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,oDAAoD;AACpD,MAAM,WAAW,yBAAyB;IACxC,KAAK,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;CACrE;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,mBAAmB,CAAC,CAAC,SAAS,yBAAyB,CAC1E,YAAW,OAAO;IAElB,SAAS,CAAC,aAAa,EAAE;QACvB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;KAChC,CAAM;IAEP,mBAA2B,YAAY,EAAE,CAAC,CAAC;IAC3C,UAAkB,UAAU,EAAE,UAAU,CAAC;gBAE7B,YAAY,EAAE,CAAC;IAwB3B,gDAAgD;IAChD,OAAO;IAMP;;OAEG;IACH,SAAS,CAAC,eAAe,CACvB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,EACxC,QAAQ,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC;IAiChC;;OAEG;IACH,SAAS,CAAC,iBAAiB,CACzB,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;IAgB1C;;;;;;;OAOG;IACH,aAAa;CAGd"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { SUBSCRIBE_TYPE, UNSUBSCRIBE_TYPE } from '../actionTypes.js';
|
|
2
|
+
|
|
3
|
+
/** Properties sent to Subscription constructor */
|
|
4
|
+
|
|
5
|
+
/** Interface handling a single resource subscription */
|
|
6
|
+
|
|
7
|
+
/** The static class that constructs Subscription */
|
|
8
|
+
|
|
9
|
+
/** Handles subscription actions -> fetch or receive actions
|
|
10
|
+
*
|
|
11
|
+
* Constructor takes a SubscriptionConstructable class to control how
|
|
12
|
+
* subscriptions are handled. (e.g., polling, websockets)
|
|
13
|
+
*
|
|
14
|
+
* @see https://resthooks.io/docs/api/SubscriptionManager
|
|
15
|
+
*/
|
|
16
|
+
export default class SubscriptionManager {
|
|
17
|
+
constructor(Subscription) {
|
|
18
|
+
this.subscriptions = {};
|
|
19
|
+
this.Subscription = Subscription;
|
|
20
|
+
this.middleware = ({
|
|
21
|
+
dispatch,
|
|
22
|
+
getState
|
|
23
|
+
}) => {
|
|
24
|
+
return next => action => {
|
|
25
|
+
switch (action.type) {
|
|
26
|
+
case SUBSCRIBE_TYPE:
|
|
27
|
+
try {
|
|
28
|
+
this.handleSubscribe(action, dispatch, getState);
|
|
29
|
+
} catch (e) {
|
|
30
|
+
console.error(e);
|
|
31
|
+
}
|
|
32
|
+
return Promise.resolve();
|
|
33
|
+
case UNSUBSCRIBE_TYPE:
|
|
34
|
+
this.handleUnsubscribe(action, dispatch);
|
|
35
|
+
return Promise.resolve();
|
|
36
|
+
default:
|
|
37
|
+
return next(action);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Ensures all subscriptions are cleaned up. */
|
|
44
|
+
cleanup() {
|
|
45
|
+
for (const key in this.subscriptions) {
|
|
46
|
+
this.subscriptions[key].cleanup();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Called when middleware intercepts 'rest-hooks/subscribe' action.
|
|
51
|
+
*
|
|
52
|
+
*/
|
|
53
|
+
handleSubscribe(action, dispatch, getState) {
|
|
54
|
+
let options;
|
|
55
|
+
if (action.endpoint) {
|
|
56
|
+
const {
|
|
57
|
+
endpoint
|
|
58
|
+
} = action;
|
|
59
|
+
const {
|
|
60
|
+
args
|
|
61
|
+
} = action.meta;
|
|
62
|
+
options = {
|
|
63
|
+
schema: endpoint.schema,
|
|
64
|
+
fetch: () => endpoint(...args),
|
|
65
|
+
frequency: endpoint.pollFrequency,
|
|
66
|
+
key: endpoint.key(...args),
|
|
67
|
+
getState
|
|
68
|
+
};
|
|
69
|
+
} else {
|
|
70
|
+
var _action$meta$options;
|
|
71
|
+
options = {
|
|
72
|
+
key: action.meta.key,
|
|
73
|
+
frequency: (_action$meta$options = action.meta.options) == null ? void 0 : _action$meta$options.pollFrequency,
|
|
74
|
+
schema: action.meta.schema,
|
|
75
|
+
fetch: action.meta.fetch,
|
|
76
|
+
getState
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (options.key in this.subscriptions) {
|
|
80
|
+
this.subscriptions[options.key].add(options.frequency);
|
|
81
|
+
} else {
|
|
82
|
+
this.subscriptions[options.key] = new this.Subscription(options, dispatch);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Called when middleware intercepts 'rest-hooks/unsubscribe' action.
|
|
87
|
+
*
|
|
88
|
+
*/
|
|
89
|
+
handleUnsubscribe(action, dispatch) {
|
|
90
|
+
var _action$meta$options2;
|
|
91
|
+
const key = action.meta.key;
|
|
92
|
+
const frequency = (_action$meta$options2 = action.meta.options) == null ? void 0 : _action$meta$options2.pollFrequency;
|
|
93
|
+
|
|
94
|
+
/* istanbul ignore else */
|
|
95
|
+
if (key in this.subscriptions) {
|
|
96
|
+
const empty = this.subscriptions[key].remove(frequency);
|
|
97
|
+
if (empty) {
|
|
98
|
+
delete this.subscriptions[key];
|
|
99
|
+
}
|
|
100
|
+
} else if (process.env.NODE_ENV !== 'production') {
|
|
101
|
+
console.error(`Mismatched unsubscribe: ${key} is not subscribed`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** Attaches Manager to store
|
|
106
|
+
*
|
|
107
|
+
* Intercepts 'rest-hooks/subscribe'/'rest-hooks/unsubscribe' to register resources that
|
|
108
|
+
* need to be kept up to date.
|
|
109
|
+
*
|
|
110
|
+
* Will possibly dispatch 'rest-hooks/fetch' or 'rest-hooks/receive' to keep resources fresh
|
|
111
|
+
*
|
|
112
|
+
*/
|
|
113
|
+
getMiddleware() {
|
|
114
|
+
return this.middleware;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVUJTQ1JJQkVfVFlQRSIsIlVOU1VCU0NSSUJFX1RZUEUiLCJTdWJzY3JpcHRpb25NYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25zIiwibWlkZGxld2FyZSIsImRpc3BhdGNoIiwiZ2V0U3RhdGUiLCJuZXh0IiwiYWN0aW9uIiwidHlwZSIsImhhbmRsZVN1YnNjcmliZSIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsImhhbmRsZVVuc3Vic2NyaWJlIiwiY2xlYW51cCIsImtleSIsIm9wdGlvbnMiLCJlbmRwb2ludCIsImFyZ3MiLCJtZXRhIiwic2NoZW1hIiwiZmV0Y2giLCJmcmVxdWVuY3kiLCJwb2xsRnJlcXVlbmN5IiwiX2FjdGlvbiRtZXRhJG9wdGlvbnMiLCJhZGQiLCJfYWN0aW9uJG1ldGEkb3B0aW9uczIiLCJlbXB0eSIsInJlbW92ZSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImdldE1pZGRsZXdhcmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFuYWdlci9TdWJzY3JpcHRpb25NYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2NoZW1hIH0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCB7IFNVQlNDUklCRV9UWVBFLCBVTlNVQlNDUklCRV9UWVBFIH0gZnJvbSAnLi4vYWN0aW9uVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBNYW5hZ2VyLFxuICBTdGF0ZSxcbiAgTWlkZGxld2FyZUFQSSxcbiAgTWlkZGxld2FyZSxcbiAgRGlzcGF0Y2gsXG4gIFVuc3Vic2NyaWJlQWN0aW9uLFxuICBTdWJzY3JpYmVBY3Rpb24sXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxudHlwZSBBY3Rpb25zID0gVW5zdWJzY3JpYmVBY3Rpb24gfCBTdWJzY3JpYmVBY3Rpb247XG5cbi8qKiBQcm9wZXJ0aWVzIHNlbnQgdG8gU3Vic2NyaXB0aW9uIGNvbnN0cnVjdG9yICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvbkluaXQge1xuICBzY2hlbWE/OiBTY2hlbWEgfCB1bmRlZmluZWQ7XG4gIGZldGNoOiAoKSA9PiBQcm9taXNlPGFueT47XG4gIGtleTogc3RyaW5nO1xuICBnZXRTdGF0ZTogKCkgPT4gU3RhdGU8dW5rbm93bj47XG4gIGZyZXF1ZW5jeT86IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEludGVyZmFjZSBoYW5kbGluZyBhIHNpbmdsZSByZXNvdXJjZSBzdWJzY3JpcHRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaXB0aW9uIHtcbiAgYWRkKGZyZXF1ZW5jeT86IG51bWJlcik6IHZvaWQ7XG4gIHJlbW92ZShmcmVxdWVuY3k/OiBudW1iZXIpOiBib29sZWFuO1xuICBjbGVhbnVwKCk6IHZvaWQ7XG59XG5cbi8qKiBUaGUgc3RhdGljIGNsYXNzIHRoYXQgY29uc3RydWN0cyBTdWJzY3JpcHRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaXB0aW9uQ29uc3RydWN0YWJsZSB7XG4gIG5ldyAoaW5pdDogU3Vic2NyaXB0aW9uSW5pdCwgZGlzcGF0Y2g6IERpc3BhdGNoPGFueT4pOiBTdWJzY3JpcHRpb247XG59XG5cbi8qKiBIYW5kbGVzIHN1YnNjcmlwdGlvbiBhY3Rpb25zIC0+IGZldGNoIG9yIHJlY2VpdmUgYWN0aW9uc1xuICpcbiAqIENvbnN0cnVjdG9yIHRha2VzIGEgU3Vic2NyaXB0aW9uQ29uc3RydWN0YWJsZSBjbGFzcyB0byBjb250cm9sIGhvd1xuICogc3Vic2NyaXB0aW9ucyBhcmUgaGFuZGxlZC4gKGUuZy4sIHBvbGxpbmcsIHdlYnNvY2tldHMpXG4gKlxuICogQHNlZSBodHRwczovL3Jlc3Rob29rcy5pby9kb2NzL2FwaS9TdWJzY3JpcHRpb25NYW5hZ2VyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YnNjcmlwdGlvbk1hbmFnZXI8UyBleHRlbmRzIFN1YnNjcmlwdGlvbkNvbnN0cnVjdGFibGU+XG4gIGltcGxlbWVudHMgTWFuYWdlclxue1xuICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uczoge1xuICAgIFtrZXk6IHN0cmluZ106IEluc3RhbmNlVHlwZTxTPjtcbiAgfSA9IHt9O1xuXG4gIHByb3RlY3RlZCBkZWNsYXJlIHJlYWRvbmx5IFN1YnNjcmlwdGlvbjogUztcbiAgcHJvdGVjdGVkIGRlY2xhcmUgbWlkZGxld2FyZTogTWlkZGxld2FyZTtcblxuICBjb25zdHJ1Y3RvcihTdWJzY3JpcHRpb246IFMpIHtcbiAgICB0aGlzLlN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbjtcblxuICAgIHRoaXMubWlkZGxld2FyZSA9IDxDIGV4dGVuZHMgTWlkZGxld2FyZUFQST4oeyBkaXNwYXRjaCwgZ2V0U3RhdGUgfTogQykgPT4ge1xuICAgICAgcmV0dXJuIChuZXh0OiBDWydkaXNwYXRjaCddKTogQ1snZGlzcGF0Y2gnXSA9PlxuICAgICAgICBhY3Rpb24gPT4ge1xuICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgU1VCU0NSSUJFX1RZUEU6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWJzY3JpYmUoYWN0aW9uLCBkaXNwYXRjaCwgZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICBjYXNlIFVOU1VCU0NSSUJFX1RZUEU6XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlVW5zdWJzY3JpYmUoYWN0aW9uLCBkaXNwYXRjaCk7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG4gIH1cblxuICAvKiogRW5zdXJlcyBhbGwgc3Vic2NyaXB0aW9ucyBhcmUgY2xlYW5lZCB1cC4gKi9cbiAgY2xlYW51cCgpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1trZXldLmNsZWFudXAoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gbWlkZGxld2FyZSBpbnRlcmNlcHRzICdyZXN0LWhvb2tzL3N1YnNjcmliZScgYWN0aW9uLlxuICAgKlxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZVN1YnNjcmliZShcbiAgICBhY3Rpb246IFN1YnNjcmliZUFjdGlvbixcbiAgICBkaXNwYXRjaDogKGFjdGlvbjogYW55KSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgIGdldFN0YXRlOiAoKSA9PiBTdGF0ZTx1bmtub3duPixcbiAgKSB7XG4gICAgbGV0IG9wdGlvbnM6IFN1YnNjcmlwdGlvbkluaXQ7XG4gICAgaWYgKGFjdGlvbi5lbmRwb2ludCkge1xuICAgICAgY29uc3QgeyBlbmRwb2ludCB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgeyBhcmdzIH0gPSBhY3Rpb24ubWV0YTtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHNjaGVtYTogZW5kcG9pbnQuc2NoZW1hLFxuICAgICAgICBmZXRjaDogKCkgPT4gZW5kcG9pbnQoLi4uYXJncyksXG4gICAgICAgIGZyZXF1ZW5jeTogZW5kcG9pbnQucG9sbEZyZXF1ZW5jeSxcbiAgICAgICAga2V5OiBlbmRwb2ludC5rZXkoLi4uYXJncyksXG4gICAgICAgIGdldFN0YXRlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAga2V5OiBhY3Rpb24ubWV0YS5rZXksXG4gICAgICAgIGZyZXF1ZW5jeTogYWN0aW9uLm1ldGEub3B0aW9ucz8ucG9sbEZyZXF1ZW5jeSxcbiAgICAgICAgc2NoZW1hOiBhY3Rpb24ubWV0YS5zY2hlbWEsXG4gICAgICAgIGZldGNoOiBhY3Rpb24ubWV0YS5mZXRjaCxcbiAgICAgICAgZ2V0U3RhdGUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmtleSBpbiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1tvcHRpb25zLmtleV0uYWRkKG9wdGlvbnMuZnJlcXVlbmN5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zW29wdGlvbnMua2V5XSA9IG5ldyB0aGlzLlN1YnNjcmlwdGlvbihcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICApIGFzIEluc3RhbmNlVHlwZTxTPjtcbiAgICB9XG4gIH1cblxuICAvKiogQ2FsbGVkIHdoZW4gbWlkZGxld2FyZSBpbnRlcmNlcHRzICdyZXN0LWhvb2tzL3Vuc3Vic2NyaWJlJyBhY3Rpb24uXG4gICAqXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlVW5zdWJzY3JpYmUoXG4gICAgYWN0aW9uOiBVbnN1YnNjcmliZUFjdGlvbixcbiAgICBkaXNwYXRjaDogKGFjdGlvbjogYW55KSA9PiBQcm9taXNlPHZvaWQ+LFxuICApIHtcbiAgICBjb25zdCBrZXkgPSBhY3Rpb24ubWV0YS5rZXk7XG4gICAgY29uc3QgZnJlcXVlbmN5ID0gYWN0aW9uLm1ldGEub3B0aW9ucz8ucG9sbEZyZXF1ZW5jeTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGtleSBpbiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5zdWJzY3JpcHRpb25zW2tleV0ucmVtb3ZlKGZyZXF1ZW5jeSk7XG4gICAgICBpZiAoZW1wdHkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3Vic2NyaXB0aW9uc1trZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihgTWlzbWF0Y2hlZCB1bnN1YnNjcmliZTogJHtrZXl9IGlzIG5vdCBzdWJzY3JpYmVkYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEF0dGFjaGVzIE1hbmFnZXIgdG8gc3RvcmVcbiAgICpcbiAgICogSW50ZXJjZXB0cyAncmVzdC1ob29rcy9zdWJzY3JpYmUnLydyZXN0LWhvb2tzL3Vuc3Vic2NyaWJlJyB0byByZWdpc3RlciByZXNvdXJjZXMgdGhhdFxuICAgKiBuZWVkIHRvIGJlIGtlcHQgdXAgdG8gZGF0ZS5cbiAgICpcbiAgICogV2lsbCBwb3NzaWJseSBkaXNwYXRjaCAncmVzdC1ob29rcy9mZXRjaCcgb3IgJ3Jlc3QtaG9va3MvcmVjZWl2ZScgdG8ga2VlcCByZXNvdXJjZXMgZnJlc2hcbiAgICpcbiAgICovXG4gIGdldE1pZGRsZXdhcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWlkZGxld2FyZTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxjQUFjLEVBQUVDLGdCQUFnQixRQUFRLG1CQUFtQjs7QUFhcEU7O0FBU0E7O0FBT0E7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU1DLG1CQUFtQixDQUV4QztFQVFFQyxXQUFXQSxDQUFDQyxZQUFlLEVBQUU7SUFBQSxLQVBuQkMsYUFBYSxHQUVuQixDQUFDLENBQUM7SUFNSixJQUFJLENBQUNELFlBQVksR0FBR0EsWUFBWTtJQUVoQyxJQUFJLENBQUNFLFVBQVUsR0FBRyxDQUEwQjtNQUFFQyxRQUFRO01BQUVDO0lBQVksQ0FBQyxLQUFLO01BQ3hFLE9BQVFDLElBQW1CLElBQ3pCQyxNQUFNLElBQUk7UUFDUixRQUFRQSxNQUFNLENBQUNDLElBQUk7VUFDakIsS0FBS1gsY0FBYztZQUNqQixJQUFJO2NBQ0YsSUFBSSxD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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type Controller from '../controller/Controller.js';
|
|
2
|
+
import type { Reducer, Dispatch, ReducerState } from '../middlewareTypes.js';
|
|
3
|
+
import { Manager } from '../types.js';
|
|
4
|
+
export default function applyManager(managers: Manager[], controller: Controller): Middleware[];
|
|
5
|
+
export interface MiddlewareAPI<R extends Reducer<any, any> = Reducer<any, any>> {
|
|
6
|
+
getState: () => ReducerState<R>;
|
|
7
|
+
dispatch: Dispatch<R>;
|
|
8
|
+
}
|
|
9
|
+
export type Middleware = <R extends Reducer<any, any>>({ dispatch, }: MiddlewareAPI<R>) => (next: Dispatch<R>) => Dispatch<R>;
|
|
10
|
+
//# sourceMappingURL=applyManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyManager.d.ts","sourceRoot":"","sources":["../../src/manager/applyManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAQ,EAAE,OAAO,EAAE,EACnB,UAAU,EAAE,UAAU,GACrB,UAAU,EAAE,CAcd;AAGD,MAAM,WAAW,aAAa,CAC5B,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;IAE/C,QAAQ,EAAE,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CACvB;AACD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EACrD,QAAQ,GACT,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export default function applyManager(managers, controller) {
|
|
2
|
+
return managers.map(manager => {
|
|
3
|
+
const middleware = manager.getMiddleware();
|
|
4
|
+
return ({
|
|
5
|
+
dispatch,
|
|
6
|
+
getState
|
|
7
|
+
}) => {
|
|
8
|
+
controller.dispatch = dispatch;
|
|
9
|
+
controller.getState = getState;
|
|
10
|
+
// this is needed for backwards compatibility as we added 'controller' prop previously
|
|
11
|
+
const API = Object.create(controller, {
|
|
12
|
+
controller: {
|
|
13
|
+
value: controller
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
// controller is a superset of the middleware API
|
|
17
|
+
return middleware(API);
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* These should be compatible with redux */
|
|
23
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBseU1hbmFnZXIiLCJtYW5hZ2VycyIsImNvbnRyb2xsZXIiLCJtYXAiLCJtYW5hZ2VyIiwibWlkZGxld2FyZSIsImdldE1pZGRsZXdhcmUiLCJkaXNwYXRjaCIsImdldFN0YXRlIiwiQVBJIiwiT2JqZWN0IiwiY3JlYXRlIiwidmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFuYWdlci9hcHBseU1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tICcuLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWR1Y2VyLCBEaXNwYXRjaCwgUmVkdWNlclN0YXRlIH0gZnJvbSAnLi4vbWlkZGxld2FyZVR5cGVzLmpzJztcbmltcG9ydCB7IE1hbmFnZXIgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcGx5TWFuYWdlcihcbiAgbWFuYWdlcnM6IE1hbmFnZXJbXSxcbiAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbik6IE1pZGRsZXdhcmVbXSB7XG4gIHJldHVybiBtYW5hZ2Vycy5tYXAobWFuYWdlciA9PiB7XG4gICAgY29uc3QgbWlkZGxld2FyZSA9IG1hbmFnZXIuZ2V0TWlkZGxld2FyZSgpO1xuICAgIHJldHVybiAoeyBkaXNwYXRjaCwgZ2V0U3RhdGUgfSkgPT4ge1xuICAgICAgKGNvbnRyb2xsZXIgYXMgYW55KS5kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgICAgKGNvbnRyb2xsZXIgYXMgYW55KS5nZXRTdGF0ZSA9IGdldFN0YXRlO1xuICAgICAgLy8gdGhpcyBpcyBuZWVkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFzIHdlIGFkZGVkICdjb250cm9sbGVyJyBwcm9wIHByZXZpb3VzbHlcbiAgICAgIGNvbnN0IEFQSSA9IE9iamVjdC5jcmVhdGUoY29udHJvbGxlciwge1xuICAgICAgICBjb250cm9sbGVyOiB7IHZhbHVlOiBjb250cm9sbGVyIH0sXG4gICAgICB9KTtcbiAgICAgIC8vIGNvbnRyb2xsZXIgaXMgYSBzdXBlcnNldCBvZiB0aGUgbWlkZGxld2FyZSBBUElcbiAgICAgIHJldHVybiBtaWRkbGV3YXJlKEFQSSk7XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qIFRoZXNlIHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggcmVkdXggKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWlkZGxld2FyZUFQSTxcbiAgUiBleHRlbmRzIFJlZHVjZXI8YW55LCBhbnk+ID0gUmVkdWNlcjxhbnksIGFueT4sXG4+IHtcbiAgZ2V0U3RhdGU6ICgpID0+IFJlZHVjZXJTdGF0ZTxSPjtcbiAgZGlzcGF0Y2g6IERpc3BhdGNoPFI+O1xufVxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZSA9IDxSIGV4dGVuZHMgUmVkdWNlcjxhbnksIGFueT4+KHtcbiAgZGlzcGF0Y2gsXG59OiBNaWRkbGV3YXJlQVBJPFI+KSA9PiAobmV4dDogRGlzcGF0Y2g8Uj4pID0+IERpc3BhdGNoPFI+O1xuIl0sIm1hcHBpbmdzIjoiQUFJQSxlQUFlLFNBQVNBLFlBQVlBLENBQ2xDQyxRQUFtQixFQUNuQkMsVUFBc0IsRUFDUjtFQUNkLE9BQU9ELFFBQVEsQ0FBQ0UsR0FBRyxDQUFDQyxPQUFPLElBQUk7SUFDN0IsTUFBTUMsVUFBVSxHQUFHRCxPQUFPLENBQUNFLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLE9BQU8sQ0FBQztNQUFFQyxRQUFRO01BQUVDO0lBQVMsQ0FBQyxLQUFLO01BQ2hDTixVQUFVLENBQVNLLFFBQVEsR0FBR0EsUUFBUTtNQUN0Q0wsVUFBVSxDQUFTTSxRQUFRLEdBQUdBLFFBQVE7TUFDdkM7TUFDQSxNQUFNQyxHQUFHLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDVCxVQUFVLEVBQUU7UUFDcENBLFVBQVUsRUFBRTtVQUFFVSxLQUFLLEVBQUVWO1FBQVc7TUFDbEMsQ0FBQyxDQUFDO01BQ0Y7TUFDQSxPQUFPRyxVQUFVLENBQUNJLEdBQUcsQ0FBQztJQUN4QixDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ0o7O0FBRUEifQ==
|