@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/LICENSE CHANGED
@@ -1,21 +1 @@
1
- MIT License
2
-
3
- Copyright (c) 2022 Moo.do LLC
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ LICENSE
package/README.md CHANGED
@@ -1,141 +1 @@
1
- # Legend-State
2
-
3
- Legend-State is a super fast all-in-one state and sync library that lets you write less code to make faster apps. Legend-State has four primary goals:
4
-
5
- ### 1. 🦄 As easy as possible to use
6
-
7
- There is no boilerplate and there are no contexts, actions, reducers, dispatchers, sagas, thunks, or epics. It doesn't modify your data at all, and you can just call `get()` to get the raw data and `set()` to change it.
8
-
9
- In React components you can call `use()` on any observable to get the raw data and automatically re-render whenever it changes.
10
-
11
- ```jsx
12
- import { observable, observe } from "@legendapp/state"
13
- import { observer } from "@legendapp/state/react"
14
-
15
- const settings$ = observable({ theme: 'dark' })
16
-
17
- // get returns the raw data
18
- settings$.theme.get() // 'dark'
19
- // set sets
20
- settings$.theme.set('light')
21
-
22
- // Computed observables with just a function
23
- const isDark$ = observable(() => settings$.theme.get() === 'dark')
24
-
25
- // observing contexts re-run when tracked observables change
26
- observe(() => {
27
- console.log(settings$.theme.get())
28
- })
29
-
30
- const Component = observer(function Component() {
31
- const theme = state$.settings.theme.get()
32
-
33
- return <div>Theme: {theme}</div>
34
- })
35
- ```
36
-
37
- ### 2. ⚡️ The fastest React state library
38
-
39
- Legend-State beats every other state library on just about every metric and is so optimized for arrays that it even beats vanilla JS on the "swap" and "replace all rows" benchmarks. At only `4kb` and with the massive reduction in boilerplate code, you'll have big savings in file size too.
40
-
41
- <p>
42
- <img src="https://www.legendapp.com/img/dev/state/times.png" />
43
- </p>
44
-
45
- See [Fast 🔥](https://www.legendapp.com/open-source/state/v3/intro/fast/) for more details of why Legend-State is so fast.
46
-
47
- ### 3. 🔥 Fine-grained reactivity for minimal renders
48
-
49
- Legend-State lets you make your renders super fine-grained, so your apps will be much faster because React has to do less work. The best way to be fast is to render less, less often.
50
-
51
- ```jsx
52
- function FineGrained() {
53
- const count$ = useObservable(0)
54
-
55
- useInterval(() => {
56
- count$.set(v => v + 1)
57
- }, 600)
58
-
59
- // The text updates itself so the component doesn't re-render
60
- return (
61
- <div>
62
- Count: <Memo>{count$}</Memo>
63
- </div>
64
- )
65
- }
66
- ```
67
-
68
- ### 4. 💾 Powerful sync and persistence
69
-
70
- Legend-State includes a powerful [sync and persistence system](../../usage/persist-sync). It easily enables local-first apps by optimistically applying all changes locally first, retrying changes even after restart until they eventually sync, and syncing minimal diffs. We use Legend-State as the sync systems in [Legend](https://legendapp.com) and [Bravely](https://bravely.io), so it is by necessity very full featured while being simple to set up.
71
-
72
- Local persistence plugins for the browser and React Native are included, with sync plugins for [Keel](https://www.keel.so), [Supabase](https://www.supabase.com), [TanStack Query](https://tanstack.com/query), and `fetch`.
73
-
74
- ```js
75
- const state$ = observable(
76
- users: syncedKeel({
77
- list: queries.getUsers,
78
- create: mutations.createUsers,
79
- update: mutations.updateUsers,
80
- delete: mutations.deleteUsers,
81
- persist: { name: 'users', retrySync: true },
82
- debounceSet: 500,
83
- retry: {
84
- infinite: true,
85
- },
86
- changesSince: 'last-sync',
87
- }),
88
- // direct link to my user within the users observable
89
- me: () => state$.users['myuid']
90
- )
91
-
92
- observe(() => {
93
- // get() activates through to state$.users and starts syncing.
94
- // it updates itself and re-runs observers when name changes
95
- const name = me$.name.get()
96
- })
97
-
98
- // Setting a value goes through to state$.users and saves update to server
99
- me$.name.set('Annyong')
100
- ```
101
-
102
- ## Install
103
-
104
- `bun add @legendapp/state` or `npm install @legendapp/state` or `yarn add @legendapp/state`
105
-
106
- ## Highlights
107
-
108
- - ✨ Super easy to use 😌
109
- - ✨ Super fast ⚡️
110
- - ✨ Super small at 4kb 🐥
111
- - ✨ Fine-grained reactivity 🔥
112
- - ✨ No boilerplate
113
- - ✨ Designed for maximum performance and scalability
114
- - ✨ React components re-render only on changes
115
- - ✨ Very strongly typed with TypeScript
116
- - ✨ Persistence plugins for automatically saving/loading from storage
117
- - ✨ State can be global or within components
118
-
119
- [Read more](https://www.legendapp.com/open-source/state/v3/intro/why/) about why Legend-State might be right for you.
120
-
121
- ## Documentation
122
-
123
- See [the documentation site](https://www.legendapp.com/open-source/state/).
124
-
125
- ## Community
126
-
127
- Join us on [Discord](https://discord.gg/5CBaNtADNX) to get involved with the Legend community.
128
-
129
- ## 👩‍⚖️ License
130
-
131
- [MIT](LICENSE)
132
-
133
- ---
134
-
135
- Legend-State is created and maintained by [Jay Meistrich](https://github.com/jmeistrich) with [Legend](https://www.legendapp.com) and [Bravely](https://www.bravely.io).
136
-
137
- <p>
138
- <a href="https://www.legendapp.com"><img src="https://www.legendapp.com/img/LogoTextOnWhite.png" height="56" alt="Legend" /></a>
139
- <span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
140
- <a href="https://www.bravely.io"><img src="https://www.legendapp.com/img/bravely-logo.png" height="56" alt="Bravely" /></a>
141
- </p>
1
+ README.md
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function arrayAsRecord<T, TKey extends keyof T>(arr$: ObservableParam<T[]>, keyField?: TKey): Linked<Record<string, T>>;
4
+
5
+ export { arrayAsRecord };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function arrayAsRecord<T, TKey extends keyof T>(arr$: ObservableParam<T[]>, keyField?: TKey): Linked<Record<string, T>>;
4
+
5
+ export { arrayAsRecord };
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+
5
+ // src/as/arrayAsRecord.ts
6
+ function arrayAsRecord(arr$, keyField = "id") {
7
+ return state.linked({
8
+ get: () => {
9
+ const record = {};
10
+ const value = arr$.get();
11
+ for (let i = 0; i < value.length; i++) {
12
+ const v = value[i];
13
+ const child = v[keyField];
14
+ record[child[keyField]] = child;
15
+ }
16
+ return record;
17
+ },
18
+ set: ({ value }) => {
19
+ if (value) {
20
+ arr$.set(Object.values(value));
21
+ } else {
22
+ arr$.set(value);
23
+ }
24
+ }
25
+ });
26
+ }
27
+
28
+ exports.arrayAsRecord = arrayAsRecord;
@@ -0,0 +1,26 @@
1
+ import { linked } from '@legendapp/state';
2
+
3
+ // src/as/arrayAsRecord.ts
4
+ function arrayAsRecord(arr$, keyField = "id") {
5
+ return linked({
6
+ get: () => {
7
+ const record = {};
8
+ const value = arr$.get();
9
+ for (let i = 0; i < value.length; i++) {
10
+ const v = value[i];
11
+ const child = v[keyField];
12
+ record[child[keyField]] = child;
13
+ }
14
+ return record;
15
+ },
16
+ set: ({ value }) => {
17
+ if (value) {
18
+ arr$.set(Object.values(value));
19
+ } else {
20
+ arr$.set(value);
21
+ }
22
+ }
23
+ });
24
+ }
25
+
26
+ export { arrayAsRecord };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function arrayAsSet<T>(arr$: ObservableParam<T[]>): Linked<Set<T>>;
4
+
5
+ export { arrayAsSet };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function arrayAsSet<T>(arr$: ObservableParam<T[]>): Linked<Set<T>>;
4
+
5
+ export { arrayAsSet };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+
5
+ // src/as/arrayAsSet.ts
6
+ function arrayAsSet(arr$) {
7
+ return state.linked({
8
+ get: () => new Set(arr$.get()),
9
+ set: ({ value }) => arr$.set(Array.from(value))
10
+ });
11
+ }
12
+
13
+ exports.arrayAsSet = arrayAsSet;
@@ -0,0 +1,11 @@
1
+ import { linked } from '@legendapp/state';
2
+
3
+ // src/as/arrayAsSet.ts
4
+ function arrayAsSet(arr$) {
5
+ return linked({
6
+ get: () => new Set(arr$.get()),
7
+ set: ({ value }) => arr$.set(Array.from(value))
8
+ });
9
+ }
10
+
11
+ export { arrayAsSet };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function arrayAsString<T extends any[]>(arr$: ObservableParam<T>): Linked<string>;
4
+
5
+ export { arrayAsString };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function arrayAsString<T extends any[]>(arr$: ObservableParam<T>): Linked<string>;
4
+
5
+ export { arrayAsString };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+
5
+ // src/as/arrayAsString.ts
6
+ function arrayAsString(arr$) {
7
+ return state.linked({
8
+ get: () => JSON.stringify(arr$ == null ? void 0 : arr$.get()),
9
+ set: ({ value }) => arr$.set(JSON.parse(value || "[]"))
10
+ });
11
+ }
12
+
13
+ exports.arrayAsString = arrayAsString;
@@ -0,0 +1,11 @@
1
+ import { linked } from '@legendapp/state';
2
+
3
+ // src/as/arrayAsString.ts
4
+ function arrayAsString(arr$) {
5
+ return linked({
6
+ get: () => JSON.stringify(arr$ == null ? void 0 : arr$.get()),
7
+ set: ({ value }) => arr$.set(JSON.parse(value || "[]"))
8
+ });
9
+ }
10
+
11
+ export { arrayAsString };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function numberAsString(num$: ObservableParam<number>): Linked<string>;
4
+
5
+ export { numberAsString };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function numberAsString(num$: ObservableParam<number>): Linked<string>;
4
+
5
+ export { numberAsString };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+
5
+ // src/as/numberAsString.ts
6
+ function numberAsString(num$) {
7
+ return state.linked({
8
+ get: () => num$.get() + "",
9
+ set: ({ value }) => num$ == null ? void 0 : num$.set(+value)
10
+ });
11
+ }
12
+
13
+ exports.numberAsString = numberAsString;
@@ -0,0 +1,11 @@
1
+ import { linked } from '@legendapp/state';
2
+
3
+ // src/as/numberAsString.ts
4
+ function numberAsString(num$) {
5
+ return linked({
6
+ get: () => num$.get() + "",
7
+ set: ({ value }) => num$ == null ? void 0 : num$.set(+value)
8
+ });
9
+ }
10
+
11
+ export { numberAsString };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function recordAsArray<T, TKey extends keyof T>(record$: ObservableParam<Record<string | number, T>>, keyField?: TKey): Linked<T[]>;
4
+
5
+ export { recordAsArray };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function recordAsArray<T, TKey extends keyof T>(record$: ObservableParam<Record<string | number, T>>, keyField?: TKey): Linked<T[]>;
4
+
5
+ export { recordAsArray };
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+
5
+ // src/as/recordAsArray.ts
6
+ function recordAsArray(record$, keyField = "id") {
7
+ return state.linked({
8
+ get: () => Object.values(record$),
9
+ set: ({ value }) => {
10
+ if (value) {
11
+ const record = {};
12
+ for (let i = 0; i < value.length; i++) {
13
+ const v = value[i];
14
+ const child = v[keyField];
15
+ record[child[keyField]] = child;
16
+ }
17
+ record$.set(record);
18
+ } else {
19
+ record$.set(value);
20
+ }
21
+ }
22
+ });
23
+ }
24
+
25
+ exports.recordAsArray = recordAsArray;
@@ -0,0 +1,23 @@
1
+ import { linked } from '@legendapp/state';
2
+
3
+ // src/as/recordAsArray.ts
4
+ function recordAsArray(record$, keyField = "id") {
5
+ return linked({
6
+ get: () => Object.values(record$),
7
+ set: ({ value }) => {
8
+ if (value) {
9
+ const record = {};
10
+ for (let i = 0; i < value.length; i++) {
11
+ const v = value[i];
12
+ const child = v[keyField];
13
+ record[child[keyField]] = child;
14
+ }
15
+ record$.set(record);
16
+ } else {
17
+ record$.set(value);
18
+ }
19
+ }
20
+ });
21
+ }
22
+
23
+ export { recordAsArray };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function recordAsString(record$: ObservableParam<Record<any, any>>): Linked<string>;
4
+
5
+ export { recordAsString };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function recordAsString(record$: ObservableParam<Record<any, any>>): Linked<string>;
4
+
5
+ export { recordAsString };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+
5
+ // src/as/recordAsString.ts
6
+ function recordAsString(record$) {
7
+ return state.linked({
8
+ get: () => JSON.stringify(record$.get()),
9
+ set: ({ value }) => record$ == null ? void 0 : record$.set(JSON.parse(value || "{}"))
10
+ });
11
+ }
12
+
13
+ exports.recordAsString = recordAsString;
@@ -0,0 +1,11 @@
1
+ import { linked } from '@legendapp/state';
2
+
3
+ // src/as/recordAsString.ts
4
+ function recordAsString(record$) {
5
+ return linked({
6
+ get: () => JSON.stringify(record$.get()),
7
+ set: ({ value }) => record$ == null ? void 0 : record$.set(JSON.parse(value || "{}"))
8
+ });
9
+ }
10
+
11
+ export { recordAsString };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function setAsArray<T>(set$: ObservableParam<Set<T>>): Linked<T[]>;
4
+
5
+ export { setAsArray };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function setAsArray<T>(set$: ObservableParam<Set<T>>): Linked<T[]>;
4
+
5
+ export { setAsArray };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+
5
+ // src/as/setAsArray.ts
6
+ function setAsArray(set$) {
7
+ return state.linked({
8
+ get: () => Array.from(set$ == null ? void 0 : set$.get()),
9
+ set: ({ value }) => set$.set(new Set(value))
10
+ });
11
+ }
12
+
13
+ exports.setAsArray = setAsArray;
@@ -0,0 +1,11 @@
1
+ import { linked } from '@legendapp/state';
2
+
3
+ // src/as/setAsArray.ts
4
+ function setAsArray(set$) {
5
+ return linked({
6
+ get: () => Array.from(set$ == null ? void 0 : set$.get()),
7
+ set: ({ value }) => set$.set(new Set(value))
8
+ });
9
+ }
10
+
11
+ export { setAsArray };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function setAsString(set$: ObservableParam<Set<any>>): Linked<string>;
4
+
5
+ export { setAsString };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function setAsString(set$: ObservableParam<Set<any>>): Linked<string>;
4
+
5
+ export { setAsString };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+
5
+ // src/as/setAsString.ts
6
+ function setAsString(set$) {
7
+ return state.linked({
8
+ get: () => JSON.stringify(Array.from(set$ == null ? void 0 : set$.get())),
9
+ set: ({ value }) => set$.set(new Set(JSON.parse(value || "[]")))
10
+ });
11
+ }
12
+
13
+ exports.setAsString = setAsString;
@@ -0,0 +1,11 @@
1
+ import { linked } from '@legendapp/state';
2
+
3
+ // src/as/setAsString.ts
4
+ function setAsString(set$) {
5
+ return linked({
6
+ get: () => JSON.stringify(Array.from(set$ == null ? void 0 : set$.get())),
7
+ set: ({ value }) => set$.set(new Set(JSON.parse(value || "[]")))
8
+ });
9
+ }
10
+
11
+ export { setAsString };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function stringAsArray<T>(str$: ObservableParam<string>): Linked<T[]>;
4
+
5
+ export { stringAsArray };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function stringAsArray<T>(str$: ObservableParam<string>): Linked<T[]>;
4
+
5
+ export { stringAsArray };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+
5
+ // src/as/stringAsArray.ts
6
+ function stringAsArray(str$) {
7
+ return state.linked({
8
+ get: () => JSON.parse((str$ == null ? void 0 : str$.get()) || "[]"),
9
+ set: ({ value }) => str$ == null ? void 0 : str$.set(JSON.stringify(value))
10
+ });
11
+ }
12
+
13
+ exports.stringAsArray = stringAsArray;
@@ -0,0 +1,11 @@
1
+ import { linked } from '@legendapp/state';
2
+
3
+ // src/as/stringAsArray.ts
4
+ function stringAsArray(str$) {
5
+ return linked({
6
+ get: () => JSON.parse((str$ == null ? void 0 : str$.get()) || "[]"),
7
+ set: ({ value }) => str$ == null ? void 0 : str$.set(JSON.stringify(value))
8
+ });
9
+ }
10
+
11
+ export { stringAsArray };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function stringAsNumber(num$: ObservableParam<string>): Linked<number>;
4
+
5
+ export { stringAsNumber };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function stringAsNumber(num$: ObservableParam<string>): Linked<number>;
4
+
5
+ export { stringAsNumber };
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+
5
+ // src/as/stringAsNumber.ts
6
+ function stringAsNumber(num$) {
7
+ return state.linked({
8
+ get: () => {
9
+ const num = +num$.get();
10
+ return state.isNumber(num) ? +num : 0;
11
+ },
12
+ set: ({ value }) => num$ == null ? void 0 : num$.set(value + "")
13
+ });
14
+ }
15
+
16
+ exports.stringAsNumber = stringAsNumber;
@@ -0,0 +1,14 @@
1
+ import { linked, isNumber } from '@legendapp/state';
2
+
3
+ // src/as/stringAsNumber.ts
4
+ function stringAsNumber(num$) {
5
+ return linked({
6
+ get: () => {
7
+ const num = +num$.get();
8
+ return isNumber(num) ? +num : 0;
9
+ },
10
+ set: ({ value }) => num$ == null ? void 0 : num$.set(value + "")
11
+ });
12
+ }
13
+
14
+ export { stringAsNumber };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function stringAsRecord<T extends Record<string, any>>(str$: ObservableParam<string>): Linked<T>;
4
+
5
+ export { stringAsRecord };
@@ -0,0 +1,5 @@
1
+ import { ObservableParam, Linked } from '@legendapp/state';
2
+
3
+ declare function stringAsRecord<T extends Record<string, any>>(str$: ObservableParam<string>): Linked<T>;
4
+
5
+ export { stringAsRecord };