@legendapp/state 3.0.0-alpha.2 → 3.0.0-alpha.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 (54) hide show
  1. package/CHANGELOG.md +831 -1
  2. package/LICENSE +21 -1
  3. package/README.md +141 -1
  4. package/babel.js +0 -2
  5. package/babel.mjs +0 -2
  6. package/helpers/trackHistory.js +2 -2
  7. package/helpers/trackHistory.mjs +2 -2
  8. package/index.d.mts +45 -32
  9. package/index.d.ts +45 -32
  10. package/index.js +234 -156
  11. package/index.mjs +234 -156
  12. package/package.json +6 -1
  13. package/persist-plugins/async-storage.d.mts +2 -2
  14. package/persist-plugins/async-storage.d.ts +2 -2
  15. package/persist-plugins/indexeddb.js +1 -1
  16. package/persist-plugins/indexeddb.mjs +1 -1
  17. package/react.d.mts +17 -14
  18. package/react.d.ts +17 -14
  19. package/react.js +55 -30
  20. package/react.mjs +56 -31
  21. package/sync-plugins/_transformObjectFields.d.mts +31 -0
  22. package/sync-plugins/_transformObjectFields.d.ts +31 -0
  23. package/sync-plugins/_transformObjectFields.js +114 -0
  24. package/sync-plugins/_transformObjectFields.mjs +110 -0
  25. package/sync-plugins/crud.d.mts +14 -23
  26. package/sync-plugins/crud.d.ts +14 -23
  27. package/sync-plugins/crud.js +205 -134
  28. package/sync-plugins/crud.mjs +206 -135
  29. package/sync-plugins/firebase.d.mts +26 -0
  30. package/sync-plugins/firebase.d.ts +26 -0
  31. package/sync-plugins/firebase.js +365 -0
  32. package/sync-plugins/firebase.mjs +360 -0
  33. package/sync-plugins/keel.d.mts +24 -8
  34. package/sync-plugins/keel.d.ts +24 -8
  35. package/sync-plugins/keel.js +32 -16
  36. package/sync-plugins/keel.mjs +32 -16
  37. package/sync-plugins/supabase.d.mts +1 -1
  38. package/sync-plugins/supabase.d.ts +1 -1
  39. package/sync-plugins/supabase.js +5 -4
  40. package/sync-plugins/supabase.mjs +6 -5
  41. package/sync-plugins/tanstack-query.d.mts +2 -2
  42. package/sync-plugins/tanstack-query.d.ts +2 -2
  43. package/sync-plugins/tanstack-query.js +3 -2
  44. package/sync-plugins/tanstack-query.mjs +3 -2
  45. package/sync-plugins/tanstack-react-query.d.mts +1 -1
  46. package/sync-plugins/tanstack-react-query.d.ts +1 -1
  47. package/sync.d.mts +38 -185
  48. package/sync.d.ts +38 -185
  49. package/sync.js +354 -296
  50. package/sync.mjs +356 -297
  51. package/types/babel.d.ts +12 -1
  52. package/.DS_Store +0 -0
  53. /package/config/{enable_GetSet.d.mts → enable$GetSet.d.mts} +0 -0
  54. /package/config/{enable_GetSet.d.ts → enable$GetSet.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@legendapp/state",
3
- "version": "3.0.0-alpha.2",
3
+ "version": "3.0.0-alpha.21",
4
4
  "description": "legend-state",
5
5
  "sideEffects": false,
6
6
  "private": false,
@@ -208,6 +208,11 @@
208
208
  "require": "./sync-plugins/crud.js",
209
209
  "types": "./sync-plugins/crud.d.ts"
210
210
  },
