fetchium 0.1.1 → 0.2.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 +12 -0
- package/README.md +1 -1
- package/dist/cjs/development/QueryAdapter-DUo338ga.js +2 -0
- package/dist/cjs/development/QueryAdapter-DUo338ga.js.map +1 -0
- package/dist/cjs/development/QueryClient-vYETX2J2.js +2 -0
- package/dist/cjs/development/QueryClient-vYETX2J2.js.map +1 -0
- package/dist/cjs/development/index.js +1 -1
- package/dist/cjs/development/mutation-Beh3eks8.js +2 -0
- package/dist/cjs/development/mutation-Beh3eks8.js.map +1 -0
- package/dist/cjs/development/react/index.js +1 -1
- package/dist/cjs/development/rest/index.js +1 -1
- package/dist/cjs/development/rest/index.js.map +1 -1
- package/dist/cjs/development/topic/index.js +1 -1
- package/dist/cjs/development/topic/index.js.map +1 -1
- package/dist/cjs/production/QueryAdapter-DUo338ga.js +2 -0
- package/dist/cjs/production/QueryAdapter-DUo338ga.js.map +1 -0
- package/dist/cjs/production/QueryClient-DJoA1ac6.js +2 -0
- package/dist/cjs/production/QueryClient-DJoA1ac6.js.map +1 -0
- package/dist/cjs/production/index.js +1 -1
- package/dist/cjs/production/mutation-BnIsaYdm.js +2 -0
- package/dist/cjs/production/mutation-BnIsaYdm.js.map +1 -0
- package/dist/cjs/production/react/index.js +1 -1
- package/dist/cjs/production/rest/index.js +1 -1
- package/dist/cjs/production/rest/index.js.map +1 -1
- package/dist/cjs/production/topic/index.js +1 -1
- package/dist/cjs/production/topic/index.js.map +1 -1
- package/dist/esm/{QueryController.d.ts → QueryAdapter.d.ts} +7 -7
- package/dist/esm/QueryAdapter.d.ts.map +1 -0
- package/dist/esm/QueryClient.d.ts +6 -6
- package/dist/esm/QueryClient.d.ts.map +1 -1
- package/dist/esm/QueryResult.d.ts +2 -2
- package/dist/esm/QueryResult.d.ts.map +1 -1
- package/dist/esm/development/{QueryController-Ch_ncxiI.js → QueryAdapter-Bu5UJjE4.js} +2 -2
- package/dist/esm/development/QueryAdapter-Bu5UJjE4.js.map +1 -0
- package/dist/esm/development/{QueryClient-Dtde3pss.js → QueryClient-zAD_O9xj.js} +487 -479
- package/dist/esm/development/QueryClient-zAD_O9xj.js.map +1 -0
- package/dist/esm/development/index.js +14 -14
- package/dist/esm/development/{mutation-UZshUQAf.js → mutation-lw06SxbJ.js} +13 -13
- package/dist/esm/development/mutation-lw06SxbJ.js.map +1 -0
- package/dist/esm/development/react/index.js +1 -1
- package/dist/esm/development/rest/index.js +26 -26
- package/dist/esm/development/rest/index.js.map +1 -1
- package/dist/esm/development/topic/index.js +11 -11
- package/dist/esm/development/topic/index.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/mutation.d.ts +3 -3
- package/dist/esm/mutation.d.ts.map +1 -1
- package/dist/esm/production/{QueryController-Ch_ncxiI.js → QueryAdapter-Bu5UJjE4.js} +2 -2
- package/dist/esm/production/QueryAdapter-Bu5UJjE4.js.map +1 -0
- package/dist/esm/production/{QueryClient-YqnBxFy1.js → QueryClient-DSAzqTG6.js} +983 -975
- package/dist/esm/production/QueryClient-DSAzqTG6.js.map +1 -0
- package/dist/esm/production/index.js +14 -14
- package/dist/esm/production/{mutation-pgFl1uIY.js → mutation-Dmb9k9FG.js} +13 -13
- package/dist/esm/production/mutation-Dmb9k9FG.js.map +1 -0
- package/dist/esm/production/react/index.js +1 -1
- package/dist/esm/production/rest/index.js +26 -26
- package/dist/esm/production/rest/index.js.map +1 -1
- package/dist/esm/production/topic/index.js +11 -11
- package/dist/esm/production/topic/index.js.map +1 -1
- package/dist/esm/query.d.ts +6 -6
- package/dist/esm/query.d.ts.map +1 -1
- package/dist/esm/rest/RESTMutation.d.ts +2 -2
- package/dist/esm/rest/RESTMutation.d.ts.map +1 -1
- package/dist/esm/rest/RESTQuery.d.ts +2 -2
- package/dist/esm/rest/RESTQuery.d.ts.map +1 -1
- package/dist/esm/rest/{RESTQueryController.d.ts → RESTQueryAdapter.d.ts} +6 -6
- package/dist/esm/rest/RESTQueryAdapter.d.ts.map +1 -0
- package/dist/esm/rest/index.d.ts +2 -2
- package/dist/esm/rest/index.d.ts.map +1 -1
- package/dist/esm/retry.d.ts.map +1 -1
- package/dist/esm/topic/TopicQuery.d.ts +2 -2
- package/dist/esm/topic/TopicQuery.d.ts.map +1 -1
- package/dist/esm/topic/{TopicQueryController.d.ts → TopicQueryAdapter.d.ts} +3 -3
- package/dist/esm/topic/TopicQueryAdapter.d.ts.map +1 -0
- package/dist/esm/topic/index.d.ts +1 -1
- package/dist/esm/topic/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/plugin/docs/api/fetchium.md +40 -40
- package/plugin/docs/core/queries.md +15 -15
- package/plugin/docs/core/streaming.md +18 -18
- package/plugin/docs/data/mutations.md +5 -5
- package/plugin/docs/quickstart.md +1 -1
- package/plugin/docs/setup/project-setup.md +19 -19
- package/dist/cjs/development/QueryClient-CLi3ONNM.js +0 -2
- package/dist/cjs/development/QueryClient-CLi3ONNM.js.map +0 -1
- package/dist/cjs/development/QueryController-BQA49OYU.js +0 -2
- package/dist/cjs/development/QueryController-BQA49OYU.js.map +0 -1
- package/dist/cjs/development/mutation-CikIl_6k.js +0 -2
- package/dist/cjs/development/mutation-CikIl_6k.js.map +0 -1
- package/dist/cjs/production/QueryClient-N0MJmuHW.js +0 -2
- package/dist/cjs/production/QueryClient-N0MJmuHW.js.map +0 -1
- package/dist/cjs/production/QueryController-BQA49OYU.js +0 -2
- package/dist/cjs/production/QueryController-BQA49OYU.js.map +0 -1
- package/dist/cjs/production/mutation-P_Yb4LI9.js +0 -2
- package/dist/cjs/production/mutation-P_Yb4LI9.js.map +0 -1
- package/dist/esm/QueryController.d.ts.map +0 -1
- package/dist/esm/development/QueryClient-Dtde3pss.js.map +0 -1
- package/dist/esm/development/QueryController-Ch_ncxiI.js.map +0 -1
- package/dist/esm/development/mutation-UZshUQAf.js.map +0 -1
- package/dist/esm/production/QueryClient-YqnBxFy1.js.map +0 -1
- package/dist/esm/production/QueryController-Ch_ncxiI.js.map +0 -1
- package/dist/esm/production/mutation-pgFl1uIY.js.map +0 -1
- package/dist/esm/rest/RESTQueryController.d.ts.map +0 -1
- package/dist/esm/topic/TopicQueryController.d.ts.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { A as r, E as s, G as t, L as o, a as n, M as i, N as M, b as g, c as u, d as y, e as
|
|
2
|
-
import { Q as F } from "./
|
|
3
|
-
import { M as
|
|
1
|
+
import { A as r, E as s, G as t, L as o, a as n, M as i, N as M, b as g, c as u, d as y, e as f, Q as C, f as N, g as Q, h as d, R as k, i as l, j as p, k as m, q as E, r as R, t as w } from "./QueryClient-DSAzqTG6.js";
|
|
2
|
+
import { Q as F } from "./QueryAdapter-Bu5UJjE4.js";
|
|
3
|
+
import { M as A, g as K, m as Y } from "./mutation-Dmb9k9FG.js";
|
|
4
4
|
export {
|
|
5
5
|
r as ARRAY_KEY,
|
|
6
6
|
s as Entity,
|
|
@@ -8,23 +8,23 @@ export {
|
|
|
8
8
|
o as LiveFieldConfig,
|
|
9
9
|
n as LiveFieldType,
|
|
10
10
|
i as Mask,
|
|
11
|
-
|
|
11
|
+
A as Mutation,
|
|
12
12
|
M as NetworkManager,
|
|
13
13
|
g as NetworkManagerContext,
|
|
14
14
|
u as NetworkMode,
|
|
15
15
|
y as NoOpGcManager,
|
|
16
|
-
|
|
16
|
+
f as NoOpNetworkManager,
|
|
17
17
|
C as QUERY_ID,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
Q as
|
|
21
|
-
|
|
18
|
+
N as Query,
|
|
19
|
+
F as QueryAdapter,
|
|
20
|
+
Q as QueryClient,
|
|
21
|
+
d as QueryClientContext,
|
|
22
22
|
k as RECORD_KEY,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
l as defaultNetworkManager,
|
|
24
|
+
p as draft,
|
|
25
|
+
m as fetchQuery,
|
|
26
|
+
K as getMutation,
|
|
27
|
+
Y as mutationKeyForClass,
|
|
28
28
|
E as queryKeyForClass,
|
|
29
29
|
R as registerFormat,
|
|
30
30
|
w as t
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getContext as h } from "signalium";
|
|
2
|
-
import { l as y, h as D, m as w, V as u, t as
|
|
2
|
+
import { l as y, h as D, m as w, V as u, t as d } from "./QueryClient-DSAzqTG6.js";
|
|
3
3
|
class x {
|
|
4
|
-
static
|
|
4
|
+
static adapter;
|
|
5
5
|
params;
|
|
6
6
|
result;
|
|
7
7
|
optimisticUpdates;
|
|
@@ -11,38 +11,38 @@ class x {
|
|
|
11
11
|
return y(this);
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
-
const
|
|
15
|
-
const e =
|
|
14
|
+
const a = /* @__PURE__ */ new WeakMap(), C = (t) => {
|
|
15
|
+
const e = a.get(t);
|
|
16
16
|
if (e === void 0)
|
|
17
17
|
throw new Error("Mutation definition not found");
|
|
18
18
|
return e().id;
|
|
19
19
|
};
|
|
20
20
|
function M(t) {
|
|
21
|
-
let e =
|
|
21
|
+
let e = a.get(t);
|
|
22
22
|
if (e !== void 0)
|
|
23
23
|
return e;
|
|
24
24
|
let o;
|
|
25
|
-
const
|
|
25
|
+
const c = () => {
|
|
26
26
|
if (o !== void 0)
|
|
27
27
|
return o;
|
|
28
|
-
const
|
|
28
|
+
const p = new t(), i = w(p), { fields: n } = i, m = `mutation:${String(i.methods.getIdentityKey.call(n))}`, s = n.params ?? {}, g = s instanceof u ? s : d.object(s), r = n.result, l = r !== void 0 ? r instanceof u ? r : d.object(r) : void 0, f = t.adapter;
|
|
29
29
|
if (!f)
|
|
30
30
|
throw new Error(
|
|
31
|
-
`Mutation class "${t.name}" must define a static \`
|
|
31
|
+
`Mutation class "${t.name}" must define a static \`adapter\` property. Extend RESTMutation (from fetchium/rest) or set \`static adapter = MyAdapter\` on your mutation class.`
|
|
32
32
|
);
|
|
33
33
|
return o = {
|
|
34
34
|
id: m,
|
|
35
|
-
requestShape:
|
|
36
|
-
responseShape:
|
|
35
|
+
requestShape: g,
|
|
36
|
+
responseShape: l,
|
|
37
37
|
captured: i,
|
|
38
38
|
optimisticUpdates: n.optimisticUpdates ?? !1,
|
|
39
39
|
config: n.config,
|
|
40
40
|
effects: n.effects,
|
|
41
41
|
hasGetEffects: typeof i.methods.getEffects == "function",
|
|
42
|
-
|
|
42
|
+
adapterClass: f
|
|
43
43
|
}, o;
|
|
44
44
|
};
|
|
45
|
-
return
|
|
45
|
+
return a.set(t, c), c;
|
|
46
46
|
}
|
|
47
47
|
function S(t) {
|
|
48
48
|
const e = M(t), o = h(D);
|
|
@@ -55,4 +55,4 @@ export {
|
|
|
55
55
|
S as g,
|
|
56
56
|
C as m
|
|
57
57
|
};
|
|
58
|
-
//# sourceMappingURL=mutation-
|
|
58
|
+
//# sourceMappingURL=mutation-Dmb9k9FG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-Dmb9k9FG.js","sources":["../../../src/mutation.ts"],"sourcesContent":["import { getContext, ReactiveTask } from 'signalium';\nimport { ExtractType, InternalTypeDef, MutationEffects, TypeDef, RetryConfig, TypeDefShape } from './types.js';\nimport { QueryClientContext, type QueryContext } from './QueryClient.js';\nimport { ValidatorDef, t } from './typeDefs.js';\nimport { createDefinitionProxy, extractDefinition, type CapturedDefinition } from './fieldRef.js';\nimport type { QueryAdapter } from './QueryAdapter.js';\n\n// ================================\n// Mutation Definition Types\n// ================================\n\nexport interface MutationConfigOptions {\n retry?: RetryConfig | number | false;\n}\n\nexport interface MutationDefinition<Request, Response> {\n id: string;\n requestShape: InternalTypeDef;\n responseShape: InternalTypeDef | undefined;\n captured: CapturedDefinition<Mutation>;\n optimisticUpdates: boolean;\n config?: MutationConfigOptions;\n effects?: MutationEffects;\n hasGetEffects: boolean;\n adapterClass: typeof QueryAdapter;\n}\n\n// ================================\n// Mutation base class\n// ================================\n\nexport abstract class Mutation {\n static adapter?: typeof QueryAdapter;\n\n readonly params?: TypeDefShape;\n readonly result?: TypeDefShape;\n readonly optimisticUpdates?: boolean;\n readonly config?: MutationConfigOptions;\n readonly effects?: Readonly<MutationEffects>;\n\n declare context: QueryContext;\n\n abstract getIdentityKey(): unknown;\n\n getEffects?(): MutationEffects;\n\n constructor() {\n return createDefinitionProxy(this);\n }\n}\n\n// ================================\n// Mutation definition cache and lookup\n// ================================\n\nconst mutationDefCache = new WeakMap<new () => Mutation, () => MutationDefinition<any, any>>();\n\nexport const mutationKeyForClass = (cls: new () => Mutation): string => {\n const getMutationDef = mutationDefCache.get(cls);\n\n if (getMutationDef === undefined) {\n throw new Error('Mutation definition not found');\n }\n\n return getMutationDef().id;\n};\n\n// ================================\n// Internal: build mutation definition from class\n// ================================\n\nfunction buildMutationDefinition(MutationClass: new () => Mutation): () => MutationDefinition<any, any> {\n let cached = mutationDefCache.get(MutationClass);\n\n if (cached !== undefined) {\n return cached;\n }\n\n let mutationDefinition: MutationDefinition<any, any> | undefined;\n\n const getter = (): MutationDefinition<any, any> => {\n if (mutationDefinition !== undefined) {\n return mutationDefinition;\n }\n\n const instance = new MutationClass();\n const captured = extractDefinition(instance);\n const { fields } = captured;\n\n const id = `mutation:${String(captured.methods.getIdentityKey.call(fields))}`;\n\n const requestDef = fields.params ?? {};\n const requestShape = (requestDef instanceof ValidatorDef\n ? requestDef\n : t.object(requestDef)) as unknown as InternalTypeDef;\n const responseDef = fields.result;\n const responseShape =\n responseDef !== undefined\n ? ((responseDef instanceof ValidatorDef ? responseDef : t.object(responseDef)) as unknown as InternalTypeDef)\n : undefined;\n\n const adapterClass = (MutationClass as typeof Mutation).adapter;\n if (!adapterClass) {\n throw new Error(\n `Mutation class \"${MutationClass.name}\" must define a static \\`adapter\\` property. ` +\n `Extend RESTMutation (from fetchium/rest) or set \\`static adapter = MyAdapter\\` on your mutation class.`,\n );\n }\n\n mutationDefinition = {\n id,\n requestShape,\n responseShape,\n captured,\n optimisticUpdates: fields.optimisticUpdates ?? false,\n config: fields.config,\n effects: fields.effects,\n hasGetEffects: typeof captured.methods.getEffects === 'function',\n adapterClass,\n };\n\n return mutationDefinition;\n };\n\n mutationDefCache.set(MutationClass, getter);\n return getter;\n}\n\n// ================================\n// Public API\n// ================================\n\nexport function getMutation<T extends Mutation>(\n MutationClass: new () => T,\n): ReactiveTask<Readonly<ExtractType<T['result']>>, [ExtractType<T['params']>]> {\n const getMutationDef = buildMutationDefinition(MutationClass);\n\n const queryClient = getContext(QueryClientContext);\n\n if (queryClient === undefined) {\n throw new Error('QueryClient not found');\n }\n\n return queryClient.getMutation<any, any>(getMutationDef());\n}\n"],"names":["Mutation","createDefinitionProxy","mutationDefCache","mutationKeyForClass","cls","getMutationDef","buildMutationDefinition","MutationClass","cached","mutationDefinition","getter","instance","captured","extractDefinition","fields","id","requestDef","requestShape","ValidatorDef","t","responseDef","responseShape","adapterClass","getMutation","queryClient","getContext","QueryClientContext"],"mappings":";;AA+BO,MAAeA,EAAS;AAAA,EAC7B,OAAO;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAQT,cAAc;AACZ,WAAOC,EAAsB,IAAI;AAAA,EACnC;AACF;AAMA,MAAMC,wBAAuB,QAAA,GAEhBC,IAAsB,CAACC,MAAoC;AACtE,QAAMC,IAAiBH,EAAiB,IAAIE,CAAG;AAE/C,MAAIC,MAAmB;AACrB,UAAM,IAAI,MAAM,+BAA+B;AAGjD,SAAOA,IAAiB;AAC1B;AAMA,SAASC,EAAwBC,GAAuE;AACtG,MAAIC,IAASN,EAAiB,IAAIK,CAAa;AAE/C,MAAIC,MAAW;AACb,WAAOA;AAGT,MAAIC;AAEJ,QAAMC,IAAS,MAAoC;AACjD,QAAID,MAAuB;AACzB,aAAOA;AAGT,UAAME,IAAW,IAAIJ,EAAA,GACfK,IAAWC,EAAkBF,CAAQ,GACrC,EAAE,QAAAG,MAAWF,GAEbG,IAAK,YAAY,OAAOH,EAAS,QAAQ,eAAe,KAAKE,CAAM,CAAC,CAAC,IAErEE,IAAaF,EAAO,UAAU,CAAA,GAC9BG,IAAgBD,aAAsBE,IACxCF,IACAG,EAAE,OAAOH,CAAU,GACjBI,IAAcN,EAAO,QACrBO,IACJD,MAAgB,SACVA,aAAuBF,IAAeE,IAAcD,EAAE,OAAOC,CAAW,IAC1E,QAEAE,IAAgBf,EAAkC;AACxD,QAAI,CAACe;AACH,YAAM,IAAI;AAAA,QACR,mBAAmBf,EAAc,IAAI;AAAA,MAAA;AAKzC,WAAAE,IAAqB;AAAA,MACnB,IAAAM;AAAA,MACA,cAAAE;AAAA,MACA,eAAAI;AAAA,MACA,UAAAT;AAAA,MACA,mBAAmBE,EAAO,qBAAqB;AAAA,MAC/C,QAAQA,EAAO;AAAA,MACf,SAASA,EAAO;AAAA,MAChB,eAAe,OAAOF,EAAS,QAAQ,cAAe;AAAA,MACtD,cAAAU;AAAA,IAAA,GAGKb;AAAA,EACT;AAEA,SAAAP,EAAiB,IAAIK,GAAeG,CAAM,GACnCA;AACT;AAMO,SAASa,EACdhB,GAC8E;AAC9E,QAAMF,IAAiBC,EAAwBC,CAAa,GAEtDiB,IAAcC,EAAWC,CAAkB;AAEjD,MAAIF,MAAgB;AAClB,UAAM,IAAI,MAAM,uBAAuB;AAGzC,SAAOA,EAAY,YAAsBnB,GAAgB;AAC3D;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as v, o as U, f as O } from "../QueryClient-
|
|
2
|
-
import { Q as T } from "../
|
|
3
|
-
import { M as w } from "../mutation-
|
|
1
|
+
import { n as v, o as U, f as O } from "../QueryClient-DSAzqTG6.js";
|
|
2
|
+
import { Q as T } from "../QueryAdapter-Bu5UJjE4.js";
|
|
3
|
+
import { M as w } from "../mutation-Dmb9k9FG.js";
|
|
4
4
|
class P extends T {
|
|
5
5
|
_fetch;
|
|
6
6
|
_baseUrl;
|
|
@@ -48,7 +48,7 @@ class P extends T {
|
|
|
48
48
|
*
|
|
49
49
|
* - Absolute URLs (`https://...`, `//...`) are returned as-is.
|
|
50
50
|
* - Root-relative paths (`/foo`) are prepended with the resolved baseUrl.
|
|
51
|
-
* The baseUrl priority is: per-query/mutation >
|
|
51
|
+
* The baseUrl priority is: per-query/mutation > adapter-level > `location.origin`.
|
|
52
52
|
* If none is available and the path is root-relative, an error is thrown.
|
|
53
53
|
* - Other paths (e.g. `example.com/foo`) are returned as-is.
|
|
54
54
|
*/
|
|
@@ -59,57 +59,57 @@ class P extends T {
|
|
|
59
59
|
const t = U(s) ?? U(this._baseUrl) ?? globalThis.location?.origin;
|
|
60
60
|
if (!t)
|
|
61
61
|
throw new Error(
|
|
62
|
-
`
|
|
62
|
+
`RESTQueryAdapter: cannot resolve URL for path "${e}". Set \`baseUrl\` on the query/mutation, pass it to \`new RESTQueryAdapter({ baseUrl })\`, or use an absolute URL.`
|
|
63
63
|
);
|
|
64
64
|
return `${t}${e}`;
|
|
65
65
|
}
|
|
66
66
|
return e;
|
|
67
67
|
}
|
|
68
68
|
async executeRequest(e, s, t) {
|
|
69
|
-
const r = t?.url ?? (e.getPath ? e.getPath() : e.path), h = e.getMethod ? e.getMethod() : e.method,
|
|
69
|
+
const r = t?.url ?? (e.getPath ? e.getPath() : e.path), h = e.getMethod ? e.getMethod() : e.method, a = e.getSearchParams ? e.getSearchParams() : e.searchParams, o = t?.searchParams ? { ...a, ...t.searchParams } : a, n = e.getBody ? e.getBody() : e.body, i = e.getRequestOptions ? e.getRequestOptions() : e.requestOptions;
|
|
70
70
|
if (!r)
|
|
71
71
|
throw new Error("RESTQuery requires a path. Define `path` as a field or override `getPath()`.");
|
|
72
72
|
let l = r;
|
|
73
|
-
if (
|
|
73
|
+
if (o) {
|
|
74
74
|
const y = new URLSearchParams();
|
|
75
|
-
for (const b in
|
|
76
|
-
const
|
|
77
|
-
|
|
75
|
+
for (const b in o) {
|
|
76
|
+
const u = o[b];
|
|
77
|
+
u != null && y.append(b, String(u));
|
|
78
78
|
}
|
|
79
79
|
const m = y.toString();
|
|
80
80
|
m && (l += "?" + m);
|
|
81
81
|
}
|
|
82
|
-
const f = i?.baseUrl ?? e.baseUrl,
|
|
82
|
+
const f = i?.baseUrl ?? e.baseUrl, d = this.buildUrl(l, f), { baseUrl: p, signal: R, ...q } = i ?? {}, S = n || e.headers ? {
|
|
83
83
|
...n ? { "Content-Type": "application/json" } : void 0,
|
|
84
84
|
...e.headers
|
|
85
|
-
} : void 0,
|
|
85
|
+
} : void 0, g = await this._fetch(d, {
|
|
86
86
|
method: h,
|
|
87
87
|
headers: S,
|
|
88
88
|
body: n ? JSON.stringify(n) : void 0,
|
|
89
89
|
signal: s,
|
|
90
90
|
...q
|
|
91
91
|
});
|
|
92
|
-
return e.response =
|
|
92
|
+
return e.response = g, g.json();
|
|
93
93
|
}
|
|
94
94
|
async sendMutation(e, s) {
|
|
95
|
-
const t = e, r = t.getPath ? t.getPath() : t.path, h = t.getMethod ? t.getMethod() : t.method,
|
|
95
|
+
const t = e, r = t.getPath ? t.getPath() : t.path, h = t.getMethod ? t.getMethod() : t.method, a = t.getBody ? t.getBody() : t.body, o = t.getRequestOptions ? t.getRequestOptions() : t.requestOptions;
|
|
96
96
|
if (!r)
|
|
97
97
|
throw new Error("RESTMutation requires a path. Define `path` as a field or override `getPath()`.");
|
|
98
|
-
const n =
|
|
99
|
-
...
|
|
98
|
+
const n = o?.baseUrl ?? t.baseUrl, i = this.buildUrl(r, n), { baseUrl: l, signal: f, ...d } = o ?? {}, p = {
|
|
99
|
+
...a !== void 0 ? { "Content-Type": "application/json" } : {},
|
|
100
100
|
...t.headers
|
|
101
101
|
};
|
|
102
102
|
return (await this._fetch(i, {
|
|
103
103
|
method: h,
|
|
104
|
-
headers:
|
|
105
|
-
...
|
|
104
|
+
headers: p,
|
|
105
|
+
...a !== void 0 ? { body: JSON.stringify(a) } : {},
|
|
106
106
|
signal: s,
|
|
107
|
-
...
|
|
107
|
+
...d
|
|
108
108
|
})).json();
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
class
|
|
112
|
-
static
|
|
111
|
+
class Q extends O {
|
|
112
|
+
static adapter = P;
|
|
113
113
|
method = "GET";
|
|
114
114
|
path;
|
|
115
115
|
baseUrl;
|
|
@@ -122,8 +122,8 @@ class M extends O {
|
|
|
122
122
|
return `${this.method ?? "GET"}:${this.path ?? ""}`;
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
class
|
|
126
|
-
static
|
|
125
|
+
class B extends w {
|
|
126
|
+
static adapter = P;
|
|
127
127
|
path;
|
|
128
128
|
baseUrl;
|
|
129
129
|
method = "POST";
|
|
@@ -135,8 +135,8 @@ class Q extends w {
|
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
export {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
P as
|
|
138
|
+
B as RESTMutation,
|
|
139
|
+
Q as RESTQuery,
|
|
140
|
+
P as RESTQueryAdapter
|
|
141
141
|
};
|
|
142
142
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/rest/RESTQueryController.ts","../../../../src/rest/RESTQuery.ts","../../../../src/rest/RESTMutation.ts"],"sourcesContent":["import { QueryController } from '../QueryController.js';\nimport { resolveBaseUrl } from '../query-types.js';\nimport { reifyValue } from '../fieldRef.js';\nimport type { Query } from '../query.js';\nimport type { Mutation } from '../mutation.js';\nimport type { FetchNextConfig } from '../query-types.js';\nimport type { RESTQuery } from './RESTQuery.js';\nimport type { RESTMutation } from './RESTMutation.js';\nimport type { QueryRequestInit, BaseUrlValue, QueryRequestOptions } from '../types.js';\n\n// ================================\n// ResolvedFetchNext\n// ================================\n\nexport interface ResolvedFetchNext {\n url?: string;\n searchParams?: Record<string, unknown>;\n}\n\n// ================================\n// RESTQueryController options\n// ================================\n\nexport interface RESTQueryControllerOptions {\n fetch?: (url: string, init?: QueryRequestInit) => Promise<Response>;\n baseUrl?: BaseUrlValue;\n}\n\n// ================================\n// RESTQueryController\n// ================================\n\nexport class RESTQueryController extends QueryController {\n private readonly _fetch: (url: string, init?: QueryRequestInit) => Promise<Response>;\n private readonly _baseUrl: BaseUrlValue | undefined;\n\n constructor(options?: RESTQueryControllerOptions) {\n super();\n this._fetch =\n options?.fetch ?? (globalThis.fetch as unknown as (url: string, init?: QueryRequestInit) => Promise<Response>);\n this._baseUrl = options?.baseUrl;\n }\n\n override async send(ctx: Query, signal: AbortSignal): Promise<unknown> {\n return this.executeRequest(ctx as RESTQuery, signal);\n }\n\n override async sendNext(ctx: Query, signal: AbortSignal): Promise<unknown> {\n const resolved = this.resolveFetchNext(ctx as RESTQuery);\n if (resolved === undefined) {\n throw new Error('fetchNext is not configured for this query');\n }\n return this.executeRequest(ctx as RESTQuery, signal, resolved);\n }\n\n override hasNext(ctx: Query): boolean {\n const resolved = this.resolveFetchNext(ctx as RESTQuery);\n if (resolved === undefined) return false;\n\n if (resolved.url !== undefined && resolved.url !== null) {\n return true;\n }\n\n if (resolved.searchParams !== undefined) {\n const keys = Object.keys(resolved.searchParams);\n if (keys.length === 0) return false;\n for (const key of keys) {\n if (resolved.searchParams[key] === undefined || resolved.searchParams[key] === null) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n }\n\n private resolveFetchNext(ctx: RESTQuery): ResolvedFetchNext | undefined {\n const dynamicConfig = ctx.getFetchNext ? ctx.getFetchNext() : undefined;\n const fetchNextConfig: FetchNextConfig | undefined = dynamicConfig ?? ctx.rawFetchNext;\n if (fetchNextConfig === undefined) return undefined;\n\n const resolveRoot: Record<string, unknown> = {\n params: ctx.params ?? {},\n result: ctx.resultData,\n };\n\n return {\n url: fetchNextConfig.url !== undefined ? (reifyValue(fetchNextConfig.url, resolveRoot) as string) : undefined,\n searchParams:\n fetchNextConfig.searchParams !== undefined\n ? (reifyValue(fetchNextConfig.searchParams, resolveRoot) as Record<string, unknown>)\n : undefined,\n };\n }\n\n /**\n * Resolves a path to a full URL.\n *\n * - Absolute URLs (`https://...`, `//...`) are returned as-is.\n * - Root-relative paths (`/foo`) are prepended with the resolved baseUrl.\n * The baseUrl priority is: per-query/mutation > controller-level > `location.origin`.\n * If none is available and the path is root-relative, an error is thrown.\n * - Other paths (e.g. `example.com/foo`) are returned as-is.\n */\n private buildUrl(path: string, ctxBaseUrl: BaseUrlValue | undefined): string {\n // Absolute URL — use as-is regardless of any configured baseUrl\n if (path.startsWith('http://') || path.startsWith('https://') || path.startsWith('//')) {\n return path;\n }\n\n // Root-relative path — needs a base\n if (path.startsWith('/')) {\n const base = resolveBaseUrl(ctxBaseUrl) ?? resolveBaseUrl(this._baseUrl) ?? globalThis.location?.origin;\n\n if (!base) {\n throw new Error(\n `RESTQueryController: cannot resolve URL for path \"${path}\". ` +\n `Set \\`baseUrl\\` on the query/mutation, pass it to \\`new RESTQueryController({ baseUrl })\\`, ` +\n `or use an absolute URL.`,\n );\n }\n\n return `${base}${path}`;\n }\n\n // Relative path — use as-is\n return path;\n }\n\n private async executeRequest(\n ctx: RESTQuery,\n signal: AbortSignal,\n next?: { url?: string; searchParams?: Record<string, unknown> },\n ): Promise<unknown> {\n const path = next?.url ?? (ctx.getPath ? ctx.getPath() : ctx.path);\n const method = ctx.getMethod ? ctx.getMethod() : ctx.method;\n const baseSearchParams = ctx.getSearchParams ? ctx.getSearchParams() : ctx.searchParams;\n const searchParams = next?.searchParams ? { ...baseSearchParams, ...next.searchParams } : baseSearchParams;\n const body = ctx.getBody ? ctx.getBody() : ctx.body;\n const requestOptions = ctx.getRequestOptions ? ctx.getRequestOptions() : ctx.requestOptions;\n\n if (!path) {\n throw new Error('RESTQuery requires a path. Define `path` as a field or override `getPath()`.');\n }\n\n let url = path;\n\n if (searchParams) {\n const sp = new URLSearchParams();\n for (const key in searchParams) {\n const val = searchParams[key];\n if (val !== undefined && val !== null) {\n sp.append(key, String(val));\n }\n }\n const qs = sp.toString();\n if (qs) {\n url += '?' + qs;\n }\n }\n\n const ctxBaseUrl = requestOptions?.baseUrl ?? ctx.baseUrl;\n const fullUrl = this.buildUrl(url, ctxBaseUrl);\n\n const { baseUrl: _baseUrl, signal: _signal, ...fetchOptions } = requestOptions ?? ({} as Record<string, unknown>);\n\n const hasHeaders = body || ctx.headers;\n const headers: HeadersInit | undefined = hasHeaders\n ? {\n ...(body ? { 'Content-Type': 'application/json' } : undefined),\n ...(ctx.headers as Record<string, string>),\n }\n : undefined;\n\n const fetchResponse = await this._fetch(fullUrl, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal,\n ...fetchOptions,\n });\n\n ctx.response = fetchResponse as unknown as Response;\n\n return fetchResponse.json();\n }\n\n override async sendMutation(ctx: Mutation, signal: AbortSignal): Promise<unknown> {\n const restCtx = ctx as RESTMutation;\n const path = restCtx.getPath ? restCtx.getPath() : restCtx.path;\n const method = restCtx.getMethod ? restCtx.getMethod() : restCtx.method;\n const body = restCtx.getBody ? restCtx.getBody() : restCtx.body;\n const requestOptions = restCtx.getRequestOptions ? restCtx.getRequestOptions() : restCtx.requestOptions;\n\n if (!path) {\n throw new Error('RESTMutation requires a path. Define `path` as a field or override `getPath()`.');\n }\n\n const ctxBaseUrl = (requestOptions as QueryRequestOptions | undefined)?.baseUrl ?? restCtx.baseUrl;\n const fullUrl = this.buildUrl(path, ctxBaseUrl);\n\n const { baseUrl: _baseUrl, signal: _signal, ...fetchOptions } = (requestOptions ?? {}) as Record<string, unknown>;\n\n const headers: HeadersInit = {\n ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),\n ...(restCtx.headers as Record<string, string>),\n };\n\n const fetchResponse = await this._fetch(fullUrl, {\n method,\n headers,\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n signal,\n ...fetchOptions,\n });\n\n return fetchResponse.json();\n }\n}\n","import { Query } from '../query.js';\nimport { RESTQueryController } from './RESTQueryController.js';\nimport type { FetchNextConfig } from '../query-types.js';\nimport type { BaseUrlValue, QueryRequestOptions } from '../types.js';\n\n// ================================\n// RESTQuery — declarative HTTP query definition\n// ================================\n\nexport abstract class RESTQuery extends Query {\n static override controller = RESTQueryController;\n\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' = 'GET';\n path?: string;\n baseUrl?: BaseUrlValue;\n searchParams?: Record<string, unknown>;\n body?: Record<string, unknown>;\n headers?: HeadersInit;\n requestOptions?: QueryRequestOptions;\n fetchNext?: FetchNextConfig;\n\n declare response: Response | undefined;\n\n getIdentityKey(): string {\n return `${this.method ?? 'GET'}:${this.path ?? ''}`;\n }\n\n // User-overridable getters — the controller reads these from the execution context\n getPath?(): string | undefined;\n getMethod?(): string;\n getSearchParams?(): Record<string, unknown> | undefined;\n getBody?(): Record<string, unknown> | undefined;\n getRequestOptions?(): QueryRequestOptions | undefined;\n getFetchNext?(): FetchNextConfig | undefined;\n}\n","import { Mutation } from '../mutation.js';\nimport type { BaseUrlValue, QueryRequestOptions } from '../types.js';\nimport { RESTQueryController } from './RESTQueryController.js';\n\nexport abstract class RESTMutation extends Mutation {\n static override controller = RESTQueryController;\n\n path?: string;\n baseUrl?: BaseUrlValue;\n method: 'POST' | 'PUT' | 'DELETE' | 'PATCH' = 'POST';\n body?: Record<string, unknown>;\n headers?: HeadersInit;\n requestOptions?: QueryRequestOptions;\n\n getIdentityKey(): string {\n return `${this.method ?? 'POST'}:${this.path ?? ''}`;\n }\n\n getPath?(): string | undefined;\n getMethod?(): string;\n getBody?(): Record<string, unknown> | undefined;\n getRequestOptions?(): QueryRequestOptions | undefined;\n}\n"],"names":["RESTQueryController","QueryController","options","ctx","signal","resolved","keys","key","fetchNextConfig","resolveRoot","reifyValue","path","ctxBaseUrl","base","resolveBaseUrl","next","method","baseSearchParams","searchParams","body","requestOptions","url","sp","val","qs","fullUrl","_baseUrl","_signal","fetchOptions","headers","fetchResponse","restCtx","RESTQuery","Query","RESTMutation","Mutation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/rest/RESTQueryAdapter.ts","../../../../src/rest/RESTQuery.ts","../../../../src/rest/RESTMutation.ts"],"sourcesContent":["import { QueryAdapter } from '../QueryAdapter.js';\nimport { resolveBaseUrl } from '../query-types.js';\nimport { reifyValue } from '../fieldRef.js';\nimport type { Query } from '../query.js';\nimport type { Mutation } from '../mutation.js';\nimport type { FetchNextConfig } from '../query-types.js';\nimport type { RESTQuery } from './RESTQuery.js';\nimport type { RESTMutation } from './RESTMutation.js';\nimport type { QueryRequestInit, BaseUrlValue, QueryRequestOptions } from '../types.js';\n\n// ================================\n// ResolvedFetchNext\n// ================================\n\nexport interface ResolvedFetchNext {\n url?: string;\n searchParams?: Record<string, unknown>;\n}\n\n// ================================\n// RESTQueryAdapter options\n// ================================\n\nexport interface RESTQueryAdapterOptions {\n fetch?: (url: string, init?: QueryRequestInit) => Promise<Response>;\n baseUrl?: BaseUrlValue;\n}\n\n// ================================\n// RESTQueryAdapter\n// ================================\n\nexport class RESTQueryAdapter extends QueryAdapter {\n private readonly _fetch: (url: string, init?: QueryRequestInit) => Promise<Response>;\n private readonly _baseUrl: BaseUrlValue | undefined;\n\n constructor(options?: RESTQueryAdapterOptions) {\n super();\n this._fetch =\n options?.fetch ?? (globalThis.fetch as unknown as (url: string, init?: QueryRequestInit) => Promise<Response>);\n this._baseUrl = options?.baseUrl;\n }\n\n override async send(ctx: Query, signal: AbortSignal): Promise<unknown> {\n return this.executeRequest(ctx as RESTQuery, signal);\n }\n\n override async sendNext(ctx: Query, signal: AbortSignal): Promise<unknown> {\n const resolved = this.resolveFetchNext(ctx as RESTQuery);\n if (resolved === undefined) {\n throw new Error('fetchNext is not configured for this query');\n }\n return this.executeRequest(ctx as RESTQuery, signal, resolved);\n }\n\n override hasNext(ctx: Query): boolean {\n const resolved = this.resolveFetchNext(ctx as RESTQuery);\n if (resolved === undefined) return false;\n\n if (resolved.url !== undefined && resolved.url !== null) {\n return true;\n }\n\n if (resolved.searchParams !== undefined) {\n const keys = Object.keys(resolved.searchParams);\n if (keys.length === 0) return false;\n for (const key of keys) {\n if (resolved.searchParams[key] === undefined || resolved.searchParams[key] === null) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n }\n\n private resolveFetchNext(ctx: RESTQuery): ResolvedFetchNext | undefined {\n const dynamicConfig = ctx.getFetchNext ? ctx.getFetchNext() : undefined;\n const fetchNextConfig: FetchNextConfig | undefined = dynamicConfig ?? ctx.rawFetchNext;\n if (fetchNextConfig === undefined) return undefined;\n\n const resolveRoot: Record<string, unknown> = {\n params: ctx.params ?? {},\n result: ctx.resultData,\n };\n\n return {\n url: fetchNextConfig.url !== undefined ? (reifyValue(fetchNextConfig.url, resolveRoot) as string) : undefined,\n searchParams:\n fetchNextConfig.searchParams !== undefined\n ? (reifyValue(fetchNextConfig.searchParams, resolveRoot) as Record<string, unknown>)\n : undefined,\n };\n }\n\n /**\n * Resolves a path to a full URL.\n *\n * - Absolute URLs (`https://...`, `//...`) are returned as-is.\n * - Root-relative paths (`/foo`) are prepended with the resolved baseUrl.\n * The baseUrl priority is: per-query/mutation > adapter-level > `location.origin`.\n * If none is available and the path is root-relative, an error is thrown.\n * - Other paths (e.g. `example.com/foo`) are returned as-is.\n */\n private buildUrl(path: string, ctxBaseUrl: BaseUrlValue | undefined): string {\n // Absolute URL — use as-is regardless of any configured baseUrl\n if (path.startsWith('http://') || path.startsWith('https://') || path.startsWith('//')) {\n return path;\n }\n\n // Root-relative path — needs a base\n if (path.startsWith('/')) {\n const base = resolveBaseUrl(ctxBaseUrl) ?? resolveBaseUrl(this._baseUrl) ?? globalThis.location?.origin;\n\n if (!base) {\n throw new Error(\n `RESTQueryAdapter: cannot resolve URL for path \"${path}\". ` +\n `Set \\`baseUrl\\` on the query/mutation, pass it to \\`new RESTQueryAdapter({ baseUrl })\\`, ` +\n `or use an absolute URL.`,\n );\n }\n\n return `${base}${path}`;\n }\n\n // Relative path — use as-is\n return path;\n }\n\n private async executeRequest(\n ctx: RESTQuery,\n signal: AbortSignal,\n next?: { url?: string; searchParams?: Record<string, unknown> },\n ): Promise<unknown> {\n const path = next?.url ?? (ctx.getPath ? ctx.getPath() : ctx.path);\n const method = ctx.getMethod ? ctx.getMethod() : ctx.method;\n const baseSearchParams = ctx.getSearchParams ? ctx.getSearchParams() : ctx.searchParams;\n const searchParams = next?.searchParams ? { ...baseSearchParams, ...next.searchParams } : baseSearchParams;\n const body = ctx.getBody ? ctx.getBody() : ctx.body;\n const requestOptions = ctx.getRequestOptions ? ctx.getRequestOptions() : ctx.requestOptions;\n\n if (!path) {\n throw new Error('RESTQuery requires a path. Define `path` as a field or override `getPath()`.');\n }\n\n let url = path;\n\n if (searchParams) {\n const sp = new URLSearchParams();\n for (const key in searchParams) {\n const val = searchParams[key];\n if (val !== undefined && val !== null) {\n sp.append(key, String(val));\n }\n }\n const qs = sp.toString();\n if (qs) {\n url += '?' + qs;\n }\n }\n\n const ctxBaseUrl = requestOptions?.baseUrl ?? ctx.baseUrl;\n const fullUrl = this.buildUrl(url, ctxBaseUrl);\n\n const { baseUrl: _baseUrl, signal: _signal, ...fetchOptions } = requestOptions ?? ({} as Record<string, unknown>);\n\n const hasHeaders = body || ctx.headers;\n const headers: HeadersInit | undefined = hasHeaders\n ? {\n ...(body ? { 'Content-Type': 'application/json' } : undefined),\n ...(ctx.headers as Record<string, string>),\n }\n : undefined;\n\n const fetchResponse = await this._fetch(fullUrl, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal,\n ...fetchOptions,\n });\n\n ctx.response = fetchResponse as unknown as Response;\n\n return fetchResponse.json();\n }\n\n override async sendMutation(ctx: Mutation, signal: AbortSignal): Promise<unknown> {\n const restCtx = ctx as RESTMutation;\n const path = restCtx.getPath ? restCtx.getPath() : restCtx.path;\n const method = restCtx.getMethod ? restCtx.getMethod() : restCtx.method;\n const body = restCtx.getBody ? restCtx.getBody() : restCtx.body;\n const requestOptions = restCtx.getRequestOptions ? restCtx.getRequestOptions() : restCtx.requestOptions;\n\n if (!path) {\n throw new Error('RESTMutation requires a path. Define `path` as a field or override `getPath()`.');\n }\n\n const ctxBaseUrl = (requestOptions as QueryRequestOptions | undefined)?.baseUrl ?? restCtx.baseUrl;\n const fullUrl = this.buildUrl(path, ctxBaseUrl);\n\n const { baseUrl: _baseUrl, signal: _signal, ...fetchOptions } = (requestOptions ?? {}) as Record<string, unknown>;\n\n const headers: HeadersInit = {\n ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),\n ...(restCtx.headers as Record<string, string>),\n };\n\n const fetchResponse = await this._fetch(fullUrl, {\n method,\n headers,\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n signal,\n ...fetchOptions,\n });\n\n return fetchResponse.json();\n }\n}\n","import { Query } from '../query.js';\nimport { RESTQueryAdapter } from './RESTQueryAdapter.js';\nimport type { FetchNextConfig } from '../query-types.js';\nimport type { BaseUrlValue, QueryRequestOptions } from '../types.js';\n\n// ================================\n// RESTQuery — declarative HTTP query definition\n// ================================\n\nexport abstract class RESTQuery extends Query {\n static override adapter = RESTQueryAdapter;\n\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' = 'GET';\n path?: string;\n baseUrl?: BaseUrlValue;\n searchParams?: Record<string, unknown>;\n body?: Record<string, unknown>;\n headers?: HeadersInit;\n requestOptions?: QueryRequestOptions;\n fetchNext?: FetchNextConfig;\n\n declare response: Response | undefined;\n\n getIdentityKey(): string {\n return `${this.method ?? 'GET'}:${this.path ?? ''}`;\n }\n\n // User-overridable getters — the adapter reads these from the execution context\n getPath?(): string | undefined;\n getMethod?(): string;\n getSearchParams?(): Record<string, unknown> | undefined;\n getBody?(): Record<string, unknown> | undefined;\n getRequestOptions?(): QueryRequestOptions | undefined;\n getFetchNext?(): FetchNextConfig | undefined;\n}\n","import { Mutation } from '../mutation.js';\nimport type { BaseUrlValue, QueryRequestOptions } from '../types.js';\nimport { RESTQueryAdapter } from './RESTQueryAdapter.js';\n\nexport abstract class RESTMutation extends Mutation {\n static override adapter = RESTQueryAdapter;\n\n path?: string;\n baseUrl?: BaseUrlValue;\n method: 'POST' | 'PUT' | 'DELETE' | 'PATCH' = 'POST';\n body?: Record<string, unknown>;\n headers?: HeadersInit;\n requestOptions?: QueryRequestOptions;\n\n getIdentityKey(): string {\n return `${this.method ?? 'POST'}:${this.path ?? ''}`;\n }\n\n getPath?(): string | undefined;\n getMethod?(): string;\n getBody?(): Record<string, unknown> | undefined;\n getRequestOptions?(): QueryRequestOptions | undefined;\n}\n"],"names":["RESTQueryAdapter","QueryAdapter","options","ctx","signal","resolved","keys","key","fetchNextConfig","resolveRoot","reifyValue","path","ctxBaseUrl","base","resolveBaseUrl","next","method","baseSearchParams","searchParams","body","requestOptions","url","sp","val","qs","fullUrl","_baseUrl","_signal","fetchOptions","headers","fetchResponse","restCtx","RESTQuery","Query","RESTMutation","Mutation"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { f as
|
|
2
|
-
import { Q as d } from "../
|
|
3
|
-
class g extends
|
|
4
|
-
static
|
|
1
|
+
import { f as l } from "../QueryClient-DSAzqTG6.js";
|
|
2
|
+
import { Q as d } from "../QueryAdapter-Bu5UJjE4.js";
|
|
3
|
+
class g extends l {
|
|
4
|
+
static adapter;
|
|
5
5
|
getIdentityKey() {
|
|
6
6
|
return `topic:${this.topic}`;
|
|
7
7
|
}
|
|
@@ -9,7 +9,7 @@ class g extends a {
|
|
|
9
9
|
return {
|
|
10
10
|
staleTime: 0,
|
|
11
11
|
subscribe: () => () => {
|
|
12
|
-
this.
|
|
12
|
+
this._topicAdapter?.unsubscribe(this.topic);
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
15
|
}
|
|
@@ -54,7 +54,7 @@ class _ extends d {
|
|
|
54
54
|
}
|
|
55
55
|
async send(e, s) {
|
|
56
56
|
const t = e;
|
|
57
|
-
t.
|
|
57
|
+
t._topicAdapter = this;
|
|
58
58
|
const r = t.topic, i = this._topics.get(r);
|
|
59
59
|
if (i)
|
|
60
60
|
switch (i.status) {
|
|
@@ -65,11 +65,11 @@ class _ extends d {
|
|
|
65
65
|
case "pending":
|
|
66
66
|
return i.promise;
|
|
67
67
|
}
|
|
68
|
-
let
|
|
69
|
-
const n = new Promise((
|
|
70
|
-
|
|
68
|
+
let c, o;
|
|
69
|
+
const n = new Promise((a, u) => {
|
|
70
|
+
c = a, o = u;
|
|
71
71
|
});
|
|
72
|
-
return this._topics.set(r, { status: "pending", promise: n, resolve:
|
|
72
|
+
return this._topics.set(r, { status: "pending", promise: n, resolve: c, reject: o }), this.subscribe(r), n;
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
75
|
* Convenience wrapper — pushes a mutation event through the QueryClient
|
|
@@ -81,6 +81,6 @@ class _ extends d {
|
|
|
81
81
|
}
|
|
82
82
|
export {
|
|
83
83
|
g as TopicQuery,
|
|
84
|
-
_ as
|
|
84
|
+
_ as TopicQueryAdapter
|
|
85
85
|
};
|
|
86
86
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/topic/TopicQuery.ts","../../../../src/topic/
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/topic/TopicQuery.ts","../../../../src/topic/TopicQueryAdapter.ts"],"sourcesContent":["import { Query } from '../query.js';\nimport type { TopicQueryAdapter } from './TopicQueryAdapter.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 adapter: typeof TopicQueryAdapter;\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 adapter = (this as Record<string, any>)._topicAdapter as TopicQueryAdapter | undefined;\n adapter?.unsubscribe(this.topic);\n };\n },\n };\n }\n}\n","import { QueryAdapter } from '../QueryAdapter.js';\nimport type { Query } from '../query.js';\nimport type { MutationEvent } from '../types.js';\n\n// ================================\n// TopicQueryAdapter — abstract adapter for topic-based subscriptions\n// ================================\n\ninterface TopicCtx extends Query {\n topic: string;\n _topicAdapter?: TopicQueryAdapter;\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 TopicQueryAdapter extends QueryAdapter {\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._topicAdapter = 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","TopicQueryAdapter","QueryAdapter","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,QADiB,KAA6B,eACrC,YAAY,KAAK,KAAK;AAAA,MACjC;AAAA,IACF;AAAA,EAEJ;AACF;ACNO,MAAeC,UAA0BC,EAAa;AAAA,EACnD,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,gBAAgB;AACzB,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;"}
|
package/dist/esm/query.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { QueryCacheOptions, QueryConfigOptions, FetchNextConfig, QueryParams } f
|
|
|
3
3
|
import { ValidatorDef } from './typeDefs.js';
|
|
4
4
|
import { HasRequiredKeys, Optionalize, Signalize } from './type-utils.js';
|
|
5
5
|
import { type CapturedDefinition } from './fieldRef.js';
|
|
6
|
-
import type {
|
|
6
|
+
import type { QueryAdapter } from './QueryAdapter.js';
|
|
7
7
|
export interface ResolvedRetryConfig {
|
|
8
8
|
retries: number;
|
|
9
9
|
retryDelay: (attempt: number) => number;
|
|
@@ -12,10 +12,10 @@ export declare function resolveRetryConfig(retryOption: RetryConfig | number | b
|
|
|
12
12
|
export declare abstract class Query {
|
|
13
13
|
static cache?: QueryCacheOptions;
|
|
14
14
|
/**
|
|
15
|
-
* The
|
|
15
|
+
* The adapter class responsible for sending requests for this query type.
|
|
16
16
|
* Must be set on each concrete Query subclass (or inherited from a base like RESTQuery).
|
|
17
17
|
*/
|
|
18
|
-
static
|
|
18
|
+
static adapter?: typeof QueryAdapter;
|
|
19
19
|
params?: Record<string, TypeDef>;
|
|
20
20
|
abstract result: TypeDefShape;
|
|
21
21
|
config?: QueryConfigOptions;
|
|
@@ -40,12 +40,12 @@ export interface QueryDefinitionStatics {
|
|
|
40
40
|
readonly cache: QueryCacheOptions | undefined;
|
|
41
41
|
/** Raw fetchNext config with unresolved FieldRefs, extracted before reification. */
|
|
42
42
|
readonly rawFetchNext: FetchNextConfig | undefined;
|
|
43
|
-
/** Whether the
|
|
43
|
+
/** Whether the adapter implements sendNext(). */
|
|
44
44
|
readonly hasSendNext: boolean;
|
|
45
45
|
/** Whether the result shape is already an entity (vs synthetic wrapper). */
|
|
46
46
|
readonly isEntityResult: boolean;
|
|
47
|
-
/** The
|
|
48
|
-
readonly
|
|
47
|
+
/** The adapter class responsible for sending requests. */
|
|
48
|
+
readonly adapterClass: typeof QueryAdapter;
|
|
49
49
|
}
|
|
50
50
|
export declare class QueryDefinition<Params extends QueryParams | undefined, Result, StreamType> {
|
|
51
51
|
readonly captured: CapturedDefinition<Query>;
|
package/dist/esm/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,YAAY,CAAC;AAC3G,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,WAAW,EAEZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAK,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Mutation } from '../mutation.js';
|
|
2
2
|
import type { BaseUrlValue, QueryRequestOptions } from '../types.js';
|
|
3
|
-
import {
|
|
3
|
+
import { RESTQueryAdapter } from './RESTQueryAdapter.js';
|
|
4
4
|
export declare abstract class RESTMutation extends Mutation {
|
|
5
|
-
static
|
|
5
|
+
static adapter: typeof RESTQueryAdapter;
|
|
6
6
|
path?: string;
|
|
7
7
|
baseUrl?: BaseUrlValue;
|
|
8
8
|
method: 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
@@ -1 +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,
|
|
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,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,8BAAsB,YAAa,SAAQ,QAAQ;IACjD,OAAgB,OAAO,0BAAoB;IAE3C,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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Query } from '../query.js';
|
|
2
|
-
import {
|
|
2
|
+
import { RESTQueryAdapter } from './RESTQueryAdapter.js';
|
|
3
3
|
import type { FetchNextConfig } from '../query-types.js';
|
|
4
4
|
import type { BaseUrlValue, QueryRequestOptions } from '../types.js';
|
|
5
5
|
export declare abstract class RESTQuery extends Query {
|
|
6
|
-
static
|
|
6
|
+
static adapter: typeof RESTQueryAdapter;
|
|
7
7
|
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
8
8
|
path?: string;
|
|
9
9
|
baseUrl?: BaseUrlValue;
|
|
@@ -1 +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,
|
|
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,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,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,OAAO,0BAAoB;IAE3C,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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { QueryAdapter } from '../QueryAdapter.js';
|
|
2
2
|
import type { Query } from '../query.js';
|
|
3
3
|
import type { Mutation } from '../mutation.js';
|
|
4
4
|
import type { QueryRequestInit, BaseUrlValue } from '../types.js';
|
|
@@ -6,14 +6,14 @@ export interface ResolvedFetchNext {
|
|
|
6
6
|
url?: string;
|
|
7
7
|
searchParams?: Record<string, unknown>;
|
|
8
8
|
}
|
|
9
|
-
export interface
|
|
9
|
+
export interface RESTQueryAdapterOptions {
|
|
10
10
|
fetch?: (url: string, init?: QueryRequestInit) => Promise<Response>;
|
|
11
11
|
baseUrl?: BaseUrlValue;
|
|
12
12
|
}
|
|
13
|
-
export declare class
|
|
13
|
+
export declare class RESTQueryAdapter extends QueryAdapter {
|
|
14
14
|
private readonly _fetch;
|
|
15
15
|
private readonly _baseUrl;
|
|
16
|
-
constructor(options?:
|
|
16
|
+
constructor(options?: RESTQueryAdapterOptions);
|
|
17
17
|
send(ctx: Query, signal: AbortSignal): Promise<unknown>;
|
|
18
18
|
sendNext(ctx: Query, signal: AbortSignal): Promise<unknown>;
|
|
19
19
|
hasNext(ctx: Query): boolean;
|
|
@@ -23,7 +23,7 @@ export declare class RESTQueryController extends QueryController {
|
|
|
23
23
|
*
|
|
24
24
|
* - Absolute URLs (`https://...`, `//...`) are returned as-is.
|
|
25
25
|
* - Root-relative paths (`/foo`) are prepended with the resolved baseUrl.
|
|
26
|
-
* The baseUrl priority is: per-query/mutation >
|
|
26
|
+
* The baseUrl priority is: per-query/mutation > adapter-level > `location.origin`.
|
|
27
27
|
* If none is available and the path is root-relative, an error is thrown.
|
|
28
28
|
* - Other paths (e.g. `example.com/foo`) are returned as-is.
|
|
29
29
|
*/
|
|
@@ -31,4 +31,4 @@ export declare class RESTQueryController extends QueryController {
|
|
|
31
31
|
private executeRequest;
|
|
32
32
|
sendMutation(ctx: Mutation, signal: AbortSignal): Promise<unknown>;
|
|
33
33
|
}
|
|
34
|
-
//# sourceMappingURL=
|
|
34
|
+
//# sourceMappingURL=RESTQueryAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RESTQueryAdapter.d.ts","sourceRoot":"","sources":["../../../src/rest/RESTQueryAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,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,uBAAuB;IACtC,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,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8D;IACrF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;gBAExC,OAAO,CAAC,EAAE,uBAAuB;IAO9B,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"}
|
package/dist/esm/rest/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { RESTQuery } from './RESTQuery.js';
|
|
2
2
|
export { RESTMutation } from './RESTMutation.js';
|
|
3
|
-
export {
|
|
4
|
-
export type { ResolvedFetchNext,
|
|
3
|
+
export { RESTQueryAdapter } from './RESTQueryAdapter.js';
|
|
4
|
+
export type { ResolvedFetchNext, RESTQueryAdapterOptions } from './RESTQueryAdapter.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +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,
|
|
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,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/esm/retry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAgBtD,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,CAmBZ"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Query } from '../query.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { TopicQueryAdapter } from './TopicQueryAdapter.js';
|
|
3
3
|
import type { QueryConfigOptions } from '../query-types.js';
|
|
4
4
|
export declare abstract class TopicQuery extends Query {
|
|
5
|
-
static
|
|
5
|
+
static adapter: typeof TopicQueryAdapter;
|
|
6
6
|
abstract topic: string;
|
|
7
7
|
getIdentityKey(): string;
|
|
8
8
|
getConfig(): QueryConfigOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopicQuery.d.ts","sourceRoot":"","sources":["../../../src/topic/TopicQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"TopicQuery.d.ts","sourceRoot":"","sources":["../../../src/topic/TopicQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM5D,8BAAsB,UAAW,SAAQ,KAAK;IAC5C,OAAgB,OAAO,EAAE,OAAO,iBAAiB,CAAC;IAElD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,cAAc,IAAI,MAAM;IAIxB,SAAS,IAAI,kBAAkB;CAWhC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { QueryAdapter } from '../QueryAdapter.js';
|
|
2
2
|
import type { Query } from '../query.js';
|
|
3
3
|
import type { MutationEvent } from '../types.js';
|
|
4
|
-
export declare abstract class
|
|
4
|
+
export declare abstract class TopicQueryAdapter extends QueryAdapter {
|
|
5
5
|
private _topics;
|
|
6
6
|
/**
|
|
7
7
|
* Called when a query activates for a given topic.
|
|
@@ -40,4 +40,4 @@ export declare abstract class TopicQueryController extends QueryController {
|
|
|
40
40
|
*/
|
|
41
41
|
protected sendMutationEvent(event: MutationEvent): void;
|
|
42
42
|
}
|
|
43
|
-
//# sourceMappingURL=
|
|
43
|
+
//# sourceMappingURL=TopicQueryAdapter.d.ts.map
|