@legendapp/state 2.2.0-next.2 → 2.2.0-next.21

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 (110) hide show
  1. package/babel.js.map +1 -1
  2. package/config/enableDirectAccess.d.ts +1 -1
  3. package/config/enableDirectPeek.d.ts +1 -1
  4. package/config/enableReactDirectRender.js.map +1 -1
  5. package/config/enableReactDirectRender.mjs.map +1 -1
  6. package/config/enableReactTracking.d.ts +4 -3
  7. package/config/enableReactTracking.js.map +1 -1
  8. package/config/enableReactTracking.mjs.map +1 -1
  9. package/config/enableReactUse.d.ts +1 -1
  10. package/helpers/fetch.d.ts +4 -3
  11. package/helpers/fetch.js.map +1 -1
  12. package/helpers/fetch.mjs.map +1 -1
  13. package/helpers/pageHash.js.map +1 -1
  14. package/helpers/pageHash.mjs.map +1 -1
  15. package/helpers/pageHashParams.js.map +1 -1
  16. package/helpers/pageHashParams.mjs.map +1 -1
  17. package/helpers/time.d.ts +2 -2
  18. package/helpers/time.js.map +1 -1
  19. package/helpers/time.mjs.map +1 -1
  20. package/history.js.map +1 -1
  21. package/history.mjs.map +1 -1
  22. package/index.d.ts +14 -9
  23. package/index.js +522 -226
  24. package/index.js.map +1 -1
  25. package/index.mjs +521 -227
  26. package/index.mjs.map +1 -1
  27. package/package.json +2 -10
  28. package/persist-plugins/async-storage.js.map +1 -1
  29. package/persist-plugins/async-storage.mjs.map +1 -1
  30. package/persist-plugins/fetch.js.map +1 -1
  31. package/persist-plugins/fetch.mjs.map +1 -1
  32. package/persist-plugins/firebase.js +3 -3
  33. package/persist-plugins/firebase.js.map +1 -1
  34. package/persist-plugins/firebase.mjs +3 -3
  35. package/persist-plugins/firebase.mjs.map +1 -1
  36. package/persist-plugins/indexeddb.js.map +1 -1
  37. package/persist-plugins/indexeddb.mjs.map +1 -1
  38. package/persist-plugins/local-storage.js +1 -1
  39. package/persist-plugins/local-storage.js.map +1 -1
  40. package/persist-plugins/local-storage.mjs +1 -1
  41. package/persist-plugins/local-storage.mjs.map +1 -1
  42. package/persist-plugins/mmkv.js.map +1 -1
  43. package/persist-plugins/mmkv.mjs.map +1 -1
  44. package/persist-plugins/query.js.map +1 -1
  45. package/persist-plugins/query.mjs.map +1 -1
  46. package/persist.d.ts +16 -1
  47. package/persist.js +406 -138
  48. package/persist.js.map +1 -1
  49. package/persist.mjs +407 -139
  50. package/persist.mjs.map +1 -1
  51. package/react-hooks/createObservableHook.js +1 -1
  52. package/react-hooks/createObservableHook.js.map +1 -1
  53. package/react-hooks/createObservableHook.mjs +1 -1
  54. package/react-hooks/createObservableHook.mjs.map +1 -1
  55. package/react-hooks/useFetch.d.ts +4 -3
  56. package/react-hooks/useFetch.js.map +1 -1
  57. package/react-hooks/useFetch.mjs.map +1 -1
  58. package/react-hooks/useHover.js.map +1 -1
  59. package/react-hooks/useHover.mjs.map +1 -1
  60. package/react-hooks/useMeasure.js.map +1 -1
  61. package/react-hooks/useMeasure.mjs.map +1 -1
  62. package/react-hooks/useObservableNextRouter.js.map +1 -1
  63. package/react-hooks/useObservableNextRouter.mjs.map +1 -1
  64. package/react-hooks/useObservableQuery.js.map +1 -1
  65. package/react-hooks/useObservableQuery.mjs.map +1 -1
  66. package/react-hooks/usePersistedObservable.d.ts +2 -2
  67. package/react-hooks/usePersistedObservable.js +3 -3
  68. package/react-hooks/usePersistedObservable.js.map +1 -1
  69. package/react-hooks/usePersistedObservable.mjs +3 -3
  70. package/react-hooks/usePersistedObservable.mjs.map +1 -1
  71. package/react.js +13 -8
  72. package/react.js.map +1 -1
  73. package/react.mjs +14 -9
  74. package/react.mjs.map +1 -1
  75. package/src/ObservableObject.d.ts +8 -4
  76. package/src/ObservablePrimitive.d.ts +2 -1
  77. package/src/activated.d.ts +3 -0
  78. package/src/batching.d.ts +3 -1
  79. package/src/computed.d.ts +1 -1
  80. package/src/config/enableDirectAccess.d.ts +1 -1
  81. package/src/config/enableDirectPeek.d.ts +1 -1
  82. package/src/config/enableReactTracking.d.ts +4 -3
  83. package/src/config/enableReactUse.d.ts +1 -1
  84. package/src/createObservable.d.ts +2 -2
  85. package/src/globals.d.ts +10 -9
  86. package/src/helpers/fetch.d.ts +4 -3
  87. package/src/helpers/time.d.ts +2 -2
  88. package/src/helpers.d.ts +3 -2
  89. package/src/history/trackHistory.d.ts +1 -1
  90. package/src/observable.d.ts +6 -15
  91. package/src/observableInterfaces.d.ts +68 -315
  92. package/src/observableTypes.d.ts +93 -0
  93. package/src/persist/observablePersistRemoteFunctionsAdapter.d.ts +1 -1
  94. package/src/persist/persistActivateNode.d.ts +1 -0
  95. package/src/persist/persistHelpers.d.ts +1 -1
  96. package/src/persist/persistObservable.d.ts +3 -3
  97. package/src/persistTypes.d.ts +229 -0
  98. package/src/proxy.d.ts +2 -1
  99. package/src/react/Computed.d.ts +1 -1
  100. package/src/react/Switch.d.ts +3 -3
  101. package/src/react/reactInterfaces.d.ts +2 -1
  102. package/src/react/usePauseProvider.d.ts +3 -3
  103. package/src/react/useWhen.d.ts +2 -2
  104. package/src/react-hooks/useFetch.d.ts +4 -3
  105. package/src/react-hooks/usePersistedObservable.d.ts +2 -2
  106. package/src/retry.d.ts +4 -0
  107. package/src/trackSelector.d.ts +3 -2
  108. package/src/when.d.ts +6 -2
  109. package/trace.js.map +1 -1
  110. package/trace.mjs.map +1 -1
