@firsthandjs/data 0.10.0 → 0.10.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/dist/document.d.ts +0 -4
- package/dist/document.d.ts.map +1 -1
- package/dist/errors.d.ts +27 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/http.d.ts +0 -15
- package/dist/http.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.dev.js +18 -16
- package/dist/index.js +2 -2
- package/dist/vite.dev.js +6 -4
- package/dist/vite.js +6 -4
- package/package.json +3 -3
package/dist/document.d.ts
CHANGED
|
@@ -81,10 +81,6 @@ export interface GraphQLDocument<TData = unknown, TVariables extends Variables =
|
|
|
81
81
|
* a call against the schema it was generated from.
|
|
82
82
|
*/
|
|
83
83
|
export type DocumentArguments<TVariables extends Variables> = Record<string, never> extends TVariables ? [variables?: TVariables] : [variables: TVariables];
|
|
84
|
-
/** Thrown for a tag directive the cache cannot make sense of. */
|
|
85
|
-
export declare class FirsthandDirectiveError extends Error {
|
|
86
|
-
constructor(message: string);
|
|
87
|
-
}
|
|
88
84
|
/**
|
|
89
85
|
* Reads a document's tag directives and returns it without them.
|
|
90
86
|
*
|
package/dist/document.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAO,KAAK,GAAG,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAO,KAAK,GAAG,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAIxE,sEAAsE;AACtE,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAE7F,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CACnD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe,CAC9B,KAAK,GAAG,OAAO,EACf,UAAU,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAEpD,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,WAAW,EAAE,CAAC;IAC7C,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,CAAC,UAAU,SAAS,SAAS,IACxD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,UAAU,GAAG,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAsPhG;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAG,OAAO,EAAE,UAAU,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAChG,MAAM,EAAE,MAAM,GACb,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAYpC;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,WAAW,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE,CAiB1F"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What `@firsthandjs/data` throws.
|
|
3
|
+
*
|
|
4
|
+
* One file rather than one per module, because these are the package's errors
|
|
5
|
+
* rather than the parser's and the transport's: a caller catching them wants
|
|
6
|
+
* them in one place, and each is a class beside its own reason.
|
|
7
|
+
*/
|
|
8
|
+
/** Thrown for a tag directive the cache cannot make sense of. */
|
|
9
|
+
export declare class FirsthandDirectiveError extends Error {
|
|
10
|
+
constructor(message: string);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Thrown for any response outside 2xx.
|
|
14
|
+
*
|
|
15
|
+
* Prefixed like every other error here, so that `instanceof` cannot be confused
|
|
16
|
+
* by an `HttpError` from somewhere else in an application.
|
|
17
|
+
*/
|
|
18
|
+
export declare class FirsthandHttpError extends Error {
|
|
19
|
+
readonly status: number;
|
|
20
|
+
readonly url: string;
|
|
21
|
+
/** The parsed body, if there was one. */
|
|
22
|
+
readonly body: unknown;
|
|
23
|
+
constructor(status: number, url: string,
|
|
24
|
+
/** The parsed body, if there was one. */
|
|
25
|
+
body: unknown);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iEAAiE;AACjE,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAEzC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,OAAO;gBAHb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM;IACpB,yCAAyC;IAChC,IAAI,EAAE,OAAO;CAKzB"}
|
package/dist/http.d.ts
CHANGED
|
@@ -1,20 +1,5 @@
|
|
|
1
1
|
import { type CacheClient, type CacheOptions } from './cache.js';
|
|
2
2
|
import type { Loader } from './store.js';
|
|
3
|
-
/**
|
|
4
|
-
* Thrown for any response outside 2xx.
|
|
5
|
-
*
|
|
6
|
-
* Prefixed like every other error here, so that `instanceof` cannot be confused
|
|
7
|
-
* by an `HttpError` from somewhere else in an application.
|
|
8
|
-
*/
|
|
9
|
-
export declare class FirsthandHttpError extends Error {
|
|
10
|
-
readonly status: number;
|
|
11
|
-
readonly url: string;
|
|
12
|
-
/** The parsed body, if there was one. */
|
|
13
|
-
readonly body: unknown;
|
|
14
|
-
constructor(status: number, url: string,
|
|
15
|
-
/** The parsed body, if there was one. */
|
|
16
|
-
body: unknown);
|
|
17
|
-
}
|
|
18
3
|
/**
|
|
19
4
|
* What a call takes: `RequestInit`, plus the one thing the platform lacks.
|
|
20
5
|
*
|
package/dist/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,EAAe,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAChC,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACpC;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,CAAC,CAAC;IACrD;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC;IACpD,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,uEAAuE;IACvE,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACrD,mEAAmE;IACnE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtD;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAAC;IAC/C,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;CACzC,CAAC;AAyFF,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAgD/E"}
|
package/dist/index.d.ts
CHANGED
|
@@ -25,12 +25,13 @@ export type { MemoryStorage } from './transfer.js';
|
|
|
25
25
|
export type { CacheClient, CacheOptions } from './cache.js';
|
|
26
26
|
export { tag, tagMatches, anyTagMatches } from './tags.js';
|
|
27
27
|
export type { Tag, TagVars, Variables } from './tags.js';
|
|
28
|
-
export { parseGraphQL, resolveTags
|
|
28
|
+
export { parseGraphQL, resolveTags } from './document.js';
|
|
29
29
|
export type { DocumentArguments, GraphQLDocument, TagTemplate, TagValue } from './document.js';
|
|
30
30
|
/**
|
|
31
31
|
* `fetch`, as a client configured once: a base URL, headers read per request
|
|
32
32
|
* so a token may change, a failed status thrown, and the shared cache.
|
|
33
33
|
*/
|
|
34
|
-
export { createFetchClient
|
|
34
|
+
export { createFetchClient } from './http.js';
|
|
35
|
+
export { FirsthandDirectiveError, FirsthandHttpError } from './errors.js';
|
|
35
36
|
export type { FetchClient, FetchClientOptions, JsonRequest } from './http.js';
|
|
36
37
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACpF,YAAY,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,MAAM,EACN,QAAQ,EACR,MAAM,EACN,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACpF,YAAY,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,MAAM,EACN,QAAQ,EACR,MAAM,EACN,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE/F;;;GAGG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC1E,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.dev.js
CHANGED
|
@@ -662,16 +662,30 @@ var ESCAPES = {
|
|
|
662
662
|
"\u2029": "\\u2029"
|
|
663
663
|
};
|
|
664
664
|
|
|
665
|
-
// packages/data/src/
|
|
666
|
-
var DIRECTIVE = /^@(tag|invalidates)\b/;
|
|
667
|
-
var OPERATION = /\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/;
|
|
668
|
-
var NAME = /^[_A-Za-z][_0-9A-Za-z]*/;
|
|
665
|
+
// packages/data/src/errors.ts
|
|
669
666
|
var FirsthandDirectiveError = class extends Error {
|
|
670
667
|
constructor(message) {
|
|
671
668
|
super(message);
|
|
672
669
|
this.name = "FirsthandDirectiveError";
|
|
673
670
|
}
|
|
674
671
|
};
|
|
672
|
+
var FirsthandHttpError = class extends Error {
|
|
673
|
+
constructor(status, url, body) {
|
|
674
|
+
super(`HTTP ${String(status)} for ${url}`);
|
|
675
|
+
this.status = status;
|
|
676
|
+
this.url = url;
|
|
677
|
+
this.body = body;
|
|
678
|
+
this.name = "FirsthandHttpError";
|
|
679
|
+
}
|
|
680
|
+
status;
|
|
681
|
+
url;
|
|
682
|
+
body;
|
|
683
|
+
};
|
|
684
|
+
|
|
685
|
+
// packages/data/src/document.ts
|
|
686
|
+
var DIRECTIVE = /^@(tag|invalidates)\b/;
|
|
687
|
+
var OPERATION = /\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/;
|
|
688
|
+
var NAME = /^[_A-Za-z][_0-9A-Za-z]*/;
|
|
675
689
|
function endOfString(source, start2) {
|
|
676
690
|
if (source.startsWith('"""', start2)) {
|
|
677
691
|
const close = source.indexOf('"""', start2 + 3);
|
|
@@ -868,18 +882,6 @@ function resolveTags(templates, variables) {
|
|
|
868
882
|
|
|
869
883
|
// packages/data/src/http.ts
|
|
870
884
|
import { untrack as untrack2 } from "@firsthandjs/core";
|
|
871
|
-
var FirsthandHttpError = class extends Error {
|
|
872
|
-
constructor(status, url, body) {
|
|
873
|
-
super(`HTTP ${String(status)} for ${url}`);
|
|
874
|
-
this.status = status;
|
|
875
|
-
this.url = url;
|
|
876
|
-
this.body = body;
|
|
877
|
-
this.name = "FirsthandHttpError";
|
|
878
|
-
}
|
|
879
|
-
status;
|
|
880
|
-
url;
|
|
881
|
-
body;
|
|
882
|
-
};
|
|
883
885
|
function resolve(options, url, init) {
|
|
884
886
|
const target = /^[a-z]+:\/\//i.test(url) ? url : `${options.baseUrl ?? ""}${url}`;
|
|
885
887
|
const { json: payload, cacheKey: _key, ...rest } = init;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createContext as Q,effect as G,isRendering as K,onCleanup as L,useContext as U}from"@firsthandjs/core";import{batch as D,signal as T}from"@firsthandjs/core";var $=Object.freeze({});function v(e,t=$){return{name:e,vars:t}}function C(e,t){if(e.name!==t.name)return!1;for(let r of Object.keys(e.vars))if(!Object.is(e.vars[r],t.vars[r]))return!1;return!0}function c(e,t){for(let r of e)for(let n of t)if(C(r,n))return!0;return!1}function O(e={}){let t={options:e,held:new Set,recent:[],remember:e.remember??6e4};return{storage:e.storage,missed:(r,n)=>I(t,r,n),settled:r=>{z(t,r)},settle:(r=10)=>M(t,r),hold:r=>(t.held.add(r),()=>t.held.delete(r)),invalidate:(...r)=>N(t,r),clear:()=>{_(t)},get size(){return t.held.size}}}function I(e,t,r){if(e.remember===0||e.recent.length===0)return!1;let n=Date.now()-e.remember;return e.recent=e.recent.filter(o=>o.at>=n),e.recent.some(o=>o.at>t.answeredAt&&c(o.patterns,r))}function z(e,t){e.recent.length!==0&&(e.recent=e.recent.filter(r=>!c(r.patterns,t)))}async function M(e,t){for(let r=0;r<t;r++){let n=[];for(let o of e.held)o.inflight!==null&&n.push(o.inflight);if(n.length===0)return;await Promise.all(n)}}async function N(e,t){let r=[];for(let n of e.options.caches??[])n.forgetTagged(t);e.remember>0&&e.recent.push({patterns:t,at:Date.now()});for(let n of[...e.held])n.controller!==null&&n.pending.push(...t),c(t,n.tags)&&(n.name,n.tags,r.push(n.run(!0)));await Promise.all(r)}function _(e){e.recent=[];for(let t of[...e.held])t.controller?.abort(),e.held.delete(t);try{e.options.storage?.clear?.()}catch{}}function m(e,t){return{data:T(void 0),error:T(void 0),status:T("idle"),loading:T(!1),tags:[],controller:null,pending:[],inflight:null,superseded:!1,disposed:!1,answeredAt:0,name:t}}function g(e,t){e.answeredAt=Date.now(),D(()=>{e.data.value=t,e.error.value=void 0,e.status.value="success",e.loading.value=!1})}function y(e,t){D(()=>{e.error.value=t,e.status.value="error",e.loading.value=!1})}function x(e,t){return{data:e.data,error:e.error,status:e.status,loading:e.loading,reload:()=>e.run(!0),dispose:()=>{e.disposed=!0,e.controller?.abort(),t()}}}var q=Q();function f(){return U(q).value}function B(){let e=f();return(...t)=>e.invalidate(...t)}function P(e,t){t===void 0||e.data.peek()!==void 0||e.disposed||(g(e,t),e.loading.value=!0)}function Z(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function A(e,t={}){let r=f(),n=m(r,t.persist),o=r.hold(n);t.persist;let a={entry:n,store:r,persist:t.persist};return n.run=i=>W(a,e,i),Y(n,r,t.persist),ee(n),L(()=>{n.disposed=!0,n.controller?.abort(),t.persist,n.tags,o()}),x(n,o)}function W(e,t,r){let{entry:n,store:o}=e;if(n.disposed)return Promise.resolve(void 0);n.controller?.abort();let a=new AbortController;n.controller=a,n.pending=[],n.superseded=!1,n.loading.value=!0,n.data.peek()===void 0&&(n.status.value="loading");let i=t(ne(n,o,a,r)).then(async s=>X(e,a,s)).catch(s=>{a.signal.aborted||n.disposed||(n.controller=null,y(n,s))});return n.inflight=i,i.then(()=>{n.inflight===i&&(n.inflight=null)}),i}async function X(e,t,r){let{entry:n,store:o,persist:a}=e;if(!(t.signal.aborted||n.disposed)){if(n.controller=null,g(n,r),n.superseded||o.settled(n.tags),a!==void 0)try{o.storage?.write?.(a,r)}catch{}return n.superseded?(n.superseded=!1,n.run(!0)):r}}function Y(e,t,r){let n=t.storage;if(r===void 0||n?.read===void 0)return;let o;try{o=n.read(r)}catch{o=void 0}if(!Z(o)){P(e,o);return}(async()=>{try{P(e,await o)}catch{}})()}function ee(e){if(!K()){G(()=>{e.run(!1)});return}e.data.peek()===void 0?e.run(!1):e.loading.value=!1}function ne(e,t,r,n){let o=n,a=!1,i=(...d)=>{e.tags=d,!o&&t.missed(e,d)&&(o=!0,a&&(e.superseded=!0)),e.pending.length>0&&c(e.pending,d)&&(e.superseded=!0)},s=()=>(a=!0,o),l={signal:r.signal,get force(){return s()},get declared(){return e.tags},tags:i};return{signal:r.signal,get force(){return s()},request:l,tags:i}}function te(e,t={}){let r=f(),n=m(r,void 0),o=r.hold(n);n.run=()=>t.reload===void 0?Promise.resolve(void 0):oe(t.reload()),n.loading.value=!0,n.status.value="loading";let a=e.subscribe({next:s=>{g(n,s)},error:s=>{y(n,s)}}),i=typeof a=="function"?a:()=>{a.unsubscribe()};return L(()=>{n.disposed=!0,i(),o()}),x(n,()=>{i(),o()})}function re(e){return A(()=>e())}async function oe(e){await e}import{onCleanup as ae,untrack as ie}from"@firsthandjs/core";function se(e){let t=f(),r=m(t,void 0),n={controller:null,invalidating:[]};return ae(()=>{r.disposed=!0,n.controller?.abort()}),{data:r.data,error:r.error,status:r.status,running:r.loading,run:o=>de(r,t,n,()=>e(o,le(n)))}}function le(e){let t=e.controller,r=(...n)=>{e.invalidating=n};return{signal:t.signal,invalidates:r,request:{signal:t.signal,force:!0,mutating:!0,tags:r}}}async function de(e,t,r,n){r.controller?.abort(),r.controller=new AbortController;let o=r.controller;r.invalidating=[],e.loading.value=!0,e.status.value="loading";try{let a=await ie(n);return o.signal.aborted||e.disposed?void 0:(g(e,a),r.invalidating.length>0&&await t.invalidate(...r.invalidating),a)}catch(a){if(o.signal.aborted||e.disposed)return;y(e,a);return}}function w(e){return e===void 0?"undefined":e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(w).join(",")}]`:e instanceof Date?e.toISOString():`{${Object.entries(e).filter(([,r])=>r!==void 0).sort(([r],[n])=>r<n?-1:1).map(([r,n])=>`${r}:${w(n)}`).join(",")}}`}function R(e={}){let t={ttl:e.ttl??0,max:e.max??100,now:e.now??(()=>Date.now()),entries:new Map},r=(n,o)=>{ue(t,n,o)};return{get size(){return t.entries.size},dump:()=>ce(t),seed:n=>{for(let o in n)r(o,n[o])},settle:(n=10)=>ge(t,n),peek:n=>{let o=t.entries.get(n);return o===void 0||o.expires<=t.now()?void 0:o.value},write:r,forget:n=>{for(let o of n===void 0?[...t.entries.keys()]:[n])h(t,o)},forgetTagged:n=>{for(let[o,a]of[...t.entries])a.tags.length>0&&c(n,a.tags)&&h(t,o)},read:(n,o)=>async a=>fe(t,n,o,a)}}function h(e,t){e.entries.get(t)?.controller?.abort(),e.entries.delete(t)}function S(e,t,r){if(e.entries.delete(t),e.entries.set(t,r),e.entries.size>e.max)for(let n of e.entries.keys()){h(e,n);break}}function ue(e,t,r){S(e,t,{value:r,tags:[],expires:e.ttl===0?1/0:e.now()+e.ttl,inflight:null,controller:null,waiting:0})}function ce(e){let t={};for(let[r,n]of e.entries)n.inflight===null&&(t[r]=n.value);return t}async function ge(e,t){for(let r=0;r<t;r++){let n=[];for(let o of e.entries.values())o.inflight!==null&&n.push(o.inflight);if(n.length===0)return;await Promise.all(n.map(async o=>o.catch(()=>{})))}}async function fe(e,t,r,n){if(n.mutating===!0)return await r(n);let o=e.entries.get(t);if(n.force)h(e,t);else if(o!==void 0){if(o.inflight!==null)return await H(o,n);if(o.expires>e.now())return S(e,t,o),o.value;e.entries.delete(t)}return await pe(e,t,r,n)}async function pe(e,t,r,n){let o=new AbortController,a={value:void 0,tags:n.declared??[],expires:0,inflight:null,controller:o,waiting:0},i=r({signal:o.signal,force:n.force}).then(s=>(e.entries.get(t)===a&&me(e,t,a,s),s)).catch(s=>{throw e.entries.get(t)===a&&e.entries.delete(t),s});return a.inflight=i,S(e,t,a),await H(a,n)}function me(e,t,r,n){if(e.ttl===0){e.entries.delete(t);return}r.value=n,r.expires=e.now()+e.ttl,r.inflight=null,r.controller=null}async function H(e,t){e.waiting+=1;let r=()=>{e.waiting<=1&&e.inflight!==null&&e.controller?.abort()};t.signal.addEventListener("abort",r,{once:!0});try{return await e.inflight}finally{t.signal.removeEventListener("abort",r),e.waiting-=1}}function ye(e){let t=new Map(e===void 0?[]:Object.entries(e));return{get size(){return t.size},read:r=>t.get(r),write:(r,n)=>{t.set(r,n)},clear:()=>{t.clear()},dump:()=>Object.fromEntries(t),seed:r=>{for(let n in r)t.set(n,r[n])}}}function Te(e){return JSON.stringify(e).replace(he,t=>be[t])}var he=/[<\u2028\u2029]/g,be={"<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"};var ve=/^@(tag|invalidates)\b/,xe=/\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/,V=/^[_A-Za-z][_0-9A-Za-z]*/,u=class extends Error{constructor(t){super(t),this.name="FirsthandDirectiveError"}};function k(e,t){if(e.startsWith('"""',t)){let n=e.indexOf('"""',t+3);return n===-1?e.length:n+3}let r=t+1;for(;r<e.length&&e[r]!=='"';)r+=e[r]==="\\"?2:1;return r+1}function we(e,t){let r=0,n=t;for(;n<e.length;){let o=e[n];if(o==='"'){n=k(e,n);continue}if(o==="("||o==="["||o==="{")r++;else if((o===")"||o==="]"||o==="}")&&(r--,r===0))return n+1;n++}throw new u(`unclosed arguments in ${e.slice(t,t+40)}`)}function Re(e,t){try{return JSON.parse(e)}catch{throw new u(`@${t}: ${e} is not a valid string`)}}function Se(e,t){let r={},n=0,o=()=>{for(;n<e.length&&/[\s,]/.test(e[n]);)n++};for(o();n<e.length;){let a=V.exec(e.slice(n));if(a===null)throw new u(`@${t}: expected an argument name at "${e.slice(n)}"`);if(n+=a[0].length,o(),e[n]!==":")throw new u(`@${t}: argument ${a[0]} has no value`);n++,o();let i=ke(e,t,n);r[a[0]]=i.value,n=i.next,o()}return r}function ke(e,t,r){let n=e[r];if(n==="$"){let l=V.exec(e.slice(r+1));if(l===null)throw new u(`@${t}: expected a variable name after $`);return{value:{variable:l[0]},next:r+1+l[0].length}}if(n==='"'){let l=k(e,r),d=e.slice(r,l);return{value:{literal:d.startsWith('"""')?d.slice(3,-3).trim():Re(d,t)},next:l}}if(n==="["||n==="{")throw new u(`@${t}: a tag variable must be a scalar, not a list or object`);let o=/^[^\s,)]+/.exec(e.slice(r));if(o===null)throw new u(`@${t}: expected a value`);let a=o[0],i=r+a.length;if(a==="true"||a==="false")return{value:{literal:a==="true"},next:i};if(a==="null")return{value:{literal:null},next:i};let s=Number(a);return{value:{literal:Number.isNaN(s)?a:s},next:i}}function Ce(e){let t={tags:[],invalidates:[]},r="",n=0,o=0;for(;n<e.length;){let a=De(e,n);if(a!==null){n=a;continue}let i=ve.exec(e.slice(n));if(i===null){n++;continue}let s=Oe(e,n,i,t),l=n;for(;l>o&&/\s/.test(e[l-1]);)l--;r+=e.slice(o,l),o=s,n=s}return{...t,stripped:r+e.slice(o)}}function De(e,t){let r=e[t];if(r==='"')return k(e,t);if(r==="#"){let n=e.indexOf(`
|
|
2
|
-
`,t);return n===-1?e.length:n}return r==="@"?null:t+1}function Oe(e,t,r,n){let o=r[1],a=t+r[0].length,i="",s=a;for(;s<e.length&&/\s/.test(e[s]);)s++;if(e[s]==="("){let p=we(e,s);i=e.slice(s+1,p-1),a=p}let l=Se(i,o),d=l.name;if(d===void 0||!("literal"in d)||typeof d.literal!="string")throw new u(`@${o} needs a literal name, as in @${o}(name: "user", id: $id)`);return delete l.name,(o==="tag"?n.tags:n.invalidates).push({name:d.literal,vars:l}),a}function Pe(e){let{tags:t,invalidates:r,stripped:n}=Ce(e),o=xe.exec(n.replace(/#[^\n]*/g,""));return{source:n,operation:o?.[2]??"",kind:o?.[1]??"query",tags:t,invalidates:r}}function Le(e,t){return e.map(r=>{let n={};for(let[o,a]of Object.entries(r.vars)){if("literal"in a){n[o]=a.literal;continue}let i=t[a.variable];i!=null&&(n[o]=typeof i=="object"?JSON.stringify(i):i)}return v(r.name,n)})}import{untrack as
|
|
1
|
+
import{createContext as Q,effect as G,isRendering as K,onCleanup as L,useContext as U}from"@firsthandjs/core";import{batch as D,signal as h}from"@firsthandjs/core";var $=Object.freeze({});function v(e,t=$){return{name:e,vars:t}}function C(e,t){if(e.name!==t.name)return!1;for(let r of Object.keys(e.vars))if(!Object.is(e.vars[r],t.vars[r]))return!1;return!0}function c(e,t){for(let r of e)for(let n of t)if(C(r,n))return!0;return!1}function O(e={}){let t={options:e,held:new Set,recent:[],remember:e.remember??6e4};return{storage:e.storage,missed:(r,n)=>I(t,r,n),settled:r=>{z(t,r)},settle:(r=10)=>M(t,r),hold:r=>(t.held.add(r),()=>t.held.delete(r)),invalidate:(...r)=>N(t,r),clear:()=>{_(t)},get size(){return t.held.size}}}function I(e,t,r){if(e.remember===0||e.recent.length===0)return!1;let n=Date.now()-e.remember;return e.recent=e.recent.filter(o=>o.at>=n),e.recent.some(o=>o.at>t.answeredAt&&c(o.patterns,r))}function z(e,t){e.recent.length!==0&&(e.recent=e.recent.filter(r=>!c(r.patterns,t)))}async function M(e,t){for(let r=0;r<t;r++){let n=[];for(let o of e.held)o.inflight!==null&&n.push(o.inflight);if(n.length===0)return;await Promise.all(n)}}async function N(e,t){let r=[];for(let n of e.options.caches??[])n.forgetTagged(t);e.remember>0&&e.recent.push({patterns:t,at:Date.now()});for(let n of[...e.held])n.controller!==null&&n.pending.push(...t),c(t,n.tags)&&(n.name,n.tags,r.push(n.run(!0)));await Promise.all(r)}function _(e){e.recent=[];for(let t of[...e.held])t.controller?.abort(),e.held.delete(t);try{e.options.storage?.clear?.()}catch{}}function m(e,t){return{data:h(void 0),error:h(void 0),status:h("idle"),loading:h(!1),tags:[],controller:null,pending:[],inflight:null,superseded:!1,disposed:!1,answeredAt:0,name:t}}function g(e,t){e.answeredAt=Date.now(),D(()=>{e.data.value=t,e.error.value=void 0,e.status.value="success",e.loading.value=!1})}function y(e,t){D(()=>{e.error.value=t,e.status.value="error",e.loading.value=!1})}function x(e,t){return{data:e.data,error:e.error,status:e.status,loading:e.loading,reload:()=>e.run(!0),dispose:()=>{e.disposed=!0,e.controller?.abort(),t()}}}var q=Q();function f(){return U(q).value}function B(){let e=f();return(...t)=>e.invalidate(...t)}function P(e,t){t===void 0||e.data.peek()!==void 0||e.disposed||(g(e,t),e.loading.value=!0)}function Z(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function A(e,t={}){let r=f(),n=m(r,t.persist),o=r.hold(n);t.persist;let a={entry:n,store:r,persist:t.persist};return n.run=i=>W(a,e,i),Y(n,r,t.persist),ee(n),L(()=>{n.disposed=!0,n.controller?.abort(),t.persist,n.tags,o()}),x(n,o)}function W(e,t,r){let{entry:n,store:o}=e;if(n.disposed)return Promise.resolve(void 0);n.controller?.abort();let a=new AbortController;n.controller=a,n.pending=[],n.superseded=!1,n.loading.value=!0,n.data.peek()===void 0&&(n.status.value="loading");let i=t(ne(n,o,a,r)).then(async s=>X(e,a,s)).catch(s=>{a.signal.aborted||n.disposed||(n.controller=null,y(n,s))});return n.inflight=i,i.then(()=>{n.inflight===i&&(n.inflight=null)}),i}async function X(e,t,r){let{entry:n,store:o,persist:a}=e;if(!(t.signal.aborted||n.disposed)){if(n.controller=null,g(n,r),n.superseded||o.settled(n.tags),a!==void 0)try{o.storage?.write?.(a,r)}catch{}return n.superseded?(n.superseded=!1,n.run(!0)):r}}function Y(e,t,r){let n=t.storage;if(r===void 0||n?.read===void 0)return;let o;try{o=n.read(r)}catch{o=void 0}if(!Z(o)){P(e,o);return}(async()=>{try{P(e,await o)}catch{}})()}function ee(e){if(!K()){G(()=>{e.run(!1)});return}e.data.peek()===void 0?e.run(!1):e.loading.value=!1}function ne(e,t,r,n){let o=n,a=!1,i=(...d)=>{e.tags=d,!o&&t.missed(e,d)&&(o=!0,a&&(e.superseded=!0)),e.pending.length>0&&c(e.pending,d)&&(e.superseded=!0)},s=()=>(a=!0,o),l={signal:r.signal,get force(){return s()},get declared(){return e.tags},tags:i};return{signal:r.signal,get force(){return s()},request:l,tags:i}}function te(e,t={}){let r=f(),n=m(r,void 0),o=r.hold(n);n.run=()=>t.reload===void 0?Promise.resolve(void 0):oe(t.reload()),n.loading.value=!0,n.status.value="loading";let a=e.subscribe({next:s=>{g(n,s)},error:s=>{y(n,s)}}),i=typeof a=="function"?a:()=>{a.unsubscribe()};return L(()=>{n.disposed=!0,i(),o()}),x(n,()=>{i(),o()})}function re(e){return A(()=>e())}async function oe(e){await e}import{onCleanup as ae,untrack as ie}from"@firsthandjs/core";function se(e){let t=f(),r=m(t,void 0),n={controller:null,invalidating:[]};return ae(()=>{r.disposed=!0,n.controller?.abort()}),{data:r.data,error:r.error,status:r.status,running:r.loading,run:o=>de(r,t,n,()=>e(o,le(n)))}}function le(e){let t=e.controller,r=(...n)=>{e.invalidating=n};return{signal:t.signal,invalidates:r,request:{signal:t.signal,force:!0,mutating:!0,tags:r}}}async function de(e,t,r,n){r.controller?.abort(),r.controller=new AbortController;let o=r.controller;r.invalidating=[],e.loading.value=!0,e.status.value="loading";try{let a=await ie(n);return o.signal.aborted||e.disposed?void 0:(g(e,a),r.invalidating.length>0&&await t.invalidate(...r.invalidating),a)}catch(a){if(o.signal.aborted||e.disposed)return;y(e,a);return}}function w(e){return e===void 0?"undefined":e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(w).join(",")}]`:e instanceof Date?e.toISOString():`{${Object.entries(e).filter(([,r])=>r!==void 0).sort(([r],[n])=>r<n?-1:1).map(([r,n])=>`${r}:${w(n)}`).join(",")}}`}function R(e={}){let t={ttl:e.ttl??0,max:e.max??100,now:e.now??(()=>Date.now()),entries:new Map},r=(n,o)=>{ue(t,n,o)};return{get size(){return t.entries.size},dump:()=>ce(t),seed:n=>{for(let o in n)r(o,n[o])},settle:(n=10)=>ge(t,n),peek:n=>{let o=t.entries.get(n);return o===void 0||o.expires<=t.now()?void 0:o.value},write:r,forget:n=>{for(let o of n===void 0?[...t.entries.keys()]:[n])b(t,o)},forgetTagged:n=>{for(let[o,a]of[...t.entries])a.tags.length>0&&c(n,a.tags)&&b(t,o)},read:(n,o)=>async a=>fe(t,n,o,a)}}function b(e,t){e.entries.get(t)?.controller?.abort(),e.entries.delete(t)}function S(e,t,r){if(e.entries.delete(t),e.entries.set(t,r),e.entries.size>e.max)for(let n of e.entries.keys()){b(e,n);break}}function ue(e,t,r){S(e,t,{value:r,tags:[],expires:e.ttl===0?1/0:e.now()+e.ttl,inflight:null,controller:null,waiting:0})}function ce(e){let t={};for(let[r,n]of e.entries)n.inflight===null&&(t[r]=n.value);return t}async function ge(e,t){for(let r=0;r<t;r++){let n=[];for(let o of e.entries.values())o.inflight!==null&&n.push(o.inflight);if(n.length===0)return;await Promise.all(n.map(async o=>o.catch(()=>{})))}}async function fe(e,t,r,n){if(n.mutating===!0)return await r(n);let o=e.entries.get(t);if(n.force)b(e,t);else if(o!==void 0){if(o.inflight!==null)return await E(o,n);if(o.expires>e.now())return S(e,t,o),o.value;e.entries.delete(t)}return await pe(e,t,r,n)}async function pe(e,t,r,n){let o=new AbortController,a={value:void 0,tags:n.declared??[],expires:0,inflight:null,controller:o,waiting:0},i=r({signal:o.signal,force:n.force}).then(s=>(e.entries.get(t)===a&&me(e,t,a,s),s)).catch(s=>{throw e.entries.get(t)===a&&e.entries.delete(t),s});return a.inflight=i,S(e,t,a),await E(a,n)}function me(e,t,r,n){if(e.ttl===0){e.entries.delete(t);return}r.value=n,r.expires=e.now()+e.ttl,r.inflight=null,r.controller=null}async function E(e,t){e.waiting+=1;let r=()=>{e.waiting<=1&&e.inflight!==null&&e.controller?.abort()};t.signal.addEventListener("abort",r,{once:!0});try{return await e.inflight}finally{t.signal.removeEventListener("abort",r),e.waiting-=1}}function ye(e){let t=new Map(e===void 0?[]:Object.entries(e));return{get size(){return t.size},read:r=>t.get(r),write:(r,n)=>{t.set(r,n)},clear:()=>{t.clear()},dump:()=>Object.fromEntries(t),seed:r=>{for(let n in r)t.set(n,r[n])}}}function Te(e){return JSON.stringify(e).replace(he,t=>be[t])}var he=/[<\u2028\u2029]/g,be={"<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"};var u=class extends Error{constructor(t){super(t),this.name="FirsthandDirectiveError"}},T=class extends Error{constructor(r,n,o){super(`HTTP ${String(r)} for ${n}`);this.status=r;this.url=n;this.body=o;this.name="FirsthandHttpError"}status;url;body};var ve=/^@(tag|invalidates)\b/,xe=/\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/,H=/^[_A-Za-z][_0-9A-Za-z]*/;function k(e,t){if(e.startsWith('"""',t)){let n=e.indexOf('"""',t+3);return n===-1?e.length:n+3}let r=t+1;for(;r<e.length&&e[r]!=='"';)r+=e[r]==="\\"?2:1;return r+1}function we(e,t){let r=0,n=t;for(;n<e.length;){let o=e[n];if(o==='"'){n=k(e,n);continue}if(o==="("||o==="["||o==="{")r++;else if((o===")"||o==="]"||o==="}")&&(r--,r===0))return n+1;n++}throw new u(`unclosed arguments in ${e.slice(t,t+40)}`)}function Re(e,t){try{return JSON.parse(e)}catch{throw new u(`@${t}: ${e} is not a valid string`)}}function Se(e,t){let r={},n=0,o=()=>{for(;n<e.length&&/[\s,]/.test(e[n]);)n++};for(o();n<e.length;){let a=H.exec(e.slice(n));if(a===null)throw new u(`@${t}: expected an argument name at "${e.slice(n)}"`);if(n+=a[0].length,o(),e[n]!==":")throw new u(`@${t}: argument ${a[0]} has no value`);n++,o();let i=ke(e,t,n);r[a[0]]=i.value,n=i.next,o()}return r}function ke(e,t,r){let n=e[r];if(n==="$"){let l=H.exec(e.slice(r+1));if(l===null)throw new u(`@${t}: expected a variable name after $`);return{value:{variable:l[0]},next:r+1+l[0].length}}if(n==='"'){let l=k(e,r),d=e.slice(r,l);return{value:{literal:d.startsWith('"""')?d.slice(3,-3).trim():Re(d,t)},next:l}}if(n==="["||n==="{")throw new u(`@${t}: a tag variable must be a scalar, not a list or object`);let o=/^[^\s,)]+/.exec(e.slice(r));if(o===null)throw new u(`@${t}: expected a value`);let a=o[0],i=r+a.length;if(a==="true"||a==="false")return{value:{literal:a==="true"},next:i};if(a==="null")return{value:{literal:null},next:i};let s=Number(a);return{value:{literal:Number.isNaN(s)?a:s},next:i}}function Ce(e){let t={tags:[],invalidates:[]},r="",n=0,o=0;for(;n<e.length;){let a=De(e,n);if(a!==null){n=a;continue}let i=ve.exec(e.slice(n));if(i===null){n++;continue}let s=Oe(e,n,i,t),l=n;for(;l>o&&/\s/.test(e[l-1]);)l--;r+=e.slice(o,l),o=s,n=s}return{...t,stripped:r+e.slice(o)}}function De(e,t){let r=e[t];if(r==='"')return k(e,t);if(r==="#"){let n=e.indexOf(`
|
|
2
|
+
`,t);return n===-1?e.length:n}return r==="@"?null:t+1}function Oe(e,t,r,n){let o=r[1],a=t+r[0].length,i="",s=a;for(;s<e.length&&/\s/.test(e[s]);)s++;if(e[s]==="("){let p=we(e,s);i=e.slice(s+1,p-1),a=p}let l=Se(i,o),d=l.name;if(d===void 0||!("literal"in d)||typeof d.literal!="string")throw new u(`@${o} needs a literal name, as in @${o}(name: "user", id: $id)`);return delete l.name,(o==="tag"?n.tags:n.invalidates).push({name:d.literal,vars:l}),a}function Pe(e){let{tags:t,invalidates:r,stripped:n}=Ce(e),o=xe.exec(n.replace(/#[^\n]*/g,""));return{source:n,operation:o?.[2]??"",kind:o?.[1]??"query",tags:t,invalidates:r}}function Le(e,t){return e.map(r=>{let n={};for(let[o,a]of Object.entries(r.vars)){if("literal"in a){n[o]=a.literal;continue}let i=t[a.variable];i!=null&&(n[o]=typeof i=="object"?JSON.stringify(i):i)}return v(r.name,n)})}import{untrack as F}from"@firsthandjs/core";function qe(e,t,r){let n=/^[a-z]+:\/\//i.test(t)?t:`${e.baseUrl??""}${t}`,{json:o,cacheKey:a,...i}=r,s={...e.init,...i},l=new Headers(typeof e.headers=="function"?F(e.headers):e.headers);for(let[d,p]of new Headers(r.headers??{}))l.set(d,p);return o!==void 0&&(s.body=JSON.stringify(o),l.has("content-type")||l.set("content-type","application/json")),s.headers=l,[n,s]}async function V(e,t,r,n){let a=await(e.fetch??globalThis.fetch)(t,{...r,signal:n.signal}),i=await a.text(),s=i===""?void 0:JSON.parse(i);if(!a.ok)throw new T(a.status,t,s);return s}function Ae(e,t,r,n){if(t.cacheKey===!1)return;let o=(n.method??"GET").toUpperCase(),a=typeof t.cacheKey=="string"?t.cacheKey:o==="GET"||o==="HEAD"?`${o} ${r}`:void 0;return a===void 0?void 0:`${e.scope===void 0?n.headers.get("authorization")??"":F(e.scope)}\0${a}`}function j(e={}){let t=e.cache===void 0||e.cache===!1?void 0:"read"in e.cache?e.cache:R(e.cache),r={cache:t,request:(n,o={})=>async a=>{let[i,s]=qe(e,n,o),l=Ae(e,o,i,s);return t===void 0||l===void 0||a.mutating===!0?await V(e,i,s,a):await t.read(l,d=>V(e,i,s,d))(a)},get:(n,o={})=>r.request(n,o),post:(n,o={})=>r.request(n,{method:"POST",...o}),put:(n,o={})=>r.request(n,{method:"PUT",...o}),patch:(n,o={})=>r.request(n,{method:"PATCH",...o}),remove:(n,o={})=>r.request(n,{method:"DELETE",...o}),with:n=>j({...e,...n,cache:n.cache??t??!1})};return r}export{q as DataContext,u as FirsthandDirectiveError,T as FirsthandHttpError,c as anyTagMatches,R as createCacheClient,O as createData,j as createFetchClient,ye as createMemoryStorage,te as fromObservable,re as fromPromise,Pe as parseGraphQL,Le as resolveTags,Te as serialize,w as stableKey,v as tag,C as tagMatches,se as useAction,f as useData,B as useInvalidate,A as useResource};
|
package/dist/vite.dev.js
CHANGED
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
4
|
|
|
5
|
-
// packages/data/src/
|
|
6
|
-
var DIRECTIVE = /^@(tag|invalidates)\b/;
|
|
7
|
-
var OPERATION = /\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/;
|
|
8
|
-
var NAME = /^[_A-Za-z][_0-9A-Za-z]*/;
|
|
5
|
+
// packages/data/src/errors.ts
|
|
9
6
|
var FirsthandDirectiveError = class extends Error {
|
|
10
7
|
constructor(message) {
|
|
11
8
|
super(message);
|
|
12
9
|
this.name = "FirsthandDirectiveError";
|
|
13
10
|
}
|
|
14
11
|
};
|
|
12
|
+
|
|
13
|
+
// packages/data/src/document.ts
|
|
14
|
+
var DIRECTIVE = /^@(tag|invalidates)\b/;
|
|
15
|
+
var OPERATION = /\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/;
|
|
16
|
+
var NAME = /^[_A-Za-z][_0-9A-Za-z]*/;
|
|
15
17
|
function endOfString(source, start) {
|
|
16
18
|
if (source.startsWith('"""', start)) {
|
|
17
19
|
const close = source.indexOf('"""', start + 3);
|
package/dist/vite.js
CHANGED
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
4
|
|
|
5
|
-
// packages/data/src/
|
|
6
|
-
var DIRECTIVE = /^@(tag|invalidates)\b/;
|
|
7
|
-
var OPERATION = /\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/;
|
|
8
|
-
var NAME = /^[_A-Za-z][_0-9A-Za-z]*/;
|
|
5
|
+
// packages/data/src/errors.ts
|
|
9
6
|
var FirsthandDirectiveError = class extends Error {
|
|
10
7
|
constructor(message) {
|
|
11
8
|
super(message);
|
|
12
9
|
this.name = "FirsthandDirectiveError";
|
|
13
10
|
}
|
|
14
11
|
};
|
|
12
|
+
|
|
13
|
+
// packages/data/src/document.ts
|
|
14
|
+
var DIRECTIVE = /^@(tag|invalidates)\b/;
|
|
15
|
+
var OPERATION = /\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/;
|
|
16
|
+
var NAME = /^[_A-Za-z][_0-9A-Za-z]*/;
|
|
15
17
|
function endOfString(source, start) {
|
|
16
18
|
if (source.startsWith('"""', start)) {
|
|
17
19
|
const close = source.indexOf('"""', start + 3);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@firsthandjs/data",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Resources, actions and invalidation for Firsthand: reactive async state, with the cache one layer down.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"LICENSE"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@firsthandjs/core": "0.10.
|
|
32
|
-
"@firsthandjs/dom": "0.10.
|
|
31
|
+
"@firsthandjs/core": "0.10.1",
|
|
32
|
+
"@firsthandjs/dom": "0.10.1"
|
|
33
33
|
},
|
|
34
34
|
"engines": {
|
|
35
35
|
"node": ">=20.11.0"
|