@legendapp/state 3.0.0-alpha.0 → 3.0.0-alpha.2

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 (323) hide show
  1. package/.DS_Store +0 -0
  2. package/CHANGELOG.md +1 -827
  3. package/LICENSE +1 -21
  4. package/README.md +1 -141
  5. package/as/arrayAsRecord.d.mts +5 -0
  6. package/as/arrayAsRecord.d.ts +5 -0
  7. package/as/arrayAsRecord.js +28 -0
  8. package/as/arrayAsRecord.mjs +26 -0
  9. package/as/arrayAsSet.d.mts +5 -0
  10. package/as/arrayAsSet.d.ts +5 -0
  11. package/as/arrayAsSet.js +13 -0
  12. package/as/arrayAsSet.mjs +11 -0
  13. package/as/arrayAsString.d.mts +5 -0
  14. package/as/arrayAsString.d.ts +5 -0
  15. package/as/arrayAsString.js +13 -0
  16. package/as/arrayAsString.mjs +11 -0
  17. package/as/numberAsString.d.mts +5 -0
  18. package/as/numberAsString.d.ts +5 -0
  19. package/as/numberAsString.js +13 -0
  20. package/as/numberAsString.mjs +11 -0
  21. package/as/recordAsArray.d.mts +5 -0
  22. package/as/recordAsArray.d.ts +5 -0
  23. package/as/recordAsArray.js +25 -0
  24. package/as/recordAsArray.mjs +23 -0
  25. package/as/recordAsString.d.mts +5 -0
  26. package/as/recordAsString.d.ts +5 -0
  27. package/as/recordAsString.js +13 -0
  28. package/as/recordAsString.mjs +11 -0
  29. package/as/setAsArray.d.mts +5 -0
  30. package/as/setAsArray.d.ts +5 -0
  31. package/as/setAsArray.js +13 -0
  32. package/as/setAsArray.mjs +11 -0
  33. package/as/setAsString.d.mts +5 -0
  34. package/as/setAsString.d.ts +5 -0
  35. package/as/setAsString.js +13 -0
  36. package/as/setAsString.mjs +11 -0
  37. package/as/stringAsArray.d.mts +5 -0
  38. package/as/stringAsArray.d.ts +5 -0
  39. package/as/stringAsArray.js +13 -0
  40. package/as/stringAsArray.mjs +11 -0
  41. package/as/stringAsNumber.d.mts +5 -0
  42. package/as/stringAsNumber.d.ts +5 -0
  43. package/as/stringAsNumber.js +16 -0
  44. package/as/stringAsNumber.mjs +14 -0
  45. package/as/stringAsRecord.d.mts +5 -0
  46. package/as/stringAsRecord.d.ts +5 -0
  47. package/as/stringAsRecord.js +15 -0
  48. package/as/stringAsRecord.mjs +13 -0
  49. package/as/stringAsSet.d.mts +5 -0
  50. package/as/stringAsSet.d.ts +5 -0
  51. package/as/stringAsSet.js +13 -0
  52. package/as/stringAsSet.mjs +11 -0
  53. package/babel.d.mts +21 -0
  54. package/babel.d.ts +21 -2
  55. package/babel.js +57 -53
  56. package/babel.mjs +65 -0
  57. package/config/enable$GetSet.js +13 -14
  58. package/config/enable$GetSet.mjs +13 -14
  59. package/config/enableReactComponents.d.mts +9 -0
  60. package/config/enableReactComponents.d.ts +4 -2
  61. package/config/enableReactComponents.js +13 -10
  62. package/config/enableReactComponents.mjs +13 -10
  63. package/config/enableReactNativeComponents.d.mts +22 -0
  64. package/config/enableReactNativeComponents.d.ts +6 -4
  65. package/config/enableReactNativeComponents.js +43 -47
  66. package/config/enableReactNativeComponents.mjs +43 -47
  67. package/config/enableReactTracking.d.mts +7 -0
  68. package/config/enableReactTracking.d.ts +3 -2
  69. package/config/enableReactTracking.js +33 -38
  70. package/config/enableReactTracking.mjs +33 -38
  71. package/config/enableReactUse.d.mts +10 -0
  72. package/config/enableReactUse.d.ts +4 -1
  73. package/config/enableReactUse.js +15 -14
  74. package/config/enableReactUse.mjs +15 -14
  75. package/config/{enable$GetSet.d.ts → enable_GetSet.d.mts} +4 -2
  76. package/config/enable_GetSet.d.ts +10 -0
  77. package/config/enable_PeekAssign.d.mts +10 -0
  78. package/config/enable_PeekAssign.d.ts +4 -2
  79. package/config/enable_PeekAssign.js +13 -14
  80. package/config/enable_PeekAssign.mjs +13 -14
  81. package/helpers/pageHash.d.mts +9 -0
  82. package/helpers/pageHash.d.ts +2 -0
  83. package/helpers/pageHash.js +25 -30
  84. package/helpers/pageHash.mjs +25 -30
  85. package/helpers/pageHashParams.d.mts +9 -0
  86. package/helpers/pageHashParams.d.ts +2 -0
  87. package/helpers/pageHashParams.js +34 -37
  88. package/helpers/pageHashParams.mjs +34 -37
  89. package/helpers/time.d.mts +6 -0
  90. package/helpers/time.d.ts +6 -3
  91. package/helpers/time.js +17 -17
  92. package/helpers/time.mjs +17 -17
  93. package/helpers/trackHistory.d.mts +6 -0
  94. package/helpers/trackHistory.d.ts +6 -0
  95. package/helpers/trackHistory.js +21 -0
  96. package/helpers/trackHistory.mjs +19 -0
  97. package/helpers/undoRedo.d.mts +37 -0
  98. package/helpers/undoRedo.d.ts +37 -0
  99. package/helpers/undoRedo.js +68 -0
  100. package/helpers/undoRedo.mjs +66 -0
  101. package/index.d.mts +404 -0
  102. package/index.d.ts +371 -28
  103. package/index.js +2003 -2164
  104. package/index.mjs +2003 -2164
  105. package/package.json +254 -185
  106. package/persist-plugins/async-storage.d.mts +18 -0
  107. package/persist-plugins/async-storage.d.ts +6 -3
  108. package/persist-plugins/async-storage.js +79 -86
  109. package/persist-plugins/async-storage.mjs +79 -86
  110. package/persist-plugins/indexeddb.d.mts +29 -0
  111. package/persist-plugins/indexeddb.d.ts +6 -3
  112. package/persist-plugins/indexeddb.js +331 -348
  113. package/persist-plugins/indexeddb.mjs +331 -348
  114. package/persist-plugins/local-storage.d.mts +23 -0
  115. package/persist-plugins/local-storage.d.ts +8 -5
  116. package/persist-plugins/local-storage.js +74 -76
  117. package/persist-plugins/local-storage.mjs +74 -76
  118. package/persist-plugins/mmkv.d.mts +18 -0
  119. package/persist-plugins/mmkv.d.ts +6 -3
  120. package/persist-plugins/mmkv.js +82 -86
  121. package/persist-plugins/mmkv.mjs +82 -86
  122. package/react-hooks/createObservableHook.d.mts +5 -0
  123. package/react-hooks/createObservableHook.d.ts +4 -1
  124. package/react-hooks/createObservableHook.js +29 -30
  125. package/react-hooks/createObservableHook.mjs +25 -30
  126. package/react-hooks/useHover.d.mts +5 -0
  127. package/react-hooks/useHover.d.ts +5 -3
  128. package/react-hooks/useHover.js +29 -29
  129. package/react-hooks/useHover.mjs +29 -29
  130. package/react-hooks/useMeasure.d.mts +9 -0
  131. package/react-hooks/useMeasure.d.ts +5 -2
  132. package/react-hooks/useMeasure.js +30 -32
  133. package/react-hooks/useMeasure.mjs +30 -32
  134. package/react-hooks/useObservableNextRouter.d.mts +35 -0
  135. package/react-hooks/useObservableNextRouter.d.ts +9 -7
  136. package/react-hooks/useObservableNextRouter.js +64 -77
  137. package/react-hooks/useObservableNextRouter.mjs +60 -77
  138. package/react.d.mts +157 -0
  139. package/react.d.ts +157 -21
  140. package/react.js +458 -749
  141. package/react.mjs +457 -752
  142. package/sync-plugins/crud.d.mts +54 -0
  143. package/sync-plugins/crud.d.ts +12 -10
  144. package/sync-plugins/crud.js +253 -270
  145. package/sync-plugins/crud.mjs +253 -270
  146. package/sync-plugins/fetch.d.mts +21 -0
  147. package/sync-plugins/fetch.d.ts +7 -4
  148. package/sync-plugins/fetch.js +50 -37
  149. package/sync-plugins/fetch.mjs +50 -37
  150. package/sync-plugins/keel.d.mts +108 -0
  151. package/sync-plugins/keel.d.ts +17 -15
  152. package/sync-plugins/keel.js +229 -462
  153. package/sync-plugins/keel.mjs +227 -464
  154. package/sync-plugins/supabase.d.mts +39 -0
  155. package/sync-plugins/supabase.d.ts +16 -14
  156. package/sync-plugins/supabase.js +128 -128
  157. package/sync-plugins/supabase.mjs +128 -128
  158. package/sync-plugins/tanstack-query.d.mts +14 -0
  159. package/sync-plugins/tanstack-query.d.ts +7 -4
  160. package/sync-plugins/tanstack-query.js +51 -57
  161. package/sync-plugins/tanstack-query.mjs +51 -57
  162. package/sync-plugins/tanstack-react-query.d.mts +8 -0
  163. package/sync-plugins/tanstack-react-query.d.ts +6 -1
  164. package/sync-plugins/tanstack-react-query.js +2 -2
  165. package/sync-plugins/tanstack-react-query.mjs +2 -2
  166. package/sync.d.mts +351 -0
  167. package/sync.d.ts +349 -9
  168. package/sync.js +909 -962
  169. package/sync.mjs +919 -972
  170. package/trace.d.mts +9 -0
  171. package/trace.d.ts +9 -4
  172. package/trace.js +72 -62
  173. package/trace.mjs +72 -62
  174. package/types/babel.d.ts +1 -12
  175. package/babel.js.map +0 -1
  176. package/config/enable$GetSet.js.map +0 -1
  177. package/config/enable$GetSet.mjs.map +0 -1
  178. package/config/enableReactComponents.js.map +0 -1
  179. package/config/enableReactComponents.mjs.map +0 -1
  180. package/config/enableReactNativeComponents.js.map +0 -1
  181. package/config/enableReactNativeComponents.mjs.map +0 -1
  182. package/config/enableReactTracking.js.map +0 -1
  183. package/config/enableReactTracking.mjs.map +0 -1
  184. package/config/enableReactUse.js.map +0 -1
  185. package/config/enableReactUse.mjs.map +0 -1
  186. package/config/enable_PeekAssign.js.map +0 -1
  187. package/config/enable_PeekAssign.mjs.map +0 -1
  188. package/helpers/pageHash.js.map +0 -1
  189. package/helpers/pageHash.mjs.map +0 -1
  190. package/helpers/pageHashParams.js.map +0 -1
  191. package/helpers/pageHashParams.mjs.map +0 -1
  192. package/helpers/time.js.map +0 -1
  193. package/helpers/time.mjs.map +0 -1
  194. package/history.d.ts +0 -1
  195. package/history.js +0 -24
  196. package/history.js.map +0 -1
  197. package/history.mjs +0 -22
  198. package/history.mjs.map +0 -1
  199. package/index.js.map +0 -1
  200. package/index.mjs.map +0 -1
  201. package/persist-plugins/async-storage.js.map +0 -1
  202. package/persist-plugins/async-storage.mjs.map +0 -1
  203. package/persist-plugins/indexeddb.js.map +0 -1
  204. package/persist-plugins/indexeddb.mjs.map +0 -1
  205. package/persist-plugins/local-storage.js.map +0 -1
  206. package/persist-plugins/local-storage.mjs.map +0 -1
  207. package/persist-plugins/mmkv.js.map +0 -1
  208. package/persist-plugins/mmkv.mjs.map +0 -1
  209. package/react-hooks/createObservableHook.js.map +0 -1
  210. package/react-hooks/createObservableHook.mjs.map +0 -1
  211. package/react-hooks/useHover.js.map +0 -1
  212. package/react-hooks/useHover.mjs.map +0 -1
  213. package/react-hooks/useMeasure.js.map +0 -1
  214. package/react-hooks/useMeasure.mjs.map +0 -1
  215. package/react-hooks/useObservableNextRouter.js.map +0 -1
  216. package/react-hooks/useObservableNextRouter.mjs.map +0 -1
  217. package/react.js.map +0 -1
  218. package/react.mjs.map +0 -1
  219. package/src/ObservableObject.ts +0 -1350
  220. package/src/ObservablePrimitive.ts +0 -62
  221. package/src/babel/index.ts +0 -83
  222. package/src/batching.ts +0 -357
  223. package/src/computed.ts +0 -18
  224. package/src/config/enable$GetSet.ts +0 -30
  225. package/src/config/enableReactComponents.ts +0 -26
  226. package/src/config/enableReactNativeComponents.ts +0 -102
  227. package/src/config/enableReactTracking.ts +0 -62
  228. package/src/config/enableReactUse.ts +0 -32
  229. package/src/config/enable_PeekAssign.ts +0 -31
  230. package/src/config.ts +0 -47
  231. package/src/createObservable.ts +0 -47
  232. package/src/event.ts +0 -26
  233. package/src/globals.ts +0 -235
  234. package/src/helpers/pageHash.ts +0 -41
  235. package/src/helpers/pageHashParams.ts +0 -55
  236. package/src/helpers/time.ts +0 -30
  237. package/src/helpers.ts +0 -231
  238. package/src/history/trackHistory.ts +0 -29
  239. package/src/history/undoRedo.ts +0 -111
  240. package/src/is.ts +0 -63
  241. package/src/linked.ts +0 -17
  242. package/src/observable.ts +0 -32
  243. package/src/observableInterfaces.ts +0 -151
  244. package/src/observableTypes.ts +0 -232
  245. package/src/observe.ts +0 -89
  246. package/src/old-plugins/firebase.ts +0 -1053
  247. package/src/onChange.ts +0 -146
  248. package/src/persist/configureObservablePersistence.ts +0 -7
  249. package/src/persist/fieldTransformer.ts +0 -149
  250. package/src/persist/observablePersistRemoteFunctionsAdapter.ts +0 -39
  251. package/src/persist/persistObservable.ts +0 -1034
  252. package/src/persist-plugins/async-storage.ts +0 -99
  253. package/src/persist-plugins/indexeddb.ts +0 -432
  254. package/src/persist-plugins/local-storage.ts +0 -86
  255. package/src/persist-plugins/mmkv.ts +0 -91
  256. package/src/proxy.ts +0 -28
  257. package/src/react/Computed.tsx +0 -8
  258. package/src/react/For.tsx +0 -116
  259. package/src/react/Memo.tsx +0 -4
  260. package/src/react/Reactive.tsx +0 -53
  261. package/src/react/Show.tsx +0 -33
  262. package/src/react/Switch.tsx +0 -43
  263. package/src/react/react-globals.ts +0 -3
  264. package/src/react/reactInterfaces.ts +0 -32
  265. package/src/react/reactive-observer.tsx +0 -210
  266. package/src/react/useComputed.ts +0 -36
  267. package/src/react/useEffectOnce.ts +0 -41
  268. package/src/react/useIsMounted.ts +0 -16
  269. package/src/react/useMount.ts +0 -15
  270. package/src/react/useObservable.ts +0 -24
  271. package/src/react/useObservableReducer.ts +0 -52
  272. package/src/react/useObservableState.ts +0 -30
  273. package/src/react/useObserve.ts +0 -54
  274. package/src/react/useObserveEffect.ts +0 -40
  275. package/src/react/usePauseProvider.tsx +0 -16
  276. package/src/react/useSelector.ts +0 -167
  277. package/src/react/useUnmount.ts +0 -8
  278. package/src/react/useWhen.ts +0 -9
  279. package/src/react-hooks/createObservableHook.ts +0 -53
  280. package/src/react-hooks/useHover.ts +0 -40
  281. package/src/react-hooks/useMeasure.ts +0 -48
  282. package/src/react-hooks/useObservableNextRouter.ts +0 -137
  283. package/src/retry.ts +0 -71
  284. package/src/setupTracking.ts +0 -26
  285. package/src/sync/activateSyncedNode.ts +0 -128
  286. package/src/sync/configureObservableSync.ts +0 -7
  287. package/src/sync/persistTypes.ts +0 -216
  288. package/src/sync/syncHelpers.ts +0 -180
  289. package/src/sync/syncObservable.ts +0 -1056
  290. package/src/sync/syncObservableAdapter.ts +0 -31
  291. package/src/sync/syncTypes.ts +0 -189
  292. package/src/sync/synced.ts +0 -21
  293. package/src/sync-plugins/crud.ts +0 -412
  294. package/src/sync-plugins/fetch.ts +0 -80
  295. package/src/sync-plugins/keel.ts +0 -495
  296. package/src/sync-plugins/supabase.ts +0 -249
  297. package/src/sync-plugins/tanstack-query.ts +0 -113
  298. package/src/sync-plugins/tanstack-react-query.ts +0 -12
  299. package/src/trace/traceHelpers.ts +0 -11
  300. package/src/trace/useTraceListeners.ts +0 -34
  301. package/src/trace/useTraceUpdates.ts +0 -24
  302. package/src/trace/useVerifyNotTracking.ts +0 -33
  303. package/src/trace/useVerifyOneRender.ts +0 -10
  304. package/src/trackSelector.ts +0 -52
  305. package/src/tracking.ts +0 -43
  306. package/src/types/babel.d.ts +0 -12
  307. package/src/when.ts +0 -75
  308. package/sync-plugins/crud.js.map +0 -1
  309. package/sync-plugins/crud.mjs.map +0 -1
  310. package/sync-plugins/fetch.js.map +0 -1
  311. package/sync-plugins/fetch.mjs.map +0 -1
  312. package/sync-plugins/keel.js.map +0 -1
  313. package/sync-plugins/keel.mjs.map +0 -1
  314. package/sync-plugins/supabase.js.map +0 -1
  315. package/sync-plugins/supabase.mjs.map +0 -1
  316. package/sync-plugins/tanstack-query.js.map +0 -1
  317. package/sync-plugins/tanstack-query.mjs.map +0 -1
  318. package/sync-plugins/tanstack-react-query.js.map +0 -1
  319. package/sync-plugins/tanstack-react-query.mjs.map +0 -1
  320. package/sync.js.map +0 -1
  321. package/sync.mjs.map +0 -1
  322. package/trace.js.map +0 -1
  323. package/trace.mjs.map +0 -1
