@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.
Files changed (308) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +71 -0
  3. package/dist/index.js +1643 -0
  4. package/dist/index.umd.min.js +1 -0
  5. package/dist/next.js +461 -0
  6. package/dist/package.json +1 -0
  7. package/legacy/actionTypes.js +12 -0
  8. package/legacy/compatibleActions.js +2 -0
  9. package/legacy/controller/BaseController.js +289 -0
  10. package/legacy/controller/Controller.js +20 -0
  11. package/legacy/controller/createFetch.js +42 -0
  12. package/legacy/controller/createInvalidate.js +12 -0
  13. package/legacy/controller/createInvalidateAll.js +8 -0
  14. package/legacy/controller/createOptimistic.js +33 -0
  15. package/legacy/controller/createReceive.js +36 -0
  16. package/legacy/controller/createReset.js +8 -0
  17. package/legacy/controller/createSubscription.js +30 -0
  18. package/legacy/controller/types.js +2 -0
  19. package/legacy/endpoint/index.js +2 -0
  20. package/legacy/endpoint/shapes.js +2 -0
  21. package/legacy/endpoint/types.js +2 -0
  22. package/legacy/fsa.js +2 -0
  23. package/legacy/index.js +22 -0
  24. package/legacy/internal.js +4 -0
  25. package/legacy/legacyActions.js +2 -0
  26. package/legacy/manager/ConnectionListener.js +2 -0
  27. package/legacy/manager/DefaultConnectionListener.js +40 -0
  28. package/legacy/manager/DevtoolsManager.js +73 -0
  29. package/legacy/manager/LogoutManager.js +34 -0
  30. package/legacy/manager/NetworkManager.js +291 -0
  31. package/legacy/manager/PollingSubscription.js +159 -0
  32. package/legacy/manager/SubscriptionManager.js +117 -0
  33. package/legacy/manager/applyManager.js +23 -0
  34. package/legacy/manager/devtoolsTypes.js +2 -0
  35. package/legacy/manager/index.js +6 -0
  36. package/legacy/middlewareTypes.js +2 -0
  37. package/legacy/newActions.js +2 -0
  38. package/legacy/next/Controller.js +24 -0
  39. package/legacy/next/index.js +3 -0
  40. package/legacy/previousActions.js +2 -0
  41. package/legacy/state/RIC.js +3 -0
  42. package/legacy/state/applyUpdatersToResults.js +4 -0
  43. package/legacy/state/legacy-actions/createFetch.js +62 -0
  44. package/legacy/state/legacy-actions/createReceive.js +37 -0
  45. package/legacy/state/legacy-actions/createReceiveError.js +28 -0
  46. package/legacy/state/legacy-actions/index.js +4 -0
  47. package/legacy/state/reducer/createReducer.js +54 -0
  48. package/legacy/state/reducer/fetchReducer.js +32 -0
  49. package/legacy/state/reducer/invalidateReducer.js +28 -0
  50. package/legacy/state/reducer/setReducer.js +113 -0
  51. package/legacy/state/reducerInstance.js +9 -0
  52. package/legacy/state/selectMeta.js +4 -0
  53. package/legacy/types.js +8 -0
  54. package/lib/actionTypes.d.ts +11 -0
  55. package/lib/actionTypes.d.ts.map +1 -0
  56. package/lib/actionTypes.js +12 -0
  57. package/lib/compatibleActions.d.ts +47 -0
  58. package/lib/compatibleActions.d.ts.map +1 -0
  59. package/lib/compatibleActions.js +2 -0
  60. package/lib/controller/BaseController.d.ts +128 -0
  61. package/lib/controller/BaseController.d.ts.map +1 -0
  62. package/lib/controller/BaseController.js +289 -0
  63. package/lib/controller/Controller.d.ts +14 -0
  64. package/lib/controller/Controller.d.ts.map +1 -0
  65. package/lib/controller/Controller.js +20 -0
  66. package/lib/controller/createFetch.d.ts +12 -0
  67. package/lib/controller/createFetch.d.ts.map +1 -0
  68. package/lib/controller/createFetch.js +42 -0
  69. package/lib/controller/createInvalidate.d.ts +6 -0
  70. package/lib/controller/createInvalidate.d.ts.map +1 -0
  71. package/lib/controller/createInvalidate.js +12 -0
  72. package/lib/controller/createInvalidateAll.d.ts +3 -0
  73. package/lib/controller/createInvalidateAll.d.ts.map +1 -0
  74. package/lib/controller/createInvalidateAll.js +8 -0
  75. package/lib/controller/createOptimistic.d.ts +10 -0
  76. package/lib/controller/createOptimistic.d.ts.map +1 -0
  77. package/lib/controller/createOptimistic.js +33 -0
  78. package/lib/controller/createReceive.d.ts +20 -0
  79. package/lib/controller/createReceive.d.ts.map +1 -0
  80. package/lib/controller/createReceive.js +36 -0
  81. package/lib/controller/createReset.d.ts +3 -0
  82. package/lib/controller/createReset.d.ts.map +1 -0
  83. package/lib/controller/createReset.js +8 -0
  84. package/lib/controller/createSubscription.d.ts +9 -0
  85. package/lib/controller/createSubscription.d.ts.map +1 -0
  86. package/lib/controller/createSubscription.js +30 -0
  87. package/lib/controller/types.d.ts +6 -0
  88. package/lib/controller/types.d.ts.map +1 -0
  89. package/lib/controller/types.js +2 -0
  90. package/lib/endpoint/index.d.ts +3 -0
  91. package/lib/endpoint/index.d.ts.map +1 -0
  92. package/lib/endpoint/index.js +2 -0
  93. package/lib/endpoint/shapes.d.ts +25 -0
  94. package/lib/endpoint/shapes.d.ts.map +1 -0
  95. package/lib/endpoint/shapes.js +2 -0
  96. package/lib/endpoint/types.d.ts +45 -0
  97. package/lib/endpoint/types.d.ts.map +1 -0
  98. package/lib/endpoint/types.js +2 -0
  99. package/lib/fsa.d.ts +41 -0
  100. package/lib/fsa.d.ts.map +1 -0
  101. package/lib/fsa.js +2 -0
  102. package/lib/index.d.ts +19 -0
  103. package/lib/index.d.ts.map +1 -0
  104. package/lib/index.js +22 -0
  105. package/lib/internal.d.ts +4 -0
  106. package/lib/internal.d.ts.map +1 -0
  107. package/lib/internal.js +4 -0
  108. package/lib/legacyActions.d.ts +92 -0
  109. package/lib/legacyActions.d.ts.map +1 -0
  110. package/lib/legacyActions.js +2 -0
  111. package/lib/manager/ConnectionListener.d.ts +8 -0
  112. package/lib/manager/ConnectionListener.d.ts.map +1 -0
  113. package/lib/manager/ConnectionListener.js +2 -0
  114. package/lib/manager/DefaultConnectionListener.d.ts +20 -0
  115. package/lib/manager/DefaultConnectionListener.d.ts.map +1 -0
  116. package/lib/manager/DefaultConnectionListener.js +40 -0
  117. package/lib/manager/DevtoolsManager.d.ts +24 -0
  118. package/lib/manager/DevtoolsManager.d.ts.map +1 -0
  119. package/lib/manager/DevtoolsManager.js +74 -0
  120. package/lib/manager/LogoutManager.d.ts +25 -0
  121. package/lib/manager/LogoutManager.d.ts.map +1 -0
  122. package/lib/manager/LogoutManager.js +34 -0
  123. package/lib/manager/NetworkManager.d.ts +82 -0
  124. package/lib/manager/NetworkManager.d.ts.map +1 -0
  125. package/lib/manager/NetworkManager.js +295 -0
  126. package/lib/manager/PollingSubscription.d.ts +45 -0
  127. package/lib/manager/PollingSubscription.d.ts.map +1 -0
  128. package/lib/manager/PollingSubscription.js +159 -0
  129. package/lib/manager/SubscriptionManager.d.ts +55 -0
  130. package/lib/manager/SubscriptionManager.d.ts.map +1 -0
  131. package/lib/manager/SubscriptionManager.js +117 -0
  132. package/lib/manager/applyManager.d.ts +10 -0
  133. package/lib/manager/applyManager.d.ts.map +1 -0
  134. package/lib/manager/applyManager.js +23 -0
  135. package/lib/manager/devtoolsTypes.d.ts +205 -0
  136. package/lib/manager/devtoolsTypes.d.ts.map +1 -0
  137. package/lib/manager/devtoolsTypes.js +2 -0
  138. package/lib/manager/index.d.ts +8 -0
  139. package/lib/manager/index.d.ts.map +1 -0
  140. package/lib/manager/index.js +6 -0
  141. package/lib/middlewareTypes.d.ts +18 -0
  142. package/lib/middlewareTypes.d.ts.map +1 -0
  143. package/lib/middlewareTypes.js +2 -0
  144. package/lib/newActions.d.ts +85 -0
  145. package/lib/newActions.d.ts.map +1 -0
  146. package/lib/newActions.js +2 -0
  147. package/lib/next/Controller.d.ts +14 -0
  148. package/lib/next/Controller.d.ts.map +1 -0
  149. package/lib/next/Controller.js +24 -0
  150. package/lib/next/index.d.ts +3 -0
  151. package/lib/next/index.d.ts.map +1 -0
  152. package/lib/next/index.js +3 -0
  153. package/lib/previousActions.d.ts +91 -0
  154. package/lib/previousActions.d.ts.map +1 -0
  155. package/lib/previousActions.js +2 -0
  156. package/lib/state/RIC.d.ts +2 -0
  157. package/lib/state/RIC.js +3 -0
  158. package/lib/state/applyUpdatersToResults.d.ts +13 -0
  159. package/lib/state/applyUpdatersToResults.d.ts.map +1 -0
  160. package/lib/state/applyUpdatersToResults.js +7 -0
  161. package/lib/state/legacy-actions/createFetch.d.ts +19 -0
  162. package/lib/state/legacy-actions/createFetch.d.ts.map +1 -0
  163. package/lib/state/legacy-actions/createFetch.js +62 -0
  164. package/lib/state/legacy-actions/createReceive.d.ts +14 -0
  165. package/lib/state/legacy-actions/createReceive.d.ts.map +1 -0
  166. package/lib/state/legacy-actions/createReceive.js +37 -0
  167. package/lib/state/legacy-actions/createReceiveError.d.ts +9 -0
  168. package/lib/state/legacy-actions/createReceiveError.d.ts.map +1 -0
  169. package/lib/state/legacy-actions/createReceiveError.js +28 -0
  170. package/lib/state/legacy-actions/index.d.ts +4 -0
  171. package/lib/state/legacy-actions/index.d.ts.map +1 -0
  172. package/lib/state/legacy-actions/index.js +4 -0
  173. package/lib/state/reducer/createReducer.d.ts +7 -0
  174. package/lib/state/reducer/createReducer.d.ts.map +1 -0
  175. package/lib/state/reducer/createReducer.js +55 -0
  176. package/lib/state/reducer/fetchReducer.d.ts +4 -0
  177. package/lib/state/reducer/fetchReducer.d.ts.map +1 -0
  178. package/lib/state/reducer/fetchReducer.js +34 -0
  179. package/lib/state/reducer/invalidateReducer.d.ts +37 -0
  180. package/lib/state/reducer/invalidateReducer.d.ts.map +1 -0
  181. package/lib/state/reducer/invalidateReducer.js +34 -0
  182. package/lib/state/reducer/setReducer.d.ts +40 -0
  183. package/lib/state/reducer/setReducer.d.ts.map +1 -0
  184. package/lib/state/reducer/setReducer.js +119 -0
  185. package/lib/state/reducerInstance.d.ts +7 -0
  186. package/lib/state/reducerInstance.d.ts.map +1 -0
  187. package/lib/state/reducerInstance.js +9 -0
  188. package/lib/state/selectMeta.d.ts +3 -0
  189. package/lib/state/selectMeta.d.ts.map +1 -0
  190. package/lib/state/selectMeta.js +4 -0
  191. package/lib/types.d.ts +71 -0
  192. package/lib/types.d.ts.map +1 -0
  193. package/lib/types.js +8 -0
  194. package/node.mjs +1 -0
  195. package/package.json +127 -0
  196. package/src/actionTypes.ts +11 -0
  197. package/src/compatibleActions.ts +96 -0
  198. package/src/controller/BaseController.ts +508 -0
  199. package/src/controller/Controller.ts +32 -0
  200. package/src/controller/__tests__/Controller.ts +29 -0
  201. package/src/controller/__tests__/__snapshots__/getResponse.ts.snap +35 -0
  202. package/src/controller/__tests__/getResponse.ts +182 -0
  203. package/src/controller/createFetch.ts +54 -0
  204. package/src/controller/createInvalidate.ts +16 -0
  205. package/src/controller/createInvalidateAll.ts +11 -0
  206. package/src/controller/createOptimistic.ts +47 -0
  207. package/src/controller/createReceive.ts +85 -0
  208. package/src/controller/createReset.ts +9 -0
  209. package/src/controller/createSubscription.ts +39 -0
  210. package/src/controller/types.ts +22 -0
  211. package/src/endpoint/index.ts +14 -0
  212. package/src/endpoint/shapes.ts +53 -0
  213. package/src/endpoint/types.ts +72 -0
  214. package/src/fsa.ts +99 -0
  215. package/src/index.ts +61 -0
  216. package/src/internal.ts +3 -0
  217. package/src/legacyActions.ts +163 -0
  218. package/src/manager/ConnectionListener.ts +7 -0
  219. package/src/manager/DefaultConnectionListener.ts +54 -0
  220. package/src/manager/DevtoolsManager.ts +99 -0
  221. package/src/manager/LogoutManager.ts +57 -0
  222. package/src/manager/NetworkManager.ts +346 -0
  223. package/src/manager/PollingSubscription.ts +190 -0
  224. package/src/manager/SubscriptionManager.ts +156 -0
  225. package/src/manager/__tests__/__snapshots__/pollingSubscription-endpoint.ts.snap +49 -0
  226. package/src/manager/__tests__/__snapshots__/pollingSubscription.ts.snap +43 -0
  227. package/src/manager/__tests__/logoutManager.ts +112 -0
  228. package/src/manager/__tests__/manager.ts +44 -0
  229. package/src/manager/__tests__/networkManager-legacy.ts +394 -0
  230. package/src/manager/__tests__/networkManager.ts +426 -0
  231. package/src/manager/__tests__/pollingSubscription-endpoint.ts +423 -0
  232. package/src/manager/__tests__/pollingSubscription.ts +313 -0
  233. package/src/manager/__tests__/subscriptionManager.ts +208 -0
  234. package/src/manager/applyManager.ts +33 -0
  235. package/src/manager/devtoolsTypes.ts +210 -0
  236. package/src/manager/index.ts +7 -0
  237. package/src/middlewareTypes.ts +49 -0
  238. package/src/newActions.ts +140 -0
  239. package/src/next/Controller.ts +39 -0
  240. package/src/next/index.ts +2 -0
  241. package/src/package.json +1 -0
  242. package/src/previousActions.ts +159 -0
  243. package/src/state/RIC.d.ts +2 -0
  244. package/src/state/RIC.js +5 -0
  245. package/src/state/__tests__/RIC.web.ts +16 -0
  246. package/src/state/__tests__/__snapshots__/reducer.ts.snap +56 -0
  247. package/src/state/__tests__/applyUpdatersToResults.ts +40 -0
  248. package/src/state/__tests__/reducer.ts +868 -0
  249. package/src/state/applyUpdatersToResults.ts +29 -0
  250. package/src/state/legacy-actions/createFetch.ts +95 -0
  251. package/src/state/legacy-actions/createReceive.ts +68 -0
  252. package/src/state/legacy-actions/createReceiveError.ts +43 -0
  253. package/src/state/legacy-actions/index.ts +3 -0
  254. package/src/state/reducer/createReducer.ts +80 -0
  255. package/src/state/reducer/fetchReducer.ts +48 -0
  256. package/src/state/reducer/invalidateReducer.ts +39 -0
  257. package/src/state/reducer/setReducer.ts +157 -0
  258. package/src/state/reducerInstance.ts +14 -0
  259. package/src/state/selectMeta.ts +8 -0
  260. package/src/types.ts +125 -0
  261. package/ts3.4/actionTypes.d.ts +11 -0
  262. package/ts3.4/compatibleActions.d.ts +47 -0
  263. package/ts3.4/controller/BaseController.d.ts +170 -0
  264. package/ts3.4/controller/Controller.d.ts +14 -0
  265. package/ts3.4/controller/createFetch.d.ts +14 -0
  266. package/ts3.4/controller/createInvalidate.d.ts +8 -0
  267. package/ts3.4/controller/createInvalidateAll.d.ts +3 -0
  268. package/ts3.4/controller/createOptimistic.d.ts +12 -0
  269. package/ts3.4/controller/createReceive.d.ts +24 -0
  270. package/ts3.4/controller/createReset.d.ts +3 -0
  271. package/ts3.4/controller/createSubscription.d.ts +13 -0
  272. package/ts3.4/controller/types.d.ts +6 -0
  273. package/ts3.4/endpoint/index.d.ts +3 -0
  274. package/ts3.4/endpoint/shapes.d.ts +25 -0
  275. package/ts3.4/endpoint/types.d.ts +45 -0
  276. package/ts3.4/fsa.d.ts +41 -0
  277. package/ts3.4/index.d.ts +22 -0
  278. package/ts3.4/internal.d.ts +4 -0
  279. package/ts3.4/legacyActions.d.ts +95 -0
  280. package/ts3.4/manager/ConnectionListener.d.ts +8 -0
  281. package/ts3.4/manager/DefaultConnectionListener.d.ts +20 -0
  282. package/ts3.4/manager/DevtoolsManager.d.ts +24 -0
  283. package/ts3.4/manager/LogoutManager.d.ts +25 -0
  284. package/ts3.4/manager/NetworkManager.d.ts +82 -0
  285. package/ts3.4/manager/PollingSubscription.d.ts +45 -0
  286. package/ts3.4/manager/SubscriptionManager.d.ts +55 -0
  287. package/ts3.4/manager/applyManager.d.ts +10 -0
  288. package/ts3.4/manager/devtoolsTypes.d.ts +205 -0
  289. package/ts3.4/manager/index.d.ts +8 -0
  290. package/ts3.4/middlewareTypes.d.ts +18 -0
  291. package/ts3.4/newActions.d.ts +88 -0
  292. package/ts3.4/next/Controller.d.ts +14 -0
  293. package/ts3.4/next/index.d.ts +3 -0
  294. package/ts3.4/previousActions.d.ts +94 -0
  295. package/ts3.4/state/RIC.d.ts +2 -0
  296. package/ts3.4/state/applyUpdatersToResults.d.ts +13 -0
  297. package/ts3.4/state/legacy-actions/createFetch.d.ts +19 -0
  298. package/ts3.4/state/legacy-actions/createReceive.d.ts +14 -0
  299. package/ts3.4/state/legacy-actions/createReceiveError.d.ts +9 -0
  300. package/ts3.4/state/legacy-actions/index.d.ts +4 -0
  301. package/ts3.4/state/reducer/createReducer.d.ts +7 -0
  302. package/ts3.4/state/reducer/fetchReducer.d.ts +4 -0
  303. package/ts3.4/state/reducer/invalidateReducer.d.ts +37 -0
  304. package/ts3.4/state/reducer/setReducer.d.ts +40 -0
  305. package/ts3.4/state/reducerInstance.d.ts +7 -0
  306. package/ts3.4/state/selectMeta.d.ts +3 -0
  307. package/ts3.4/types.d.ts +73 -0
  308. 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==