@legendapp/state 2.2.0-next.4 → 2.2.0-next.40
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/babel.js.map +1 -1
- package/config/enableDirectAccess.d.ts +1 -1
- package/config/enableDirectPeek.d.ts +1 -1
- package/config/enableReactDirectRender.js.map +1 -1
- package/config/enableReactDirectRender.mjs.map +1 -1
- package/config/enableReactTracking.d.ts +4 -3
- package/config/enableReactTracking.js.map +1 -1
- package/config/enableReactTracking.mjs.map +1 -1
- package/config/enableReactUse.d.ts +1 -1
- package/helpers/fetch.d.ts +4 -3
- package/helpers/fetch.js.map +1 -1
- package/helpers/fetch.mjs.map +1 -1
- package/helpers/pageHash.js.map +1 -1
- package/helpers/pageHash.mjs.map +1 -1
- package/helpers/pageHashParams.js.map +1 -1
- package/helpers/pageHashParams.mjs.map +1 -1
- package/helpers/time.d.ts +2 -2
- package/helpers/time.js.map +1 -1
- package/helpers/time.mjs.map +1 -1
- package/history.js.map +1 -1
- package/history.mjs.map +1 -1
- package/index.d.ts +13 -4
- package/index.js +655 -446
- package/index.js.map +1 -1
- package/index.mjs +652 -445
- package/index.mjs.map +1 -1
- package/package.json +1 -12
- package/persist-plugins/async-storage.js.map +1 -1
- package/persist-plugins/async-storage.mjs.map +1 -1
- package/persist-plugins/fetch.js.map +1 -1
- package/persist-plugins/fetch.mjs.map +1 -1
- package/persist-plugins/firebase.js.map +1 -1
- package/persist-plugins/firebase.mjs.map +1 -1
- package/persist-plugins/indexeddb.js.map +1 -1
- package/persist-plugins/indexeddb.mjs.map +1 -1
- package/persist-plugins/local-storage.js +10 -2
- package/persist-plugins/local-storage.js.map +1 -1
- package/persist-plugins/local-storage.mjs +10 -2
- package/persist-plugins/local-storage.mjs.map +1 -1
- package/persist-plugins/mmkv.js.map +1 -1
- package/persist-plugins/mmkv.mjs.map +1 -1
- package/persist-plugins/query.js.map +1 -1
- package/persist-plugins/query.mjs.map +1 -1
- package/persist.d.ts +15 -1
- package/persist.js +412 -180
- package/persist.js.map +1 -1
- package/persist.mjs +413 -181
- package/persist.mjs.map +1 -1
- package/react-hooks/createObservableHook.js +1 -1
- package/react-hooks/createObservableHook.js.map +1 -1
- package/react-hooks/createObservableHook.mjs +1 -1
- package/react-hooks/createObservableHook.mjs.map +1 -1
- package/react-hooks/useFetch.d.ts +4 -3
- package/react-hooks/useFetch.js.map +1 -1
- package/react-hooks/useFetch.mjs.map +1 -1
- package/react-hooks/useHover.js.map +1 -1
- package/react-hooks/useHover.mjs.map +1 -1
- package/react-hooks/useMeasure.js.map +1 -1
- package/react-hooks/useMeasure.mjs.map +1 -1
- package/react-hooks/useObservableNextRouter.js.map +1 -1
- package/react-hooks/useObservableNextRouter.mjs.map +1 -1
- package/react-hooks/useObservableQuery.js.map +1 -1
- package/react-hooks/useObservableQuery.mjs.map +1 -1
- package/react-hooks/usePersistedObservable.d.ts +2 -2
- package/react-hooks/usePersistedObservable.js +4 -3
- package/react-hooks/usePersistedObservable.js.map +1 -1
- package/react-hooks/usePersistedObservable.mjs +4 -3
- package/react-hooks/usePersistedObservable.mjs.map +1 -1
- package/react.js +13 -8
- package/react.js.map +1 -1
- package/react.mjs +14 -9
- package/react.mjs.map +1 -1
- package/src/ObservableObject.d.ts +6 -4
- package/src/ObservablePrimitive.d.ts +2 -1
- package/src/activated.d.ts +3 -0
- package/src/batching.d.ts +3 -1
- package/src/computed.d.ts +1 -1
- package/src/config/enableDirectAccess.d.ts +1 -1
- package/src/config/enableDirectPeek.d.ts +1 -1
- package/src/config/enableReactTracking.d.ts +4 -3
- package/src/config/enableReactUse.d.ts +1 -1
- package/src/createObservable.d.ts +2 -2
- package/src/globals.d.ts +10 -8
- package/src/helpers/fetch.d.ts +4 -3
- package/src/helpers/time.d.ts +2 -2
- package/src/helpers.d.ts +3 -3
- package/src/history/trackHistory.d.ts +1 -1
- package/src/is.d.ts +2 -0
- package/src/observable.d.ts +7 -15
- package/src/observableInterfaces.d.ts +58 -335
- package/src/observableTypes.d.ts +92 -0
- package/src/persist/observablePersistRemoteFunctionsAdapter.d.ts +1 -1
- package/src/persist/persistActivateNode.d.ts +0 -17
- package/src/persist/persistHelpers.d.ts +1 -1
- package/src/persist/persistObservable.d.ts +2 -3
- package/src/persistTypes.d.ts +197 -0
- package/src/proxy.d.ts +2 -1
- package/src/react/Computed.d.ts +1 -1
- package/src/react/Switch.d.ts +3 -3
- package/src/react/reactInterfaces.d.ts +2 -1
- package/src/react/usePauseProvider.d.ts +3 -3
- package/src/react/useWhen.d.ts +2 -2
- package/src/react-hooks/useFetch.d.ts +4 -3
- package/src/react-hooks/usePersistedObservable.d.ts +2 -2
- package/src/retry.d.ts +6 -0
- package/src/trackSelector.d.ts +3 -2
- package/src/when.d.ts +6 -2
- package/trace.js.map +1 -1
- package/trace.mjs.map +1 -1
package/src/helpers.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type { ObservableEvent,
|
|
1
|
+
import type { ObservableEvent, ObserveEvent, OpaqueObject, Selector, TypeAtPath } from './observableInterfaces';
|
|
2
|
+
import type { ObservableReadable, ObservableWriteable } from './observableTypes';
|
|
2
3
|
export declare function isEvent(obs: any): obs is ObservableEvent;
|
|
3
4
|
export declare function computeSelector<T>(selector: Selector<T>, e?: ObserveEvent<T>, retainObservable?: boolean): any;
|
|
4
5
|
export declare function getObservableIndex(obs: ObservableReadable): number;
|
|
5
6
|
export declare function opaqueObject<T extends object>(value: T): OpaqueObject<T>;
|
|
6
|
-
export declare function lockObservable(obs: ObservableReadable, value: boolean): void;
|
|
7
7
|
export declare function setAtPath<T extends object>(obj: T, path: string[], pathTypes: TypeAtPath[], value: any, fullObj?: T, restore?: (path: string[], value: any) => void): T;
|
|
8
8
|
export declare function setInObservableAtPath(obs: ObservableWriteable, path: string[], pathTypes: string[], value: any, mode: 'assign' | 'set'): void;
|
|
9
|
-
export declare function mergeIntoObservable<T extends
|
|
9
|
+
export declare function mergeIntoObservable<T extends ObservableWriteable<Record<string, any>> | object>(target: T, ...sources: any[]): T;
|
|
10
10
|
export declare function constructObjectWithPath(path: string[], pathTypes: TypeAtPath[], value: any): object;
|
|
11
11
|
export declare function deconstructObjectWithPath(path: string[], pathTypes: TypeAtPath[], value: any): object;
|
|
12
12
|
export declare function isObservableValueReady(value: any): boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ObservableReadable, ObservableWriteable } from '@legendapp/state';
|
|
2
2
|
type TimestampAsString = string;
|
|
3
|
-
export declare function trackHistory<T>(obs: ObservableReadable<T>, targetObservable?: ObservableWriteable<Record<TimestampAsString, Partial<T>>>): ObservableWriteable<Record<
|
|
3
|
+
export declare function trackHistory<T>(obs: ObservableReadable<T>, targetObservable?: ObservableWriteable<Record<TimestampAsString, Partial<T>>>): ObservableWriteable<Record<TimestampAsString, any>>;
|
|
4
4
|
export {};
|
package/src/is.d.ts
CHANGED
|
@@ -4,7 +4,9 @@ export declare function isString(obj: unknown): obj is string;
|
|
|
4
4
|
export declare function isObject(obj: unknown): obj is Record<any, any>;
|
|
5
5
|
export declare function isFunction(obj: unknown): obj is Function;
|
|
6
6
|
export declare function isPrimitive(arg: unknown): arg is string | number | bigint | boolean | symbol;
|
|
7
|
+
export declare function isDate(obj: unknown): obj is Date;
|
|
7
8
|
export declare function isSymbol(obj: unknown): obj is symbol;
|
|
8
9
|
export declare function isBoolean(obj: unknown): obj is boolean;
|
|
9
10
|
export declare function isPromise<T>(obj: unknown): obj is Promise<T>;
|
|
10
11
|
export declare function isEmpty(obj: object): boolean;
|
|
12
|
+
export declare function isNullOrUndefined(value: any): value is undefined | null;
|
package/src/observable.d.ts
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export declare function observable<T>(value:
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function observable<T>(value: () => Promise<T>): Observable<T & WithState>;
|
|
8
|
-
export declare function observable<T>(value: () => T): ObservableComputed<T>;
|
|
9
|
-
export declare function observable<T>(value: (params: ActivateParams) => Observable<T>): Observable<T & WithState>;
|
|
10
|
-
export declare function observable<T>(value: (params: ActivateParams) => Promise<T>): Observable<T & WithState>;
|
|
11
|
-
export declare function observable<T>(value: (params: ActivateParams) => T): Observable<T>;
|
|
12
|
-
export declare function observable<T>(value: (params: ActivateProxyParams<T>) => void): Observable<Record<string, T> & WithState>;
|
|
13
|
-
export declare function observable<T>(value?: TWithFunctions<T>): Observable<T>;
|
|
14
|
-
export declare function observablePrimitive<T>(value: Promise<T>): ObservablePrimitive<T & WithState>;
|
|
1
|
+
import type { Observable, ObservablePrimitive, ObservableReadable, RecursiveValueOrFunction } from './observableTypes';
|
|
2
|
+
import { ObservablePersistState } from './persistTypes';
|
|
3
|
+
export declare function observable<T>(): Observable<T | undefined>;
|
|
4
|
+
export declare function observable<T>(value: Promise<RecursiveValueOrFunction<T>> | (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T>): Observable<T>;
|
|
5
|
+
export declare function observable<T>(value: T): Observable<T>;
|
|
6
|
+
export declare function observablePrimitive<T>(value: Promise<T>): ObservablePrimitive<T>;
|
|
15
7
|
export declare function observablePrimitive<T>(value?: T): ObservablePrimitive<T>;
|
|
16
|
-
export
|
|
8
|
+
export declare function syncState(obs: ObservableReadable): Observable<ObservablePersistState>;
|
|
@@ -1,122 +1,24 @@
|
|
|
1
|
-
import type { AsyncStorageStatic } from '@react-native-async-storage/async-storage';
|
|
2
1
|
import type { symbolGetNode, symbolOpaque } from './globals';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* The MMKV instance's ID. If you want to use multiple instances, make sure to use different IDs!
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```ts
|
|
10
|
-
* const userStorage = new MMKV({ id: `user-${userId}-storage` })
|
|
11
|
-
* const globalStorage = new MMKV({ id: 'global-app-storage' })
|
|
12
|
-
* ```
|
|
13
|
-
*
|
|
14
|
-
* @default 'mmkv.default'
|
|
15
|
-
*/
|
|
16
|
-
id: string;
|
|
17
|
-
/**
|
|
18
|
-
* The MMKV instance's root path. By default, MMKV stores file inside `$(Documents)/mmkv/`. You can customize MMKV's root directory on MMKV initialization:
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```ts
|
|
22
|
-
* const temporaryStorage = new MMKV({ path: '/tmp/' })
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
path?: string;
|
|
26
|
-
/**
|
|
27
|
-
* The MMKV instance's encryption/decryption key. By default, MMKV stores all key-values in plain text on file, relying on iOS's sandbox to make sure the file is encrypted. Should you worry about information leaking, you can choose to encrypt MMKV.
|
|
28
|
-
*
|
|
29
|
-
* Encryption keys can have a maximum length of 16 bytes.
|
|
30
|
-
*
|
|
31
|
-
* @example
|
|
32
|
-
* ```ts
|
|
33
|
-
* const secureStorage = new MMKV({ encryptionKey: 'my-encryption-key!' })
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
encryptionKey?: string;
|
|
37
|
-
}
|
|
38
|
-
type Nullable<T> = T | null | undefined;
|
|
2
|
+
import type { Observable, ObservableComputed, ObservableComputed as ObservableComputedNew, ObservableComputedTwoWay, Observable as ObservableNew, ObservableReadable as ObservableReadableNew } from './observableTypes';
|
|
3
|
+
import type { ObservablePersistState } from './persistTypes';
|
|
39
4
|
export type TrackingType = undefined | true | symbol;
|
|
40
|
-
export interface MapGet<T extends Map<any, any> | WeakMap<any, any>> {
|
|
41
|
-
get(key: Parameters<T['get']>[0]): ObservableChild<Parameters<T['set']>[1]>;
|
|
42
|
-
get(): T;
|
|
43
|
-
size: ObservableChild<number>;
|
|
44
|
-
}
|
|
45
5
|
export interface GetOptions {
|
|
46
6
|
shallow: boolean;
|
|
47
7
|
}
|
|
48
|
-
export interface ObservableBaseFns<T> {
|
|
49
|
-
peek(): T;
|
|
50
|
-
get(options?: TrackingType | GetOptions): T;
|
|
51
|
-
onChange(cb: ListenerFn<T>, options?: {
|
|
52
|
-
trackingType?: TrackingType;
|
|
53
|
-
initial?: boolean;
|
|
54
|
-
immediate?: boolean;
|
|
55
|
-
noArgs?: boolean;
|
|
56
|
-
}): ObservableListenerDispose;
|
|
57
|
-
}
|
|
58
|
-
export interface ObservablePrimitiveBaseFns<T> extends ObservableBaseFns<T> {
|
|
59
|
-
delete(): ObservablePrimitiveBaseFns<T>;
|
|
60
|
-
set(value: Nullable<T> | CallbackSetter<T> | Promise<T> | Observable<T>): ObservablePrimitiveChild<T>;
|
|
61
|
-
}
|
|
62
|
-
export interface ObservablePrimitiveBooleanFns<T> {
|
|
63
|
-
toggle(): T;
|
|
64
|
-
}
|
|
65
|
-
export interface ObservableObjectFns<T> extends ObservableBaseFns<T> {
|
|
66
|
-
set(value: Nullable<T> | CallbackSetter<T> | Promise<T> | Observable<T>): ObservableChild<T>;
|
|
67
|
-
assign(value: T | Partial<T>): ObservableChild<T>;
|
|
68
|
-
delete(): ObservableChild<T>;
|
|
69
|
-
}
|
|
70
|
-
export type ObservablePrimitive<T> = [T] extends [boolean] ? ObservablePrimitiveBaseFns<T> & ObservablePrimitiveBooleanFns<T> : ObservablePrimitiveBaseFns<T>;
|
|
71
|
-
export interface ObservablePrimitiveChildFns<T> extends ObservablePrimitiveBaseFns<T> {
|
|
72
|
-
delete(): ObservablePrimitiveChild<T>;
|
|
73
|
-
}
|
|
74
|
-
type CallbackSetter<T> = {
|
|
75
|
-
bivarianceHack(prev: T): T;
|
|
76
|
-
}['bivarianceHack'];
|
|
77
8
|
export type OpaqueObject<T> = T & {
|
|
78
9
|
[symbolOpaque]: true;
|
|
79
10
|
};
|
|
80
|
-
type ArrayOverrideFnNames = 'find' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map';
|
|
81
|
-
type RemoveIndex<T> = {
|
|
82
|
-
[K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
|
|
83
|
-
};
|
|
84
|
-
export type ObservableArrayOverride<T> = Omit<RemoveIndex<Array<T>>, ArrayOverrideFnNames> & Pick<Array<Observable<T>>, ArrayOverrideFnNames> & {
|
|
85
|
-
[n: number]: Observable<T>;
|
|
86
|
-
};
|
|
87
11
|
export interface ListenerParams<T = any> {
|
|
88
12
|
value: T;
|
|
89
13
|
getPrevious: () => T;
|
|
90
14
|
changes: Change[];
|
|
91
15
|
}
|
|
92
16
|
export type ListenerFn<T = any> = (params: ListenerParams<T>) => void;
|
|
93
|
-
type PrimitiveKeys<T> = Pick<T, {
|
|
94
|
-
[K in keyof T]-?: T[K] extends Primitive ? K : never;
|
|
95
|
-
}[keyof T]>;
|
|
96
|
-
type NonPrimitiveKeys<T> = Pick<T, {
|
|
97
|
-
[K in keyof T]-?: T[K] extends Primitive ? never : K;
|
|
98
|
-
}[keyof T]>;
|
|
99
|
-
type Recurse<T, K extends keyof T, TRecurse> = T[K] extends ObservableReadable ? T[K] : T[K] extends Promise<infer t> ? Observable<t & WithState> : T[K] extends () => infer t ? t extends Observable ? t : Observable<t> & T[K] : T[K] extends (params: ActivateParams) => infer t ? t extends Observable ? t : Observable<t> : T[K] extends (params: ActivateProxyParams<infer t>) => void ? t extends Observable ? Record<string, t> : Observable<Record<string, t>> : T[K] extends Function ? T[K] : T[K] extends ObservableProxyTwoWay<infer t, infer t2> ? ObservableProxyTwoWay<t, t2> : T[K] extends ObservableProxy<infer t> ? ObservableProxy<t> : T[K] extends ObservableProxyLink<infer t> ? ObservableProxyLink<t> : T[K] extends Map<any, any> | WeakMap<any, any> ? ObservableMap<T[K]> : T[K] extends Set<any> | WeakSet<any> ? ObservableSet<T[K]> : T[K] extends Set<any> | WeakSet<any> ? T[K] & ObservablePrimitiveBaseFns<T[K]> : T[K] extends OpaqueObject<T[K]> ? T[K] & ObservablePrimitiveChildFns<T[K]> : T[K] extends Primitive ? ObservablePrimitiveChild<T[K]> : T[K] extends Array<any> ? ObservableObjectFns<T[K]> & ObservableArrayOverride<T[K][number]> : T extends object ? TRecurse : T[K];
|
|
100
|
-
type ObservableFnsRecursiveUnsafe<T> = {
|
|
101
|
-
[K in keyof T]-?: Recurse<T, K, ObservableObject<NonNullable<T[K]>>>;
|
|
102
|
-
};
|
|
103
|
-
type ObservableFnsRecursiveSafe<T> = {
|
|
104
|
-
readonly [K in keyof T]-?: Recurse<T, K, ObservableObject<NonNullable<T[K]>>>;
|
|
105
|
-
};
|
|
106
|
-
type ObservableFnsRecursive<T> = ObservableFnsRecursiveSafe<NonPrimitiveKeys<T>> & ObservableFnsRecursiveUnsafe<PrimitiveKeys<T>>;
|
|
107
|
-
type ObservableComputedFnsRecursive<T> = {
|
|
108
|
-
readonly [K in keyof T]-?: Recurse<T, K, ObservableBaseFns<NonNullable<T[K]>>>;
|
|
109
|
-
};
|
|
110
17
|
export interface ObservableEvent {
|
|
111
18
|
fire(): void;
|
|
112
19
|
on(cb?: () => void): ObservableListenerDispose;
|
|
113
20
|
get(): void;
|
|
114
21
|
}
|
|
115
|
-
export type QueryByModified<T> = boolean | {
|
|
116
|
-
[K in keyof T]?: QueryByModified<T[K]>;
|
|
117
|
-
} | {
|
|
118
|
-
'*'?: boolean;
|
|
119
|
-
};
|
|
120
22
|
export type TypeAtPath = 'object' | 'array';
|
|
121
23
|
export interface Change {
|
|
122
24
|
path: string[];
|
|
@@ -124,223 +26,18 @@ export interface Change {
|
|
|
124
26
|
valueAtPath: any;
|
|
125
27
|
prevAtPath: any;
|
|
126
28
|
}
|
|
127
|
-
export interface PersistTransform<T = any> {
|
|
128
|
-
in?: (value: T) => T | Promise<T>;
|
|
129
|
-
out?: (value: T) => T | Promise<T>;
|
|
130
|
-
}
|
|
131
|
-
export interface PersistOptionsLocal<T = any> {
|
|
132
|
-
name: string;
|
|
133
|
-
transform?: PersistTransform<T>;
|
|
134
|
-
fieldTransforms?: FieldTransforms<T>;
|
|
135
|
-
readonly?: boolean;
|
|
136
|
-
mmkv?: MMKVConfiguration;
|
|
137
|
-
indexedDB?: {
|
|
138
|
-
prefixID?: string;
|
|
139
|
-
itemID?: string;
|
|
140
|
-
};
|
|
141
|
-
options?: any;
|
|
142
|
-
}
|
|
143
|
-
export type PersistOptionsRemote<T = any> = ObservablePersistenceConfigRemoteGlobalOptions & {
|
|
144
|
-
readonly?: boolean;
|
|
145
|
-
waitForGet?: Promise<any> | ObservableReadable<any>;
|
|
146
|
-
waitForSet?: Promise<any> | ObservableReadable<any>;
|
|
147
|
-
manual?: boolean;
|
|
148
|
-
fieldTransforms?: FieldTransforms<T>;
|
|
149
|
-
allowSetIfError?: boolean;
|
|
150
|
-
transform?: PersistTransform<T>;
|
|
151
|
-
firebase?: {
|
|
152
|
-
refPath: (uid: string | undefined) => string;
|
|
153
|
-
query?: (ref: DatabaseReference) => DatabaseReference | Query;
|
|
154
|
-
queryByModified?: QueryByModified<T>;
|
|
155
|
-
ignoreKeys?: string[];
|
|
156
|
-
requireAuth?: boolean;
|
|
157
|
-
mode?: 'once' | 'realtime';
|
|
158
|
-
};
|
|
159
|
-
offlineBehavior?: false | 'retry';
|
|
160
|
-
changeTimeout?: number;
|
|
161
|
-
metadataTimeout?: number;
|
|
162
|
-
retry?: RetryOptions;
|
|
163
|
-
onGetError?: (error: Error) => void;
|
|
164
|
-
onSetError?: (error: Error) => void;
|
|
165
|
-
log?: (message?: any, ...optionalParams: any[]) => void;
|
|
166
|
-
onBeforeSet?: () => void;
|
|
167
|
-
onSet?: () => void;
|
|
168
|
-
};
|
|
169
|
-
export interface ObservablePersistenceConfigLocalGlobalOptions {
|
|
170
|
-
onGetError?: (error: Error) => void;
|
|
171
|
-
onSetError?: (error: Error) => void;
|
|
172
|
-
indexedDB?: {
|
|
173
|
-
databaseName: string;
|
|
174
|
-
version: number;
|
|
175
|
-
tableNames: string[];
|
|
176
|
-
};
|
|
177
|
-
asyncStorage?: {
|
|
178
|
-
AsyncStorage: AsyncStorageStatic;
|
|
179
|
-
preload?: boolean | string[];
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
export interface ObservablePersistenceConfigRemoteGlobalOptions {
|
|
183
|
-
saveTimeout?: number;
|
|
184
|
-
dateModifiedKey?: string;
|
|
185
|
-
offlineBehavior?: false | 'retry';
|
|
186
|
-
onGetError?: (error: Error) => void;
|
|
187
|
-
onSetError?: (error: Error) => void;
|
|
188
|
-
log?: (logLevel: 'verbose' | 'warning' | 'error', message: any, ...optionalParams: any[]) => void;
|
|
189
|
-
onBeforeSet?: () => void;
|
|
190
|
-
onSet?: () => void;
|
|
191
|
-
}
|
|
192
|
-
export interface ObservablePersistenceConfig {
|
|
193
|
-
pluginLocal?: ClassConstructor<ObservablePersistLocal>;
|
|
194
|
-
pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions;
|
|
195
|
-
localOptions?: ObservablePersistenceConfigLocalGlobalOptions;
|
|
196
|
-
remoteOptions?: ObservablePersistenceConfigRemoteGlobalOptions;
|
|
197
|
-
}
|
|
198
|
-
export interface PersistOptions<T = any> {
|
|
199
|
-
local?: string | PersistOptionsLocal<T>;
|
|
200
|
-
remote?: PersistOptionsRemote<T>;
|
|
201
|
-
pluginLocal?: ClassConstructor<ObservablePersistLocal>;
|
|
202
|
-
pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions<T>;
|
|
203
|
-
}
|
|
204
|
-
export interface PersistMetadata {
|
|
205
|
-
id?: '__legend_metadata';
|
|
206
|
-
modified?: number;
|
|
207
|
-
pending?: any;
|
|
208
|
-
}
|
|
209
|
-
export interface ObservablePersistLocal {
|
|
210
|
-
initialize?(config: ObservablePersistenceConfigLocalGlobalOptions): void | Promise<void>;
|
|
211
|
-
loadTable?(table: string, config: PersistOptionsLocal): Promise<any> | void;
|
|
212
|
-
getTable<T = any>(table: string, config: PersistOptionsLocal): T;
|
|
213
|
-
set(table: string, changes: Change[], config: PersistOptionsLocal): Promise<any> | void;
|
|
214
|
-
deleteTable(table: string, config: PersistOptionsLocal): Promise<any> | void;
|
|
215
|
-
getMetadata(table: string, config: PersistOptionsLocal): PersistMetadata;
|
|
216
|
-
setMetadata(table: string, metadata: PersistMetadata, config: PersistOptionsLocal): Promise<any> | void;
|
|
217
|
-
deleteMetadata(table: string, config: PersistOptionsLocal): Promise<any> | void;
|
|
218
|
-
}
|
|
219
|
-
export interface ObservableOnChangeParams {
|
|
220
|
-
value: unknown;
|
|
221
|
-
path?: string[];
|
|
222
|
-
pathTypes?: TypeAtPath[];
|
|
223
|
-
mode?: 'assign' | 'set' | 'dateModified';
|
|
224
|
-
dateModified?: number | undefined;
|
|
225
|
-
}
|
|
226
|
-
export interface ObservablePersistRemoteSetParams<T> {
|
|
227
|
-
syncState: Observable<ObservablePersistState>;
|
|
228
|
-
obs: Observable<T>;
|
|
229
|
-
options: PersistOptions<T>;
|
|
230
|
-
changes: Change[];
|
|
231
|
-
value: T;
|
|
232
|
-
}
|
|
233
|
-
export interface ObservablePersistRemoteGetParams<T> {
|
|
234
|
-
state: Observable<ObservablePersistState>;
|
|
235
|
-
obs: ObservableReadable<T>;
|
|
236
|
-
options: PersistOptions<T>;
|
|
237
|
-
dateModified?: number;
|
|
238
|
-
onGet: () => void;
|
|
239
|
-
onError: (error: Error) => void;
|
|
240
|
-
onChange: (params: ObservableOnChangeParams) => void | Promise<void>;
|
|
241
|
-
}
|
|
242
|
-
export type ObservablePersistRemoteGetFnParams<T> = Omit<ObservablePersistRemoteGetParams<T>, 'onGet'>;
|
|
243
|
-
export interface ObservablePersistRemoteClass {
|
|
244
|
-
get?<T>(params: ObservablePersistRemoteGetParams<T>): void;
|
|
245
|
-
set?<T>(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
|
|
246
|
-
changes?: object;
|
|
247
|
-
dateModified?: number;
|
|
248
|
-
pathStrs?: string[];
|
|
249
|
-
}>;
|
|
250
|
-
}
|
|
251
|
-
export interface ObservablePersistRemoteFunctions<T = any> {
|
|
252
|
-
get?(params: ObservablePersistRemoteGetFnParams<T>): T | Promise<T>;
|
|
253
|
-
set?(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
|
|
254
|
-
changes?: object | undefined;
|
|
255
|
-
dateModified?: number;
|
|
256
|
-
}>;
|
|
257
|
-
}
|
|
258
|
-
export interface ObservableState {
|
|
259
|
-
isLoaded: boolean;
|
|
260
|
-
error?: Error;
|
|
261
|
-
}
|
|
262
|
-
export interface WithState {
|
|
263
|
-
state?: ObservableState;
|
|
264
|
-
_state?: ObservableState;
|
|
265
|
-
}
|
|
266
|
-
export interface ObservablePersistStateBase {
|
|
267
|
-
isLoadedLocal: boolean;
|
|
268
|
-
isEnabledLocal: boolean;
|
|
269
|
-
isEnabledRemote: boolean;
|
|
270
|
-
dateModified?: number;
|
|
271
|
-
syncCount?: number;
|
|
272
|
-
clearLocal: () => Promise<void>;
|
|
273
|
-
sync: () => Promise<void>;
|
|
274
|
-
getPendingChanges: () => Record<string, {
|
|
275
|
-
p: any;
|
|
276
|
-
v?: any;
|
|
277
|
-
}> | undefined;
|
|
278
|
-
}
|
|
279
|
-
export type ObservablePersistState = ObservableState & ObservablePersistStateBase;
|
|
280
|
-
export type ObservablePersistStateInternal = ObservablePersistState & {
|
|
281
|
-
refreshNum: number;
|
|
282
|
-
};
|
|
283
|
-
export interface WithPersistState {
|
|
284
|
-
state?: ObservablePersistState;
|
|
285
|
-
_state?: ObservablePersistState;
|
|
286
|
-
}
|
|
287
29
|
export type RecordValue<T> = T extends Record<string, infer t> ? t : never;
|
|
288
30
|
export type ArrayValue<T> = T extends Array<infer t> ? t : never;
|
|
289
31
|
export type ObservableValue<T> = T extends Observable<infer t> ? t : never;
|
|
290
|
-
|
|
291
|
-
[K in keyof T]-?: K extends string ? T[K] extends Record<string, any> ? T[K] extends any[] ? never : K : never : never;
|
|
292
|
-
}[keyof T]>;
|
|
293
|
-
declare type DictKeys<T> = Pick<T, {
|
|
294
|
-
[K in keyof T]-?: K extends string ? (T[K] extends Record<string, Record<string, any>> ? K : never) : never;
|
|
295
|
-
}[keyof T]>;
|
|
296
|
-
declare type ArrayKeys<T> = Pick<T, {
|
|
297
|
-
[K in keyof T]-?: K extends string | number ? (T[K] extends any[] ? K : never) : never;
|
|
298
|
-
}[keyof T]>;
|
|
299
|
-
export declare type FieldTransforms<T> = (T extends Record<string, Record<string, any>> ? {
|
|
300
|
-
_dict: FieldTransformsInner<RecordValue<T>>;
|
|
301
|
-
} : never) | FieldTransformsInner<T>;
|
|
302
|
-
export declare type FieldTransformsInner<T> = {
|
|
303
|
-
[K in keyof T]: string;
|
|
304
|
-
} & ({
|
|
305
|
-
[K in keyof ObjectKeys<T> as `${K}_obj`]?: FieldTransforms<T[K]>;
|
|
306
|
-
} | {
|
|
307
|
-
[K in keyof DictKeys<T> as `${K}_dict`]?: FieldTransforms<RecordValue<T[K]>>;
|
|
308
|
-
}) & {
|
|
309
|
-
[K in keyof ArrayKeys<T> as `${K}_arr`]?: FieldTransforms<ArrayValue<T[K]>>;
|
|
310
|
-
} & {
|
|
311
|
-
[K in keyof ArrayKeys<T> as `${K}_val`]?: FieldTransforms<ArrayValue<T[K]>>;
|
|
312
|
-
};
|
|
313
|
-
export type Selector<T> = ObservableReadable<T> | ObservableEvent | (() => T) | T;
|
|
32
|
+
export type Selector<T> = ObservableReadableNew<T> | ObservableEvent | (() => T) | T;
|
|
314
33
|
export type ClassConstructor<I, Args extends any[] = any[]> = new (...args: Args) => I;
|
|
315
34
|
export type ObservableListenerDispose = () => void;
|
|
316
35
|
export interface ObservableRoot {
|
|
317
36
|
_: any;
|
|
318
|
-
locked?: boolean;
|
|
319
|
-
toActivate?: NodeValue[];
|
|
320
37
|
set?: (value: any) => void;
|
|
321
|
-
activate?: () => void;
|
|
322
38
|
}
|
|
323
39
|
export type Primitive = boolean | string | number | Date;
|
|
324
40
|
export type NotPrimitive<T> = T extends Primitive ? never : T;
|
|
325
|
-
export type ObservableMap<T extends Map<any, any> | WeakMap<any, any>> = Omit<T, 'get' | 'size'> & Omit<ObservablePrimitiveBaseFns<T>, 'get' | 'size'> & MapGet<T>;
|
|
326
|
-
export type ObservableSet<T extends Set<any> | WeakSet<any>> = Omit<T, 'size'> & Omit<ObservablePrimitiveBaseFns<T>, 'size'> & {
|
|
327
|
-
size: ObservablePrimitiveChild<number>;
|
|
328
|
-
};
|
|
329
|
-
export type ObservableMapIfMap<T> = T extends Map<any, any> | WeakMap<any, any> ? ObservableMap<T> : never;
|
|
330
|
-
export type ObservableArray<T extends any[]> = ObservableObjectFns<T> & ObservableArrayOverride<T[number]>;
|
|
331
|
-
export type ObservableObject<T = any> = ObservableFnsRecursive<T> & ObservableObjectFns<T>;
|
|
332
|
-
export type ObservableChild<T = any> = [T] extends [Primitive] ? ObservablePrimitiveChild<T> : ObservableObject<T>;
|
|
333
|
-
export type ObservablePrimitiveChild<T = any> = [T] extends [boolean] ? ObservablePrimitiveChildFns<T> & ObservablePrimitiveBooleanFns<T> : ObservablePrimitiveChildFns<T>;
|
|
334
|
-
export type ObservableObjectOrArray<T> = T extends Map<any, any> | WeakMap<any, any> ? ObservableMap<T> : T extends Set<any> | WeakSet<any> ? ObservableSet<T> : T extends any[] ? ObservableArray<T> : ObservableObject<T>;
|
|
335
|
-
export type ObservableComputed<T = any> = ObservableBaseFns<T> & ObservableComputedFnsRecursive<T>;
|
|
336
|
-
export type ObservableComputedTwoWay<T = any, T2 = T> = ObservableComputed<T> & ObservablePrimitiveBaseFns<T2>;
|
|
337
|
-
type Equals<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;
|
|
338
|
-
export type Observable<T = any> = Equals<T, any> extends true ? ObservableObject<any> : [T] extends [object] ? ObservableObjectOrArray<T> : ObservablePrimitive<T>;
|
|
339
|
-
export type ObservableReadable<T = any> = ObservableBaseFns<T> | ObservablePrimitiveBaseFns<T> | ObservablePrimitiveChildFns<T> | ObservableObjectFns<T> | ObservableMapIfMap<T>;
|
|
340
|
-
export type ObservableWriteable<T = any> = ObservableReadable<T> & {
|
|
341
|
-
set(value: Nullable<T> | CallbackSetter<T> | Promise<T>): any;
|
|
342
|
-
delete?: () => any;
|
|
343
|
-
};
|
|
344
41
|
export interface NodeValueListener {
|
|
345
42
|
track: TrackingType;
|
|
346
43
|
noArgs?: boolean;
|
|
@@ -353,29 +50,25 @@ interface BaseNodeValue {
|
|
|
353
50
|
root: ObservableRoot;
|
|
354
51
|
listeners?: Set<NodeValueListener>;
|
|
355
52
|
listenersImmediate?: Set<NodeValueListener>;
|
|
356
|
-
isComputed?: boolean;
|
|
357
|
-
proxyFn?: (key: string) => ObservableReadable;
|
|
358
53
|
isEvent?: boolean;
|
|
359
54
|
linkedToNode?: NodeValue;
|
|
55
|
+
linkedToNodeDispose?: () => void;
|
|
56
|
+
activatedObserveDispose?: () => void;
|
|
360
57
|
linkedFromNodes?: Set<NodeValue>;
|
|
361
58
|
isSetting?: number;
|
|
362
59
|
isAssigning?: number;
|
|
363
60
|
parentOther?: NodeValue;
|
|
364
|
-
functions?: Map<string, Function |
|
|
365
|
-
lazy?: boolean
|
|
366
|
-
|
|
61
|
+
functions?: Map<string, Function | ObservableComputedNew<any>>;
|
|
62
|
+
lazy?: boolean;
|
|
63
|
+
lazyFn?: Function;
|
|
64
|
+
needsExtract?: boolean;
|
|
65
|
+
state?: ObservableNew<ObservablePersistState>;
|
|
367
66
|
activated?: boolean;
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
update?: UpdateFn;
|
|
372
|
-
subscriber?: (params: SubscribeOptions) => void;
|
|
373
|
-
retryOptions?: RetryOptions;
|
|
374
|
-
lastSync: {
|
|
375
|
-
value?: number;
|
|
376
|
-
};
|
|
377
|
-
cacheOptions?: CacheOptions;
|
|
67
|
+
activationState?: ActivateParams & {
|
|
68
|
+
onError?: () => void;
|
|
69
|
+
persistedRetry?: boolean;
|
|
378
70
|
};
|
|
71
|
+
dirtyFn?: () => void;
|
|
379
72
|
}
|
|
380
73
|
export interface RootNodeValue extends BaseNodeValue {
|
|
381
74
|
parent?: undefined;
|
|
@@ -386,6 +79,11 @@ export interface ChildNodeValue extends BaseNodeValue {
|
|
|
386
79
|
key: string;
|
|
387
80
|
}
|
|
388
81
|
export type NodeValue = RootNodeValue | ChildNodeValue;
|
|
82
|
+
export interface TrackingNode {
|
|
83
|
+
node: NodeValue;
|
|
84
|
+
track: TrackingType;
|
|
85
|
+
num: number;
|
|
86
|
+
}
|
|
389
87
|
export interface ObserveEvent<T> {
|
|
390
88
|
num: number;
|
|
391
89
|
previous?: T | undefined;
|
|
@@ -396,41 +94,56 @@ export interface ObserveEventCallback<T> {
|
|
|
396
94
|
num: number;
|
|
397
95
|
previous?: T | undefined;
|
|
398
96
|
value?: T;
|
|
399
|
-
cancel
|
|
97
|
+
cancel: boolean;
|
|
98
|
+
nodes: Map<NodeValue, TrackingNode> | undefined;
|
|
99
|
+
refresh: () => void;
|
|
400
100
|
onCleanup?: () => void;
|
|
401
101
|
onCleanupReaction?: () => void;
|
|
402
102
|
}
|
|
403
103
|
export type ObservableProxy<T extends Record<string, any>> = {
|
|
404
104
|
[K in keyof T]: ObservableComputed<T[K]>;
|
|
405
|
-
} &
|
|
105
|
+
} & Observable<T> & {
|
|
406
106
|
[symbolGetNode]: NodeValue;
|
|
407
107
|
};
|
|
408
108
|
export type ObservableProxyLink<T extends Record<string, any>> = {
|
|
409
109
|
[K in keyof T]: Observable<T[K]>;
|
|
410
|
-
} &
|
|
110
|
+
} & Observable<T> & {
|
|
411
111
|
[symbolGetNode]: NodeValue;
|
|
412
112
|
};
|
|
413
113
|
export type ObservableProxyTwoWay<T extends Record<string, any>, T2> = {
|
|
414
114
|
[K in keyof T]: ObservableComputedTwoWay<T[K], T2>;
|
|
415
|
-
} &
|
|
115
|
+
} & Observable<T> & {
|
|
416
116
|
[symbolGetNode]: NodeValue;
|
|
417
117
|
};
|
|
418
|
-
export
|
|
419
|
-
|
|
420
|
-
|
|
118
|
+
export type OnSetParams<T> = ListenerParams<T extends Promise<infer t> ? t : T> & OnSetExtra;
|
|
119
|
+
export interface ActivateGetParams {
|
|
120
|
+
updateLastSync: (lastSync: number) => void;
|
|
121
|
+
setMode: (mode: 'assign' | 'set') => void;
|
|
122
|
+
refresh: () => void;
|
|
421
123
|
}
|
|
422
124
|
export interface ActivateParams<T = any> {
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
125
|
+
onSet?: (params: OnSetParams<T>) => void | Promise<any>;
|
|
126
|
+
subscribe?: (params: {
|
|
127
|
+
node: NodeValue;
|
|
426
128
|
update: UpdateFn;
|
|
427
129
|
refresh: () => void;
|
|
428
|
-
}) => void
|
|
130
|
+
}) => void;
|
|
131
|
+
waitFor?: Selector<any>;
|
|
132
|
+
initial?: T extends Promise<infer t> ? t : T;
|
|
133
|
+
get?: (params: ActivateGetParams) => T;
|
|
134
|
+
retry?: RetryOptions;
|
|
135
|
+
offlineBehavior?: false | 'retry';
|
|
429
136
|
}
|
|
430
|
-
export interface
|
|
431
|
-
|
|
137
|
+
export interface ActivateParamsWithLookup<T extends Record<string, any> = Record<string, any>> extends ActivateParams<T> {
|
|
138
|
+
lookup: (key: string) => Promise<RecordValue<T>> | Observable<RecordValue<T>> | RecordValue<T>;
|
|
432
139
|
}
|
|
433
|
-
export type
|
|
140
|
+
export type Activated<T> = T;
|
|
141
|
+
export type UpdateFn = (params: {
|
|
142
|
+
value: unknown;
|
|
143
|
+
mode?: 'assign' | 'set' | 'lastSync' | 'dateModified' | 'merge';
|
|
144
|
+
dateModified?: number | undefined;
|
|
145
|
+
lastSync?: number | undefined;
|
|
146
|
+
}) => void;
|
|
434
147
|
export interface RetryOptions {
|
|
435
148
|
infinite?: boolean;
|
|
436
149
|
times?: number;
|
|
@@ -439,10 +152,20 @@ export interface RetryOptions {
|
|
|
439
152
|
maxDelay?: number;
|
|
440
153
|
}
|
|
441
154
|
export interface OnSetExtra {
|
|
155
|
+
node: NodeValue;
|
|
442
156
|
update: UpdateFn;
|
|
157
|
+
refresh: () => void;
|
|
158
|
+
cancelRetry: () => void;
|
|
159
|
+
retryNum: number;
|
|
160
|
+
fromSubscribe: boolean | undefined;
|
|
443
161
|
}
|
|
444
162
|
export interface SubscribeOptions {
|
|
163
|
+
node: NodeValue;
|
|
445
164
|
update: UpdateFn;
|
|
446
165
|
refresh: () => void;
|
|
447
166
|
}
|
|
167
|
+
export interface CacheReturnValue {
|
|
168
|
+
lastSync: number;
|
|
169
|
+
value: any;
|
|
170
|
+
}
|
|
448
171
|
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { GetOptions, ListenerFn, TrackingType } from './observableInterfaces';
|
|
2
|
+
type Primitive = string | number | boolean | symbol | bigint | undefined | null | Date;
|
|
3
|
+
type ArrayOverrideFnNames = 'find' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
|
|
4
|
+
type ObservableComputedTwoWay<T, T2> = Observable<T> & MutableObservableBase<T2>;
|
|
5
|
+
type ObservableComputed<T = any> = Readonly<ObservableNode<T>>;
|
|
6
|
+
type ObservableComputedOrFn<T = any> = ObservableComputed<T> & (() => T);
|
|
7
|
+
type MakeReadonlyInner<T> = Omit<T, keyof MutableObservableBase<any>>;
|
|
8
|
+
type Readonly<T> = MakeReadonlyInner<T> & {
|
|
9
|
+
[K in keyof MakeReadonlyInner<T>]: T extends Observable ? T[K] : Readonly<T[K]>;
|
|
10
|
+
};
|
|
11
|
+
type RemoveIndex<T> = {
|
|
12
|
+
[K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
|
|
13
|
+
};
|
|
14
|
+
type BuiltIns = String | Boolean | Number | Date | Error | RegExp | Array<any> | Function | Promise<any>;
|
|
15
|
+
type IsUserDefinedObject<T> = T extends Function | BuiltIns | any[] ? false : T extends object ? true : false;
|
|
16
|
+
export type RemoveObservables<T> = T extends ImmutableObservableBase<infer t> ? t : IsUserDefinedObject<T> extends true ? {
|
|
17
|
+
[K in keyof T]: RemoveObservables<T[K]>;
|
|
18
|
+
} : T;
|
|
19
|
+
interface ObservableArray<T, U> extends ObservablePrimitive<T>, Pick<Array<Observable<U>>, ArrayOverrideFnNames>, Omit<RemoveIndex<Array<U>>, ArrayOverrideFnNames> {
|
|
20
|
+
}
|
|
21
|
+
interface ObservableObjectFns<T> {
|
|
22
|
+
assign(value: Partial<T>): Observable<T>;
|
|
23
|
+
}
|
|
24
|
+
interface ObservableObjectFunctions<T = Record<string, any>> extends ObservablePrimitive<T>, ObservableObjectFns<T> {
|
|
25
|
+
}
|
|
26
|
+
type ObservableMap<T extends Map<any, any> | WeakMap<any, any>> = Omit<T, 'get' | 'size'> & Omit<ObservablePrimitive<T>, 'get' | 'size'> & {
|
|
27
|
+
get(key: Parameters<T['get']>[0]): Observable<Parameters<T['set']>[1]>;
|
|
28
|
+
get(): T;
|
|
29
|
+
size: ImmutableObservableBase<number>;
|
|
30
|
+
};
|
|
31
|
+
type ObservableSet<T extends Set<any> | WeakSet<any>> = Omit<T, 'size'> & Omit<ObservablePrimitive<T>, 'size'> & {
|
|
32
|
+
size: ImmutableObservableBase<number>;
|
|
33
|
+
};
|
|
34
|
+
interface ObservableBoolean extends ObservablePrimitive<boolean> {
|
|
35
|
+
toggle(): boolean;
|
|
36
|
+
}
|
|
37
|
+
interface ObservablePrimitive<T> extends ImmutableObservableBase<T>, MutableObservableBase<T> {
|
|
38
|
+
}
|
|
39
|
+
type ObservableAny = Partial<ObservableObjectFns<any>> & ObservablePrimitive<any> & Record<string, any>;
|
|
40
|
+
interface ImmutableObservableBase<T> {
|
|
41
|
+
peek(): RemoveObservables<T>;
|
|
42
|
+
get(trackingType?: TrackingType | GetOptions): RemoveObservables<T>;
|
|
43
|
+
onChange(cb: ListenerFn<T>, options?: {
|
|
44
|
+
trackingType?: TrackingType;
|
|
45
|
+
initial?: boolean;
|
|
46
|
+
immediate?: boolean;
|
|
47
|
+
noArgs?: boolean;
|
|
48
|
+
}): () => void;
|
|
49
|
+
}
|
|
50
|
+
interface MutableObservableBase<T> {
|
|
51
|
+
set(value: (prev: RemoveObservables<T>) => RemoveObservables<T>): Observable<T>;
|
|
52
|
+
set(value: RecursiveValueOrFunction<T>): Observable<T>;
|
|
53
|
+
set(value: Promise<RemoveObservables<T>>): Observable<T>;
|
|
54
|
+
set(value: RemoveObservables<T>): Observable<T>;
|
|
55
|
+
set(value: Observable<RemoveObservables<T>>): Observable<T>;
|
|
56
|
+
delete(): void;
|
|
57
|
+
}
|
|
58
|
+
type UndefinedIf<T, U> = U extends true ? T | undefined : T;
|
|
59
|
+
type IsNullable<T> = undefined extends T ? true : null extends T ? true : false;
|
|
60
|
+
type NonObservable = Function | Observable;
|
|
61
|
+
type NonObservableKeys<T> = {
|
|
62
|
+
[K in keyof T]-?: IsStrictAny<T[K]> extends true ? never : T[K] extends undefined | null ? never : NonNullable<T[K]> extends NonObservable ? K : never;
|
|
63
|
+
}[keyof T];
|
|
64
|
+
type ObservableProps<T> = RestoreNullability<T, Omit<NonNullable<T>, NonObservableKeys<NonNullable<T>>>>;
|
|
65
|
+
type NonObservableProps<T> = RestoreNullability<T, NullablePropsIf<Pick<NonNullable<T>, NonObservableKeys<NonNullable<T>>>, IsNullable<T>>>;
|
|
66
|
+
type NullablePropsIf<T, U> = {
|
|
67
|
+
[K in keyof T]: UndefinedIf<T[K], U>;
|
|
68
|
+
};
|
|
69
|
+
type RestoreNullability<Source, Target> = IsNullable<Source> extends true ? Target | Extract<Source, null | undefined> : Target;
|
|
70
|
+
type ObservableChildren<T, Nullable = IsNullable<T>> = {
|
|
71
|
+
[K in keyof T]-?: Observable<UndefinedIf<T[K], Nullable>>;
|
|
72
|
+
};
|
|
73
|
+
type ObservableFunctionChildren<T> = {
|
|
74
|
+
[K in keyof T]-?: T[K] extends Observable ? T[K] : T[K] extends () => Promise<infer t> | infer t ? t extends void ? T[K] : t extends Observable<infer k> ? ObservableComputed<k> : ObservableComputedOrFn<t> : T[K];
|
|
75
|
+
};
|
|
76
|
+
type IsStrictAny<T> = 0 extends 1 & T ? true : false;
|
|
77
|
+
export interface ObservableState {
|
|
78
|
+
isLoaded: boolean;
|
|
79
|
+
error?: Error;
|
|
80
|
+
}
|
|
81
|
+
type ObservableObject<T> = ObservableObjectFunctions<ObservableProps<T> & NonObservableProps<T>> & ObservableChildren<ObservableProps<T>> & ObservableFunctionChildren<NonObservableProps<T>>;
|
|
82
|
+
type ObservableFunction<T> = T extends () => infer t ? t | (() => t) : T;
|
|
83
|
+
type ObservableNode<T, NT = NonNullable<T>> = [NT] extends [never] ? ObservablePrimitive<T> : IsStrictAny<T> extends true ? ObservableAny : [T] extends [Promise<infer t>] ? ObservableNode<t> : [T] extends [() => infer t] ? [t] extends [ImmutableObservableBase<any>] ? t : ObservableComputed<ObservableFunction<t>> : [NT] extends [ImmutableObservableBase<any>] ? NT : [NT] extends [Primitive] ? [NT] extends [boolean] ? ObservableBoolean : ObservablePrimitive<T> : NT extends Map<any, any> | WeakMap<any, any> ? ObservableMap<NT> : NT extends Set<infer U> ? ObservableSet<Set<UndefinedIf<U, IsNullable<T>>>> : NT extends WeakSet<any> ? ObservableSet<NT> : NT extends Array<infer U> ? ObservableArray<T, U> & ObservableChildren<T> : ObservableObject<T> & {};
|
|
84
|
+
type Observable<T = any> = ObservableNode<T> & {};
|
|
85
|
+
type ObservableReadable<T = any> = ImmutableObservableBase<T>;
|
|
86
|
+
type ObservableWriteable<T = any> = ObservableReadable<T> & MutableObservableBase<T>;
|
|
87
|
+
type ValueOrFunction<T> = T extends Function ? T : T | (() => T | Promise<T>);
|
|
88
|
+
type ValueOrFunctionKeys<T> = {
|
|
89
|
+
[K in keyof T]: RecursiveValueOrFunction<T[K]>;
|
|
90
|
+
};
|
|
91
|
+
type RecursiveValueOrFunction<T> = T extends Function ? T : T extends object ? Promise<ValueOrFunctionKeys<T>> | ValueOrFunctionKeys<T> | (() => T | Promise<T> | ValueOrFunctionKeys<T> | Promise<ValueOrFunctionKeys<T>> | Observable<T>) : ValueOrFunction<T>;
|
|
92
|
+
export type { ObservableComputed, ObservableComputedTwoWay, Observable, ObservableBoolean, ObservableObject, ObservablePrimitive, ObservableReadable, ObservableWriteable, ImmutableObservableBase, RecursiveValueOrFunction, };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ObservablePersistRemoteClass, type ObservablePersistRemoteFunctions } from '@legendapp/state';
|
|
2
2
|
export declare function observablePersistRemoteFunctionsAdapter<T = {}>({ get, set, }: ObservablePersistRemoteFunctions<T>): ObservablePersistRemoteClass;
|