@@ -1,492 +1,260 @@
1
1
  'use strict';
2
2
 
3
- var require$$0 = require('crypto');
4
- var require$$1 = require('util');
3
+ var ksuid = require('ksuid');
5
4
  var state = require('@legendapp/state');
6
5
  var sync = require('@legendapp/state/sync');
7
6
  var crud = require('@legendapp/state/sync-plugins/crud');
8
7
 
9
- var base62$1 = {};
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
9
 
11
- const maxLength = (array, from, to) => Math.ceil(array.length * Math.log2(from) / Math.log2(to));
10
+ var ksuid__default = /*#__PURE__*/_interopDefault(ksuid);
12
11
 
13
- function baseConvertIntArray$1 (array, {from, to, fixedLength = null}) {
14
- const length = fixedLength === null ? maxLength(array, from, to) : fixedLength;
15
- const result = new Array(length);
16
-
17
- // Each iteration prepends the resulting value, so start the offset at the end.
18
- let offset = length;
19
- let input = array;
20
- while (input.length > 0) {
21
- if (offset === 0) {
22
- throw new RangeError(`Fixed length of ${fixedLength} is too small, expected at least ${maxLength(array, from, to)}`)
23
- }
24
-
25
- const quotients = [];
26
- let remainder = 0;
27
-
28
- for (const digit of input) {
29
- const acc = digit + remainder * from;
30
- const q = Math.floor(acc / to);
31
- remainder = acc % to;
32
-
33
- if (quotients.length > 0 || q > 0) {
34
- quotients.push(q);
35
- }
36
- }
37
-
38
- result[--offset] = remainder;
39
- input = quotients;
40
- }
41
-
42
- // Trim leading padding, unless length is fixed.
43
- if (fixedLength === null) {
44
- return offset > 0 ? result.slice(offset) : result
45
- }
46
-
47
- // Fill in any holes in the result array.
48
- while (offset > 0) {
49
- result[--offset] = 0;
50
- }
51
- return result
52
- }
53
- var baseConvertIntArray_1 = baseConvertIntArray$1;
54
-
55
- const baseConvertIntArray = baseConvertIntArray_1;
56
-
57
- const CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
58
-
59
- function encode (buffer, fixedLength) {
60
- return baseConvertIntArray(buffer, { from: 256, to: 62, fixedLength })
61
- .map(value => CHARS[value])
62
- .join('')
63
- }
64
- base62$1.encode = encode;
65
-
66
- function decode (string, fixedLength) {
67
- // Optimization from https://github.com/andrew/base62.js/pull/31.
68
- const input = Array.from(string, char => {
69
- const charCode = char.charCodeAt(0);
70
- if (charCode < 58) return charCode - 48
71
- if (charCode < 91) return charCode - 55
72
- return charCode - 61
73
- });
74
- return Buffer.from(baseConvertIntArray(input, { from: 62, to: 256, fixedLength }))
75
- }
76
- base62$1.decode = decode;
77
-
78
- const { randomBytes } = require$$0;
79
- const { inspect: { custom: customInspectSymbol }, promisify } = require$$1;
80
- const base62 = base62$1;
81
-
82
- const asyncRandomBytes = promisify(randomBytes);
83
-
84
- // KSUID's epoch starts more recently so that the 32-bit number space gives a
85
- // significantly higher useful lifetime of around 136 years from March 2014.
86
- // This number (14e11) was picked to be easy to remember.
87
- const EPOCH_IN_MS = 14e11;
88
-
89
- const MAX_TIME_IN_MS = 1e3 * (2 ** 32 - 1) + EPOCH_IN_MS;
90
-
91
- // Timestamp is a uint32
92
- const TIMESTAMP_BYTE_LENGTH = 4;
93
-
94
- // Payload is 16-bytes
95
- const PAYLOAD_BYTE_LENGTH = 16;
96
-
97
- // KSUIDs are 20 bytes when binary encoded
98
- const BYTE_LENGTH = TIMESTAMP_BYTE_LENGTH + PAYLOAD_BYTE_LENGTH;
99
-
100
- // The length of a KSUID when string (base62) encoded
101
- const STRING_ENCODED_LENGTH = 27;
102
-
103
- const TIME_IN_MS_ASSERTION = `Valid KSUID timestamps must be in milliseconds since ${new Date(0).toISOString()},
104
- no earlier than ${new Date(EPOCH_IN_MS).toISOString()} and no later than ${new Date(MAX_TIME_IN_MS).toISOString()}
105
- `.trim().replace(/(\n|\s)+/g, ' ').replace(/\.000Z/g, 'Z');
106
-
107
- const VALID_ENCODING_ASSERTION = `Valid encoded KSUIDs are ${STRING_ENCODED_LENGTH} characters`;
108
-
109
- const VALID_BUFFER_ASSERTION = `Valid KSUID buffers are ${BYTE_LENGTH} bytes`;
110
-
111
- const VALID_PAYLOAD_ASSERTION = `Valid KSUID payloads are ${PAYLOAD_BYTE_LENGTH} bytes`;
112
-
113
- function fromParts (timeInMs, payload) {
114
- const timestamp = Math.floor((timeInMs - EPOCH_IN_MS) / 1e3);
115
- const timestampBuffer = Buffer.allocUnsafe(TIMESTAMP_BYTE_LENGTH);
116
- timestampBuffer.writeUInt32BE(timestamp, 0);
117
-
118
- return Buffer.concat([timestampBuffer, payload], BYTE_LENGTH)
119
- }
120
-
121
- const bufferLookup = new WeakMap();
122
-
123
- class KSUID {
124
- constructor (buffer) {
125
- if (!KSUID.isValid(buffer)) {
126
- throw new TypeError(VALID_BUFFER_ASSERTION)
127
- }
128
-
129
- bufferLookup.set(this, buffer);
130
- Object.defineProperty(this, 'buffer', {
131
- enumerable: true,
132
- get () { return Buffer.from(buffer) }
133
- });
134
- }
135
-
136
- get raw () {
137
- return Buffer.from(bufferLookup.get(this).slice(0))
138
- }
139
-
140
- get date () {
141
- return new Date(1e3 * this.timestamp + EPOCH_IN_MS)
142
- }
143
-
144
- get timestamp () {
145
- return bufferLookup.get(this).readUInt32BE(0)
146
- }
147
-
148
- get payload () {
149
- const payload = bufferLookup.get(this).slice(TIMESTAMP_BYTE_LENGTH, BYTE_LENGTH);
150
- return Buffer.from(payload)
151
- }
152
-
153
- get string () {
154
- const encoded = base62.encode(bufferLookup.get(this), STRING_ENCODED_LENGTH);
155
- return encoded.padStart(STRING_ENCODED_LENGTH, '0')
156
- }
157
-
158
- compare (other) {
159
- if (!bufferLookup.has(other)) {
160
- return 0
161
- }
162
-
163
- return bufferLookup.get(this).compare(bufferLookup.get(other), 0, BYTE_LENGTH)
164
- }
165
-
166
- equals (other) {
167
- return this === other || (bufferLookup.has(other) && this.compare(other) === 0)
168
- }
169
-
170
- toString () {
171
- return `${this[Symbol.toStringTag]} { ${this.string} }`
172
- }
173
-
174
- toJSON () {
175
- return this.string
176
- }
177
-
178
- [customInspectSymbol] () {
179
- return this.toString()
180
- }
181
-
182
- static async random (time = Date.now()) {
183
- const payload = await asyncRandomBytes(PAYLOAD_BYTE_LENGTH);
184
- return new KSUID(fromParts(Number(time), payload))
185
- }
186
-
187
- static randomSync (time = Date.now()) {
188
- const payload = randomBytes(PAYLOAD_BYTE_LENGTH);
189
- return new KSUID(fromParts(Number(time), payload))
190
- }
191
-
192
- static fromParts (timeInMs, payload) {
193
- if (!Number.isInteger(timeInMs) || timeInMs < EPOCH_IN_MS || timeInMs > MAX_TIME_IN_MS) {
194
- throw new TypeError(TIME_IN_MS_ASSERTION)
195
- }
196
- if (!Buffer.isBuffer(payload) || payload.byteLength !== PAYLOAD_BYTE_LENGTH) {
197
- throw new TypeError(VALID_PAYLOAD_ASSERTION)
198
- }
199
-
200
- return new KSUID(fromParts(timeInMs, payload))
201
- }
202
-
203
- static isValid (buffer) {
204
- return Buffer.isBuffer(buffer) && buffer.byteLength === BYTE_LENGTH
205
- }
206
-
207
- static parse (string) {
208
- if (string.length !== STRING_ENCODED_LENGTH) {
209
- throw new TypeError(VALID_ENCODING_ASSERTION)
210
- }
211
-
212
- const decoded = base62.decode(string, BYTE_LENGTH);
213
- if (decoded.byteLength === BYTE_LENGTH) {
214
- return new KSUID(decoded)
215
- }
216
-
217
- const buffer = Buffer.allocUnsafe(BYTE_LENGTH);
218
- const padEnd = BYTE_LENGTH - decoded.byteLength;
219
- buffer.fill(0, 0, padEnd);
220
- decoded.copy(buffer, padEnd);
221
- return new KSUID(buffer)
222
- }
223
- }
224
- Object.defineProperty(KSUID.prototype, Symbol.toStringTag, { value: 'KSUID' });
225
- // A string-encoded maximum value for a KSUID
226
- Object.defineProperty(KSUID, 'MAX_STRING_ENCODED', { value: 'aWgEPTl1tmebfsQzFP4bxwgy80V' });
227
- // A string-encoded minimum value for a KSUID
228
- Object.defineProperty(KSUID, 'MIN_STRING_ENCODED', { value: '000000000000000000000000000' });
229
-
230
- var ksuid = KSUID;
231
-
232
- const { clone } = state.internal;
233
- const KeelKeys = ['createdAt', 'updatedAt'];
12
+ // src/sync-plugins/keel.ts
13
+ var { clone } = state.internal;
14
+ var KeelKeys = ["createdAt", "updatedAt"];
234
15
  function generateKeelId() {
235
- return ksuid.randomSync().string;
16
+ return ksuid__default.default.randomSync().string;
236
17
  }
