@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.
- package/.DS_Store +0 -0
- package/CHANGELOG.md +1 -831
- package/LICENSE +1 -21
- package/README.md +1 -141
- package/as/arrayAsRecord.d.mts +5 -0
- package/as/arrayAsRecord.d.ts +5 -0
- package/as/arrayAsRecord.js +28 -0
- package/as/arrayAsRecord.mjs +26 -0
- package/as/arrayAsSet.d.mts +5 -0
- package/as/arrayAsSet.d.ts +5 -0
- package/as/arrayAsSet.js +13 -0
- package/as/arrayAsSet.mjs +11 -0
- package/as/arrayAsString.d.mts +5 -0
- package/as/arrayAsString.d.ts +5 -0
- package/as/arrayAsString.js +13 -0
- package/as/arrayAsString.mjs +11 -0
- package/as/numberAsString.d.mts +5 -0
- package/as/numberAsString.d.ts +5 -0
- package/as/numberAsString.js +13 -0
- package/as/numberAsString.mjs +11 -0
- package/as/recordAsArray.d.mts +5 -0
- package/as/recordAsArray.d.ts +5 -0
- package/as/recordAsArray.js +25 -0
- package/as/recordAsArray.mjs +23 -0
- package/as/recordAsString.d.mts +5 -0
- package/as/recordAsString.d.ts +5 -0
- package/as/recordAsString.js +13 -0
- package/as/recordAsString.mjs +11 -0
- package/as/setAsArray.d.mts +5 -0
- package/as/setAsArray.d.ts +5 -0
- package/as/setAsArray.js +13 -0
- package/as/setAsArray.mjs +11 -0
- package/as/setAsString.d.mts +5 -0
- package/as/setAsString.d.ts +5 -0
- package/as/setAsString.js +13 -0
- package/as/setAsString.mjs +11 -0
- package/as/stringAsArray.d.mts +5 -0
- package/as/stringAsArray.d.ts +5 -0
- package/as/stringAsArray.js +13 -0
- package/as/stringAsArray.mjs +11 -0
- package/as/stringAsNumber.d.mts +5 -0
- package/as/stringAsNumber.d.ts +5 -0
- package/as/stringAsNumber.js +16 -0
- package/as/stringAsNumber.mjs +14 -0
- package/as/stringAsRecord.d.mts +5 -0
- package/as/stringAsRecord.d.ts +5 -0
- package/as/stringAsRecord.js +15 -0
- package/as/stringAsRecord.mjs +13 -0
- package/as/stringAsSet.d.mts +5 -0
- package/as/stringAsSet.d.ts +5 -0
- package/as/stringAsSet.js +13 -0
- package/as/stringAsSet.mjs +11 -0
- package/babel.d.mts +21 -0
- package/babel.d.ts +21 -2
- package/babel.js +57 -53
- package/babel.mjs +65 -0
- package/config/enable$GetSet.js +13 -14
- package/config/enable$GetSet.mjs +13 -14
- package/config/enableReactComponents.d.mts +9 -0
- package/config/enableReactComponents.d.ts +4 -2
- package/config/enableReactComponents.js +13 -10
- package/config/enableReactComponents.mjs +13 -10
- package/config/enableReactNativeComponents.d.mts +22 -0
- package/config/enableReactNativeComponents.d.ts +6 -4
- package/config/enableReactNativeComponents.js +43 -47
- package/config/enableReactNativeComponents.mjs +43 -47
- package/config/enableReactTracking.d.mts +7 -0
- package/config/enableReactTracking.d.ts +3 -2
- package/config/enableReactTracking.js +33 -38
- package/config/enableReactTracking.mjs +33 -38
- package/config/enableReactUse.d.mts +10 -0
- package/config/enableReactUse.d.ts +4 -1
- package/config/enableReactUse.js +15 -14
- package/config/enableReactUse.mjs +15 -14
- package/config/{enable$GetSet.d.ts → enable_GetSet.d.mts} +4 -2
- package/config/enable_GetSet.d.ts +10 -0
- package/config/enable_PeekAssign.d.mts +10 -0
- package/config/enable_PeekAssign.d.ts +4 -2
- package/config/enable_PeekAssign.js +13 -14
- package/config/enable_PeekAssign.mjs +13 -14
- package/helpers/pageHash.d.mts +9 -0
- package/helpers/pageHash.d.ts +2 -0
- package/helpers/pageHash.js +25 -30
- package/helpers/pageHash.mjs +25 -30
- package/helpers/pageHashParams.d.mts +9 -0
- package/helpers/pageHashParams.d.ts +2 -0
- package/helpers/pageHashParams.js +34 -37
- package/helpers/pageHashParams.mjs +34 -37
- package/helpers/time.d.mts +6 -0
- package/helpers/time.d.ts +6 -3
- package/helpers/time.js +17 -17
- package/helpers/time.mjs +17 -17
- package/helpers/trackHistory.d.mts +6 -0
- package/helpers/trackHistory.d.ts +4 -2
- package/helpers/trackHistory.js +13 -16
- package/helpers/trackHistory.mjs +13 -16
- package/helpers/undoRedo.d.mts +37 -0
- package/helpers/undoRedo.d.ts +5 -3
- package/helpers/undoRedo.js +59 -94
- package/helpers/undoRedo.mjs +59 -94
- package/index.d.mts +404 -0
- package/index.d.ts +371 -28
- package/index.js +2015 -2166
- package/index.mjs +2015 -2166
- package/package.json +254 -195
- package/persist-plugins/async-storage.d.mts +18 -0
- package/persist-plugins/async-storage.d.ts +6 -3
- package/persist-plugins/async-storage.js +79 -86
- package/persist-plugins/async-storage.mjs +79 -86
- package/persist-plugins/indexeddb.d.mts +29 -0
- package/persist-plugins/indexeddb.d.ts +6 -3
- package/persist-plugins/indexeddb.js +331 -352
- package/persist-plugins/indexeddb.mjs +331 -352
- package/persist-plugins/local-storage.d.mts +23 -0
- package/persist-plugins/local-storage.d.ts +8 -5
- package/persist-plugins/local-storage.js +74 -76
- package/persist-plugins/local-storage.mjs +74 -76
- package/persist-plugins/mmkv.d.mts +18 -0
- package/persist-plugins/mmkv.d.ts +6 -3
- package/persist-plugins/mmkv.js +82 -86
- package/persist-plugins/mmkv.mjs +82 -86
- package/react-hooks/createObservableHook.d.mts +5 -0
- package/react-hooks/createObservableHook.d.ts +4 -1
- package/react-hooks/createObservableHook.js +29 -30
- package/react-hooks/createObservableHook.mjs +25 -30
- package/react-hooks/useHover.d.mts +5 -0
- package/react-hooks/useHover.d.ts +5 -3
- package/react-hooks/useHover.js +29 -29
- package/react-hooks/useHover.mjs +29 -29
- package/react-hooks/useMeasure.d.mts +9 -0
- package/react-hooks/useMeasure.d.ts +5 -2
- package/react-hooks/useMeasure.js +30 -32
- package/react-hooks/useMeasure.mjs +30 -32
- package/react-hooks/useObservableNextRouter.d.mts +35 -0
- package/react-hooks/useObservableNextRouter.d.ts +9 -7
- package/react-hooks/useObservableNextRouter.js +64 -77
- package/react-hooks/useObservableNextRouter.mjs +60 -77
- package/react.d.mts +157 -0
- package/react.d.ts +157 -21
- package/react.js +458 -749
- package/react.mjs +457 -752
- package/sync-plugins/crud.d.mts +54 -0
- package/sync-plugins/crud.d.ts +12 -10
- package/sync-plugins/crud.js +253 -270
- package/sync-plugins/crud.mjs +253 -270
- package/sync-plugins/fetch.d.mts +21 -0
- package/sync-plugins/fetch.d.ts +7 -4
- package/sync-plugins/fetch.js +50 -37
- package/sync-plugins/fetch.mjs +50 -37
- package/sync-plugins/keel.d.mts +108 -0
- package/sync-plugins/keel.d.ts +17 -15
- package/sync-plugins/keel.js +229 -462
- package/sync-plugins/keel.mjs +227 -464
- package/sync-plugins/supabase.d.mts +39 -0
- package/sync-plugins/supabase.d.ts +16 -14
- package/sync-plugins/supabase.js +128 -128
- package/sync-plugins/supabase.mjs +128 -128
- package/sync-plugins/tanstack-query.d.mts +14 -0
- package/sync-plugins/tanstack-query.d.ts +7 -4
- package/sync-plugins/tanstack-query.js +51 -57
- package/sync-plugins/tanstack-query.mjs +51 -57
- package/sync-plugins/tanstack-react-query.d.mts +8 -0
- package/sync-plugins/tanstack-react-query.d.ts +6 -1
- package/sync-plugins/tanstack-react-query.js +2 -2
- package/sync-plugins/tanstack-react-query.mjs +2 -2
- package/sync.d.mts +351 -0
- package/sync.d.ts +349 -9
- package/sync.js +910 -964
- package/sync.mjs +920 -974
- package/trace.d.mts +9 -0
- package/trace.d.ts +9 -4
- package/trace.js +72 -62
- package/trace.mjs +72 -62
- package/types/babel.d.ts +1 -12
- package/babel.js.map +0 -1
- package/config/enable$GetSet.js.map +0 -1
- package/config/enable$GetSet.mjs.map +0 -1
- package/config/enableReactComponents.js.map +0 -1
- package/config/enableReactComponents.mjs.map +0 -1
- package/config/enableReactNativeComponents.js.map +0 -1
- package/config/enableReactNativeComponents.mjs.map +0 -1
- package/config/enableReactTracking.js.map +0 -1
- package/config/enableReactTracking.mjs.map +0 -1
- package/config/enableReactUse.js.map +0 -1
- package/config/enableReactUse.mjs.map +0 -1
- package/config/enable_PeekAssign.js.map +0 -1
- package/config/enable_PeekAssign.mjs.map +0 -1
- package/helpers/pageHash.js.map +0 -1
- package/helpers/pageHash.mjs.map +0 -1
- package/helpers/pageHashParams.js.map +0 -1
- package/helpers/pageHashParams.mjs.map +0 -1
- package/helpers/time.js.map +0 -1
- package/helpers/time.mjs.map +0 -1
- package/helpers/trackHistory.js.map +0 -1
- package/helpers/trackHistory.mjs.map +0 -1
- package/helpers/undoRedo.js.map +0 -1
- package/helpers/undoRedo.mjs.map +0 -1
- package/history.d.ts +0 -1
- package/history.js +0 -24
- package/history.js.map +0 -1
- package/history.mjs +0 -22
- package/history.mjs.map +0 -1
- package/index.js.map +0 -1
- package/index.mjs.map +0 -1
- package/persist-plugins/async-storage.js.map +0 -1
- package/persist-plugins/async-storage.mjs.map +0 -1
- package/persist-plugins/indexeddb.js.map +0 -1
- package/persist-plugins/indexeddb.mjs.map +0 -1
- package/persist-plugins/local-storage.js.map +0 -1
- package/persist-plugins/local-storage.mjs.map +0 -1
- package/persist-plugins/mmkv.js.map +0 -1
- package/persist-plugins/mmkv.mjs.map +0 -1
- package/react-hooks/createObservableHook.js.map +0 -1
- package/react-hooks/createObservableHook.mjs.map +0 -1
- package/react-hooks/useHover.js.map +0 -1
- package/react-hooks/useHover.mjs.map +0 -1
- package/react-hooks/useMeasure.js.map +0 -1
- package/react-hooks/useMeasure.mjs.map +0 -1
- package/react-hooks/useObservableNextRouter.js.map +0 -1
- package/react-hooks/useObservableNextRouter.mjs.map +0 -1
- package/react.js.map +0 -1
- package/react.mjs.map +0 -1
- package/src/ObservableObject.ts +0 -1350
- package/src/ObservablePrimitive.ts +0 -62
- package/src/babel/index.ts +0 -83
- package/src/batching.ts +0 -357
- package/src/computed.ts +0 -18
- package/src/config/enable$GetSet.ts +0 -30
- package/src/config/enableReactComponents.ts +0 -26
- package/src/config/enableReactNativeComponents.ts +0 -102
- package/src/config/enableReactTracking.ts +0 -62
- package/src/config/enableReactUse.ts +0 -32
- package/src/config/enable_PeekAssign.ts +0 -31
- package/src/config.ts +0 -47
- package/src/createObservable.ts +0 -47
- package/src/event.ts +0 -26
- package/src/globals.ts +0 -235
- package/src/helpers/pageHash.ts +0 -41
- package/src/helpers/pageHashParams.ts +0 -55
- package/src/helpers/time.ts +0 -30
- package/src/helpers/trackHistory.ts +0 -29
- package/src/helpers/undoRedo.ts +0 -111
- package/src/helpers.ts +0 -231
- package/src/is.ts +0 -63
- package/src/linked.ts +0 -17
- package/src/observable.ts +0 -32
- package/src/observableInterfaces.ts +0 -151
- package/src/observableTypes.ts +0 -232
- package/src/observe.ts +0 -89
- package/src/old-plugins/firebase.ts +0 -1053
- package/src/onChange.ts +0 -146
- package/src/persist/configureObservablePersistence.ts +0 -7
- package/src/persist/fieldTransformer.ts +0 -149
- package/src/persist/observablePersistRemoteFunctionsAdapter.ts +0 -39
- package/src/persist/persistObservable.ts +0 -1034
- package/src/persist-plugins/async-storage.ts +0 -99
- package/src/persist-plugins/indexeddb.ts +0 -439
- package/src/persist-plugins/local-storage.ts +0 -86
- package/src/persist-plugins/mmkv.ts +0 -91
- package/src/proxy.ts +0 -28
- package/src/react/Computed.tsx +0 -8
- package/src/react/For.tsx +0 -116
- package/src/react/Memo.tsx +0 -4
- package/src/react/Reactive.tsx +0 -53
- package/src/react/Show.tsx +0 -33
- package/src/react/Switch.tsx +0 -43
- package/src/react/react-globals.ts +0 -3
- package/src/react/reactInterfaces.ts +0 -32
- package/src/react/reactive-observer.tsx +0 -210
- package/src/react/useComputed.ts +0 -36
- package/src/react/useEffectOnce.ts +0 -41
- package/src/react/useIsMounted.ts +0 -16
- package/src/react/useMount.ts +0 -15
- package/src/react/useObservable.ts +0 -24
- package/src/react/useObservableReducer.ts +0 -52
- package/src/react/useObservableState.ts +0 -30
- package/src/react/useObserve.ts +0 -54
- package/src/react/useObserveEffect.ts +0 -40
- package/src/react/usePauseProvider.tsx +0 -16
- package/src/react/useSelector.ts +0 -167
- package/src/react/useUnmount.ts +0 -8
- package/src/react/useWhen.ts +0 -9
- package/src/react-hooks/createObservableHook.ts +0 -53
- package/src/react-hooks/useHover.ts +0 -40
- package/src/react-hooks/useMeasure.ts +0 -48
- package/src/react-hooks/useObservableNextRouter.ts +0 -137
- package/src/retry.ts +0 -71
- package/src/setupTracking.ts +0 -26
- package/src/sync/activateSyncedNode.ts +0 -128
- package/src/sync/configureObservableSync.ts +0 -7
- package/src/sync/persistTypes.ts +0 -216
- package/src/sync/syncHelpers.ts +0 -180
- package/src/sync/syncObservable.ts +0 -1056
- package/src/sync/syncObservableAdapter.ts +0 -31
- package/src/sync/syncTypes.ts +0 -189
- package/src/sync/synced.ts +0 -21
- package/src/sync-plugins/crud.ts +0 -412
- package/src/sync-plugins/fetch.ts +0 -80
- package/src/sync-plugins/keel.ts +0 -495
- package/src/sync-plugins/supabase.ts +0 -249
- package/src/sync-plugins/tanstack-query.ts +0 -113
- package/src/sync-plugins/tanstack-react-query.ts +0 -12
- package/src/trace/traceHelpers.ts +0 -11
- package/src/trace/useTraceListeners.ts +0 -34
- package/src/trace/useTraceUpdates.ts +0 -24
- package/src/trace/useVerifyNotTracking.ts +0 -33
- package/src/trace/useVerifyOneRender.ts +0 -10
- package/src/trackSelector.ts +0 -52
- package/src/tracking.ts +0 -43
- package/src/types/babel.d.ts +0 -12
- package/src/when.ts +0 -75
- package/sync-plugins/crud.js.map +0 -1
- package/sync-plugins/crud.mjs.map +0 -1
- package/sync-plugins/fetch.js.map +0 -1
- package/sync-plugins/fetch.mjs.map +0 -1
- package/sync-plugins/keel.js.map +0 -1
- package/sync-plugins/keel.mjs.map +0 -1
- package/sync-plugins/supabase.js.map +0 -1
- package/sync-plugins/supabase.mjs.map +0 -1
- package/sync-plugins/tanstack-query.js.map +0 -1
- package/sync-plugins/tanstack-query.mjs.map +0 -1
- package/sync-plugins/tanstack-react-query.js.map +0 -1
- package/sync-plugins/tanstack-react-query.mjs.map +0 -1
- package/sync.js.map +0 -1
- package/sync.mjs.map +0 -1
- package/trace.js.map +0 -1
- package/trace.mjs.map +0 -1
package/src/observableTypes.ts
DELETED
|
@@ -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
|
-
}
|