package/src/helpers.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import type { ObservableEvent, ObservableObject, ObservableReadable, ObservableWriteable, ObserveEvent, OpaqueObject, Selector, TypeAtPath } from './observableInterfaces';
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;
@@ -6,7 +7,7 @@ export declare function opaqueObject<T extends object>(value: T): OpaqueObject<T
6
7
  export declare function lockObservable(obs: ObservableReadable, value: boolean): void;
7
8
  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
9
  export declare function setInObservableAtPath(obs: ObservableWriteable, path: string[], pathTypes: string[], value: any, mode: 'assign' | 'set'): void;
9
- export declare function mergeIntoObservable<T extends ObservableObject | object>(target: T, ...sources: any[]): T;
10
+ export declare function mergeIntoObservable<T extends ObservableWriteable<Record<string, any>> | object>(target: T, ...sources: any[]): T;
10
11
  export declare function constructObjectWithPath(path: string[], pathTypes: TypeAtPath[], value: any): object;
11
12
  export declare function deconstructObjectWithPath(path: string[], pathTypes: TypeAtPath[], value: any): object;
12
13
  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<string, Partial<T>>>;
3
+ export declare function trackHistory<T>(obs: ObservableReadable<T>, targetObservable?: ObservableWriteable<Record<TimestampAsString, Partial<T>>>): ObservableWriteable<Record<TimestampAsString, any>>;
4
4
  export {};