237
- const keelConfig = {};
238
- const modifiedClients = new WeakSet();
239
- const isEnabled$ = state.observable(true);
18
+ var keelConfig = {};
19
+ var modifiedClients = /* @__PURE__ */ new WeakSet();
20
+ var isEnabled$ = state.observable(true);
240
21
  async function ensureAuthToken() {
241
- await state.when(isEnabled$.get());
242
- let isAuthed = await keelConfig.client.auth.isAuthenticated();
243
- if (!isAuthed) {
244
- isAuthed = await keelConfig.client.auth.refresh();
245
- }
246
- return isAuthed;
22
+ await state.when(isEnabled$.get());
23
+ let isAuthed = await keelConfig.client.auth.isAuthenticated();
24
+ if (!isAuthed) {
25
+ isAuthed = await keelConfig.client.auth.refresh();
26
+ }
27
+ return isAuthed;
247
28
  }
248
29
  async function handleApiError(error, retry) {
249
- if (error.type === 'unauthorized' || error.type === 'forbidden') {
250
- console.warn('Keel token expired, refreshing...');
251
- await ensureAuthToken();
252
- // Retry
253
- retry === null || retry === void 0 ? void 0 : retry();
254
- }
30
+ if (error.type === "unauthorized" || error.type === "forbidden") {
31
+ console.warn("Keel token expired, refreshing...");
32
+ await ensureAuthToken();
33
+ }
255
34
  }
