@legendapp/state 3.0.0-alpha.29 → 3.0.0-alpha.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/config/enable$GetSet.js +2 -1
- package/config/enable$GetSet.mjs +2 -1
- package/config/enableReactTracking.js +2 -1
- package/config/enableReactTracking.mjs +2 -1
- package/config/enableReactUse.js +2 -1
- package/config/enableReactUse.mjs +2 -1
- package/config/enable_PeekAssign.js +2 -1
- package/config/enable_PeekAssign.mjs +2 -1
- package/config.d.mts +13 -0
- package/config.d.ts +13 -0
- package/config.js +2052 -0
- package/config.mjs +2050 -0
- package/index.d.mts +5 -302
- package/index.d.ts +5 -302
- package/index.js +27 -142
- package/index.mjs +28 -141
- package/observableInterfaces-Dilj6F92.d.mts +282 -0
- package/observableInterfaces-Dilj6F92.d.ts +282 -0
- package/package.json +6 -1
- package/persist-plugins/async-storage.d.mts +6 -3
- package/persist-plugins/async-storage.d.ts +6 -3
- package/persist-plugins/async-storage.js +12 -4
- package/persist-plugins/async-storage.mjs +12 -5
- package/persist-plugins/indexeddb.d.mts +6 -4
- package/persist-plugins/indexeddb.d.ts +6 -4
- package/persist-plugins/indexeddb.js +15 -5
- package/persist-plugins/indexeddb.mjs +15 -6
- package/persist-plugins/mmkv.d.mts +5 -1
- package/persist-plugins/mmkv.d.ts +5 -1
- package/persist-plugins/mmkv.js +14 -5
- package/persist-plugins/mmkv.mjs +14 -6
- package/react.d.mts +1 -0
- package/react.d.ts +1 -0
- package/react.js +2 -2
- package/react.mjs +2 -2
- package/sync-plugins/crud.d.mts +1 -1
- package/sync-plugins/crud.d.ts +1 -1
- package/sync-plugins/fetch.js +12 -8
- package/sync-plugins/fetch.mjs +13 -9
- package/sync-plugins/keel.d.mts +2 -2
- package/sync-plugins/keel.d.ts +2 -2
- package/sync-plugins/keel.js +6 -6
- package/sync-plugins/keel.mjs +6 -6
- package/sync.d.mts +37 -19
- package/sync.d.ts +37 -19
- package/sync.js +143 -41
- package/sync.mjs +151 -50
package/index.mjs
CHANGED
|
@@ -72,13 +72,8 @@ var symbolOpaque = Symbol("opaque");
|
|
|
72
72
|
var optimized = Symbol("optimized");
|
|
73
73
|
var symbolLinked = Symbol("linked");
|
|
74
74
|
var globalState = {
|
|
75
|
-
isLoadingLocal: false,
|
|
76
|
-
isLoadingRemote: false,
|
|
77
|
-
activateSyncedNode: void 0,
|
|
78
75
|
pendingNodes: /* @__PURE__ */ new Map(),
|
|
79
|
-
dirtyNodes: /* @__PURE__ */ new Set()
|
|
80
|
-
replacer: void 0,
|
|
81
|
-
reviver: void 0
|
|
76
|
+
dirtyNodes: /* @__PURE__ */ new Set()
|
|
82
77
|
};
|
|
83
78
|
function isOpaqueObject(value) {
|
|
84
79
|
return value && (value[symbolOpaque] || value["$$typeof"]);
|
|
@@ -292,7 +287,7 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
|
|
|
292
287
|
return obj;
|
|
293
288
|
} else if (o[p] === void 0 && value === void 0 && i === path.length - 1) {
|
|
294
289
|
return obj;
|
|
295
|
-
} else if (o[p] === void 0 || o[p] === null) {
|
|
290
|
+
} else if (i < path.length - 1 && (o[p] === void 0 || o[p] === null)) {
|
|
296
291
|
const child = initializePathType(pathTypes[i]);
|
|
297
292
|
if (isMap(o)) {
|
|
298
293
|
o.set(p, child);
|
|
@@ -325,27 +320,6 @@ function setAtPath(obj, path, pathTypes, value, mode, fullObj, restore) {
|
|
|
325
320
|
}
|
|
326
321
|
return obj;
|
|
327
322
|
}
|
|
328
|
-
function setInObservableAtPath(value$, path, pathTypes, value, mode) {
|
|
329
|
-
let o = value$;
|
|
330
|
-
let v = value;
|
|
331
|
-
for (let i = 0; i < path.length; i++) {
|
|
332
|
-
const p = path[i];
|
|
333
|
-
if (!o.peek()[p]) {
|
|
334
|
-
o[p].set(initializePathType(pathTypes[i]));
|
|
335
|
-
}
|
|
336
|
-
o = o[p];
|
|
337
|
-
v = v[p];
|
|
338
|
-
}
|
|
339
|
-
if (v === symbolDelete) {
|
|
340
|
-
o.delete();
|
|
341
|
-
} else if (mode === "assign" && o.assign && isObject(o.peek())) {
|
|
342
|
-
o.assign(v);
|
|
343
|
-
} else if (mode === "merge") {
|
|
344
|
-
mergeIntoObservable(o, v);
|
|
345
|
-
} else {
|
|
346
|
-
o.set(v);
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
323
|
function mergeIntoObservable(target, ...sources) {
|
|
350
324
|
if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
|
|
351
325
|
if (!isObservable(target)) {
|
|
@@ -435,12 +409,13 @@ function initializePathType(pathType) {
|
|
|
435
409
|
switch (pathType) {
|
|
436
410
|
case "array":
|
|
437
411
|
return [];
|
|
438
|
-
case "object":
|
|
439
|
-
return {};
|
|
440
412
|
case "map":
|
|
441
413
|
return /* @__PURE__ */ new Map();
|
|
442
414
|
case "set":
|
|
443
415
|
return /* @__PURE__ */ new Set();
|
|
416
|
+
case "object":
|
|
417
|
+
default:
|
|
418
|
+
return {};
|
|
444
419
|
}
|
|
445
420
|
}
|
|
446
421
|
function applyChange(value, change, applyPrevious) {
|
|
@@ -457,20 +432,25 @@ function deepMerge(target, ...sources) {
|
|
|
457
432
|
if (isPrimitive(target)) {
|
|
458
433
|
return sources[sources.length - 1];
|
|
459
434
|
}
|
|
460
|
-
|
|
435
|
+
let result = isArray(target) ? [...target] : { ...target };
|
|
461
436
|
for (let i = 0; i < sources.length; i++) {
|
|
462
437
|
const obj2 = sources[i];
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
438
|
+
if (isObject(obj2) || isArray(obj2)) {
|
|
439
|
+
const objTarget = obj2;
|
|
440
|
+
for (const key in objTarget) {
|
|
441
|
+
if (hasOwnProperty.call(objTarget, key)) {
|
|
442
|
+
if (objTarget[key] instanceof Object && !isObservable(objTarget[key]) && Object.keys(objTarget[key]).length > 0) {
|
|
443
|
+
result[key] = deepMerge(
|
|
444
|
+
result[key] || (isArray(objTarget[key]) ? [] : {}),
|
|
445
|
+
objTarget[key]
|
|
446
|
+
);
|
|
447
|
+
} else {
|
|
448
|
+
result[key] = objTarget[key];
|
|
449
|
+
}
|
|
472
450
|
}
|
|
473
451
|
}
|
|
452
|
+
} else {
|
|
453
|
+
result = obj2;
|
|
474
454
|
}
|
|
475
455
|
}
|
|
476
456
|
return result;
|
|
@@ -521,9 +501,9 @@ function notify(node, value, prev, level, whenOptimizedOnlyIf) {
|
|
|
521
501
|
changesInBatch,
|
|
522
502
|
node,
|
|
523
503
|
/*loading*/
|
|
524
|
-
globalState.isLoadingLocal,
|
|
504
|
+
!!globalState.isLoadingLocal,
|
|
525
505
|
/*remote*/
|
|
526
|
-
globalState.isLoadingRemote,
|
|
506
|
+
!!globalState.isLoadingRemote,
|
|
527
507
|
value,
|
|
528
508
|
[],
|
|
529
509
|
[],
|
|
@@ -547,8 +527,8 @@ function notify(node, value, prev, level, whenOptimizedOnlyIf) {
|
|
|
547
527
|
prev,
|
|
548
528
|
level,
|
|
549
529
|
whenOptimizedOnlyIf,
|
|
550
|
-
isFromSync: globalState.isLoadingRemote,
|
|
551
|
-
isFromPersist: globalState.isLoadingLocal
|
|
530
|
+
isFromSync: !!globalState.isLoadingRemote,
|
|
531
|
+
isFromPersist: !!globalState.isLoadingLocal
|
|
552
532
|
});
|
|
553
533
|
}
|
|
554
534
|
if (changesInBatch.size) {
|
|
@@ -878,9 +858,9 @@ function onChange(node, callback, options = {}, fromLinks) {
|
|
|
878
858
|
};
|
|
879
859
|
}
|
|
880
860
|
function createCb(linkedFromNode, path, callback) {
|
|
881
|
-
let
|
|
861
|
+
let prevAtPath = deconstructObjectWithPath(path, [], getNodeValue(linkedFromNode));
|
|
882
862
|
return function({ value: valueA, isFromPersist, isFromSync }) {
|
|
883
|
-
const
|
|
863
|
+
const valueAtPath = deconstructObjectWithPath(path, [], valueA);
|
|
884
864
|
if (valueAtPath !== prevAtPath) {
|
|
885
865
|
callback({
|
|
886
866
|
value: valueAtPath,
|
|
@@ -900,16 +880,6 @@ function createCb(linkedFromNode, path, callback) {
|
|
|
900
880
|
prevAtPath = valueAtPath;
|
|
901
881
|
};
|
|
902
882
|
}
|
|
903
|
-
function getValueAtPath2(obj, path) {
|
|
904
|
-
let o = obj;
|
|
905
|
-
const pathTypes = [];
|
|
906
|
-
for (let i = 0; o && i < path.length; i++) {
|
|
907
|
-
pathTypes.push(isArray(o) ? "array" : "object");
|
|
908
|
-
const p = path[i];
|
|
909
|
-
o = o[p];
|
|
910
|
-
}
|
|
911
|
-
return { valueAtPath: o, pathTypes };
|
|
912
|
-
}
|
|
913
883
|
|
|
914
884
|
// src/setupTracking.ts
|
|
915
885
|
function setupTracking(nodes, update, noArgs, immediate) {
|
|
@@ -2209,45 +2179,6 @@ function computed(get2, set2) {
|
|
|
2209
2179
|
);
|
|
2210
2180
|
}
|
|
2211
2181
|
|
|
2212
|
-
// src/config.ts
|
|
2213
|
-
function configureLegendState({
|
|
2214
|
-
observableFunctions,
|
|
2215
|
-
observableProperties: observableProperties2,
|
|
2216
|
-
jsonReplacer,
|
|
2217
|
-
jsonReviver
|
|
2218
|
-
}) {
|
|
2219
|
-
if (observableFunctions) {
|
|
2220
|
-
for (const key in observableFunctions) {
|
|
2221
|
-
const fn = observableFunctions[key];
|
|
2222
|
-
observableFns.set(key, fn);
|
|
2223
|
-
ObservablePrimitiveClass.prototype[key] = function(...args) {
|
|
2224
|
-
return fn.call(this, this._node, ...args);
|
|
2225
|
-
};
|
|
2226
|
-
}
|
|
2227
|
-
}
|
|
2228
|
-
if (observableProperties2) {
|
|
2229
|
-
for (const key in observableProperties2) {
|
|
2230
|
-
const fns2 = observableProperties2[key];
|
|
2231
|
-
observableProperties.set(key, fns2);
|
|
2232
|
-
Object.defineProperty(ObservablePrimitiveClass.prototype, key, {
|
|
2233
|
-
configurable: true,
|
|
2234
|
-
get() {
|
|
2235
|
-
return fns2.get.call(this, this._node);
|
|
2236
|
-
},
|
|
2237
|
-
set(value) {
|
|
2238
|
-
return fns2.set.call(this, this._node, value);
|
|
2239
|
-
}
|
|
2240
|
-
});
|
|
2241
|
-
}
|
|
2242
|
-
}
|
|
2243
|
-
if (jsonReplacer) {
|
|
2244
|
-
globalState.replacer = jsonReplacer;
|
|
2245
|
-
}
|
|
2246
|
-
if (jsonReviver) {
|
|
2247
|
-
globalState.reviver = jsonReviver;
|
|
2248
|
-
}
|
|
2249
|
-
}
|
|
2250
|
-
|
|
2251
2182
|
// src/event.ts
|
|
2252
2183
|
function event() {
|
|
2253
2184
|
const obs = observable(0);
|
|
@@ -2292,6 +2223,7 @@ function syncState(obs) {
|
|
|
2292
2223
|
numPendingSets: 0,
|
|
2293
2224
|
syncCount: 0,
|
|
2294
2225
|
clearPersist: void 0,
|
|
2226
|
+
reset: () => Promise.resolve(),
|
|
2295
2227
|
sync: () => Promise.resolve(),
|
|
2296
2228
|
getPendingChanges: () => ({})
|
|
2297
2229
|
});
|
|
@@ -2299,50 +2231,6 @@ function syncState(obs) {
|
|
|
2299
2231
|
return node.state;
|
|
2300
2232
|
}
|
|
2301
2233
|
|
|
2302
|
-
// src/retry.ts
|
|
2303
|
-
function calculateRetryDelay(retryOptions, retryNum) {
|
|
2304
|
-
const { backoff, delay = 1e3, infinite, times = 3, maxDelay = 3e4 } = retryOptions;
|
|
2305
|
-
if (infinite || retryNum < times) {
|
|
2306
|
-
const delayTime = Math.min(delay * (backoff === "constant" ? 1 : 2 ** retryNum), maxDelay);
|
|
2307
|
-
return delayTime;
|
|
2308
|
-
}
|
|
2309
|
-
return null;
|
|
2310
|
-
}
|
|
2311
|
-
function createRetryTimeout(retryOptions, retryNum, fn) {
|
|
2312
|
-
const delayTime = calculateRetryDelay(retryOptions, retryNum);
|
|
2313
|
-
if (delayTime) {
|
|
2314
|
-
return setTimeout(fn, delayTime);
|
|
2315
|
-
}
|
|
2316
|
-
}
|
|
2317
|
-
function runWithRetry(state, fn) {
|
|
2318
|
-
const { retry } = state;
|
|
2319
|
-
const e = Object.assign(state, { cancel: false, cancelRetry: () => e.cancel = false });
|
|
2320
|
-
let value = fn(e);
|
|
2321
|
-
if (isPromise(value) && retry) {
|
|
2322
|
-
let timeoutRetry;
|
|
2323
|
-
return new Promise((resolve) => {
|
|
2324
|
-
const run = () => {
|
|
2325
|
-
value.then((val) => {
|
|
2326
|
-
resolve(val);
|
|
2327
|
-
}).catch(() => {
|
|
2328
|
-
state.retryNum++;
|
|
2329
|
-
if (timeoutRetry) {
|
|
2330
|
-
clearTimeout(timeoutRetry);
|
|
2331
|
-
}
|
|
2332
|
-
if (!e.cancel) {
|
|
2333
|
-
timeoutRetry = createRetryTimeout(retry, state.retryNum, () => {
|
|
2334
|
-
value = fn(e);
|
|
2335
|
-
run();
|
|
2336
|
-
});
|
|
2337
|
-
}
|
|
2338
|
-
});
|
|
2339
|
-
};
|
|
2340
|
-
run();
|
|
2341
|
-
});
|
|
2342
|
-
}
|
|
2343
|
-
return value;
|
|
2344
|
-
}
|
|
2345
|
-
|
|
2346
2234
|
// index.ts
|
|
2347
2235
|
var internal = {
|
|
2348
2236
|
createPreviousHandler,
|
|
@@ -2361,7 +2249,6 @@ var internal = {
|
|
|
2361
2249
|
observableFns,
|
|
2362
2250
|
optimized,
|
|
2363
2251
|
peek,
|
|
2364
|
-
runWithRetry,
|
|
2365
2252
|
safeParse,
|
|
2366
2253
|
safeStringify,
|
|
2367
2254
|
set,
|
|
@@ -2372,4 +2259,4 @@ var internal = {
|
|
|
2372
2259
|
tracking
|
|
2373
2260
|
};
|
|
2374
2261
|
|
|
2375
|
-
export { ObservablePrimitiveClass, applyChange, applyChanges, batch, beginBatch, beginTracking, computeSelector, computed,
|
|
2262
|
+
export { ObservablePrimitiveClass, applyChange, applyChanges, batch, beginBatch, beginTracking, computeSelector, computed, constructObjectWithPath, deconstructObjectWithPath, endBatch, endTracking, event, findIDKey, getNode, getNodeValue, getObservableIndex, hasOwnProperty, internal, isArray, isBoolean, isDate, isEmpty, isFunction, isMap, isNullOrUndefined, isNumber, isObject, isObservable, isObservableValueReady, isObserved, isPrimitive, isPromise, isString, isSymbol, linked, mergeIntoObservable, observable, observablePrimitive, observe, opaqueObject, optimized, proxy, setAtPath, setSilently, setupTracking, shouldIgnoreUnobserved, symbolDelete, syncState, trackSelector, tracking, updateTracking, when, whenReady };
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
type Primitive$1 = string | number | boolean | symbol | bigint | undefined | null | Date;
|
|
2
|
+
type ArrayOverrideFnNames = 'find' | 'findIndex' | 'every' | 'some' | 'filter' | 'reduce' | 'reduceRight' | 'forEach' | 'map' | 'sort';
|
|
3
|
+
type RemoveIndex<T> = {
|
|
4
|
+
[K in keyof T as string extends K ? never : number extends K ? never : K]: T[K];
|
|
5
|
+
};
|
|
6
|
+
type BuiltIns = String | Boolean | Number | Date | Error | RegExp | Array<any> | Function | Promise<any>;
|
|
7
|
+
type IsUserDefinedObject<T> = T extends Function | BuiltIns | any[] ? false : T extends object ? true : false;
|
|
8
|
+
type RemoveObservables<T> = T extends ImmutableObservableBase<infer t> ? t : T extends ImmutableObservableBase<infer t>[] ? t[] : IsUserDefinedObject<T> extends true ? {
|
|
9
|
+
[K in keyof T]: RemoveObservables<T[K]>;
|
|
10
|
+
} : T extends ImmutableObservableBase<infer TObs> ? TObs : T extends () => infer TRet ? RemoveObservables<TRet> & T : T extends (key: infer TKey extends string | number) => infer TRet ? Record<TKey, RemoveObservables<TRet>> & T : T;
|
|
11
|
+
interface ObservableArray<T, U> extends ObservablePrimitive<T>, Pick<Array<Observable<U>>, ArrayOverrideFnNames>, Omit<RemoveIndex<Array<U>>, ArrayOverrideFnNames> {
|
|
12
|
+
}
|
|
13
|
+
interface ObservableObjectFns<T> {
|
|
14
|
+
assign(value: Partial<T>): Observable<T>;
|
|
15
|
+
}
|
|
16
|
+
interface ObservableObjectFunctions<T = Record<string, any>> extends ObservablePrimitive<T>, ObservableObjectFns<T> {
|
|
17
|
+
}
|
|
18
|
+
type MapKey<T extends Map<any, any> | WeakMap<any, any>> = Parameters<T['has']>[0];
|
|
19
|
+
type MapValue<T extends Map<any, any> | WeakMap<any, any>> = ReturnType<T['get']>;
|
|
20
|
+
type ObservableMap<T extends Map<any, any> | WeakMap<any, any>> = Omit<T, 'get' | 'size' | 'set'> & Omit<ObservablePrimitive<T>, 'get' | 'size'> & {
|
|
21
|
+
get(key: Parameters<T['get']>[0]): Observable<Parameters<T['set']>[1]>;
|
|
22
|
+
get(): T;
|
|
23
|
+
size: number;
|
|
24
|
+
set(key: MapKey<T>, value: MapValue<T>): Observable<T>;
|
|
25
|
+
assign(value: Record<MapKey<T>, MapValue<T>> | Map<MapKey<T>, MapValue<T>> | WeakMap<MapKey<T>, MapValue<T>>): Observable<T>;
|
|
26
|
+
};
|
|
27
|
+
type SetValue<T extends Set<any> | WeakSet<any>> = Parameters<T['has']>[0];
|
|
28
|
+
type ObservableSet<T extends Set<any> | WeakSet<any>> = Omit<T, 'size' | 'add'> & Omit<ObservablePrimitive<T>, 'size'> & {
|
|
29
|
+
size: number;
|
|
30
|
+
add: (value: SetValue<T>) => Observable<T>;
|
|
31
|
+
};
|
|
32
|
+
interface ObservableBoolean extends ObservablePrimitive<boolean> {
|
|
33
|
+
toggle(): void;
|
|
34
|
+
}
|
|
35
|
+
interface ObservablePrimitive<T> extends ImmutableObservableBase<T>, MutableObservableBase<T> {
|
|
36
|
+
}
|
|
37
|
+
type ObservableAny = Partial<ObservableObjectFns<any>> & ObservablePrimitive<any> & Record<string, any>;
|
|
38
|
+
interface ImmutableObservableSimple<T> {
|
|
39
|
+
peek(): T;
|
|
40
|
+
get(trackingType?: any): any;
|
|
41
|
+
onChange(cb: ListenerFn<T>, options?: any): () => void;
|
|
42
|
+
}
|
|
43
|
+
interface ImmutableObservableBase<T> extends ImmutableObservableSimple<T> {
|
|
44
|
+
peek(): RemoveObservables<T>;
|
|
45
|
+
peek(): T;
|
|
46
|
+
get(trackingType?: TrackingType | GetOptions): RemoveObservables<T>;
|
|
47
|
+
onChange(cb: ListenerFn<T>, options?: {
|
|
48
|
+
trackingType?: TrackingType;
|
|
49
|
+
initial?: boolean;
|
|
50
|
+
immediate?: boolean;
|
|
51
|
+
noArgs?: boolean;
|
|
52
|
+
}): () => void;
|
|
53
|
+
}
|
|
54
|
+
interface MutableObservableSimple {
|
|
55
|
+
set(value: any): void;
|
|
56
|
+
delete(): void;
|
|
57
|
+
}
|
|
58
|
+
interface MutableObservableBase<T> extends MutableObservableSimple {
|
|
59
|
+
set(value: (prev: RemoveObservables<T>) => RemoveObservables<T>): void;
|
|
60
|
+
set(value: RecursiveValueOrFunction<T>): void;
|
|
61
|
+
set(value: Promise<RemoveObservables<T>>): void;
|
|
62
|
+
set(value: RemoveObservables<T>): void;
|
|
63
|
+
set(value: Observable<RemoveObservables<T>>): void;
|
|
64
|
+
delete(): void;
|
|
65
|
+
}
|
|
66
|
+
type UndefinedIf<T, U> = U extends true ? T | undefined : T;
|
|
67
|
+
type IsNullable<T> = undefined extends T ? true : null extends T ? true : false;
|
|
68
|
+
type NonObservable = Function | Observable;
|
|
69
|
+
type NonObservableKeys<T> = {
|
|
70
|
+
[K in keyof T]-?: IsStrictAny<T[K]> extends true ? never : T[K] extends undefined | null ? never : NonNullable<T[K]> extends NonObservable ? K : never;
|
|
71
|
+
}[keyof T];
|
|
72
|
+
type ObservableProps<T> = NonObservableKeys<NonNullable<T>> extends never ? T : RestoreNullability<T, Omit<NonNullable<T>, NonObservableKeys<NonNullable<T>>>>;
|
|
73
|
+
type NonObservableProps<T> = RestoreNullability<T, NullablePropsIf<Pick<NonNullable<T>, NonObservableKeys<NonNullable<T>>>, IsNullable<T>>>;
|
|
74
|
+
type NullablePropsIf<T, U> = {
|
|
75
|
+
[K in keyof T]: UndefinedIf<T[K], U>;
|
|
76
|
+
};
|
|
77
|
+
type RestoreNullability<Source, Target> = IsNullable<Source> extends true ? Target | Extract<Source, null | undefined> : Target;
|
|
78
|
+
type ObservableChildren<T, Nullable = IsNullable<T>> = {
|
|
79
|
+
[K in keyof T]-?: Observable<UndefinedIf<T[K], Nullable>>;
|
|
80
|
+
};
|
|
81
|
+
type ObservableFunctionChildren<T> = {
|
|
82
|
+
[K in keyof T]-?: T[K] extends Observable ? T[K] : T[K] extends (key: infer Key extends string | number) => Promise<infer t> | infer t ? IsLookupFunction<T[K]> extends true ? Observable<Record<Key, t>> & T[K] : t extends void ? T[K] : t extends Observable ? t : Observable<t> & (() => t) : T[K] & Observable<T[K]>;
|
|
83
|
+
};
|
|
84
|
+
type IsStrictAny<T> = 0 extends 1 & T ? true : false;
|
|
85
|
+
type ObservableObject<T> = ObservableObjectFunctions<ObservableProps<T> & NonObservableProps<T>> & ObservableChildren<ObservableProps<T>> & ObservableFunctionChildren<NonObservableProps<T>>;
|
|
86
|
+
type ObservableFunction<T> = T extends () => infer t ? t | (() => t) : T;
|
|
87
|
+
type IsLookupFunction<T> = T extends (...args: infer P) => any ? P extends {
|
|
88
|
+
length: 1;
|
|
89
|
+
} ? P[0] extends string | ObservablePrimitive<string> | number | ObservablePrimitive<number> ? true : false : false : false;
|
|
90
|
+
type ObservableNode<T, NT = NonNullable<T>> = [NT] extends [never] ? ObservablePrimitive<T> : IsStrictAny<T> extends true ? ObservableAny : [T] extends [Promise<infer t>] ? ObservableNode<t> : [T] extends [(key: infer K extends string) => infer t] ? [t] extends [ImmutableObservableBase<any>] ? IsLookupFunction<T> extends true ? Observable<Record<K, t>> : t : IsLookupFunction<T> extends true ? Observable<Record<K, t>> & T : Observable<ObservableFunction<t>> : [NT] extends [ImmutableObservableBase<any>] ? NT : [NT] extends [Primitive$1] ? [NT] extends [boolean] ? ObservableBoolean : ObservablePrimitive<T> : NT extends Map<any, any> | WeakMap<any, any> ? ObservableMap<NT> : NT extends Set<infer U> ? ObservableSet<Set<UndefinedIf<U, IsNullable<T>>>> : NT extends WeakSet<any> ? ObservableSet<NT> : NT extends Array<infer U> ? ObservableArray<T, U> & ObservableChildren<T> : ObservableObject<T> & {};
|
|
91
|
+
type Observable<T = any> = ObservableNode<T> & {};
|
|
92
|
+
type ObservableParam<T = any> = ImmutableObservableSimple<T> & MutableObservableSimple;
|
|
93
|
+
type FixExpanded<T> = [T] extends [boolean] ? boolean : T;
|
|
94
|
+
type ValueOrFunction<T> = [T] extends [Function] ? T : T | ImmutableObservableBase<FixExpanded<T> | T> | Promise<FixExpanded<T> | T> | (() => FixExpanded<T> | T | Promise<FixExpanded<T> | T> | ImmutableObservableBase<FixExpanded<T> | T>);
|
|
95
|
+
type ValueOrFunctionKeys<T> = {
|
|
96
|
+
[K in keyof T]: RecursiveValueOrFunction<T[K]>;
|
|
97
|
+
};
|
|
98
|
+
type RecursiveValueOrFunction<T> = T extends Function ? T : T extends object ? ((key: string) => any) | Promise<ValueOrFunctionKeys<T>> | ValueOrFunctionKeys<T> | ImmutableObservableBase<T> | (() => T | Promise<T> | ValueOrFunctionKeys<T> | Promise<ValueOrFunctionKeys<T>> | Observable<T>) : ValueOrFunction<T>;
|
|
99
|
+
|
|
100
|
+
declare const symbolOpaque: unique symbol;
|
|
101
|
+
declare function getPathType(value: any): TypeAtPath;
|
|
102
|
+
declare function safeStringify(value: any): any;
|
|
103
|
+
declare function safeParse(value: any): any;
|
|
104
|
+
declare function clone<T>(value: T): any;
|
|
105
|
+
declare function isObservable(value$: any): value$ is Observable;
|
|
106
|
+
declare function getNode(value$: ObservableParam): NodeInfo;
|
|
107
|
+
declare function setNodeValue(node: NodeInfo, newValue: any): {
|
|
108
|
+
prevValue: any;
|
|
109
|
+
newValue: any;
|
|
110
|
+
};
|
|
111
|
+
declare function getNodeValue(node: NodeInfo): any;
|
|
112
|
+
declare function ensureNodeValue(node: NodeInfo): any;
|
|
113
|
+
declare function findIDKey(obj: unknown | undefined, node: NodeInfo): string | ((value: any) => string) | undefined;
|
|
114
|
+
|
|
115
|
+
type TrackingType = undefined | true | symbol;
|
|
116
|
+
interface GetOptions {
|
|
117
|
+
shallow: boolean;
|
|
118
|
+
}
|
|
119
|
+
type OpaqueObject<T> = T & {
|
|
120
|
+
[symbolOpaque]: true;
|
|
121
|
+
};
|
|
122
|
+
interface ListenerParams<T = any> {
|
|
123
|
+
value: T;
|
|
124
|
+
getPrevious: () => T;
|
|
125
|
+
changes: Change[];
|
|
126
|
+
isFromSync: boolean;
|
|
127
|
+
isFromPersist: boolean;
|
|
128
|
+
}
|
|
129
|
+
type ListenerFn<T = any> = (params: ListenerParams<T>) => void;
|
|
130
|
+
interface ObservableEvent {
|
|
131
|
+
fire(): void;
|
|
132
|
+
on(cb?: () => void): ObservableListenerDispose;
|
|
133
|
+
get(): void;
|
|
134
|
+
}
|
|
135
|
+
type TypeAtPath = 'object' | 'array' | 'map' | 'set';
|
|
136
|
+
interface Change {
|
|
137
|
+
path: string[];
|
|
138
|
+
pathTypes: TypeAtPath[];
|
|
139
|
+
valueAtPath: any;
|
|
140
|
+
prevAtPath: any;
|
|
141
|
+
}
|
|
142
|
+
type RecordValue<T> = T extends Record<string, infer t> ? t : never;
|
|
143
|
+
type ArrayValue<T> = T extends Array<infer t> ? t : never;
|
|
144
|
+
type ObservableValue<T> = T extends Observable<infer t> ? t : never;
|
|
145
|
+
type Selector<T> = ObservableParam<T> | ObservableEvent | (() => T) | T;
|
|
146
|
+
type ClassConstructor<I, Args extends any[] = any[]> = new (...args: Args) => I;
|
|
147
|
+
type ObservableListenerDispose = () => void;
|
|
148
|
+
interface ObservableRoot {
|
|
149
|
+
_: any;
|
|
150
|
+
set?: (value: any) => void;
|
|
151
|
+
}
|
|
152
|
+
type Primitive = boolean | string | number | Date;
|
|
153
|
+
type NotPrimitive<T> = T extends Primitive ? never : T;
|
|
154
|
+
interface NodeListener {
|
|
155
|
+
track: TrackingType;
|
|
156
|
+
noArgs?: boolean;
|
|
157
|
+
listener: ListenerFn;
|
|
158
|
+
}
|
|
159
|
+
interface TrackingState {
|
|
160
|
+
nodes?: Map<NodeInfo, TrackingNode>;
|
|
161
|
+
traceListeners?: (nodes: Map<NodeInfo, TrackingNode>) => void;
|
|
162
|
+
traceUpdates?: (fn: Function) => Function;
|
|
163
|
+
}
|
|
164
|
+
interface BaseNodeInfo {
|
|
165
|
+
children?: Map<string, ChildNodeInfo>;
|
|
166
|
+
proxy?: object;
|
|
167
|
+
root: ObservableRoot;
|
|
168
|
+
listeners?: Set<NodeListener>;
|
|
169
|
+
listenersImmediate?: Set<NodeListener>;
|
|
170
|
+
isEvent?: boolean;
|
|
171
|
+
linkedToNode?: NodeInfo;
|
|
172
|
+
linkedToNodeDispose?: () => void;
|
|
173
|
+
activatedObserveDispose?: () => void;
|
|
174
|
+
linkedFromNodes?: Set<NodeInfo>;
|
|
175
|
+
isSetting?: number;
|
|
176
|
+
isAssigning?: number;
|
|
177
|
+
isComputing?: boolean;
|
|
178
|
+
parentOther?: NodeInfo;
|
|
179
|
+
functions?: Map<string, Function | Observable<any>>;
|
|
180
|
+
lazy?: boolean;
|
|
181
|
+
lazyFn?: Function;
|
|
182
|
+
needsExtract?: boolean;
|
|
183
|
+
numListenersRecursive: number;
|
|
184
|
+
state?: Observable<ObservableSyncState>;
|
|
185
|
+
activated?: boolean;
|
|
186
|
+
recursivelyAutoActivated?: boolean;
|
|
187
|
+
activationState?: LinkedOptions & {
|
|
188
|
+
onError?: () => void;
|
|
189
|
+
onChange: (params: UpdateFnParams) => void | Promise<void>;
|
|
190
|
+
};
|
|
191
|
+
dirtyFn?: () => void;
|
|
192
|
+
dirtyChildren?: Set<NodeInfo>;
|
|
193
|
+
numGets?: number;
|
|
194
|
+
getNumResolved?: number;
|
|
195
|
+
}
|
|
196
|
+
interface RootNodeInfo extends BaseNodeInfo {
|
|
197
|
+
parent?: undefined;
|
|
198
|
+
key?: undefined;
|
|
199
|
+
}
|
|
200
|
+
interface ChildNodeInfo extends BaseNodeInfo {
|
|
201
|
+
parent: NodeInfo;
|
|
202
|
+
key: string;
|
|
203
|
+
}
|
|
204
|
+
type NodeInfo = RootNodeInfo | ChildNodeInfo;
|
|
205
|
+
interface TrackingNode {
|
|
206
|
+
node: NodeInfo;
|
|
207
|
+
track: TrackingType;
|
|
208
|
+
num: number;
|
|
209
|
+
}
|
|
210
|
+
interface ObserveEvent<T> {
|
|
211
|
+
num: number;
|
|
212
|
+
previous?: T | undefined;
|
|
213
|
+
cancel?: boolean;
|
|
214
|
+
onCleanup?: () => void;
|
|
215
|
+
}
|
|
216
|
+
interface ObserveEventCallback<T> {
|
|
217
|
+
num: number;
|
|
218
|
+
previous?: T | undefined;
|
|
219
|
+
value?: T;
|
|
220
|
+
cancel: boolean;
|
|
221
|
+
nodes: Map<NodeInfo, TrackingNode> | undefined;
|
|
222
|
+
refresh: () => void;
|
|
223
|
+
onCleanup?: () => void;
|
|
224
|
+
onCleanupReaction?: () => void;
|
|
225
|
+
}
|
|
226
|
+
type SetParams<T> = ListenerParams<T extends Promise<infer t> ? t : T>;
|
|
227
|
+
interface LinkedOptions<T = any> {
|
|
228
|
+
get?: () => Promise<T> | T;
|
|
229
|
+
set?: (params: SetParams<T>) => void | Promise<any>;
|
|
230
|
+
waitFor?: Selector<any>;
|
|
231
|
+
waitForSet?: ((params: WaitForSetFnParams<T>) => any) | Promise<any> | ObservableParam<any> | ObservableEvent;
|
|
232
|
+
initial?: (() => T) | T;
|
|
233
|
+
activate?: 'auto' | 'lazy';
|
|
234
|
+
}
|
|
235
|
+
interface WaitForSetFnParams<T = any> {
|
|
236
|
+
value: T;
|
|
237
|
+
changes: Change[];
|
|
238
|
+
}
|
|
239
|
+
type GetMode = 'set' | 'assign' | 'merge' | 'append' | 'prepend';
|
|
240
|
+
interface UpdateFnParams<T = any> {
|
|
241
|
+
value: T;
|
|
242
|
+
mode?: GetMode;
|
|
243
|
+
lastSync?: number | undefined;
|
|
244
|
+
}
|
|
245
|
+
type UpdateFn<T = any> = (params: UpdateFnParams<T>) => void;
|
|
246
|
+
type Linked<T> = T;
|
|
247
|
+
interface ObserveOptions {
|
|
248
|
+
immediate?: boolean;
|
|
249
|
+
}
|
|
250
|
+
interface ObservableSyncStateBase {
|
|
251
|
+
isPersistLoaded: boolean;
|
|
252
|
+
isPersistEnabled: boolean;
|
|
253
|
+
isSyncEnabled: boolean;
|
|
254
|
+
lastSync?: number;
|
|
255
|
+
syncCount?: number;
|
|
256
|
+
isGetting?: boolean;
|
|
257
|
+
numPendingGets?: number;
|
|
258
|
+
numPendingSets?: number;
|
|
259
|
+
isSetting?: boolean;
|
|
260
|
+
clearPersist: () => Promise<void>;
|
|
261
|
+
sync: () => Promise<void>;
|
|
262
|
+
getPendingChanges: () => Record<string, {
|
|
263
|
+
p: any;
|
|
264
|
+
v?: any;
|
|
265
|
+
}> | undefined;
|
|
266
|
+
reset: () => Promise<void>;
|
|
267
|
+
numPendingRemoteLoads?: number;
|
|
268
|
+
}
|
|
269
|
+
interface ObservableState {
|
|
270
|
+
isLoaded: boolean;
|
|
271
|
+
error?: Error;
|
|
272
|
+
}
|
|
273
|
+
type ObservableSyncState = ObservableState & ObservableSyncStateBase;
|
|
274
|
+
interface RetryOptions {
|
|
275
|
+
infinite?: boolean;
|
|
276
|
+
times?: number;
|
|
277
|
+
delay?: number;
|
|
278
|
+
backoff?: 'constant' | 'exponential';
|
|
279
|
+
maxDelay?: number;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export { type ObservableBoolean as $, type ArrayValue as A, type ClassConstructor as B, type Change as C, type ObservableListenerDispose as D, type ObservableRoot as E, type NotPrimitive as F, type GetOptions as G, type NodeListener as H, type RootNodeInfo as I, type ChildNodeInfo as J, type SetParams as K, type LinkedOptions as L, type GetMode as M, type NodeInfo as N, type Observable as O, type Primitive as P, type UpdateFnParams as Q, type RecursiveValueOrFunction as R, type Selector as S, type TrackingType as T, type UpdateFn as U, type ObservableSyncStateBase as V, type WaitForSetFnParams as W, type ObservableState as X, type RetryOptions as Y, type RemoveObservables as Z, type ObservableObjectFns as _, type ObservableEvent as a, type ImmutableObservableBase as a0, type ObservableObject as a1, type ObserveEvent as b, type ObservableParam as c, type OpaqueObject as d, type TypeAtPath as e, type Linked as f, type ObservablePrimitive as g, type ObserveOptions as h, type ObserveEventCallback as i, type ObservableSyncState as j, type ListenerParams as k, type TrackingNode as l, clone as m, ensureNodeValue as n, findIDKey as o, getNode as p, getNodeValue as q, getPathType as r, safeParse as s, safeStringify as t, setNodeValue as u, type TrackingState as v, isObservable as w, type ListenerFn as x, type RecordValue as y, type ObservableValue as z };
|