211
+ "./sync-plugins/firebase": {
212
+ "import": "./sync-plugins/firebase.mjs",
213
+ "require": "./sync-plugins/firebase.js",
214
+ "types": "./sync-plugins/firebase.d.ts"
215
+ },
211
216
  "./sync-plugins/tanstack-react-query": {
212
217
  "import": "./sync-plugins/tanstack-react-query.mjs",
213
218
  "require": "./sync-plugins/tanstack-react-query.js",
@@ -1,9 +1,9 @@
1
1
  import { Change } from '@legendapp/state';
2
- import { ObservablePersistPlugin, ObservablePersistenceConfigLocalGlobalOptions, PersistMetadata } from '@legendapp/state/sync';
2
+ import { ObservablePersistPlugin, ObservablePersistPluginOptions, PersistMetadata } from '@legendapp/state/sync';
3
3
 
4
4
  declare class ObservablePersistAsyncStorage implements ObservablePersistPlugin {
5
5
  private data;
6
- initialize(config: ObservablePersistenceConfigLocalGlobalOptions): Promise<void>;
6
+ initialize(config: ObservablePersistPluginOptions): Promise<void>;
7
7
  loadTable(table: string): void | Promise<void>;
8
8
  getTable(table: string, init: object): any;
9
9
  getMetadata(table: string): PersistMetadata;
@@ -1,9 +1,9 @@
1
1
  import { Change } from '@legendapp/state';
2
- import { ObservablePersistPlugin, ObservablePersistenceConfigLocalGlobalOptions, PersistMetadata } from '@legendapp/state/sync';
2
+ import { ObservablePersistPlugin, ObservablePersistPluginOptions, PersistMetadata } from '@legendapp/state/sync';
3
3
 
4
4
  declare class ObservablePersistAsyncStorage implements ObservablePersistPlugin {
5
5
  private data;
6
- initialize(config: ObservablePersistenceConfigLocalGlobalOptions): Promise<void>;
6
+ initialize(config: ObservablePersistPluginOptions): Promise<void>;
7
7
  loadTable(table: string): void | Promise<void>;
8
8
  getTable(table: string, init: object): any;
9
9
  getMetadata(table: string): PersistMetadata;
@@ -163,7 +163,7 @@ var ObservablePersistIndexedDB = class {
163
163
  pendingTable.items.add(key);
164
164
  } else {
165
165
  this.tableData[table] = valueAtPath;
166
- pendingTable.tablePrev = prev;
166
+ pendingTable.tablePrev = prev || {};
167
167
  break;
168
168
  }
169
169
  }
@@ -161,7 +161,7 @@ var ObservablePersistIndexedDB = class {
161
161
  pendingTable.items.add(key);
162
162
  } else {
163
163
  this.tableData[table] = valueAtPath;
164
- pendingTable.tablePrev = prev;
164
+ pendingTable.tablePrev = prev || {};
165
165
  break;
166
166
  }
167
167
  }
package/react.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
3
- import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveEvent, ObserveOptions, ObserveEventCallback } from '@legendapp/state';
2
+ import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
3
+ import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
4
4
 
