@legendapp/state 0.16.1 → 0.17.0-next.0

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/react.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { isFunction, Tracking, isObservable, updateTracking, getNodeValue, extraPrimitiveProps, tracking, beginTracking, setupTracking, endTracking, observe, symbolUndef, observable } from '@legendapp/state';
2
- import { memo, useRef, useMemo, createElement, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, useReducer, useCallback, useEffect } from 'react';
1
+ import { isFunction, Tracking, isObservable, updateTracking, getNodeValue, extraPrimitiveProps, ObservablePrimitive, tracking, beginTracking, scheduleSweep, setupTracking, endTracking, computed, observe, observable } from '@legendapp/state';
2
+ import { memo, createElement, useRef, useMemo, version, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, useEffect } from 'react';
3
3
 
4
4
  function computeProp(prop) {
5
5
  let p = prop;
@@ -17,9 +17,9 @@ function Computed({ children }) {
17
17
  const Memo = memo(function Memo({ children }) {
18
18
  return children();
19
19
  }, () => true);
20
- function Show({ if: if_, else: else_, children, }) {
20
+ function Show({ if: if_, else: else_, wrap, children, }) {
21
21
  const value = computeProp(if_);
22
- return (value
22
+ const child = (value
23
23
  ? isFunction(children)
24
24
  ? children(value)
25
25
  : children
@@ -28,6 +28,7 @@ function Show({ if: if_, else: else_, children, }) {
28
28
  ? else_()
29
29
  : else_
30
30
  : null);
31
+ return wrap ? createElement(wrap, undefined, child) : child;
31
32
  }
32
33
  function Switch({ value, children, }) {
33
34
  var _a, _b, _c, _d;
@@ -62,8 +63,6 @@ function For({ each, optimized, item, children, }) {
62
63
  }
63
64
 
64
65
  let isEnabled = false;
65
- const Updater = (s) => s + 1;
66
- const EmptyEffect = () => { };
67
66
  function enableLegendStateReact() {
68
67
  if (!isEnabled) {
69
68
  isEnabled = true;
@@ -83,187 +82,168 @@ function enableLegendStateReact() {
83
82
  __fn: (obs) => ({ data: obs }),
84
83
  });
85
84
  extraPrimitiveProps.set('ref', null);
85
+ // Set extra props for ObservablePrimitive to return on primitives
86
+ Object.defineProperties(ObservablePrimitive.prototype, {
87
+ $$typeof: { configurable: true, value: ReactTypeofSymbol },
88
+ type: { configurable: true, value: Text },
89
+ props: {
90
+ configurable: true,
91
+ get() {
92
+ return { data: this.getNode() };
93
+ },
94
+ },
95
+ ref: { configurable: true, value: null },
96
+ });
97
+ const mapOwnersDispose = new WeakMap();
98
+ const Updater = (s) => s + 1;
99
+ const EmptyEffect = () => { };
100
+ function runOwnerDisposes(owner) {
101
+ // Dispose old listeners if exists
102
+ if (owner) {
103
+ const disposeOld = mapOwnersDispose.get(owner);
104
+ if (disposeOld) {
105
+ tracking.callbacksMarked.delete(disposeOld);
106
+ disposeOld();
107
+ mapOwnersDispose.delete(owner);
108
+ }
109
+ }
110
+ }
86
111
  // 2. Override dispatcher access to hook up tracking
87
112
  let dispatcher;
88
113
  let didBeginTracking = false;
89
114
  let prevNodes;
115
+ const canUseOwner = +version.split('.')[0] >= 18;
90
116
  Object.defineProperty(__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher, 'current', {
91
117
  get() {
92
118
  return dispatcher;
93
119
  },
94
120
  set(newDispatcher) {
95
121
  var _a;
122
+ const owner = __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current;
96
123
  if (newDispatcher) {
97
- const useCallback = newDispatcher.useCallback;
98
- // When the React render is complete it sets the dispatcher to an object where useCallback has a length of 0
99
- if (dispatcher && didBeginTracking && useCallback.length < 2) {
100
- didBeginTracking = false;
101
- // If the previous dispatcher tracked nodes then set up hooks
102
- if (tracking.nodes) {
103
- try {
104
- let forceRender = dispatcher.useReducer(Updater, 0)[1];
105
- let noArgs = true;
106
- if (process.env.NODE_ENV === 'development') {
107
- (_a = tracking.listeners) === null || _a === void 0 ? void 0 : _a.call(tracking, tracking.nodes);
108
- if (tracking.updates) {
109
- noArgs = false;
110
- forceRender = tracking.updates(forceRender);
124
+ // If owner then this might be a component
125
+ if (!canUseOwner || owner) {
126
+ const useCallback = newDispatcher.useCallback;
127
+ // Check properties of newDispatcher's useCallback to determine whether this is a component and we should do the work
128
+ // Filter out dispatchers for hooks because we don't care about those
129
+ // When the React render is complete it sets the dispatcher to an object where useCallback has a length of 0
130
+ // So this will be the end of the render of the previous dispatcher
131
+ // And we track all accessed nodes
132
+ if (dispatcher && didBeginTracking && useCallback.length < 2) {
133
+ if (process.env.NODE_ENV === 'development' && dispatcher !== didBeginTracking) {
134
+ throw new Error('[legend-state] Unexpected dispatcher');
135
+ }
136
+ didBeginTracking = undefined;
137
+ // If the previous dispatcher tracked nodes then set up hooks
138
+ if (tracking.nodes) {
139
+ try {
140
+ let dispose;
141
+ let forceRender = dispatcher.useReducer(Updater, 0)[1];
142
+ let noArgs = true;
143
+ // Hook into tracking if user requested it
144
+ if (process.env.NODE_ENV === 'development') {
145
+ (_a = tracking.listeners) === null || _a === void 0 ? void 0 : _a.call(tracking, tracking.nodes);
146
+ if (tracking.updates) {
147
+ noArgs = false;
148
+ forceRender = tracking.updates(forceRender);
149
+ }
111
150
  }
112
- }
113
- // Track all of the nodes accessed during the dispatcher
114
- let dispose = setupTracking(tracking.nodes, forceRender, /*noArgs*/ noArgs);
115
- if (process.env.NODE_ENV === 'development') {
116
- // Clear tracing
117
- tracking.listeners = undefined;
118
- tracking.updates = undefined;
119
- const cachedNodes = tracking.nodes;
120
- dispatcher.useEffect(() => {
121
- // Workaround for React 18's double calling useEffect. If this is the
122
- // second useEffect, set up tracking again.
123
- if (dispose === undefined) {
124
- dispose = setupTracking(cachedNodes, forceRender, /*noArgs*/ noArgs);
151
+ if (canUseOwner) {
152
+ // Dispose old listeners if exists
153
+ runOwnerDisposes(owner);
154
+ runOwnerDisposes(owner.alternate);
155
+ }
156
+ // Track all of the nodes accessed during the dispatcher
157
+ dispose = setupTracking(tracking.nodes, forceRender,
158
+ /*noArgs*/ noArgs,
159
+ /*markAndSweep*/ canUseOwner);
160
+ if (canUseOwner) {
161
+ // Add this dispose function to the map to be able to clear listeners on the next run
162
+ mapOwnersDispose.set(owner, dispose);
163
+ }
164
+ else {
165
+ // If can't use owner (in React 17 or less) then we have to inject a useEffect to cleanup
166
+ if (process.env.NODE_ENV === 'development') {
167
+ // Clear tracing
168
+ tracking.listeners = undefined;
169
+ tracking.updates = undefined;
170
+ const cachedNodes = tracking.nodes;
171
+ dispatcher.useEffect(() => {
172
+ // Workaround for React 18's double calling useEffect. If this is the
173
+ // second useEffect, set up tracking again.
174
+ if (dispose === undefined) {
175
+ dispose = setupTracking(cachedNodes, forceRender,
176
+ /*noArgs*/ noArgs);
177
+ }
178
+ return () => {
179
+ dispose();
180
+ dispose = undefined;
181
+ };
182
+ });
125
183
  }
126
- return () => {
127
- dispose();
128
- dispose = undefined;
129
- };
130
- });
184
+ else {
185
+ // Return dispose to cleanup before each render or on unmount
186
+ dispatcher.useEffect(() => dispose);
187
+ }
188
+ }
131
189
  }
132
- else {
133
- // Return dispose to cleanup before each render or on unmount
134
- dispatcher.useEffect(() => dispose);
190
+ catch (err) {
191
+ // This may not ever be an error but since this is new we'll leave this here
192
+ // for a bit while we see what the behavior is like
193
+ if (process.env.NODE_ENV === 'development') {
194
+ console.error('[legend-state] error creating hooks', err);
195
+ throw new Error('[legend-state] error creating hooks');
196
+ }
135
197
  }
198
+ // Note that there is no useEffect to handle unmount. State listeners are handled lazily -
136
199
  }
137
- catch (err) {
138
- // This may not ever be an error but since this is new we'll leave this here
139
- // for a bit while we see what the behavior is like
140
- if (process.env.NODE_ENV === 'development') {
141
- console.error('[legend-state] error creating hooks', err);
142
- throw new Error('[legend-state] error creating hooks');
200
+ else {
201
+ // Run empty hook if not tracking nodes, to keep the same number of hooks per render
202
+ dispatcher.useReducer(Updater, 0);
203
+ if (!canUseOwner) {
204
+ dispatcher.useReducer(EmptyEffect, 0);
143
205
  }
144
206
  }
207
+ // Restore the previous tracking context
208
+ endTracking(prevNodes);
145
209
  }
146
- else {
147
- // Run empty hooks if not tracking nodes, to keep the same number of hooks per render
148
- dispatcher.useReducer(Updater, 0);
149
- dispatcher.useEffect(EmptyEffect);
210
+ dispatcher = newDispatcher;
211
+ // Start a new tracking context when entering a new rendering dispatcher
212
+ // In development, rendering dispatchers have useCallback named either "mountHookTypes" or "updateHookTypes"
213
+ // In production, they just have length = 2
214
+ if (!tracking.isTracking &&
215
+ (process.env.NODE_ENV === 'development'
216
+ ? !useCallback.toString().includes('Invalid')
217
+ : useCallback.length === 2)) {
218
+ didBeginTracking = dispatcher;
219
+ // Keep a copy of the previous tracking context
220
+ prevNodes = beginTracking();
150
221
  }
151
- // Restore the previous tracking context
152
- endTracking(prevNodes);
153
- }
154
- dispatcher = newDispatcher;
155
- // Start a new tracking context when entering a new rendering dispatcher
156
- // In development, rendering dispatchers have useCallback named either "mountHookTypes" or "updateHookTypes"
157
- // In production, they just have length = 2
158
- if (!tracking.isTracking &&
159
- (process.env.NODE_ENV === 'development'
160
- ? !useCallback.toString().includes('Invalid')
161
- : useCallback.length === 2)) {
162
- didBeginTracking = true;
163
- // Keep a copy of the previous tracking context
164
- prevNodes = beginTracking();
165
222
  }
166
223
  }
224
+ else if (!owner) {
225
+ scheduleSweep();
226
+ }
227
+ dispatcher = newDispatcher;
167
228
  },
168
229
  });
169
230
  }
170
231
  }
171
232
 
172
- function useForceRender() {
173
- const [, forceRender] = useReducer((s) => s + 1, 0);
174
- return useCallback(() => forceRender(), []);
233
+ function useComputed(compute) {
234
+ return useMemo(() => computed(compute), []);
175
235
  }
176
236
 
177
- /**
178
- * Runs the specified selector, automatically tracking observable access and optionally re-rendering
179
- * @param selector A computation function
180
- * @param whenToRender When to re-render. false = never re-render, undefined = render if different, true = always render
181
- */
182
- function useComputed(selector, whenToRender) {
183
- let inRun = true;
184
- let ret = symbolUndef;
185
- let cachedNodes;
186
- const fr = whenToRender !== false && useForceRender();
187
- const update = function () {
188
- // If running, call selector and return the value
189
- // Don't need to call the selector again if not running and alwaysUpdate
190
- if (inRun || !whenToRender) {
191
- const cur = selector();
192
- // Re-render if not currently rendering and value has changed
193
- if (!inRun && cur !== ret && whenToRender !== false) {
194
- // Re-render if value changed
195
- fr();
196
- }
197
- ret = cur;
198
- }
199
- else if (whenToRender) {
200
- fr();
201
- }
202
- inRun = false;
203
- // Workaround for React 18's double calling useEffect - cached the tracking nodes
204
- if (process.env.NODE_ENV === 'development') {
205
- cachedNodes = tracking.nodes;
206
- }
207
- };
208
- let dispose = observe(update);
209
- if (process.env.NODE_ENV === 'development') {
210
- useEffect(() => {
211
- // Workaround for React 18's double calling useEffect. If this is the
212
- // second useEffect, set up tracking again.
213
- if (dispose === undefined) {
214
- dispose = setupTracking(cachedNodes, update, /*noArgs*/ true);
215
- }
216
- return () => {
217
- dispose();
218
- dispose = undefined;
219
- };
220
- });
221
- }
222
- else {
223
- // Return dispose to cleanup before each render or on unmount
224
- useEffect(() => dispose);
225
- }
226
- return ret;
227
- }
228
-
229
- function useObserve(selector) {
230
- // Development-only workaround for React 18 double calling useEffect
231
- if (process.env.NODE_ENV === 'development') {
232
- let cachedNodes;
233
- const update = () => {
234
- selector();
235
- cachedNodes = tracking.nodes;
236
- };
237
- let dispose = observe(update);
238
- useEffect(() => {
239
- // Workaround for React 18's double calling useEffect. If this is the
240
- // second useEffect, set up tracking again.
241
- if (dispose === undefined) {
242
- dispose = setupTracking(cachedNodes, update, /*noArgs*/ true);
243
- }
244
- return () => {
245
- dispose();
246
- dispose = undefined;
247
- };
248
- });
249
- }
250
- else {
237
+ function useObserve(selector, deps) {
238
+ useEffect(() => {
251
239
  const dispose = observe(selector);
252
- // Return dispose to cleanup before each render or on unmount
253
- useEffect(() => dispose);
254
- }
240
+ return dispose;
241
+ }, deps || [selector]);
255
242
  }
256
243
 
257
- /**
258
- * A React hook that creates a new observable and can optionally listen or persist its state.
259
- *
260
- * @param initialValue The initial value of the observable or a function that returns the initial value
261
- *
262
- * @see https://www.legendapp.com/dev/state/react/#useObservable
263
- */
264
244
  function useObservable(initialValue) {
265
245
  // Create the observable from the default value
266
- return useMemo(() => observable(isFunction(initialValue) ? initialValue() : initialValue), []); // eslint-disable-line react-hooks/exhaustive-deps
246
+ return useMemo(() => observable(isFunction(initialValue) ? initialValue() : initialValue), []);
267
247
  }
268
248
 
269
249
  export { Computed, For, Memo, Show, Switch, enableLegendStateReact, useComputed, useObservable, useObserve };
package/react.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.mjs","sources":["../../src/react/flow.tsx","../../src/react/enableLegendStateReact.ts","../../src/react/useForceRender.ts","../../src/react/useComputed.ts","../../src/react/useObserve.ts","../../src/react/useObservable.ts"],"sourcesContent":[null,null,null,null,null,null],"names":["ReactInternals"],"mappings":"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"}
1
+ {"version":3,"file":"react.mjs","sources":["../../src/react/flow.tsx","../../src/react/enableLegendStateReact.ts","../../src/react/useComputed.ts","../../src/react/useObserve.ts","../../src/react/useObservable.ts"],"sourcesContent":[null,null,null,null,null],"names":["ReactVersion","ReactInternals"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ListenerFn, NodeValue, ObservableListenerDispose } from './observableInterfaces';
2
+ export declare class ObservablePrimitive<T = any> {
3
+ #private;
4
+ constructor(node: NodeValue);
5
+ get value(): T;
6
+ set value(value: T);
7
+ get(): T;
8
+ set(value: T | ((prev: T) => T)): this;
9
+ onChange(cb: ListenerFn<T>, track?: boolean | Symbol, noArgs?: boolean, markAndSweep?: boolean): ObservableListenerDispose;
10
+ obs(): ObservablePrimitive<T>;
11
+ }
@@ -0,0 +1,3 @@
1
+ import { NodeValue } from './observableInterfaces';
2
+ export declare function doNotify(node: NodeValue, value: any, path: (string | number)[], valueAtPath: any, prevAtPath: any, level: number, whenOptimizedOnlyIf?: boolean): void;
3
+ export declare function notify(node: NodeValue, value: any, prev: any, level: number, whenOptimizedOnlyIf?: boolean): void;
@@ -1,9 +1,9 @@
1
- import { ObservableObjectOrPrimitive, ObservableObjectOrPrimitiveDefault, ObservableObjectOrPrimitiveSafe, ObservablePrimitive } from './observableInterfaces';
2
- export declare function observable<T extends boolean>(value: T | Promise<T>, safe?: boolean): ObservablePrimitive<boolean>;
3
- export declare function observable<T extends string>(value: T | Promise<T>, safe?: boolean): ObservablePrimitive<string>;
4
- export declare function observable<T extends number>(value: T | Promise<T>, safe?: boolean): ObservablePrimitive<number>;
5
- export declare function observable<T extends object>(value: T | Promise<T>, safe: true): ObservableObjectOrPrimitiveSafe<T>;
6
- export declare function observable<T extends object>(value: T | Promise<T>, safe: false): ObservableObjectOrPrimitive<T>;
7
- export declare function observable<T extends object>(value: T | Promise<T>, safe?: undefined): ObservableObjectOrPrimitiveDefault<T>;
8
- export declare function observable<T extends boolean | string | number>(value: T | Promise<T>, safe?: boolean): ObservablePrimitive<T>;
9
- export declare function observable<T extends unknown>(value: T | Promise<T>, safe?: boolean): ObservablePrimitive<unknown>;
1
+ import { ObservableObjectOrArray, ObservableObjectOrArrayDefault, ObservableObjectOrArraySafe } from './observableInterfaces';
2
+ import { ObservablePrimitive } from './ObservablePrimitive';
3
+ export declare function observable(value: boolean | Promise<boolean>, safe?: boolean): ObservablePrimitive<boolean>;
4
+ export declare function observable(value: string | Promise<string>, safe?: boolean): ObservablePrimitive<string>;
5
+ export declare function observable(value: number | Promise<number>, safe?: boolean): ObservablePrimitive<number>;
6
+ export declare function observable<T extends object>(value: T | Promise<T>, safe: true): ObservableObjectOrArraySafe<T>;
7
+ export declare function observable<T extends object>(value: T | Promise<T>, safe: false): ObservableObjectOrArray<T>;
8
+ export declare function observable<T extends object>(value: T | Promise<T>, safe?: undefined): ObservableObjectOrArrayDefault<T>;
9
+ export declare function observable<T extends unknown>(value: T | Promise<T>, safe?: boolean): ObservableObjectOrArray<unknown>;
@@ -1,3 +1,4 @@
1
+ import type { ObservablePrimitive } from './ObservablePrimitive';
1
2
  export declare type ObservableEventType = 'change' | 'changeShallow' | 'equals' | 'hasValue' | 'true';
2
3
  export interface ObservableBaseFns<T> {
3
4
  get?(track?: boolean | Symbol): T;
@@ -39,7 +40,7 @@ export interface ObservableArrayOverride<T> extends Omit<Array<T>, 'forEach' | '
39
40
  */
40
41
  map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
41
42
  }
42
- export declare type ListenerFn<T = any> = (value: T, getPrevious: () => T, path: (string | number)[], valueAtPath: any, prevAtPath: any, node: NodeValue) => void;
43
+ export declare type ListenerFn<T = any> = (value?: T, getPrevious?: () => T, path?: (string | number)[], valueAtPath?: any, prevAtPath?: any, node?: NodeValue) => void;
43
44
  declare type PrimitiveKeys<T> = Pick<T, {
44
45
  [K in keyof T]-?: T[K] extends Primitive ? K : never;
45
46
  }[keyof T]>;
@@ -165,18 +166,20 @@ export declare type ObservableObjectSafe<T = any> = ObservableFnsRecursiveSafe<T
165
166
  export declare type ObservableObjectDefault<T = any> = ObservableFnsRecursiveDefault<T> & ObservableObjectFns<T>;
166
167
  export declare type ObservableChild<T = any> = [T] extends [Primitive] ? T & ObservablePrimitiveFns<T> : ObservableObject<T>;
167
168
  export declare type ObservableRef<T = any> = [T] extends [Primitive] ? ObservablePrimitiveFns<T> : ObservableObject<T>;
168
- export declare type ObservablePrimitive<T = any> = {
169
+ export declare type ObservablePrimitiveChild<T = any> = {
169
170
  value: T;
170
171
  } & ObservablePrimitiveFns<T>;
171
- export declare type ObservableObjectOrPrimitive<T> = [T] extends [Primitive] ? ObservablePrimitive<T> : T extends any[] ? ObservableArray<T> : ObservableObject<T>;
172
- export declare type ObservableObjectOrPrimitiveSafe<T> = [T] extends [Primitive] ? ObservablePrimitive<T> : T extends any[] ? ObservableArraySafe<T> : ObservableObjectSafe<T>;
173
- export declare type ObservableObjectOrPrimitiveDefault<T> = [T] extends [Primitive] ? ObservablePrimitive<T> : T extends any[] ? ObservableArrayDefault<T> : ObservableObjectDefault<T>;
174
- export declare type ObservableComputed<T = any> = ObservableComputedFns<T> & ObservableComputedFnsRecursive<T> & ([T] extends [Primitive] ? {
175
- readonly value: T;
176
- } : T);
177
- export declare type Observable<T = any> = [T] extends [Primitive] ? ObservablePrimitive<T> : ObservableObject<T>;
178
- export declare type ObservableReadable<T = any> = ObservableObject<T> | ObservableComputed<T> | ObservablePrimitive<T> | ObservableRef<T>;
179
- export declare type ObservableWriteable<T = any> = ObservableObject<T> | ObservablePrimitive<T> | ObservableRef<T>;
172
+ export declare type ObservableObjectOrArray<T> = T extends any[] ? ObservableArray<T> : ObservableObject<T>;
173
+ export declare type ObservableObjectOrArraySafe<T> = T extends any[] ? ObservableArraySafe<T> : ObservableObjectSafe<T>;
174
+ export declare type ObservableObjectOrArrayDefault<T> = T extends any[] ? ObservableArrayDefault<T> : ObservableObjectDefault<T>;
175
+ export declare type ObservableComputed<T = any> = ObservableComputedFns<T> & (T extends object ? ObservableComputedFnsRecursive<T> : Omit<ObservablePrimitive<T>, 'set'>);
176
+ export declare type Observable<T = any> = [T] extends [object] ? ObservableObject<T> : T extends boolean ? ObservablePrimitive<boolean> : T extends number ? ObservablePrimitive<number> : T extends string ? ObservablePrimitive<string> : ObservablePrimitive<T>;
177
+ export declare type ObservableReadable<T = any> = ObservableObject<T> | ObservableComputed<T> | ObservablePrimitiveChild<T> | ObservableRef<T>;
178
+ export interface ListenerInfo {
179
+ track: boolean | Symbol;
180
+ noArgs?: boolean;
181
+ listener: ListenerFn;
182
+ }
180
183
  export interface NodeValue {
181
184
  id: number;
182
185
  parent?: NodeValue;
@@ -184,10 +187,6 @@ export interface NodeValue {
184
187
  proxy?: object;
185
188
  key?: string | number;
186
189
  root: ObservableWrapper;
187
- listeners?: Set<{
188
- track: boolean | Symbol;
189
- noArgs?: boolean;
190
- listener: ListenerFn;
191
- }>;
190
+ listeners?: Set<ListenerInfo>;
192
191
  }
193
192
  export {};
package/src/observe.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { TrackingNode } from './observableInterfaces';
2
- export declare function setupTracking(nodes: Map<number, TrackingNode>, update: () => void, noArgs?: boolean): () => void;
2
+ export declare function setupTracking(nodes: Map<number, TrackingNode>, update: () => void, noArgs?: boolean, markAndSweep?: boolean): () => void;
3
3
  export declare function observe(run: () => void | (() => void)): () => void;
package/src/onChange.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  import { ListenerFn, NodeValue } from './observableInterfaces';
2
- export declare function onChange(node: NodeValue, callback: ListenerFn<any>, track?: boolean | Symbol, noArgs?: boolean): () => void;
2
+ export declare function onChange(node: NodeValue, callback: ListenerFn<any>, track?: boolean | Symbol, noArgs?: boolean, markAndSweep?: boolean): () => void;
@@ -1,4 +1,4 @@
1
- import { ReactElement, ReactNode } from 'react';
1
+ import { FC, ReactElement, ReactNode } from 'react';
2
2
  import type { NotPrimitive, ObservableObject } from '../observableInterfaces';
3
3
  export declare function Computed({ children }: {
4
4
  children: () => ReactNode;
@@ -9,6 +9,7 @@ export declare const Memo: import("react").NamedExoticComponent<{
9
9
  export declare function Show<T>(props: {
10
10
  if: NotPrimitive<T>;
11
11
  else?: ReactNode | (() => ReactNode);
12
+ wrap?: FC;
12
13
  children: ReactNode | ((value?: T) => ReactNode);
13
14
  }): ReactElement;
14
15
  export declare function Switch<T>({ value, children, }: {
@@ -1,6 +1,2 @@
1
- /**
2
- * Runs the specified selector, automatically tracking observable access and optionally re-rendering
3
- * @param selector A computation function
4
- * @param whenToRender When to re-render. false = never re-render, undefined = render if different, true = always render
5
- */
6
- export declare function useComputed<T>(selector: () => T, whenToRender?: boolean): T;
1
+ import { ObservableComputed } from '@legendapp/state';
2
+ export declare function useComputed<T>(compute: () => T): ObservableComputed<T>;
@@ -1,4 +1,4 @@
1
- import type { ObservableObjectOrPrimitive } from '../observableInterfaces';
1
+ import { ObservablePrimitive, ObservableObjectOrArray } 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
  *
@@ -6,4 +6,7 @@ import type { ObservableObjectOrPrimitive } from '../observableInterfaces';
6
6
  *
7
7
  * @see https://www.legendapp.com/dev/state/react/#useObservable
8
8
  */
9
- export declare function useObservable<T>(initialValue: T | (() => T)): ObservableObjectOrPrimitive<T>;
9
+ export declare function useObservable(initialValue: boolean | (() => boolean)): ObservablePrimitive<boolean>;
10
+ export declare function useObservable(initialValue: string | (() => string)): ObservablePrimitive<string>;
11
+ export declare function useObservable(initialValue: number | (() => number)): ObservablePrimitive<number>;
12
+ export declare function useObservable<T>(initialValue: T | (() => T)): ObservableObjectOrArray<T>;
@@ -1 +1 @@
1
- export declare function useObserve(selector: () => void): void;
1
+ export declare function useObserve(selector: () => void, deps?: any[]): void;
@@ -0,0 +1 @@
1
+ export declare function useSelector<T>(selector: () => T): T;
@@ -1,13 +1,13 @@
1
1
  import { CSSProperties, DetailedHTMLProps, InputHTMLAttributes, ReactElement, SelectHTMLAttributes, TextareaHTMLAttributes } from 'react';
2
- import type { NotPrimitive, ObservableWriteable, Primitive } from '../observableInterfaces';
2
+ import type { NotPrimitive, ObservableFns, Primitive } from '../observableInterfaces';
3
3
  declare type Props<TValue, TProps, TBind> = Omit<TProps, 'className' | 'style'> & {
4
4
  className?: string | ((value: TValue) => string);
5
5
  style?: CSSProperties | ((value: TValue) => CSSProperties);
6
- bind?: ObservableWriteable<TValue> & NotPrimitive<TBind>;
6
+ bind?: ObservableFns<TValue> & NotPrimitive<TBind>;
7
7
  };
8
8
  export declare namespace Bindable {
9
- const input: <TBind extends ObservableWriteable<any>>(props: Props<Primitive, DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, TBind>) => ReactElement<any, string | import("react").JSXElementConstructor<any>>;
10
- const textarea: <TBind extends ObservableWriteable<any>>(props: Props<string, DetailedHTMLProps<TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, TBind>) => ReactElement<any, string | import("react").JSXElementConstructor<any>>;
11
- const select: <TBind extends ObservableWriteable<any>>(props: Props<string, DetailedHTMLProps<SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>, TBind>) => ReactElement<any, string | import("react").JSXElementConstructor<any>>;
9
+ const input: <TBind extends ObservableFns<any>>(props: Props<Primitive, DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, TBind>) => ReactElement<any, string | import("react").JSXElementConstructor<any>>;
10
+ const textarea: <TBind extends ObservableFns<any>>(props: Props<string, DetailedHTMLProps<TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, TBind>) => ReactElement<any, string | import("react").JSXElementConstructor<any>>;
11
+ const select: <TBind extends ObservableFns<any>>(props: Props<string, DetailedHTMLProps<SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>, TBind>) => ReactElement<any, string | import("react").JSXElementConstructor<any>>;
12
12
  }
13
13
  export {};
@@ -1,8 +1,8 @@
1
1
  import { ReactElement } from 'react';
2
2
  import { StyleProp, SwitchProps, TextInputProps, TextStyle, ViewStyle } from 'react-native';
3
- import type { NotPrimitive, ObservableFns, ObservableWriteable, Primitive } from '../observableInterfaces';
3
+ import type { NotPrimitive, ObservableFns, Primitive } from '../observableInterfaces';
4
4
  declare type Props<TValue, TStyle, TProps, TBind> = Omit<TProps, 'style'> & {
5
- bind?: ObservableWriteable<TValue> & NotPrimitive<TBind>;
5
+ bind?: ObservableFns<TValue> & NotPrimitive<TBind>;
6
6
  style?: StyleProp<TStyle> | ((value: TValue) => StyleProp<TStyle>);
7
7
  };
8
8
  export declare namespace Bindable {
package/src/tracking.d.ts CHANGED
@@ -4,9 +4,12 @@ export declare const tracking: {
4
4
  nodes: Map<number, TrackingNode>;
5
5
  listeners: (nodes: Map<number, TrackingNode>) => void;
6
6
  updates: (fn: () => void) => () => void;
7
+ callbacksMarked: Set<() => void>;
7
8
  };
8
9
  export declare function beginTracking(): Map<number, TrackingNode>;
9
10
  export declare function endTracking(prevNodes: Map<number, TrackingNode>): void;
10
11
  export declare function updateTracking(node: NodeValue, track?: boolean | Symbol): void;
11
12
  export declare function untrack(node: NodeValue): void;
12
13
  export declare function checkTracking(node: NodeValue, track: boolean | Symbol): void;
14
+ export declare function scheduleSweep(): void;
15
+ export declare function sweep(): void;
package/trace.js CHANGED
@@ -39,7 +39,7 @@ function onChange(name, updateFn, value, getPrevious, path, valueAtPath, prevAtP
39
39
  console.log(`[legend-state] Rendering ${name ? name + ' ' : ''}because "${getNodePath(node)}" changed:
40
40
  from: ${JSON.stringify(getPrevious())}
41
41
  to: ${JSON.stringify(value)}`);
42
- updateFn();
42
+ return updateFn();
43
43
  }
44
44
 
45
45
  exports.traceListeners = traceListeners;