@legendapp/state 2.0.0 → 2.0.1

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 (62) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/config/enableDirectAccess.js +6 -3
  3. package/config/enableDirectAccess.js.map +1 -1
  4. package/config/enableDirectAccess.mjs +7 -4
  5. package/config/enableDirectAccess.mjs.map +1 -1
  6. package/config/enableReactDirectRender.d.ts +2 -0
  7. package/config/enableReactDirectRender.js +78 -0
  8. package/config/enableReactDirectRender.js.map +1 -0
  9. package/config/enableReactDirectRender.mjs +75 -0
  10. package/config/enableReactDirectRender.mjs.map +1 -0
  11. package/config/enableReactTracking.d.ts +15 -0
  12. package/config/enableReactTracking.js +47 -0
  13. package/config/enableReactTracking.js.map +1 -0
  14. package/config/enableReactTracking.mjs +45 -0
  15. package/config/enableReactTracking.mjs.map +1 -0
  16. package/history.js +1 -1
  17. package/history.js.map +1 -1
  18. package/history.mjs +1 -1
  19. package/history.mjs.map +1 -1
  20. package/index.d.ts +1 -0
  21. package/index.js +66 -33
  22. package/index.js.map +1 -1
  23. package/index.mjs +65 -34
  24. package/index.mjs.map +1 -1
  25. package/package.json +11 -1
  26. package/persist-plugins/firebase.js +8 -8
  27. package/persist-plugins/firebase.js.map +1 -1
  28. package/persist-plugins/firebase.mjs +8 -8
  29. package/persist-plugins/firebase.mjs.map +1 -1
  30. package/persist-plugins/query.d.ts +1 -3
  31. package/persist-plugins/query.js +7 -17
  32. package/persist-plugins/query.js.map +1 -1
  33. package/persist-plugins/query.mjs +7 -17
  34. package/persist-plugins/query.mjs.map +1 -1
  35. package/persist.js +21 -19
  36. package/persist.js.map +1 -1
  37. package/persist.mjs +22 -20
  38. package/persist.mjs.map +1 -1
  39. package/react-hooks/useObservableNextRouter.js +6 -6
  40. package/react-hooks/useObservableNextRouter.js.map +1 -1
  41. package/react-hooks/useObservableNextRouter.mjs +6 -6
  42. package/react-hooks/useObservableNextRouter.mjs.map +1 -1
  43. package/react-hooks/usePersistedObservable.d.ts +2 -2
  44. package/react.js +57 -22
  45. package/react.js.map +1 -1
  46. package/react.mjs +58 -23
  47. package/react.mjs.map +1 -1
  48. package/src/ObservableObject.d.ts +3 -3
  49. package/src/config/enableReactDirectRender.d.ts +2 -0
  50. package/src/config/enableReactTracking.d.ts +15 -0
  51. package/src/createObservable.d.ts +2 -0
  52. package/src/globals.d.ts +2 -0
  53. package/src/helpers.d.ts +3 -3
  54. package/src/observable.d.ts +3 -3
  55. package/src/observableInterfaces.d.ts +27 -18
  56. package/src/observe.d.ts +0 -1
  57. package/src/persist/observablePersistRemoteFunctionsAdapter.d.ts +1 -1
  58. package/src/persist/persistObservable.d.ts +3 -3
  59. package/src/persist-plugins/query.d.ts +1 -3
  60. package/src/react/For.d.ts +7 -5
  61. package/src/react/useMount.d.ts +1 -2
  62. package/src/react-hooks/usePersistedObservable.d.ts +2 -2
@@ -42,9 +42,12 @@ export interface MapGet<T extends Map<any, any> | WeakMap<any, any>> {
42
42
  get(): T;
43
43
  size: ObservableChild<number>;
44
44
  }