@@ -1,16 +1,7 @@
1
- import type { ComputedParams, ComputedProxyParams, Observable, ObservableComputed, ObservablePrimitive, RecordValue, WithState } from './observableInterfaces';
2
- type TWithFunctions<T> = T | {
3
- [K in keyof T]: ((params: ComputedProxyParams<T[K] | RecordValue<T[K]>>) => TWithFunctions<T[K]> | Promise<TWithFunctions<T[K]>> | void) | TWithFunctions<T[K]>;
4
- };
5
- export declare function observable<T>(value: Promise<T>): Observable<T & WithState>;
6
- export declare function observable<T>(value: () => Observable<T>): Observable<T>;
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: ComputedParams) => Observable<T>): Observable<T & WithState>;
10
- export declare function observable<T>(value: (params: ComputedParams) => Promise<T>): Observable<T & WithState>;
11
- export declare function observable<T>(value: (params: ComputedParams) => T): Observable<T>;
12
- export declare function observable<T>(value: (params: ComputedProxyParams<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 { ObservablePersistState } from './persistTypes';
2
+ import type { Observable, ObservablePrimitive, ObservableReadable, RecursiveValueOrFunction } from './observableTypes';
3
+ export declare function observable<T>(): Observable<T | undefined>;
4
+ export declare function observable<T>(value: Promise<RecursiveValueOrFunction<T>> | RecursiveValueOrFunction<T>): Observable<T>;
5
+ export declare function observablePrimitive<T>(value: Promise<T>): ObservablePrimitive<T>;
15
6
  export declare function observablePrimitive<T>(value?: T): ObservablePrimitive<T>;
16
- export {};
7
+ 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 { DatabaseReference, Query } from 'firebase/database';
4
- interface MMKVConfiguration {
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, 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: ComputedParams) => infer t ? t extends Observable ? t : Observable<t> : T[K] extends (params: ComputedProxyParams<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,185 +26,10 @@ 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
- onGetError?: (error: Error) => void;
162
- onSetError?: (error: Error) => void;
163
- log?: (message?: any, ...optionalParams: any[]) => void;
164
- onBeforeSet?: () => void;
165
- onSet?: () => void;
166
- };
167
- export interface ObservablePersistenceConfigLocalGlobalOptions {
168
- onGetError?: (error: Error) => void;
169
- onSetError?: (error: Error) => void;
170
- indexedDB?: {
171
- databaseName: string;
172
- version: number;
173
- tableNames: string[];
174
- };
175
- asyncStorage?: {
176
- AsyncStorage: AsyncStorageStatic;
177
- preload?: boolean | string[];
178
- };
179
- }
180
- export interface ObservablePersistenceConfigRemoteGlobalOptions {
181
- saveTimeout?: number;
182
- dateModifiedKey?: string;
183
- offlineBehavior?: false | 'retry';
184
- onGetError?: (error: Error) => void;
185
- onSetError?: (error: Error) => void;
186
- log?: (logLevel: 'verbose' | 'warning' | 'error', message: any, ...optionalParams: any[]) => void;
187
- onBeforeSet?: () => void;
188
- onSet?: () => void;
189
- }
190
- export interface ObservablePersistenceConfig {
191
- pluginLocal?: ClassConstructor<ObservablePersistLocal>;
192
- pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions;
193
- localOptions?: ObservablePersistenceConfigLocalGlobalOptions;
194
- remoteOptions?: ObservablePersistenceConfigRemoteGlobalOptions;
195
- }
196
- export interface PersistOptions<T = any> {
197
- local?: string | PersistOptionsLocal<T>;
198
- remote?: PersistOptionsRemote<T>;
199
- pluginLocal?: ClassConstructor<ObservablePersistLocal>;
200
- pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions<T>;
201
- }
202
- export interface PersistMetadata {
203
- id?: '__legend_metadata';
204
- modified?: number;
205
- pending?: any;
206
- }
207
- export interface ObservablePersistLocal {
208
- initialize?(config: ObservablePersistenceConfigLocalGlobalOptions): void | Promise<void>;
209
- loadTable?(table: string, config: PersistOptionsLocal): Promise<any> | void;
210
- getTable<T = any>(table: string, config: PersistOptionsLocal): T;
211
- set(table: string, changes: Change[], config: PersistOptionsLocal): Promise<any> | void;
212
- deleteTable(table: string, config: PersistOptionsLocal): Promise<any> | void;
213
- getMetadata(table: string, config: PersistOptionsLocal): PersistMetadata;
214
- setMetadata(table: string, metadata: PersistMetadata, config: PersistOptionsLocal): Promise<any> | void;
215
- deleteMetadata(table: string, config: PersistOptionsLocal): Promise<any> | void;
216
- }
217
- export interface ObservableOnChangeParams {
218
- value: unknown;
219
- path?: string[];
220
- pathTypes?: TypeAtPath[];
221
- mode?: 'assign' | 'set' | 'dateModified';
222
- dateModified?: number | undefined;
223
- }
224
- export interface ObservablePersistRemoteSetParams<T> {
225
- syncState: Observable<ObservablePersistState>;
226
- obs: Observable<T>;
227
- options: PersistOptions<T>;
228
- changes: Change[];
229
- value: T;
230
- }
231
- export interface ObservablePersistRemoteGetParams<T> {
232
- state: Observable<ObservablePersistState>;
233
- obs: ObservableReadable<T>;
234
- options: PersistOptions<T>;
235
- dateModified?: number;
236
- onGet: () => void;
237
- onChange: (params: ObservableOnChangeParams) => void | Promise<void>;
238
- }
239
- export type ObservablePersistRemoteGetFnParams<T> = Omit<ObservablePersistRemoteGetParams<T>, 'onGet'>;
240
- export interface ObservablePersistRemoteClass {
241
- get?<T>(params: ObservablePersistRemoteGetParams<T>): void;
242
- set?<T>(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
243
- changes?: object;
244
- dateModified?: number;
245
- pathStrs?: string[];
246
- }>;
247
- }
248
- export interface ObservablePersistRemoteFunctions<T = any> {
249
- get?(params: ObservablePersistRemoteGetFnParams<T>): T | Promise<T>;
250
- set?(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
251
- changes?: object | undefined;
252
- dateModified?: number;
253
- }>;
254
- }
255
- export interface ObservableState {
256
- isLoaded: boolean;
257
- error?: Error;
258
- }
259
- export interface WithState {
260
- state?: ObservableState;
261
- _state?: ObservableState;
262
- }
263
- export interface ObservablePersistState extends ObservableState {
264
- isLoadedLocal: boolean;
265
- isEnabledLocal: boolean;
266
- isEnabledRemote: boolean;
267
- dateModified?: number;
268
- clearLocal: () => Promise<void>;
269
- sync: () => Promise<void>;
270
- getPendingChanges: () => Record<string, {
271
- p: any;
272
- v?: any;
273
- }> | undefined;
274
- }
275
- export interface WithPersistState {
276
- state?: ObservablePersistState;
277
- _state?: ObservablePersistState;
278
- }
279
29
  export type RecordValue<T> = T extends Record<string, infer t> ? t : never;
280
30
  export type ArrayValue<T> = T extends Array<infer t> ? t : never;
281
31
  export type ObservableValue<T> = T extends Observable<infer t> ? t : never;
282
- declare type ObjectKeys<T> = Pick<T, {
283
- [K in keyof T]-?: K extends string ? T[K] extends Record<string, any> ? T[K] extends any[] ? never : K : never : never;
284
- }[keyof T]>;
285
- declare type DictKeys<T> = Pick<T, {
286
- [K in keyof T]-?: K extends string ? (T[K] extends Record<string, Record<string, any>> ? K : never) : never;
287
- }[keyof T]>;
288
- declare type ArrayKeys<T> = Pick<T, {
289
- [K in keyof T]-?: K extends string | number ? (T[K] extends any[] ? K : never) : never;
290
- }[keyof T]>;
291
- export declare type FieldTransforms<T> = (T extends Record<string, Record<string, any>> ? {
292
- _dict: FieldTransformsInner<RecordValue<T>>;
293
- } : never) | FieldTransformsInner<T>;
294
- export declare type FieldTransformsInner<T> = {
295
- [K in keyof T]: string;
296
- } & ({
297
- [K in keyof ObjectKeys<T> as `${K}_obj`]?: FieldTransforms<T[K]>;
298
- } | {
299
- [K in keyof DictKeys<T> as `${K}_dict`]?: FieldTransforms<RecordValue<T[K]>>;
300
- }) & {
301
- [K in keyof ArrayKeys<T> as `${K}_arr`]?: FieldTransforms<ArrayValue<T[K]>>;
302
- } & {
303
- [K in keyof ArrayKeys<T> as `${K}_val`]?: FieldTransforms<ArrayValue<T[K]>>;
304
- };
305
- export type Selector<T> = ObservableReadable<T> | ObservableEvent | (() => T) | T;
32
+ export type Selector<T> = ObservableReadableNew<T> | ObservableEvent | (() => T) | T;
306
33
  export type ClassConstructor<I, Args extends any[] = any[]> = new (...args: Args) => I;
307
34
  export type ObservableListenerDispose = () => void;
308
35
  export interface ObservableRoot {
@@ -314,25 +41,6 @@ export interface ObservableRoot {
314
41
  }
315
42
  export type Primitive = boolean | string | number | Date;
316
43
  export type NotPrimitive<T> = T extends Primitive ? never : T;
317
- export type ObservableMap<T extends Map<any, any> | WeakMap<any, any>> = Omit<T, 'get' | 'size'> & Omit<ObservablePrimitiveBaseFns<T>, 'get' | 'size'> & MapGet<T>;
318
- export type ObservableSet<T extends Set<any> | WeakSet<any>> = Omit<T, 'size'> & Omit<ObservablePrimitiveBaseFns<T>, 'size'> & {
319
- size: ObservablePrimitiveChild<number>;
320
- };
321
- export type ObservableMapIfMap<T> = T extends Map<any, any> | WeakMap<any, any> ? ObservableMap<T> : never;
322
- export type ObservableArray<T extends any[]> = ObservableObjectFns<T> & ObservableArrayOverride<T[number]>;
323
- export type ObservableObject<T = any> = ObservableFnsRecursive<T> & ObservableObjectFns<T>;
324
- export type ObservableChild<T = any> = [T] extends [Primitive] ? ObservablePrimitiveChild<T> : ObservableObject<T>;
325
- export type ObservablePrimitiveChild<T = any> = [T] extends [boolean] ? ObservablePrimitiveChildFns<T> & ObservablePrimitiveBooleanFns<T> : ObservablePrimitiveChildFns<T>;
326
- 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>;
327
- export type ObservableComputed<T = any> = ObservableBaseFns<T> & ObservableComputedFnsRecursive<T>;
328
- export type ObservableComputedTwoWay<T = any, T2 = T> = ObservableComputed<T> & ObservablePrimitiveBaseFns<T2>;
329
- type Equals<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;
330
- export type Observable<T = any> = Equals<T, any> extends true ? ObservableObject<any> : [T] extends [object] ? ObservableObjectOrArray<T> : ObservablePrimitive<T>;
331
- export type ObservableReadable<T = any> = ObservableBaseFns<T> | ObservablePrimitiveBaseFns<T> | ObservablePrimitiveChildFns<T> | ObservableObjectFns<T> | ObservableMapIfMap<T>;
332
- export type ObservableWriteable<T = any> = ObservableReadable<T> & {
333
- set(value: Nullable<T> | CallbackSetter<T> | Promise<T>): any;
334
- delete?: () => any;
335
- };
336
44
  export interface NodeValueListener {
337
45
  track: TrackingType;
338
46
  noArgs?: boolean;
@@ -353,11 +61,15 @@ interface BaseNodeValue {
353
61
  isSetting?: number;
354
62
  isAssigning?: number;
355
63
  parentOther?: NodeValue;
356
- functions?: Map<string, Function | ObservableComputed<any>>;
64
+ functions?: Map<string, Function | ObservableComputedNew<any>>;
357
65
  lazy?: boolean | Function;
358
- state?: Observable<ObservablePersistState>;
66
+ state?: ObservableNew<ObservablePersistState>;
359
67
  activated?: boolean;
360
- proxyFn2?: (key: string, params: ComputedParams) => any;
68
+ activationState?: ActivateParams & {
69
+ onError?: () => void;
70
+ persistedRetry?: boolean;
71
+ };
72
+ dirtyFn?: () => void;
361
73
  }
362
74
  export interface RootNodeValue extends BaseNodeValue {
363
75
  parent?: undefined;
@@ -368,6 +80,11 @@ export interface ChildNodeValue extends BaseNodeValue {
368
80
  key: string;
369
81
  }
370
82
  export type NodeValue = RootNodeValue | ChildNodeValue;
83
+ export interface TrackingNode {
84
+ node: NodeValue;
85
+ track: TrackingType;
86
+ num: number;
87
+ }
371
88
  export interface ObserveEvent<T> {
372
89
  num: number;
373
90
  previous?: T | undefined;
@@ -378,39 +95,75 @@ export interface ObserveEventCallback<T> {
378
95
  num: number;
379
96
  previous?: T | undefined;
380
97
  value?: T;
381
- cancel?: boolean;
98
+ cancel: boolean;
99
+ nodes: Map<NodeValue, TrackingNode> | undefined;
100
+ refresh: () => void;
382
101
  onCleanup?: () => void;
383
102
  onCleanupReaction?: () => void;
384
103
  }
385
104
  export type ObservableProxy<T extends Record<string, any>> = {
386
105
  [K in keyof T]: ObservableComputed<T[K]>;
387
- } & ObservableBaseFns<T> & {
106
+ } & Observable<T> & {
388
107
  [symbolGetNode]: NodeValue;
389
108
  };
390
109
  export type ObservableProxyLink<T extends Record<string, any>> = {
391
110
  [K in keyof T]: Observable<T[K]>;
392
- } & ObservableBaseFns<T> & {
111
+ } & Observable<T> & {
393
112
  [symbolGetNode]: NodeValue;
394
113
  };
395
114
  export type ObservableProxyTwoWay<T extends Record<string, any>, T2> = {
396
115
  [K in keyof T]: ObservableComputedTwoWay<T[K], T2>;
397
- } & ObservableBaseFns<T> & {
116
+ } & Observable<T> & {
398
117
  [symbolGetNode]: NodeValue;
399
118
  };
400
- export interface CacheOptions<T = any> {
401
- local: string | PersistOptionsLocal<T>;
402
- pluginLocal?: ClassConstructor<ObservablePersistLocal, T[]>;
403
- }
404
- export interface ComputedParams<T = any> {
405
- onSet: (fn: (params: ListenerParams<T>) => void) => void;
406
- subscribe: (fn: (params: {
407
- update: (props: ObservableOnChangeParams) => void;
408
- }) => void) => void;
409
- cache: (cacheOptions: CacheOptions<T> | (() => CacheOptions<T>)) => void;
119
+ export type OnSetParams<T> = ListenerParams<T extends Promise<infer t> ? t : T> & OnSetExtra;
120
+ export interface ActivateGetParams {
410
121
  updateLastSync: (lastSync: number) => void;
122
+ setMode: (mode: 'assign' | 'set') => void;
123
+ }
124
+ export interface ActivateParams<T = any> {
125
+ onSet?: (params: OnSetParams<T>) => void | Promise<any>;
126
+ subscribe?: (params: {
127
+ node: NodeValue;
128
+ update: UpdateFn;
129
+ refresh: () => 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';
411
136
  }
412
- export interface ComputedProxyParams<T = any> extends ComputedParams {
413
- proxy: (fn: (key: string, params: ComputedParams<T>) => T | Promise<T>) => void;
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>;
139
+ }
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;
147
+ export interface RetryOptions {
148
+ infinite?: boolean;
149
+ times?: number;
150
+ delay?: number;
151
+ backoff?: 'constant' | 'exponential';
152
+ maxDelay?: number;
153
+ }
154
+ export interface OnSetExtra {
155
+ node: NodeValue;
156
+ update: UpdateFn;
157
+ refresh: () => void;
158
+ fromSubscribe: boolean | undefined;
159
+ }
160
+ export interface SubscribeOptions {
161
+ node: NodeValue;
162
+ update: UpdateFn;
163
+ refresh: () => void;
164
+ }
165
+ export interface CacheReturnValue {
166
+ lastSync: number;
167
+ value: any;
414
168
  }
415
- export type UpdateFn = (params: ObservableOnChangeParams) => void;
416
169
  export {};
@@ -0,0 +1,93 @@
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 ObservableComputed<T = any> = Readonly<ObservableNode<T>>;
5
+ type ObservableComputedTwoWay<T, T2> = Observable<T> & MutableObservableBase<T2>;
6
+ type MakeReadonlyInner<T> = Omit<T, keyof MutableObservableBase<any>>;
7
+ type Readonly<T> = MakeReadonlyInner<T> & {
8
+ [K in keyof MakeReadonlyInner<T>]: T extends Observable ? T[K] : Readonly<T[K]>;
9
+ };
10
+ type RemoveIndex<T> = {
11
+ [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
12
+ };
13
+ type BuiltIns = String | Boolean | Number | Date | Error | RegExp | Array<any> | Function | Promise<any>;
14
+ type IsUserDefinedObject<T> = T extends Function | BuiltIns | any[] ? false : T extends object ? true : false;
15
+ export type RemoveObservables<T> = T extends ImmutableObservableBase<infer t> ? t : IsUserDefinedObject<T> extends true ? {
16
+ [K in keyof T]: RemoveObservables<T[K]>;
17
+ } : T;
18
+ interface ObservableArray<T, U> extends ObservablePrimitive<T>, Pick<Array<Observable<U>>, ArrayOverrideFnNames>, Omit<RemoveIndex<Array<U>>, ArrayOverrideFnNames> {
19
+ }
20
+ interface ObservableObjectFns<T> {
21
+ assign(value: Partial<T>): Observable<T>;
22
+ }
23
+ interface ObservableObjectFunctions<T = Record<string, any>> extends ObservablePrimitive<T>, ObservableObjectFns<T> {
24
+ }
25
+ type ObservableMap<T extends Map<any, any> | WeakMap<any, any>> = Omit<T, 'get' | 'size'> & Omit<ObservablePrimitive<T>, 'get' | 'size'> & {
26
+ get(key: Parameters<T['get']>[0]): Observable<Parameters<T['set']>[1]>;
27
+ get(): T;
28
+ size: ImmutableObservableBase<number>;
29
+ };
30
+ type ObservableSet<T extends Set<any> | WeakSet<any>> = Omit<T, 'size'> & Omit<ObservablePrimitive<T>, 'size'> & {
31
+ size: ImmutableObservableBase<number>;
32
+ };
33
+ interface ObservableBoolean extends ObservablePrimitive<boolean> {
34
+ toggle(): boolean;
35
+ }
36
+ interface ObservablePrimitive<T> extends ImmutableObservableBase<T>, MutableObservableBase<T> {
37
+ }
38
+ type ObservableAny = Partial<ObservableObjectFns<any>> & ObservablePrimitive<any> & Record<string, any>;
39
+ interface ImmutableObservableBase<T> {
40
+ peek(): RemoveObservables<T>;
41
+ get(trackingType?: TrackingType | GetOptions): RemoveObservables<T>;
42
+ onChange(cb: ListenerFn<T>, options?: {
43
+ trackingType?: TrackingType;
44
+ initial?: boolean;
45
+ immediate?: boolean;
46
+ noArgs?: boolean;
47
+ }): () => void;
48
+ }
49
+ interface MutableObservableBase<T> {
50
+ set(value: (prev: RemoveObservables<T>) => RemoveObservables<T>): Observable<T>;
51
+ set(value: RecursiveValueOrFunction<T>): Observable<T>;
52
+ set(value: Promise<RemoveObservables<T>>): Observable<T>;
53
+ set(value: RemoveObservables<T>): Observable<T>;
54
+ set(value: Observable<RemoveObservables<T>>): Observable<T>;
55
+ delete(): void;
56
+ }
57
+ type UndefinedIf<T, U> = U extends true ? T | undefined : T;
58
+ type IsNullable<T> = undefined extends T ? true : null extends T ? true : false;
59
+ type NonObservable = Function | Observable;
60
+ type NonObservableKeys<T> = {
61
+ [K in keyof T]-?: IsStrictAny<T[K]> extends true ? never : T[K] extends undefined | null ? never : NonNullable<T[K]> extends NonObservable ? K : never;
62
+ }[keyof T];
63
+ type ObservableProps<T> = RestoreNullability<T, Simplify<Omit<NonNullable<T>, NonObservableKeys<NonNullable<T>>>>>;
64
+ type NonObservableProps<T> = RestoreNullability<T, Simplify<NullablePropsIf<Pick<NonNullable<T>, NonObservableKeys<NonNullable<T>>>, IsNullable<T>>>>;
65
+ type NullablePropsIf<T, U> = {
66
+ [K in keyof T]: UndefinedIf<T[K], U>;
67
+ };
68
+ type RestoreNullability<Source, Target> = IsNullable<Source> extends true ? Target | Extract<Source, null | undefined> : Target;
69
+ type ObservableChildren<T, Nullable = IsNullable<T>> = {
70
+ [K in keyof T]-?: Observable<UndefinedIf<T[K], Nullable>>;
71
+ };
72
+ type ObservableFunctionChildren<T> = {
73
+ [K in keyof T]-?: T[K] extends Observable ? T[K] : T[K] extends () => Promise<infer t> | infer t ? t extends void ? T[K] : ObservableComputed<t> & T[K] : T[K];
74
+ };
75
+ type IsStrictAny<T> = 0 extends 1 & T ? true : false;
76
+ export interface ObservableState {
77
+ isLoaded: boolean;
78
+ error?: Error;
79
+ }
80
+ type ObservableObject<T> = ObservableObjectFunctions<ObservableProps<T> & NonObservableProps<T>> & ObservableChildren<ObservableProps<T>> & ObservableFunctionChildren<NonObservableProps<T>>;
81
+ type ObservableNode<T, NT = NonNullable<T>> = [NT] extends [never] ? ObservablePrimitive<T> : IsStrictAny<T> extends true ? ObservableAny : [T] extends [() => infer t] ? t extends Observable ? t : ObservableComputed<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>;
82
+ type Simplify<T> = {
83
+ [K in keyof T]: T[K];
84
+ } & {};
85
+ type Observable<T = any> = ObservableNode<T> & {};
86
+ type ObservableReadable<T = any> = ImmutableObservableBase<T>;
87
+ type ObservableWriteable<T = any> = ObservableReadable<T> & MutableObservableBase<T>;
88
+ type ValueOrFunction<T> = T extends Function ? T : T | (() => T | Promise<T>);
89
+ type ValueOrFunctionKeys<T> = {
90
+ [K in keyof T]: RecursiveValueOrFunction<T[K]>;
91
+ };
92
+ 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>;
93
+ export type { ObservableComputed, ObservableComputedTwoWay, Observable, ObservableBoolean, ObservableObject, ObservablePrimitive, ObservableReadable, ObservableWriteable, ImmutableObservableBase, RecursiveValueOrFunction, };
@@ -1,2 +1,2 @@
1
- import type { ObservablePersistRemoteClass, ObservablePersistRemoteFunctions } from '@legendapp/state';
1
+ import { type ObservablePersistRemoteClass, type ObservablePersistRemoteFunctions } from '@legendapp/state';
2
2
  export declare function observablePersistRemoteFunctionsAdapter<T = {}>({ get, set, }: ObservablePersistRemoteFunctions<T>): ObservablePersistRemoteClass;
@@ -0,0 +1 @@
1
+ export declare function persistActivateNode(): void;
@@ -1 +1 @@
1
- export declare function removeNullUndefined<T extends Record<string, any>>(val: T): T | null;
1
+ export declare function removeNullUndefined<T extends Record<string, any>>(val: T): T;
@@ -1,8 +1,9 @@
1
- import type { ClassConstructor, FieldTransforms, Observable, ObservablePersistLocal, ObservablePersistRemoteClass, ObservableWriteable, PersistOptions, PersistTransform, Primitive, TypeAtPath, WithPersistState } from '@legendapp/state';
1
+ import type { ClassConstructor, FieldTransforms, Observable, ObservablePersistLocal, ObservablePersistRemoteClass, ObservablePersistState, ObservableWriteable, PersistOptions, PersistTransform, Primitive, TypeAtPath } from '@legendapp/state';
2
2
  export declare const mapPersistences: WeakMap<ClassConstructor<ObservablePersistLocal | ObservablePersistRemoteClass>, {
3
3
  persist: ObservablePersistLocal | ObservablePersistRemoteClass;
4
4
  initialized?: Observable<boolean>;
5
5
  }>;
6
+ export declare function onChangeRemote(cb: () => void): void;
6
7
  export declare function transformOutData(value: any, path: string[], pathTypes: TypeAtPath[], { transform, fieldTransforms }: {
7
8
  transform?: PersistTransform;
8
9
  fieldTransforms?: FieldTransforms<any>;
@@ -20,5 +21,4 @@ export declare function transformLoadData(value: any, { transform, fieldTransfor
20
21
  export type WithoutState = any[] | Primitive | (Record<string, any> & {
21
22
  _state?: never;
22
23
  });
23
- export declare function persistObservable<T extends WithoutState>(observable: ObservableWriteable<T>, persistOptions: PersistOptions<T>): Observable<WithPersistState & T>;
24
- export declare function persistObservable<T extends WithoutState>(initial: T | (() => T) | (() => Promise<T>), persistOptions: PersistOptions<T>): Observable<WithPersistState & T>;
24
+ export declare function persistObservable<T>(obs: ObservableWriteable<T>, persistOptions: PersistOptions<T>): Observable<ObservablePersistState>;