@legendapp/state 3.0.0-alpha.3 → 3.0.0-alpha.5

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/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  type Primitive$1 = string | number | boolean | symbol | bigint | undefined | null | Date;
2
- type ArrayOverrideFnNames = 'find' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
2
+ type ArrayOverrideFnNames = 'find' | 'findIndex' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
3
3
  type RemoveIndex<T> = {
4
4
  [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
5
5
  };
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  type Primitive$1 = string | number | boolean | symbol | bigint | undefined | null | Date;
2
- type ArrayOverrideFnNames = 'find' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
2
+ type ArrayOverrideFnNames = 'find' | 'findIndex' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
3
3
  type RemoveIndex<T> = {
4
4
  [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
5
5
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@legendapp/state",
3
- "version": "3.0.0-alpha.3",
3
+ "version": "3.0.0-alpha.5",
4
4
  "description": "legend-state",
5
5
  "sideEffects": false,
6
6
  "private": false,
package/react.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
2
+ import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
3
3
  import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveEvent, ObserveOptions, ObserveEventCallback } from '@legendapp/state';
4
4
 
5
5
  declare function Computed({ children }: {
@@ -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];
package/react.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
2
+ import { ReactNode, ReactElement, FC, LegacyRef, ComponentClass, DependencyList, ReducerWithoutAction, ReducerStateWithoutAction, DispatchWithoutAction, Reducer, ReducerState, Dispatch, ReducerAction } from 'react';
3
3
  import { ObservableParam, Observable, ObservableBoolean, Selector, RecursiveValueOrFunction, ObserveEvent, ObserveOptions, ObserveEventCallback } from '@legendapp/state';
4
4
 
5
5
  declare function Computed({ children }: {
@@ -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];
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,33 @@ 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$ ? () => {
401
+ depsObs$.get();
402
+ return state.computeSelector(ref.current.value);
403
+ } : initialValue;
404
+ ref.current.obs$ = state.observable(value);
405
+ }
406
+ if (depsObs$) {
407
+ depsObs$.set(deps);
408
+ }
409
+ return ref.current.obs$;
410
+ }
411
+
412
+ // src/react/useComputed.ts
413
+ function useComputed(get, set, deps) {
393
414
  if (!deps && state.isArray(set)) {
394
415
  deps = set;
395
416
  set = void 0;
396
417
  }
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 || []
418
+ return useObservable(
419
+ set ? state.linked({ get, set: ({ value }) => set(value) }) : get,
420
+ deps
406
421
  );
407
422
  }
408
423
  var useEffectOnce = (effect, deps) => {
@@ -442,13 +457,6 @@ function useMount(fn) {
442
457
  }, []);
443
458
  }
444
459
  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
460
 
453
461
  // src/react/useIsMounted.ts
454
462
  function useIsMounted() {
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,33 @@ 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$ ? () => {
395
+ depsObs$.get();
396
+ return computeSelector(ref.current.value);
397
+ } : initialValue;
398
+ ref.current.obs$ = observable(value);
399
+ }
400
+ if (depsObs$) {
401
+ depsObs$.set(deps);
402
+ }
403
+ return ref.current.obs$;
404
+ }
405
+
406
+ // src/react/useComputed.ts
407
+ function useComputed(get, set, deps) {
387
408
  if (!deps && isArray(set)) {
388
409
  deps = set;
389
410
  set = void 0;
390
411
  }
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 || []
412
+ return useObservable(
413
+ set ? linked({ get, set: ({ value }) => set(value) }) : get,
414
+ deps
400
415
  );
401
416
  }
402
417
  var useEffectOnce = (effect, deps) => {
@@ -436,13 +451,6 @@ function useMount(fn) {
436
451
  }, []);
437
452
  }
438
453
  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
454
 
447
455
  // src/react/useIsMounted.ts
448
456
  function useIsMounted() {