tinybase 2.0.0-beta.0 → 2.0.0-beta.3
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/lib/checkpoints.d.ts +4 -3
- package/lib/checkpoints.js +1 -1
- package/lib/checkpoints.js.gz +0 -0
- package/lib/common.js +1 -1
- package/lib/common.js.gz +0 -0
- package/lib/debug/checkpoints.d.ts +4 -3
- package/lib/debug/checkpoints.js +13 -16
- package/lib/debug/common.js +4 -1
- package/lib/debug/indexes.d.ts +4 -2
- package/lib/debug/indexes.js +13 -15
- package/lib/debug/metrics.d.ts +1 -1
- package/lib/debug/metrics.js +13 -16
- package/lib/debug/persisters.d.ts +6 -0
- package/lib/debug/queries.d.ts +249 -299
- package/lib/debug/queries.js +67 -192
- package/lib/debug/relationships.d.ts +6 -5
- package/lib/debug/relationships.js +13 -16
- package/lib/debug/store.d.ts +386 -86
- package/lib/debug/store.js +278 -216
- package/lib/debug/tinybase.js +318 -390
- package/lib/debug/ui-react.d.ts +4320 -1796
- package/lib/debug/ui-react.js +380 -98
- package/lib/indexes.d.ts +4 -2
- package/lib/indexes.js +1 -1
- package/lib/indexes.js.gz +0 -0
- package/lib/metrics.d.ts +1 -1
- package/lib/metrics.js +1 -1
- package/lib/metrics.js.gz +0 -0
- package/lib/persisters.d.ts +6 -0
- package/lib/queries.d.ts +249 -299
- package/lib/queries.js +1 -1
- package/lib/queries.js.gz +0 -0
- package/lib/relationships.d.ts +6 -5
- package/lib/relationships.js +1 -1
- package/lib/relationships.js.gz +0 -0
- package/lib/store.d.ts +386 -86
- package/lib/store.js +1 -1
- package/lib/store.js.gz +0 -0
- package/lib/tinybase.js +1 -1
- package/lib/tinybase.js.gz +0 -0
- package/lib/ui-react.d.ts +4320 -1796
- package/lib/ui-react.js +1 -1
- package/lib/ui-react.js.gz +0 -0
- package/lib/umd/checkpoints.js +1 -1
- package/lib/umd/checkpoints.js.gz +0 -0
- package/lib/umd/common.js +1 -1
- package/lib/umd/common.js.gz +0 -0
- package/lib/umd/indexes.js +1 -1
- package/lib/umd/indexes.js.gz +0 -0
- package/lib/umd/metrics.js +1 -1
- package/lib/umd/metrics.js.gz +0 -0
- package/lib/umd/queries.js +1 -1
- package/lib/umd/queries.js.gz +0 -0
- package/lib/umd/relationships.js +1 -1
- package/lib/umd/relationships.js.gz +0 -0
- package/lib/umd/store.js +1 -1
- package/lib/umd/store.js.gz +0 -0
- package/lib/umd/tinybase.js +1 -1
- package/lib/umd/tinybase.js.gz +0 -0
- package/lib/umd/ui-react.js +1 -1
- package/lib/umd/ui-react.js.gz +0 -0
- package/package.json +26 -26
- package/readme.md +2 -2
package/lib/checkpoints.d.ts
CHANGED
|
@@ -93,12 +93,13 @@ export type CheckpointListener = (
|
|
|
93
93
|
*/
|
|
94
94
|
export type CheckpointsListenerStats = {
|
|
95
95
|
/**
|
|
96
|
-
* The number of
|
|
97
|
-
* object.
|
|
96
|
+
* The number of CheckpointIdsListener functions registered with the
|
|
97
|
+
* Checkpoints object.
|
|
98
98
|
*/
|
|
99
99
|
checkpointIds?: number;
|
|
100
100
|
/**
|
|
101
|
-
* The number of
|
|
101
|
+
* The number of CheckpointListener functions registered with the Checkpoints
|
|
102
|
+
* object.
|
|
102
103
|
*/
|
|
103
104
|
checkpoint?: number;
|
|
104
105
|
};
|
package/lib/checkpoints.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=(e,t)=>e.includes(t),t=(e,t)=>e.forEach(t),n=e=>e.length,r=e=>0==n(e),o=(e,...t)=>e.push(...t),s=e=>e.pop(),
|
|
1
|
+
const e=(e,t)=>e.includes(t),t=(e,t)=>e.forEach(t),n=e=>e.length,r=e=>0==n(e),o=(e,...t)=>e.push(...t),s=e=>e.pop(),l=e=>null==e,c=(e,t,n)=>l(e)?n?.():t(e),i=(e,t)=>e?.has(t)??!1,a=e=>l(e)||0==(e=>e.size)(e),d=(e,t)=>e?.forEach(t),u=(e,t)=>e?.delete(t),h=e=>new Map(e),p=(e,t)=>e?.get(t),C=(e,t,n)=>l(n)?(u(e,t),e):e?.set(t,n),g=(e,t,n)=>(i(e,t)||C(e,t,n()),p(e,t)),k=(e,t,r,o,s=0)=>c((r?g:p)(e,t[s],s>n(t)-2?r:h),(l=>{if(s>n(t)-2)return o?.(l)&&C(e,t[s]),l;const c=k(l,t,r,o,s+1);return a(l)&&C(e,t[s]),c})),f=e=>new Set(e),v=e=>{let r,i=0;const g=[],v=h();return[(t,n,o)=>{r??=e();const l=s(g)??""+i++;var c,a;return C(v,l,[t,n,o]),c=k(n,o??[""],f),a=l,c?.add(a),l},(e,s,...l)=>t(((e,r=[""])=>{const s=[],l=(e,c)=>c==n(r)?o(s,e):null===r[c]?d(e,(e=>l(e,c+1))):t([r[c],null],(t=>l(p(e,t),c+1)));return l(e,0),s})(e,s),(e=>d(e,(e=>p(v,e)[0](r,...s??[],...l))))),e=>c(p(v,e),(([,t,r])=>(k(t,r??[""],void 0,(t=>(u(t,e),a(t)?1:0))),C(v,e),n(g)<1e3&&o(g,e),r))),(e,o,s)=>c(p(v,e),(([e,,c=[]])=>{const i=(...a)=>{const d=n(a);d==n(c)?e(r,...a,...s(a)):l(c[d])?t(o[d](...a),(e=>i(...a,e))):i(...a,c[d])};i()}))]},L=Object.freeze,w=(e=>{const t=new WeakMap;return n=>(t.has(n)||t.set(n,e(n)),t.get(n))})((u=>{let k,f,w,S=100,z=h(),E=1;const I=h(),M=h(),[b,j,x]=v((()=>Q)),y=h(),B=h(),F=[],O=[],T=(e,t)=>{E=0,u.transaction((()=>d(p(y,t),((t,n)=>d(t,((t,r)=>d(t,((t,o)=>((e,t,n,r,o)=>l(o)?e.delCell(t,n,r,!0):e.setCell(t,n,r,o))(u,n,r,o,t[e]))))))))),E=1},W=e=>{C(y,e),C(B,e),j(M,[e])},m=(e,r)=>t(((e,t)=>e.splice(0,t))(e,r??n(e)),W),q=()=>m(F,n(F)-S),A=u.addCellListener(null,null,null,((e,t,n,r,l,i)=>{if(E){c(k,(()=>{o(F,k),q(),m(O),k=void 0,w=1}));const e=g(z,t,h),d=g(e,n,h),u=g(d,r,(()=>[i,void 0]));u[1]=l,u[0]===l&&a(C(d,r))&&a(C(e,n))&&a(C(z,t))&&(k=s(F),w=1),J()}})),D=(e="")=>(l(k)&&(k=""+f++,C(y,k,z),N(k,e),z=h(),w=1),k),G=()=>{r(F)||(O.unshift(D()),T(0,k),k=s(F),w=1)},H=()=>{r(O)||(o(F,k),k=O.shift(),T(1,k),w=1)},J=()=>{w&&(j(I),w=0)},K=e=>{const t=D(e);return J(),t},N=(e,t)=>(P(e)&&p(B,e)!==t&&(C(B,e,t),j(M,[e])),Q),P=e=>i(y,e),Q={setSize:e=>(S=e,q(),Q),addCheckpoint:K,setCheckpoint:N,getStore:()=>u,getCheckpointIds:()=>[[...F],k,[...O]],forEachCheckpoint:e=>{return t=e,d(B,((e,n)=>t(n,e)));var t},hasCheckpoint:P,getCheckpoint:e=>p(B,e),goBackward:()=>(G(),J(),Q),goForward:()=>(H(),J(),Q),goTo:t=>{const n=e(F,t)?G:e(O,t)?H:null;for(;!l(n)&&t!=k;)n();return J(),Q},addCheckpointIdsListener:e=>b(e,I),addCheckpointListener:(e,t)=>b(t,M,[e]),delListener:e=>(x(e),Q),clear:()=>(m(F),m(O),l(k)||W(k),k=void 0,f=0,K(),Q),destroy:()=>{u.delListener(A)},getListenerStats:()=>({})};return L(Q.clear())}));export{w as createCheckpoints};
|
package/lib/checkpoints.js.gz
CHANGED
|
Binary file
|
package/lib/common.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const o=(o,t)=>o<t?-1:1;export{o as defaultSorter};
|
|
1
|
+
const o=(o,t)=>o<t?-1:1,t=o=>""+o;export{o as defaultSorter,t as id};
|
package/lib/common.js.gz
CHANGED
|
Binary file
|
|
@@ -93,12 +93,13 @@ export type CheckpointListener = (
|
|
|
93
93
|
*/
|
|
94
94
|
export type CheckpointsListenerStats = {
|
|
95
95
|
/**
|
|
96
|
-
* The number of
|
|
97
|
-
* object.
|
|
96
|
+
* The number of CheckpointIdsListener functions registered with the
|
|
97
|
+
* Checkpoints object.
|
|
98
98
|
*/
|
|
99
99
|
checkpointIds?: number;
|
|
100
100
|
/**
|
|
101
|
-
* The number of
|
|
101
|
+
* The number of CheckpointListener functions registered with the Checkpoints
|
|
102
|
+
* object.
|
|
102
103
|
*/
|
|
103
104
|
checkpoint?: number;
|
|
104
105
|
};
|
package/lib/debug/checkpoints.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const EMPTY_STRING = '';
|
|
2
2
|
|
|
3
3
|
const arrayHas = (array, value) => array.includes(value);
|
|
4
|
-
const arrayEvery = (array, cb) => array.every(cb);
|
|
5
4
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
6
5
|
const arrayLength = (array) => array.length;
|
|
7
6
|
const arrayIsEmpty = (array) => arrayLength(array) == 0;
|
|
@@ -32,7 +31,7 @@ const mapSet = (map, key, value) =>
|
|
|
32
31
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
33
32
|
const mapEnsure = (map, key, getDefaultValue) => {
|
|
34
33
|
if (!collHas(map, key)) {
|
|
35
|
-
map
|
|
34
|
+
mapSet(map, key, getDefaultValue());
|
|
36
35
|
}
|
|
37
36
|
return mapGet(map, key);
|
|
38
37
|
};
|
|
@@ -72,32 +71,32 @@ const getCreateFunction = (getFunction) => {
|
|
|
72
71
|
};
|
|
73
72
|
|
|
74
73
|
const getWildcardedLeaves = (deepIdSet, path = [EMPTY_STRING]) => {
|
|
75
|
-
const
|
|
76
|
-
const deep = (
|
|
74
|
+
const leaves = [];
|
|
75
|
+
const deep = (node, p) =>
|
|
77
76
|
p == arrayLength(path)
|
|
78
|
-
? arrayPush(
|
|
79
|
-
:
|
|
77
|
+
? arrayPush(leaves, node)
|
|
78
|
+
: path[p] === null
|
|
79
|
+
? collForEach(node, (node2) => deep(node2, p + 1))
|
|
80
|
+
: arrayForEach([path[p], null], (id) => deep(mapGet(node, id), p + 1));
|
|
80
81
|
deep(deepIdSet, 0);
|
|
81
|
-
return
|
|
82
|
+
return leaves;
|
|
82
83
|
};
|
|
83
84
|
const getListenerFunctions = (getThing) => {
|
|
84
85
|
let thing;
|
|
85
86
|
let nextId = 0;
|
|
86
87
|
const listenerPool = [];
|
|
87
88
|
const allListeners = mapNew();
|
|
88
|
-
const addListener = (listener, idSetNode,
|
|
89
|
+
const addListener = (listener, idSetNode, path) => {
|
|
89
90
|
thing ??= getThing();
|
|
90
91
|
const id = arrayPop(listenerPool) ?? EMPTY_STRING + nextId++;
|
|
91
|
-
mapSet(allListeners, id, [listener, idSetNode,
|
|
92
|
-
setAdd(visitTree(idSetNode,
|
|
92
|
+
mapSet(allListeners, id, [listener, idSetNode, path]);
|
|
93
|
+
setAdd(visitTree(idSetNode, path ?? [EMPTY_STRING], setNew), id);
|
|
93
94
|
return id;
|
|
94
95
|
};
|
|
95
96
|
const callListeners = (idSetNode, ids, ...extraArgs) =>
|
|
96
97
|
arrayForEach(getWildcardedLeaves(idSetNode, ids), (set) =>
|
|
97
98
|
collForEach(set, (id) =>
|
|
98
|
-
|
|
99
|
-
listener(thing, ...(ids ?? []), ...extraArgs),
|
|
100
|
-
),
|
|
99
|
+
mapGet(allListeners, id)[0](thing, ...(ids ?? []), ...extraArgs),
|
|
101
100
|
),
|
|
102
101
|
);
|
|
103
102
|
const delListener = (id) =>
|
|
@@ -112,8 +111,6 @@ const getListenerFunctions = (getThing) => {
|
|
|
112
111
|
}
|
|
113
112
|
return idOrNulls;
|
|
114
113
|
});
|
|
115
|
-
const hasListeners = (idSetNode, ids) =>
|
|
116
|
-
!arrayEvery(getWildcardedLeaves(idSetNode, ids), isUndefined);
|
|
117
114
|
const callListener = (id, idNullGetters, extraArgsGetter) =>
|
|
118
115
|
ifNotUndefined(mapGet(allListeners, id), ([listener, , idOrNulls = []]) => {
|
|
119
116
|
const callWithIds = (...ids) => {
|
|
@@ -128,7 +125,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
128
125
|
};
|
|
129
126
|
callWithIds();
|
|
130
127
|
});
|
|
131
|
-
return [addListener, callListeners, delListener,
|
|
128
|
+
return [addListener, callListeners, delListener, callListener];
|
|
132
129
|
};
|
|
133
130
|
|
|
134
131
|
const object = Object;
|
package/lib/debug/common.js
CHANGED
package/lib/debug/indexes.d.ts
CHANGED
|
@@ -128,11 +128,13 @@ export type SliceRowIdsListener = (
|
|
|
128
128
|
*/
|
|
129
129
|
export type IndexesListenerStats = {
|
|
130
130
|
/**
|
|
131
|
-
* The number of
|
|
131
|
+
* The number of SlideIdsListener functions registered with the Indexes
|
|
132
|
+
* object.
|
|
132
133
|
*/
|
|
133
134
|
sliceIds?: number;
|
|
134
135
|
/**
|
|
135
|
-
* The number of
|
|
136
|
+
* The number of SliceRowIdsListener functions registered with the Indexes
|
|
137
|
+
* object.
|
|
136
138
|
*/
|
|
137
139
|
sliceRowIds?: number;
|
|
138
140
|
};
|
package/lib/debug/indexes.js
CHANGED
|
@@ -42,7 +42,7 @@ const mapSet = (map, key, value) =>
|
|
|
42
42
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
43
43
|
const mapEnsure = (map, key, getDefaultValue) => {
|
|
44
44
|
if (!collHas(map, key)) {
|
|
45
|
-
map
|
|
45
|
+
mapSet(map, key, getDefaultValue());
|
|
46
46
|
}
|
|
47
47
|
return mapGet(map, key);
|
|
48
48
|
};
|
|
@@ -225,32 +225,32 @@ const getCreateFunction = (getFunction) => {
|
|
|
225
225
|
const defaultSorter = (sortKey1, sortKey2) => (sortKey1 < sortKey2 ? -1 : 1);
|
|
226
226
|
|
|
227
227
|
const getWildcardedLeaves = (deepIdSet, path = [EMPTY_STRING]) => {
|
|
228
|
-
const
|
|
229
|
-
const deep = (
|
|
228
|
+
const leaves = [];
|
|
229
|
+
const deep = (node, p) =>
|
|
230
230
|
p == arrayLength(path)
|
|
231
|
-
? arrayPush(
|
|
232
|
-
:
|
|
231
|
+
? arrayPush(leaves, node)
|
|
232
|
+
: path[p] === null
|
|
233
|
+
? collForEach(node, (node2) => deep(node2, p + 1))
|
|
234
|
+
: arrayForEach([path[p], null], (id) => deep(mapGet(node, id), p + 1));
|
|
233
235
|
deep(deepIdSet, 0);
|
|
234
|
-
return
|
|
236
|
+
return leaves;
|
|
235
237
|
};
|
|
236
238
|
const getListenerFunctions = (getThing) => {
|
|
237
239
|
let thing;
|
|
238
240
|
let nextId = 0;
|
|
239
241
|
const listenerPool = [];
|
|
240
242
|
const allListeners = mapNew();
|
|
241
|
-
const addListener = (listener, idSetNode,
|
|
243
|
+
const addListener = (listener, idSetNode, path) => {
|
|
242
244
|
thing ??= getThing();
|
|
243
245
|
const id = arrayPop(listenerPool) ?? EMPTY_STRING + nextId++;
|
|
244
|
-
mapSet(allListeners, id, [listener, idSetNode,
|
|
245
|
-
setAdd(visitTree(idSetNode,
|
|
246
|
+
mapSet(allListeners, id, [listener, idSetNode, path]);
|
|
247
|
+
setAdd(visitTree(idSetNode, path ?? [EMPTY_STRING], setNew), id);
|
|
246
248
|
return id;
|
|
247
249
|
};
|
|
248
250
|
const callListeners = (idSetNode, ids, ...extraArgs) =>
|
|
249
251
|
arrayForEach(getWildcardedLeaves(idSetNode, ids), (set) =>
|
|
250
252
|
collForEach(set, (id) =>
|
|
251
|
-
|
|
252
|
-
listener(thing, ...(ids ?? []), ...extraArgs),
|
|
253
|
-
),
|
|
253
|
+
mapGet(allListeners, id)[0](thing, ...(ids ?? []), ...extraArgs),
|
|
254
254
|
),
|
|
255
255
|
);
|
|
256
256
|
const delListener = (id) =>
|
|
@@ -265,8 +265,6 @@ const getListenerFunctions = (getThing) => {
|
|
|
265
265
|
}
|
|
266
266
|
return idOrNulls;
|
|
267
267
|
});
|
|
268
|
-
const hasListeners = (idSetNode, ids) =>
|
|
269
|
-
!arrayEvery(getWildcardedLeaves(idSetNode, ids), isUndefined);
|
|
270
268
|
const callListener = (id, idNullGetters, extraArgsGetter) =>
|
|
271
269
|
ifNotUndefined(mapGet(allListeners, id), ([listener, , idOrNulls = []]) => {
|
|
272
270
|
const callWithIds = (...ids) => {
|
|
@@ -281,7 +279,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
281
279
|
};
|
|
282
280
|
callWithIds();
|
|
283
281
|
});
|
|
284
|
-
return [addListener, callListeners, delListener,
|
|
282
|
+
return [addListener, callListeners, delListener, callListener];
|
|
285
283
|
};
|
|
286
284
|
|
|
287
285
|
const object = Object;
|
package/lib/debug/metrics.d.ts
CHANGED
|
@@ -186,7 +186,7 @@ export type MetricListener = (
|
|
|
186
186
|
*/
|
|
187
187
|
export type MetricsListenerStats = {
|
|
188
188
|
/**
|
|
189
|
-
* The number of
|
|
189
|
+
* The number of MetricListener functions registered with the Metrics object.
|
|
190
190
|
*/
|
|
191
191
|
metric?: number;
|
|
192
192
|
};
|
package/lib/debug/metrics.js
CHANGED
|
@@ -7,7 +7,6 @@ const AVG = 'avg';
|
|
|
7
7
|
const MIN = 'min';
|
|
8
8
|
const MAX = 'max';
|
|
9
9
|
|
|
10
|
-
const arrayEvery = (array, cb) => array.every(cb);
|
|
11
10
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
12
11
|
const arraySum = (array) => arrayReduce(array, (i, j) => i + j, 0);
|
|
13
12
|
const arrayLength = (array) => array.length;
|
|
@@ -46,7 +45,7 @@ const mapSet = (map, key, value) =>
|
|
|
46
45
|
isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
|
|
47
46
|
const mapEnsure = (map, key, getDefaultValue) => {
|
|
48
47
|
if (!collHas(map, key)) {
|
|
49
|
-
map
|
|
48
|
+
mapSet(map, key, getDefaultValue());
|
|
50
49
|
}
|
|
51
50
|
return mapGet(map, key);
|
|
52
51
|
};
|
|
@@ -296,32 +295,32 @@ const getCreateFunction = (getFunction) => {
|
|
|
296
295
|
};
|
|
297
296
|
|
|
298
297
|
const getWildcardedLeaves = (deepIdSet, path = [EMPTY_STRING]) => {
|
|
299
|
-
const
|
|
300
|
-
const deep = (
|
|
298
|
+
const leaves = [];
|
|
299
|
+
const deep = (node, p) =>
|
|
301
300
|
p == arrayLength(path)
|
|
302
|
-
? arrayPush(
|
|
303
|
-
:
|
|
301
|
+
? arrayPush(leaves, node)
|
|
302
|
+
: path[p] === null
|
|
303
|
+
? collForEach(node, (node2) => deep(node2, p + 1))
|
|
304
|
+
: arrayForEach([path[p], null], (id) => deep(mapGet(node, id), p + 1));
|
|
304
305
|
deep(deepIdSet, 0);
|
|
305
|
-
return
|
|
306
|
+
return leaves;
|
|
306
307
|
};
|
|
307
308
|
const getListenerFunctions = (getThing) => {
|
|
308
309
|
let thing;
|
|
309
310
|
let nextId = 0;
|
|
310
311
|
const listenerPool = [];
|
|
311
312
|
const allListeners = mapNew();
|
|
312
|
-
const addListener = (listener, idSetNode,
|
|
313
|
+
const addListener = (listener, idSetNode, path) => {
|
|
313
314
|
thing ??= getThing();
|
|
314
315
|
const id = arrayPop(listenerPool) ?? EMPTY_STRING + nextId++;
|
|
315
|
-
mapSet(allListeners, id, [listener, idSetNode,
|
|
316
|
-
setAdd(visitTree(idSetNode,
|
|
316
|
+
mapSet(allListeners, id, [listener, idSetNode, path]);
|
|
317
|
+
setAdd(visitTree(idSetNode, path ?? [EMPTY_STRING], setNew), id);
|
|
317
318
|
return id;
|
|
318
319
|
};
|
|
319
320
|
const callListeners = (idSetNode, ids, ...extraArgs) =>
|
|
320
321
|
arrayForEach(getWildcardedLeaves(idSetNode, ids), (set) =>
|
|
321
322
|
collForEach(set, (id) =>
|
|
322
|
-
|
|
323
|
-
listener(thing, ...(ids ?? []), ...extraArgs),
|
|
324
|
-
),
|
|
323
|
+
mapGet(allListeners, id)[0](thing, ...(ids ?? []), ...extraArgs),
|
|
325
324
|
),
|
|
326
325
|
);
|
|
327
326
|
const delListener = (id) =>
|
|
@@ -336,8 +335,6 @@ const getListenerFunctions = (getThing) => {
|
|
|
336
335
|
}
|
|
337
336
|
return idOrNulls;
|
|
338
337
|
});
|
|
339
|
-
const hasListeners = (idSetNode, ids) =>
|
|
340
|
-
!arrayEvery(getWildcardedLeaves(idSetNode, ids), isUndefined);
|
|
341
338
|
const callListener = (id, idNullGetters, extraArgsGetter) =>
|
|
342
339
|
ifNotUndefined(mapGet(allListeners, id), ([listener, , idOrNulls = []]) => {
|
|
343
340
|
const callWithIds = (...ids) => {
|
|
@@ -352,7 +349,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
352
349
|
};
|
|
353
350
|
callWithIds();
|
|
354
351
|
});
|
|
355
|
-
return [addListener, callListeners, delListener,
|
|
352
|
+
return [addListener, callListeners, delListener, callListener];
|
|
356
353
|
};
|
|
357
354
|
|
|
358
355
|
const object = Object;
|
|
@@ -40,7 +40,13 @@ import {Callback} from './common.d';
|
|
|
40
40
|
* @category Development
|
|
41
41
|
*/
|
|
42
42
|
export type PersisterStats = {
|
|
43
|
+
/**
|
|
44
|
+
* The number of times data has been loaded.
|
|
45
|
+
*/
|
|
43
46
|
loads?: number;
|
|
47
|
+
/**
|
|
48
|
+
* The number of times data has been saved.
|
|
49
|
+
*/
|
|
44
50
|
saves?: number;
|
|
45
51
|
};
|
|
46
52
|
|