@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/index.d.ts +1 -0
- package/index.js +262 -133
- package/index.js.map +1 -1
- package/index.mjs +260 -134
- package/index.mjs.map +1 -1
- package/package.json +1 -1
- package/react-components.js.map +1 -1
- package/react-components.mjs.map +1 -1
- package/react.js +131 -151
- package/react.js.map +1 -1
- package/react.mjs +133 -153
- package/react.mjs.map +1 -1
- package/src/ObservablePrimitive.d.ts +11 -0
- package/src/notify.d.ts +3 -0
- package/src/observable.d.ts +9 -9
- package/src/observableInterfaces.d.ts +15 -16
- package/src/observe.d.ts +1 -1
- package/src/onChange.d.ts +1 -1
- package/src/react/flow.d.ts +2 -1
- package/src/react/useComputed.d.ts +2 -6
- package/src/react/useObservable.d.ts +5 -2
- package/src/react/useObserve.d.ts +1 -1
- package/src/react/useSelector.d.ts +1 -0
- package/src/react-components/react-components.d.ts +5 -5
- package/src/react-native-components/rn-components.d.ts +2 -2
- package/src/tracking.d.ts +3 -0
- package/trace.js +1 -1
- package/trace.js.map +1 -1
- package/trace.mjs +1 -1
- package/trace.mjs.map +1 -1
package/react.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { isFunction, Tracking, isObservable, updateTracking, getNodeValue, extraPrimitiveProps, tracking, beginTracking, setupTracking, endTracking,
|
|
2
|
-
import { memo, useRef, useMemo,
|
|
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
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
tracking.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
127
|
-
dispose
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
}
|
|
184
|
+
else {
|
|
185
|
+
// Return dispose to cleanup before each render or on unmount
|
|
186
|
+
dispatcher.useEffect(() => dispose);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
131
189
|
}
|
|
132
|
-
|
|
133
|
-
//
|
|
134
|
-
|
|
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
|
-
|
|
138
|
-
//
|
|
139
|
-
|
|
140
|
-
if (
|
|
141
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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
|
|
173
|
-
|
|
174
|
-
return useCallback(() => forceRender(), []);
|
|
233
|
+
function useComputed(compute) {
|
|
234
|
+
return useMemo(() => computed(compute), []);
|
|
175
235
|
}
|
|
176
236
|
|
|
177
|
-
|
|
178
|
-
|
|
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
|
-
|
|
253
|
-
|
|
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), []);
|
|
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/
|
|
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
|
+
}
|
package/src/notify.d.ts
ADDED
|
@@ -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;
|
package/src/observable.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare function observable
|
|
4
|
-
export declare function observable
|
|
5
|
-
export declare function observable
|
|
6
|
-
export declare function observable<T extends object>(value: T | Promise<T>, safe:
|
|
7
|
-
export declare function observable<T extends object>(value: T | Promise<T>, safe
|
|
8
|
-
export declare function observable<T extends
|
|
9
|
-
export declare function observable<T extends unknown>(value: T | Promise<T>, safe?: boolean):
|
|
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
|
|
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
|
|
169
|
+
export declare type ObservablePrimitiveChild<T = any> = {
|
|
169
170
|
value: T;
|
|
170
171
|
} & ObservablePrimitiveFns<T>;
|
|
171
|
-
export declare type
|
|
172
|
-
export declare type
|
|
173
|
-
export declare type
|
|
174
|
-
export declare type ObservableComputed<T = any> = ObservableComputedFns<T> & ObservableComputedFnsRecursive<T>
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
export
|
|
178
|
-
|
|
179
|
-
|
|
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;
|
package/src/react/flow.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
|
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,
|
|
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?:
|
|
6
|
+
bind?: ObservableFns<TValue> & NotPrimitive<TBind>;
|
|
7
7
|
};
|
|
8
8
|
export declare namespace Bindable {
|
|
9
|
-
const input: <TBind extends
|
|
10
|
-
const textarea: <TBind extends
|
|
11
|
-
const select: <TBind extends
|
|
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,
|
|
3
|
+
import type { NotPrimitive, ObservableFns, Primitive } from '../observableInterfaces';
|
|
4
4
|
declare type Props<TValue, TStyle, TProps, TBind> = Omit<TProps, 'style'> & {
|
|
5
|
-
bind?:
|
|
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;
|