5
5
  declare function Computed({ children }: {
6
6
  children: ObservableParam | (() => ReactNode);
@@ -110,10 +110,10 @@ declare function reactiveObserver<T extends FC<any>>(component: T, bindKeys?: Bi
110
110
  declare function reactiveObserver<T extends FC<any>, T2 extends keyof ExtractFCPropsType<T>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWithPick$<ExtractFCPropsType<T>, T2>>;
111
111
  declare function reactiveComponents<P extends Record<string, FC>>(components: P): ObjectShapeWith$<P>;
112
112
 
113
- declare function useComputed<T>(compute: () => T | Promise<T>): Observable<T>;
114
- declare function useComputed<T>(compute: () => T | Promise<T>, deps: any[]): Observable<T>;
115
- declare function useComputed<T, T2 = T>(compute: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void): Observable<T>;
116
- declare function useComputed<T, T2 = T>(compute: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void, deps: any[]): Observable<T>;
113
+ declare function useComputed<T>(get: () => T | Promise<T>): Observable<T>;
114
+ declare function useComputed<T>(get: () => T | Promise<T>, deps: any[]): Observable<T>;
115
+ declare function useComputed<T, T2 = T>(get: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void): Observable<T>;
116
+ declare function useComputed<T, T2 = T>(get: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void, deps: any[]): Observable<T>;
117
117
 
118
118
  declare const useEffectOnce: (effect: () => void | (() => void), deps: any[]) => void;
119
119
 
@@ -130,9 +130,9 @@ declare const useMountOnce: typeof useMount;
130
130
  * @see https://www.legendapp.com/dev/state/react/#useObservable
131
131
  */
132
132
  declare function useObservable<T>(): Observable<T | undefined>;
133
- declare function useObservable<T>(value: Promise<RecursiveValueOrFunction<T>> | (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T>): Observable<T>;
134
- declare function useObservable<T>(value: T): Observable<T>;
135
- declare function useObservable<T>(value?: T): Observable<any>;
133
+ declare function useObservable<T>(value: Promise<RecursiveValueOrFunction<T>> | (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T>, deps?: DependencyList): Observable<T>;
134
+ declare function useObservable<T>(value: T, deps?: DependencyList): Observable<T>;
135
+ declare function useObservable<T>(value?: T, deps?: DependencyList): Observable<any>;
136
136
 
137
137
  declare function useObservableReducer<R extends ReducerWithoutAction<any>, I>(reducer: R, initializerArg: I, initializer: (arg: I) => ReducerStateWithoutAction<R>): [Observable<ReducerStateWithoutAction<R>>, DispatchWithoutAction];
138
138
  declare function useObservableReducer<R extends ReducerWithoutAction<any>>(reducer: R, initializerArg: ReducerStateWithoutAction<R>, initializer?: undefined): [Observable<ReducerStateWithoutAction<R>>, DispatchWithoutAction];
@@ -140,11 +140,14 @@ declare function useObservableReducer<R extends Reducer<any, any>, I>(reducer: R
140
140
  declare function useObservableReducer<R extends Reducer<any, any>, I>(reducer: R, initializerArg: I, initializer: (arg: I) => ReducerState<R>): [Observable<ReducerState<R>>, Dispatch<ReducerAction<R>>];
141
141
  declare function useObservableReducer<R extends Reducer<any, any>>(reducer: R, initialState: ReducerState<R>, initializer?: undefined): [Observable<ReducerState<R>>, Dispatch<ReducerAction<R>>];
142
142
 
143
- declare function useObserve<T>(run: (e: ObserveEvent<T>) => T | void, options?: ObserveOptions): () => void;
144
- declare function useObserve<T>(selector: Selector<T>, reaction?: (e: ObserveEventCallback<T>) => any, options?: ObserveOptions): () => void;
143
+ interface UseObserveOptions extends ObserveOptions {
144
+ deps?: any[];
145
+ }
146
+ declare function useObserve<T>(run: (e: ObserveEvent<T>) => T | void, options?: UseObserveOptions): () => void;
147
+ declare function useObserve<T>(selector: Selector<T>, reaction?: (e: ObserveEventCallback<T>) => any, options?: UseObserveOptions): () => void;
145
148
 
146
- declare function useObserveEffect<T>(run: (e: ObserveEvent<T>) => T | void, options?: ObserveOptions): void;
147
- declare function useObserveEffect<T>(selector: Selector<T>, reaction?: (e: ObserveEventCallback<T>) => any, options?: ObserveOptions): void;
149
+ declare function useObserveEffect<T>(run: (e: ObserveEvent<T>) => T | void, options?: UseObserveOptions): void;
150
+ declare function useObserveEffect<T>(selector: Selector<T>, reaction?: (e: ObserveEventCallback<T>) => any, options?: UseObserveOptions): void;
148
151
 
149
152
  declare function useSelector<T>(selector: Selector<T>, options?: UseSelectorOptions): T;
150
153
 
@@ -154,4 +157,4 @@ declare const useUnmountOnce: typeof useUnmount;
154
157
  declare function useWhen<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
155
158
  declare function useWhenReady<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
156
159
 
157
- export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
160
+ export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
package/react.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
3
- import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveEvent, ObserveOptions, ObserveEventCallback } from '@legendapp/state';
2
+ import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
3
+ import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveOptions, ObserveEvent, ObserveEventCallback } from '@legendapp/state';
4
4
 
5
5
  declare function Computed({ children }: {
6
6
  children: ObservableParam | (() => ReactNode);
@@ -110,10 +110,10 @@ declare function reactiveObserver<T extends FC<any>>(component: T, bindKeys?: Bi
110
110
  declare function reactiveObserver<T extends FC<any>, T2 extends keyof ExtractFCPropsType<T>>(component: T, bindKeys?: BindKeys<ExtractFCPropsType<T>>): T | FC<ShapeWithPick$<ExtractFCPropsType<T>, T2>>;
111
111
  declare function reactiveComponents<P extends Record<string, FC>>(components: P): ObjectShapeWith$<P>;
112
112
 
113
- declare function useComputed<T>(compute: () => T | Promise<T>): Observable<T>;
114
- declare function useComputed<T>(compute: () => T | Promise<T>, deps: any[]): Observable<T>;
115
- declare function useComputed<T, T2 = T>(compute: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void): Observable<T>;
116
- declare function useComputed<T, T2 = T>(compute: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void, deps: any[]): Observable<T>;
113
+ declare function useComputed<T>(get: () => T | Promise<T>): Observable<T>;
114
+ declare function useComputed<T>(get: () => T | Promise<T>, deps: any[]): Observable<T>;
115
+ declare function useComputed<T, T2 = T>(get: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void): Observable<T>;
116
+ declare function useComputed<T, T2 = T>(get: (() => T | Promise<T>) | ObservableParam<T>, set: (value: T2) => void, deps: any[]): Observable<T>;
117
117
 
118
118
  declare const useEffectOnce: (effect: () => void | (() => void), deps: any[]) => void;
119
119
 
@@ -130,9 +130,9 @@ declare const useMountOnce: typeof useMount;
130
130
  * @see https://www.legendapp.com/dev/state/react/#useObservable
131
131
  */
132
132
  declare function useObservable<T>(): Observable<T | undefined>;
133
- declare function useObservable<T>(value: Promise<RecursiveValueOrFunction<T>> | (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T>): Observable<T>;
134
- declare function useObservable<T>(value: T): Observable<T>;
135
- declare function useObservable<T>(value?: T): Observable<any>;
133
+ declare function useObservable<T>(value: Promise<RecursiveValueOrFunction<T>> | (() => RecursiveValueOrFunction<T>) | RecursiveValueOrFunction<T>, deps?: DependencyList): Observable<T>;
134
+ declare function useObservable<T>(value: T, deps?: DependencyList): Observable<T>;
135
+ declare function useObservable<T>(value?: T, deps?: DependencyList): Observable<any>;
136
136
 
137
137
  declare function useObservableReducer<R extends ReducerWithoutAction<any>, I>(reducer: R, initializerArg: I, initializer: (arg: I) => ReducerStateWithoutAction<R>): [Observable<ReducerStateWithoutAction<R>>, DispatchWithoutAction];
138
138
  declare function useObservableReducer<R extends ReducerWithoutAction<any>>(reducer: R, initializerArg: ReducerStateWithoutAction<R>, initializer?: undefined): [Observable<ReducerStateWithoutAction<R>>, DispatchWithoutAction];
@@ -140,11 +140,14 @@ declare function useObservableReducer<R extends Reducer<any, any>, I>(reducer: R
140
140
  declare function useObservableReducer<R extends Reducer<any, any>, I>(reducer: R, initializerArg: I, initializer: (arg: I) => ReducerState<R>): [Observable<ReducerState<R>>, Dispatch<ReducerAction<R>>];
141
141
  declare function useObservableReducer<R extends Reducer<any, any>>(reducer: R, initialState: ReducerState<R>, initializer?: undefined): [Observable<ReducerState<R>>, Dispatch<ReducerAction<R>>];
142
142
 
143
- declare function useObserve<T>(run: (e: ObserveEvent<T>) => T | void, options?: ObserveOptions): () => void;
144
- declare function useObserve<T>(selector: Selector<T>, reaction?: (e: ObserveEventCallback<T>) => any, options?: ObserveOptions): () => void;
143
+ interface UseObserveOptions extends ObserveOptions {
144
+ deps?: any[];
145
+ }
146
+ declare function useObserve<T>(run: (e: ObserveEvent<T>) => T | void, options?: UseObserveOptions): () => void;
147
+ declare function useObserve<T>(selector: Selector<T>, reaction?: (e: ObserveEventCallback<T>) => any, options?: UseObserveOptions): () => void;
145
148
 
146
- declare function useObserveEffect<T>(run: (e: ObserveEvent<T>) => T | void, options?: ObserveOptions): void;
147
- declare function useObserveEffect<T>(selector: Selector<T>, reaction?: (e: ObserveEventCallback<T>) => any, options?: ObserveOptions): void;
149
+ declare function useObserveEffect<T>(run: (e: ObserveEvent<T>) => T | void, options?: UseObserveOptions): void;
150
+ declare function useObserveEffect<T>(selector: Selector<T>, reaction?: (e: ObserveEventCallback<T>) => any, options?: UseObserveOptions): void;
148
151
 
149
152
  declare function useSelector<T>(selector: Selector<T>, options?: UseSelectorOptions): T;
150
153
 
@@ -154,4 +157,4 @@ declare const useUnmountOnce: typeof useUnmount;
154
157
  declare function useWhen<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
155
158
  declare function useWhenReady<T>(predicate: Selector<T>, effect: (value: T) => any | (() => any)): Promise<any>;
156
159
 
157
- export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
160
+ export { type BindKey, type BindKeys, Computed, type ExtractFCPropsType, type FCReactive, type FCReactiveObject, For, type IReactive, Memo, type ObjectShapeWith$, Reactive, type ShapeWith$, type ShapeWithNew$, type ShapeWithPick$, Show, Switch, type UseObserveOptions, type UseSelectorOptions, configureReactive, hasSymbol, observer, reactive, reactiveComponents, reactiveObserver, useComputed, useEffectOnce, useIsMounted, useMount, useMountOnce, useObservable, useObservableReducer, useObserve, useObserveEffect, usePauseProvider, useSelector, useUnmount, useUnmountOnce, useWhen, useWhenReady };
package/react.js CHANGED
@@ -111,15 +111,6 @@ function useSelector(selector, options) {
111
111
  const { subscribe, getVersion, run } = selectorFn;
112
112
  value = run(selector);
113
113
  index_js.useSyncExternalStore(subscribe, getVersion, getVersion);
114
- if (options == null ? void 0 : options.suspense) {
115
- if (state.isPromise(value) || !value && state.isObservable(selector) && state.syncState(selector).isLoaded.get() === false) {
116
- if (React__default.default.use) {
117
- React__default.default.use(value);
118
- } else {
119
- throw value;
120
- }
121
- }
122
- }
123
114
  } catch (err) {
124
115
  if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && ((_a = err == null ? void 0 : err.message) == null ? void 0 : _a.includes("Rendered more"))) {
125
116
  console.warn(
@@ -128,6 +119,17 @@ function useSelector(selector, options) {
128
119
  }
129
120
  throw err;
130
121
  }
122
+ if (options == null ? void 0 : options.suspense) {
123
+ const isProm = state.isPromise(value);
124
+ if (state.isPromise(value) || !value && state.isObservable(selector)) {
125
+ const vProm = isProm ? value : state.when(selector);
126
+ if (React__default.default.use) {
127
+ React__default.default.use(vProm);
128
+ } else {
129
+ throw vProm;
130
+ }
131
+ }
132
+ }
131
133
  return value;
132
134
  }
133
135
 
@@ -149,10 +151,10 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
149
151
  if (component["__legend_proxied"])
150
152
  return component;
151
153
  let useForwardRef = false;
152
- let useMemo5 = false;
154
+ let useMemo4 = false;
153
155
  let render = component;
154
156
  if (ReactMemoSymbol && render["$$typeof"] === ReactMemoSymbol && render["type"]) {
155
- useMemo5 = true;
157
+ useMemo4 = true;
156
158
  render = render["type"];
157
159
  }
158
160
  if (ReactForwardRefSymbol && render["$$typeof"] === ReactForwardRefSymbol) {
@@ -233,7 +235,7 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
233
235
  } else {
234
236
  ret = proxy;
235
237
  }
236
- return observe3 || useMemo5 ? React.memo(ret) : ret;
238
+ return observe3 || useMemo4 ? React.memo(ret) : ret;
237
239
  }
238
240
  function observer(component) {
239
241
  return createReactiveComponent(component, true);
@@ -389,20 +391,36 @@ function Switch({
389
391
  const child = children[useSelector(value)];
390
392
  return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
391
393
  }
392
- function useComputed(compute, set, deps) {
394
+ function useObservable(initialValue, deps) {
395
+ var _a;
396
+ const ref = React.useRef({});
397
+ ref.current.value = initialValue;
398
+ const depsObs$ = deps ? useObservable(deps) : void 0;
399
+ if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
400
+ const value = depsObs$ ? state.isFunction(initialValue) && initialValue.length === 1 ? (p) => {
401
+ depsObs$.get();
402
+ return ref.current.value(p);
403
+ } : () => {
404
+ depsObs$.get();
405
+ return state.computeSelector(ref.current.value);
406
+ } : initialValue;
407
+ ref.current.obs$ = state.observable(value);
408
+ }
409
+ if (depsObs$) {
410
+ depsObs$.set(deps);
411
+ }
412
+ return ref.current.obs$;
413
+ }
414
+
415
+ // src/react/useComputed.ts
416
+ function useComputed(get, set, deps) {
393
417
  if (!deps && state.isArray(set)) {
394
418
  deps = set;
395
419
  set = void 0;
396
420
  }
397
- const ref = React.useRef({});
398
- ref.current.compute = compute;
399
- ref.current.set = set;
400
- return React.useMemo(
401
- () => state.computed(
402
- () => state.isFunction(ref.current.compute) ? ref.current.compute() : ref.current.compute,
403
- set ? (value) => ref.current.set(value) : void 0
404
- ),
405
- deps || []
421
+ return useObservable(
422
+ set ? state.linked({ get, set: ({ value }) => set(value) }) : get,
423
+ deps
406
424
  );
407
425
  }
408
426
  var useEffectOnce = (effect, deps) => {
@@ -442,13 +460,6 @@ function useMount(fn) {
442
460
  }, []);
443
461
  }
444
462
  var useMountOnce = useMount;
445
- function useObservable(initialValue) {
446
- const ref = React.useRef();
447
- if (!ref.current) {
448
- ref.current = state.observable(initialValue);
449
- }
450
- return ref.current;
451
- }
452
463
 
453
464
  // src/react/useIsMounted.ts
454
465
  function useIsMounted() {
@@ -484,8 +495,16 @@ function useObserve(selector, reactionOrOptions, options) {
484
495
  } else {
485
496
  options = reactionOrOptions;
486
497
  }
498
+ const deps = options == null ? void 0 : options.deps;
499
+ const depsObs$ = deps ? useObservable(deps) : void 0;
500
+ if (depsObs$) {
501
+ depsObs$.set(deps);
502
+ }
487
503
  const ref = React.useRef({});
488
- ref.current.selector = selector;
504
+ ref.current.selector = deps ? () => {
505
+ depsObs$ == null ? void 0 : depsObs$.get();
506
+ return state.computeSelector(selector);
507
+ } : selector;
489
508
  ref.current.reaction = reaction;
490
509
  if (!ref.current.dispose) {
491
510
  ref.current.dispose = state.observe(
@@ -510,12 +529,18 @@ function useObserveEffect(selector, reactionOrOptions, options) {
510
529
  } else {
511
530
  options = reactionOrOptions;
512
531
  }
532
+ const deps = options == null ? void 0 : options.deps;
533
+ const depsObs$ = deps ? useObservable(deps) : void 0;
534
+ if (depsObs$) {
535
+ depsObs$.set(deps);
536
+ }
513
537
  const ref = React.useRef({ selector });
514
538
  ref.current = { selector, reaction };
515
539
  useMountOnce(
516
540
  () => state.observe(
517
541
  (e) => {
518
542
  const { selector: selector2 } = ref.current;
543
+ depsObs$ == null ? void 0 : depsObs$.get();
519
544
  return state.isFunction(selector2) ? selector2(e) : selector2;
520
545
  },
521
546
  (e) => {
package/react.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { isFunction, isEmpty, observable, isPromise, isObservable, syncState, computeSelector, isArray, isMap, isObservableValueReady, computed, observe, when, whenReady, internal, trackSelector, isPrimitive } from '@legendapp/state';
1
+ import { isFunction, isEmpty, observable, isPromise, isObservable, when, computeSelector, isArray, isMap, isObservableValueReady, linked, observe, whenReady, internal, trackSelector, isPrimitive } from '@legendapp/state';
2
2
  import React, { memo, forwardRef, createElement, useState, useContext, useMemo, useRef, useEffect, createContext, useCallback } from 'react';
3
3
  import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';
4
4
 
@@ -105,15 +105,6 @@ function useSelector(selector, options) {
105
105
  const { subscribe, getVersion, run } = selectorFn;
106
106
  value = run(selector);
107
107
  useSyncExternalStore(subscribe, getVersion, getVersion);
108
- if (options == null ? void 0 : options.suspense) {
109
- if (isPromise(value) || !value && isObservable(selector) && syncState(selector).isLoaded.get() === false) {
110
- if (React.use) {
111
- React.use(value);
112
- } else {
113
- throw value;
114
- }
115
- }
116
- }
117
108
  } catch (err) {
118
109
  if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && ((_a = err == null ? void 0 : err.message) == null ? void 0 : _a.includes("Rendered more"))) {
119
110
  console.warn(
@@ -122,6 +113,17 @@ function useSelector(selector, options) {
122
113
  }
123
114
  throw err;
124
115
  }
116
+ if (options == null ? void 0 : options.suspense) {
117
+ const isProm = isPromise(value);
118
+ if (isPromise(value) || !value && isObservable(selector)) {
119
+ const vProm = isProm ? value : when(selector);
120
+ if (React.use) {
121
+ React.use(vProm);
122
+ } else {
123
+ throw vProm;
124
+ }
125
+ }
126
+ }
125
127
  return value;
126
128
  }
127
129
 
@@ -143,10 +145,10 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
143
145
  if (component["__legend_proxied"])
144
146
  return component;
145
147
  let useForwardRef = false;
146
- let useMemo5 = false;
148
+ let useMemo4 = false;
147
149
  let render = component;
148
150
  if (ReactMemoSymbol && render["$$typeof"] === ReactMemoSymbol && render["type"]) {
149
- useMemo5 = true;
151
+ useMemo4 = true;
150
152
  render = render["type"];
151
153
  }
152
154
  if (ReactForwardRefSymbol && render["$$typeof"] === ReactForwardRefSymbol) {
@@ -227,7 +229,7 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
227
229
  } else {
228
230
  ret = proxy;
229
231
  }
230
- return observe3 || useMemo5 ? memo(ret) : ret;
232
+ return observe3 || useMemo4 ? memo(ret) : ret;
231
233
  }
232
234
  function observer(component) {
233
235
  return createReactiveComponent(component, true);
@@ -383,20 +385,36 @@ function Switch({
383
385
  const child = children[useSelector(value)];
384
386
  return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
385
387
  }
386
- function useComputed(compute, set, deps) {
388
+ function useObservable(initialValue, deps) {
389
+ var _a;
390
+ const ref = useRef({});
391
+ ref.current.value = initialValue;
392
+ const depsObs$ = deps ? useObservable(deps) : void 0;
393
+ if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
394
+ const value = depsObs$ ? isFunction(initialValue) && initialValue.length === 1 ? (p) => {
395
+ depsObs$.get();
396
+ return ref.current.value(p);
397
+ } : () => {
398
+ depsObs$.get();
399
+ return computeSelector(ref.current.value);
400
+ } : initialValue;
401
+ ref.current.obs$ = observable(value);
402
+ }
403
+ if (depsObs$) {
404
+ depsObs$.set(deps);
405
+ }
406
+ return ref.current.obs$;
407
+ }
408
+
409
+ // src/react/useComputed.ts
410
+ function useComputed(get, set, deps) {
387
411
  if (!deps && isArray(set)) {
388
412
  deps = set;
389
413
  set = void 0;
390
414
  }
391
- const ref = useRef({});
392
- ref.current.compute = compute;
393
- ref.current.set = set;
394
- return useMemo(
395
- () => computed(
396
- () => isFunction(ref.current.compute) ? ref.current.compute() : ref.current.compute,
397
- set ? (value) => ref.current.set(value) : void 0
398
- ),
399
- deps || []
415
+ return useObservable(
416
+ set ? linked({ get, set: ({ value }) => set(value) }) : get,
417
+ deps
400
418
  );
401
419
  }
402
420
  var useEffectOnce = (effect, deps) => {
@@ -436,13 +454,6 @@ function useMount(fn) {
436
454
  }, []);
437
455
  }
438
456
  var useMountOnce = useMount;
439
- function useObservable(initialValue) {
440
- const ref = useRef();
441
- if (!ref.current) {
442
- ref.current = observable(initialValue);
443
- }
444
- return ref.current;
445
- }
446
457
 
447
458
  // src/react/useIsMounted.ts
448
459
  function useIsMounted() {
@@ -478,8 +489,16 @@ function useObserve(selector, reactionOrOptions, options) {
478
489
  } else {
479
490
  options = reactionOrOptions;
480
491
  }
492
+ const deps = options == null ? void 0 : options.deps;
493
+ const depsObs$ = deps ? useObservable(deps) : void 0;
494
+ if (depsObs$) {
495
+ depsObs$.set(deps);
496
+ }
481
497
  const ref = useRef({});
482
- ref.current.selector = selector;
498
+ ref.current.selector = deps ? () => {
499
+ depsObs$ == null ? void 0 : depsObs$.get();
500
+ return computeSelector(selector);
501
+ } : selector;
483
502
  ref.current.reaction = reaction;
484
503
  if (!ref.current.dispose) {
485
504
  ref.current.dispose = observe(
@@ -504,12 +523,18 @@ function useObserveEffect(selector, reactionOrOptions, options) {
504
523
  } else {
505
524
  options = reactionOrOptions;
506
525
  }
526
+ const deps = options == null ? void 0 : options.deps;
527
+ const depsObs$ = deps ? useObservable(deps) : void 0;
528
+ if (depsObs$) {
529
+ depsObs$.set(deps);
530
+ }
507
531
  const ref = useRef({ selector });
508
532
  ref.current = { selector, reaction };
509
533
  useMountOnce(
510
534
  () => observe(
511
535
  (e) => {
512
536
  const { selector: selector2 } = ref.current;
537
+ depsObs$ == null ? void 0 : depsObs$.get();
513
538
  return isFunction(selector2) ? selector2(e) : selector2;
514
539
  },
515
540
  (e) => {
@@ -0,0 +1,31 @@
1
+ import { RecordValue, ArrayValue } from '@legendapp/state';
2
+ import { SyncTransform } from '@legendapp/state/sync';
3
+
4
+ declare function transformObjectFields(dataIn: Record<string, any>, map: Record<string, any>): any;
5
+ declare function invertFieldMap(obj: Record<string, any>): any;
6
+ declare const fieldTransformToTransform: <T extends object>(fieldTransform: FieldTransforms<T>) => SyncTransform<T>;
7
+ declare type FieldTransforms<T> = (T extends Record<string, Record<string, any>> ? {
8
+ _dict: FieldTransformsInner<RecordValue<T>>;
9
+ } : never) | FieldTransformsInner<T>;
10
+ declare type FieldTransformsInner<T> = {
11
+ [K in keyof T]: string;
12
+ } & ({
13
+ [K in keyof ObjectKeys<T> as `${K}_obj`]?: FieldTransforms<T[K]>;
14
+ } | {
15
+ [K in keyof DictKeys<T> as `${K}_dict`]?: FieldTransforms<RecordValue<T[K]>>;
16
+ }) & {
17
+ [K in keyof ArrayKeys<T> as `${K}_arr`]?: FieldTransforms<ArrayValue<T[K]>>;
18
+ } & {
19
+ [K in keyof ArrayKeys<T> as `${K}_val`]?: FieldTransforms<ArrayValue<T[K]>>;
20
+ };
21
+ declare type ObjectKeys<T> = Pick<T, {
22
+ [K in keyof T]-?: K extends string ? T[K] extends Record<string, any> ? T[K] extends any[] ? never : K : never : never;
23
+ }[keyof T]>;
24
+ declare type DictKeys<T> = Pick<T, {
25
+ [K in keyof T]-?: K extends string ? (T[K] extends Record<string, Record<string, any>> ? K : never) : never;
26
+ }[keyof T]>;
27
+ declare type ArrayKeys<T> = Pick<T, {
28
+ [K in keyof T]-?: K extends string | number ? (T[K] extends any[] ? K : never) : never;
29
+ }[keyof T]>;
30
+
31
+ export { type FieldTransforms, type FieldTransformsInner, fieldTransformToTransform, invertFieldMap, transformObjectFields };
@@ -0,0 +1,31 @@
1
+ import { RecordValue, ArrayValue } from '@legendapp/state';
2
+ import { SyncTransform } from '@legendapp/state/sync';
3
+
4
+ declare function transformObjectFields(dataIn: Record<string, any>, map: Record<string, any>): any;
5
+ declare function invertFieldMap(obj: Record<string, any>): any;
6
+ declare const fieldTransformToTransform: <T extends object>(fieldTransform: FieldTransforms<T>) => SyncTransform<T>;
7
+ declare type FieldTransforms<T> = (T extends Record<string, Record<string, any>> ? {
8
+ _dict: FieldTransformsInner<RecordValue<T>>;
9
+ } : never) | FieldTransformsInner<T>;
10
+ declare type FieldTransformsInner<T> = {
11
+ [K in keyof T]: string;
12
+ } & ({
13
+ [K in keyof ObjectKeys<T> as `${K}_obj`]?: FieldTransforms<T[K]>;
14
+ } | {
15
+ [K in keyof DictKeys<T> as `${K}_dict`]?: FieldTransforms<RecordValue<T[K]>>;
16
+ }) & {
17
+ [K in keyof ArrayKeys<T> as `${K}_arr`]?: FieldTransforms<ArrayValue<T[K]>>;
18
+ } & {
19
+ [K in keyof ArrayKeys<T> as `${K}_val`]?: FieldTransforms<ArrayValue<T[K]>>;
20
+ };
21
+ declare type ObjectKeys<T> = Pick<T, {
22
+ [K in keyof T]-?: K extends string ? T[K] extends Record<string, any> ? T[K] extends any[] ? never : K : never : never;
23
+ }[keyof T]>;
24
+ declare type DictKeys<T> = Pick<T, {
25
+ [K in keyof T]-?: K extends string ? (T[K] extends Record<string, Record<string, any>> ? K : never) : never;
26
+ }[keyof T]>;
27
+ declare type ArrayKeys<T> = Pick<T, {
28
+ [K in keyof T]-?: K extends string | number ? (T[K] extends any[] ? K : never) : never;
29
+ }[keyof T]>;
30
+
31
+ export { type FieldTransforms, type FieldTransformsInner, fieldTransformToTransform, invertFieldMap, transformObjectFields };