@legendapp/state 3.0.0-alpha.2 → 3.0.0-alpha.20
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/helpers/trackHistory.js +2 -2
- package/helpers/trackHistory.mjs +2 -2
- package/index.d.mts +45 -32
- package/index.d.ts +45 -32
- package/index.js +234 -156
- package/index.mjs +234 -156
- package/package.json +6 -1
- package/persist-plugins/async-storage.d.mts +2 -2
- package/persist-plugins/async-storage.d.ts +2 -2
- package/persist-plugins/indexeddb.js +1 -1
- package/persist-plugins/indexeddb.mjs +1 -1
- package/react.d.mts +17 -14
- package/react.d.ts +17 -14
- package/react.js +55 -30
- package/react.mjs +56 -31
- package/sync-plugins/_transformObjectFields.d.mts +31 -0
- package/sync-plugins/_transformObjectFields.d.ts +31 -0
- package/sync-plugins/_transformObjectFields.js +114 -0
- package/sync-plugins/_transformObjectFields.mjs +110 -0
- package/sync-plugins/crud.d.mts +14 -23
- package/sync-plugins/crud.d.ts +14 -23
- package/sync-plugins/crud.js +194 -129
- package/sync-plugins/crud.mjs +195 -130
- package/sync-plugins/firebase.d.mts +26 -0
- package/sync-plugins/firebase.d.ts +26 -0
- package/sync-plugins/firebase.js +365 -0
- package/sync-plugins/firebase.mjs +360 -0
- package/sync-plugins/keel.d.mts +24 -8
- package/sync-plugins/keel.d.ts +24 -8
- package/sync-plugins/keel.js +32 -16
- package/sync-plugins/keel.mjs +32 -16
- package/sync-plugins/supabase.d.mts +1 -1
- package/sync-plugins/supabase.d.ts +1 -1
- package/sync-plugins/supabase.js +5 -4
- package/sync-plugins/supabase.mjs +6 -5
- 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 +38 -185
- package/sync.d.ts +38 -185
- package/sync.js +354 -296
- package/sync.mjs +356 -297
- 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
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var state = require('@legendapp/state');
|
|
4
|
+
|
|
5
|
+
// src/sync-plugins/_transformObjectFields.ts
|
|
6
|
+
var validateMap;
|
|
7
|
+
function transformObjectFields(dataIn, map) {
|
|
8
|
+
if (process.env.NODE_ENV === "development") {
|
|
9
|
+
validateMap(map);
|
|
10
|
+
}
|
|
11
|
+
let ret = dataIn;
|
|
12
|
+
if (dataIn) {
|
|
13
|
+
if (dataIn === state.symbolDelete)
|
|
14
|
+
return dataIn;
|
|
15
|
+
if (state.isString(dataIn)) {
|
|
16
|
+
return map[dataIn];
|
|
17
|
+
}
|
|
18
|
+
ret = {};
|
|
19
|
+
const dict = Object.keys(map).length === 1 && map["_dict"];
|
|
20
|
+
for (const key in dataIn) {
|
|
21
|
+
let v = dataIn[key];
|
|
22
|
+
if (dict) {
|
|
23
|
+
ret[key] = transformObjectFields(v, dict);
|
|
24
|
+
} else {
|
|
25
|
+
const mapped = map[key];
|
|
26
|
+
if (mapped === void 0) {
|
|
27
|
+
if (key !== "@") {
|
|
28
|
+
ret[key] = v;
|
|
29
|
+
if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
|
|
30
|
+
console.error("A fatal field transformation error has occurred", key, dataIn, map);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
} else if (mapped !== null) {
|
|
34
|
+
if (v !== void 0 && v !== null) {
|
|
35
|
+
if (map[key + "_val"]) {
|
|
36
|
+
const mapChild = map[key + "_val"];
|
|
37
|
+
if (state.isArray(v)) {
|
|
38
|
+
v = v.map((vChild) => mapChild[vChild]);
|
|
39
|
+
} else {
|
|
40
|
+
v = mapChild[v];
|
|
41
|
+
}
|
|
42
|
+
} else if (map[key + "_arr"] && state.isArray(v)) {
|
|
43
|
+
const mapChild = map[key + "_arr"];
|
|
44
|
+
v = v.map((vChild) => transformObjectFields(vChild, mapChild));
|
|
45
|
+
} else if (state.isObject(v)) {
|
|
46
|
+
if (map[key + "_obj"]) {
|
|
47
|
+
v = transformObjectFields(v, map[key + "_obj"]);
|
|
48
|
+
} else if (map[key + "_dict"]) {
|
|
49
|
+
const mapChild = map[key + "_dict"];
|
|
50
|
+
const out = {};
|
|
51
|
+
for (const keyChild in v) {
|
|
52
|
+
out[keyChild] = transformObjectFields(v[keyChild], mapChild);
|
|
53
|
+
}
|
|
54
|
+
v = out;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
ret[mapped] = v;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return ret;
|
|
64
|
+
}
|
|
65
|
+
var invertedMaps = /* @__PURE__ */ new WeakMap();
|
|
66
|
+
function invertFieldMap(obj) {
|
|
67
|
+
const existing = invertedMaps.get(obj);
|
|
68
|
+
if (existing)
|
|
69
|
+
return existing;
|
|
70
|
+
const target = {};
|
|
71
|
+
for (const key in obj) {
|
|
72
|
+
const val = obj[key];
|
|
73
|
+
if (key === "_dict") {
|
|
74
|
+
target[key] = invertFieldMap(val);
|
|
75
|
+
} else if (key.endsWith("_obj") || key.endsWith("_dict") || key.endsWith("_arr") || key.endsWith("_val")) {
|
|
76
|
+
const keyMapped = obj[key.replace(/_obj|_dict|_arr|_val$/, "")];
|
|
77
|
+
const suffix = key.match(/_obj|_dict|_arr|_val$/)[0];
|
|
78
|
+
target[keyMapped + suffix] = invertFieldMap(val);
|
|
79
|
+
} else if (typeof val === "string") {
|
|
80
|
+
target[val] = key;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
invertedMaps.set(obj, target);
|
|
84
|
+
return target;
|
|
85
|
+
}
|
|
86
|
+
var fieldTransformToTransform = (fieldTransform) => ({
|
|
87
|
+
load(value) {
|
|
88
|
+
const inverted = invertFieldMap(fieldTransform);
|
|
89
|
+
return transformObjectFields(value, inverted);
|
|
90
|
+
},
|
|
91
|
+
save(value) {
|
|
92
|
+
return transformObjectFields(value, fieldTransform);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
if (process.env.NODE_ENV === "development") {
|
|
96
|
+
validateMap = function(record) {
|
|
97
|
+
const values = Object.values(record).filter((value) => {
|
|
98
|
+
if (state.isObject(value)) {
|
|
99
|
+
validateMap(value);
|
|
100
|
+
} else {
|
|
101
|
+
return state.isString(value);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
const uniques = Array.from(new Set(values));
|
|
105
|
+
if (values.length !== uniques.length) {
|
|
106
|
+
console.error("Field transform map has duplicate values", record, values.length, uniques.length);
|
|
107
|
+
}
|
|
108
|
+
return record;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
exports.fieldTransformToTransform = fieldTransformToTransform;
|
|
113
|
+
exports.invertFieldMap = invertFieldMap;
|
|
114
|
+
exports.transformObjectFields = transformObjectFields;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { symbolDelete, isString, isArray, isObject } from '@legendapp/state';
|
|
2
|
+
|
|
3
|
+
// src/sync-plugins/_transformObjectFields.ts
|
|
4
|
+
var validateMap;
|
|
5
|
+
function transformObjectFields(dataIn, map) {
|
|
6
|
+
if (process.env.NODE_ENV === "development") {
|
|
7
|
+
validateMap(map);
|
|
8
|
+
}
|
|
9
|
+
let ret = dataIn;
|
|
10
|
+
if (dataIn) {
|
|
11
|
+
if (dataIn === symbolDelete)
|
|
12
|
+
return dataIn;
|
|
13
|
+
if (isString(dataIn)) {
|
|
14
|
+
return map[dataIn];
|
|
15
|
+
}
|
|
16
|
+
ret = {};
|
|
17
|
+
const dict = Object.keys(map).length === 1 && map["_dict"];
|
|
18
|
+
for (const key in dataIn) {
|
|
19
|
+
let v = dataIn[key];
|
|
20
|
+
if (dict) {
|
|
21
|
+
ret[key] = transformObjectFields(v, dict);
|
|
22
|
+
} else {
|
|
23
|
+
const mapped = map[key];
|
|
24
|
+
if (mapped === void 0) {
|
|
25
|
+
if (key !== "@") {
|
|
26
|
+
ret[key] = v;
|
|
27
|
+
if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
|
|
28
|
+
console.error("A fatal field transformation error has occurred", key, dataIn, map);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} else if (mapped !== null) {
|
|
32
|
+
if (v !== void 0 && v !== null) {
|
|
33
|
+
if (map[key + "_val"]) {
|
|
34
|
+
const mapChild = map[key + "_val"];
|
|
35
|
+
if (isArray(v)) {
|
|
36
|
+
v = v.map((vChild) => mapChild[vChild]);
|
|
37
|
+
} else {
|
|
38
|
+
v = mapChild[v];
|
|
39
|
+
}
|
|
40
|
+
} else if (map[key + "_arr"] && isArray(v)) {
|
|
41
|
+
const mapChild = map[key + "_arr"];
|
|
42
|
+
v = v.map((vChild) => transformObjectFields(vChild, mapChild));
|
|
43
|
+
} else if (isObject(v)) {
|
|
44
|
+
if (map[key + "_obj"]) {
|
|
45
|
+
v = transformObjectFields(v, map[key + "_obj"]);
|
|
46
|
+
} else if (map[key + "_dict"]) {
|
|
47
|
+
const mapChild = map[key + "_dict"];
|
|
48
|
+
const out = {};
|
|
49
|
+
for (const keyChild in v) {
|
|
50
|
+
out[keyChild] = transformObjectFields(v[keyChild], mapChild);
|
|
51
|
+
}
|
|
52
|
+
v = out;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
ret[mapped] = v;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return ret;
|
|
62
|
+
}
|
|
63
|
+
var invertedMaps = /* @__PURE__ */ new WeakMap();
|
|
64
|
+
function invertFieldMap(obj) {
|
|
65
|
+
const existing = invertedMaps.get(obj);
|
|
66
|
+
if (existing)
|
|
67
|
+
return existing;
|
|
68
|
+
const target = {};
|
|
69
|
+
for (const key in obj) {
|
|
70
|
+
const val = obj[key];
|
|
71
|
+
if (key === "_dict") {
|
|
72
|
+
target[key] = invertFieldMap(val);
|
|
73
|
+
} else if (key.endsWith("_obj") || key.endsWith("_dict") || key.endsWith("_arr") || key.endsWith("_val")) {
|
|
74
|
+
const keyMapped = obj[key.replace(/_obj|_dict|_arr|_val$/, "")];
|
|
75
|
+
const suffix = key.match(/_obj|_dict|_arr|_val$/)[0];
|
|
76
|
+
target[keyMapped + suffix] = invertFieldMap(val);
|
|
77
|
+
} else if (typeof val === "string") {
|
|
78
|
+
target[val] = key;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
invertedMaps.set(obj, target);
|
|
82
|
+
return target;
|
|
83
|
+
}
|
|
84
|
+
var fieldTransformToTransform = (fieldTransform) => ({
|
|
85
|
+
load(value) {
|
|
86
|
+
const inverted = invertFieldMap(fieldTransform);
|
|
87
|
+
return transformObjectFields(value, inverted);
|
|
88
|
+
},
|
|
89
|
+
save(value) {
|
|
90
|
+
return transformObjectFields(value, fieldTransform);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
if (process.env.NODE_ENV === "development") {
|
|
94
|
+
validateMap = function(record) {
|
|
95
|
+
const values = Object.values(record).filter((value) => {
|
|
96
|
+
if (isObject(value)) {
|
|
97
|
+
validateMap(value);
|
|
98
|
+
} else {
|
|
99
|
+
return isString(value);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
const uniques = Array.from(new Set(values));
|
|
103
|
+
if (values.length !== uniques.length) {
|
|
104
|
+
console.error("Field transform map has duplicate values", record, values.length, uniques.length);
|
|
105
|
+
}
|
|
106
|
+
return record;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export { fieldTransformToTransform, invertFieldMap, transformObjectFields };
|
package/sync-plugins/crud.d.mts
CHANGED
|
@@ -1,42 +1,37 @@
|
|
|
1
|
-
import { SyncedGetParams, SyncedOptions, SyncedSetParams } from '@legendapp/state/sync';
|
|
1
|
+
import { SyncedGetParams, SyncedOptions, SyncedSetParams, SyncedSubscribeParams } from '@legendapp/state/sync';
|
|
2
2
|
|
|
3
3
|
type CrudAsOption = 'Map' | 'object' | 'value' | 'array';
|
|
4
4
|
type CrudResult<T> = T;
|
|
5
|
-
interface SyncedCrudPropsSingle<TRemote, TLocal> {
|
|
6
|
-
get?: (params: SyncedGetParams) => Promise<CrudResult<TRemote | null>> | CrudResult<TRemote | null>;
|
|
5
|
+
interface SyncedCrudPropsSingle<TRemote extends object, TLocal> {
|
|
6
|
+
get?: (params: SyncedGetParams<TRemote>) => Promise<CrudResult<TRemote | null>> | CrudResult<TRemote | null>;
|
|
7
7
|
initial?: InitialValue<TLocal, 'value'>;
|
|
8
8
|
as?: never | 'value';
|
|
9
9
|
}
|
|
10
|
-
interface SyncedCrudPropsMany<TRemote, TLocal, TAsOption extends CrudAsOption> {
|
|
11
|
-
list?: (params: SyncedGetParams) => Promise<CrudResult<TRemote[] | null>> | CrudResult<TRemote[] | null>;
|
|
10
|
+
interface SyncedCrudPropsMany<TRemote extends object, TLocal, TAsOption extends CrudAsOption> {
|
|
11
|
+
list?: (params: SyncedGetParams<TRemote>) => Promise<CrudResult<TRemote[] | null>> | CrudResult<TRemote[] | null>;
|
|
12
12
|
as?: TAsOption;
|
|
13
13
|
initial?: InitialValue<TLocal, TAsOption>;
|
|
14
14
|
}
|
|
15
|
-
interface SyncedCrudOnSavedParams<TRemote extends {
|
|
16
|
-
id: string | number;
|
|
17
|
-
}, TLocal> {
|
|
15
|
+
interface SyncedCrudOnSavedParams<TRemote extends object, TLocal> {
|
|
18
16
|
saved: TLocal;
|
|
19
17
|
input: TRemote;
|
|
20
18
|
currentValue: TLocal;
|
|
21
19
|
isCreate: boolean;
|
|
22
20
|
props: SyncedCrudPropsBase<TRemote, TLocal>;
|
|
23
21
|
}
|
|
24
|
-
interface SyncedCrudPropsBase<TRemote extends {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
update?(input: Partial<TRemote>, params: SyncedSetParams<TRemote>): Promise<CrudResult<Partial<TRemote> | null | undefined>>;
|
|
29
|
-
delete?(input: {
|
|
30
|
-
id: TRemote['id'];
|
|
31
|
-
}, params: SyncedSetParams<TRemote>): Promise<CrudResult<any>>;
|
|
22
|
+
interface SyncedCrudPropsBase<TRemote extends object, TLocal = TRemote> extends Omit<SyncedOptions<TRemote, TLocal>, 'get' | 'set' | 'initial' | 'subscribe'> {
|
|
23
|
+
create?(input: TRemote, params: SyncedSetParams<TRemote>): Promise<CrudResult<TRemote> | null | undefined | void>;
|
|
24
|
+
update?(input: Partial<TRemote>, params: SyncedSetParams<TRemote>): Promise<CrudResult<Partial<TRemote> | null | undefined | void>>;
|
|
25
|
+
delete?(input: TRemote, params: SyncedSetParams<TRemote>): Promise<CrudResult<any>>;
|
|
32
26
|
onSaved?(params: SyncedCrudOnSavedParams<TRemote, TLocal>): Partial<TLocal> | void;
|
|
33
|
-
|
|
27
|
+
fieldId?: string;
|
|
34
28
|
fieldUpdatedAt?: string;
|
|
35
29
|
fieldCreatedAt?: string;
|
|
36
30
|
fieldDeleted?: string;
|
|
37
31
|
updatePartial?: boolean;
|
|
38
32
|
changesSince?: 'all' | 'last-sync';
|
|
39
33
|
generateId?: () => string | number;
|
|
34
|
+
subscribe?: (params: SyncedSubscribeParams<TRemote[]>) => (() => void) | void;
|
|
40
35
|
}
|
|
41
36
|
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
37
|
type SyncedCrudReturnType<TLocal, TAsOption extends CrudAsOption> = TAsOption extends 'Map' ? Map<TLocal extends {
|
|
@@ -44,11 +39,7 @@ type SyncedCrudReturnType<TLocal, TAsOption extends CrudAsOption> = TAsOption ex
|
|
|
44
39
|
} ? number : string, TLocal> : TAsOption extends 'object' ? Record<TLocal extends {
|
|
45
40
|
id: number;
|
|
46
41
|
} ? 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'>>;
|
|
42
|
+
declare function syncedCrud<TRemote extends object, TLocal = TRemote>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsSingle<TRemote, TLocal>): SyncedCrudReturnType<TLocal, 'value'>;
|
|
43
|
+
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
44
|
|
|
54
45
|
export { type CrudAsOption, type CrudResult, type SyncedCrudOnSavedParams, type SyncedCrudPropsBase, type SyncedCrudPropsMany, type SyncedCrudPropsSingle, type SyncedCrudReturnType, syncedCrud };
|
package/sync-plugins/crud.d.ts
CHANGED
|
@@ -1,42 +1,37 @@
|
|
|
1
|
-
import { SyncedGetParams, SyncedOptions, SyncedSetParams } from '@legendapp/state/sync';
|
|
1
|
+
import { SyncedGetParams, SyncedOptions, SyncedSetParams, SyncedSubscribeParams } from '@legendapp/state/sync';
|
|
2
2
|
|
|
3
3
|
type CrudAsOption = 'Map' | 'object' | 'value' | 'array';
|
|
4
4
|
type CrudResult<T> = T;
|
|
5
|
-
interface SyncedCrudPropsSingle<TRemote, TLocal> {
|
|
6
|
-
get?: (params: SyncedGetParams) => Promise<CrudResult<TRemote | null>> | CrudResult<TRemote | null>;
|
|
5
|
+
interface SyncedCrudPropsSingle<TRemote extends object, TLocal> {
|
|
6
|
+
get?: (params: SyncedGetParams<TRemote>) => Promise<CrudResult<TRemote | null>> | CrudResult<TRemote | null>;
|
|
7
7
|
initial?: InitialValue<TLocal, 'value'>;
|
|
8
8
|
as?: never | 'value';
|
|
9
9
|
}
|
|
10
|
-
interface SyncedCrudPropsMany<TRemote, TLocal, TAsOption extends CrudAsOption> {
|
|
11
|
-
list?: (params: SyncedGetParams) => Promise<CrudResult<TRemote[] | null>> | CrudResult<TRemote[] | null>;
|
|
10
|
+
interface SyncedCrudPropsMany<TRemote extends object, TLocal, TAsOption extends CrudAsOption> {
|
|
11
|
+
list?: (params: SyncedGetParams<TRemote>) => Promise<CrudResult<TRemote[] | null>> | CrudResult<TRemote[] | null>;
|
|
12
12
|
as?: TAsOption;
|
|
13
13
|
initial?: InitialValue<TLocal, TAsOption>;
|
|
14
14
|
}
|
|
15
|
-
interface SyncedCrudOnSavedParams<TRemote extends {
|
|
16
|
-
id: string | number;
|
|
17
|
-
}, TLocal> {
|
|
15
|
+
interface SyncedCrudOnSavedParams<TRemote extends object, TLocal> {
|
|
18
16
|
saved: TLocal;
|
|
19
17
|
input: TRemote;
|
|
20
18
|
currentValue: TLocal;
|
|
21
19
|
isCreate: boolean;
|
|
22
20
|
props: SyncedCrudPropsBase<TRemote, TLocal>;
|
|
23
21
|
}
|
|
24
|
-
interface SyncedCrudPropsBase<TRemote extends {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
update?(input: Partial<TRemote>, params: SyncedSetParams<TRemote>): Promise<CrudResult<Partial<TRemote> | null | undefined>>;
|
|
29
|
-
delete?(input: {
|
|
30
|
-
id: TRemote['id'];
|
|
31
|
-
}, params: SyncedSetParams<TRemote>): Promise<CrudResult<any>>;
|
|
22
|
+
interface SyncedCrudPropsBase<TRemote extends object, TLocal = TRemote> extends Omit<SyncedOptions<TRemote, TLocal>, 'get' | 'set' | 'initial' | 'subscribe'> {
|
|
23
|
+
create?(input: TRemote, params: SyncedSetParams<TRemote>): Promise<CrudResult<TRemote> | null | undefined | void>;
|
|
24
|
+
update?(input: Partial<TRemote>, params: SyncedSetParams<TRemote>): Promise<CrudResult<Partial<TRemote> | null | undefined | void>>;
|
|
25
|
+
delete?(input: TRemote, params: SyncedSetParams<TRemote>): Promise<CrudResult<any>>;
|
|
32
26
|
onSaved?(params: SyncedCrudOnSavedParams<TRemote, TLocal>): Partial<TLocal> | void;
|
|
33
|
-
|
|
27
|
+
fieldId?: string;
|
|
34
28
|
fieldUpdatedAt?: string;
|
|
35
29
|
fieldCreatedAt?: string;
|
|
36
30
|
fieldDeleted?: string;
|
|
37
31
|
updatePartial?: boolean;
|
|
38
32
|
changesSince?: 'all' | 'last-sync';
|
|
39
33
|
generateId?: () => string | number;
|
|
34
|
+
subscribe?: (params: SyncedSubscribeParams<TRemote[]>) => (() => void) | void;
|
|
40
35
|
}
|
|
41
36
|
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
37
|
type SyncedCrudReturnType<TLocal, TAsOption extends CrudAsOption> = TAsOption extends 'Map' ? Map<TLocal extends {
|
|
@@ -44,11 +39,7 @@ type SyncedCrudReturnType<TLocal, TAsOption extends CrudAsOption> = TAsOption ex
|
|
|
44
39
|
} ? number : string, TLocal> : TAsOption extends 'object' ? Record<TLocal extends {
|
|
45
40
|
id: number;
|
|
46
41
|
} ? 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'>>;
|
|
42
|
+
declare function syncedCrud<TRemote extends object, TLocal = TRemote>(props: SyncedCrudPropsBase<TRemote, TLocal> & SyncedCrudPropsSingle<TRemote, TLocal>): SyncedCrudReturnType<TLocal, 'value'>;
|
|
43
|
+
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
44
|
|
|
54
45
|
export { type CrudAsOption, type CrudResult, type SyncedCrudOnSavedParams, type SyncedCrudPropsBase, type SyncedCrudPropsMany, type SyncedCrudPropsSingle, type SyncedCrudReturnType, syncedCrud };
|