@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
@@ -1,232 +0,0 @@
1
- import type { GetOptions, ListenerFn, TrackingType } from './observableInterfaces';
2
-
3
- type Primitive = string | number | boolean | symbol | bigint | undefined | null | Date;
4
- type ArrayOverrideFnNames =
5
- | 'find'
6
- | 'every'
7
- | 'some'
8
- | 'filter'
9
- | 'reduce'
10
- | 'reduceRight'
11
- | 'forEach'
12
- | 'map'
13
- | 'sort';
14
-
15
- type RemoveIndex<T> = {
16
- [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
17
- };
18
-
19
- type BuiltIns = String | Boolean | Number | Date | Error | RegExp | Array<any> | Function | Promise<any>;
20
-
21
- type IsUserDefinedObject<T> =
22
- // Only objects that are not function or arrays or instances of BuiltIns.
23
- T extends Function | BuiltIns | any[] ? false : T extends object ? true : false;
24
-
25
- export type RemoveObservables<T> = T extends ImmutableObservableBase<infer t>
26
- ? t
27
- : IsUserDefinedObject<T> extends true
28
- ? {
29
- [K in keyof T]: RemoveObservables<T[K]>;
30
- }
31
- : T extends ImmutableObservableBase<infer TObs>
32
- ? TObs
33
- : T extends () => infer TRet
34
- ? RemoveObservables<TRet> & T
35
- : T extends (key: string) => infer TRet
36
- ? Record<string, RemoveObservables<TRet>> & T
37
- : T;
38
-
39
- interface ObservableArray<T, U>
40
- extends ObservablePrimitive<T>,
41
- Pick<Array<Observable<U>>, ArrayOverrideFnNames>,
42
- Omit<RemoveIndex<Array<U>>, ArrayOverrideFnNames> {}
43
-
44
- interface ObservableObjectFns<T> {
45
- assign(value: Partial<T>): Observable<T>;
46
- }
47
-
48
- interface ObservableObjectFunctions<T = Record<string, any>> extends ObservablePrimitive<T>, ObservableObjectFns<T> {}
49
-
50
- type MapKey<T extends Map<any, any> | WeakMap<any, any>> = Parameters<T['has']>[0];
51
- type MapValue<T extends Map<any, any> | WeakMap<any, any>> = Parameters<T['get']>[0];
52
- type ObservableMap<T extends Map<any, any> | WeakMap<any, any>> = Omit<T, 'get' | 'size'> &
53
- Omit<ObservablePrimitive<T>, 'get' | 'size'> & {
54
- get(key: Parameters<T['get']>[0]): Observable<Parameters<T['set']>[1]>;
55
- get(): T;
56
- size: ImmutableObservableBase<number>;
57
- assign(
58
- value: Record<MapKey<T>, MapValue<T>> | Map<MapKey<T>, MapValue<T>> | WeakMap<MapKey<T>, MapValue<T>>,
59
- ): Observable<T>;
60
- };
61
-
62
- type ObservableSet<T extends Set<any> | WeakSet<any>> = Omit<T, 'size'> &
63
- Omit<ObservablePrimitive<T>, 'size'> & { size: ImmutableObservableBase<number> };
64
-
65
- interface ObservableBoolean extends ObservablePrimitive<boolean> {
66
- toggle(): void;
67
- }
68
-
69
- interface ObservablePrimitive<T> extends ImmutableObservableBase<T>, MutableObservableBase<T> {}
70
- type ObservableAny = Partial<ObservableObjectFns<any>> & ObservablePrimitive<any> & Record<string, any>;
71
-
72
- interface ImmutableObservableSimple<T> {
73
- peek(): T;
74
- get(trackingType?: any): any;
75
- onChange(cb: ListenerFn<any>, options?: any): () => void;
76
- }
77
- interface ImmutableObservableBase<T> extends ImmutableObservableSimple<T> {
78
- peek(): RemoveObservables<T>;
79
- peek(): T; // This is just to match the Simple base type
80
- get(trackingType?: TrackingType | GetOptions): RemoveObservables<T>;
81
- onChange(
82
- cb: ListenerFn<T>,
83
- options?: { trackingType?: TrackingType; initial?: boolean; immediate?: boolean; noArgs?: boolean },
84
- ): () => void;
85
- }
86
-
87
- interface MutableObservableSimple {
88
- set(value: any): void;
89
- delete(): void;
90
- }
91
- interface MutableObservableBase<T> extends MutableObservableSimple {
92
- set(value: (prev: RemoveObservables<T>) => RemoveObservables<T>): void;
93
- set(value: RecursiveValueOrFunction<T>): void;
94
- set(value: Promise<RemoveObservables<T>>): void;
95
- set(value: RemoveObservables<T>): void;
96
- set(value: Observable<RemoveObservables<T>>): void;
97
- delete(): void;
98
- }
99
-
100
- type UndefinedIf<T, U> = U extends true ? T | undefined : T;
101
-
102
- type IsNullable<T> = undefined extends T ? true : null extends T ? true : false;
103
-
104
- type NonObservable = Function | Observable;
105
- type NonObservableKeys<T> = {
106
- [K in keyof T]-?: IsStrictAny<T[K]> extends true
107
- ? never
108
- : T[K] extends undefined | null
109
- ? never
110
- : NonNullable<T[K]> extends NonObservable
111
- ? K
112
- : never;
113
- }[keyof T];
114
- type ObservableProps<T> = NonObservableKeys<NonNullable<T>> extends never
115
- ? T
116
- : RestoreNullability<T, Omit<NonNullable<T>, NonObservableKeys<NonNullable<T>>>>;
117
-
118
- type NonObservableProps<T> = RestoreNullability<
119
- T,
120
- NullablePropsIf<Pick<NonNullable<T>, NonObservableKeys<NonNullable<T>>>, IsNullable<T>>
121
- >;
122
- type NullablePropsIf<T, U> = {
123
- [K in keyof T]: UndefinedIf<T[K], U>;
124
- };
125
-
126
- type RestoreNullability<Source, Target> = IsNullable<Source> extends true
127
- ? Target | Extract<Source, null | undefined>
128
- : Target;
129
-
130
- type ObservableChildren<T, Nullable = IsNullable<T>> = {
131
- [K in keyof T]-?: Observable<UndefinedIf<T[K], Nullable>>;
132
- };
133
- type ObservableFunctionChildren<T> = {
134
- [K in keyof T]-?: T[K] extends Observable
135
- ? T[K]
136
- : T[K] extends (key: infer Key extends string) => Promise<infer t> | infer t
137
- ? HasOneStringParam<T[K]> extends true
138
- ? Observable<Record<Key, t>> & T[K]
139
- : t extends void
140
- ? T[K]
141
- : t extends Observable
142
- ? t
143
- : Observable<t> & (() => t)
144
- : T[K] & Observable<T[K]>;
145
- };
146
-
147
- type IsStrictAny<T> = 0 extends 1 & T ? true : false;
148
-
149
- export interface ObservableState {
150
- isLoaded: boolean;
151
- error?: Error;
152
- }
153
-
154
- type ObservableObject<T> = ObservableObjectFunctions<ObservableProps<T> & NonObservableProps<T>> &
155
- ObservableChildren<ObservableProps<T>> &
156
- ObservableFunctionChildren<NonObservableProps<T>>;
157
-
158
- type ObservableFunction<T> = T extends () => infer t ? t | (() => t) : T;
159
-
160
- // Check if the function type T has one lookup parameter
161
- type HasOneStringParam<T> = T extends (...args: infer P) => any
162
- ? P extends { length: 1 }
163
- ? P[0] extends string | ObservablePrimitive<string>
164
- ? true
165
- : false
166
- : false
167
- : false;
168
-
169
- // : [T] extends [(key: infer K extends string) => infer t]
170
- // ? // ? HasParams<T> extends true ? Observable<Record<K, t>>
171
- type ObservableNode<T, NT = NonNullable<T>> = [NT] extends [never] // means that T is ONLY undefined or null
172
- ? ObservablePrimitive<T>
173
- : IsStrictAny<T> extends true
174
- ? ObservableAny
175
- : [T] extends [Promise<infer t>]
176
- ? ObservableNode<t>
177
- : [T] extends [(key: infer K extends string) => infer t]
178
- ? [t] extends [ImmutableObservableBase<any>]
179
- ? HasOneStringParam<T> extends true
180
- ? Observable<Record<K, t>>
181
- : t
182
- : HasOneStringParam<T> extends true
183
- ? Observable<Record<K, t>> & T
184
- : Observable<ObservableFunction<t>>
185
- : [NT] extends [ImmutableObservableBase<any>]
186
- ? NT
187
- : [NT] extends [Primitive]
188
- ? [NT] extends [boolean]
189
- ? ObservableBoolean
190
- : ObservablePrimitive<T>
191
- : NT extends Map<any, any> | WeakMap<any, any>
192
- ? ObservableMap<NT>
193
- : NT extends Set<infer U>
194
- ? ObservableSet<Set<UndefinedIf<U, IsNullable<T>>>>
195
- : NT extends WeakSet<any>
196
- ? ObservableSet<NT> // TODO what to do here with nullable? WeakKey is type object | symbol
197
- : NT extends Array<infer U>
198
- ? ObservableArray<T, U> & ObservableChildren<T>
199
- : ObservableObject<T> & {};
200
-
201
- // Note: The {} makes intellisense display observables as Observable instead of all the subtypes
202
- type Observable<T = any> = ObservableNode<T> & {};
203
-
204
- type ObservableParam<T = any> = ImmutableObservableSimple<T> & MutableObservableSimple;
205
-
206
- // Allow input types to have functions in them
207
- type ValueOrFunction<T> = T extends Function ? T : T | ImmutableObservableBase<T> | Promise<T> | (() => T | Promise<T>);
208
- type ValueOrFunctionKeys<T> = {
209
- [K in keyof T]: RecursiveValueOrFunction<T[K]>;
210
- };
211
-
212
- type RecursiveValueOrFunction<T> = T extends Function
213
- ? T
214
- : T extends object
215
- ?
216
- | ((key: string) => any)
217
- | Promise<ValueOrFunctionKeys<T>>
218
- | ValueOrFunctionKeys<T>
219
- | ImmutableObservableBase<T>
220
- | (() => T | Promise<T> | ValueOrFunctionKeys<T> | Promise<ValueOrFunctionKeys<T>> | Observable<T>)
221
- : ValueOrFunction<T>;
222
-
223
- export type {
224
- // TODO: how to make these internal somehow?
225
- ImmutableObservableBase,
226
- Observable,
227
- ObservableBoolean,
228
- ObservableObject,
229
- ObservablePrimitive,
230
- ObservableParam,
231
- RecursiveValueOrFunction,
232
- };
package/src/observe.ts DELETED
@@ -1,89 +0,0 @@
1
- import { beginBatch, endBatch } from './batching';
2
- import { isEvent } from './globals';
3
- import { isFunction } from './is';
4
- import { ObserveEvent, ObserveEventCallback, Selector } from './observableInterfaces';
5
- import { trackSelector } from './trackSelector';
6
-
7
- export interface ObserveOptions {
8
- immediate?: boolean; // Ignore batching and run immediately
9
- /* @internal */
10
- fromComputed?: boolean;
11
- }
12
-
13
- export function observe<T>(run: (e: ObserveEvent<T>) => T | void, options?: ObserveOptions): () => void;
14
- export function observe<T>(
15
- selector: Selector<T> | ((e: ObserveEvent<T>) => any),
16
- reaction?: (e: ObserveEventCallback<T>) => any,
17
- options?: ObserveOptions,
18
- ): () => void;
19
- export function observe<T>(
20
- selectorOrRun: Selector<T> | ((e: ObserveEvent<T>) => any),
21
- reactionOrOptions?: ((e: ObserveEventCallback<T>) => any) | ObserveOptions,
22
- options?: ObserveOptions,
23
- ) {
24
- let reaction: (e: ObserveEventCallback<T>) => any;
25
- if (isFunction(reactionOrOptions)) {
26
- reaction = reactionOrOptions;
27
- } else {
28
- options = reactionOrOptions;
29
- }
30
- let dispose: (() => void) | undefined;
31
- const e: ObserveEventCallback<T> = { num: 0 } as ObserveEventCallback<T>;
32
- // Wrap it in a function so it doesn't pass all the arguments to run()
33
- const update = function () {
34
- if (e.onCleanup) {
35
- e.onCleanup();
36
- e.onCleanup = undefined;
37
- }
38
-
39
- // Run in a batch so changes don't happen until we're done tracking here
40
- beginBatch();
41
-
42
- // Run the function/selector
43
- delete e.value;
44
-
45
- // Dispose listeners from previous run
46
- dispose?.();
47
-
48
- const { dispose: _dispose, value, nodes } = trackSelector(selectorOrRun as Selector<T>, update, e, options);
49
- dispose = _dispose;
50
-
51
- e.value = value;
52
- e.nodes = nodes;
53
- e.refresh = update;
54
-
55
- if (e.onCleanupReaction) {
56
- e.onCleanupReaction();
57
- e.onCleanupReaction = undefined;
58
- }
59
-
60
- endBatch();
61
-
62
- // Call the reaction if there is one and the value changed
63
- if (
64
- reaction &&
65
- (options?.fromComputed ||
66
- ((e.num > 0 || !isEvent(selectorOrRun as any)) &&
67
- (e.previous !== e.value || typeof e.value === 'object')))
68
- ) {
69
- reaction(e);
70
- }
71
-
72
- // Update the previous value
73
- e.previous = e.value;
74
-
75
- // Increment the counter
76
- e.num++;
77
- };
78
-
79
- update();
80
-
81
- // Return function calling dispose because dispose may be changed in update()
82
- return () => {
83
- e.onCleanup?.();
84
- e.onCleanup = undefined;
85
- e.onCleanupReaction?.();
86
- e.onCleanupReaction = undefined;
87
- dispose?.();
88
- };
89
- }