fetchium 0.0.0 → 0.1.1
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 +250 -0
- package/README.md +287 -0
- package/dist/cjs/development/QueryClient-CLi3ONNM.js +2 -0
- package/dist/cjs/development/QueryClient-CLi3ONNM.js.map +1 -0
- package/dist/cjs/development/QueryController-BQA49OYU.js +2 -0
- package/dist/cjs/development/QueryController-BQA49OYU.js.map +1 -0
- package/dist/cjs/development/index.js +2 -0
- package/dist/cjs/development/index.js.map +1 -0
- package/dist/cjs/development/mutation-CikIl_6k.js +2 -0
- package/dist/cjs/development/mutation-CikIl_6k.js.map +1 -0
- package/dist/cjs/development/package.json +3 -0
- package/dist/cjs/development/react/index.js +2 -0
- package/dist/cjs/development/react/index.js.map +1 -0
- package/dist/cjs/development/rest/index.js +2 -0
- package/dist/cjs/development/rest/index.js.map +1 -0
- package/dist/cjs/development/shared-Ct5zKrt4.js +2 -0
- package/dist/cjs/development/shared-Ct5zKrt4.js.map +1 -0
- package/dist/cjs/development/stores/async.js +2 -0
- package/dist/cjs/development/stores/async.js.map +1 -0
- package/dist/cjs/development/stores/sync.js +2 -0
- package/dist/cjs/development/stores/sync.js.map +1 -0
- package/dist/cjs/development/subscriptions/polling.js +2 -0
- package/dist/cjs/development/subscriptions/polling.js.map +1 -0
- package/dist/cjs/development/topic/index.js +2 -0
- package/dist/cjs/development/topic/index.js.map +1 -0
- package/dist/cjs/production/QueryClient-N0MJmuHW.js +2 -0
- package/dist/cjs/production/QueryClient-N0MJmuHW.js.map +1 -0
- package/dist/cjs/production/QueryController-BQA49OYU.js +2 -0
- package/dist/cjs/production/QueryController-BQA49OYU.js.map +1 -0
- package/dist/cjs/production/index.js +2 -0
- package/dist/cjs/production/index.js.map +1 -0
- package/dist/cjs/production/mutation-P_Yb4LI9.js +2 -0
- package/dist/cjs/production/mutation-P_Yb4LI9.js.map +1 -0
- package/dist/cjs/production/package.json +3 -0
- package/dist/cjs/production/react/index.js +2 -0
- package/dist/cjs/production/react/index.js.map +1 -0
- package/dist/cjs/production/rest/index.js +2 -0
- package/dist/cjs/production/rest/index.js.map +1 -0
- package/dist/cjs/production/shared-Ct5zKrt4.js +2 -0
- package/dist/cjs/production/shared-Ct5zKrt4.js.map +1 -0
- package/dist/cjs/production/stores/async.js +2 -0
- package/dist/cjs/production/stores/async.js.map +1 -0
- package/dist/cjs/production/stores/sync.js +2 -0
- package/dist/cjs/production/stores/sync.js.map +1 -0
- package/dist/cjs/production/subscriptions/polling.js +2 -0
- package/dist/cjs/production/subscriptions/polling.js.map +1 -0
- package/dist/cjs/production/topic/index.js +2 -0
- package/dist/cjs/production/topic/index.js.map +1 -0
- package/dist/esm/ConstraintMatcher.d.ts +42 -0
- package/dist/esm/ConstraintMatcher.d.ts.map +1 -0
- package/dist/esm/EntityInstance.d.ts +38 -0
- package/dist/esm/EntityInstance.d.ts.map +1 -0
- package/dist/esm/EntityStore.d.ts +14 -0
- package/dist/esm/EntityStore.d.ts.map +1 -0
- package/dist/esm/GcManager.d.ts +38 -0
- package/dist/esm/GcManager.d.ts.map +1 -0
- package/dist/esm/LiveCollection.d.ts +86 -0
- package/dist/esm/LiveCollection.d.ts.map +1 -0
- package/dist/esm/MutationResult.d.ts +22 -0
- package/dist/esm/MutationResult.d.ts.map +1 -0
- package/dist/esm/NetworkManager.d.ts +62 -0
- package/dist/esm/NetworkManager.d.ts.map +1 -0
- package/dist/esm/QueryClient.d.ts +98 -0
- package/dist/esm/QueryClient.d.ts.map +1 -0
- package/dist/esm/QueryController.d.ts +49 -0
- package/dist/esm/QueryController.d.ts.map +1 -0
- package/dist/esm/QueryResult.d.ts +67 -0
- package/dist/esm/QueryResult.d.ts.map +1 -0
- package/dist/esm/applyEntities.d.ts +12 -0
- package/dist/esm/applyEntities.d.ts.map +1 -0
- package/dist/esm/development/QueryClient-Dtde3pss.js +2572 -0
- package/dist/esm/development/QueryClient-Dtde3pss.js.map +1 -0
- package/dist/esm/development/QueryController-Ch_ncxiI.js +14 -0
- package/dist/esm/development/QueryController-Ch_ncxiI.js.map +1 -0
- package/dist/esm/development/index.js +32 -0
- package/dist/esm/development/index.js.map +1 -0
- package/dist/esm/development/mutation-UZshUQAf.js +58 -0
- package/dist/esm/development/mutation-UZshUQAf.js.map +1 -0
- package/dist/esm/development/react/index.js +40 -0
- package/dist/esm/development/react/index.js.map +1 -0
- package/dist/esm/development/rest/index.js +142 -0
- package/dist/esm/development/rest/index.js.map +1 -0
- package/dist/esm/development/shared-DcuVH8Pf.js +15 -0
- package/dist/esm/development/shared-DcuVH8Pf.js.map +1 -0
- package/dist/esm/development/stores/async.js +214 -0
- package/dist/esm/development/stores/async.js.map +1 -0
- package/dist/esm/development/stores/sync.js +149 -0
- package/dist/esm/development/stores/sync.js.map +1 -0
- package/dist/esm/development/subscriptions/polling.js +25 -0
- package/dist/esm/development/subscriptions/polling.js.map +1 -0
- package/dist/esm/development/topic/index.js +86 -0
- package/dist/esm/development/topic/index.js.map +1 -0
- package/dist/esm/errors.d.ts +4 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/fieldRef.d.ts +15 -0
- package/dist/esm/fieldRef.d.ts.map +1 -0
- package/dist/esm/index.d.ts +15 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/mutation.d.ts +34 -0
- package/dist/esm/mutation.d.ts.map +1 -0
- package/dist/esm/parseEntities.d.ts +44 -0
- package/dist/esm/parseEntities.d.ts.map +1 -0
- package/dist/esm/production/QueryClient-YqnBxFy1.js +2457 -0
- package/dist/esm/production/QueryClient-YqnBxFy1.js.map +1 -0
- package/dist/esm/production/QueryController-Ch_ncxiI.js +14 -0
- package/dist/esm/production/QueryController-Ch_ncxiI.js.map +1 -0
- package/dist/esm/production/index.js +32 -0
- package/dist/esm/production/index.js.map +1 -0
- package/dist/esm/production/mutation-pgFl1uIY.js +58 -0
- package/dist/esm/production/mutation-pgFl1uIY.js.map +1 -0
- package/dist/esm/production/react/index.js +40 -0
- package/dist/esm/production/react/index.js.map +1 -0
- package/dist/esm/production/rest/index.js +142 -0
- package/dist/esm/production/rest/index.js.map +1 -0
- package/dist/esm/production/shared-DcuVH8Pf.js +15 -0
- package/dist/esm/production/shared-DcuVH8Pf.js.map +1 -0
- package/dist/esm/production/stores/async.js +214 -0
- package/dist/esm/production/stores/async.js.map +1 -0
- package/dist/esm/production/stores/sync.js +149 -0
- package/dist/esm/production/stores/sync.js.map +1 -0
- package/dist/esm/production/subscriptions/polling.js +25 -0
- package/dist/esm/production/subscriptions/polling.js.map +1 -0
- package/dist/esm/production/topic/index.js +86 -0
- package/dist/esm/production/topic/index.js.map +1 -0
- package/dist/esm/proxy.d.ts +20 -0
- package/dist/esm/proxy.d.ts.map +1 -0
- package/dist/esm/proxyId.d.ts +8 -0
- package/dist/esm/proxyId.d.ts.map +1 -0
- package/dist/esm/query-types.d.ts +60 -0
- package/dist/esm/query-types.d.ts.map +1 -0
- package/dist/esm/query.d.ts +64 -0
- package/dist/esm/query.d.ts.map +1 -0
- package/dist/esm/react/index.d.ts +2 -0
- package/dist/esm/react/index.d.ts.map +1 -0
- package/dist/esm/react/use-query.d.ts +5 -0
- package/dist/esm/react/use-query.d.ts.map +1 -0
- package/dist/esm/rest/RESTMutation.d.ts +18 -0
- package/dist/esm/rest/RESTMutation.d.ts.map +1 -0
- package/dist/esm/rest/RESTQuery.d.ts +24 -0
- package/dist/esm/rest/RESTQuery.d.ts.map +1 -0
- package/dist/esm/rest/RESTQueryController.d.ts +34 -0
- package/dist/esm/rest/RESTQueryController.d.ts.map +1 -0
- package/dist/esm/rest/index.d.ts +5 -0
- package/dist/esm/rest/index.d.ts.map +1 -0
- package/dist/esm/retry.d.ts +4 -0
- package/dist/esm/retry.d.ts.map +1 -0
- package/dist/esm/stores/async.d.ts +80 -0
- package/dist/esm/stores/async.d.ts.map +1 -0
- package/dist/esm/stores/shared.d.ts +12 -0
- package/dist/esm/stores/shared.d.ts.map +1 -0
- package/dist/esm/stores/sync.d.ts +41 -0
- package/dist/esm/stores/sync.d.ts.map +1 -0
- package/dist/esm/subscriptions/polling.d.ts +6 -0
- package/dist/esm/subscriptions/polling.d.ts.map +1 -0
- package/dist/esm/testing/MockClient.d.ts +64 -0
- package/dist/esm/testing/MockClient.d.ts.map +1 -0
- package/dist/esm/testing/auto-generate.d.ts +20 -0
- package/dist/esm/testing/auto-generate.d.ts.map +1 -0
- package/dist/esm/testing/entity-factory.d.ts +13 -0
- package/dist/esm/testing/entity-factory.d.ts.map +1 -0
- package/dist/esm/testing/index.d.ts +6 -0
- package/dist/esm/testing/index.d.ts.map +1 -0
- package/dist/esm/testing/types.d.ts +37 -0
- package/dist/esm/testing/types.d.ts.map +1 -0
- package/dist/esm/topic/TopicQuery.d.ts +10 -0
- package/dist/esm/topic/TopicQuery.d.ts.map +1 -0
- package/dist/esm/topic/TopicQueryController.d.ts +43 -0
- package/dist/esm/topic/TopicQueryController.d.ts.map +1 -0
- package/dist/esm/topic/index.d.ts +3 -0
- package/dist/esm/topic/index.d.ts.map +1 -0
- package/dist/esm/type-utils.d.ts +16 -0
- package/dist/esm/type-utils.d.ts.map +1 -0
- package/dist/esm/typeDefs.d.ts +86 -0
- package/dist/esm/typeDefs.d.ts.map +1 -0
- package/dist/esm/types.d.ts +277 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/utils.d.ts +38 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/index.d.ts +1 -0
- package/package.json +181 -5
- package/plugin/.claude-plugin/plugin.json +10 -0
- package/plugin/agents/fetchium.md +168 -0
- package/plugin/docs/api/fetchium-react.md +135 -0
- package/plugin/docs/api/fetchium.md +674 -0
- package/plugin/docs/api/stores-async.md +219 -0
- package/plugin/docs/api/stores-sync.md +133 -0
- package/plugin/docs/core/entities.md +351 -0
- package/plugin/docs/core/queries.md +600 -0
- package/plugin/docs/core/streaming.md +550 -0
- package/plugin/docs/core/types.md +374 -0
- package/plugin/docs/data/caching.md +298 -0
- package/plugin/docs/data/live-data.md +435 -0
- package/plugin/docs/data/mutations.md +465 -0
- package/plugin/docs/guides/auth.md +318 -0
- package/plugin/docs/guides/error-handling.md +351 -0
- package/plugin/docs/guides/offline.md +270 -0
- package/plugin/docs/guides/testing.md +301 -0
- package/plugin/docs/quickstart.md +170 -0
- package/plugin/docs/reference/pagination.md +519 -0
- package/plugin/docs/reference/rest-queries.md +107 -0
- package/plugin/docs/reference/why-signalium.md +364 -0
- package/plugin/docs/setup/project-setup.md +319 -0
- package/plugin/install.mjs +88 -0
- package/plugin/skills/design/SKILL.md +140 -0
- package/plugin/skills/teach/SKILL.md +105 -0
- package/stores/async.d.ts +1 -0
- package/stores/async.js +15 -0
- package/stores/sync.d.ts +1 -0
- package/stores/sync.js +15 -0
- package/index.js +0 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { u as v, D as l, v as f, r as h, a as y, q as a, l as C, c as d, L as g, b as k } from "../shared-DcuVH8Pf.js";
|
|
2
|
+
class N {
|
|
3
|
+
kv = /* @__PURE__ */ Object.create(null);
|
|
4
|
+
has(e) {
|
|
5
|
+
return e in this.kv;
|
|
6
|
+
}
|
|
7
|
+
getString(e) {
|
|
8
|
+
return this.kv[e];
|
|
9
|
+
}
|
|
10
|
+
setString(e, s) {
|
|
11
|
+
this.kv[e] = s;
|
|
12
|
+
}
|
|
13
|
+
getNumber(e) {
|
|
14
|
+
return this.kv[e];
|
|
15
|
+
}
|
|
16
|
+
setNumber(e, s) {
|
|
17
|
+
this.kv[e] = s;
|
|
18
|
+
}
|
|
19
|
+
getBuffer(e) {
|
|
20
|
+
return this.kv[e];
|
|
21
|
+
}
|
|
22
|
+
setBuffer(e, s) {
|
|
23
|
+
this.kv[e] = s;
|
|
24
|
+
}
|
|
25
|
+
delete(e) {
|
|
26
|
+
delete this.kv[e];
|
|
27
|
+
}
|
|
28
|
+
getAllKeys() {
|
|
29
|
+
return Object.keys(this.kv);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
class S {
|
|
33
|
+
constructor(e) {
|
|
34
|
+
this.kv = e;
|
|
35
|
+
}
|
|
36
|
+
queues = /* @__PURE__ */ new Map();
|
|
37
|
+
loadQuery(e, s) {
|
|
38
|
+
const i = this.kv.getNumber(v(s)), t = (e.statics.cache?.cacheTime ?? l) * 60 * 1e3;
|
|
39
|
+
if (i === void 0 || i < Date.now() - t)
|
|
40
|
+
return;
|
|
41
|
+
const n = this.kv.getString(f(s));
|
|
42
|
+
if (n === void 0)
|
|
43
|
+
return;
|
|
44
|
+
const r = this.kv.getBuffer(h(s));
|
|
45
|
+
let o;
|
|
46
|
+
return r !== void 0 && (o = /* @__PURE__ */ new Map(), this.preloadEntities(r, o)), this.activateQuery(e, s), {
|
|
47
|
+
value: JSON.parse(n),
|
|
48
|
+
refIds: r === void 0 ? void 0 : new Set(r ?? []),
|
|
49
|
+
updatedAt: i,
|
|
50
|
+
preloadedEntities: o
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
preloadEntities(e, s) {
|
|
54
|
+
for (const i of e) {
|
|
55
|
+
const t = this.kv.getString(f(i));
|
|
56
|
+
if (t === void 0)
|
|
57
|
+
continue;
|
|
58
|
+
s.set(i, JSON.parse(t));
|
|
59
|
+
const n = this.kv.getBuffer(h(i));
|
|
60
|
+
n !== void 0 && this.preloadEntities(n, s);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
saveQuery(e, s, i, t, n) {
|
|
64
|
+
this.setValue(s, i, n), this.kv.setNumber(v(s), t), this.activateQuery(e, s);
|
|
65
|
+
}
|
|
66
|
+
saveEntity(e, s, i) {
|
|
67
|
+
this.setValue(e, s, i);
|
|
68
|
+
}
|
|
69
|
+
activateQuery(e, s) {
|
|
70
|
+
if (!this.kv.has(f(s)))
|
|
71
|
+
return;
|
|
72
|
+
const i = e.statics.id;
|
|
73
|
+
let t = this.queues.get(i);
|
|
74
|
+
if (t === void 0) {
|
|
75
|
+
const o = e.statics.cache?.maxCount ?? y;
|
|
76
|
+
t = this.kv.getBuffer(a(i)), t === void 0 ? (t = new Uint32Array(o), this.kv.setBuffer(a(i), t)) : t.length !== o && (t = new Uint32Array(t.buffer, 0, o), this.kv.setBuffer(a(i), t)), this.queues.set(i, t);
|
|
77
|
+
}
|
|
78
|
+
this.kv.setNumber(C(i), Date.now()), this.kv.setNumber(d(i), e.statics.cache?.cacheTime ?? l);
|
|
79
|
+
const n = t.indexOf(s);
|
|
80
|
+
if (n >= 0) {
|
|
81
|
+
if (n === 0)
|
|
82
|
+
return;
|
|
83
|
+
t.copyWithin(1, 0, n), t[0] = s;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const r = t[t.length - 1];
|
|
87
|
+
t.copyWithin(1, 0, t.length - 1), t[0] = s, r !== 0 && (this.deleteQuery(r), this.kv.delete(v(r)));
|
|
88
|
+
}
|
|
89
|
+
purgeStaleQueries() {
|
|
90
|
+
const e = this.kv.getAllKeys(), s = Date.now();
|
|
91
|
+
for (const i of e) {
|
|
92
|
+
if (!i.startsWith(g)) continue;
|
|
93
|
+
const t = i.slice(g.length), n = this.kv.getNumber(i), o = (this.kv.getNumber(d(t)) ?? l) * 60 * 1e3;
|
|
94
|
+
if (n === void 0 || s - n > o) {
|
|
95
|
+
const c = this.kv.getBuffer(a(t));
|
|
96
|
+
if (c !== void 0)
|
|
97
|
+
for (const u of c)
|
|
98
|
+
u !== 0 && (this.deleteQuery(u), this.kv.delete(v(u)));
|
|
99
|
+
this.kv.delete(a(t)), this.kv.delete(i), this.kv.delete(d(t)), this.queues.delete(t);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
setValue(e, s, i) {
|
|
104
|
+
const t = this.kv;
|
|
105
|
+
t.setString(f(e), JSON.stringify(s));
|
|
106
|
+
const n = h(e), r = t.getBuffer(n);
|
|
107
|
+
if (i === void 0 || i.size === 0) {
|
|
108
|
+
if (t.delete(n), r !== void 0)
|
|
109
|
+
for (let o = 0; o < r.length; o++) {
|
|
110
|
+
const c = r[o];
|
|
111
|
+
this.decrementRefCount(c);
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
const o = new Uint32Array([...i]);
|
|
115
|
+
if (r !== void 0)
|
|
116
|
+
for (let c = 0; c < r.length; c++) {
|
|
117
|
+
const u = r[c];
|
|
118
|
+
i.has(u) ? i.delete(u) : this.decrementRefCount(u);
|
|
119
|
+
}
|
|
120
|
+
for (const c of i)
|
|
121
|
+
this.incrementRefCount(c);
|
|
122
|
+
t.setBuffer(n, o);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
deleteQuery(e) {
|
|
126
|
+
const s = this.kv;
|
|
127
|
+
s.delete(f(e)), s.delete(k(e));
|
|
128
|
+
const i = s.getBuffer(h(e));
|
|
129
|
+
if (s.delete(h(e)), i !== void 0)
|
|
130
|
+
for (const t of i)
|
|
131
|
+
t !== 0 && this.decrementRefCount(t);
|
|
132
|
+
}
|
|
133
|
+
incrementRefCount(e) {
|
|
134
|
+
const s = k(e), t = (this.kv.getNumber(s) ?? 0) + 1;
|
|
135
|
+
this.kv.setNumber(s, t);
|
|
136
|
+
}
|
|
137
|
+
decrementRefCount(e) {
|
|
138
|
+
const s = k(e), i = this.kv.getNumber(s);
|
|
139
|
+
if (i === void 0)
|
|
140
|
+
return;
|
|
141
|
+
const t = i - 1;
|
|
142
|
+
t === 0 ? this.deleteQuery(e) : this.kv.setNumber(s, t);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
export {
|
|
146
|
+
N as MemoryPersistentStore,
|
|
147
|
+
S as SyncQueryStore
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sources":["../../../../src/stores/sync.ts"],"sourcesContent":["import { CachedQuery, QueryStore, type PreloadedEntityMap } from '../QueryClient.js';\nimport { QueryDefinition } from '../query.js';\nimport {\n cacheTimeKeyFor,\n DEFAULT_CACHE_TIME,\n DEFAULT_MAX_COUNT,\n LAST_USED_PREFIX,\n lastUsedKeyFor,\n queueKeyFor,\n refCountKeyFor,\n refIdsKeyFor,\n updatedAtKeyFor,\n valueKeyFor,\n} from './shared.js';\n\nexport interface SyncPersistentStore {\n has(key: string): boolean;\n\n getString(key: string): string | undefined;\n setString(key: string, value: string): void;\n\n getNumber(key: string): number | undefined;\n setNumber(key: string, value: number): void;\n\n getBuffer(key: string): Uint32Array | undefined;\n setBuffer(key: string, value: Uint32Array): void;\n\n delete(key: string): void;\n\n getAllKeys(): string[];\n}\n\nexport class MemoryPersistentStore implements SyncPersistentStore {\n private readonly kv: Record<string, unknown> = Object.create(null);\n\n has(key: string): boolean {\n return key in this.kv;\n }\n\n getString(key: string): string | undefined {\n return this.kv[key] as string | undefined;\n }\n\n setString(key: string, value: string): void {\n this.kv[key] = value;\n }\n\n getNumber(key: string): number | undefined {\n return this.kv[key] as number | undefined;\n }\n\n setNumber(key: string, value: number): void {\n this.kv[key] = value;\n }\n\n getBuffer(key: string): Uint32Array | undefined {\n return this.kv[key] as Uint32Array | undefined;\n }\n\n setBuffer(key: string, value: Uint32Array): void {\n this.kv[key] = value;\n }\n\n delete(key: string): void {\n delete this.kv[key];\n }\n\n getAllKeys(): string[] {\n return Object.keys(this.kv);\n }\n}\n\nexport class SyncQueryStore implements QueryStore {\n queues: Map<string, Uint32Array> = new Map();\n\n constructor(private readonly kv: SyncPersistentStore) {}\n\n loadQuery(queryDef: QueryDefinition<any, any, any>, queryKey: number): CachedQuery | undefined {\n const updatedAt = this.kv.getNumber(updatedAtKeyFor(queryKey));\n\n const cacheTimeMs = (queryDef.statics.cache?.cacheTime ?? DEFAULT_CACHE_TIME) * 60 * 1000;\n if (updatedAt === undefined || updatedAt < Date.now() - cacheTimeMs) {\n return;\n }\n\n const valueStr = this.kv.getString(valueKeyFor(queryKey));\n\n if (valueStr === undefined) {\n return;\n }\n\n const entityIds = this.kv.getBuffer(refIdsKeyFor(queryKey));\n\n let preloadedEntities: PreloadedEntityMap | undefined;\n if (entityIds !== undefined) {\n preloadedEntities = new Map();\n this.preloadEntities(entityIds, preloadedEntities);\n }\n\n this.activateQuery(queryDef, queryKey);\n\n return {\n value: JSON.parse(valueStr) as Record<string, unknown>,\n refIds: entityIds === undefined ? undefined : new Set(entityIds ?? []),\n updatedAt,\n preloadedEntities,\n };\n }\n\n private preloadEntities(entityIds: Uint32Array, preloaded: PreloadedEntityMap): void {\n for (const entityId of entityIds) {\n const entityValue = this.kv.getString(valueKeyFor(entityId));\n\n if (entityValue === undefined) {\n continue;\n }\n\n preloaded.set(entityId, JSON.parse(entityValue) as Record<string, unknown>);\n\n const childIds = this.kv.getBuffer(refIdsKeyFor(entityId));\n\n if (childIds === undefined) {\n continue;\n }\n\n this.preloadEntities(childIds, preloaded);\n }\n }\n\n saveQuery(\n queryDef: QueryDefinition<any, any, any>,\n queryKey: number,\n value: unknown,\n updatedAt: number,\n refIds?: Set<number>,\n ): void {\n this.setValue(queryKey, value, refIds);\n this.kv.setNumber(updatedAtKeyFor(queryKey), updatedAt);\n this.activateQuery(queryDef, queryKey);\n }\n\n saveEntity(entityKey: number, value: unknown, refIds?: Set<number>): void {\n this.setValue(entityKey, value, refIds);\n }\n\n activateQuery(queryDef: QueryDefinition<any, any, any>, queryKey: number): void {\n if (!this.kv.has(valueKeyFor(queryKey))) {\n return;\n }\n\n const queryDefId = queryDef.statics.id;\n let queue = this.queues.get(queryDefId);\n\n if (queue === undefined) {\n const maxCount = queryDef.statics.cache?.maxCount ?? DEFAULT_MAX_COUNT;\n queue = this.kv.getBuffer(queueKeyFor(queryDefId));\n\n if (queue === undefined) {\n queue = new Uint32Array(maxCount);\n this.kv.setBuffer(queueKeyFor(queryDefId), queue);\n } else if (queue.length !== maxCount) {\n queue = new Uint32Array(queue.buffer, 0, maxCount);\n this.kv.setBuffer(queueKeyFor(queryDefId), queue);\n }\n\n this.queues.set(queryDefId, queue);\n }\n\n this.kv.setNumber(lastUsedKeyFor(queryDefId), Date.now());\n this.kv.setNumber(cacheTimeKeyFor(queryDefId), queryDef.statics.cache?.cacheTime ?? DEFAULT_CACHE_TIME);\n\n const indexOfKey = queue.indexOf(queryKey);\n\n if (indexOfKey >= 0) {\n if (indexOfKey === 0) {\n return;\n }\n queue.copyWithin(1, 0, indexOfKey);\n queue[0] = queryKey;\n return;\n }\n\n const evicted = queue[queue.length - 1];\n queue.copyWithin(1, 0, queue.length - 1);\n queue[0] = queryKey;\n\n if (evicted !== 0) {\n this.deleteQuery(evicted);\n this.kv.delete(updatedAtKeyFor(evicted));\n }\n }\n\n purgeStaleQueries(): void {\n const allKeys = this.kv.getAllKeys();\n const now = Date.now();\n\n for (const key of allKeys) {\n if (!key.startsWith(LAST_USED_PREFIX)) continue;\n\n const queryDefId = key.slice(LAST_USED_PREFIX.length);\n const lastUsedAt = this.kv.getNumber(key);\n const cacheTime = this.kv.getNumber(cacheTimeKeyFor(queryDefId)) ?? DEFAULT_CACHE_TIME;\n const cacheTimeMs = cacheTime * 60 * 1000;\n\n if (lastUsedAt === undefined || now - lastUsedAt > cacheTimeMs) {\n const queue = this.kv.getBuffer(queueKeyFor(queryDefId));\n\n if (queue !== undefined) {\n for (const queryKey of queue) {\n if (queryKey !== 0) {\n this.deleteQuery(queryKey);\n this.kv.delete(updatedAtKeyFor(queryKey));\n }\n }\n }\n\n this.kv.delete(queueKeyFor(queryDefId));\n this.kv.delete(key);\n this.kv.delete(cacheTimeKeyFor(queryDefId));\n this.queues.delete(queryDefId);\n }\n }\n }\n\n private setValue(id: number, value: unknown, refIds?: Set<number>): void {\n const kv = this.kv;\n\n kv.setString(valueKeyFor(id), JSON.stringify(value));\n\n const refIdsKey = refIdsKeyFor(id);\n\n const prevRefIds = kv.getBuffer(refIdsKey);\n\n if (refIds === undefined || refIds.size === 0) {\n kv.delete(refIdsKey);\n\n // Decrement all previous refs\n if (prevRefIds !== undefined) {\n for (let i = 0; i < prevRefIds.length; i++) {\n const refId = prevRefIds[i];\n this.decrementRefCount(refId);\n }\n }\n } else {\n // Convert the set to a Uint32Array and capture all the refIds before we\n // delete previous ones from the set\n // NOTE: Using spread operator because Hermes (React Native) doesn't correctly\n // handle new Uint32Array(Set) - it produces an empty array instead of converting\n const newRefIds = new Uint32Array([...refIds]);\n\n if (prevRefIds !== undefined) {\n // Process new refs: increment if not in old\n for (let i = 0; i < prevRefIds.length; i++) {\n const refId = prevRefIds[i];\n\n if (refIds.has(refId)) {\n refIds.delete(refId);\n } else {\n this.decrementRefCount(refId);\n }\n }\n }\n\n // No previous refs, increment all unique new refs\n for (const refId of refIds) {\n this.incrementRefCount(refId);\n }\n\n kv.setBuffer(refIdsKey, newRefIds);\n }\n }\n\n deleteQuery(id: number): void {\n const kv = this.kv;\n\n kv.delete(valueKeyFor(id));\n kv.delete(refCountKeyFor(id));\n\n const refIds = kv.getBuffer(refIdsKeyFor(id));\n kv.delete(refIdsKeyFor(id)); // Clean up the refIds key\n\n if (refIds === undefined) {\n return;\n }\n\n // Decrement ref counts for all referenced entities\n for (const refId of refIds) {\n if (refId !== 0) {\n this.decrementRefCount(refId);\n }\n }\n }\n\n private incrementRefCount(refId: number): void {\n const refCountKey = refCountKeyFor(refId);\n const currentCount = this.kv.getNumber(refCountKey) ?? 0;\n const newCount = currentCount + 1;\n this.kv.setNumber(refCountKey, newCount);\n }\n\n private decrementRefCount(refId: number): void {\n const refCountKey = refCountKeyFor(refId);\n const currentCount = this.kv.getNumber(refCountKey);\n\n if (currentCount === undefined) {\n // Already deleted or never existed\n return;\n }\n\n const newCount = currentCount - 1;\n\n if (newCount === 0) {\n // Entity exists, cascade delete it\n this.deleteQuery(refId);\n } else {\n this.kv.setNumber(refCountKey, newCount);\n }\n }\n}\n"],"names":["MemoryPersistentStore","key","value","SyncQueryStore","kv","queryDef","queryKey","updatedAt","updatedAtKeyFor","cacheTimeMs","DEFAULT_CACHE_TIME","valueStr","valueKeyFor","entityIds","refIdsKeyFor","preloadedEntities","preloaded","entityId","entityValue","childIds","refIds","entityKey","queryDefId","queue","maxCount","DEFAULT_MAX_COUNT","queueKeyFor","lastUsedKeyFor","cacheTimeKeyFor","indexOfKey","evicted","allKeys","now","LAST_USED_PREFIX","lastUsedAt","id","refIdsKey","prevRefIds","i","refId","newRefIds","refCountKeyFor","refCountKey","newCount","currentCount"],"mappings":";AAgCO,MAAMA,EAAqD;AAAA,EAC/C,KAA8B,uBAAO,OAAO,IAAI;AAAA,EAEjE,IAAIC,GAAsB;AACxB,WAAOA,KAAO,KAAK;AAAA,EACrB;AAAA,EAEA,UAAUA,GAAiC;AACzC,WAAO,KAAK,GAAGA,CAAG;AAAA,EACpB;AAAA,EAEA,UAAUA,GAAaC,GAAqB;AAC1C,SAAK,GAAGD,CAAG,IAAIC;AAAA,EACjB;AAAA,EAEA,UAAUD,GAAiC;AACzC,WAAO,KAAK,GAAGA,CAAG;AAAA,EACpB;AAAA,EAEA,UAAUA,GAAaC,GAAqB;AAC1C,SAAK,GAAGD,CAAG,IAAIC;AAAA,EACjB;AAAA,EAEA,UAAUD,GAAsC;AAC9C,WAAO,KAAK,GAAGA,CAAG;AAAA,EACpB;AAAA,EAEA,UAAUA,GAAaC,GAA0B;AAC/C,SAAK,GAAGD,CAAG,IAAIC;AAAA,EACjB;AAAA,EAEA,OAAOD,GAAmB;AACxB,WAAO,KAAK,GAAGA,CAAG;AAAA,EACpB;AAAA,EAEA,aAAuB;AACrB,WAAO,OAAO,KAAK,KAAK,EAAE;AAAA,EAC5B;AACF;AAEO,MAAME,EAAqC;AAAA,EAGhD,YAA6BC,GAAyB;AAAzB,SAAA,KAAAA;AAAA,EAA0B;AAAA,EAFvD,6BAAuC,IAAA;AAAA,EAIvC,UAAUC,GAA0CC,GAA2C;AAC7F,UAAMC,IAAY,KAAK,GAAG,UAAUC,EAAgBF,CAAQ,CAAC,GAEvDG,KAAeJ,EAAS,QAAQ,OAAO,aAAaK,KAAsB,KAAK;AACrF,QAAIH,MAAc,UAAaA,IAAY,KAAK,IAAA,IAAQE;AACtD;AAGF,UAAME,IAAW,KAAK,GAAG,UAAUC,EAAYN,CAAQ,CAAC;AAExD,QAAIK,MAAa;AACf;AAGF,UAAME,IAAY,KAAK,GAAG,UAAUC,EAAaR,CAAQ,CAAC;AAE1D,QAAIS;AACJ,WAAIF,MAAc,WAChBE,wBAAwB,IAAA,GACxB,KAAK,gBAAgBF,GAAWE,CAAiB,IAGnD,KAAK,cAAcV,GAAUC,CAAQ,GAE9B;AAAA,MACL,OAAO,KAAK,MAAMK,CAAQ;AAAA,MAC1B,QAAQE,MAAc,SAAY,SAAY,IAAI,IAAIA,KAAa,EAAE;AAAA,MACrE,WAAAN;AAAA,MACA,mBAAAQ;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEQ,gBAAgBF,GAAwBG,GAAqC;AACnF,eAAWC,KAAYJ,GAAW;AAChC,YAAMK,IAAc,KAAK,GAAG,UAAUN,EAAYK,CAAQ,CAAC;AAE3D,UAAIC,MAAgB;AAClB;AAGF,MAAAF,EAAU,IAAIC,GAAU,KAAK,MAAMC,CAAW,CAA4B;AAE1E,YAAMC,IAAW,KAAK,GAAG,UAAUL,EAAaG,CAAQ,CAAC;AAEzD,MAAIE,MAAa,UAIjB,KAAK,gBAAgBA,GAAUH,CAAS;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,UACEX,GACAC,GACAJ,GACAK,GACAa,GACM;AACN,SAAK,SAASd,GAAUJ,GAAOkB,CAAM,GACrC,KAAK,GAAG,UAAUZ,EAAgBF,CAAQ,GAAGC,CAAS,GACtD,KAAK,cAAcF,GAAUC,CAAQ;AAAA,EACvC;AAAA,EAEA,WAAWe,GAAmBnB,GAAgBkB,GAA4B;AACxE,SAAK,SAASC,GAAWnB,GAAOkB,CAAM;AAAA,EACxC;AAAA,EAEA,cAAcf,GAA0CC,GAAwB;AAC9E,QAAI,CAAC,KAAK,GAAG,IAAIM,EAAYN,CAAQ,CAAC;AACpC;AAGF,UAAMgB,IAAajB,EAAS,QAAQ;AACpC,QAAIkB,IAAQ,KAAK,OAAO,IAAID,CAAU;AAEtC,QAAIC,MAAU,QAAW;AACvB,YAAMC,IAAWnB,EAAS,QAAQ,OAAO,YAAYoB;AACrD,MAAAF,IAAQ,KAAK,GAAG,UAAUG,EAAYJ,CAAU,CAAC,GAE7CC,MAAU,UACZA,IAAQ,IAAI,YAAYC,CAAQ,GAChC,KAAK,GAAG,UAAUE,EAAYJ,CAAU,GAAGC,CAAK,KACvCA,EAAM,WAAWC,MAC1BD,IAAQ,IAAI,YAAYA,EAAM,QAAQ,GAAGC,CAAQ,GACjD,KAAK,GAAG,UAAUE,EAAYJ,CAAU,GAAGC,CAAK,IAGlD,KAAK,OAAO,IAAID,GAAYC,CAAK;AAAA,IACnC;AAEA,SAAK,GAAG,UAAUI,EAAeL,CAAU,GAAG,KAAK,KAAK,GACxD,KAAK,GAAG,UAAUM,EAAgBN,CAAU,GAAGjB,EAAS,QAAQ,OAAO,aAAaK,CAAkB;AAEtG,UAAMmB,IAAaN,EAAM,QAAQjB,CAAQ;AAEzC,QAAIuB,KAAc,GAAG;AACnB,UAAIA,MAAe;AACjB;AAEF,MAAAN,EAAM,WAAW,GAAG,GAAGM,CAAU,GACjCN,EAAM,CAAC,IAAIjB;AACX;AAAA,IACF;AAEA,UAAMwB,IAAUP,EAAMA,EAAM,SAAS,CAAC;AACtC,IAAAA,EAAM,WAAW,GAAG,GAAGA,EAAM,SAAS,CAAC,GACvCA,EAAM,CAAC,IAAIjB,GAEPwB,MAAY,MACd,KAAK,YAAYA,CAAO,GACxB,KAAK,GAAG,OAAOtB,EAAgBsB,CAAO,CAAC;AAAA,EAE3C;AAAA,EAEA,oBAA0B;AACxB,UAAMC,IAAU,KAAK,GAAG,WAAA,GAClBC,IAAM,KAAK,IAAA;AAEjB,eAAW/B,KAAO8B,GAAS;AACzB,UAAI,CAAC9B,EAAI,WAAWgC,CAAgB,EAAG;AAEvC,YAAMX,IAAarB,EAAI,MAAMgC,EAAiB,MAAM,GAC9CC,IAAa,KAAK,GAAG,UAAUjC,CAAG,GAElCQ,KADY,KAAK,GAAG,UAAUmB,EAAgBN,CAAU,CAAC,KAAKZ,KACpC,KAAK;AAErC,UAAIwB,MAAe,UAAaF,IAAME,IAAazB,GAAa;AAC9D,cAAMc,IAAQ,KAAK,GAAG,UAAUG,EAAYJ,CAAU,CAAC;AAEvD,YAAIC,MAAU;AACZ,qBAAWjB,KAAYiB;AACrB,YAAIjB,MAAa,MACf,KAAK,YAAYA,CAAQ,GACzB,KAAK,GAAG,OAAOE,EAAgBF,CAAQ,CAAC;AAK9C,aAAK,GAAG,OAAOoB,EAAYJ,CAAU,CAAC,GACtC,KAAK,GAAG,OAAOrB,CAAG,GAClB,KAAK,GAAG,OAAO2B,EAAgBN,CAAU,CAAC,GAC1C,KAAK,OAAO,OAAOA,CAAU;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,SAASa,GAAYjC,GAAgBkB,GAA4B;AACvE,UAAMhB,IAAK,KAAK;AAEhB,IAAAA,EAAG,UAAUQ,EAAYuB,CAAE,GAAG,KAAK,UAAUjC,CAAK,CAAC;AAEnD,UAAMkC,IAAYtB,EAAaqB,CAAE,GAE3BE,IAAajC,EAAG,UAAUgC,CAAS;AAEzC,QAAIhB,MAAW,UAAaA,EAAO,SAAS;AAI1C,UAHAhB,EAAG,OAAOgC,CAAS,GAGfC,MAAe;AACjB,iBAASC,IAAI,GAAGA,IAAID,EAAW,QAAQC,KAAK;AAC1C,gBAAMC,IAAQF,EAAWC,CAAC;AAC1B,eAAK,kBAAkBC,CAAK;AAAA,QAC9B;AAAA,WAEG;AAKL,YAAMC,IAAY,IAAI,YAAY,CAAC,GAAGpB,CAAM,CAAC;AAE7C,UAAIiB,MAAe;AAEjB,iBAASC,IAAI,GAAGA,IAAID,EAAW,QAAQC,KAAK;AAC1C,gBAAMC,IAAQF,EAAWC,CAAC;AAE1B,UAAIlB,EAAO,IAAImB,CAAK,IAClBnB,EAAO,OAAOmB,CAAK,IAEnB,KAAK,kBAAkBA,CAAK;AAAA,QAEhC;AAIF,iBAAWA,KAASnB;AAClB,aAAK,kBAAkBmB,CAAK;AAG9B,MAAAnC,EAAG,UAAUgC,GAAWI,CAAS;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,YAAYL,GAAkB;AAC5B,UAAM/B,IAAK,KAAK;AAEhB,IAAAA,EAAG,OAAOQ,EAAYuB,CAAE,CAAC,GACzB/B,EAAG,OAAOqC,EAAeN,CAAE,CAAC;AAE5B,UAAMf,IAAShB,EAAG,UAAUU,EAAaqB,CAAE,CAAC;AAG5C,QAFA/B,EAAG,OAAOU,EAAaqB,CAAE,CAAC,GAEtBf,MAAW;AAKf,iBAAWmB,KAASnB;AAClB,QAAImB,MAAU,KACZ,KAAK,kBAAkBA,CAAK;AAAA,EAGlC;AAAA,EAEQ,kBAAkBA,GAAqB;AAC7C,UAAMG,IAAcD,EAAeF,CAAK,GAElCI,KADe,KAAK,GAAG,UAAUD,CAAW,KAAK,KACvB;AAChC,SAAK,GAAG,UAAUA,GAAaC,CAAQ;AAAA,EACzC;AAAA,EAEQ,kBAAkBJ,GAAqB;AAC7C,UAAMG,IAAcD,EAAeF,CAAK,GAClCK,IAAe,KAAK,GAAG,UAAUF,CAAW;AAElD,QAAIE,MAAiB;AAEnB;AAGF,UAAMD,IAAWC,IAAe;AAEhC,IAAID,MAAa,IAEf,KAAK,YAAYJ,CAAK,IAEtB,KAAK,GAAG,UAAUG,GAAaC,CAAQ;AAAA,EAE3C;AACF;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function o(t) {
|
|
2
|
+
return !Number.isFinite(t) || t < 100 ? 100 : t;
|
|
3
|
+
}
|
|
4
|
+
function f(t) {
|
|
5
|
+
const n = o(t.interval);
|
|
6
|
+
return function(s) {
|
|
7
|
+
let i = !0, e;
|
|
8
|
+
const c = this.refetch, r = async () => {
|
|
9
|
+
if (i) {
|
|
10
|
+
try {
|
|
11
|
+
await c();
|
|
12
|
+
} catch {
|
|
13
|
+
}
|
|
14
|
+
i && (e = setTimeout(r, n));
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
return e = setTimeout(r, n), () => {
|
|
18
|
+
i = !1, e !== void 0 && (clearTimeout(e), e = void 0);
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
f as poll
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=polling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling.js","sources":["../../../../src/subscriptions/polling.ts"],"sourcesContent":["import type { MutationEvent } from '../types.js';\n\nconst MIN_INTERVAL = 100;\n\nexport interface PollConfig {\n interval: number;\n}\n\nfunction clampInterval(interval: number): number {\n if (!Number.isFinite(interval) || interval < MIN_INTERVAL) {\n if (IS_DEV && (Number.isNaN(interval) || interval < 0)) {\n console.warn(`poll: invalid interval ${interval}, clamping to ${MIN_INTERVAL}ms`);\n }\n return MIN_INTERVAL;\n }\n return interval;\n}\n\nexport function poll(config: PollConfig): (this: any, onEvent: (event: MutationEvent) => void) => () => void {\n const interval = clampInterval(config.interval);\n\n return function subscribe(this: any, _onEvent: (event: MutationEvent) => void): () => void {\n let active = true;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const refetch = this.refetch as () => Promise<unknown>;\n\n const tick = async () => {\n if (!active) return;\n try {\n await refetch();\n } catch {\n // Keep polling after errors\n }\n if (active) {\n timer = setTimeout(tick, interval);\n }\n };\n\n timer = setTimeout(tick, interval);\n\n return () => {\n active = false;\n if (timer !== undefined) {\n clearTimeout(timer);\n timer = undefined;\n }\n };\n };\n}\n"],"names":["clampInterval","interval","poll","config","_onEvent","active","timer","refetch","tick"],"mappings":"AAQA,SAASA,EAAcC,GAA0B;AAC/C,SAAI,CAAC,OAAO,SAASA,CAAQ,KAAKA,IAAW,MAIpC,MAEFA;AACT;AAEO,SAASC,EAAKC,GAAwF;AAC3G,QAAMF,IAAWD,EAAcG,EAAO,QAAQ;AAE9C,SAAO,SAA8BC,GAAsD;AACzF,QAAIC,IAAS,IACTC;AAEJ,UAAMC,IAAU,KAAK,SAEfC,IAAO,YAAY;AACvB,UAAKH,GACL;AAAA,YAAI;AACF,gBAAME,EAAA;AAAA,QACR,QAAQ;AAAA,QAER;AACA,QAAIF,MACFC,IAAQ,WAAWE,GAAMP,CAAQ;AAAA;AAAA,IAErC;AAEA,WAAAK,IAAQ,WAAWE,GAAMP,CAAQ,GAE1B,MAAM;AACX,MAAAI,IAAS,IACLC,MAAU,WACZ,aAAaA,CAAK,GAClBA,IAAQ;AAAA,IAEZ;AAAA,EACF;AACF;"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { f as a } from "../QueryClient-YqnBxFy1.js";
|
|
2
|
+
import { Q as d } from "../QueryController-Ch_ncxiI.js";
|
|
3
|
+
class g extends a {
|
|
4
|
+
static controller;
|
|
5
|
+
getIdentityKey() {
|
|
6
|
+
return `topic:${this.topic}`;
|
|
7
|
+
}
|
|
8
|
+
getConfig() {
|
|
9
|
+
return {
|
|
10
|
+
staleTime: 0,
|
|
11
|
+
subscribe: () => () => {
|
|
12
|
+
this._topicController?.unsubscribe(this.topic);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
class _ extends d {
|
|
18
|
+
_topics = /* @__PURE__ */ new Map();
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the pending promise for a topic with initial data.
|
|
21
|
+
* Can be called before `send()` — the data will be picked up
|
|
22
|
+
* when the query activates.
|
|
23
|
+
*/
|
|
24
|
+
fulfillTopic(e, s) {
|
|
25
|
+
const t = this._topics.get(e);
|
|
26
|
+
if (t === void 0) {
|
|
27
|
+
this._topics.set(e, { status: "fulfilled", data: s });
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
t.status === "pending" && (t.status = "fulfilled", t.data = s, t.resolve(s));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Reject the pending promise for a topic.
|
|
34
|
+
* Can be called before `send()` — the error will be propagated
|
|
35
|
+
* when the query activates.
|
|
36
|
+
*/
|
|
37
|
+
rejectTopic(e, s) {
|
|
38
|
+
const t = this._topics.get(e);
|
|
39
|
+
if (t === void 0) {
|
|
40
|
+
this._topics.set(e, { status: "rejected", error: s });
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
t.status === "pending" && (t.status = "rejected", t.error = s, t.reject(s));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Clears internal state for a topic. Called automatically by
|
|
47
|
+
* `unsubscribe` — subclasses generally don't need to call this.
|
|
48
|
+
*/
|
|
49
|
+
clearTopic(e) {
|
|
50
|
+
this._topics.delete(e);
|
|
51
|
+
}
|
|
52
|
+
clearAll() {
|
|
53
|
+
this._topics.clear();
|
|
54
|
+
}
|
|
55
|
+
async send(e, s) {
|
|
56
|
+
const t = e;
|
|
57
|
+
t._topicController = this;
|
|
58
|
+
const r = t.topic, i = this._topics.get(r);
|
|
59
|
+
if (i)
|
|
60
|
+
switch (i.status) {
|
|
61
|
+
case "fulfilled":
|
|
62
|
+
return i.data;
|
|
63
|
+
case "rejected":
|
|
64
|
+
throw i.error;
|
|
65
|
+
case "pending":
|
|
66
|
+
return i.promise;
|
|
67
|
+
}
|
|
68
|
+
let o, c;
|
|
69
|
+
const n = new Promise((p, u) => {
|
|
70
|
+
o = p, c = u;
|
|
71
|
+
});
|
|
72
|
+
return this._topics.set(r, { status: "pending", promise: n, resolve: o, reject: c }), this.subscribe(r), n;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Convenience wrapper — pushes a mutation event through the QueryClient
|
|
76
|
+
* so that entities and live collections are updated reactively.
|
|
77
|
+
*/
|
|
78
|
+
sendMutationEvent(e) {
|
|
79
|
+
this.queryClient.applyMutationEvent(e);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export {
|
|
83
|
+
g as TopicQuery,
|
|
84
|
+
_ as TopicQueryController
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/topic/TopicQuery.ts","../../../../src/topic/TopicQueryController.ts"],"sourcesContent":["import { Query } from '../query.js';\nimport type { TopicQueryController } from './TopicQueryController.js';\nimport type { QueryConfigOptions } from '../query-types.js';\n\n// ================================\n// TopicQuery — declarative topic-based query definition\n// ================================\n\nexport abstract class TopicQuery extends Query {\n static override controller: typeof TopicQueryController;\n\n abstract topic: string;\n\n getIdentityKey(): string {\n return `topic:${this.topic}`;\n }\n\n getConfig(): QueryConfigOptions {\n return {\n staleTime: 0,\n subscribe: () => {\n return () => {\n const controller = (this as Record<string, any>)._topicController as TopicQueryController | undefined;\n controller?.unsubscribe(this.topic);\n };\n },\n };\n }\n}\n","import { QueryController } from '../QueryController.js';\nimport type { Query } from '../query.js';\nimport type { MutationEvent } from '../types.js';\n\n// ================================\n// TopicQueryController — abstract controller for topic-based subscriptions\n// ================================\n\ninterface TopicCtx extends Query {\n topic: string;\n _topicController?: TopicQueryController;\n}\n\ninterface TopicState {\n status: 'pending' | 'fulfilled' | 'rejected';\n promise?: Promise<unknown>;\n resolve?: (data: unknown) => void;\n reject?: (error: unknown) => void;\n data?: unknown;\n error?: unknown;\n}\n\nexport abstract class TopicQueryController extends QueryController {\n private _topics = new Map<string, TopicState>();\n\n /**\n * Called when a query activates for a given topic.\n * Implementations should start delivering data for this topic,\n * calling `fulfillTopic()` when initial data is available and\n * `sendMutationEvent()` for ongoing updates.\n */\n abstract subscribe(topic: string): void;\n\n /**\n * Called when the query deactivates. Implementations should\n * tear down any resources for this topic.\n */\n abstract unsubscribe(topic: string): void;\n\n /**\n * Resolve the pending promise for a topic with initial data.\n * Can be called before `send()` — the data will be picked up\n * when the query activates.\n */\n protected fulfillTopic(topic: string, data: unknown): void {\n const state = this._topics.get(topic);\n\n if (state === undefined) {\n this._topics.set(topic, { status: 'fulfilled', data });\n return;\n }\n\n if (state.status === 'pending') {\n state.status = 'fulfilled';\n state.data = data;\n state.resolve!(data);\n }\n }\n\n /**\n * Reject the pending promise for a topic.\n * Can be called before `send()` — the error will be propagated\n * when the query activates.\n */\n protected rejectTopic(topic: string, error: unknown): void {\n const state = this._topics.get(topic);\n\n if (state === undefined) {\n this._topics.set(topic, { status: 'rejected', error });\n return;\n }\n\n if (state.status === 'pending') {\n state.status = 'rejected';\n state.error = error;\n state.reject!(error);\n }\n }\n\n /**\n * Clears internal state for a topic. Called automatically by\n * `unsubscribe` — subclasses generally don't need to call this.\n */\n protected clearTopic(topic: string): void {\n this._topics.delete(topic);\n }\n\n protected clearAll(): void {\n this._topics.clear();\n }\n\n override async send(ctx: Query, _signal: AbortSignal): Promise<unknown> {\n const topicCtx = ctx as TopicCtx;\n topicCtx._topicController = this;\n const topic = topicCtx.topic;\n\n const existing = this._topics.get(topic);\n\n if (existing) {\n switch (existing.status) {\n case 'fulfilled':\n return existing.data;\n case 'rejected':\n throw existing.error;\n case 'pending':\n return existing.promise;\n }\n }\n\n // No state yet — create a deferred and subscribe\n let resolve!: (data: unknown) => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<unknown>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n this._topics.set(topic, { status: 'pending', promise, resolve, reject });\n this.subscribe(topic);\n\n return promise;\n }\n\n /**\n * Convenience wrapper — pushes a mutation event through the QueryClient\n * so that entities and live collections are updated reactively.\n */\n protected sendMutationEvent(event: MutationEvent): void {\n this.queryClient!.applyMutationEvent(event);\n }\n}\n"],"names":["TopicQuery","Query","TopicQueryController","QueryController","topic","data","state","error","ctx","_signal","topicCtx","existing","resolve","reject","promise","res","rej","event"],"mappings":";;AAQO,MAAeA,UAAmBC,EAAM;AAAA,EAC7C,OAAgB;AAAA,EAIhB,iBAAyB;AACvB,WAAO,SAAS,KAAK,KAAK;AAAA,EAC5B;AAAA,EAEA,YAAgC;AAC9B,WAAO;AAAA,MACL,WAAW;AAAA,MACX,WAAW,MACF,MAAM;AAEX,QADoB,KAA6B,kBACrC,YAAY,KAAK,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,EAEJ;AACF;ACNO,MAAeC,UAA6BC,EAAgB;AAAA,EACzD,8BAAc,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBZ,aAAaC,GAAeC,GAAqB;AACzD,UAAMC,IAAQ,KAAK,QAAQ,IAAIF,CAAK;AAEpC,QAAIE,MAAU,QAAW;AACvB,WAAK,QAAQ,IAAIF,GAAO,EAAE,QAAQ,aAAa,MAAAC,GAAM;AACrD;AAAA,IACF;AAEA,IAAIC,EAAM,WAAW,cACnBA,EAAM,SAAS,aACfA,EAAM,OAAOD,GACbC,EAAM,QAASD,CAAI;AAAA,EAEvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,YAAYD,GAAeG,GAAsB;AACzD,UAAMD,IAAQ,KAAK,QAAQ,IAAIF,CAAK;AAEpC,QAAIE,MAAU,QAAW;AACvB,WAAK,QAAQ,IAAIF,GAAO,EAAE,QAAQ,YAAY,OAAAG,GAAO;AACrD;AAAA,IACF;AAEA,IAAID,EAAM,WAAW,cACnBA,EAAM,SAAS,YACfA,EAAM,QAAQC,GACdD,EAAM,OAAQC,CAAK;AAAA,EAEvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMU,WAAWH,GAAqB;AACxC,SAAK,QAAQ,OAAOA,CAAK;AAAA,EAC3B;AAAA,EAEU,WAAiB;AACzB,SAAK,QAAQ,MAAA;AAAA,EACf;AAAA,EAEA,MAAe,KAAKI,GAAYC,GAAwC;AACtE,UAAMC,IAAWF;AACjB,IAAAE,EAAS,mBAAmB;AAC5B,UAAMN,IAAQM,EAAS,OAEjBC,IAAW,KAAK,QAAQ,IAAIP,CAAK;AAEvC,QAAIO;AACF,cAAQA,EAAS,QAAA;AAAA,QACf,KAAK;AACH,iBAAOA,EAAS;AAAA,QAClB,KAAK;AACH,gBAAMA,EAAS;AAAA,QACjB,KAAK;AACH,iBAAOA,EAAS;AAAA,MAAA;AAKtB,QAAIC,GACAC;AACJ,UAAMC,IAAU,IAAI,QAAiB,CAACC,GAAKC,MAAQ;AACjD,MAAAJ,IAAUG,GACVF,IAASG;AAAA,IACX,CAAC;AAED,gBAAK,QAAQ,IAAIZ,GAAO,EAAE,QAAQ,WAAW,SAAAU,GAAS,SAAAF,GAAS,QAAAC,GAAQ,GACvE,KAAK,UAAUT,CAAK,GAEbU;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMU,kBAAkBG,GAA4B;AACtD,SAAK,YAAa,mBAAmBA,CAAK;AAAA,EAC5C;AACF;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type WarnFn = (message: string, context?: Record<string, unknown>) => void;
|
|
2
|
+
/**
|
|
3
|
+
* Base class for entity definitions. Users extend this to define entity shapes.
|
|
4
|
+
* Also serves as the prototype for entity proxies, so `proxy instanceof Entity` works.
|
|
5
|
+
*/
|
|
6
|
+
export declare class Entity {
|
|
7
|
+
static cache?: {
|
|
8
|
+
gcTime?: number;
|
|
9
|
+
};
|
|
10
|
+
__subscribe?(onEvent: (event: import('./types.js').MutationEvent) => void): (() => void) | undefined;
|
|
11
|
+
constructor();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Deep merge two objects, with the update object taking precedence.
|
|
15
|
+
* Arrays and non-plain objects (Date, etc.) are replaced, not merged.
|
|
16
|
+
* Only plain objects are recursively merged.
|
|
17
|
+
*/
|
|
18
|
+
export declare function mergeValues<T extends Record<string, unknown>>(target: Record<string, unknown>, update: Record<string, unknown>): T;
|
|
19
|
+
export { PROXY_ID, getProxyId } from './proxyId.js';
|
|
20
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/proxy.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAKlF;;;GAGG;AACH,qBAAa,MAAM;IACjB,MAAM,CAAC,KAAK,CAAC,EAAE;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,YAAY,EAAE,aAAa,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS;;CAKrG;AAQD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,CAAC,CAWH;AAED,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WeakMap that brands entity proxies with their numeric key.
|
|
3
|
+
* Shared between EntityInstance (writes) and proxy.ts (reads for
|
|
4
|
+
* parseObjectValue / mergeValues identity checks).
|
|
5
|
+
*/
|
|
6
|
+
export declare const PROXY_ID: WeakMap<object, number>;
|
|
7
|
+
export declare function getProxyId(object: Record<string, unknown>): number | undefined;
|
|
8
|
+
//# sourceMappingURL=proxyId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxyId.d.ts","sourceRoot":"","sources":["../../src/proxyId.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,yBAAgC,CAAC;AAEtD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAE9E"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type Signal } from 'signalium';
|
|
2
|
+
import { NetworkMode, RetryConfig, BaseUrlValue } from './types.js';
|
|
3
|
+
import { QueryDefinition } from './query.js';
|
|
4
|
+
export interface QueryContext {
|
|
5
|
+
log?: {
|
|
6
|
+
error?: (message: string, error?: unknown) => void;
|
|
7
|
+
warn?: (message: string, error?: unknown) => void;
|
|
8
|
+
info?: (message: string) => void;
|
|
9
|
+
debug?: (message: string) => void;
|
|
10
|
+
};
|
|
11
|
+
evictionMultiplier?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolves a BaseUrlValue to a string.
|
|
15
|
+
* Handles static strings, Signals, and functions.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveBaseUrl(baseUrl: BaseUrlValue | undefined): string | undefined;
|
|
18
|
+
export interface QueryCacheOptions {
|
|
19
|
+
maxCount?: number;
|
|
20
|
+
cacheTime?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface FetchNextConfig {
|
|
23
|
+
/** Override the URL/path for the next page request. Can be a FieldRef (e.g. this.result.nextUrl). */
|
|
24
|
+
url?: unknown;
|
|
25
|
+
/** Search params for the next page. Values can be FieldRefs (e.g. this.result.nextCursor). */
|
|
26
|
+
searchParams?: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
export interface QueryConfigOptions {
|
|
29
|
+
gcTime?: number;
|
|
30
|
+
staleTime?: number;
|
|
31
|
+
debounce?: number;
|
|
32
|
+
networkMode?: NetworkMode;
|
|
33
|
+
retry?: RetryConfig | number | boolean;
|
|
34
|
+
refreshStaleOnReconnect?: boolean;
|
|
35
|
+
subscribe?: (this: any, onEvent: (event: import('./types.js').MutationEvent) => void) => () => void;
|
|
36
|
+
}
|
|
37
|
+
export type QueryParams = Record<string, string | number | boolean | undefined | null | Signal<string | number | boolean | undefined | null> | unknown[] | Record<string, unknown>>;
|
|
38
|
+
export type PreloadedEntityMap = Map<number, Record<string, unknown>>;
|
|
39
|
+
export interface CachedQuery {
|
|
40
|
+
value: unknown;
|
|
41
|
+
refIds: Set<number> | undefined;
|
|
42
|
+
updatedAt: number;
|
|
43
|
+
preloadedEntities?: PreloadedEntityMap;
|
|
44
|
+
}
|
|
45
|
+
export interface QueryStore {
|
|
46
|
+
loadQuery(queryDef: QueryDefinition<any, any, any>, queryKey: number): MaybePromise<CachedQuery | undefined>;
|
|
47
|
+
saveQuery(queryDef: QueryDefinition<any, any, any>, queryKey: number, value: unknown, updatedAt: number, refIds?: Set<number>): void;
|
|
48
|
+
saveEntity(entityKey: number, value: unknown, refIds?: Set<number>): void;
|
|
49
|
+
activateQuery(queryDef: QueryDefinition<any, any, any>, storageKey: number): void;
|
|
50
|
+
deleteQuery(queryKey: number): void;
|
|
51
|
+
purgeStaleQueries?(): MaybePromise<void>;
|
|
52
|
+
}
|
|
53
|
+
export type MaybePromise<T> = T | Promise<T>;
|
|
54
|
+
export declare function extractParamsForKey(params: QueryParams | undefined): Record<string, unknown> | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Computes the query key for instance lookup. Instance keys use raw params
|
|
57
|
+
* (with Signals), storage keys use extracted params (Signal values read).
|
|
58
|
+
*/
|
|
59
|
+
export declare const queryKeyFor: (queryDef: QueryDefinition<any, any, any>, params: unknown) => number;
|
|
60
|
+
//# sourceMappingURL=query-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-types.d.ts","sourceRoot":"","sources":["../../src/query-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { ExtractType, TypeDef, TypeDefShape, RetryConfig, QueryPromise } from './types.js';
|
|
2
|
+
import { QueryCacheOptions, QueryConfigOptions, FetchNextConfig, QueryParams } from './QueryClient.js';
|
|
3
|
+
import { ValidatorDef } from './typeDefs.js';
|
|
4
|
+
import { HasRequiredKeys, Optionalize, Signalize } from './type-utils.js';
|
|
5
|
+
import { type CapturedDefinition } from './fieldRef.js';
|
|
6
|
+
import type { QueryController } from './QueryController.js';
|
|
7
|
+
export interface ResolvedRetryConfig {
|
|
8
|
+
retries: number;
|
|
9
|
+
retryDelay: (attempt: number) => number;
|
|
10
|
+
}
|
|
11
|
+
export declare function resolveRetryConfig(retryOption: RetryConfig | number | boolean | undefined, isServer?: boolean): ResolvedRetryConfig;
|
|
12
|
+
export declare abstract class Query {
|
|
13
|
+
static cache?: QueryCacheOptions;
|
|
14
|
+
/**
|
|
15
|
+
* The controller class responsible for sending requests for this query type.
|
|
16
|
+
* Must be set on each concrete Query subclass (or inherited from a base like RESTQuery).
|
|
17
|
+
*/
|
|
18
|
+
static controller?: typeof QueryController;
|
|
19
|
+
params?: Record<string, TypeDef>;
|
|
20
|
+
abstract result: TypeDefShape;
|
|
21
|
+
config?: QueryConfigOptions;
|
|
22
|
+
context: import('./query-types.js').QueryContext;
|
|
23
|
+
refetch: () => void;
|
|
24
|
+
resultData: Record<string, unknown>;
|
|
25
|
+
rawFetchNext: FetchNextConfig | undefined;
|
|
26
|
+
abstract getIdentityKey(): unknown;
|
|
27
|
+
getConfig?(): QueryConfigOptions | undefined;
|
|
28
|
+
constructor();
|
|
29
|
+
}
|
|
30
|
+
export interface ResolvedQueryOptions {
|
|
31
|
+
config: QueryConfigOptions | undefined;
|
|
32
|
+
retryConfig: ResolvedRetryConfig;
|
|
33
|
+
}
|
|
34
|
+
export interface QueryDefinitionStatics {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
/** Root entity shape. For non-entity results this is a synthetic EntityDef
|
|
37
|
+
* with QUERY_ID as idField. For entity results this is the entity's own
|
|
38
|
+
* ValidatorDef. */
|
|
39
|
+
readonly shape: ValidatorDef<unknown>;
|
|
40
|
+
readonly cache: QueryCacheOptions | undefined;
|
|
41
|
+
/** Raw fetchNext config with unresolved FieldRefs, extracted before reification. */
|
|
42
|
+
readonly rawFetchNext: FetchNextConfig | undefined;
|
|
43
|
+
/** Whether the controller implements sendNext(). */
|
|
44
|
+
readonly hasSendNext: boolean;
|
|
45
|
+
/** Whether the result shape is already an entity (vs synthetic wrapper). */
|
|
46
|
+
readonly isEntityResult: boolean;
|
|
47
|
+
/** The controller class responsible for sending requests. */
|
|
48
|
+
readonly controllerClass: typeof QueryController;
|
|
49
|
+
}
|
|
50
|
+
export declare class QueryDefinition<Params extends QueryParams | undefined, Result, StreamType> {
|
|
51
|
+
readonly captured: CapturedDefinition<Query>;
|
|
52
|
+
readonly statics: QueryDefinitionStatics;
|
|
53
|
+
constructor(statics: QueryDefinitionStatics, captured: CapturedDefinition<Query>);
|
|
54
|
+
createExecutionContext(actualParams: Record<string, unknown>, queryContext: import('./query-types.js').QueryContext): Query;
|
|
55
|
+
resolveOptions(ctx: Query): ResolvedQueryOptions;
|
|
56
|
+
static for(QueryClass: new () => Query): QueryDefinition<any, any, any>;
|
|
57
|
+
}
|
|
58
|
+
export type ExtractQueryParams<T extends Query> = T['params'] extends Record<string, TypeDef> ? {
|
|
59
|
+
[K in keyof T['params']]: ExtractType<T['params'][K]>;
|
|
60
|
+
} : {};
|
|
61
|
+
export declare const queryKeyForClass: (cls: new () => Query, params: unknown) => number;
|
|
62
|
+
export declare function getQueryDefinition(QueryClass: new () => Query): QueryDefinition<any, any, any>;
|
|
63
|
+
export declare function fetchQuery<T extends Query>(QueryClass: new () => T, ...args: HasRequiredKeys<ExtractType<T['params']>> extends true ? [params: Optionalize<Signalize<ExtractType<T['params']>>>] : [params?: Optionalize<Signalize<ExtractType<T['params']>>> | undefined]): QueryPromise<T>;
|
|
64
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ExtractType, QueryPromise } from '../types.js';
|
|
2
|
+
import { Query } from '../query.js';
|
|
3
|
+
import { HasRequiredKeys, Optionalize, Signalize } from '../type-utils.js';
|
|
4
|
+
export declare function useQuery<T extends Query>(QueryClass: new () => T, ...args: HasRequiredKeys<ExtractType<T['params']>> extends true ? [params: Optionalize<Signalize<ExtractType<T['params']>>>] : [params?: Optionalize<Signalize<ExtractType<T['params']>>> | undefined]): QueryPromise<T>;
|
|
5
|
+
//# sourceMappingURL=use-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-query.d.ts","sourceRoot":"","sources":["../../../src/react/use-query.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAkC,KAAK,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAqD3E,wBAAgB,QAAQ,CAAC,CAAC,SAAS,KAAK,EACtC,UAAU,EAAE,UAAU,CAAC,EACvB,GAAG,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,GAC3D,CAAC,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAC1D,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAC1E,YAAY,CAAC,CAAC,CAAC,CAMjB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Mutation } from '../mutation.js';
|
|
2
|
+
import type { BaseUrlValue, QueryRequestOptions } from '../types.js';
|
|
3
|
+
import { RESTQueryController } from './RESTQueryController.js';
|
|
4
|
+
export declare abstract class RESTMutation extends Mutation {
|
|
5
|
+
static controller: typeof RESTQueryController;
|
|
6
|
+
path?: string;
|
|
7
|
+
baseUrl?: BaseUrlValue;
|
|
8
|
+
method: 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
9
|
+
body?: Record<string, unknown>;
|
|
10
|
+
headers?: HeadersInit;
|
|
11
|
+
requestOptions?: QueryRequestOptions;
|
|
12
|
+
getIdentityKey(): string;
|
|
13
|
+
getPath?(): string | undefined;
|
|
14
|
+
getMethod?(): string;
|
|
15
|
+
getBody?(): Record<string, unknown> | undefined;
|
|
16
|
+
getRequestOptions?(): QueryRequestOptions | undefined;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=RESTMutation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RESTMutation.d.ts","sourceRoot":"","sources":["../../../src/rest/RESTMutation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,8BAAsB,YAAa,SAAQ,QAAQ;IACjD,OAAgB,UAAU,6BAAuB;IAEjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAU;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAErC,cAAc,IAAI,MAAM;IAIxB,OAAO,CAAC,IAAI,MAAM,GAAG,SAAS;IAC9B,SAAS,CAAC,IAAI,MAAM;IACpB,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAC/C,iBAAiB,CAAC,IAAI,mBAAmB,GAAG,SAAS;CACtD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Query } from '../query.js';
|
|
2
|
+
import { RESTQueryController } from './RESTQueryController.js';
|
|
3
|
+
import type { FetchNextConfig } from '../query-types.js';
|
|
4
|
+
import type { BaseUrlValue, QueryRequestOptions } from '../types.js';
|
|
5
|
+
export declare abstract class RESTQuery extends Query {
|
|
6
|
+
static controller: typeof RESTQueryController;
|
|
7
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
8
|
+
path?: string;
|
|
9
|
+
baseUrl?: BaseUrlValue;
|
|
10
|
+
searchParams?: Record<string, unknown>;
|
|
11
|
+
body?: Record<string, unknown>;
|
|
12
|
+
headers?: HeadersInit;
|
|
13
|
+
requestOptions?: QueryRequestOptions;
|
|
14
|
+
fetchNext?: FetchNextConfig;
|
|
15
|
+
response: Response | undefined;
|
|
16
|
+
getIdentityKey(): string;
|
|
17
|
+
getPath?(): string | undefined;
|
|
18
|
+
getMethod?(): string;
|
|
19
|
+
getSearchParams?(): Record<string, unknown> | undefined;
|
|
20
|
+
getBody?(): Record<string, unknown> | undefined;
|
|
21
|
+
getRequestOptions?(): QueryRequestOptions | undefined;
|
|
22
|
+
getFetchNext?(): FetchNextConfig | undefined;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=RESTQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RESTQuery.d.ts","sourceRoot":"","sources":["../../../src/rest/RESTQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMrE,8BAAsB,SAAU,SAAQ,KAAK;IAC3C,OAAgB,UAAU,6BAAuB;IAEjD,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAS;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,SAAS,CAAC,EAAE,eAAe,CAAC;IAEpB,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAEvC,cAAc,IAAI,MAAM;IAKxB,OAAO,CAAC,IAAI,MAAM,GAAG,SAAS;IAC9B,SAAS,CAAC,IAAI,MAAM;IACpB,eAAe,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IACvD,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAC/C,iBAAiB,CAAC,IAAI,mBAAmB,GAAG,SAAS;IACrD,YAAY,CAAC,IAAI,eAAe,GAAG,SAAS;CAC7C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { QueryController } from '../QueryController.js';
|
|
2
|
+
import type { Query } from '../query.js';
|
|
3
|
+
import type { Mutation } from '../mutation.js';
|
|
4
|
+
import type { QueryRequestInit, BaseUrlValue } from '../types.js';
|
|
5
|
+
export interface ResolvedFetchNext {
|
|
6
|
+
url?: string;
|
|
7
|
+
searchParams?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export interface RESTQueryControllerOptions {
|
|
10
|
+
fetch?: (url: string, init?: QueryRequestInit) => Promise<Response>;
|
|
11
|
+
baseUrl?: BaseUrlValue;
|
|
12
|
+
}
|
|
13
|
+
export declare class RESTQueryController extends QueryController {
|
|
14
|
+
private readonly _fetch;
|
|
15
|
+
private readonly _baseUrl;
|
|
16
|
+
constructor(options?: RESTQueryControllerOptions);
|
|
17
|
+
send(ctx: Query, signal: AbortSignal): Promise<unknown>;
|
|
18
|
+
sendNext(ctx: Query, signal: AbortSignal): Promise<unknown>;
|
|
19
|
+
hasNext(ctx: Query): boolean;
|
|
20
|
+
private resolveFetchNext;
|
|
21
|
+
/**
|
|
22
|
+
* Resolves a path to a full URL.
|
|
23
|
+
*
|
|
24
|
+
* - Absolute URLs (`https://...`, `//...`) are returned as-is.
|
|
25
|
+
* - Root-relative paths (`/foo`) are prepended with the resolved baseUrl.
|
|
26
|
+
* The baseUrl priority is: per-query/mutation > controller-level > `location.origin`.
|
|
27
|
+
* If none is available and the path is root-relative, an error is thrown.
|
|
28
|
+
* - Other paths (e.g. `example.com/foo`) are returned as-is.
|
|
29
|
+
*/
|
|
30
|
+
private buildUrl;
|
|
31
|
+
private executeRequest;
|
|
32
|
+
sendMutation(ctx: Mutation, signal: AbortSignal): Promise<unknown>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=RESTQueryController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RESTQueryController.d.ts","sourceRoot":"","sources":["../../../src/rest/RESTQueryController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAuB,MAAM,aAAa,CAAC;AAMvF,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAMD,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpE,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAMD,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8D;IACrF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;gBAExC,OAAO,CAAC,EAAE,0BAA0B;IAOjC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvD,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAQjE,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO;IAsBrC,OAAO,CAAC,gBAAgB;IAmBxB;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ;YAyBF,cAAc;IA0Db,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CA+BlF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { RESTQuery } from './RESTQuery.js';
|
|
2
|
+
export { RESTMutation } from './RESTMutation.js';
|
|
3
|
+
export { RESTQueryController } from './RESTQueryController.js';
|
|
4
|
+
export type { ResolvedFetchNext, RESTQueryControllerOptions } from './RESTQueryController.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rest/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ResolvedRetryConfig } from './query.js';
|
|
2
|
+
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
|
|
3
|
+
export declare function withRetry<T>(fn: () => Promise<T>, config: ResolvedRetryConfig, signal?: AbortSignal): Promise<T>;
|
|
4
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrE;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC,CAiBZ"}
|