@legendapp/state 3.0.0-alpha.4 → 3.0.0-alpha.6

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
@@ -87,7 +87,8 @@ type HasOneStringParam<T> = T extends (...args: infer P) => any ? P extends {
87
87
  type ObservableNode<T, NT = NonNullable<T>> = [NT] extends [never] ? ObservablePrimitive<T> : IsStrictAny<T> extends true ? ObservableAny : [T] extends [Promise<infer t>] ? ObservableNode<t> : [T] extends [(key: infer K extends string) => infer t] ? [t] extends [ImmutableObservableBase<any>] ? HasOneStringParam<T> extends true ? Observable<Record<K, t>> : t : HasOneStringParam<T> extends true ? Observable<Record<K, t>> & T : Observable<ObservableFunction<t>> : [NT] extends [ImmutableObservableBase<any>] ? NT : [NT] extends [Primitive$1] ? [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> & {};
88
88
  type Observable<T = any> = ObservableNode<T> & {};
89
89
  type ObservableParam<T = any> = ImmutableObservableSimple<T> & MutableObservableSimple;
90
- type ValueOrFunction<T> = T extends Function ? T : T | ImmutableObservableBase<T> | Promise<T> | (() => T | Promise<T>);
90
+ type FixExpanded<T> = [T] extends [boolean] ? boolean : T;
91
+ type ValueOrFunction<T> = [T] extends [Function] ? T : T | ImmutableObservableBase<FixExpanded<T> | T> | Promise<FixExpanded<T> | T> | (() => FixExpanded<T> | T | Promise<FixExpanded<T> | T> | ImmutableObservableBase<FixExpanded<T> | T>);
91
92
  type ValueOrFunctionKeys<T> = {
92
93
  [K in keyof T]: RecursiveValueOrFunction<T[K]>;
93
94
  };
@@ -401,4 +402,4 @@ declare const internal: {
401
402
  };
402
403
  };
403
404
 
404
- export { type ArrayValue, type Change, type ChildNodeValue, type ClassConstructor, type GetMode, type GetOptions, type ImmutableObservableBase, type Linked, type LinkedOptions, type ListenerFn, type ListenerParams, type NodeValue, type NodeValueListener, type NotPrimitive, type Observable, type ObservableBoolean, type ObservableEvent, type ObservableListenerDispose, type ObservableObject, type ObservableParam, type ObservablePrimitive, type ObservableRoot, type ObservableState, type ObservableSyncState, type ObservableSyncStateBase, type ObservableValue, type ObserveEvent, type ObserveEventCallback, type ObserveOptions, type OpaqueObject, type Primitive, type RecordValue, type RecursiveValueOrFunction, type RemoveObservables, type RetryOptions, type RootNodeValue, type Selector, type SetParams, type TrackingNode, type TrackingState, type TrackingType, type TypeAtPath, type UpdateFn, type UpdateFnParams, type WaitForSetFnParams, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, configureLegendState, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPrimitive, isPromise, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setInObservableAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
405
+ export { type ArrayValue, type Change, type ChildNodeValue, type ClassConstructor, type GetMode, type GetOptions, type ImmutableObservableBase, type Linked, type LinkedOptions, type ListenerFn, type ListenerParams, type NodeValue, type NodeValueListener, type NotPrimitive, type Observable, type ObservableBoolean, type ObservableEvent, type ObservableListenerDispose, type ObservableObject, type ObservableObjectFns, type ObservableParam, type ObservablePrimitive, type ObservableRoot, type ObservableState, type ObservableSyncState, type ObservableSyncStateBase, type ObservableValue, type ObserveEvent, type ObserveEventCallback, type ObserveOptions, type OpaqueObject, type Primitive, type RecordValue, type RecursiveValueOrFunction, type RemoveObservables, type RetryOptions, type RootNodeValue, type Selector, type SetParams, type TrackingNode, type TrackingState, type TrackingType, type TypeAtPath, type UpdateFn, type UpdateFnParams, type WaitForSetFnParams, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, configureLegendState, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPrimitive, isPromise, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setInObservableAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
package/index.d.ts CHANGED
@@ -87,7 +87,8 @@ type HasOneStringParam<T> = T extends (...args: infer P) => any ? P extends {
87
87
  type ObservableNode<T, NT = NonNullable<T>> = [NT] extends [never] ? ObservablePrimitive<T> : IsStrictAny<T> extends true ? ObservableAny : [T] extends [Promise<infer t>] ? ObservableNode<t> : [T] extends [(key: infer K extends string) => infer t] ? [t] extends [ImmutableObservableBase<any>] ? HasOneStringParam<T> extends true ? Observable<Record<K, t>> : t : HasOneStringParam<T> extends true ? Observable<Record<K, t>> & T : Observable<ObservableFunction<t>> : [NT] extends [ImmutableObservableBase<any>] ? NT : [NT] extends [Primitive$1] ? [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> & {};
88
88
  type Observable<T = any> = ObservableNode<T> & {};
89
89
  type ObservableParam<T = any> = ImmutableObservableSimple<T> & MutableObservableSimple;
90
- type ValueOrFunction<T> = T extends Function ? T : T | ImmutableObservableBase<T> | Promise<T> | (() => T | Promise<T>);
90
+ type FixExpanded<T> = [T] extends [boolean] ? boolean : T;
91
+ type ValueOrFunction<T> = [T] extends [Function] ? T : T | ImmutableObservableBase<FixExpanded<T> | T> | Promise<FixExpanded<T> | T> | (() => FixExpanded<T> | T | Promise<FixExpanded<T> | T> | ImmutableObservableBase<FixExpanded<T> | T>);
91
92
  type ValueOrFunctionKeys<T> = {
92
93
  [K in keyof T]: RecursiveValueOrFunction<T[K]>;
93
94
  };
@@ -401,4 +402,4 @@ declare const internal: {
401
402
  };
402
403
  };
403
404
 
404
- export { type ArrayValue, type Change, type ChildNodeValue, type ClassConstructor, type GetMode, type GetOptions, type ImmutableObservableBase, type Linked, type LinkedOptions, type ListenerFn, type ListenerParams, type NodeValue, type NodeValueListener, type NotPrimitive, type Observable, type ObservableBoolean, type ObservableEvent, type ObservableListenerDispose, type ObservableObject, type ObservableParam, type ObservablePrimitive, type ObservableRoot, type ObservableState, type ObservableSyncState, type ObservableSyncStateBase, type ObservableValue, type ObserveEvent, type ObserveEventCallback, type ObserveOptions, type OpaqueObject, type Primitive, type RecordValue, type RecursiveValueOrFunction, type RemoveObservables, type RetryOptions, type RootNodeValue, type Selector, type SetParams, type TrackingNode, type TrackingState, type TrackingType, type TypeAtPath, type UpdateFn, type UpdateFnParams, type WaitForSetFnParams, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, configureLegendState, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPrimitive, isPromise, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setInObservableAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
405
+ export { type ArrayValue, type Change, type ChildNodeValue, type ClassConstructor, type GetMode, type GetOptions, type ImmutableObservableBase, type Linked, type LinkedOptions, type ListenerFn, type ListenerParams, type NodeValue, type NodeValueListener, type NotPrimitive, type Observable, type ObservableBoolean, type ObservableEvent, type ObservableListenerDispose, type ObservableObject, type ObservableObjectFns, type ObservableParam, type ObservablePrimitive, type ObservableRoot, type ObservableState, type ObservableSyncState, type ObservableSyncStateBase, type ObservableValue, type ObserveEvent, type ObserveEventCallback, type ObserveOptions, type OpaqueObject, type Primitive, type RecordValue, type RecursiveValueOrFunction, type RemoveObservables, type RetryOptions, type RootNodeValue, type Selector, type SetParams, type TrackingNode, type TrackingState, type TrackingType, type TypeAtPath, type UpdateFn, type UpdateFnParams, type WaitForSetFnParams, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, configureLegendState, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPrimitive, isPromise, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setInObservableAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@legendapp/state",
3
- "version": "3.0.0-alpha.4",
3
+ "version": "3.0.0-alpha.6",
4
4
  "description": "legend-state",
5
5
  "sideEffects": false,
6
6
  "private": false,
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
 
@@ -395,7 +397,10 @@ function useObservable(initialValue, deps) {
395
397
  ref.current.value = initialValue;
396
398
  const depsObs$ = deps ? useObservable(deps) : void 0;
397
399
  if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
398
- const value = depsObs$ ? () => {
400
+ const value = depsObs$ ? state.isFunction(initialValue) && initialValue.length === 1 ? (p) => {
401
+ depsObs$.get();
402
+ return ref.current.value(p);
403
+ } : () => {
399
404
  depsObs$.get();
400
405
  return state.computeSelector(ref.current.value);
401
406
  } : initialValue;
package/react.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { isFunction, isEmpty, observable, isPromise, isObservable, syncState, computeSelector, isArray, isMap, isObservableValueReady, linked, 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
 
@@ -389,7 +391,10 @@ function useObservable(initialValue, deps) {
389
391
  ref.current.value = initialValue;
390
392
  const depsObs$ = deps ? useObservable(deps) : void 0;
391
393
  if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
392
- const value = depsObs$ ? () => {
394
+ const value = depsObs$ ? isFunction(initialValue) && initialValue.length === 1 ? (p) => {
395
+ depsObs$.get();
396
+ return ref.current.value(p);
397
+ } : () => {
393
398
  depsObs$.get();
394
399
  return computeSelector(ref.current.value);
395
400
  } : initialValue;