256
35
  function convertObjectToCreate(item) {
257
- const cloned = clone(item);
258
- Object.keys(cloned).forEach((key) => {
259
- if (key.endsWith('Id')) {
260
- if (cloned[key]) {
261
- cloned[key.slice(0, -2)] = { id: cloned[key] };
262
- }
263
- delete cloned[key];
264
- }
265
- });
266
- delete cloned.createdAt;
267
- delete cloned.updatedAt;
268
- return cloned;
36
+ const cloned = clone(item);
37
+ Object.keys(cloned).forEach((key) => {
38
+ if (key.endsWith("Id")) {
39
+ if (cloned[key]) {
40
+ cloned[key.slice(0, -2)] = { id: cloned[key] };
41
+ }
42
+ delete cloned[key];
43
+ }
44
+ });
45
+ delete cloned.createdAt;
46
+ delete cloned.updatedAt;
47
+ return cloned;
269
48
  }
270
49
  function getSyncedKeelConfiguration() {
271
- return keelConfig;
50
+ return keelConfig;
272
51
  }
273
52
  function configureSyncedKeel(config) {
274
- const { enabled, realtimePlugin, client, ...rest } = config;
275
- Object.assign(keelConfig, sync.removeNullUndefined(rest));
276
- if (enabled !== undefined) {
277
- isEnabled$.set(enabled);
278
- }
279
- if (realtimePlugin) {
280
- keelConfig.realtimePlugin = realtimePlugin;
281
- if (client && !modifiedClients.has(client)) {
282
- modifiedClients.add(client);
283
- const queries = client.api.queries;
284
- Object.keys(queries).forEach((key) => {
285
- if (key.startsWith('list')) {
286
- const oldFn = queries[key];
287
- queries[key] = (i) => {
288
- const realtimeKey = [key, ...Object.values(i.where || {})]
289
- .filter((value) => value && typeof value !== 'object')
290
- .join('/');
291
- const subscribe = ({ refresh }) => {
292
- if (realtimeKey) {
293
- return realtimePlugin.subscribe(realtimeKey, refresh);
294
- }
295
- };
296
- return oldFn(i).then((ret) => {
297
- if (subscribe) {
298
- ret.subscribe = subscribe;
299
- ret.subscribeKey = realtimeKey;
300
- }
301
- return ret;
302
- });
303
- };
304
- }
53
+ const { enabled, realtimePlugin, client, ...rest } = config;
54
+ Object.assign(keelConfig, sync.removeNullUndefined(rest));
55
+ if (enabled !== void 0) {
56
+ isEnabled$.set(enabled);
57
+ }
58
+ if (realtimePlugin) {
59
+ keelConfig.realtimePlugin = realtimePlugin;
60
+ if (client && !modifiedClients.has(client)) {
61
+ modifiedClients.add(client);
62
+ const queries = client.api.queries;
63
+ Object.keys(queries).forEach((key) => {
64
+ if (key.startsWith("list")) {
65
+ const oldFn = queries[key];
66
+ queries[key] = (i) => {
67
+ const realtimeKey = [key, ...Object.values(i.where || {})].filter((value) => value && typeof value !== "object").join("/");
68
+ const subscribe = ({ refresh }) => {
69
+ if (realtimeKey) {
70
+ return realtimePlugin.subscribe(realtimeKey, refresh);
71
+ }
72
+ };
73
+ return oldFn(i).then((ret) => {
74
+ if (subscribe) {
75
+ ret.subscribe = subscribe;
76
+ ret.subscribeKey = realtimeKey;
77
+ }
78
+ return ret;
305
79
  });
80
+ };
306
81
  }
82
+ });
307
83
  }
84
+ }
308
85
  }
309
- const NumPerPage = 200;
86
+ var NumPerPage = 200;
310
87
  async function getAllPages(listFn, params) {
311
- const allData = [];
312
- let pageInfo = undefined;
313
- let subscribe_;
314
- let subscribeKey_;
315
- const { first: firstParam } = params;
316
- do {
317
- const first = firstParam ? Math.min(firstParam - allData.length, NumPerPage) : NumPerPage;
318
- if (first < 1) {
319
- break;
320
- }
321
- const pageEndCursor = pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.endCursor;
322
- const paramsWithCursor = pageEndCursor
323
- ? { first, ...params, after: pageEndCursor }
324
- : { first, ...params };
325
- pageInfo = undefined;
326
- const ret = await listFn(paramsWithCursor);
327
- if (ret) {
328
- // @ts-expect-error TODOKEEL
329
- const { data, error, subscribe, subscribeKey } = ret;
330
- if (subscribe) {
331
- subscribe_ = subscribe;
332
- subscribeKey_ = subscribeKey;
333
- }
334
- if (error) {
335
- await handleApiError(error);
336
- throw new Error(error.message);
337
- }
338
- else if (data) {
339
- pageInfo = data.pageInfo;
340
- allData.push(...data.results);
341
- }
342
- }
343
- } while (pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo.hasNextPage);
344
- return { results: allData, subscribe: subscribe_, subscribeKey: subscribeKey_ };
88
+ const allData = [];
89
+ let pageInfo = void 0;
90
+ let subscribe_;
91
+ let subscribeKey_;
92
+ const { first: firstParam } = params;
93
+ do {
94
+ const first = firstParam ? Math.min(firstParam - allData.length, NumPerPage) : NumPerPage;
95
+ if (first < 1) {
96
+ break;
97
+ }
98
+ const pageEndCursor = pageInfo == null ? void 0 : pageInfo.endCursor;
99
+ const paramsWithCursor = pageEndCursor ? { first, ...params, after: pageEndCursor } : { first, ...params };
100
+ pageInfo = void 0;
101
+ const ret = await listFn(paramsWithCursor);
102
+ if (ret) {
103
+ const { data, error, subscribe, subscribeKey } = ret;
104
+ if (subscribe) {
105
+ subscribe_ = subscribe;
106
+ subscribeKey_ = subscribeKey;
107
+ }
108
+ if (error) {
109
+ await handleApiError(error);
110
+ throw new Error(error.message);
111
+ } else if (data) {
112
+ pageInfo = data.pageInfo;
113
+ allData.push(...data.results);
114
+ }
115
+ }
116
+ } while (pageInfo == null ? void 0 : pageInfo.hasNextPage);
117
+ return { results: allData, subscribe: subscribe_, subscribeKey: subscribeKey_ };
345
118
  }
346
119
  function syncedKeel(props) {
347
- const { realtimePlugin } = keelConfig;
348
- props = { ...keelConfig, ...props };
349
- const { get: getParam, list: listParam, create: createParam, update: updateParam, delete: deleteParam, first, where: whereParam, waitFor, fieldDeleted, ...rest } = props;
350
- const { changesSince } = props;
351
- const asType = getParam ? 'value' : props.as;
352
- let subscribeFn;
353
- const subscribeFnKey$ = state.observable('');
354
- const fieldCreatedAt = 'createdAt';
355
- const fieldUpdatedAt = 'updatedAt';
356
- const list = listParam
357
- ? async (listParams) => {
358
- const { lastSync, refresh } = listParams;
359
- const queryBySync = !!lastSync && changesSince === 'last-sync';
360
- // If querying with lastSync pass it to the "where" parameters
361
- const where = Object.assign(queryBySync ? { updatedAt: { after: new Date(lastSync + 1) } } : {}, state.isFunction(whereParam) ? whereParam() : whereParam);
362
- const params = { where, first };
363
- // TODO: Error?
364
- const { results, subscribe, subscribeKey } = await getAllPages(listParam, params);
365
- if (subscribe) {
366
- subscribeFn = () => subscribe({ refresh });
367
- subscribeFnKey$.set(subscribeKey);
368
- }
369
- return results;
370
- }
371
- : undefined;
372
- const get = getParam
373
- ? async (getParams) => {
374
- const { refresh } = getParams;
375
- // @ts-expect-error TODOKEEL
376
- const { data, error, subscribe, subscribeKey } = await getParam({ refresh });
377
- if (subscribe) {
378
- subscribeFn = () => subscribe({ refresh });
379
- subscribeFnKey$.set(subscribeKey);
380
- }
381
- if (error) {
382
- throw new Error(error.message);
383
- }
384
- else {
385
- return data;
386
- }
387
- }
388
- : undefined;
389
- const onSaved = ({ saved }) => {
390
- if (saved) {
391
- const updatedAt = saved[fieldUpdatedAt];
392
- if (updatedAt && realtimePlugin) {
393
- const subscribeFnKey = subscribeFnKey$.get();
394
- if (subscribeFnKey) {
395
- realtimePlugin.setLatestChange(subscribeFnKey, updatedAt);
396
- }
397
- }
398
- }
399
- };
400
- const handleSetError = async (error, params, isCreate) => {
401
- var _a, _b, _c;
402
- const { retryNum, cancelRetry, update } = params;
403
- if (isCreate &&
404
- ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('for the unique')) &&
405
- ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('must be unique'))) {
406
- if (__DEV__) {
407
- console.log('Creating duplicate data already saved, just ignore.');
408
- }
409
- // This has already been saved but didn't update pending changes, so just update with {} to clear the pending state
410
- update({
411
- value: {},
412
- mode: 'assign',
413
- });
414
- }
415
- else if (error.type === 'bad_request') {
416
- (_c = keelConfig.onError) === null || _c === void 0 ? void 0 : _c.call(keelConfig, error);
417
- if (retryNum > 4) {
418
- cancelRetry();
419
- }
420
- throw new Error(error.message);
421
- }
422
- else {
423
- await handleApiError(error);
424
- throw new Error(error.message);
425
- }
426
- };
427
- const create = createParam
428
- ? async (input, params) => {
429
- const { data, error } = await createParam(convertObjectToCreate(input));
430
- if (error) {
431
- handleSetError(error, params, true);
432
- }
433
- return data;
434
- }
435
- : undefined;
436
- const update = updateParam
437
- ? async (input, params) => {
438
- const id = input.id;
439
- const values = convertObjectToCreate(input);
440
- delete values.id;
441
- delete values.createdAt;
442
- delete values.updatedAt;
443
- if (!state.isEmpty(values)) {
444
- const { data, error } = await updateParam({ where: { id }, values });
445
- if (error) {
446
- handleSetError(error, params, false);
447
- }
448
- return data;
449
- }
450
- }
451
- : undefined;
452
- const deleteFn = deleteParam
453
- ? async ({ id }, params) => {
454
- const { data, error } = await deleteParam({ id });
455
- if (error) {
456
- handleSetError(error, params, false);
457
- }
458
- return data;
120
+ const { realtimePlugin } = keelConfig;
121
+ props = { ...keelConfig, ...props };
122
+ const {
123
+ get: getParam,
124
+ list: listParam,
125
+ create: createParam,
126
+ update: updateParam,
127
+ delete: deleteParam,
128
+ first,
129
+ where: whereParam,
130
+ waitFor,
131
+ fieldDeleted,
132
+ ...rest
133
+ } = props;
134
+ const { changesSince } = props;
135
+ const asType = getParam ? "value" : props.as;
136
+ let subscribeFn;
137
+ const subscribeFnKey$ = state.observable("");
138
+ const fieldCreatedAt = "createdAt";
139
+ const fieldUpdatedAt = "updatedAt";
140
+ const list = listParam ? async (listParams) => {
141
+ const { lastSync, refresh } = listParams;
142
+ const queryBySync = !!lastSync && changesSince === "last-sync";
143
+ const where = Object.assign(
144
+ queryBySync ? { updatedAt: { after: new Date(lastSync + 1) } } : {},
145
+ state.isFunction(whereParam) ? whereParam() : whereParam
146
+ );
147
+ const params = { where, first };
148
+ const { results, subscribe: subscribe2, subscribeKey } = await getAllPages(listParam, params);
149
+ if (subscribe2) {
150
+ subscribeFn = () => subscribe2({ refresh });
151
+ subscribeFnKey$.set(subscribeKey);
152
+ }
153
+ return results;
154
+ } : void 0;
155
+ const get = getParam ? async (getParams) => {
156
+ const { refresh } = getParams;
157
+ const { data, error, subscribe: subscribe2, subscribeKey } = await getParam({ refresh });
158
+ if (subscribe2) {
159
+ subscribeFn = () => subscribe2({ refresh });
160
+ subscribeFnKey$.set(subscribeKey);
161
+ }
162
+ if (error) {
163
+ throw new Error(error.message);
164
+ } else {
165
+ return data;
166
+ }
167
+ } : void 0;
168
+ const onSaved = ({ saved }) => {
169
+ if (saved) {
170
+ const updatedAt = saved[fieldUpdatedAt];
171
+ if (updatedAt && realtimePlugin) {
172
+ const subscribeFnKey = subscribeFnKey$.get();
173
+ if (subscribeFnKey) {
174
+ realtimePlugin.setLatestChange(subscribeFnKey, updatedAt);
459
175
  }
460
- : undefined;
461
- const subscribe = (params) => {
462
- let unsubscribe = undefined;
463
- state.when(subscribeFnKey$, () => {
464
- unsubscribe = subscribeFn(params);
465
- });
466
- return () => {
467
- unsubscribe === null || unsubscribe === void 0 ? void 0 : unsubscribe();
468
- };
469
- };
470
- return crud.syncedCrud({
471
- ...rest,
472
- as: asType,
473
- list,
474
- create,
475
- update,
476
- delete: deleteFn,
477
- waitFor: () => isEnabled$.get() && (waitFor ? state.computeSelector(waitFor) : true),
478
- onSaved,
479
- onSavedUpdate: 'createdUpdatedAt',
480
- fieldCreatedAt,
481
- fieldUpdatedAt,
482
- fieldDeleted: fieldDeleted || 'deleted',
483
- changesSince,
484
- updatePartial: true,
485
- subscribe,
486
- generateId: generateKeelId,
487
- // @ts-expect-error This errors because of the get/list union type
488
- get,
176
+ }
177
+ }
178
+ };
179
+ const handleSetError = async (error, params, isCreate) => {
180
+ var _a, _b, _c;
181
+ const { retryNum, cancelRetry, update: update2 } = params;
182
+ if (isCreate && ((_a = error.message) == null ? void 0 : _a.includes("for the unique")) && ((_b = error.message) == null ? void 0 : _b.includes("must be unique"))) {
183
+ if (__DEV__) {
184
+ console.log("Creating duplicate data already saved, just ignore.");
185
+ }
186
+ update2({
187
+ value: {},
188
+ mode: "assign"
189
+ });
190
+ } else if (error.type === "bad_request") {
191
+ (_c = keelConfig.onError) == null ? void 0 : _c.call(keelConfig, error);
192
+ if (retryNum > 4) {
193
+ cancelRetry();
194
+ }
195
+ throw new Error(error.message);
196
+ } else {
197
+ await handleApiError(error);
198
+ throw new Error(error.message);
199
+ }
200
+ };
201
+ const create = createParam ? async (input, params) => {
202
+ const { data, error } = await createParam(convertObjectToCreate(input));
203
+ if (error) {
204
+ handleSetError(error, params, true);
205
+ }
206
+ return data;
207
+ } : void 0;
208
+ const update = updateParam ? async (input, params) => {
209
+ const id = input.id;
210
+ const values = convertObjectToCreate(input);
211
+ delete values.id;
212
+ delete values.createdAt;
213
+ delete values.updatedAt;
214
+ if (!state.isEmpty(values)) {
215
+ const { data, error } = await updateParam({ where: { id }, values });
216
+ if (error) {
217
+ handleSetError(error, params, false);
218
+ }
219
+ return data;
220
+ }
221
+ } : void 0;
222
+ const deleteFn = deleteParam ? async ({ id }, params) => {
223
+ const { data, error } = await deleteParam({ id });
224
+ if (error) {
225
+ handleSetError(error, params, false);
226
+ }
227
+ return data;
228
+ } : void 0;
229
+ const subscribe = (params) => {
230
+ let unsubscribe = void 0;
231
+ state.when(subscribeFnKey$, () => {
232
+ unsubscribe = subscribeFn(params);
489
233
  });
234
+ return () => {
235
+ unsubscribe == null ? void 0 : unsubscribe();
236
+ };
237
+ };
238
+ return crud.syncedCrud({
239
+ ...rest,
240
+ as: asType,
241
+ list,
242
+ create,
243
+ update,
244
+ delete: deleteFn,
245
+ waitFor: () => isEnabled$.get() && (waitFor ? state.computeSelector(waitFor) : true),
246
+ onSaved,
247
+ onSavedUpdate: "createdUpdatedAt",
248
+ fieldCreatedAt,
249
+ fieldUpdatedAt,
250
+ fieldDeleted: fieldDeleted || "deleted",
251
+ changesSince,
252
+ updatePartial: true,
253
+ subscribe,
254
+ generateId: generateKeelId,
255
+ // @ts-expect-error This errors because of the get/list union type
256
+ get
257
+ });
490
258
  }
491
259
 
492
260
  exports.KeelKeys = KeelKeys;
@@ -494,4 +262,3 @@ exports.configureSyncedKeel = configureSyncedKeel;
494
262
  exports.generateKeelId = generateKeelId;
495
263
  exports.getSyncedKeelConfiguration = getSyncedKeelConfiguration;
496
264
  exports.syncedKeel = syncedKeel;
497
- //# sourceMappingURL=keel.js.map