@legendapp/state 3.0.0-alpha.3 → 3.0.0-alpha.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +831 -1
- package/LICENSE +21 -1
- package/README.md +141 -1
- package/babel.js +0 -2
- package/babel.mjs +0 -2
- 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 +2066 -0
- package/config.mjs +2064 -0
- package/helpers/trackHistory.js +2 -2
- package/helpers/trackHistory.mjs +2 -2
- package/index.d.mts +25 -302
- package/index.d.ts +25 -302
- package/index.js +293 -322
- package/index.mjs +294 -321
- package/observableInterfaces-CZR3_8mM.d.mts +283 -0
- package/observableInterfaces-CZR3_8mM.d.ts +283 -0
- package/package.json +11 -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 +16 -6
- package/persist-plugins/indexeddb.mjs +16 -7
- 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 +18 -14
- package/react.d.ts +18 -14
- package/react.js +57 -32
- package/react.mjs +58 -33
- package/sync-plugins/crud.d.mts +21 -24
- package/sync-plugins/crud.d.ts +21 -24
- package/sync-plugins/crud.js +240 -139
- package/sync-plugins/crud.mjs +242 -141
- package/sync-plugins/fetch.js +12 -8
- package/sync-plugins/fetch.mjs +13 -9
- package/sync-plugins/firebase.d.mts +27 -0
- package/sync-plugins/firebase.d.ts +27 -0
- package/sync-plugins/firebase.js +373 -0
- package/sync-plugins/firebase.mjs +368 -0
- package/sync-plugins/keel.d.mts +27 -10
- package/sync-plugins/keel.d.ts +27 -10
- package/sync-plugins/keel.js +51 -32
- package/sync-plugins/keel.mjs +52 -33
- package/sync-plugins/supabase.d.mts +12 -7
- package/sync-plugins/supabase.d.ts +12 -7
- package/sync-plugins/supabase.js +24 -13
- package/sync-plugins/supabase.mjs +25 -14
- package/sync-plugins/tanstack-query.d.mts +2 -2
- package/sync-plugins/tanstack-query.d.ts +2 -2
- package/sync-plugins/tanstack-query.js +3 -2
- package/sync-plugins/tanstack-query.mjs +3 -2
- package/sync-plugins/tanstack-react-query.d.mts +1 -1
- package/sync-plugins/tanstack-react-query.d.ts +1 -1
- package/sync.d.mts +71 -197
- package/sync.d.ts +71 -197
- package/sync.js +465 -284
- package/sync.mjs +471 -290
- package/types/babel.d.ts +12 -1
- package/.DS_Store +0 -0
- /package/config/{enable_GetSet.d.mts → enable$GetSet.d.mts} +0 -0
- /package/config/{enable_GetSet.d.ts → enable$GetSet.d.ts} +0 -0
package/react.js
CHANGED
|
@@ -111,15 +111,6 @@ function useSelector(selector, options) {
|
|
|
111
111
|
const { subscribe, getVersion, run } = selectorFn;
|
|
112
112
|
value = run(selector);
|
|
113
113
|
index_js.useSyncExternalStore(subscribe, getVersion, getVersion);
|
|
114
|
-
if (options == null ? void 0 : options.suspense) {
|
|
115
|
-
if (state.isPromise(value) || !value && state.isObservable(selector) && state.syncState(selector).isLoaded.get() === false) {
|
|
116
|
-
if (React__default.default.use) {
|
|
117
|
-
React__default.default.use(value);
|
|
118
|
-
} else {
|
|
119
|
-
throw value;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
114
|
} catch (err) {
|
|
124
115
|
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && ((_a = err == null ? void 0 : err.message) == null ? void 0 : _a.includes("Rendered more"))) {
|
|
125
116
|
console.warn(
|
|
@@ -128,6 +119,17 @@ function useSelector(selector, options) {
|
|
|
128
119
|
}
|
|
129
120
|
throw err;
|
|
130
121
|
}
|
|
122
|
+
if (options == null ? void 0 : options.suspense) {
|
|
123
|
+
const isProm = state.isPromise(value);
|
|
124
|
+
if (state.isPromise(value) || !value && state.isObservable(selector)) {
|
|
125
|
+
const vProm = isProm ? value : state.when(selector);
|
|
126
|
+
if (React__default.default.use) {
|
|
127
|
+
React__default.default.use(vProm);
|
|
128
|
+
} else {
|
|
129
|
+
throw vProm;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
131
133
|
return value;
|
|
132
134
|
}
|
|
133
135
|
|
|
@@ -149,10 +151,10 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
149
151
|
if (component["__legend_proxied"])
|
|
150
152
|
return component;
|
|
151
153
|
let useForwardRef = false;
|
|
152
|
-
let
|
|
154
|
+
let useMemo4 = false;
|
|
153
155
|
let render = component;
|
|
154
156
|
if (ReactMemoSymbol && render["$$typeof"] === ReactMemoSymbol && render["type"]) {
|
|
155
|
-
|
|
157
|
+
useMemo4 = true;
|
|
156
158
|
render = render["type"];
|
|
157
159
|
}
|
|
158
160
|
if (ReactForwardRefSymbol && render["$$typeof"] === ReactForwardRefSymbol) {
|
|
@@ -233,7 +235,7 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
233
235
|
} else {
|
|
234
236
|
ret = proxy;
|
|
235
237
|
}
|
|
236
|
-
return observe3 ||
|
|
238
|
+
return observe3 || useMemo4 ? React.memo(ret) : ret;
|
|
237
239
|
}
|
|
238
240
|
function observer(component) {
|
|
239
241
|
return createReactiveComponent(component, true);
|
|
@@ -370,11 +372,11 @@ function configureReactive({
|
|
|
370
372
|
}
|
|
371
373
|
}
|
|
372
374
|
}
|
|
373
|
-
function Show({ if: if_, ifReady, else: else_, wrap, children }) {
|
|
375
|
+
function Show({ if: if_, ifReady, else: else_, $value, wrap, children }) {
|
|
374
376
|
const value = useSelector(if_ != null ? if_ : ifReady);
|
|
375
377
|
const show = ifReady !== void 0 ? state.isObservableValueReady(value) : value;
|
|
376
378
|
const child = useSelector(
|
|
377
|
-
show ? state.isFunction(children) ? () => children(value) : children : else_ != null ? else_ : null,
|
|
379
|
+
show ? state.isFunction(children) ? () => children($value ? $value.get() : value) : children : else_ != null ? else_ : null,
|
|
378
380
|
{ skipCheck: true }
|
|
379
381
|
);
|
|
380
382
|
return wrap ? React.createElement(wrap, void 0, child) : child;
|
|
@@ -389,20 +391,36 @@ function Switch({
|
|
|
389
391
|
const child = children[useSelector(value)];
|
|
390
392
|
return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
|
|
391
393
|
}
|
|
392
|
-
function
|
|
394
|
+
function useObservable(initialValue, deps) {
|
|
395
|
+
var _a;
|
|
396
|
+
const ref = React.useRef({});
|
|
397
|
+
ref.current.value = initialValue;
|
|
398
|
+
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
399
|
+
if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
|
|
400
|
+
const value = depsObs$ ? state.isFunction(initialValue) && initialValue.length === 1 ? (p) => {
|
|
401
|
+
depsObs$.get();
|
|
402
|
+
return ref.current.value(p);
|
|
403
|
+
} : () => {
|
|
404
|
+
depsObs$.get();
|
|
405
|
+
return state.computeSelector(ref.current.value);
|
|
406
|
+
} : initialValue;
|
|
407
|
+
ref.current.obs$ = state.observable(value);
|
|
408
|
+
}
|
|
409
|
+
if (depsObs$) {
|
|
410
|
+
depsObs$.set(deps);
|
|
411
|
+
}
|
|
412
|
+
return ref.current.obs$;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// src/react/useComputed.ts
|
|
416
|
+
function useComputed(get, set, deps) {
|
|
393
417
|
if (!deps && state.isArray(set)) {
|
|
394
418
|
deps = set;
|
|
395
419
|
set = void 0;
|
|
396
420
|
}
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
return React.useMemo(
|
|
401
|
-
() => state.computed(
|
|
402
|
-
() => state.isFunction(ref.current.compute) ? ref.current.compute() : ref.current.compute,
|
|
403
|
-
set ? (value) => ref.current.set(value) : void 0
|
|
404
|
-
),
|
|
405
|
-
deps || []
|
|
421
|
+
return useObservable(
|
|
422
|
+
set ? state.linked({ get, set: ({ value }) => set(value) }) : get,
|
|
423
|
+
deps
|
|
406
424
|
);
|
|
407
425
|
}
|
|
408
426
|
var useEffectOnce = (effect, deps) => {
|
|
@@ -442,13 +460,6 @@ function useMount(fn) {
|
|
|
442
460
|
}, []);
|
|
443
461
|
}
|
|
444
462
|
var useMountOnce = useMount;
|
|
445
|
-
function useObservable(initialValue) {
|
|
446
|
-
const ref = React.useRef();
|
|
447
|
-
if (!ref.current) {
|
|
448
|
-
ref.current = state.observable(initialValue);
|
|
449
|
-
}
|
|
450
|
-
return ref.current;
|
|
451
|
-
}
|
|
452
463
|
|
|
453
464
|
// src/react/useIsMounted.ts
|
|
454
465
|
function useIsMounted() {
|
|
@@ -484,8 +495,16 @@ function useObserve(selector, reactionOrOptions, options) {
|
|
|
484
495
|
} else {
|
|
485
496
|
options = reactionOrOptions;
|
|
486
497
|
}
|
|
498
|
+
const deps = options == null ? void 0 : options.deps;
|
|
499
|
+
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
500
|
+
if (depsObs$) {
|
|
501
|
+
depsObs$.set(deps);
|
|
502
|
+
}
|
|
487
503
|
const ref = React.useRef({});
|
|
488
|
-
ref.current.selector =
|
|
504
|
+
ref.current.selector = deps ? () => {
|
|
505
|
+
depsObs$ == null ? void 0 : depsObs$.get();
|
|
506
|
+
return state.computeSelector(selector);
|
|
507
|
+
} : selector;
|
|
489
508
|
ref.current.reaction = reaction;
|
|
490
509
|
if (!ref.current.dispose) {
|
|
491
510
|
ref.current.dispose = state.observe(
|
|
@@ -510,12 +529,18 @@ function useObserveEffect(selector, reactionOrOptions, options) {
|
|
|
510
529
|
} else {
|
|
511
530
|
options = reactionOrOptions;
|
|
512
531
|
}
|
|
532
|
+
const deps = options == null ? void 0 : options.deps;
|
|
533
|
+
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
534
|
+
if (depsObs$) {
|
|
535
|
+
depsObs$.set(deps);
|
|
536
|
+
}
|
|
513
537
|
const ref = React.useRef({ selector });
|
|
514
538
|
ref.current = { selector, reaction };
|
|
515
539
|
useMountOnce(
|
|
516
540
|
() => state.observe(
|
|
517
541
|
(e) => {
|
|
518
542
|
const { selector: selector2 } = ref.current;
|
|
543
|
+
depsObs$ == null ? void 0 : depsObs$.get();
|
|
519
544
|
return state.isFunction(selector2) ? selector2(e) : selector2;
|
|
520
545
|
},
|
|
521
546
|
(e) => {
|
package/react.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isFunction, isEmpty, observable, isPromise, isObservable,
|
|
1
|
+
import { isFunction, isEmpty, observable, isPromise, isObservable, when, computeSelector, isArray, isMap, isObservableValueReady, linked, observe, whenReady, internal, trackSelector, isPrimitive } from '@legendapp/state';
|
|
2
2
|
import React, { memo, forwardRef, createElement, useState, useContext, useMemo, useRef, useEffect, createContext, useCallback } from 'react';
|
|
3
3
|
import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';
|
|
4
4
|
|
|
@@ -105,15 +105,6 @@ function useSelector(selector, options) {
|
|
|
105
105
|
const { subscribe, getVersion, run } = selectorFn;
|
|
106
106
|
value = run(selector);
|
|
107
107
|
useSyncExternalStore(subscribe, getVersion, getVersion);
|
|
108
|
-
if (options == null ? void 0 : options.suspense) {
|
|
109
|
-
if (isPromise(value) || !value && isObservable(selector) && syncState(selector).isLoaded.get() === false) {
|
|
110
|
-
if (React.use) {
|
|
111
|
-
React.use(value);
|
|
112
|
-
} else {
|
|
113
|
-
throw value;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
108
|
} catch (err) {
|
|
118
109
|
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && ((_a = err == null ? void 0 : err.message) == null ? void 0 : _a.includes("Rendered more"))) {
|
|
119
110
|
console.warn(
|
|
@@ -122,6 +113,17 @@ function useSelector(selector, options) {
|
|
|
122
113
|
}
|
|
123
114
|
throw err;
|
|
124
115
|
}
|
|
116
|
+
if (options == null ? void 0 : options.suspense) {
|
|
117
|
+
const isProm = isPromise(value);
|
|
118
|
+
if (isPromise(value) || !value && isObservable(selector)) {
|
|
119
|
+
const vProm = isProm ? value : when(selector);
|
|
120
|
+
if (React.use) {
|
|
121
|
+
React.use(vProm);
|
|
122
|
+
} else {
|
|
123
|
+
throw vProm;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
125
127
|
return value;
|
|
126
128
|
}
|
|
127
129
|
|
|
@@ -143,10 +145,10 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
143
145
|
if (component["__legend_proxied"])
|
|
144
146
|
return component;
|
|
145
147
|
let useForwardRef = false;
|
|
146
|
-
let
|
|
148
|
+
let useMemo4 = false;
|
|
147
149
|
let render = component;
|
|
148
150
|
if (ReactMemoSymbol && render["$$typeof"] === ReactMemoSymbol && render["type"]) {
|
|
149
|
-
|
|
151
|
+
useMemo4 = true;
|
|
150
152
|
render = render["type"];
|
|
151
153
|
}
|
|
152
154
|
if (ReactForwardRefSymbol && render["$$typeof"] === ReactForwardRefSymbol) {
|
|
@@ -227,7 +229,7 @@ function createReactiveComponent(component, observe3, reactive2, bindKeys) {
|
|
|
227
229
|
} else {
|
|
228
230
|
ret = proxy;
|
|
229
231
|
}
|
|
230
|
-
return observe3 ||
|
|
232
|
+
return observe3 || useMemo4 ? memo(ret) : ret;
|
|
231
233
|
}
|
|
232
234
|
function observer(component) {
|
|
233
235
|
return createReactiveComponent(component, true);
|
|
@@ -364,11 +366,11 @@ function configureReactive({
|
|
|
364
366
|
}
|
|
365
367
|
}
|
|
366
368
|
}
|
|
367
|
-
function Show({ if: if_, ifReady, else: else_, wrap, children }) {
|
|
369
|
+
function Show({ if: if_, ifReady, else: else_, $value, wrap, children }) {
|
|
368
370
|
const value = useSelector(if_ != null ? if_ : ifReady);
|
|
369
371
|
const show = ifReady !== void 0 ? isObservableValueReady(value) : value;
|
|
370
372
|
const child = useSelector(
|
|
371
|
-
show ? isFunction(children) ? () => children(value) : children : else_ != null ? else_ : null,
|
|
373
|
+
show ? isFunction(children) ? () => children($value ? $value.get() : value) : children : else_ != null ? else_ : null,
|
|
372
374
|
{ skipCheck: true }
|
|
373
375
|
);
|
|
374
376
|
return wrap ? createElement(wrap, void 0, child) : child;
|
|
@@ -383,20 +385,36 @@ function Switch({
|
|
|
383
385
|
const child = children[useSelector(value)];
|
|
384
386
|
return (_b = child ? child() : (_a = children["default"]) == null ? void 0 : _a.call(children)) != null ? _b : null;
|
|
385
387
|
}
|
|
386
|
-
function
|
|
388
|
+
function useObservable(initialValue, deps) {
|
|
389
|
+
var _a;
|
|
390
|
+
const ref = useRef({});
|
|
391
|
+
ref.current.value = initialValue;
|
|
392
|
+
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
393
|
+
if (!((_a = ref.current) == null ? void 0 : _a.obs$)) {
|
|
394
|
+
const value = depsObs$ ? isFunction(initialValue) && initialValue.length === 1 ? (p) => {
|
|
395
|
+
depsObs$.get();
|
|
396
|
+
return ref.current.value(p);
|
|
397
|
+
} : () => {
|
|
398
|
+
depsObs$.get();
|
|
399
|
+
return computeSelector(ref.current.value);
|
|
400
|
+
} : initialValue;
|
|
401
|
+
ref.current.obs$ = observable(value);
|
|
402
|
+
}
|
|
403
|
+
if (depsObs$) {
|
|
404
|
+
depsObs$.set(deps);
|
|
405
|
+
}
|
|
406
|
+
return ref.current.obs$;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// src/react/useComputed.ts
|
|
410
|
+
function useComputed(get, set, deps) {
|
|
387
411
|
if (!deps && isArray(set)) {
|
|
388
412
|
deps = set;
|
|
389
413
|
set = void 0;
|
|
390
414
|
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
return useMemo(
|
|
395
|
-
() => computed(
|
|
396
|
-
() => isFunction(ref.current.compute) ? ref.current.compute() : ref.current.compute,
|
|
397
|
-
set ? (value) => ref.current.set(value) : void 0
|
|
398
|
-
),
|
|
399
|
-
deps || []
|
|
415
|
+
return useObservable(
|
|
416
|
+
set ? linked({ get, set: ({ value }) => set(value) }) : get,
|
|
417
|
+
deps
|
|
400
418
|
);
|
|
401
419
|
}
|
|
402
420
|
var useEffectOnce = (effect, deps) => {
|
|
@@ -436,13 +454,6 @@ function useMount(fn) {
|
|
|
436
454
|
}, []);
|
|
437
455
|
}
|
|
438
456
|
var useMountOnce = useMount;
|
|
439
|
-
function useObservable(initialValue) {
|
|
440
|
-
const ref = useRef();
|
|
441
|
-
if (!ref.current) {
|
|
442
|
-
ref.current = observable(initialValue);
|
|
443
|
-
}
|
|
444
|
-
return ref.current;
|
|
445
|
-
}
|
|
446
457
|
|
|
447
458
|
// src/react/useIsMounted.ts
|
|
448
459
|
function useIsMounted() {
|
|
@@ -478,8 +489,16 @@ function useObserve(selector, reactionOrOptions, options) {
|
|
|
478
489
|
} else {
|
|
479
490
|
options = reactionOrOptions;
|
|
480
491
|
}
|
|
492
|
+
const deps = options == null ? void 0 : options.deps;
|
|
493
|
+
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
494
|
+
if (depsObs$) {
|
|
495
|
+
depsObs$.set(deps);
|
|
496
|
+
}
|
|
481
497
|
const ref = useRef({});
|
|
482
|
-
ref.current.selector =
|
|
498
|
+
ref.current.selector = deps ? () => {
|
|
499
|
+
depsObs$ == null ? void 0 : depsObs$.get();
|
|
500
|
+
return computeSelector(selector);
|
|
501
|
+
} : selector;
|
|
483
502
|
ref.current.reaction = reaction;
|
|
484
503
|
if (!ref.current.dispose) {
|
|
485
504
|
ref.current.dispose = observe(
|
|
@@ -504,12 +523,18 @@ function useObserveEffect(selector, reactionOrOptions, options) {
|
|
|
504
523
|
} else {
|
|
505
524
|
options = reactionOrOptions;
|
|
506
525
|
}
|
|
526
|
+
const deps = options == null ? void 0 : options.deps;
|
|
527
|
+
const depsObs$ = deps ? useObservable(deps) : void 0;
|
|
528
|
+
if (depsObs$) {
|
|
529
|
+
depsObs$.set(deps);
|
|
530
|
+
}
|
|
507
531
|
const ref = useRef({ selector });
|
|
508
532
|
ref.current = { selector, reaction };
|
|
509
533
|
useMountOnce(
|
|
510
534
|
() => observe(
|
|
511
535
|
(e) => {
|
|
512
536
|
const { selector: selector2 } = ref.current;
|
|
537
|
+
depsObs$ == null ? void 0 : depsObs$.get();
|
|
513
538
|
return isFunction(selector2) ? selector2(e) : selector2;
|
|
514
539
|
},
|
|
515
540
|
(e) => {
|
package/sync-plugins/crud.d.mts
CHANGED
|
@@ -1,42 +1,43 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { WaitForSetFnParams, ObservableParam, ObservableEvent } from '@legendapp/state';
|
|
2
|
+
import { SyncedGetParams, SyncedOptions, SyncedSetParams, SyncedSubscribeParams } from '@legendapp/state/sync';
|
|
2
3
|
|
|
3
4
|
type CrudAsOption = 'Map' | 'object' | 'value' | 'array';
|
|
4
5
|
type CrudResult<T> = T;
|
|
5
|
-
interface SyncedCrudPropsSingle<TRemote, TLocal> {
|
|
6
|
-
get?: (params: SyncedGetParams) => Promise<CrudResult<TRemote | null>> | CrudResult<TRemote | null>;
|
|
6
|
+
interface SyncedCrudPropsSingle<TRemote extends object, TLocal> {
|
|
7
|
+
get?: (params: SyncedGetParams<TRemote>) => Promise<CrudResult<TRemote | null>> | CrudResult<TRemote | null>;
|
|
7
8
|
initial?: InitialValue<TLocal, 'value'>;
|
|
8
9
|
as?: never | 'value';
|
|
9
10
|
}
|
|
10
|
-
interface SyncedCrudPropsMany<TRemote, TLocal, TAsOption extends CrudAsOption> {
|
|
11
|
-
list?: (params: SyncedGetParams) => Promise<CrudResult<TRemote[] | null>> | CrudResult<TRemote[] | null>;
|
|
11
|
+
interface SyncedCrudPropsMany<TRemote extends object, TLocal, TAsOption extends CrudAsOption> {
|
|
12
|
+
list?: (params: SyncedGetParams<TRemote>) => Promise<CrudResult<TRemote[] | null>> | CrudResult<TRemote[] | null>;
|
|
12
13
|
as?: TAsOption;
|
|
13
14
|
initial?: InitialValue<TLocal, TAsOption>;
|
|
14
15
|
}
|
|
15
|
-
interface SyncedCrudOnSavedParams<TRemote extends {
|
|
16
|
-
id: string | number;
|
|
17
|
-
}, TLocal> {
|
|
16
|
+
interface SyncedCrudOnSavedParams<TRemote extends object, TLocal> {
|
|
18
17
|
saved: TLocal;
|
|
19
18
|
input: TRemote;
|
|
20
19
|
currentValue: TLocal;
|
|
21
20
|
isCreate: boolean;
|
|
22
21
|
props: SyncedCrudPropsBase<TRemote, TLocal>;
|
|
23
22
|
}
|
|
24
|
-
interface
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}, params: SyncedSetParams<TRemote>): Promise<CrudResult<any>>;
|
|
23
|
+
interface WaitForSetCrudFnParams<T> extends WaitForSetFnParams<T> {
|
|
24
|
+
type: 'create' | 'update' | 'delete';
|
|
25
|
+
}
|
|
26
|
+
interface SyncedCrudPropsBase<TRemote extends object, TLocal = TRemote> extends Omit<SyncedOptions<TRemote, TLocal>, 'get' | 'set' | 'initial' | 'subscribe' | 'waitForSet'> {
|
|
27
|
+
create?(input: TRemote, params: SyncedSetParams<TRemote>): Promise<CrudResult<TRemote> | null | undefined | void>;
|
|
28
|
+
update?(input: Partial<TRemote>, params: SyncedSetParams<TRemote>): Promise<CrudResult<Partial<TRemote> | null | undefined | void>>;
|
|
29
|
+
delete?(input: TRemote, params: SyncedSetParams<TRemote>): Promise<any>;
|
|
32
30
|
onSaved?(params: SyncedCrudOnSavedParams<TRemote, TLocal>): Partial<TLocal> | void;
|
|
33
|
-
|
|
31
|
+
fieldId?: string;
|
|
34
32
|
fieldUpdatedAt?: string;
|
|
35
33
|
fieldCreatedAt?: string;
|
|
36
34
|
fieldDeleted?: string;
|
|
35
|
+
fieldDeletedList?: string;
|
|
37
36
|
updatePartial?: boolean;
|
|
38
37
|
changesSince?: 'all' | 'last-sync';
|
|
39
38
|
generateId?: () => string | number;
|
|
39
|
+
subscribe?: (params: SyncedSubscribeParams<TRemote[]>) => (() => void) | void;
|
|
40
|
+
waitForSet?: ((params: WaitForSetCrudFnParams<TLocal>) => any) | Promise<any> | ObservableParam<any> | ObservableEvent;
|
|
40
41
|
}
|
|
41
42
|
type InitialValue<TLocal, TAsOption extends CrudAsOption> = TAsOption extends 'Map' ? Map<string | number, TLocal> : TAsOption extends 'object' ? Record<string | number, TLocal> : TAsOption extends 'value' ? TLocal : TLocal[];
|
|
42
43
|
type SyncedCrudReturnType<TLocal, TAsOption extends CrudAsOption> = TAsOption extends 'Map' ? Map<TLocal extends {
|
|
@@ -44,11 +45,7 @@ type SyncedCrudReturnType<TLocal, TAsOption extends CrudAsOption> = TAsOption ex
|
|
|
44
45
|
} ? number : string, TLocal> : TAsOption extends 'object' ? Record<TLocal extends {
|
|
45
46
|
id: number;
|
|
46
47
|
} ? number : string, TLocal> : TAsOption extends 'value' ? TLocal : TLocal[];
|
|
47
|
-
declare function syncedCrud<TRemote extends
|
|
48
|
-
|
|
49
|
-
}, TLocal = TRemote>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsSingle<TRemote, TLocal>): SyncedCrudReturnType<TLocal, 'value'>;
|
|
50
|
-
declare function syncedCrud<TRemote extends {
|
|
51
|
-
id: string | number;
|
|
52
|
-
}, TLocal = TRemote, TAsOption extends CrudAsOption = 'object'>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsMany<TRemote, TLocal, TAsOption>): SyncedCrudReturnType<TLocal, Exclude<TAsOption, 'value'>>;
|
|
48
|
+
declare function syncedCrud<TRemote extends object, TLocal = TRemote>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsSingle<TRemote, TLocal>): SyncedCrudReturnType<TLocal, 'value'>;
|
|
49
|
+
declare function syncedCrud<TRemote extends object, TLocal = TRemote, TAsOption extends CrudAsOption = 'object'>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsMany<TRemote, TLocal, TAsOption>): SyncedCrudReturnType<TLocal, Exclude<TAsOption, 'value'>>;
|
|
53
50
|
|
|
54
|
-
export { type CrudAsOption, type CrudResult, type SyncedCrudOnSavedParams, type SyncedCrudPropsBase, type SyncedCrudPropsMany, type SyncedCrudPropsSingle, type SyncedCrudReturnType, syncedCrud };
|
|
51
|
+
export { type CrudAsOption, type CrudResult, type SyncedCrudOnSavedParams, type SyncedCrudPropsBase, type SyncedCrudPropsMany, type SyncedCrudPropsSingle, type SyncedCrudReturnType, type WaitForSetCrudFnParams, syncedCrud };
|
package/sync-plugins/crud.d.ts
CHANGED
|
@@ -1,42 +1,43 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { WaitForSetFnParams, ObservableParam, ObservableEvent } from '@legendapp/state';
|
|
2
|
+
import { SyncedGetParams, SyncedOptions, SyncedSetParams, SyncedSubscribeParams } from '@legendapp/state/sync';
|
|
2
3
|
|
|
3
4
|
type CrudAsOption = 'Map' | 'object' | 'value' | 'array';
|
|
4
5
|
type CrudResult<T> = T;
|
|
5
|
-
interface SyncedCrudPropsSingle<TRemote, TLocal> {
|
|
6
|
-
get?: (params: SyncedGetParams) => Promise<CrudResult<TRemote | null>> | CrudResult<TRemote | null>;
|
|
6
|
+
interface SyncedCrudPropsSingle<TRemote extends object, TLocal> {
|
|
7
|
+
get?: (params: SyncedGetParams<TRemote>) => Promise<CrudResult<TRemote | null>> | CrudResult<TRemote | null>;
|
|
7
8
|
initial?: InitialValue<TLocal, 'value'>;
|
|
8
9
|
as?: never | 'value';
|
|
9
10
|
}
|
|
10
|
-
interface SyncedCrudPropsMany<TRemote, TLocal, TAsOption extends CrudAsOption> {
|
|
11
|
-
list?: (params: SyncedGetParams) => Promise<CrudResult<TRemote[] | null>> | CrudResult<TRemote[] | null>;
|
|
11
|
+
interface SyncedCrudPropsMany<TRemote extends object, TLocal, TAsOption extends CrudAsOption> {
|
|
12
|
+
list?: (params: SyncedGetParams<TRemote>) => Promise<CrudResult<TRemote[] | null>> | CrudResult<TRemote[] | null>;
|
|
12
13
|
as?: TAsOption;
|
|
13
14
|
initial?: InitialValue<TLocal, TAsOption>;
|
|
14
15
|
}
|
|
15
|
-
interface SyncedCrudOnSavedParams<TRemote extends {
|
|
16
|
-
id: string | number;
|
|
17
|
-
}, TLocal> {
|
|
16
|
+
interface SyncedCrudOnSavedParams<TRemote extends object, TLocal> {
|
|
18
17
|
saved: TLocal;
|
|
19
18
|
input: TRemote;
|
|
20
19
|
currentValue: TLocal;
|
|
21
20
|
isCreate: boolean;
|
|
22
21
|
props: SyncedCrudPropsBase<TRemote, TLocal>;
|
|
23
22
|
}
|
|
24
|
-
interface
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}, params: SyncedSetParams<TRemote>): Promise<CrudResult<any>>;
|
|
23
|
+
interface WaitForSetCrudFnParams<T> extends WaitForSetFnParams<T> {
|
|
24
|
+
type: 'create' | 'update' | 'delete';
|
|
25
|
+
}
|
|
26
|
+
interface SyncedCrudPropsBase<TRemote extends object, TLocal = TRemote> extends Omit<SyncedOptions<TRemote, TLocal>, 'get' | 'set' | 'initial' | 'subscribe' | 'waitForSet'> {
|
|
27
|
+
create?(input: TRemote, params: SyncedSetParams<TRemote>): Promise<CrudResult<TRemote> | null | undefined | void>;
|
|
28
|
+
update?(input: Partial<TRemote>, params: SyncedSetParams<TRemote>): Promise<CrudResult<Partial<TRemote> | null | undefined | void>>;
|
|
29
|
+
delete?(input: TRemote, params: SyncedSetParams<TRemote>): Promise<any>;
|
|
32
30
|
onSaved?(params: SyncedCrudOnSavedParams<TRemote, TLocal>): Partial<TLocal> | void;
|
|
33
|
-
|
|
31
|
+
fieldId?: string;
|
|
34
32
|
fieldUpdatedAt?: string;
|
|
35
33
|
fieldCreatedAt?: string;
|
|
36
34
|
fieldDeleted?: string;
|
|
35
|
+
fieldDeletedList?: string;
|
|
37
36
|
updatePartial?: boolean;
|
|
38
37
|
changesSince?: 'all' | 'last-sync';
|
|
39
38
|
generateId?: () => string | number;
|
|
39
|
+
subscribe?: (params: SyncedSubscribeParams<TRemote[]>) => (() => void) | void;
|
|
40
|
+
waitForSet?: ((params: WaitForSetCrudFnParams<TLocal>) => any) | Promise<any> | ObservableParam<any> | ObservableEvent;
|
|
40
41
|
}
|
|
41
42
|
type InitialValue<TLocal, TAsOption extends CrudAsOption> = TAsOption extends 'Map' ? Map<string | number, TLocal> : TAsOption extends 'object' ? Record<string | number, TLocal> : TAsOption extends 'value' ? TLocal : TLocal[];
|
|
42
43
|
type SyncedCrudReturnType<TLocal, TAsOption extends CrudAsOption> = TAsOption extends 'Map' ? Map<TLocal extends {
|
|
@@ -44,11 +45,7 @@ type SyncedCrudReturnType<TLocal, TAsOption extends CrudAsOption> = TAsOption ex
|
|
|
44
45
|
} ? number : string, TLocal> : TAsOption extends 'object' ? Record<TLocal extends {
|
|
45
46
|
id: number;
|
|
46
47
|
} ? number : string, TLocal> : TAsOption extends 'value' ? TLocal : TLocal[];
|
|
47
|
-
declare function syncedCrud<TRemote extends
|
|
48
|
-
|
|
49
|
-
}, TLocal = TRemote>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsSingle<TRemote, TLocal>): SyncedCrudReturnType<TLocal, 'value'>;
|
|
50
|
-
declare function syncedCrud<TRemote extends {
|
|
51
|
-
id: string | number;
|
|
52
|
-
}, TLocal = TRemote, TAsOption extends CrudAsOption = 'object'>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsMany<TRemote, TLocal, TAsOption>): SyncedCrudReturnType<TLocal, Exclude<TAsOption, 'value'>>;
|
|
48
|
+
declare function syncedCrud<TRemote extends object, TLocal = TRemote>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsSingle<TRemote, TLocal>): SyncedCrudReturnType<TLocal, 'value'>;
|
|
49
|
+
declare function syncedCrud<TRemote extends object, TLocal = TRemote, TAsOption extends CrudAsOption = 'object'>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsMany<TRemote, TLocal, TAsOption>): SyncedCrudReturnType<TLocal, Exclude<TAsOption, 'value'>>;
|
|
53
50
|
|
|
54
|
-
export { type CrudAsOption, type CrudResult, type SyncedCrudOnSavedParams, type SyncedCrudPropsBase, type SyncedCrudPropsMany, type SyncedCrudPropsSingle, type SyncedCrudReturnType, syncedCrud };
|
|
51
|
+
export { type CrudAsOption, type CrudResult, type SyncedCrudOnSavedParams, type SyncedCrudPropsBase, type SyncedCrudPropsMany, type SyncedCrudPropsSingle, type SyncedCrudReturnType, type WaitForSetCrudFnParams, syncedCrud };
|