@legendapp/state 3.0.0-beta.30 → 3.0.0-beta.31

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
@@ -148,7 +148,7 @@ interface Change {
148
148
  type RecordValue<T> = T extends Record<string, infer t> ? t : never;
149
149
  type ArrayValue<T> = T extends Array<infer t> ? t : never;
150
150
  type ObservableValue<T> = T extends Observable<infer t> ? t : never;
151
- type Selector<T> = ObservableParam<T> | ObservableEvent | (() => T) | T;
151
+ type Selector<T> = ObservableParam<T> | ObservableEvent | (() => ObservableParam<T>) | (() => T) | T;
152
152
  type ClassConstructor<I, Args extends any[] = any[]> = new (...args: Args) => I;
153
153
  type ObservableListenerDispose = () => void;
154
154
  interface ObservableRoot {
@@ -304,6 +304,8 @@ declare function getProxy(node: NodeInfo, p?: string, asFunction?: Function): Ob
304
304
  declare function set(node: NodeInfo, newValue?: any): void;
305
305
  declare function get(node: NodeInfo, options?: TrackingType | GetOptions): any;
306
306
  declare function peek(node: NodeInfo): any;
307
+ declare function deactivateNode(node: NodeInfo): void;
308
+ declare function reactivateNode(node: NodeInfo, lazyFn: Function): void;
307
309
  declare function isObserved(node: NodeInfo): boolean;
308
310
  declare function shouldIgnoreUnobserved(node: NodeInfo, refreshFn: () => void): true | undefined;
309
311
 
@@ -411,6 +413,7 @@ declare function registerMiddleware(node: NodeInfo, type: MiddlewareEventType, h
411
413
  declare const internal: {
412
414
  createPreviousHandler: typeof createPreviousHandler;
413
415
  clone: typeof clone;
416
+ deactivateNode: typeof deactivateNode;
414
417
  deepMerge: typeof deepMerge;
415
418
  ensureNodeValue: typeof ensureNodeValue;
416
419
  findIDKey: typeof findIDKey;
@@ -442,6 +445,7 @@ declare const internal: {
442
445
  observableFns: Map<string, (node: NodeInfo, ...args: any[]) => any>;
443
446
  optimized: symbol;
444
447
  peek: typeof peek;
448
+ reactivateNode: typeof reactivateNode;
445
449
  registerMiddleware: typeof registerMiddleware;
446
450
  safeParse: typeof safeParse;
447
451
  safeStringify: typeof safeStringify;
package/index.d.ts CHANGED
@@ -148,7 +148,7 @@ interface Change {
148
148
  type RecordValue<T> = T extends Record<string, infer t> ? t : never;
149
149
  type ArrayValue<T> = T extends Array<infer t> ? t : never;
150
150
  type ObservableValue<T> = T extends Observable<infer t> ? t : never;
151
- type Selector<T> = ObservableParam<T> | ObservableEvent | (() => T) | T;
151
+ type Selector<T> = ObservableParam<T> | ObservableEvent | (() => ObservableParam<T>) | (() => T) | T;
152
152
  type ClassConstructor<I, Args extends any[] = any[]> = new (...args: Args) => I;
153
153
  type ObservableListenerDispose = () => void;
154
154
  interface ObservableRoot {
@@ -304,6 +304,8 @@ declare function getProxy(node: NodeInfo, p?: string, asFunction?: Function): Ob
304
304
  declare function set(node: NodeInfo, newValue?: any): void;
305
305
  declare function get(node: NodeInfo, options?: TrackingType | GetOptions): any;
306
306
  declare function peek(node: NodeInfo): any;
307
+ declare function deactivateNode(node: NodeInfo): void;
308
+ declare function reactivateNode(node: NodeInfo, lazyFn: Function): void;
307
309
  declare function isObserved(node: NodeInfo): boolean;
308
310
  declare function shouldIgnoreUnobserved(node: NodeInfo, refreshFn: () => void): true | undefined;
309
311
 
@@ -411,6 +413,7 @@ declare function registerMiddleware(node: NodeInfo, type: MiddlewareEventType, h
411
413
  declare const internal: {
412
414
  createPreviousHandler: typeof createPreviousHandler;
413
415
  clone: typeof clone;
416
+ deactivateNode: typeof deactivateNode;
414
417
  deepMerge: typeof deepMerge;
415
418
  ensureNodeValue: typeof ensureNodeValue;
416
419
  findIDKey: typeof findIDKey;
@@ -442,6 +445,7 @@ declare const internal: {
442
445
  observableFns: Map<string, (node: NodeInfo, ...args: any[]) => any>;
443
446
  optimized: symbol;
444
447
  peek: typeof peek;
448
+ reactivateNode: typeof reactivateNode;
445
449
  registerMiddleware: typeof registerMiddleware;
446
450
  safeParse: typeof safeParse;
447
451
  safeStringify: typeof safeStringify;
package/index.js CHANGED
@@ -2007,11 +2007,14 @@ function checkProperty(value, key) {
2007
2007
  return value[key];
2008
2008
  }
2009
2009
  }
2010
- function reactivateNode(node, lazyFn) {
2010
+ function deactivateNode(node) {
2011
2011
  var _a, _b;
2012
2012
  (_a = node.activatedObserveDispose) == null ? void 0 : _a.call(node);
2013
2013
  (_b = node.linkedToNodeDispose) == null ? void 0 : _b.call(node);
2014
2014
  node.activatedObserveDispose = node.linkedToNodeDispose = node.linkedToNode = void 0;
2015
+ }
2016
+ function reactivateNode(node, lazyFn) {
2017
+ deactivateNode(node);
2015
2018
  node.lazyFn = lazyFn;
2016
2019
  node.lazy = true;
2017
2020
  }
@@ -2059,7 +2062,7 @@ function activateNodeFunction(node, lazyFn) {
2059
2062
  node.dirtyFn = refreshFn;
2060
2063
  globalState.dirtyNodes.add(node);
2061
2064
  }
2062
- node.activatedObserveDispose = observe(
2065
+ const observeDispose = observe(
2063
2066
  () => {
2064
2067
  var _a, _b, _c, _d;
2065
2068
  if (isFirst) {
@@ -2162,6 +2165,10 @@ function activateNodeFunction(node, lazyFn) {
2162
2165
  },
2163
2166
  { fromComputed: true }
2164
2167
  );
2168
+ node.activatedObserveDispose = () => {
2169
+ observeDispose == null ? void 0 : observeDispose();
2170
+ disposes.forEach((fn) => fn());
2171
+ };
2165
2172
  return activatedValue;
2166
2173
  }
2167
2174
  function activateNodeBase(node, value) {
@@ -2448,6 +2455,7 @@ function syncState(obs) {
2448
2455
  var internal = {
2449
2456
  createPreviousHandler,
2450
2457
  clone,
2458
+ deactivateNode,
2451
2459
  deepMerge,
2452
2460
  ensureNodeValue,
2453
2461
  findIDKey,
@@ -2465,6 +2473,7 @@ var internal = {
2465
2473
  observableFns,
2466
2474
  optimized,
2467
2475
  peek,
2476
+ reactivateNode,
2468
2477
  registerMiddleware,
2469
2478
  safeParse,
2470
2479
  safeStringify,
package/index.mjs CHANGED
@@ -2005,11 +2005,14 @@ function checkProperty(value, key) {
2005
2005
  return value[key];
2006
2006
  }
2007
2007
  }
2008
- function reactivateNode(node, lazyFn) {
2008
+ function deactivateNode(node) {
2009
2009
  var _a, _b;
2010
2010
  (_a = node.activatedObserveDispose) == null ? void 0 : _a.call(node);
2011
2011
  (_b = node.linkedToNodeDispose) == null ? void 0 : _b.call(node);
2012
2012
  node.activatedObserveDispose = node.linkedToNodeDispose = node.linkedToNode = void 0;
2013
+ }
2014
+ function reactivateNode(node, lazyFn) {
2015
+ deactivateNode(node);
2013
2016
  node.lazyFn = lazyFn;
2014
2017
  node.lazy = true;
2015
2018
  }
@@ -2057,7 +2060,7 @@ function activateNodeFunction(node, lazyFn) {
2057
2060
  node.dirtyFn = refreshFn;
2058
2061
  globalState.dirtyNodes.add(node);
2059
2062
  }
2060
- node.activatedObserveDispose = observe(
2063
+ const observeDispose = observe(
2061
2064
  () => {
2062
2065
  var _a, _b, _c, _d;
2063
2066
  if (isFirst) {
@@ -2160,6 +2163,10 @@ function activateNodeFunction(node, lazyFn) {
2160
2163
  },
2161
2164
  { fromComputed: true }
2162
2165
  );
2166
+ node.activatedObserveDispose = () => {
2167
+ observeDispose == null ? void 0 : observeDispose();
2168
+ disposes.forEach((fn) => fn());
2169
+ };
2163
2170
  return activatedValue;
2164
2171
  }
2165
2172
  function activateNodeBase(node, value) {
@@ -2446,6 +2453,7 @@ function syncState(obs) {
2446
2453
  var internal = {
2447
2454
  createPreviousHandler,
2448
2455
  clone,
2456
+ deactivateNode,
2449
2457
  deepMerge,
2450
2458
  ensureNodeValue,
2451
2459
  findIDKey,
@@ -2463,6 +2471,7 @@ var internal = {
2463
2471
  observableFns,
2464
2472
  optimized,
2465
2473
  peek,
2474
+ reactivateNode,
2466
2475
  registerMiddleware,
2467
2476
  safeParse,
2468
2477
  safeStringify,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@legendapp/state",
3
- "version": "3.0.0-beta.30",
3
+ "version": "3.0.0-beta.31",
4
4
  "description": "legend-state",
5
5
  "sideEffects": false,
6
6
  "private": false,
package/react.js CHANGED
@@ -411,38 +411,6 @@ function Switch({
411
411
  const child = children[useSelector(value)];
412
412
  return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
413
413
  }
414
- function useObservable(initialValue, deps) {
415
- var _a;
416
- const ref = React.useRef({});
417
- ref.current.value = initialValue;
418
- const depsObs$ = deps ? useObservable(deps) : void 0;
419
- if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
420
- const value = depsObs$ ? state.isFunction(initialValue) && initialValue.length === 1 ? (p) => {
421
- depsObs$.get();
422
- return ref.current.value(p);
423
- } : () => {
424
- depsObs$.get();
425
- return state.computeSelector(ref.current.value);
426
- } : initialValue;
427
- ref.current.obs$ = state.observable(value);
428
- }
429
- if (depsObs$) {
430
- depsObs$.set(deps);
431
- }
432
- return ref.current.obs$;
433
- }
434
-
435
- // src/react/useComputed.ts
436
- function useComputed(get, set, deps) {
437
- if (!deps && state.isArray(set)) {
438
- deps = set;
439
- set = void 0;
440
- }
441
- return useObservable(
442
- set ? state.linked({ get, set: ({ value }) => set(value) }) : get,
443
- deps
444
- );
445
- }
446
414
  var useEffectOnce = (effect, deps) => {
447
415
  if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
448
416
  const refDispose = React.useRef({ num: 0 });
@@ -471,6 +439,8 @@ var useEffectOnce = (effect, deps) => {
471
439
  React.useEffect(effect, deps);
472
440
  }
473
441
  };
442
+
443
+ // src/react/useMount.ts
474
444
  function useMount(fn) {
475
445
  return useEffectOnce(() => {
476
446
  const ret = fn();
@@ -481,6 +451,54 @@ function useMount(fn) {
481
451
  }
482
452
  var useMountOnce = useMount;
483
453
 
454
+ // src/react/useUnmount.ts
455
+ function useUnmount(fn) {
456
+ return useMount(() => fn);
457
+ }
458
+ var useUnmountOnce = useUnmount;
459
+
460
+ // src/react/useObservable.ts
461
+ var { deactivateNode } = state.internal;
462
+ function useObservable(initialValue, deps) {
463
+ var _a;
464
+ const ref = React.useRef({});
465
+ ref.current.value = initialValue;
466
+ const depsObs$ = deps ? useObservable(deps) : void 0;
467
+ if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
468
+ const value = depsObs$ ? state.isFunction(initialValue) && initialValue.length === 1 ? (p) => {
469
+ depsObs$.get();
470
+ return ref.current.value(p);
471
+ } : () => {
472
+ depsObs$.get();
473
+ return state.computeSelector(ref.current.value);
474
+ } : initialValue;
475
+ ref.current.obs$ = state.observable(value);
476
+ }
477
+ if (depsObs$) {
478
+ depsObs$.set(deps);
479
+ }
480
+ useUnmount(() => {
481
+ const obs = ref.current.obs$;
482
+ if (obs) {
483
+ const node = state.getNode(obs);
484
+ deactivateNode(node);
485
+ }
486
+ });
487
+ return ref.current.obs$;
488
+ }
489
+
490
+ // src/react/useComputed.ts
491
+ function useComputed(get, set, deps) {
492
+ if (!deps && state.isArray(set)) {
493
+ deps = set;
494
+ set = void 0;
495
+ }
496
+ return useObservable(
497
+ set ? state.linked({ get, set: ({ value }) => set(value) }) : get,
498
+ deps
499
+ );
500
+ }
501
+
484
502
  // src/react/useIsMounted.ts
485
503
  function useIsMounted() {
486
504
  const obs = useObservable(false);
@@ -500,14 +518,6 @@ function useObservableReducer(reducer, initializerArg, initializer) {
500
518
  };
501
519
  return [obs, dispatch];
502
520
  }
503
-
504
- // src/react/useUnmount.ts
505
- function useUnmount(fn) {
506
- return useMount(() => fn);
507
- }
508
- var useUnmountOnce = useUnmount;
509
-
510
- // src/react/useObserve.ts
511
521
  function useObserve(selector, reactionOrOptions, options) {
512
522
  let reaction;
513
523
  if (state.isFunction(reactionOrOptions)) {
package/react.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { isFunction, isEmpty, observable, computeSelector, isArray, isMap, isObservableValueReady, linked, isPromise, observe, when, whenReady, internal, trackSelector, isPrimitive, isObservable } from '@legendapp/state';
1
+ import { isFunction, isEmpty, observable, computeSelector, isArray, isMap, isObservableValueReady, isPromise, getNode as getNode$1, linked, observe, when, whenReady, internal, trackSelector, isPrimitive, isObservable } 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
  import { enableReactive } from '@legendapp/state/react-reactive/enableReactive';
@@ -405,38 +405,6 @@ function Switch({
405
405
  const child = children[useSelector(value)];
406
406
  return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
407
407
  }
408
- function useObservable(initialValue, deps) {
409
- var _a;
410
- const ref = useRef({});
411
- ref.current.value = initialValue;
412
- const depsObs$ = deps ? useObservable(deps) : void 0;
413
- if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
414
- const value = depsObs$ ? isFunction(initialValue) && initialValue.length === 1 ? (p) => {
415
- depsObs$.get();
416
- return ref.current.value(p);
417
- } : () => {
418
- depsObs$.get();
419
- return computeSelector(ref.current.value);
420
- } : initialValue;
421
- ref.current.obs$ = observable(value);
422
- }
423
- if (depsObs$) {
424
- depsObs$.set(deps);
425
- }
426
- return ref.current.obs$;
427
- }
428
-
429
- // src/react/useComputed.ts
430
- function useComputed(get, set, deps) {
431
- if (!deps && isArray(set)) {
432
- deps = set;
433
- set = void 0;
434
- }
435
- return useObservable(
436
- set ? linked({ get, set: ({ value }) => set(value) }) : get,
437
- deps
438
- );
439
- }
440
408
  var useEffectOnce = (effect, deps) => {
441
409
  if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
442
410
  const refDispose = useRef({ num: 0 });
@@ -465,6 +433,8 @@ var useEffectOnce = (effect, deps) => {
465
433
  useEffect(effect, deps);
466
434
  }
467
435
  };
436
+
437
+ // src/react/useMount.ts
468
438
  function useMount(fn) {
469
439
  return useEffectOnce(() => {
470
440
  const ret = fn();
@@ -475,6 +445,54 @@ function useMount(fn) {
475
445
  }
476
446
  var useMountOnce = useMount;
477
447
 
448
+ // src/react/useUnmount.ts
449
+ function useUnmount(fn) {
450
+ return useMount(() => fn);
451
+ }
452
+ var useUnmountOnce = useUnmount;
453
+
454
+ // src/react/useObservable.ts
455
+ var { deactivateNode } = internal;
456
+ function useObservable(initialValue, deps) {
457
+ var _a;
458
+ const ref = useRef({});
459
+ ref.current.value = initialValue;
460
+ const depsObs$ = deps ? useObservable(deps) : void 0;
461
+ if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
462
+ const value = depsObs$ ? isFunction(initialValue) && initialValue.length === 1 ? (p) => {
463
+ depsObs$.get();
464
+ return ref.current.value(p);
465
+ } : () => {
466
+ depsObs$.get();
467
+ return computeSelector(ref.current.value);
468
+ } : initialValue;
469
+ ref.current.obs$ = observable(value);
470
+ }
471
+ if (depsObs$) {
472
+ depsObs$.set(deps);
473
+ }
474
+ useUnmount(() => {
475
+ const obs = ref.current.obs$;
476
+ if (obs) {
477
+ const node = getNode$1(obs);
478
+ deactivateNode(node);
479
+ }
480
+ });
481
+ return ref.current.obs$;
482
+ }
483
+
484
+ // src/react/useComputed.ts
485
+ function useComputed(get, set, deps) {
486
+ if (!deps && isArray(set)) {
487
+ deps = set;
488
+ set = void 0;
489
+ }
490
+ return useObservable(
491
+ set ? linked({ get, set: ({ value }) => set(value) }) : get,
492
+ deps
493
+ );
494
+ }
495
+
478
496
  // src/react/useIsMounted.ts
479
497
  function useIsMounted() {
480
498
  const obs = useObservable(false);
@@ -494,14 +512,6 @@ function useObservableReducer(reducer, initializerArg, initializer) {
494
512
  };
495
513
  return [obs, dispatch];
496
514
  }
497
-
498
- // src/react/useUnmount.ts
499
- function useUnmount(fn) {
500
- return useMount(() => fn);
501
- }
502
- var useUnmountOnce = useUnmount;
503
-
504
- // src/react/useObserve.ts
505
515
  function useObserve(selector, reactionOrOptions, options) {
506
516
  let reaction;
507
517
  if (isFunction(reactionOrOptions)) {