45
+ export interface GetOptions {
46
+ shallow: boolean;
47
+ }
45
48
  export interface ObservableBaseFns<T> {
46
49
  peek(): T;
47
- get(trackingType?: TrackingType): T;
50
+ get(options?: TrackingType | GetOptions): T;
48
51
  onChange(cb: ListenerFn<T>, options?: {
49
52
  trackingType?: TrackingType;
50
53
  initial?: boolean;
@@ -93,7 +96,7 @@ type PrimitiveKeys<T> = Pick<T, {
93
96
  type NonPrimitiveKeys<T> = Pick<T, {
94
97
  [K in keyof T]-?: T[K] extends Primitive ? never : K;
95
98
  }[keyof T]>;
96
- type Recurse<T, K extends keyof T, TRecurse> = T[K] extends ObservableReadable ? T[K] : T[K] extends Promise<infer t> ? Observable<t & PromiseInfo> : 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];
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 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];
97
100
  type ObservableFnsRecursiveUnsafe<T> = {
98
101
  [K in keyof T]-?: Recurse<T, K, ObservableObject<NonNullable<T[K]>>>;
99
102
  };
@@ -190,11 +193,11 @@ export interface ObservablePersistenceConfig {
190
193
  localOptions?: ObservablePersistenceConfigLocalGlobalOptions;
191
194
  remoteOptions?: ObservablePersistenceConfigRemoteGlobalOptions;
192
195
  }
193
- export interface PersistOptions<T = any, TState = {}> {
196
+ export interface PersistOptions<T = any> {
194
197
  local?: string | PersistOptionsLocal<T>;
195
198
  remote?: PersistOptionsRemote<T>;
196
199
  pluginLocal?: ClassConstructor<ObservablePersistLocal>;
197
- pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions<T, TState>;
200
+ pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions<T>;
198
201
  }
199
202
  export interface PersistMetadata {
200
203
  id?: '__legend_metadata';
@@ -218,10 +221,10 @@ export interface ObservablePersistRemoteSetParams<T> {
218
221
  changes: Change[];
219
222
  value: T;
220
223
  }
221
- export interface ObservablePersistRemoteGetParams<T, TState = {}> {
222
- state: Observable<ObservablePersistState & TState>;
224
+ export interface ObservablePersistRemoteGetParams<T> {
225
+ state: Observable<ObservablePersistState>;
223
226
  obs: ObservableReadable<T>;
224
- options: PersistOptions<T, TState>;
227
+ options: PersistOptions<T>;
225
228
  dateModified?: number;
226
229
  onGet: () => void;
227
230
  onChange: (params: {
@@ -232,27 +235,32 @@ export interface ObservablePersistRemoteGetParams<T, TState = {}> {
232
235
  dateModified?: number | undefined;
233
236
  }) => void | Promise<void>;
234
237
  }
235
- export interface ObservablePersistRemoteClass<TState = {}> {
236
- get<T>(params: ObservablePersistRemoteGetParams<T, TState>): void;
238
+ export interface ObservablePersistRemoteClass {
239
+ get<T>(params: ObservablePersistRemoteGetParams<T>): void;
237
240
  set?<T>(params: ObservablePersistRemoteSetParams<T>): Promise<void | {
238
241
  changes?: object;
239
242
  dateModified?: number;
240
243
  pathStrs?: string[];
241
244
  }>;
242
245
  }
243
- export interface ObservablePersistRemoteFunctions<T = any, TState = {}> {
244
- get(params: ObservablePersistRemoteGetParams<T, TState>): T | Promise<T>;
246
+ export interface ObservablePersistRemoteFunctions<T = any> {
247
+ get(params: ObservablePersistRemoteGetParams<T>): T | Promise<T>;
245
248
  set?(params: ObservablePersistRemoteSetParams<T>): Promise<void | {
246
249
  changes?: object | undefined;
247
250
  dateModified?: number;
248
251
  }>;
249
252
  }
250
- export interface ObservablePersistState {
253
+ export interface ObservableState {
254
+ isLoaded: boolean;
255
+ error?: Error;
256
+ }
257
+ export interface WithState {
258
+ state?: ObservableState;
259
+ }
260
+ export interface ObservablePersistState extends ObservableState {
251
261
  isLoadedLocal: boolean;
252
- isLoadedRemote: boolean;
253
262
  isEnabledLocal: boolean;
254
263
  isEnabledRemote: boolean;
255
- remoteError?: Error;
256
264
  dateModified?: number;
257
265
  clearLocal: () => Promise<void>;
258
266
  sync: () => Promise<void>;
@@ -261,6 +269,9 @@ export interface ObservablePersistState {
261
269
  v?: any;
262
270
  }> | undefined;
263
271
  }
272
+ export interface WithPersistState {
273
+ state?: ObservablePersistState;
274
+ }
264
275
  export type RecordValue<T> = T extends Record<string, infer t> ? t : never;
265
276
  export type ArrayValue<T> = T extends Array<infer t> ? t : never;
266
277
  export type ObservableValue<T> = T extends Observable<infer t> ? t : never;
@@ -326,6 +337,7 @@ export interface NodeValueListener {
326
337
  interface BaseNodeValue {
327
338
  children?: Map<string, ChildNodeValue>;
328
339
  proxy?: object;
340
+ isActivatedPrimitive?: boolean;
329
341
  root: ObservableRoot;
330
342
  listeners?: Set<NodeValueListener>;
331
343
  listenersImmediate?: Set<NodeValueListener>;
@@ -339,6 +351,7 @@ interface BaseNodeValue {
339
351
  parentOther?: NodeValue;
340
352
  functions?: Map<string, Function | ObservableComputed<any>>;
341
353
  lazy?: boolean;
354
+ state?: Observable<ObservableState>;
342
355
  }
343
356
  export interface RootNodeValue extends BaseNodeValue {
344
357
  parent?: undefined;
@@ -378,8 +391,4 @@ export type ObservableProxyTwoWay<T extends Record<string, any>, T2> = {
378
391
  } & ObservableBaseFns<T> & {
379
392
  [symbolGetNode]: NodeValue;
380
393
  };
381
- export type PromiseInfo = {
382
- error?: any;
383
- status?: 'pending' | 'rejected';
384
- };
385
394
  export {};
package/src/observe.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ObserveEvent, ObserveEventCallback, Selector } from './observableInterfaces';
2
2
  export interface ObserveOptions {
3
3
  immediate?: boolean;
4
- retainObservable?: boolean;
5
4
  }
6
5
  export declare function observe<T>(run: (e: ObserveEvent<T>) => T | void, options?: ObserveOptions): () => void;
7
6
  export declare function observe<T>(selector: Selector<T> | ((e: ObserveEvent<T>) => any), reaction?: (e: ObserveEventCallback<T>) => any, options?: ObserveOptions): () => void;
@@ -1,2 +1,2 @@
1
1
  import type { ObservablePersistRemoteClass, ObservablePersistRemoteFunctions } from '@legendapp/state';
2
- export declare function observablePersistRemoteFunctionsAdapter<T = {}, TState = {}>({ get, set, }: ObservablePersistRemoteFunctions<T, TState>): ObservablePersistRemoteClass;
2
+ export declare function observablePersistRemoteFunctionsAdapter<T = {}>({ get, set, }: ObservablePersistRemoteFunctions<T>): ObservablePersistRemoteClass;
@@ -1,4 +1,4 @@
1
- import type { ClassConstructor, FieldTransforms, Observable, ObservableObject, ObservablePersistLocal, ObservablePersistRemoteClass, ObservablePersistState, ObservableWriteable, PersistOptions, PersistTransform, TypeAtPath } from '@legendapp/state';
1
+ import type { ClassConstructor, FieldTransforms, Observable, ObservableObject, ObservablePersistLocal, ObservablePersistRemoteClass, ObservableWriteable, PersistOptions, PersistTransform, TypeAtPath, WithPersistState } from '@legendapp/state';
2
2
  export declare const mapPersistences: WeakMap<ClassConstructor<ObservablePersistLocal | ObservablePersistRemoteClass>, {
3
3
  persist: ObservablePersistLocal | ObservablePersistRemoteClass;
4
4
  initialized?: Observable<boolean>;
@@ -21,5 +21,5 @@ export declare function transformLoadData(value: any, { transform, fieldTransfor
21
21
  transform?: PersistTransform;
22
22
  }, doUserTransform: boolean): Promise<any> | any;
23
23
  export declare function onChangeRemote(cb: () => void): void;
24
- export declare function persistObservable<T, TState = {}>(observable: ObservableWriteable<T>, persistOptions: PersistOptions<T, TState>): [Observable<T>, ObservableObject<ObservablePersistState & TState>];
25
- export declare function persistObservable<T, TState = {}>(initial: T | (() => T) | (() => Promise<T>), persistOptions: PersistOptions<T, TState>): [Observable<T>, ObservableObject<ObservablePersistState & TState>];
24
+ export declare function persistObservable<T>(observable: ObservableWriteable<T>, persistOptions: PersistOptions<T>): Observable<WithPersistState & T>;
25
+ export declare function persistObservable<T>(initial: T | (() => T) | (() => Promise<T>), persistOptions: PersistOptions<T>): Observable<WithPersistState & T>;
@@ -14,7 +14,5 @@ type Params<TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey>
14
14
  queryClient?: QueryClient;
15
15
  useContext?: true;
16
16
  });
17
- export declare function persistPluginQuery<TObs, TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey>({ query: options, mutation: mutationOptions, type, queryClient, useContext, }: Params<TQueryFnData, TError, TData, TQueryData, TQueryKey>): ObservablePersistRemoteFunctions<TObs, {
18
- query: UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>;
19
- }>;
17
+ export declare function persistPluginQuery<TObs, TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey>({ query: options, mutation: mutationOptions, type, queryClient, useContext, }: Params<TQueryFnData, TError, TData, TQueryData, TQueryKey>): ObservablePersistRemoteFunctions<TObs>;
20
18
  export {};
@@ -1,13 +1,15 @@
1
1
  import type { Observable, ObservableReadable } from '@legendapp/state';
2
2
  import { FC, ReactElement } from 'react';
3
+ type ForItemProps<T, TProps = {}> = {
4
+ item$: Observable<T>;
5
+ id?: string;
6
+ } & TProps;
3
7
  export declare function For<T, TProps>({ each, optimized: isOptimized, item, itemProps, sortValues, children, }: {
4
8
  each?: ObservableReadable<T[] | Record<any, T> | Map<any, T>>;
5
9
  optimized?: boolean;
6
- item?: FC<{
7
- item: Observable<T>;
8
- id?: string;
9
- } & TProps>;
10
+ item?: FC<ForItemProps<T, TProps>>;
10
11
  itemProps?: TProps;
11
12
  sortValues?: (A: T, B: T, AKey: string, BKey: string) => number;
12
- children?: (value: Observable<T>) => ReactElement;
13
+ children?: (value: Observable<T>, id: string | undefined) => ReactElement;
13
14
  }): ReactElement | null;
15
+ export {};
@@ -1,3 +1,2 @@
1
- import type { EffectCallback } from 'react';
2
- export declare function useMount(fn: EffectCallback): void;
1
+ export declare function useMount(fn: () => (void | (() => void)) | Promise<void>): void;
3
2
  export declare const useMountOnce: (effect: () => void | (() => void)) => void;
@@ -1,4 +1,4 @@
1
- import { Observable, ObservableObject, ObservablePersistState, PersistOptions } from '@legendapp/state';
1
+ import { Observable, PersistOptions, WithPersistState } from '@legendapp/state';
2
2
  /**
3
3
  * A React hook that creates a new observable and can optionally listen or persist its state.
4
4
  *
@@ -7,4 +7,4 @@ import { Observable, ObservableObject, ObservablePersistState, PersistOptions }
7
7
  *
8
8
  * @see https://www.legendapp.com/dev/state/react/#useObservable
9
9
  */
10
- export declare function usePersistedObservable<T>(initialValue: T | (() => T) | (() => Promise<T>), options: PersistOptions<T>): [Observable<T>, ObservableObject<ObservablePersistState>];
10
+ export declare function usePersistedObservable<T>(initialValue: T | (() => T) | (() => Promise<T>), options: PersistOptions<T>): Observable<WithPersistState & T>;