@legendapp/state 3.0.0-alpha.1 → 3.0.0-alpha.3

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 +2015 -2166
  104. package/index.mjs +2015 -2166
  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 +910 -964
  169. package/sync.mjs +920 -974
  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
package/src/onChange.ts DELETED
@@ -1,146 +0,0 @@
1
- import { getNodeValue } from './globals';
2
- import { isArray } from './is';
3
- import type { ListenerFn, ListenerParams, NodeValue, NodeValueListener, TrackingType } from './observableInterfaces';
4
-
5
- export function onChange(
6
- node: NodeValue,
7
- callback: ListenerFn,
8
- options: { trackingType?: TrackingType; initial?: boolean; immediate?: boolean; noArgs?: boolean } = {},
9
- fromLinks?: Set<NodeValue>,
10
- ): () => void {
11
- const { initial, immediate, noArgs } = options;
12
- const { trackingType } = options;
13
-
14
- let listeners = immediate ? node.listenersImmediate : node.listeners;
15
- if (!listeners) {
16
- listeners = new Set();
17
- if (immediate) {
18
- node.listenersImmediate = listeners;
19
- } else {
20
- node.listeners = listeners;
21
- }
22
- }
23
-
24
- const listener: NodeValueListener = {
25
- listener: callback,
26
- track: trackingType,
27
- noArgs,
28
- };
29
-
30
- listeners.add(listener);
31
-
32
- if (initial) {
33
- const value = getNodeValue(node);
34
- callback({
35
- value,
36
- loading: true,
37
- remote: false,
38
- changes: [
39
- {
40
- path: [],
41
- pathTypes: [],
42
- prevAtPath: value,
43
- valueAtPath: value,
44
- },
45
- ],
46
- getPrevious: () => undefined,
47
- });
48
- }
49
-
50
- let extraDisposes: (() => void)[];
51
-
52
- function addLinkedNodeListeners(childNode: NodeValue, cb: ListenerFn = callback, from?: NodeValue) {
53
- // Don't add listeners for the same node more than once
54
- if (!fromLinks?.has(childNode)) {
55
- fromLinks ||= new Set();
56
- fromLinks.add(from || node);
57
- cb ||= callback;
58
- const childOptions: Parameters<typeof onChange>[2] = {
59
- trackingType: true,
60
- ...options,
61
- };
62
- // onChange for the linked node
63
- extraDisposes = [...(extraDisposes || []), onChange(childNode, cb as ListenerFn, childOptions, fromLinks)];
64
- }
65
- }
66
-
67
- // Add listeners for linked to nodes
68
- if (node.linkedToNode) {
69
- addLinkedNodeListeners(node.linkedToNode);
70
- }
71
-
72
- // Add listeners for linked from nodes
73
- node.linkedFromNodes?.forEach((linkedFromNode) => addLinkedNodeListeners(linkedFromNode));
74
-
75
- // Go up through the parents and add listeners for linked from nodes
76
- node.numListenersRecursive++;
77
- let parent = node.parent;
78
- let pathParent: string[] = [node!.key!];
79
- while (parent) {
80
- if (parent.linkedFromNodes) {
81
- for (const linkedFromNode of parent.linkedFromNodes) {
82
- if (!fromLinks?.has(linkedFromNode)) {
83
- const cb = createCb(linkedFromNode, pathParent, callback);
84
- addLinkedNodeListeners(linkedFromNode, cb, parent);
85
- }
86
- }
87
- }
88
- parent.numListenersRecursive++;
89
-
90
- pathParent = [parent!.key!, ...pathParent];
91
- parent = parent.parent;
92
- }
93
-
94
- return () => {
95
- listeners!.delete(listener);
96
- extraDisposes?.forEach((fn) => fn());
97
-
98
- let parent = node;
99
- while (parent) {
100
- parent.numListenersRecursive--;
101
-
102
- parent = parent.parent!;
103
- }
104
- };
105
- }
106
-
107
- function createCb(linkedFromNode: NodeValue, path: string[], callback: ListenerFn) {
108
- // Create a callback for a path that calls it with the current value at the path
109
- let { valueAtPath: prevAtPath } = getValueAtPath(getNodeValue(linkedFromNode), path);
110
-
111
- return function ({ value: valueA, loading, remote }: ListenerParams<any>) {
112
- const { valueAtPath } = getValueAtPath(valueA, path);
113
- if (valueAtPath !== prevAtPath) {
114
- callback({
115
- value: valueAtPath,
116
- loading,
117
- remote,
118
- changes: [
119
- {
120
- path: [],
121
- pathTypes: [],
122
- prevAtPath,
123
- valueAtPath,
124
- },
125
- ],
126
- getPrevious: () => prevAtPath,
127
- });
128
- }
129
- prevAtPath = valueAtPath;
130
- };
131
- }
132
-
133
- function getValueAtPath(
134
- obj: Record<string, any>,
135
- path: string[],
136
- ): { valueAtPath: any; pathTypes: ('object' | 'array')[] } {
137
- let o: Record<string, any> = obj;
138
- const pathTypes: ('object' | 'array')[] = [];
139
- for (let i = 0; o && i < path.length; i++) {
140
- pathTypes.push(isArray(o) ? 'array' : 'object');
141
- const p = path[i];
142
- o = (o as any)[p];
143
- }
144
-
145
- return { valueAtPath: o, pathTypes };
146
- }
@@ -1,7 +0,0 @@
1
- import type { ObservablePersistenceConfig } from '@legendapp/state/sync';
2
-
3
- export const observablePersistConfiguration: ObservablePersistenceConfig = {};
4
-
5
- export function configureObservablePersistence(options?: ObservablePersistenceConfig) {
6
- Object.assign(observablePersistConfiguration, options);
7
- }
@@ -1,149 +0,0 @@
1
- import {
2
- constructObjectWithPath,
3
- deconstructObjectWithPath,
4
- isArray,
5
- isObject,
6
- isString,
7
- TypeAtPath,
8
- internal,
9
- } from '@legendapp/state';
10
- import type { FieldTransforms } from '@legendapp/state/sync';
11
-
12
- const { initializePathType, symbolDelete } = internal;
13
-
14
- let validateMap: (map: Record<string, any>) => void;
15
-
16
- export function transformPath(path: string[], pathTypes: TypeAtPath[], map: Record<string, any>): string[] {
17
- const data: Record<string, any> = {};
18
- let d: Record<string, any> | null = data;
19
- for (let i = 0; i < path.length; i++) {
20
- d = d![path[i]] = i === path.length - 1 ? null : initializePathType(pathTypes[i]);
21
- }
22
- let value = transformObject(data, map);
23
- const pathOut = [];
24
- for (let i = 0; i < path.length; i++) {
25
- const key = Object.keys(value)[0];
26
- pathOut.push(key);
27
- value = value[key];
28
- }
29
- return pathOut;
30
- }
31
-
32
- export function transformObject(dataIn: Record<string, any>, map: Record<string, any>) {
33
- if (process.env.NODE_ENV === 'development') {
34
- validateMap(map);
35
- }
36
- let ret = dataIn;
37
- if (dataIn) {
38
- if ((dataIn as unknown) === symbolDelete) return dataIn;
39
- if (isString(dataIn)) {
40
- return map[dataIn];
41
- }
42
-
43
- ret = {};
44
-
45
- const dict = Object.keys(map).length === 1 && map['_dict'];
46
-
47
- for (const key in dataIn) {
48
- let v = dataIn[key];
49
-
50
- if (dict) {
51
- ret[key] = transformObject(v, dict);
52
- } else {
53
- const mapped = map[key];
54
- if (mapped === undefined) {
55
- // Don't transform dateModified if user doesn't want it
56
- if (key !== '@') {
57
- ret[key] = v;
58
- if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') {
59
- console.error('A fatal field transformation error has occurred', key, dataIn, map);
60
- }
61
- }
62
- } else if (mapped !== null) {
63
- if (v !== undefined && v !== null) {
64
- if (map[key + '_val']) {
65
- const mapChild = map[key + '_val'];
66
- if (isArray(v)) {
67
- v = v.map((vChild) => mapChild[vChild]);
68
- } else {
69
- v = mapChild[v];
70
- }
71
- } else if (map[key + '_arr'] && isArray(v)) {
72
- const mapChild = map[key + '_arr'];
73
- v = v.map((vChild) => transformObject(vChild, mapChild));
74
- } else if (isObject(v)) {
75
- if (map[key + '_obj']) {
76
- v = transformObject(v, map[key + '_obj']);
77
- } else if (map[key + '_dict']) {
78
- const mapChild = map[key + '_dict'];
79
- const out: Record<string, any> = {};
80
- for (const keyChild in v) {
81
- out[keyChild] = transformObject(v[keyChild], mapChild);
82
- }
83
- v = out;
84
- }
85
- }
86
- }
87
- ret[mapped] = v;
88
- }
89
- }
90
- }
91
- }
92
-
93
- return ret;
94
- }
95
-
96
- export function transformObjectWithPath(
97
- obj: object,
98
- path: string[],
99
- pathTypes: TypeAtPath[],
100
- fieldTransforms: FieldTransforms<any>,
101
- ) {
102
- const constructed = constructObjectWithPath(path, pathTypes, obj);
103
- const transformed = transformObject(constructed, fieldTransforms);
104
- const transformedPath = transformPath(path as string[], pathTypes, fieldTransforms);
105
- return { path: transformedPath, obj: deconstructObjectWithPath(transformedPath, pathTypes, transformed) };
106
- }
107
-
108
- const invertedMaps = new WeakMap();
109
-
110
- export function invertFieldMap(obj: Record<string, any>) {
111
- const existing = invertedMaps.get(obj);
112
- if (existing) return existing;
113
-
114
- const target: Record<string, any> = {} as any;
115
-
116
- for (const key in obj) {
117
- const val = obj[key];
118
- if (key === '_dict') {
119
- target[key] = invertFieldMap(val);
120
- } else if (key.endsWith('_obj') || key.endsWith('_dict') || key.endsWith('_arr') || key.endsWith('_val')) {
121
- const keyMapped = obj[key.replace(/_obj|_dict|_arr|_val$/, '')];
122
- const suffix = key.match(/_obj|_dict|_arr|_val$/)![0];
123
- target[keyMapped + suffix] = invertFieldMap(val);
124
- } else if (typeof val === 'string') {
125
- target[val] = key;
126
- }
127
- }
128
- invertedMaps.set(obj, target);
129
-
130
- return target;
131
- }
132
-
133
- if (process.env.NODE_ENV === 'development') {
134
- validateMap = function (record: Record<string, any>) {
135
- const values = Object.values(record).filter((value) => {
136
- if (isObject(value)) {
137
- validateMap(value);
138
- } else {
139
- return isString(value);
140
- }
141
- });
142
-
143
- const uniques = Array.from(new Set(values));
144
- if (values.length !== uniques.length) {
145
- console.error('Field transform map has duplicate values', record, values.length, uniques.length);
146
- }
147
- return record;
148
- };
149
- }
@@ -1,39 +0,0 @@
1
- import { isPromise } from '@legendapp/state';
2
- import {
3
- type ObservablePersistRemoteClass,
4
- type ObservablePersistRemoteFunctions,
5
- type ObservablePersistRemoteGetParams,
6
- } from '@legendapp/state/sync';
7
-
8
- export function observablePersistRemoteFunctionsAdapter<T = {}>({
9
- get,
10
- set,
11
- }: ObservablePersistRemoteFunctions<T>): ObservablePersistRemoteClass {
12
- const ret: ObservablePersistRemoteClass = {};
13
-
14
- if (get) {
15
- ret.get = (async (params: ObservablePersistRemoteGetParams<T>) => {
16
- try {
17
- let value = get(params);
18
- if (isPromise(value)) {
19
- value = await value;
20
- }
21
-
22
- params.onChange({
23
- value,
24
- dateModified: params.dateModified,
25
- lastSync: params.lastSync,
26
- mode: params.mode,
27
- });
28
- params.onGet();
29
- // eslint-disable-next-line no-empty
30
- } catch {}
31
- }) as ObservablePersistRemoteClass['get'];
32
- }
33
-
34
- if (set) {
35
- ret.set = set as ObservablePersistRemoteClass['set'];
36
- }
37
-
38
- return ret;
39
- }