@legendapp/state 3.0.0-beta.3 → 3.0.0-beta.30
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/.DS_Store +0 -0
- package/config/enableReactComponents.js +3 -1
- package/config/enableReactComponents.mjs +3 -1
- package/config/enableReactTracking.d.mts +2 -1
- package/config/enableReactTracking.d.ts +2 -1
- package/config/enableReactTracking.js +32 -13
- package/config/enableReactTracking.mjs +32 -13
- package/index.d.mts +33 -4
- package/index.d.ts +33 -4
- package/index.js +191 -29
- package/index.mjs +191 -29
- package/package.json +35 -1
- package/persist-plugins/async-storage.js +17 -9
- package/persist-plugins/async-storage.mjs +17 -9
- package/persist-plugins/expo-sqlite.d.mts +19 -0
- package/persist-plugins/expo-sqlite.d.ts +19 -0
- package/persist-plugins/expo-sqlite.js +72 -0
- package/persist-plugins/expo-sqlite.mjs +69 -0
- package/react-native.d.mts +4 -0
- package/react-native.d.ts +4 -0
- package/react-native.js +53 -0
- package/react-native.mjs +40 -0
- package/react-reactive/Components.d.mts +19 -0
- package/react-reactive/Components.d.ts +19 -0
- package/react-reactive/Components.js +53 -0
- package/react-reactive/Components.mjs +40 -0
- package/react-reactive/enableReactComponents.d.mts +3 -2
- package/react-reactive/enableReactComponents.d.ts +3 -2
- package/react-reactive/enableReactComponents.js +10 -3
- package/react-reactive/enableReactComponents.mjs +10 -3
- package/react-reactive/enableReactNativeComponents.d.mts +3 -20
- package/react-reactive/enableReactNativeComponents.d.ts +3 -20
- package/react-reactive/enableReactNativeComponents.js +8 -3
- package/react-reactive/enableReactNativeComponents.mjs +8 -3
- package/react-reactive/enableReactive.js +10 -3
- package/react-reactive/enableReactive.mjs +10 -3
- package/react-reactive/enableReactive.native.js +8 -3
- package/react-reactive/enableReactive.native.mjs +8 -3
- package/react-reactive/enableReactive.web.js +8 -3
- package/react-reactive/enableReactive.web.mjs +8 -3
- package/react-web.d.mts +6 -0
- package/react-web.d.ts +6 -0
- package/react-web.js +39 -0
- package/react-web.mjs +37 -0
- package/react.d.mts +41 -21
- package/react.d.ts +41 -21
- package/react.js +36 -23
- package/react.mjs +37 -25
- package/sync-plugins/crud.d.mts +24 -9
- package/sync-plugins/crud.d.ts +24 -9
- package/sync-plugins/crud.js +250 -116
- package/sync-plugins/crud.mjs +251 -117
- package/sync-plugins/firebase.d.mts +7 -3
- package/sync-plugins/firebase.d.ts +7 -3
- package/sync-plugins/firebase.js +4 -2
- package/sync-plugins/firebase.mjs +4 -2
- package/sync-plugins/keel.d.mts +12 -13
- package/sync-plugins/keel.d.ts +12 -13
- package/sync-plugins/keel.js +60 -52
- package/sync-plugins/keel.mjs +61 -48
- package/sync-plugins/supabase.d.mts +7 -3
- package/sync-plugins/supabase.d.ts +7 -3
- package/sync-plugins/supabase.js +90 -33
- package/sync-plugins/supabase.mjs +91 -34
- package/sync-plugins/tanstack-query.d.mts +3 -3
- package/sync-plugins/tanstack-query.d.ts +3 -3
- package/sync.d.mts +16 -8
- package/sync.d.ts +16 -8
- package/sync.js +324 -215
- package/sync.mjs +323 -215
- package/trace.js +5 -6
- package/trace.mjs +5 -6
- package/types/reactive-native.d.ts +19 -0
- package/types/reactive-web.d.ts +7 -0
package/.DS_Store
CHANGED
|
Binary file
|
|
@@ -4,7 +4,9 @@ var react = require('@legendapp/state/react');
|
|
|
4
4
|
|
|
5
5
|
// src/config/enableReactComponents.ts
|
|
6
6
|
function enableReactComponents() {
|
|
7
|
-
const bindInfo = {
|
|
7
|
+
const bindInfo = {
|
|
8
|
+
value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" }
|
|
9
|
+
};
|
|
8
10
|
const bindInfoInput = Object.assign(
|
|
9
11
|
{ checked: { handler: "onChange", getValue: (e) => e.target.checked } },
|
|
10
12
|
bindInfo
|
|
@@ -2,7 +2,9 @@ import { configureReactive } from '@legendapp/state/react';
|
|
|
2
2
|
|
|
3
3
|
// src/config/enableReactComponents.ts
|
|
4
4
|
function enableReactComponents() {
|
|
5
|
-
const bindInfo = {
|
|
5
|
+
const bindInfo = {
|
|
6
|
+
value: { handler: "onChange", getValue: (e) => e.target.value, defaultValue: "" }
|
|
7
|
+
};
|
|
6
8
|
const bindInfoInput = Object.assign(
|
|
7
9
|
{ checked: { handler: "onChange", getValue: (e) => e.target.checked } },
|
|
8
10
|
bindInfo
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
interface ReactTrackingOptions {
|
|
2
2
|
auto?: boolean;
|
|
3
3
|
warnUnobserved?: boolean;
|
|
4
|
+
warnMissingUse?: boolean;
|
|
4
5
|
}
|
|
5
|
-
declare function enableReactTracking({ auto, warnUnobserved }: ReactTrackingOptions): void;
|
|
6
|
+
declare function enableReactTracking({ auto, warnUnobserved, warnMissingUse }: ReactTrackingOptions): void;
|
|
6
7
|
|
|
7
8
|
export { enableReactTracking };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
interface ReactTrackingOptions {
|
|
2
2
|
auto?: boolean;
|
|
3
3
|
warnUnobserved?: boolean;
|
|
4
|
+
warnMissingUse?: boolean;
|
|
4
5
|
}
|
|
5
|
-
declare function enableReactTracking({ auto, warnUnobserved }: ReactTrackingOptions): void;
|
|
6
|
+
declare function enableReactTracking({ auto, warnUnobserved, warnMissingUse }: ReactTrackingOptions): void;
|
|
6
7
|
|
|
7
8
|
export { enableReactTracking };
|
|
@@ -6,32 +6,51 @@ var react$1 = require('@legendapp/state/react');
|
|
|
6
6
|
var react = require('react');
|
|
7
7
|
|
|
8
8
|
// src/config/enableReactTracking.ts
|
|
9
|
-
function enableReactTracking({ auto, warnUnobserved }) {
|
|
9
|
+
function enableReactTracking({ auto, warnUnobserved, warnMissingUse }) {
|
|
10
10
|
const { get } = state.internal;
|
|
11
|
-
if (auto || process.env.NODE_ENV === "development" && warnUnobserved) {
|
|
11
|
+
if (auto || process.env.NODE_ENV === "development" && (warnUnobserved || warnMissingUse)) {
|
|
12
12
|
const ReactRenderContext = react.createContext(0);
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return true;
|
|
20
|
-
}
|
|
21
|
-
} catch (e) {
|
|
13
|
+
const isInRender = () => {
|
|
14
|
+
try {
|
|
15
|
+
const dispatcher = react.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher.current;
|
|
16
|
+
if (dispatcher) {
|
|
17
|
+
react.useContext(ReactRenderContext);
|
|
18
|
+
return true;
|
|
22
19
|
}
|
|
20
|
+
} catch (e) {
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
};
|
|
24
|
+
const isObserved = () => {
|
|
25
|
+
return !!state.tracking.current;
|
|
26
|
+
};
|
|
27
|
+
const needsSelector = () => {
|
|
28
|
+
if (!isObserved()) {
|
|
29
|
+
return isInRender();
|
|
23
30
|
}
|
|
24
31
|
return false;
|
|
25
32
|
};
|
|
26
33
|
configureLegendState.configureLegendState({
|
|
27
34
|
observableFunctions: {
|
|
28
35
|
get: (node, options) => {
|
|
29
|
-
if (
|
|
36
|
+
if (process.env.NODE_ENV === "development" && warnMissingUse) {
|
|
37
|
+
if (isInRender()) {
|
|
38
|
+
if (isObserved()) {
|
|
39
|
+
console.warn(
|
|
40
|
+
"[legend-state] Detected a `get()` call in an observer component. It is recommended to use the `use$` hook instead to be compatible with React Compiler: https://legendapp.com/open-source/state/v3/react/react-api/#use$"
|
|
41
|
+
);
|
|
42
|
+
} else {
|
|
43
|
+
console.warn(
|
|
44
|
+
"[legend-state] Detected a `get()` call in a component. You likely want to use the `use$` hook to be reactive to it changing, or change `get()` to `peek()` to get the value without tracking: https://legendapp.com/open-source/state/v3/react/react-api/#use$"
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
} else if (needsSelector()) {
|
|
30
49
|
if (auto) {
|
|
31
50
|
return react$1.useSelector(() => get(node, options), state.isObject(options) ? options : void 0);
|
|
32
51
|
} else if (process.env.NODE_ENV === "development" && warnUnobserved) {
|
|
33
52
|
console.warn(
|
|
34
|
-
"[legend-state] Detected a `get()` call in an unobserved component. You may want to wrap it in observer: https://legendapp.com/open-source/state/react-api/#observer
|
|
53
|
+
"[legend-state] Detected a `get()` call in an unobserved component. You may want to wrap it in observer: https://legendapp.com/open-source/state/v3/react/react-api/#observer"
|
|
35
54
|
);
|
|
36
55
|
}
|
|
37
56
|
}
|
|
@@ -4,32 +4,51 @@ import { useSelector } from '@legendapp/state/react';
|
|
|
4
4
|
import { createContext, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, useContext } from 'react';
|
|
5
5
|
|
|
6
6
|
// src/config/enableReactTracking.ts
|
|
7
|
-
function enableReactTracking({ auto, warnUnobserved }) {
|
|
7
|
+
function enableReactTracking({ auto, warnUnobserved, warnMissingUse }) {
|
|
8
8
|
const { get } = internal;
|
|
9
|
-
if (auto || process.env.NODE_ENV === "development" && warnUnobserved) {
|
|
9
|
+
if (auto || process.env.NODE_ENV === "development" && (warnUnobserved || warnMissingUse)) {
|
|
10
10
|
const ReactRenderContext = createContext(0);
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
} catch (e) {
|
|
11
|
+
const isInRender = () => {
|
|
12
|
+
try {
|
|
13
|
+
const dispatcher = __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher.current;
|
|
14
|
+
if (dispatcher) {
|
|
15
|
+
useContext(ReactRenderContext);
|
|
16
|
+
return true;
|
|
20
17
|
}
|
|
18
|
+
} catch (e) {
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
};
|
|
22
|
+
const isObserved = () => {
|
|
23
|
+
return !!tracking.current;
|
|
24
|
+
};
|
|
25
|
+
const needsSelector = () => {
|
|
26
|
+
if (!isObserved()) {
|
|
27
|
+
return isInRender();
|
|
21
28
|
}
|
|
22
29
|
return false;
|
|
23
30
|
};
|
|
24
31
|
configureLegendState({
|
|
25
32
|
observableFunctions: {
|
|
26
33
|
get: (node, options) => {
|
|
27
|
-
if (
|
|
34
|
+
if (process.env.NODE_ENV === "development" && warnMissingUse) {
|
|
35
|
+
if (isInRender()) {
|
|
36
|
+
if (isObserved()) {
|
|
37
|
+
console.warn(
|
|
38
|
+
"[legend-state] Detected a `get()` call in an observer component. It is recommended to use the `use$` hook instead to be compatible with React Compiler: https://legendapp.com/open-source/state/v3/react/react-api/#use$"
|
|
39
|
+
);
|
|
40
|
+
} else {
|
|
41
|
+
console.warn(
|
|
42
|
+
"[legend-state] Detected a `get()` call in a component. You likely want to use the `use$` hook to be reactive to it changing, or change `get()` to `peek()` to get the value without tracking: https://legendapp.com/open-source/state/v3/react/react-api/#use$"
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
} else if (needsSelector()) {
|
|
28
47
|
if (auto) {
|
|
29
48
|
return useSelector(() => get(node, options), isObject(options) ? options : void 0);
|
|
30
49
|
} else if (process.env.NODE_ENV === "development" && warnUnobserved) {
|
|
31
50
|
console.warn(
|
|
32
|
-
"[legend-state] Detected a `get()` call in an unobserved component. You may want to wrap it in observer: https://legendapp.com/open-source/state/react-api/#observer
|
|
51
|
+
"[legend-state] Detected a `get()` call in an unobserved component. You may want to wrap it in observer: https://legendapp.com/open-source/state/v3/react/react-api/#observer"
|
|
33
52
|
);
|
|
34
53
|
}
|
|
35
54
|
}
|
package/index.d.mts
CHANGED
|
@@ -108,14 +108,16 @@ declare function getNode(value$: ObservableParam): NodeInfo;
|
|
|
108
108
|
declare function setNodeValue(node: NodeInfo, newValue: any): {
|
|
109
109
|
prevValue: any;
|
|
110
110
|
newValue: any;
|
|
111
|
+
parentValue: any;
|
|
111
112
|
};
|
|
112
113
|
declare function getNodeValue(node: NodeInfo): any;
|
|
113
114
|
declare function ensureNodeValue(node: NodeInfo): any;
|
|
114
115
|
declare function findIDKey(obj: unknown | undefined, node: NodeInfo): string | ((value: any) => string) | undefined;
|
|
116
|
+
declare function getKeys(obj: Record<any, any> | Array<any> | undefined, isArr: boolean, isMap: boolean, isSet: boolean): string[];
|
|
115
117
|
|
|
116
118
|
type TrackingType = undefined | true | symbol;
|
|
117
119
|
interface GetOptions {
|
|
118
|
-
shallow
|
|
120
|
+
shallow?: boolean;
|
|
119
121
|
}
|
|
120
122
|
type OpaqueObject<T> = T & {
|
|
121
123
|
[symbolOpaque]: true;
|
|
@@ -152,6 +154,7 @@ type ObservableListenerDispose = () => void;
|
|
|
152
154
|
interface ObservableRoot {
|
|
153
155
|
_: any;
|
|
154
156
|
set?: (value: any) => void;
|
|
157
|
+
isLoadingLocal?: boolean;
|
|
155
158
|
}
|
|
156
159
|
type Primitive = boolean | string | number | Date;
|
|
157
160
|
type NotPrimitive<T> = T extends Primitive ? never : T;
|
|
@@ -187,6 +190,7 @@ interface BaseNodeInfo {
|
|
|
187
190
|
numListenersRecursive: number;
|
|
188
191
|
state?: Observable<ObservableSyncState>;
|
|
189
192
|
activated?: boolean;
|
|
193
|
+
isPlain?: boolean;
|
|
190
194
|
recursivelyAutoActivated?: boolean;
|
|
191
195
|
activationState?: LinkedOptions & {
|
|
192
196
|
onError?: () => void;
|
|
@@ -246,8 +250,13 @@ interface UpdateFnParams<T = any> {
|
|
|
246
250
|
value: T;
|
|
247
251
|
mode?: GetMode;
|
|
248
252
|
lastSync?: number | undefined;
|
|
253
|
+
changes?: Change[];
|
|
254
|
+
}
|
|
255
|
+
interface UpdateSetFnParams<T = any> extends UpdateFnParams<T> {
|
|
256
|
+
lastSync?: never;
|
|
249
257
|
}
|
|
250
258
|
type UpdateFn<T = any> = (params: UpdateFnParams<T>) => void;
|
|
259
|
+
type UpdateSetFn<T = any> = (params: UpdateSetFnParams<T>) => void;
|
|
251
260
|
type Linked<T> = T;
|
|
252
261
|
interface ObserveOptions {
|
|
253
262
|
immediate?: boolean;
|
|
@@ -288,6 +297,7 @@ interface RetryOptions {
|
|
|
288
297
|
declare const ObservableHint: {
|
|
289
298
|
opaque: <T extends object>(value: T) => OpaqueObject<T>;
|
|
290
299
|
plain: <T extends object>(value: T) => PlainObject<T>;
|
|
300
|
+
function: <T extends object>(value: T) => PlainObject<T>;
|
|
291
301
|
};
|
|
292
302
|
|
|
293
303
|
declare function getProxy(node: NodeInfo, p?: string, asFunction?: Function): Observable;
|
|
@@ -307,7 +317,7 @@ declare function computed<T, T2 = T>(get: (() => RecursiveValueOrFunction<T>) |
|
|
|
307
317
|
|
|
308
318
|
declare function event(): ObservableEvent;
|
|
309
319
|
|
|
310
|
-
declare function computeSelector<T>(selector: Selector<T>, e?: ObserveEvent<T>, retainObservable?: boolean): T;
|
|
320
|
+
declare function computeSelector<T>(selector: Selector<T>, getOptions?: GetOptions, e?: ObserveEvent<T>, retainObservable?: boolean): T;
|
|
311
321
|
declare function getObservableIndex(value$: ObservableParam): number;
|
|
312
322
|
declare function opaqueObject<T extends object>(value: T): OpaqueObject<T>;
|
|
313
323
|
declare function getValueAtPath(obj: Record<string, any>, path: string[]): any;
|
|
@@ -357,7 +367,7 @@ declare function proxy<T>(get: (key: string) => T): Observable<Record<string, T>
|
|
|
357
367
|
|
|
358
368
|
declare function syncState(obs: ObservableParam): Observable<ObservableSyncState>;
|
|
359
369
|
|
|
360
|
-
declare function trackSelector<T>(selector: Selector<T>, update: (params: ListenerParams) => void, observeEvent?: ObserveEvent<T>, observeOptions?: ObserveOptions, createResubscribe?: boolean): {
|
|
370
|
+
declare function trackSelector<T>(selector: Selector<T>, update: (params: ListenerParams) => void, getOptions?: GetOptions, observeEvent?: ObserveEvent<T>, observeOptions?: ObserveOptions, createResubscribe?: boolean): {
|
|
361
371
|
nodes: Map<NodeInfo, TrackingNode> | undefined;
|
|
362
372
|
value: T;
|
|
363
373
|
dispose: (() => void) | undefined;
|
|
@@ -381,6 +391,23 @@ interface ObservablePrimitiveState {
|
|
|
381
391
|
}
|
|
382
392
|
declare function ObservablePrimitiveClass<T>(this: ObservablePrimitive<T> & ObservablePrimitiveState, node: NodeInfo): void;
|
|
383
393
|
|
|
394
|
+
type MiddlewareEventType = 'listener-added' | 'listener-removed' | 'listeners-cleared';
|
|
395
|
+
interface MiddlewareEvent {
|
|
396
|
+
type: MiddlewareEventType;
|
|
397
|
+
node: NodeInfo;
|
|
398
|
+
listener?: NodeListener;
|
|
399
|
+
timestamp: number;
|
|
400
|
+
}
|
|
401
|
+
type MiddlewareHandler = (event: MiddlewareEvent) => void;
|
|
402
|
+
/**
|
|
403
|
+
* Register a middleware handler for a specific node and event type
|
|
404
|
+
* @param node The node to register the middleware handler for
|
|
405
|
+
* @param type The event type to handle
|
|
406
|
+
* @param handler The middleware handler function
|
|
407
|
+
* @returns A function to remove the handler
|
|
408
|
+
*/
|
|
409
|
+
declare function registerMiddleware(node: NodeInfo, type: MiddlewareEventType, handler: MiddlewareHandler): () => void;
|
|
410
|
+
|
|
384
411
|
declare const internal: {
|
|
385
412
|
createPreviousHandler: typeof createPreviousHandler;
|
|
386
413
|
clone: typeof clone;
|
|
@@ -388,6 +415,7 @@ declare const internal: {
|
|
|
388
415
|
ensureNodeValue: typeof ensureNodeValue;
|
|
389
416
|
findIDKey: typeof findIDKey;
|
|
390
417
|
get: typeof get;
|
|
418
|
+
getKeys: typeof getKeys;
|
|
391
419
|
getNode: typeof getNode;
|
|
392
420
|
getNodeValue: typeof getNodeValue;
|
|
393
421
|
getPathType: typeof getPathType;
|
|
@@ -414,6 +442,7 @@ declare const internal: {
|
|
|
414
442
|
observableFns: Map<string, (node: NodeInfo, ...args: any[]) => any>;
|
|
415
443
|
optimized: symbol;
|
|
416
444
|
peek: typeof peek;
|
|
445
|
+
registerMiddleware: typeof registerMiddleware;
|
|
417
446
|
safeParse: typeof safeParse;
|
|
418
447
|
safeStringify: typeof safeStringify;
|
|
419
448
|
set: typeof set;
|
|
@@ -426,4 +455,4 @@ declare const internal: {
|
|
|
426
455
|
};
|
|
427
456
|
};
|
|
428
457
|
|
|
429
|
-
export { type ArrayValue, type Change, type ChildNodeInfo, type ClassConstructor, type GetMode, type GetOptions, type ImmutableObservableBase, type Linked, type LinkedOptions, type ListenerFn, type ListenerParams, type NodeInfo, type NodeListener, type NotPrimitive, type Observable, type ObservableBoolean, type ObservableEvent, ObservableHint, type ObservableListenerDispose, type ObservableMap, 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 PlainObject, type Primitive, type RecordValue, type RecursiveValueOrFunction, type RemoveObservables, type RetryOptions, type RootNodeInfo, type Selector, type SetParams, type TrackingNode, type TrackingState, type TrackingType, type TypeAtPath, type UpdateFn, type UpdateFnParams, type WaitForSet, type WaitForSetFnParams, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPlainObject, isPrimitive, isPromise, isSet, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
|
|
458
|
+
export { type ArrayValue, type Change, type ChildNodeInfo, type ClassConstructor, type GetMode, type GetOptions, type ImmutableObservableBase, type Linked, type LinkedOptions, type ListenerFn, type ListenerParams, type NodeInfo, type NodeListener, type NotPrimitive, type Observable, type ObservableBoolean, type ObservableEvent, ObservableHint, type ObservableListenerDispose, type ObservableMap, 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 PlainObject, type Primitive, type RecordValue, type RecursiveValueOrFunction, type RemoveObservables, type RetryOptions, type RootNodeInfo, type Selector, type SetParams, type TrackingNode, type TrackingState, type TrackingType, type TypeAtPath, type UpdateFn, type UpdateFnParams, type UpdateSetFn, type UpdateSetFnParams, type WaitForSet, type WaitForSetFnParams, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPlainObject, isPrimitive, isPromise, isSet, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
|
package/index.d.ts
CHANGED
|
@@ -108,14 +108,16 @@ declare function getNode(value$: ObservableParam): NodeInfo;
|
|
|
108
108
|
declare function setNodeValue(node: NodeInfo, newValue: any): {
|
|
109
109
|
prevValue: any;
|
|
110
110
|
newValue: any;
|
|
111
|
+
parentValue: any;
|
|
111
112
|
};
|
|
112
113
|
declare function getNodeValue(node: NodeInfo): any;
|
|
113
114
|
declare function ensureNodeValue(node: NodeInfo): any;
|
|
114
115
|
declare function findIDKey(obj: unknown | undefined, node: NodeInfo): string | ((value: any) => string) | undefined;
|
|
116
|
+
declare function getKeys(obj: Record<any, any> | Array<any> | undefined, isArr: boolean, isMap: boolean, isSet: boolean): string[];
|
|
115
117
|
|
|
116
118
|
type TrackingType = undefined | true | symbol;
|
|
117
119
|
interface GetOptions {
|
|
118
|
-
shallow
|
|
120
|
+
shallow?: boolean;
|
|
119
121
|
}
|
|
120
122
|
type OpaqueObject<T> = T & {
|
|
121
123
|
[symbolOpaque]: true;
|
|
@@ -152,6 +154,7 @@ type ObservableListenerDispose = () => void;
|
|
|
152
154
|
interface ObservableRoot {
|
|
153
155
|
_: any;
|
|
154
156
|
set?: (value: any) => void;
|
|
157
|
+
isLoadingLocal?: boolean;
|
|
155
158
|
}
|
|
156
159
|
type Primitive = boolean | string | number | Date;
|
|
157
160
|
type NotPrimitive<T> = T extends Primitive ? never : T;
|
|
@@ -187,6 +190,7 @@ interface BaseNodeInfo {
|
|
|
187
190
|
numListenersRecursive: number;
|
|
188
191
|
state?: Observable<ObservableSyncState>;
|
|
189
192
|
activated?: boolean;
|
|
193
|
+
isPlain?: boolean;
|
|
190
194
|
recursivelyAutoActivated?: boolean;
|
|
191
195
|
activationState?: LinkedOptions & {
|
|
192
196
|
onError?: () => void;
|
|
@@ -246,8 +250,13 @@ interface UpdateFnParams<T = any> {
|
|
|
246
250
|
value: T;
|
|
247
251
|
mode?: GetMode;
|
|
248
252
|
lastSync?: number | undefined;
|
|
253
|
+
changes?: Change[];
|
|
254
|
+
}
|
|
255
|
+
interface UpdateSetFnParams<T = any> extends UpdateFnParams<T> {
|
|
256
|
+
lastSync?: never;
|
|
249
257
|
}
|
|
250
258
|
type UpdateFn<T = any> = (params: UpdateFnParams<T>) => void;
|
|
259
|
+
type UpdateSetFn<T = any> = (params: UpdateSetFnParams<T>) => void;
|
|
251
260
|
type Linked<T> = T;
|
|
252
261
|
interface ObserveOptions {
|
|
253
262
|
immediate?: boolean;
|
|
@@ -288,6 +297,7 @@ interface RetryOptions {
|
|
|
288
297
|
declare const ObservableHint: {
|
|
289
298
|
opaque: <T extends object>(value: T) => OpaqueObject<T>;
|
|
290
299
|
plain: <T extends object>(value: T) => PlainObject<T>;
|
|
300
|
+
function: <T extends object>(value: T) => PlainObject<T>;
|
|
291
301
|
};
|
|
292
302
|
|
|
293
303
|
declare function getProxy(node: NodeInfo, p?: string, asFunction?: Function): Observable;
|
|
@@ -307,7 +317,7 @@ declare function computed<T, T2 = T>(get: (() => RecursiveValueOrFunction<T>) |
|
|
|
307
317
|
|
|
308
318
|
declare function event(): ObservableEvent;
|
|
309
319
|
|
|
310
|
-
declare function computeSelector<T>(selector: Selector<T>, e?: ObserveEvent<T>, retainObservable?: boolean): T;
|
|
320
|
+
declare function computeSelector<T>(selector: Selector<T>, getOptions?: GetOptions, e?: ObserveEvent<T>, retainObservable?: boolean): T;
|
|
311
321
|
declare function getObservableIndex(value$: ObservableParam): number;
|
|
312
322
|
declare function opaqueObject<T extends object>(value: T): OpaqueObject<T>;
|
|
313
323
|
declare function getValueAtPath(obj: Record<string, any>, path: string[]): any;
|
|
@@ -357,7 +367,7 @@ declare function proxy<T>(get: (key: string) => T): Observable<Record<string, T>
|
|
|
357
367
|
|
|
358
368
|
declare function syncState(obs: ObservableParam): Observable<ObservableSyncState>;
|
|
359
369
|
|
|
360
|
-
declare function trackSelector<T>(selector: Selector<T>, update: (params: ListenerParams) => void, observeEvent?: ObserveEvent<T>, observeOptions?: ObserveOptions, createResubscribe?: boolean): {
|
|
370
|
+
declare function trackSelector<T>(selector: Selector<T>, update: (params: ListenerParams) => void, getOptions?: GetOptions, observeEvent?: ObserveEvent<T>, observeOptions?: ObserveOptions, createResubscribe?: boolean): {
|
|
361
371
|
nodes: Map<NodeInfo, TrackingNode> | undefined;
|
|
362
372
|
value: T;
|
|
363
373
|
dispose: (() => void) | undefined;
|
|
@@ -381,6 +391,23 @@ interface ObservablePrimitiveState {
|
|
|
381
391
|
}
|
|
382
392
|
declare function ObservablePrimitiveClass<T>(this: ObservablePrimitive<T> & ObservablePrimitiveState, node: NodeInfo): void;
|
|
383
393
|
|
|
394
|
+
type MiddlewareEventType = 'listener-added' | 'listener-removed' | 'listeners-cleared';
|
|
395
|
+
interface MiddlewareEvent {
|
|
396
|
+
type: MiddlewareEventType;
|
|
397
|
+
node: NodeInfo;
|
|
398
|
+
listener?: NodeListener;
|
|
399
|
+
timestamp: number;
|
|
400
|
+
}
|
|
401
|
+
type MiddlewareHandler = (event: MiddlewareEvent) => void;
|
|
402
|
+
/**
|
|
403
|
+
* Register a middleware handler for a specific node and event type
|
|
404
|
+
* @param node The node to register the middleware handler for
|
|
405
|
+
* @param type The event type to handle
|
|
406
|
+
* @param handler The middleware handler function
|
|
407
|
+
* @returns A function to remove the handler
|
|
408
|
+
*/
|
|
409
|
+
declare function registerMiddleware(node: NodeInfo, type: MiddlewareEventType, handler: MiddlewareHandler): () => void;
|
|
410
|
+
|
|
384
411
|
declare const internal: {
|
|
385
412
|
createPreviousHandler: typeof createPreviousHandler;
|
|
386
413
|
clone: typeof clone;
|
|
@@ -388,6 +415,7 @@ declare const internal: {
|
|
|
388
415
|
ensureNodeValue: typeof ensureNodeValue;
|
|
389
416
|
findIDKey: typeof findIDKey;
|
|
390
417
|
get: typeof get;
|
|
418
|
+
getKeys: typeof getKeys;
|
|
391
419
|
getNode: typeof getNode;
|
|
392
420
|
getNodeValue: typeof getNodeValue;
|
|
393
421
|
getPathType: typeof getPathType;
|
|
@@ -414,6 +442,7 @@ declare const internal: {
|
|
|
414
442
|
observableFns: Map<string, (node: NodeInfo, ...args: any[]) => any>;
|
|
415
443
|
optimized: symbol;
|
|
416
444
|
peek: typeof peek;
|
|
445
|
+
registerMiddleware: typeof registerMiddleware;
|
|
417
446
|
safeParse: typeof safeParse;
|
|
418
447
|
safeStringify: typeof safeStringify;
|
|
419
448
|
set: typeof set;
|
|
@@ -426,4 +455,4 @@ declare const internal: {
|
|
|
426
455
|
};
|
|
427
456
|
};
|
|
428
457
|
|
|
429
|
-
export { type ArrayValue, type Change, type ChildNodeInfo, type ClassConstructor, type GetMode, type GetOptions, type ImmutableObservableBase, type Linked, type LinkedOptions, type ListenerFn, type ListenerParams, type NodeInfo, type NodeListener, type NotPrimitive, type Observable, type ObservableBoolean, type ObservableEvent, ObservableHint, type ObservableListenerDispose, type ObservableMap, 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 PlainObject, type Primitive, type RecordValue, type RecursiveValueOrFunction, type RemoveObservables, type RetryOptions, type RootNodeInfo, type Selector, type SetParams, type TrackingNode, type TrackingState, type TrackingType, type TypeAtPath, type UpdateFn, type UpdateFnParams, type WaitForSet, type WaitForSetFnParams, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPlainObject, isPrimitive, isPromise, isSet, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
|
|
458
|
+
export { type ArrayValue, type Change, type ChildNodeInfo, type ClassConstructor, type GetMode, type GetOptions, type ImmutableObservableBase, type Linked, type LinkedOptions, type ListenerFn, type ListenerParams, type NodeInfo, type NodeListener, type NotPrimitive, type Observable, type ObservableBoolean, type ObservableEvent, ObservableHint, type ObservableListenerDispose, type ObservableMap, 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 PlainObject, type Primitive, type RecordValue, type RecursiveValueOrFunction, type RemoveObservables, type RetryOptions, type RootNodeInfo, type Selector, type SetParams, type TrackingNode, type TrackingState, type TrackingType, type TypeAtPath, type UpdateFn, type UpdateFnParams, type UpdateSetFn, type UpdateSetFnParams, type WaitForSet, type WaitForSetFnParams, applyChange, applyChanges, batch, beginBatch, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, event, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPlainObject, isPrimitive, isPromise, isSet, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, proxy, setAtPath, setSilently, shouldIgnoreUnobserved, syncState, trackSelector, when, whenReady };
|