@legendapp/state 3.0.0-alpha.1 → 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 (327) hide show
  1. package/.DS_Store +0 -0
  2. package/CHANGELOG.md +1 -831
  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 +4 -2
  95. package/helpers/trackHistory.js +13 -16
  96. package/helpers/trackHistory.mjs +13 -16
  97. package/helpers/undoRedo.d.mts +37 -0
  98. package/helpers/undoRedo.d.ts +5 -3
  99. package/helpers/undoRedo.js +59 -94
  100. package/helpers/undoRedo.mjs +59 -94
  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 -195
  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 -352
  113. package/persist-plugins/indexeddb.mjs +331 -352
  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/helpers/trackHistory.js.map +0 -1
  195. package/helpers/trackHistory.mjs.map +0 -1
  196. package/helpers/undoRedo.js.map +0 -1
  197. package/helpers/undoRedo.mjs.map +0 -1
  198. package/history.d.ts +0 -1
  199. package/history.js +0 -24
  200. package/history.js.map +0 -1
  201. package/history.mjs +0 -22
  202. package/history.mjs.map +0 -1
  203. package/index.js.map +0 -1
  204. package/index.mjs.map +0 -1
  205. package/persist-plugins/async-storage.js.map +0 -1
  206. package/persist-plugins/async-storage.mjs.map +0 -1
  207. package/persist-plugins/indexeddb.js.map +0 -1
  208. package/persist-plugins/indexeddb.mjs.map +0 -1
  209. package/persist-plugins/local-storage.js.map +0 -1
  210. package/persist-plugins/local-storage.mjs.map +0 -1
  211. package/persist-plugins/mmkv.js.map +0 -1
  212. package/persist-plugins/mmkv.mjs.map +0 -1
  213. package/react-hooks/createObservableHook.js.map +0 -1
  214. package/react-hooks/createObservableHook.mjs.map +0 -1
  215. package/react-hooks/useHover.js.map +0 -1
  216. package/react-hooks/useHover.mjs.map +0 -1
  217. package/react-hooks/useMeasure.js.map +0 -1
  218. package/react-hooks/useMeasure.mjs.map +0 -1
  219. package/react-hooks/useObservableNextRouter.js.map +0 -1
  220. package/react-hooks/useObservableNextRouter.mjs.map +0 -1
  221. package/react.js.map +0 -1
  222. package/react.mjs.map +0 -1
  223. package/src/ObservableObject.ts +0 -1350
  224. package/src/ObservablePrimitive.ts +0 -62
  225. package/src/babel/index.ts +0 -83
  226. package/src/batching.ts +0 -357
  227. package/src/computed.ts +0 -18
  228. package/src/config/enable$GetSet.ts +0 -30
  229. package/src/config/enableReactComponents.ts +0 -26
  230. package/src/config/enableReactNativeComponents.ts +0 -102
  231. package/src/config/enableReactTracking.ts +0 -62
  232. package/src/config/enableReactUse.ts +0 -32
  233. package/src/config/enable_PeekAssign.ts +0 -31
  234. package/src/config.ts +0 -47
  235. package/src/createObservable.ts +0 -47
  236. package/src/event.ts +0 -26
  237. package/src/globals.ts +0 -235
  238. package/src/helpers/pageHash.ts +0 -41
  239. package/src/helpers/pageHashParams.ts +0 -55
  240. package/src/helpers/time.ts +0 -30
  241. package/src/helpers/trackHistory.ts +0 -29
  242. package/src/helpers/undoRedo.ts +0 -111
  243. package/src/helpers.ts +0 -231
  244. package/src/is.ts +0 -63
  245. package/src/linked.ts +0 -17
  246. package/src/observable.ts +0 -32
  247. package/src/observableInterfaces.ts +0 -151
  248. package/src/observableTypes.ts +0 -232
  249. package/src/observe.ts +0 -89
  250. package/src/old-plugins/firebase.ts +0 -1053
  251. package/src/onChange.ts +0 -146
  252. package/src/persist/configureObservablePersistence.ts +0 -7
  253. package/src/persist/fieldTransformer.ts +0 -149
  254. package/src/persist/observablePersistRemoteFunctionsAdapter.ts +0 -39
  255. package/src/persist/persistObservable.ts +0 -1034
  256. package/src/persist-plugins/async-storage.ts +0 -99
  257. package/src/persist-plugins/indexeddb.ts +0 -439
  258. package/src/persist-plugins/local-storage.ts +0 -86
  259. package/src/persist-plugins/mmkv.ts +0 -91
  260. package/src/proxy.ts +0 -28
  261. package/src/react/Computed.tsx +0 -8
  262. package/src/react/For.tsx +0 -116
  263. package/src/react/Memo.tsx +0 -4
  264. package/src/react/Reactive.tsx +0 -53
  265. package/src/react/Show.tsx +0 -33
  266. package/src/react/Switch.tsx +0 -43
  267. package/src/react/react-globals.ts +0 -3
  268. package/src/react/reactInterfaces.ts +0 -32
  269. package/src/react/reactive-observer.tsx +0 -210
  270. package/src/react/useComputed.ts +0 -36
  271. package/src/react/useEffectOnce.ts +0 -41
  272. package/src/react/useIsMounted.ts +0 -16
  273. package/src/react/useMount.ts +0 -15
  274. package/src/react/useObservable.ts +0 -24
  275. package/src/react/useObservableReducer.ts +0 -52
  276. package/src/react/useObservableState.ts +0 -30
  277. package/src/react/useObserve.ts +0 -54
  278. package/src/react/useObserveEffect.ts +0 -40
  279. package/src/react/usePauseProvider.tsx +0 -16
  280. package/src/react/useSelector.ts +0 -167
  281. package/src/react/useUnmount.ts +0 -8
  282. package/src/react/useWhen.ts +0 -9
  283. package/src/react-hooks/createObservableHook.ts +0 -53
  284. package/src/react-hooks/useHover.ts +0 -40
  285. package/src/react-hooks/useMeasure.ts +0 -48
  286. package/src/react-hooks/useObservableNextRouter.ts +0 -137
  287. package/src/retry.ts +0 -71
  288. package/src/setupTracking.ts +0 -26
  289. package/src/sync/activateSyncedNode.ts +0 -128
  290. package/src/sync/configureObservableSync.ts +0 -7
  291. package/src/sync/persistTypes.ts +0 -216
  292. package/src/sync/syncHelpers.ts +0 -180
  293. package/src/sync/syncObservable.ts +0 -1056
  294. package/src/sync/syncObservableAdapter.ts +0 -31
  295. package/src/sync/syncTypes.ts +0 -189
  296. package/src/sync/synced.ts +0 -21
  297. package/src/sync-plugins/crud.ts +0 -412
  298. package/src/sync-plugins/fetch.ts +0 -80
  299. package/src/sync-plugins/keel.ts +0 -495
  300. package/src/sync-plugins/supabase.ts +0 -249
  301. package/src/sync-plugins/tanstack-query.ts +0 -113
  302. package/src/sync-plugins/tanstack-react-query.ts +0 -12
  303. package/src/trace/traceHelpers.ts +0 -11
  304. package/src/trace/useTraceListeners.ts +0 -34
  305. package/src/trace/useTraceUpdates.ts +0 -24
  306. package/src/trace/useVerifyNotTracking.ts +0 -33
  307. package/src/trace/useVerifyOneRender.ts +0 -10
  308. package/src/trackSelector.ts +0 -52
  309. package/src/tracking.ts +0 -43
  310. package/src/types/babel.d.ts +0 -12
  311. package/src/when.ts +0 -75
  312. package/sync-plugins/crud.js.map +0 -1
  313. package/sync-plugins/crud.mjs.map +0 -1
  314. package/sync-plugins/fetch.js.map +0 -1
  315. package/sync-plugins/fetch.mjs.map +0 -1
  316. package/sync-plugins/keel.js.map +0 -1
  317. package/sync-plugins/keel.mjs.map +0 -1
  318. package/sync-plugins/supabase.js.map +0 -1
  319. package/sync-plugins/supabase.mjs.map +0 -1
  320. package/sync-plugins/tanstack-query.js.map +0 -1
  321. package/sync-plugins/tanstack-query.mjs.map +0 -1
  322. package/sync-plugins/tanstack-react-query.js.map +0 -1
  323. package/sync-plugins/tanstack-react-query.mjs.map +0 -1
  324. package/sync.js.map +0 -1
  325. package/sync.mjs.map +0 -1
  326. package/trace.js.map +0 -1
  327. 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