@signalium/query 1.0.8 → 1.0.10
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 +19 -0
- package/dist/cjs/EntityMap.js +20 -1
- package/dist/cjs/EntityMap.js.map +1 -1
- package/dist/cjs/QueryClient.js +27 -3
- package/dist/cjs/QueryClient.js.map +1 -1
- package/dist/cjs/QueryResult.js +410 -33
- package/dist/cjs/QueryResult.js.map +1 -1
- package/dist/cjs/QueryStore.js +78 -5
- package/dist/cjs/QueryStore.js.map +1 -1
- package/dist/cjs/errors.js +6 -0
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/parseEntities.js +14 -2
- package/dist/cjs/parseEntities.js.map +1 -1
- package/dist/cjs/proxy.js +22 -5
- package/dist/cjs/proxy.js.map +1 -1
- package/dist/cjs/query.js +64 -1
- package/dist/cjs/query.js.map +1 -1
- package/dist/cjs/react/use-query.js.map +1 -1
- package/dist/cjs/stores/async.js.map +1 -1
- package/dist/cjs/stores/sync.js.map +1 -1
- package/dist/cjs/typeDefs.js +136 -3
- package/dist/cjs/typeDefs.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/EntityMap.d.ts +3 -1
- package/dist/esm/EntityMap.d.ts.map +1 -1
- package/dist/esm/EntityMap.js +20 -1
- package/dist/esm/EntityMap.js.map +1 -1
- package/dist/esm/QueryClient.d.ts +47 -12
- package/dist/esm/QueryClient.d.ts.map +1 -1
- package/dist/esm/QueryClient.js +25 -3
- package/dist/esm/QueryClient.js.map +1 -1
- package/dist/esm/QueryResult.d.ts +34 -6
- package/dist/esm/QueryResult.d.ts.map +1 -1
- package/dist/esm/QueryResult.js +414 -37
- package/dist/esm/QueryResult.js.map +1 -1
- package/dist/esm/QueryStore.d.ts +17 -9
- package/dist/esm/QueryStore.d.ts.map +1 -1
- package/dist/esm/QueryStore.js +75 -4
- package/dist/esm/QueryStore.js.map +1 -1
- package/dist/esm/errors.d.ts.map +1 -1
- package/dist/esm/errors.js +6 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/parseEntities.d.ts.map +1 -1
- package/dist/esm/parseEntities.js +14 -2
- package/dist/esm/parseEntities.js.map +1 -1
- package/dist/esm/proxy.d.ts +1 -0
- package/dist/esm/proxy.d.ts.map +1 -1
- package/dist/esm/proxy.js +22 -6
- package/dist/esm/proxy.js.map +1 -1
- package/dist/esm/query.d.ts +27 -11
- package/dist/esm/query.d.ts.map +1 -1
- package/dist/esm/query.js +64 -1
- package/dist/esm/query.js.map +1 -1
- package/dist/esm/react/use-query.d.ts +2 -2
- package/dist/esm/react/use-query.d.ts.map +1 -1
- package/dist/esm/react/use-query.js.map +1 -1
- package/dist/esm/stores/async.d.ts +3 -3
- package/dist/esm/stores/async.d.ts.map +1 -1
- package/dist/esm/stores/async.js.map +1 -1
- package/dist/esm/stores/sync.d.ts +3 -3
- package/dist/esm/stores/sync.d.ts.map +1 -1
- package/dist/esm/stores/sync.js.map +1 -1
- package/dist/esm/typeDefs.d.ts +30 -0
- package/dist/esm/typeDefs.d.ts.map +1 -1
- package/dist/esm/typeDefs.js +134 -2
- package/dist/esm/typeDefs.js.map +1 -1
- package/dist/esm/types.d.ts +71 -23
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @signalium/query
|
|
2
2
|
|
|
3
|
+
## 1.0.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 24495ac: Add t.enum.caseInsensitive()
|
|
8
|
+
- 047d4dc: Allow all primitive types in search params
|
|
9
|
+
- 9b2c2f3: Add extend to Entity and Object typedefs
|
|
10
|
+
- c8fc4b8: Allow typenames to be optional on entities
|
|
11
|
+
- 0245106: Add streamOrphans and optimisticInserts
|
|
12
|
+
|
|
13
|
+
## 1.0.9
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- 9257412: Add t.optional/t.nullable/t.nullish
|
|
18
|
+
- Updated dependencies [7350348]
|
|
19
|
+
- Updated dependencies [c78b461]
|
|
20
|
+
- signalium@2.1.2
|
|
21
|
+
|
|
3
22
|
## 1.0.8
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
package/dist/cjs/EntityMap.js
CHANGED
|
@@ -11,6 +11,23 @@ class EntityStore {
|
|
|
11
11
|
getEntity(key) {
|
|
12
12
|
return this.map.get(key);
|
|
13
13
|
}
|
|
14
|
+
getNestedEntityRefIds(key, refIds) {
|
|
15
|
+
const record = this.getEntity(key);
|
|
16
|
+
if (record === undefined) {
|
|
17
|
+
throw new Error(`Entity ${key} not found when getting nested entity ref ids`);
|
|
18
|
+
}
|
|
19
|
+
refIds.add(key);
|
|
20
|
+
// Entangle the signal value. Whenever the signal value is updated, refIds
|
|
21
|
+
// will also be updated, so no need for a second signal.
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
23
|
+
record.signal.value;
|
|
24
|
+
if (record.entityRefs !== undefined) {
|
|
25
|
+
for (const ref of record.entityRefs) {
|
|
26
|
+
this.getNestedEntityRefIds(ref, refIds);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return refIds;
|
|
30
|
+
}
|
|
14
31
|
hydratePreloadedEntity(key, shape) {
|
|
15
32
|
const record = this.getEntity(key);
|
|
16
33
|
if (record === undefined) {
|
|
@@ -25,11 +42,12 @@ class EntityStore {
|
|
|
25
42
|
signal: (0, signalium_1.signal)(obj, { equals: false }),
|
|
26
43
|
cache: new Map(),
|
|
27
44
|
proxy: undefined,
|
|
45
|
+
entityRefs: undefined,
|
|
28
46
|
};
|
|
29
47
|
this.map.set(key, record);
|
|
30
48
|
return record;
|
|
31
49
|
}
|
|
32
|
-
setEntity(key, obj, shape) {
|
|
50
|
+
setEntity(key, obj, shape, entityRefs) {
|
|
33
51
|
let record = this.map.get(key);
|
|
34
52
|
if (record === undefined) {
|
|
35
53
|
record = this.setPreloadedEntity(key, obj);
|
|
@@ -39,6 +57,7 @@ class EntityStore {
|
|
|
39
57
|
record.signal.update(value => (0, proxy_js_1.mergeValues)(value, obj));
|
|
40
58
|
record.cache.clear();
|
|
41
59
|
}
|
|
60
|
+
record.entityRefs = entityRefs;
|
|
42
61
|
return record;
|
|
43
62
|
}
|
|
44
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":";;;AAAA,yCAA2C;AAE3C,yCAA4D;
|
|
1
|
+
{"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":";;;AAAA,yCAA2C;AAE3C,yCAA4D;AAY5D,MAAa,WAAW;IACd,GAAG,GAAG,IAAI,GAAG,EAAgD,CAAC;IAEtE,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,qBAAqB,CAAC,GAAW,EAAE,MAAmB;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,+CAA+C,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhB,0EAA0E;QAC1E,wDAAwD;QACxD,oEAAoE;QACpE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAEpB,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpC,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sBAAsB,CAAC,GAAW,EAAE,KAAgB;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,IAAA,4BAAiB,EAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAErD,OAAO,MAAsB,CAAC;IAChC,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,GAA4B;QAC1D,MAAM,MAAM,GAA0B;YACpC,GAAG;YACH,MAAM,EAAE,IAAA,kBAAM,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACtC,KAAK,EAAE,IAAI,GAAG,EAAE;YAChB,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,SAAS;SACtB,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,GAA4B,EAAE,KAAgB,EAAE,UAAwB;QAC7F,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAE3C,MAAM,CAAC,KAAK,GAAG,IAAA,4BAAiB,EAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,sBAAW,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAE/B,OAAO,MAAsB,CAAC;IAChC,CAAC;CACF;AA3ED,kCA2EC"}
|
package/dist/cjs/QueryClient.js
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.QueryClientContext = exports.QueryClient = exports.queryKeyFor = void 0;
|
|
16
|
+
exports.addOptimisticInsert = addOptimisticInsert;
|
|
17
|
+
exports.removeOptimisticInsert = removeOptimisticInsert;
|
|
16
18
|
const signalium_1 = require("signalium");
|
|
17
19
|
const utils_1 = require("signalium/utils");
|
|
18
20
|
const EntityMap_js_1 = require("./EntityMap.js");
|
|
@@ -45,9 +47,11 @@ class QueryClient {
|
|
|
45
47
|
getContext() {
|
|
46
48
|
return this.context;
|
|
47
49
|
}
|
|
48
|
-
saveQueryData(queryDef, queryKey, data, updatedAt, entityRefs) {
|
|
50
|
+
saveQueryData(queryDef, queryKey, data, updatedAt, entityRefs, extra) {
|
|
51
|
+
// Clone entityRefs to avoid mutation in setValue
|
|
52
|
+
const clonedRefs = entityRefs !== undefined ? new Set(entityRefs) : undefined;
|
|
49
53
|
// QueryStore expects the base definition structure
|
|
50
|
-
this.store.saveQuery(queryDef, queryKey, data, updatedAt,
|
|
54
|
+
this.store.saveQuery(queryDef, queryKey, data, updatedAt, clonedRefs, extra);
|
|
51
55
|
}
|
|
52
56
|
activateQuery(queryInstance) {
|
|
53
57
|
const { def, queryKey } = queryInstance;
|
|
@@ -80,10 +84,13 @@ class QueryClient {
|
|
|
80
84
|
return this.entityMap.hydratePreloadedEntity(key, shape);
|
|
81
85
|
}
|
|
82
86
|
saveEntity(key, obj, shape, entityRefs) {
|
|
83
|
-
const record = this.entityMap.setEntity(key, obj, shape);
|
|
87
|
+
const record = this.entityMap.setEntity(key, obj, shape, entityRefs);
|
|
84
88
|
this.store.saveEntity(key, obj, entityRefs);
|
|
85
89
|
return record;
|
|
86
90
|
}
|
|
91
|
+
getNestedEntityRefIds(key, refIds) {
|
|
92
|
+
return this.entityMap.getNestedEntityRefIds(key, refIds);
|
|
93
|
+
}
|
|
87
94
|
destroy() {
|
|
88
95
|
this.refetchManager.destroy();
|
|
89
96
|
this.memoryEvictionManager.destroy();
|
|
@@ -91,4 +98,21 @@ class QueryClient {
|
|
|
91
98
|
}
|
|
92
99
|
exports.QueryClient = QueryClient;
|
|
93
100
|
exports.QueryClientContext = (0, signalium_1.context)(undefined);
|
|
101
|
+
/**
|
|
102
|
+
* Add an optimistic insert to a query result.
|
|
103
|
+
* The insert will be automatically removed when:
|
|
104
|
+
* - The entity appears in a refetched response
|
|
105
|
+
* - The entity appears as a stream orphan
|
|
106
|
+
* - refetch() is called
|
|
107
|
+
*/
|
|
108
|
+
function addOptimisticInsert(query, insert) {
|
|
109
|
+
query.addOptimisticInsert(insert);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Remove an optimistic insert from a query result.
|
|
113
|
+
* This is a no-op if the insert has already been removed.
|
|
114
|
+
*/
|
|
115
|
+
function removeOptimisticInsert(query, insert) {
|
|
116
|
+
query.removeOptimisticInsert(insert);
|
|
117
|
+
}
|
|
94
118
|
//# sourceMappingURL=QueryClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryClient.js","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;
|
|
1
|
+
{"version":3,"file":"QueryClient.js","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}
|