fetchium 0.1.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 +6 -5
- 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 +1 -1
- package/dist/cjs/development/index.js.map +1 -1
- 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/react/index.js +1 -1
- package/dist/cjs/development/rest/index.js +2 -0
- package/dist/cjs/development/rest/index.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 +1 -1
- package/dist/cjs/production/index.js.map +1 -1
- 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/react/index.js +1 -1
- package/dist/cjs/production/rest/index.js +2 -0
- package/dist/cjs/production/rest/index.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/MutationResult.d.ts +0 -1
- package/dist/esm/MutationResult.d.ts.map +1 -1
- package/dist/esm/QueryClient.d.ts +26 -4
- package/dist/esm/QueryClient.d.ts.map +1 -1
- package/dist/esm/QueryController.d.ts +49 -0
- package/dist/esm/QueryController.d.ts.map +1 -0
- package/dist/esm/QueryResult.d.ts +10 -10
- package/dist/esm/QueryResult.d.ts.map +1 -1
- 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 +29 -100
- package/dist/esm/development/index.js.map +1 -1
- 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 +1 -1
- package/dist/esm/development/rest/index.js +142 -0
- package/dist/esm/development/rest/index.js.map +1 -0
- package/dist/esm/development/{shared-Dq2yW78d.js → shared-DcuVH8Pf.js} +5 -5
- package/dist/esm/development/{shared-Dq2yW78d.js.map → shared-DcuVH8Pf.js.map} +1 -1
- package/dist/esm/development/stores/async.js +6 -6
- package/dist/esm/development/stores/sync.js +5 -5
- package/dist/esm/development/topic/index.js +86 -0
- package/dist/esm/development/topic/index.js.map +1 -0
- package/dist/esm/index.d.ts +5 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/mutation.d.ts +6 -19
- package/dist/esm/mutation.d.ts.map +1 -1
- package/dist/esm/production/{QueryClient-BP0Z1rQV.js → QueryClient-YqnBxFy1.js} +972 -968
- 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 +29 -100
- package/dist/esm/production/index.js.map +1 -1
- 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 +1 -1
- package/dist/esm/production/rest/index.js +142 -0
- package/dist/esm/production/rest/index.js.map +1 -0
- package/dist/esm/production/{shared-Dq2yW78d.js → shared-DcuVH8Pf.js} +5 -5
- package/dist/esm/production/{shared-Dq2yW78d.js.map → shared-DcuVH8Pf.js.map} +1 -1
- package/dist/esm/production/stores/async.js +6 -6
- package/dist/esm/production/stores/sync.js +5 -5
- package/dist/esm/production/topic/index.js +86 -0
- package/dist/esm/production/topic/index.js.map +1 -0
- package/dist/esm/query-types.d.ts +2 -4
- package/dist/esm/query-types.d.ts.map +1 -1
- package/dist/esm/query.d.ts +17 -39
- package/dist/esm/query.d.ts.map +1 -1
- 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/stores/shared.d.ts.map +1 -1
- 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/typeDefs.d.ts +1 -1
- package/dist/esm/types.d.ts +9 -4
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +51 -4
- 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/dist/cjs/development/QueryClient-CpmwggOn.js +0 -2
- package/dist/cjs/development/QueryClient-CpmwggOn.js.map +0 -1
- package/dist/cjs/production/QueryClient-qi3bR0eD.js +0 -2
- package/dist/cjs/production/QueryClient-qi3bR0eD.js.map +0 -1
- package/dist/esm/development/QueryClient-DRZtPKFD.js +0 -2568
- package/dist/esm/development/QueryClient-DRZtPKFD.js.map +0 -1
- package/dist/esm/production/QueryClient-BP0Z1rQV.js.map +0 -1
|
@@ -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;"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { type Signal } from 'signalium';
|
|
2
|
-
import { NetworkMode, RetryConfig, BaseUrlValue
|
|
2
|
+
import { NetworkMode, RetryConfig, BaseUrlValue } from './types.js';
|
|
3
3
|
import { QueryDefinition } from './query.js';
|
|
4
4
|
export interface QueryContext {
|
|
5
|
-
fetch: (url: string, init?: QueryRequestInit) => Promise<Response>;
|
|
6
|
-
baseUrl?: BaseUrlValue;
|
|
7
5
|
log?: {
|
|
8
6
|
error?: (message: string, error?: unknown) => void;
|
|
9
7
|
warn?: (message: string, error?: unknown) => void;
|
|
@@ -21,7 +19,7 @@ export interface QueryCacheOptions {
|
|
|
21
19
|
maxCount?: number;
|
|
22
20
|
cacheTime?: number;
|
|
23
21
|
}
|
|
24
|
-
export interface
|
|
22
|
+
export interface FetchNextConfig {
|
|
25
23
|
/** Override the URL/path for the next page request. Can be a FieldRef (e.g. this.result.nextUrl). */
|
|
26
24
|
url?: unknown;
|
|
27
25
|
/** Search params for the next page. Values can be FieldRefs (e.g. this.result.nextCursor). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-types.d.ts","sourceRoot":"","sources":["../../src/query-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAA6B,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"query-types.d.ts","sourceRoot":"","sources":["../../src/query-types.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/query.d.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import { ExtractType, TypeDef,
|
|
2
|
-
import { QueryCacheOptions, QueryConfigOptions,
|
|
1
|
+
import { ExtractType, TypeDef, TypeDefShape, RetryConfig, QueryPromise } from './types.js';
|
|
2
|
+
import { QueryCacheOptions, QueryConfigOptions, FetchNextConfig, QueryParams } from './QueryClient.js';
|
|
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
|
-
|
|
7
|
-
url?: string;
|
|
8
|
-
searchParams?: Record<string, unknown>;
|
|
9
|
-
}
|
|
6
|
+
import type { QueryController } from './QueryController.js';
|
|
10
7
|
export interface ResolvedRetryConfig {
|
|
11
8
|
retries: number;
|
|
12
9
|
retryDelay: (attempt: number) => number;
|
|
@@ -14,43 +11,22 @@ export interface ResolvedRetryConfig {
|
|
|
14
11
|
export declare function resolveRetryConfig(retryOption: RetryConfig | number | boolean | undefined, isServer?: boolean): ResolvedRetryConfig;
|
|
15
12
|
export declare abstract class Query {
|
|
16
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;
|
|
17
19
|
params?: Record<string, TypeDef>;
|
|
18
20
|
abstract result: TypeDefShape;
|
|
19
21
|
config?: QueryConfigOptions;
|
|
20
|
-
context: QueryContext;
|
|
21
|
-
response: Response | undefined;
|
|
22
|
-
signal: AbortSignal;
|
|
22
|
+
context: import('./query-types.js').QueryContext;
|
|
23
23
|
refetch: () => void;
|
|
24
24
|
resultData: Record<string, unknown>;
|
|
25
|
-
|
|
26
|
-
abstract
|
|
27
|
-
abstract send(): Promise<unknown>;
|
|
25
|
+
rawFetchNext: FetchNextConfig | undefined;
|
|
26
|
+
abstract getIdentityKey(): unknown;
|
|
28
27
|
getConfig?(): QueryConfigOptions | undefined;
|
|
29
|
-
sendNext?(): Promise<unknown>;
|
|
30
|
-
hasNext?(): boolean;
|
|
31
28
|
constructor();
|
|
32
29
|
}
|
|
33
|
-
export declare abstract class RESTQuery extends Query {
|
|
34
|
-
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
35
|
-
path?: string;
|
|
36
|
-
searchParams?: Record<string, unknown>;
|
|
37
|
-
body?: Record<string, unknown>;
|
|
38
|
-
headers?: HeadersInit;
|
|
39
|
-
requestOptions?: QueryRequestOptions;
|
|
40
|
-
loadNext?: LoadNextConfig;
|
|
41
|
-
getStorageKey(): string;
|
|
42
|
-
getPath?(): string | undefined;
|
|
43
|
-
getMethod?(): string;
|
|
44
|
-
getSearchParams?(): Record<string, unknown> | undefined;
|
|
45
|
-
getBody?(): Record<string, unknown> | undefined;
|
|
46
|
-
getRequestOptions?(): QueryRequestOptions | undefined;
|
|
47
|
-
getLoadNext?(): LoadNextConfig | undefined;
|
|
48
|
-
send(): Promise<unknown>;
|
|
49
|
-
private resolveLoadNext;
|
|
50
|
-
hasNext(): boolean;
|
|
51
|
-
sendNext(): Promise<unknown>;
|
|
52
|
-
private executeRequest;
|
|
53
|
-
}
|
|
54
30
|
export interface ResolvedQueryOptions {
|
|
55
31
|
config: QueryConfigOptions | undefined;
|
|
56
32
|
retryConfig: ResolvedRetryConfig;
|
|
@@ -62,18 +38,20 @@ export interface QueryDefinitionStatics {
|
|
|
62
38
|
* ValidatorDef. */
|
|
63
39
|
readonly shape: ValidatorDef<unknown>;
|
|
64
40
|
readonly cache: QueryCacheOptions | undefined;
|
|
65
|
-
/** Raw
|
|
66
|
-
readonly
|
|
67
|
-
/** Whether the
|
|
41
|
+
/** Raw fetchNext config with unresolved FieldRefs, extracted before reification. */
|
|
42
|
+
readonly rawFetchNext: FetchNextConfig | undefined;
|
|
43
|
+
/** Whether the controller implements sendNext(). */
|
|
68
44
|
readonly hasSendNext: boolean;
|
|
69
45
|
/** Whether the result shape is already an entity (vs synthetic wrapper). */
|
|
70
46
|
readonly isEntityResult: boolean;
|
|
47
|
+
/** The controller class responsible for sending requests. */
|
|
48
|
+
readonly controllerClass: typeof QueryController;
|
|
71
49
|
}
|
|
72
50
|
export declare class QueryDefinition<Params extends QueryParams | undefined, Result, StreamType> {
|
|
73
51
|
readonly captured: CapturedDefinition<Query>;
|
|
74
52
|
readonly statics: QueryDefinitionStatics;
|
|
75
53
|
constructor(statics: QueryDefinitionStatics, captured: CapturedDefinition<Query>);
|
|
76
|
-
createExecutionContext(actualParams: Record<string, unknown>, queryContext: QueryContext): Query;
|
|
54
|
+
createExecutionContext(actualParams: Record<string, unknown>, queryContext: import('./query-types.js').QueryContext): Query;
|
|
77
55
|
resolveOptions(ctx: Query): ResolvedQueryOptions;
|
|
78
56
|
static for(QueryClass: new () => Query): QueryDefinition<any, any, any>;
|
|
79
57
|
}
|
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,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/stores/shared.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/stores/shared.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,GAAI,IAAI,MAAM,WAAyB,CAAC;AAChE,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,WAA4B,CAAC;AACtE,eAAO,MAAM,YAAY,GAAI,IAAI,MAAM,WAA0B,CAAC;AAClE,eAAO,MAAM,eAAe,GAAI,IAAI,MAAM,WAA6B,CAAC;AAExE,eAAO,MAAM,WAAW,GAAI,YAAY,MAAM,WAAiC,CAAC;AAEhF,eAAO,MAAM,cAAc,GAAI,YAAY,MAAM,WAAoC,CAAC;AACtF,eAAO,MAAM,eAAe,GAAI,YAAY,MAAM,WAAqC,CAAC;AAExF,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAGnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,kBAAkB,QAAU,CAAC;AAC1C,eAAO,MAAM,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { QueryClient } from '../QueryClient.js';
|
|
2
|
+
import { Query } from '../query.js';
|
|
3
|
+
import { Mutation } from '../mutation.js';
|
|
4
|
+
import type { Entity } from '../proxy.js';
|
|
5
|
+
import type { MockFetchCall, EntityGenerators, ResponseTransform } from './types.js';
|
|
6
|
+
import { GeneratorContext } from './auto-generate.js';
|
|
7
|
+
interface MockRoute {
|
|
8
|
+
method: string;
|
|
9
|
+
url: string;
|
|
10
|
+
responses: MockRouteResponse[];
|
|
11
|
+
currentIndex: number;
|
|
12
|
+
}
|
|
13
|
+
interface MockRouteResponse {
|
|
14
|
+
data?: unknown;
|
|
15
|
+
status: number;
|
|
16
|
+
headers: Record<string, string>;
|
|
17
|
+
delay: number;
|
|
18
|
+
error?: Error;
|
|
19
|
+
networkError?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class MockQueryBuilder<T extends Query | Mutation = Query> {
|
|
22
|
+
private route;
|
|
23
|
+
private mockClient;
|
|
24
|
+
constructor(mockClient: MockClient, method: string, url: string);
|
|
25
|
+
respond(data: unknown): this;
|
|
26
|
+
thenRespond(data: unknown): this;
|
|
27
|
+
auto(overrides?: Record<string, unknown>): this;
|
|
28
|
+
error(status?: number, body?: unknown): this;
|
|
29
|
+
networkError(message?: string): this;
|
|
30
|
+
raw(data: unknown): this;
|
|
31
|
+
delay(ms: number): this;
|
|
32
|
+
private _pendingDelay;
|
|
33
|
+
private applyPendingDelay;
|
|
34
|
+
}
|
|
35
|
+
export declare class MockClient {
|
|
36
|
+
private _client;
|
|
37
|
+
private routes;
|
|
38
|
+
private _calls;
|
|
39
|
+
private queryClassMap;
|
|
40
|
+
private _responseTransforms;
|
|
41
|
+
/** @internal */
|
|
42
|
+
_generatorCtx: GeneratorContext;
|
|
43
|
+
constructor();
|
|
44
|
+
get client(): QueryClient;
|
|
45
|
+
get calls(): readonly MockFetchCall[];
|
|
46
|
+
when<T extends Query>(queryClass: new () => T, params?: Record<string, unknown>): MockQueryBuilder<T>;
|
|
47
|
+
entity<T extends Entity>(cls: new () => T, overrides?: Record<string, unknown>): Record<string, unknown>;
|
|
48
|
+
define<T extends Entity>(cls: new () => T, generators: EntityGenerators<T>): void;
|
|
49
|
+
wasCalled(queryClass: new () => Query | Mutation, params?: Record<string, unknown>): boolean;
|
|
50
|
+
lastCall(queryClass: new () => Query | Mutation): MockFetchCall | undefined;
|
|
51
|
+
_setResponseTransform(key: string, transform: ResponseTransform): void;
|
|
52
|
+
_clearResponseTransform(key: string): void;
|
|
53
|
+
_clearAllResponseTransforms(): void;
|
|
54
|
+
reset(): void;
|
|
55
|
+
destroy(): void;
|
|
56
|
+
/** @internal */
|
|
57
|
+
_registerRoute(route: MockRoute): void;
|
|
58
|
+
/** @internal */
|
|
59
|
+
_getQueryClassForRoute(route: MockRoute): (new () => Query | Mutation) | undefined;
|
|
60
|
+
private _mockFetch;
|
|
61
|
+
private _findRoute;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=MockClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockClient.d.ts","sourceRoot":"","sources":["../../../src/testing/MockClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type InternalTypeDef, type InternalObjectShape } from '../types.js';
|
|
2
|
+
import type { Entity } from '../proxy.js';
|
|
3
|
+
import type { FieldGenerator } from './types.js';
|
|
4
|
+
export declare class GeneratorContext {
|
|
5
|
+
private idCounters;
|
|
6
|
+
private seqCounters;
|
|
7
|
+
private visiting;
|
|
8
|
+
private factories;
|
|
9
|
+
registerFactory(cls: new () => Entity, generators: Record<string, FieldGenerator | unknown>): void;
|
|
10
|
+
nextId(typename?: string): string;
|
|
11
|
+
nextSeq(typename?: string): number;
|
|
12
|
+
getFactory(cls: new () => Entity): Record<string, FieldGenerator | unknown> | undefined;
|
|
13
|
+
enterEntity(typename: string): boolean;
|
|
14
|
+
leaveEntity(typename: string): void;
|
|
15
|
+
reset(): void;
|
|
16
|
+
}
|
|
17
|
+
export declare function generateFromTypeDef(typeDef: InternalTypeDef, fieldName: string, ctx: GeneratorContext): unknown;
|
|
18
|
+
export declare function generateEntityData(cls: new () => Entity, overrides?: Record<string, unknown>, ctx?: GeneratorContext): Record<string, unknown>;
|
|
19
|
+
export declare function generateQueryResponse(resultDef: InternalTypeDef | InternalObjectShape, ctx: GeneratorContext, overrides?: Record<string, unknown>): unknown;
|
|
20
|
+
//# sourceMappingURL=auto-generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-generate.d.ts","sourceRoot":"","sources":["../../../src/testing/auto-generate.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,SAAS,CAAyE;IAE1F,eAAe,CAAC,GAAG,EAAE,UAAU,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,IAAI;IAIlG,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAQjC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAQlC,UAAU,CAAC,GAAG,EAAE,UAAU,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,SAAS;IAIvF,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMtC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,KAAK,IAAI,IAAI;CAKd;AAMD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAe/G;AAoKD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,UAAU,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,GAAG,CAAC,EAAE,gBAAgB,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,eAAe,GAAG,mBAAmB,EAChD,GAAG,EAAE,gBAAgB,EACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAgBT"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Entity } from '../proxy.js';
|
|
2
|
+
import type { EntityGenerators } from './types.js';
|
|
3
|
+
import { GeneratorContext } from './auto-generate.js';
|
|
4
|
+
export declare class EntityFactory<T extends Entity> {
|
|
5
|
+
private cls;
|
|
6
|
+
private generators;
|
|
7
|
+
private ctx;
|
|
8
|
+
constructor(cls: new () => T, generators: EntityGenerators<T>, ctx?: GeneratorContext);
|
|
9
|
+
build(overrides?: Partial<Record<string, unknown>>): Record<string, unknown>;
|
|
10
|
+
buildMany(count: number, overrides?: Partial<Record<string, unknown>>): Record<string, unknown>[];
|
|
11
|
+
}
|
|
12
|
+
export declare function defineFactory<T extends Entity>(cls: new () => T, generators: EntityGenerators<T>): EntityFactory<T>;
|
|
13
|
+
//# sourceMappingURL=entity-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-factory.d.ts","sourceRoot":"","sources":["../../../src/testing/entity-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAkB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAsB,MAAM,oBAAoB,CAAC;AAE1E,qBAAa,aAAa,CAAC,CAAC,SAAS,MAAM;IACzC,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,UAAU,CAA2C;IAC7D,OAAO,CAAC,GAAG,CAAmB;gBAElB,GAAG,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,gBAAgB;IAOrF,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI5E,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;CAOlG;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAEnH"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { MockClient, MockQueryBuilder } from './MockClient.js';
|
|
2
|
+
export { generateEntityData as entity } from './auto-generate.js';
|
|
3
|
+
export { GeneratorContext } from './auto-generate.js';
|
|
4
|
+
export { defineFactory, EntityFactory } from './entity-factory.js';
|
|
5
|
+
export type { DotPaths, VaryableFields, MockFetchCall, FieldGenerator, EntityGenerators, ResponseTransform, } from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAG/D,OAAO,EAAE,kBAAkB,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGnE,YAAY,EACV,QAAQ,EACR,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Query } from '../query.js';
|
|
2
|
+
import type { Entity } from '../proxy.js';
|
|
3
|
+
import type { ExtractType, TypeDefShape } from '../types.js';
|
|
4
|
+
type Primitive = string | number | boolean | null | undefined | Date;
|
|
5
|
+
type DataKeys<T> = {
|
|
6
|
+
[K in keyof T & string]: K extends `__${string}` ? never : T[K] extends (...args: any[]) => any ? never : K;
|
|
7
|
+
}[keyof T & string];
|
|
8
|
+
export type DotPaths<T, Depth extends unknown[] = []> = Depth['length'] extends 5 ? never : T extends Primitive ? never : T extends (infer U)[] ? DotPaths<U, Depth> : T extends object ? {
|
|
9
|
+
[K in DataKeys<T>]: K | `${K}.${DotPaths<NonNullable<T[K]>, [...Depth, unknown]>}`;
|
|
10
|
+
}[DataKeys<T>] : never;
|
|
11
|
+
export type VaryableFields<T extends Query> = DotPaths<ExtractType<T['result']>>;
|
|
12
|
+
export type MockQueryResponse<T extends Query> = T['result'] extends TypeDefShape ? RawResponseData<ExtractType<T['result']>> : unknown;
|
|
13
|
+
export type RawResponseData<T> = T extends Entity ? RawEntityData<T> : T extends (infer U)[] ? RawResponseData<U>[] : T extends object ? {
|
|
14
|
+
[K in keyof T]?: RawResponseData<T[K]>;
|
|
15
|
+
} : T;
|
|
16
|
+
export type RawEntityData<T extends Entity> = {
|
|
17
|
+
[K in keyof T as K extends `__${string}` ? K : K]?: T[K] extends Entity ? RawEntityData<T[K]> : T[K] extends Entity[] ? RawEntityData<T[K][number]>[] : T[K];
|
|
18
|
+
};
|
|
19
|
+
export type FieldGenerator<T = unknown> = (seq: number, fields: Record<string, unknown>) => T;
|
|
20
|
+
export type EntityGenerators<T extends Entity> = {
|
|
21
|
+
[K in keyof T as K extends `__${string}` ? never : K]?: unknown | FieldGenerator;
|
|
22
|
+
};
|
|
23
|
+
export interface MockFetchCall {
|
|
24
|
+
url: string;
|
|
25
|
+
method: string;
|
|
26
|
+
body?: unknown;
|
|
27
|
+
options: RequestInit;
|
|
28
|
+
}
|
|
29
|
+
export interface MockFetchOptions {
|
|
30
|
+
status?: number;
|
|
31
|
+
headers?: Record<string, string>;
|
|
32
|
+
delay?: number;
|
|
33
|
+
error?: Error;
|
|
34
|
+
}
|
|
35
|
+
export type ResponseTransform = (data: unknown) => unknown;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/testing/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Query } from '../query.js';
|
|
2
|
+
import type { TopicQueryController } from './TopicQueryController.js';
|
|
3
|
+
import type { QueryConfigOptions } from '../query-types.js';
|
|
4
|
+
export declare abstract class TopicQuery extends Query {
|
|
5
|
+
static controller: typeof TopicQueryController;
|
|
6
|
+
abstract topic: string;
|
|
7
|
+
getIdentityKey(): string;
|
|
8
|
+
getConfig(): QueryConfigOptions;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=TopicQuery.d.ts.map
|
|
@@ -0,0 +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,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM5D,8BAAsB,UAAW,SAAQ,KAAK;IAC5C,OAAgB,UAAU,EAAE,OAAO,oBAAoB,CAAC;IAExD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,cAAc,IAAI,MAAM;IAIxB,SAAS,IAAI,kBAAkB;CAWhC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { QueryController } from '../QueryController.js';
|
|
2
|
+
import type { Query } from '../query.js';
|
|
3
|
+
import type { MutationEvent } from '../types.js';
|
|
4
|
+
export declare abstract class TopicQueryController extends QueryController {
|
|
5
|
+
private _topics;
|
|
6
|
+
/**
|
|
7
|
+
* Called when a query activates for a given topic.
|
|
8
|
+
* Implementations should start delivering data for this topic,
|
|
9
|
+
* calling `fulfillTopic()` when initial data is available and
|
|
10
|
+
* `sendMutationEvent()` for ongoing updates.
|
|
11
|
+
*/
|
|
12
|
+
abstract subscribe(topic: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Called when the query deactivates. Implementations should
|
|
15
|
+
* tear down any resources for this topic.
|
|
16
|
+
*/
|
|
17
|
+
abstract unsubscribe(topic: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve the pending promise for a topic with initial data.
|
|
20
|
+
* Can be called before `send()` — the data will be picked up
|
|
21
|
+
* when the query activates.
|
|
22
|
+
*/
|
|
23
|
+
protected fulfillTopic(topic: string, data: unknown): void;
|
|
24
|
+
/**
|
|
25
|
+
* Reject the pending promise for a topic.
|
|
26
|
+
* Can be called before `send()` — the error will be propagated
|
|
27
|
+
* when the query activates.
|
|
28
|
+
*/
|
|
29
|
+
protected rejectTopic(topic: string, error: unknown): void;
|
|
30
|
+
/**
|
|
31
|
+
* Clears internal state for a topic. Called automatically by
|
|
32
|
+
* `unsubscribe` — subclasses generally don't need to call this.
|
|
33
|
+
*/
|
|
34
|
+
protected clearTopic(topic: string): void;
|
|
35
|
+
protected clearAll(): void;
|
|
36
|
+
send(ctx: Query, _signal: AbortSignal): Promise<unknown>;
|
|
37
|
+
/**
|
|
38
|
+
* Convenience wrapper — pushes a mutation event through the QueryClient
|
|
39
|
+
* so that entities and live collections are updated reactively.
|
|
40
|
+
*/
|
|
41
|
+
protected sendMutationEvent(event: MutationEvent): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=TopicQueryController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TopicQueryController.d.ts","sourceRoot":"","sources":["../../../src/topic/TopicQueryController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAoBjD,8BAAsB,oBAAqB,SAAQ,eAAe;IAChE,OAAO,CAAC,OAAO,CAAiC;IAEhD;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAEvC;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAEzC;;;;OAIG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAe1D;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAe1D;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC,SAAS,CAAC,QAAQ,IAAI,IAAI;IAIX,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAgCvE;;;OAGG;IACH,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAGxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/topic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/esm/typeDefs.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export declare class ValidatorDef<T> {
|
|
|
27
27
|
gcTime?: number;
|
|
28
28
|
} | undefined;
|
|
29
29
|
/**
|
|
30
|
-
* Live
|
|
30
|
+
* Live data configuration (shared by LiveArray and LiveValue).
|
|
31
31
|
*/
|
|
32
32
|
_liveConfig: LiveFieldConfig | undefined;
|
|
33
33
|
constructor(mask: Mask, shape: InternalTypeDef | InternalObjectShape | UnionTypeDefs | ComplexTypeDef[] | undefined, values?: Set<string | boolean | number>, typenameField?: string, typenameValue?: string, idField?: string | symbol);
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -98,14 +98,17 @@ export interface CaseInsensitiveEnumSet<T extends string | boolean | number> ext
|
|
|
98
98
|
*/
|
|
99
99
|
get(value: unknown): T | undefined;
|
|
100
100
|
}
|
|
101
|
-
declare const TypeDefSymbol: unique symbol;
|
|
102
101
|
/**
|
|
103
102
|
* Branded phantom type representing a type definition in the public API.
|
|
104
103
|
* At runtime, values are Masks, Sets, ValidatorDefs, etc. but the type system
|
|
105
104
|
* sees them as TypeDef<T> where T is the extracted TypeScript type.
|
|
105
|
+
*
|
|
106
|
+
* Uses a string brand instead of unique symbol to avoid TS4029 errors
|
|
107
|
+
* during declaration emit in downstream packages.
|
|
108
|
+
* See: https://github.com/microsoft/TypeScript/issues/56107
|
|
106
109
|
*/
|
|
107
110
|
export type TypeDef<T = unknown> = T & {
|
|
108
|
-
readonly
|
|
111
|
+
readonly __fetchiumTypeDef: T;
|
|
109
112
|
};
|
|
110
113
|
export type SimpleTypeDef = Set<string | boolean | number> | CaseInsensitiveEnumSet<string | boolean | number> | Mask;
|
|
111
114
|
export type ComplexTypeDef = ObjectDef | EntityDef | ArrayDef | RecordDef | UnionDef | ParseResultDef;
|
|
@@ -206,9 +209,9 @@ export type ExtractType<T> = IsAny<T> extends true ? any : T extends TypeDef<inf
|
|
|
206
209
|
export type TypeDefShape = Record<string, TypeDef> | TypeDef;
|
|
207
210
|
export type QueryResult<T extends Query> = ExtractType<T['result']> & {
|
|
208
211
|
__refetch(): DiscriminatedReactivePromise<QueryResult<T>>;
|
|
209
|
-
|
|
212
|
+
__fetchNext(): Promise<QueryResult<T>>;
|
|
210
213
|
__hasNext: boolean;
|
|
211
|
-
|
|
214
|
+
__isFetchingNext: boolean;
|
|
212
215
|
};
|
|
213
216
|
export type QueryPromise<T extends Query> = DiscriminatedReactivePromise<QueryResult<T>>;
|
|
214
217
|
export interface CreateEvent {
|
|
@@ -263,10 +266,12 @@ export declare class LiveFieldConfig {
|
|
|
263
266
|
static value(entityDefs: import('./typeDefs.js').ValidatorDef<any>[], constraintFieldRefs: Map<string, Array<[string, unknown]>> | undefined, valueType: InternalTypeDef, onCreate: (value: unknown, entity: unknown) => unknown, onUpdate: (value: unknown, entity: unknown) => unknown, onDelete: (value: unknown, entity: unknown) => unknown): LiveFieldConfig;
|
|
264
267
|
}
|
|
265
268
|
export type EntityClassOrTypename = string | (new () => import('./proxy.js').Entity);
|
|
269
|
+
export type InvalidateTarget = (new () => import('./query.js').Query) | readonly [new () => import('./query.js').Query, Record<string, unknown>];
|
|
266
270
|
export interface MutationEffects {
|
|
267
271
|
readonly creates?: ReadonlyArray<readonly [EntityClassOrTypename, unknown]>;
|
|
268
272
|
readonly updates?: ReadonlyArray<readonly [EntityClassOrTypename, unknown]>;
|
|
269
273
|
readonly deletes?: ReadonlyArray<readonly [EntityClassOrTypename, unknown]>;
|
|
274
|
+
readonly invalidates?: ReadonlyArray<InvalidateTarget>;
|
|
270
275
|
}
|
|
271
276
|
export {};
|
|
272
277
|
//# sourceMappingURL=types.d.ts.map
|