@firsthandjs/data 0.7.0 → 0.7.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/cache.d.ts CHANGED
@@ -59,7 +59,7 @@ import type { Loader } from './store.js';
59
59
  * served for two different requests.
60
60
  */
61
61
  export declare function stableKey(value: unknown): string;
62
- export interface CacheOptions {
62
+ export type CacheOptions = {
63
63
  /**
64
64
  * How long an answer is served again without running the producer, in ms.
65
65
  *
@@ -78,8 +78,8 @@ export interface CacheOptions {
78
78
  readonly max?: number;
79
79
  /** For tests: what `Date.now()` should be. */
80
80
  readonly now?: () => number;
81
- }
82
- export interface CacheClient {
81
+ };
82
+ export type CacheClient = {
83
83
  /**
84
84
  * Wraps a producer so its answer is kept under `key`.
85
85
  *
@@ -111,6 +111,6 @@ export interface CacheClient {
111
111
  forgetTagged(patterns: readonly Tag[]): void;
112
112
  /** How many entries are held, in flight included. */
113
113
  readonly size: number;
114
- }
114
+ };
115
115
  export declare function createCacheClient(options?: CacheOptions): CacheClient;
116
116
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAe,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAmBhD;AAED,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpD;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,0EAA0E;IAC1E,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,sCAAsC;IACtC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;;;OAOG;IACH,YAAY,CAAC,QAAQ,EAAE,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC;IAC7C,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAeD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,YAAiB,GAAG,WAAW,CAmIzE"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAe,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAmBhD;AAED,MAAM,MAAM,YAAY,GAAG;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;;;;;OAMG;IACH,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpD;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,0EAA0E;IAC1E,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,sCAAsC;IACtC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;;;OAOG;IACH,YAAY,CAAC,QAAQ,EAAE,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC;IAC7C,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAeF,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,YAAiB,GAAG,WAAW,CAmIzE"}
package/dist/codegen.d.ts CHANGED
@@ -40,7 +40,7 @@
40
40
  * are legal.
41
41
  */
42
42
  /** The bits of codegen's document shape this needs. Typed here to avoid a dependency. */
43
- export interface CodegenDocument {
43
+ export type CodegenDocument = {
44
44
  readonly location?: string | undefined;
45
45
  readonly document?: {
46
46
  readonly definitions: readonly {
@@ -51,8 +51,8 @@ export interface CodegenDocument {
51
51
  } | undefined;
52
52
  }[];
53
53
  } | undefined;
54
- }
55
- export interface CodegenConfig {
54
+ };
55
+ export type CodegenConfig = {
56
56
  /**
57
57
  * Where `typescript-operations` wrote its types, relative to this file.
58
58
  *
@@ -61,7 +61,7 @@ export interface CodegenConfig {
61
61
  readonly typesPath?: string;
62
62
  /** Import path for the document type. Only useful when testing this plugin. */
63
63
  readonly documentTypePath?: string;
64
- }
64
+ };
65
65
  /**
66
66
  * Generates the module declarations.
67
67
  *
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,yFAAyF;AACzF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EACd;QACE,QAAQ,CAAC,WAAW,EAAE,SAAS;YAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;aAAE,GAAG,SAAS,CAAC;SACxD,EAAE,CAAC;KACL,GACD,SAAS,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AA8BD;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,eAAe,EAAE,EACrC,MAAM,GAAE,aAAkB,GACzB,MAAM,CAgDR;;;;AAED,wBAA0B"}
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,yFAAyF;AACzF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EACd;QACE,QAAQ,CAAC,WAAW,EAAE,SAAS;YAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;aAAE,GAAG,SAAS,CAAC;SACxD,EAAE,CAAC;KACL,GACD,SAAS,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC,CAAC;AA8BF;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,eAAe,EAAE,EACrC,MAAM,GAAE,aAAkB,GACzB,MAAM,CAgDR;;;;AAED,wBAA0B"}
@@ -45,10 +45,10 @@ export type TagValue = {
45
45
  } | {
46
46
  readonly literal: TagVars[string];
47
47
  };
48
- export interface TagTemplate {
48
+ export type TagTemplate = {
49
49
  readonly name: string;
50
50
  readonly vars: Readonly<Record<string, TagValue>>;
51
- }
51
+ };
52
52
  /**
53
53
  * A parsed operation, carrying what it returns and what it needs.
54
54
  *
@@ -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;AAGxE,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,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CACnD;AAED;;;;;;;;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;AAMhG,iEAAiE;AACjE,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAqND;;;;;;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"}
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;AAGxE,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;AAMhG,iEAAiE;AACjE,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI5B;AAqND;;;;;;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/http.d.ts CHANGED
@@ -51,7 +51,7 @@ export interface JsonRequest extends Omit<RequestInit, 'body'> {
51
51
  */
52
52
  readonly cacheKey?: string | false;
53
53
  }
54
- export interface FetchClientOptions {
54
+ export type FetchClientOptions = {
55
55
  /** Prefixed to every relative path. A path beginning with `http` is left alone. */
56
56
  readonly baseUrl?: string;
57
57
  /**
@@ -91,8 +91,8 @@ export interface FetchClientOptions {
91
91
  * and keep that in one place rather than in a plugin system.
92
92
  */
93
93
  readonly fetch?: typeof globalThis.fetch;
94
- }
95
- export interface FetchClient {
94
+ };
95
+ export type FetchClient = {
96
96
  /** Any method: the general form the others are named shortcuts for. */
97
97
  request<T>(url: string, init?: JsonRequest): Loader<T>;
98
98
  get<T>(url: string, init?: JsonRequest): Loader<T>;
@@ -109,6 +109,6 @@ export interface FetchClient {
109
109
  with(options: FetchClientOptions): FetchClient;
110
110
  /** The cache this client keeps its answers in, if it has one. */
111
111
  readonly cache: CacheClient | undefined;
112
- }
112
+ };
113
113
  export declare function createFetchClient(options?: FetchClientOptions): FetchClient;
114
114
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,EAAe,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;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;AAED;;;;;;;;;;;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,WAAW,kBAAkB;IACjC,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;AAED,MAAM,WAAW,WAAW;IAC1B,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;AAmDD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAoE/E"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,EAAe,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;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;AAED;;;;;;;;;;;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;AAmDF,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAoE/E"}
package/dist/index.dev.js CHANGED
@@ -196,10 +196,14 @@ function useResource(load, options = {}) {
196
196
  entry.status.value = "loading";
197
197
  }
198
198
  let forced = force;
199
+ let asked = false;
199
200
  const declare = (...next) => {
200
201
  entry.tags = next;
201
202
  if (!forced && store.missed(entry, next)) {
202
203
  forced = true;
204
+ if (asked) {
205
+ entry.superseded = true;
206
+ }
203
207
  }
204
208
  if (entry.pending.length > 0 && anyTagMatches(entry.pending, next)) {
205
209
  entry.superseded = true;
@@ -208,6 +212,7 @@ function useResource(load, options = {}) {
208
212
  const request = {
209
213
  signal: controller.signal,
210
214
  get force() {
215
+ asked = true;
211
216
  return forced;
212
217
  },
213
218
  // Read after `tags()` by a cache that keeps them, which is every client
@@ -220,6 +225,7 @@ function useResource(load, options = {}) {
220
225
  const context = {
221
226
  signal: controller.signal,
222
227
  get force() {
228
+ asked = true;
223
229
  return forced;
224
230
  },
225
231
  request,
@@ -231,7 +237,9 @@ function useResource(load, options = {}) {
231
237
  }
232
238
  entry.controller = null;
233
239
  succeed(entry, value);
234
- store.settled(entry.tags);
240
+ if (!entry.superseded) {
241
+ store.settled(entry.tags);
242
+ }
235
243
  if (options.persist !== void 0) {
236
244
  try {
237
245
  store.storage?.write?.(options.persist, value);
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createContext as z,effect as N,onCleanup as D,untrack as _,useContext as M}from"@firsthandjs/core";import{batch as S,signal as b}from"@firsthandjs/core";var H=Object.freeze({});function R(e,n=H){return{name:e,vars:n}}function L(e,n){if(e.name!==n.name)return!1;for(let r of Object.keys(e.vars))if(!Object.is(e.vars[r],n.vars[r]))return!1;return!0}function m(e,n){for(let r of e)for(let t of n)if(L(r,t))return!0;return!1}function A(e={}){let n=new Set,r=e.remember??6e4,t=[],a=()=>Date.now();return{storage:e.storage,missed:(s,l)=>{if(r===0||t.length===0)return!1;let o=a()-r;return t=t.filter(i=>i.at>=o),t.some(i=>i.at>s.answeredAt&&m(i.patterns,l))},settled:s=>{t.length!==0&&(t=t.filter(l=>!m(l.patterns,s)))},hold:s=>(n.add(s),()=>n.delete(s)),invalidate:async(...s)=>{let l=[];for(let o of e.caches??[])o.forgetTagged(s);r>0&&t.push({patterns:s,at:a()});for(let o of[...n])o.controller!==null&&o.pending.push(...s),m(s,o.tags)&&(o.name,o.tags,l.push(o.run(!0)));await Promise.all(l)},clear:()=>{t=[];for(let s of[...n])s.controller?.abort(),n.delete(s);try{e.storage?.clear?.()}catch{}},get size(){return n.size}}}function x(e,n){return{data:b(void 0),error:b(void 0),status:b("idle"),loading:b(!1),tags:[],controller:null,pending:[],superseded:!1,disposed:!1,answeredAt:0,name:n}}function y(e,n){e.answeredAt=Date.now(),S(()=>{e.data.value=n,e.error.value=void 0,e.status.value="success",e.loading.value=!1})}function v(e,n){S(()=>{e.error.value=n,e.status.value="error",e.loading.value=!1})}function C(e,n){return{data:e.data,error:e.error,status:e.status,loading:e.loading,reload:()=>e.run(!0),dispose:()=>{e.disposed=!0,e.controller?.abort(),n()}}}var P=z();function h(){return M(P).value}function Q(){let e=h();return(...n)=>e.invalidate(...n)}function V(e,n={}){let r=h(),t=x(r,n.persist),a=r.hold(t);n.persist,t.run=o=>{if(t.disposed)return Promise.resolve(void 0);t.controller?.abort();let i=new AbortController;t.controller=i,t.pending=[],t.superseded=!1,t.loading.value=!0,t.data.peek()===void 0&&(t.status.value="loading");let d=o,u=(...g)=>{t.tags=g,!d&&r.missed(t,g)&&(d=!0),t.pending.length>0&&m(t.pending,g)&&(t.superseded=!0)},f={signal:i.signal,get force(){return d},get declared(){return t.tags},tags:u},c={signal:i.signal,get force(){return d},request:f,tags:u};return e(c).then(async g=>{if(!(i.signal.aborted||t.disposed)){if(t.controller=null,y(t,g),r.settled(t.tags),n.persist!==void 0)try{r.storage?.write?.(n.persist,g)}catch{}return t.superseded?(t.superseded=!1,t.run(!0)):g}}).catch(g=>{i.signal.aborted||t.disposed||(t.controller=null,v(t,g))})};let s=n.persist,l=r.storage;return s!==void 0&&l?.read!==void 0&&(async()=>{try{let o=await l.read?.(s);o!==void 0&&t.data.peek()===void 0&&!t.disposed&&(y(t,o),t.loading.value=!0)}catch{}})(),N(()=>{t.run(!1)}),D(()=>{t.disposed=!0,t.controller?.abort(),n.persist,t.tags,a()}),C(t,a)}function G(e){let n=h(),r=x(n,void 0),t=null;return D(()=>{r.disposed=!0,t?.abort()}),{data:r.data,error:r.error,status:r.status,running:r.loading,run:async a=>{t?.abort(),t=new AbortController;let s=t,l=[];r.loading.value=!0,r.status.value="loading";try{let o=(...d)=>{l=d},i=await _(()=>e(a,{signal:s.signal,invalidates:o,request:{signal:s.signal,force:!0,mutating:!0,tags:o}}));return s.signal.aborted||r.disposed?void 0:(y(r,i),l.length>0&&await n.invalidate(...l),i)}catch(o){if(s.signal.aborted||r.disposed)return;v(r,o);return}}}}function K(e,n={}){let r=h(),t=x(r,void 0),a=r.hold(t);t.run=()=>n.reload===void 0?Promise.resolve(void 0):U(n.reload()),t.loading.value=!0,t.status.value="loading";let s=e.subscribe({next:o=>{y(t,o)},error:o=>{v(t,o)}}),l=typeof s=="function"?s:()=>{s.unsubscribe()};return D(()=>{t.disposed=!0,l(),a()}),C(t,()=>{l(),a()})}function B(e){return V(()=>e())}async function U(e){await e}function k(e){return e===void 0?"undefined":e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(k).join(",")}]`:e instanceof Date?e.toISOString():`{${Object.entries(e).filter(([,r])=>r!==void 0).sort(([r],[t])=>r<t?-1:1).map(([r,t])=>`${r}:${k(t)}`).join(",")}}`}function O(e={}){let n=e.ttl??0,r=e.max??100,t=e.now??(()=>Date.now()),a=new Map,s=o=>{a.get(o)?.controller?.abort(),a.delete(o)},l=(o,i)=>{if(a.delete(o),a.set(o,i),a.size>r)for(let d of a.keys()){s(d);break}};return{get size(){return a.size},peek:o=>{let i=a.get(o);if(!(i===void 0||i.expires<=t()))return i.value},write:(o,i)=>{l(o,{value:i,tags:[],expires:n===0?1/0:t()+n,inflight:null,controller:null,waiting:0})},forget:o=>{if(o===void 0){for(let i of[...a.keys()])s(i);return}s(o)},forgetTagged:o=>{for(let[i,d]of[...a])d.tags.length>0&&m(o,d.tags)&&s(i)},read:(o,i)=>async d=>{if(d.mutating===!0)return await i(d);let u=a.get(o);if(d.force)s(o);else if(u!==void 0){if(u.inflight!==null)return await $(u,d);if(u.expires>t())return l(o,u),u.value;a.delete(o)}let f=new AbortController,c={value:void 0,tags:d.declared??[],expires:0,inflight:null,controller:f,waiting:0},g=i({signal:f.signal,force:d.force}).then(T=>(a.get(o)===c&&(n===0?a.delete(o):(c.value=T,c.expires=t()+n,c.inflight=null,c.controller=null)),T)).catch(T=>{throw a.get(o)===c&&a.delete(o),T});return c.inflight=g,l(o,c),await $(c,d)}}}async function $(e,n){e.waiting+=1;let r=()=>{e.waiting<=1&&e.inflight!==null&&e.controller?.abort()};n.signal.addEventListener("abort",r,{once:!0});try{return await e.inflight}finally{n.signal.removeEventListener("abort",r),e.waiting-=1}}var Z=/^@(tag|invalidates)\b/,W=/\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/,E=/^[_A-Za-z][_0-9A-Za-z]*/,p=class extends Error{constructor(n){super(n),this.name="FirsthandDirectiveError"}};function q(e,n){if(e.startsWith('"""',n)){let t=e.indexOf('"""',n+3);return t===-1?e.length:t+3}let r=n+1;for(;r<e.length&&e[r]!=='"';)r+=e[r]==="\\"?2:1;return r+1}function X(e,n){let r=0,t=n;for(;t<e.length;){let a=e[t];if(a==='"'){t=q(e,t);continue}if(a==="("||a==="["||a==="{")r++;else if((a===")"||a==="]"||a==="}")&&(r--,r===0))return t+1;t++}throw new p(`unclosed arguments in ${e.slice(n,n+40)}`)}function Y(e,n){try{return JSON.parse(e)}catch{throw new p(`@${n}: ${e} is not a valid string`)}}function ee(e,n){let r={},t=0,a=()=>{for(;t<e.length&&/[\s,]/.test(e[t]);)t++};for(a();t<e.length;){let s=E.exec(e.slice(t));if(s===null)throw new p(`@${n}: expected an argument name at "${e.slice(t)}"`);if(t+=s[0].length,a(),e[t]!==":")throw new p(`@${n}: argument ${s[0]} has no value`);t++,a();let l=te(e,n,t);r[s[0]]=l.value,t=l.next,a()}return r}function te(e,n,r){let t=e[r];if(t==="$"){let i=E.exec(e.slice(r+1));if(i===null)throw new p(`@${n}: expected a variable name after $`);return{value:{variable:i[0]},next:r+1+i[0].length}}if(t==='"'){let i=q(e,r),d=e.slice(r,i);return{value:{literal:d.startsWith('"""')?d.slice(3,-3).trim():Y(d,n)},next:i}}if(t==="["||t==="{")throw new p(`@${n}: a tag variable must be a scalar, not a list or object`);let a=/^[^\s,)]+/.exec(e.slice(r));if(a===null)throw new p(`@${n}: expected a value`);let s=a[0],l=r+s.length;if(s==="true"||s==="false")return{value:{literal:s==="true"},next:l};if(s==="null")return{value:{literal:null},next:l};let o=Number(s);return{value:{literal:Number.isNaN(o)?s:o},next:l}}function ne(e){let n=[],r=[],t="",a=0,s=0;for(;a<e.length;){let l=e[a];if(l==='"'){a=q(e,a);continue}if(l==="#"){let T=e.indexOf(`
2
- `,a);a=T===-1?e.length:T;continue}if(l!=="@"){a++;continue}let o=Z.exec(e.slice(a));if(o===null){a++;continue}let i=a+o[0].length,d="",u=i;for(;u<e.length&&/\s/.test(e[u]);)u++;if(e[u]==="("){let T=X(e,u);d=e.slice(u+1,T-1),i=T}let f=ee(d,o[1]),c=f.name;if(c===void 0||!("literal"in c)||typeof c.literal!="string")throw new p(`@${o[1]} needs a literal name, as in @${o[1]}(name: "user", id: $id)`);delete f.name,(o[1]==="tag"?n:r).push({name:c.literal,vars:f});let g=a;for(;g>s&&/\s/.test(e[g-1]);)g--;t+=e.slice(s,g),s=i,a=i}return{tags:n,invalidates:r,stripped:t+e.slice(s)}}function re(e){let{tags:n,invalidates:r,stripped:t}=ne(e),a=W.exec(t.replace(/#[^\n]*/g,""));return{source:t,operation:a?.[2]??"",kind:a?.[1]??"query",tags:n,invalidates:r}}function ae(e,n){return e.map(r=>{let t={};for(let[a,s]of Object.entries(r.vars)){if("literal"in s){t[a]=s.literal;continue}let l=n[s.variable];l!=null&&(t[a]=typeof l=="object"?JSON.stringify(l):l)}return R(r.name,t)})}import{untrack as I}from"@firsthandjs/core";var w=class extends Error{constructor(r,t,a){super(`HTTP ${String(r)} for ${t}`);this.status=r;this.url=t;this.body=a;this.name="FirsthandHttpError"}status;url;body};function oe(e,n,r){let t=/^[a-z]+:\/\//i.test(n)?n:`${e.baseUrl??""}${n}`,{json:a,cacheKey:s,...l}=r,o={...e.init,...l},i=new Headers(typeof e.headers=="function"?I(e.headers):e.headers);for(let[d,u]of new Headers(r.headers??{}))i.set(d,u);return a!==void 0&&(o.body=JSON.stringify(a),i.has("content-type")||i.set("content-type","application/json")),o.headers=i,[t,o]}async function F(e,n,r,t){let s=await(e.fetch??globalThis.fetch)(n,{...r,signal:t.signal}),l=await s.text(),o=l===""?void 0:JSON.parse(l);if(!s.ok)throw new w(s.status,n,o);return o}function j(e={}){let n=e.cache===void 0||e.cache===!1?void 0:"read"in e.cache?e.cache:O(e.cache),r={cache:n,request:(t,a={})=>async s=>{let[l,o]=oe(e,t,a),i=(o.method??"GET").toUpperCase(),d=e.scope===void 0?o.headers.get("authorization")??"":I(e.scope),u=typeof a.cacheKey=="string"?a.cacheKey:i==="GET"||i==="HEAD"?`${i} ${l}`:void 0,f=u===void 0?void 0:`${d}\0${u}`;return n===void 0||a.cacheKey===!1||f===void 0||s.mutating===!0?await F(e,l,o,s):await n.read(f,c=>F(e,l,o,c))(s)},get:(t,a={})=>r.request(t,a),post:(t,a={})=>r.request(t,{method:"POST",...a}),put:(t,a={})=>r.request(t,{method:"PUT",...a}),patch:(t,a={})=>r.request(t,{method:"PATCH",...a}),remove:(t,a={})=>r.request(t,{method:"DELETE",...a}),with:t=>j({...e,...t,cache:t.cache??n??!1})};return r}export{P as DataContext,p as FirsthandDirectiveError,w as FirsthandHttpError,m as anyTagMatches,O as createCacheClient,A as createData,j as createFetchClient,K as fromObservable,B as fromPromise,re as parseGraphQL,ae as resolveTags,k as stableKey,R as tag,L as tagMatches,G as useAction,h as useData,Q as useInvalidate,V as useResource};
1
+ import{createContext as z,effect as N,onCleanup as D,untrack as _,useContext as M}from"@firsthandjs/core";import{batch as S,signal as b}from"@firsthandjs/core";var H=Object.freeze({});function R(e,n=H){return{name:e,vars:n}}function L(e,n){if(e.name!==n.name)return!1;for(let r of Object.keys(e.vars))if(!Object.is(e.vars[r],n.vars[r]))return!1;return!0}function y(e,n){for(let r of e)for(let t of n)if(L(r,t))return!0;return!1}function A(e={}){let n=new Set,r=e.remember??6e4,t=[],a=()=>Date.now();return{storage:e.storage,missed:(s,l)=>{if(r===0||t.length===0)return!1;let o=a()-r;return t=t.filter(i=>i.at>=o),t.some(i=>i.at>s.answeredAt&&y(i.patterns,l))},settled:s=>{t.length!==0&&(t=t.filter(l=>!y(l.patterns,s)))},hold:s=>(n.add(s),()=>n.delete(s)),invalidate:async(...s)=>{let l=[];for(let o of e.caches??[])o.forgetTagged(s);r>0&&t.push({patterns:s,at:a()});for(let o of[...n])o.controller!==null&&o.pending.push(...s),y(s,o.tags)&&(o.name,o.tags,l.push(o.run(!0)));await Promise.all(l)},clear:()=>{t=[];for(let s of[...n])s.controller?.abort(),n.delete(s);try{e.storage?.clear?.()}catch{}},get size(){return n.size}}}function x(e,n){return{data:b(void 0),error:b(void 0),status:b("idle"),loading:b(!1),tags:[],controller:null,pending:[],superseded:!1,disposed:!1,answeredAt:0,name:n}}function m(e,n){e.answeredAt=Date.now(),S(()=>{e.data.value=n,e.error.value=void 0,e.status.value="success",e.loading.value=!1})}function v(e,n){S(()=>{e.error.value=n,e.status.value="error",e.loading.value=!1})}function C(e,n){return{data:e.data,error:e.error,status:e.status,loading:e.loading,reload:()=>e.run(!0),dispose:()=>{e.disposed=!0,e.controller?.abort(),n()}}}var P=z();function h(){return M(P).value}function Q(){let e=h();return(...n)=>e.invalidate(...n)}function V(e,n={}){let r=h(),t=x(r,n.persist),a=r.hold(t);n.persist,t.run=o=>{if(t.disposed)return Promise.resolve(void 0);t.controller?.abort();let i=new AbortController;t.controller=i,t.pending=[],t.superseded=!1,t.loading.value=!0,t.data.peek()===void 0&&(t.status.value="loading");let d=o,u=!1,f=(...c)=>{t.tags=c,!d&&r.missed(t,c)&&(d=!0,u&&(t.superseded=!0)),t.pending.length>0&&y(t.pending,c)&&(t.superseded=!0)},g={signal:i.signal,get force(){return u=!0,d},get declared(){return t.tags},tags:f},T={signal:i.signal,get force(){return u=!0,d},request:g,tags:f};return e(T).then(async c=>{if(!(i.signal.aborted||t.disposed)){if(t.controller=null,m(t,c),t.superseded||r.settled(t.tags),n.persist!==void 0)try{r.storage?.write?.(n.persist,c)}catch{}return t.superseded?(t.superseded=!1,t.run(!0)):c}}).catch(c=>{i.signal.aborted||t.disposed||(t.controller=null,v(t,c))})};let s=n.persist,l=r.storage;return s!==void 0&&l?.read!==void 0&&(async()=>{try{let o=await l.read?.(s);o!==void 0&&t.data.peek()===void 0&&!t.disposed&&(m(t,o),t.loading.value=!0)}catch{}})(),N(()=>{t.run(!1)}),D(()=>{t.disposed=!0,t.controller?.abort(),n.persist,t.tags,a()}),C(t,a)}function G(e){let n=h(),r=x(n,void 0),t=null;return D(()=>{r.disposed=!0,t?.abort()}),{data:r.data,error:r.error,status:r.status,running:r.loading,run:async a=>{t?.abort(),t=new AbortController;let s=t,l=[];r.loading.value=!0,r.status.value="loading";try{let o=(...d)=>{l=d},i=await _(()=>e(a,{signal:s.signal,invalidates:o,request:{signal:s.signal,force:!0,mutating:!0,tags:o}}));return s.signal.aborted||r.disposed?void 0:(m(r,i),l.length>0&&await n.invalidate(...l),i)}catch(o){if(s.signal.aborted||r.disposed)return;v(r,o);return}}}}function K(e,n={}){let r=h(),t=x(r,void 0),a=r.hold(t);t.run=()=>n.reload===void 0?Promise.resolve(void 0):U(n.reload()),t.loading.value=!0,t.status.value="loading";let s=e.subscribe({next:o=>{m(t,o)},error:o=>{v(t,o)}}),l=typeof s=="function"?s:()=>{s.unsubscribe()};return D(()=>{t.disposed=!0,l(),a()}),C(t,()=>{l(),a()})}function B(e){return V(()=>e())}async function U(e){await e}function k(e){return e===void 0?"undefined":e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(k).join(",")}]`:e instanceof Date?e.toISOString():`{${Object.entries(e).filter(([,r])=>r!==void 0).sort(([r],[t])=>r<t?-1:1).map(([r,t])=>`${r}:${k(t)}`).join(",")}}`}function O(e={}){let n=e.ttl??0,r=e.max??100,t=e.now??(()=>Date.now()),a=new Map,s=o=>{a.get(o)?.controller?.abort(),a.delete(o)},l=(o,i)=>{if(a.delete(o),a.set(o,i),a.size>r)for(let d of a.keys()){s(d);break}};return{get size(){return a.size},peek:o=>{let i=a.get(o);if(!(i===void 0||i.expires<=t()))return i.value},write:(o,i)=>{l(o,{value:i,tags:[],expires:n===0?1/0:t()+n,inflight:null,controller:null,waiting:0})},forget:o=>{if(o===void 0){for(let i of[...a.keys()])s(i);return}s(o)},forgetTagged:o=>{for(let[i,d]of[...a])d.tags.length>0&&y(o,d.tags)&&s(i)},read:(o,i)=>async d=>{if(d.mutating===!0)return await i(d);let u=a.get(o);if(d.force)s(o);else if(u!==void 0){if(u.inflight!==null)return await $(u,d);if(u.expires>t())return l(o,u),u.value;a.delete(o)}let f=new AbortController,g={value:void 0,tags:d.declared??[],expires:0,inflight:null,controller:f,waiting:0},T=i({signal:f.signal,force:d.force}).then(c=>(a.get(o)===g&&(n===0?a.delete(o):(g.value=c,g.expires=t()+n,g.inflight=null,g.controller=null)),c)).catch(c=>{throw a.get(o)===g&&a.delete(o),c});return g.inflight=T,l(o,g),await $(g,d)}}}async function $(e,n){e.waiting+=1;let r=()=>{e.waiting<=1&&e.inflight!==null&&e.controller?.abort()};n.signal.addEventListener("abort",r,{once:!0});try{return await e.inflight}finally{n.signal.removeEventListener("abort",r),e.waiting-=1}}var Z=/^@(tag|invalidates)\b/,W=/\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/,E=/^[_A-Za-z][_0-9A-Za-z]*/,p=class extends Error{constructor(n){super(n),this.name="FirsthandDirectiveError"}};function q(e,n){if(e.startsWith('"""',n)){let t=e.indexOf('"""',n+3);return t===-1?e.length:t+3}let r=n+1;for(;r<e.length&&e[r]!=='"';)r+=e[r]==="\\"?2:1;return r+1}function X(e,n){let r=0,t=n;for(;t<e.length;){let a=e[t];if(a==='"'){t=q(e,t);continue}if(a==="("||a==="["||a==="{")r++;else if((a===")"||a==="]"||a==="}")&&(r--,r===0))return t+1;t++}throw new p(`unclosed arguments in ${e.slice(n,n+40)}`)}function Y(e,n){try{return JSON.parse(e)}catch{throw new p(`@${n}: ${e} is not a valid string`)}}function ee(e,n){let r={},t=0,a=()=>{for(;t<e.length&&/[\s,]/.test(e[t]);)t++};for(a();t<e.length;){let s=E.exec(e.slice(t));if(s===null)throw new p(`@${n}: expected an argument name at "${e.slice(t)}"`);if(t+=s[0].length,a(),e[t]!==":")throw new p(`@${n}: argument ${s[0]} has no value`);t++,a();let l=te(e,n,t);r[s[0]]=l.value,t=l.next,a()}return r}function te(e,n,r){let t=e[r];if(t==="$"){let i=E.exec(e.slice(r+1));if(i===null)throw new p(`@${n}: expected a variable name after $`);return{value:{variable:i[0]},next:r+1+i[0].length}}if(t==='"'){let i=q(e,r),d=e.slice(r,i);return{value:{literal:d.startsWith('"""')?d.slice(3,-3).trim():Y(d,n)},next:i}}if(t==="["||t==="{")throw new p(`@${n}: a tag variable must be a scalar, not a list or object`);let a=/^[^\s,)]+/.exec(e.slice(r));if(a===null)throw new p(`@${n}: expected a value`);let s=a[0],l=r+s.length;if(s==="true"||s==="false")return{value:{literal:s==="true"},next:l};if(s==="null")return{value:{literal:null},next:l};let o=Number(s);return{value:{literal:Number.isNaN(o)?s:o},next:l}}function ne(e){let n=[],r=[],t="",a=0,s=0;for(;a<e.length;){let l=e[a];if(l==='"'){a=q(e,a);continue}if(l==="#"){let c=e.indexOf(`
2
+ `,a);a=c===-1?e.length:c;continue}if(l!=="@"){a++;continue}let o=Z.exec(e.slice(a));if(o===null){a++;continue}let i=a+o[0].length,d="",u=i;for(;u<e.length&&/\s/.test(e[u]);)u++;if(e[u]==="("){let c=X(e,u);d=e.slice(u+1,c-1),i=c}let f=ee(d,o[1]),g=f.name;if(g===void 0||!("literal"in g)||typeof g.literal!="string")throw new p(`@${o[1]} needs a literal name, as in @${o[1]}(name: "user", id: $id)`);delete f.name,(o[1]==="tag"?n:r).push({name:g.literal,vars:f});let T=a;for(;T>s&&/\s/.test(e[T-1]);)T--;t+=e.slice(s,T),s=i,a=i}return{tags:n,invalidates:r,stripped:t+e.slice(s)}}function re(e){let{tags:n,invalidates:r,stripped:t}=ne(e),a=W.exec(t.replace(/#[^\n]*/g,""));return{source:t,operation:a?.[2]??"",kind:a?.[1]??"query",tags:n,invalidates:r}}function ae(e,n){return e.map(r=>{let t={};for(let[a,s]of Object.entries(r.vars)){if("literal"in s){t[a]=s.literal;continue}let l=n[s.variable];l!=null&&(t[a]=typeof l=="object"?JSON.stringify(l):l)}return R(r.name,t)})}import{untrack as I}from"@firsthandjs/core";var w=class extends Error{constructor(r,t,a){super(`HTTP ${String(r)} for ${t}`);this.status=r;this.url=t;this.body=a;this.name="FirsthandHttpError"}status;url;body};function oe(e,n,r){let t=/^[a-z]+:\/\//i.test(n)?n:`${e.baseUrl??""}${n}`,{json:a,cacheKey:s,...l}=r,o={...e.init,...l},i=new Headers(typeof e.headers=="function"?I(e.headers):e.headers);for(let[d,u]of new Headers(r.headers??{}))i.set(d,u);return a!==void 0&&(o.body=JSON.stringify(a),i.has("content-type")||i.set("content-type","application/json")),o.headers=i,[t,o]}async function F(e,n,r,t){let s=await(e.fetch??globalThis.fetch)(n,{...r,signal:t.signal}),l=await s.text(),o=l===""?void 0:JSON.parse(l);if(!s.ok)throw new w(s.status,n,o);return o}function j(e={}){let n=e.cache===void 0||e.cache===!1?void 0:"read"in e.cache?e.cache:O(e.cache),r={cache:n,request:(t,a={})=>async s=>{let[l,o]=oe(e,t,a),i=(o.method??"GET").toUpperCase(),d=e.scope===void 0?o.headers.get("authorization")??"":I(e.scope),u=typeof a.cacheKey=="string"?a.cacheKey:i==="GET"||i==="HEAD"?`${i} ${l}`:void 0,f=u===void 0?void 0:`${d}\0${u}`;return n===void 0||a.cacheKey===!1||f===void 0||s.mutating===!0?await F(e,l,o,s):await n.read(f,g=>F(e,l,o,g))(s)},get:(t,a={})=>r.request(t,a),post:(t,a={})=>r.request(t,{method:"POST",...a}),put:(t,a={})=>r.request(t,{method:"PUT",...a}),patch:(t,a={})=>r.request(t,{method:"PATCH",...a}),remove:(t,a={})=>r.request(t,{method:"DELETE",...a}),with:t=>j({...e,...t,cache:t.cache??n??!1})};return r}export{P as DataContext,p as FirsthandDirectiveError,w as FirsthandHttpError,y as anyTagMatches,O as createCacheClient,A as createData,j as createFetchClient,K as fromObservable,B as fromPromise,re as parseGraphQL,ae as resolveTags,k as stableKey,R as tag,L as tagMatches,G as useAction,h as useData,Q as useInvalidate,V as useResource};
@@ -5,7 +5,7 @@ export declare const DataContext: import("@firsthandjs/core").Context<DataStore>
5
5
  export declare function useData(): DataStore;
6
6
  /** Invalidates through the store this component is under. */
7
7
  export declare function useInvalidate(): (...patterns: Tag[]) => Promise<void>;
8
- export interface ResourceOptions {
8
+ export type ResourceOptions = {
9
9
  /**
10
10
  * A name to keep this resource's last value under, between visits.
11
11
  *
@@ -15,7 +15,7 @@ export interface ResourceOptions {
15
15
  * naming them the same asks for.
16
16
  */
17
17
  readonly persist?: string;
18
- }
18
+ };
19
19
  /**
20
20
  * Loads something, and keeps it as reactive state.
21
21
  *
@@ -31,14 +31,14 @@ export interface ResourceOptions {
31
31
  * if that is not what you want.
32
32
  */
33
33
  export declare function useResource<T>(load: (context: LoadContext) => Promise<T>, options?: ResourceOptions): Resource<T>;
34
- export interface Action<I, R> {
34
+ export type Action<I, R> = {
35
35
  readonly data: Resource<R>['data'];
36
36
  readonly error: Resource<R>['error'];
37
37
  readonly status: Resource<R>['status'];
38
38
  readonly running: Resource<R>['loading'];
39
39
  /** Runs it. Never rejects: failure is reported through `error`. */
40
40
  run(input: I): Promise<R | undefined>;
41
- }
41
+ };
42
42
  /**
43
43
  * Changes something, and says what it changed.
44
44
  *
@@ -51,18 +51,18 @@ export interface Action<I, R> {
51
51
  * ```
52
52
  */
53
53
  export declare function useAction<I, R>(run: (input: I, context: ActionContext) => Promise<R>): Action<I, R>;
54
- export interface ObservableLike<T> {
54
+ export type ObservableLike<T> = {
55
55
  subscribe(observer: {
56
56
  next?: (value: T) => void;
57
57
  error?: (error: unknown) => void;
58
58
  }): {
59
59
  unsubscribe: () => void;
60
60
  } | (() => void);
61
- }
62
- export interface BridgeOptions {
61
+ };
62
+ export type BridgeOptions = {
63
63
  /** What `reload()` should do, if the source can do it. */
64
64
  readonly reload?: () => Promise<unknown>;
65
- }
65
+ };
66
66
  /**
67
67
  * A source that pushes, as a resource.
68
68
  *
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAKL,KAAK,aAAa,EAElB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAGpD,eAAO,MAAM,WAAW,gDAA6B,CAAC;AAEtD,wBAAgB,OAAO,IAAI,SAAS,CAEnC;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,OAAO,GAAE,eAAoB,GAC5B,QAAQ,CAAC,CAAC,CAAC,CAqIb;AAED,MAAM,WAAW,MAAM,CAAC,CAAC,EAAE,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzC,mEAAmE;IACnE,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CACvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAC5B,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GACpD,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CA+Dd;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,SAAS,CAAC,QAAQ,EAAE;QAClB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;KAClC,GAAG;QAAE,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,OAAO,GAAE,aAAkB,GAC1B,QAAQ,CAAC,CAAC,CAAC,CAoCb;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAErE;AAQD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAKL,KAAK,aAAa,EAElB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAGpD,eAAO,MAAM,WAAW,gDAA6B,CAAC;AAEtD,wBAAgB,OAAO,IAAI,SAAS,CAEnC;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,OAAO,GAAE,eAAoB,GAC5B,QAAQ,CAAC,CAAC,CAAC,CA2Jb;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzC,mEAAmE;IACnE,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CACvC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAC5B,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GACpD,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CA+Dd;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,SAAS,CAAC,QAAQ,EAAE;QAClB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;KAClC,GAAG;QAAE,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,OAAO,GAAE,aAAkB,GAC1B,QAAQ,CAAC,CAAC,CAAC,CAoCb;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAErE;AAQD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC"}
package/dist/store.d.ts CHANGED
@@ -29,7 +29,7 @@ export type Status = 'idle' | 'loading' | 'success' | 'error';
29
29
  * memory would make that invalidation silently pointless. Every client in this
30
30
  * project takes this object and honours both.
31
31
  */
32
- export interface DataRequest {
32
+ export type DataRequest = {
33
33
  /** Aborted when this run is superseded, or the resource goes away. */
34
34
  readonly signal: AbortSignal;
35
35
  /**
@@ -74,7 +74,7 @@ export interface DataRequest {
74
74
  * nothing to say.
75
75
  */
76
76
  readonly tags?: (...tags: Tag[]) => void;
77
- }
77
+ };
78
78
  /** What a loader is given. */
79
79
  export interface LoadContext extends DataRequest {
80
80
  /**
@@ -90,7 +90,7 @@ export interface LoadContext extends DataRequest {
90
90
  readonly request: DataRequest;
91
91
  }
92
92
  /** What an action is given. */
93
- export interface ActionContext {
93
+ export type ActionContext = {
94
94
  readonly signal: AbortSignal;
95
95
  /**
96
96
  * Declares what this action changed, so resources carrying a matching tag
@@ -103,10 +103,10 @@ export interface ActionContext {
103
103
  * changes something, so nothing it sends may be answered from a cache.
104
104
  */
105
105
  readonly request: DataRequest;
106
- }
106
+ };
107
107
  /** What a client hands back: a request waiting for the context to send it. */
108
108
  export type Loader<T> = (request: DataRequest) => Promise<T>;
109
- export interface Resource<T> {
109
+ export type Resource<T> = {
110
110
  readonly data: ReadonlyCell<T | undefined>;
111
111
  readonly error: ReadonlyCell<unknown>;
112
112
  readonly status: ReadonlyCell<Status>;
@@ -116,9 +116,9 @@ export interface Resource<T> {
116
116
  reload(): Promise<T | undefined>;
117
117
  /** Stops this resource and aborts anything in flight. */
118
118
  dispose(): void;
119
- }
119
+ };
120
120
  /** Somewhere to keep results between visits. See {@link DataOptions}. */
121
- export interface Storage {
121
+ export type Storage = {
122
122
  /**
123
123
  * What was kept under this name, if anything. May return a promise; a value
124
124
  * that arrives after the loader has answered is dropped.
@@ -128,8 +128,8 @@ export interface Storage {
128
128
  write?(name: string, data: unknown): void;
129
129
  /** Called by `store.clear()`, which is what a sign-out calls. */
130
130
  clear?(): void;
131
- }
132
- export interface DataOptions {
131
+ };
132
+ export type DataOptions = {
133
133
  /** Where named resources are kept between visits. */
134
134
  readonly storage?: Storage;
135
135
  /**
@@ -163,17 +163,17 @@ export interface DataOptions {
163
163
  * and short enough to be forgotten.
164
164
  */
165
165
  readonly remember?: number;
166
- }
166
+ };
167
167
  /**
168
168
  * The part of a cache a store touches: what to forget, and nothing else.
169
169
  *
170
170
  * Declared structurally so that the store depends on no cache in particular —
171
171
  * ours satisfies it, and so does thirty lines of somebody's own.
172
172
  */
173
- export interface Forgetful {
173
+ export type Forgetful = {
174
174
  forgetTagged(patterns: readonly Tag[]): void;
175
- }
176
- interface Held<T = unknown> {
175
+ };
176
+ type Held<T = unknown> = {
177
177
  data: Signal<T | undefined>;
178
178
  error: Signal<unknown>;
179
179
  status: Signal<Status>;
@@ -190,8 +190,8 @@ interface Held<T = unknown> {
190
190
  /** When this resource last carried an answer. 0 until it has one. */
191
191
  answeredAt: number;
192
192
  run: (force: boolean) => Promise<T | undefined>;
193
- }
194
- export interface DataStore {
193
+ };
194
+ export type DataStore = {
195
195
  /** Everything carrying a matching tag runs again, with `force`. */
196
196
  invalidate(...patterns: Tag[]): Promise<void>;
197
197
  /** Forgets every resource and empties the storage. */
@@ -212,7 +212,7 @@ export interface DataStore {
212
212
  settled(tags: readonly Tag[]): void;
213
213
  /** Internal: the storage this store was given. */
214
214
  readonly storage: Storage | undefined;
215
- }
215
+ };
216
216
  export declare function createData(options?: DataOptions): DataStore;
217
217
  /**
218
218
  * Runs one resource. Shared by `useResource` and the observable bridges, so
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/tags.d.ts CHANGED
@@ -23,10 +23,10 @@ export type TagVars = Readonly<Record<string, string | number | boolean | null>>
23
23
  * identity.
24
24
  */
25
25
  export type Variables = Readonly<Record<string, unknown>>;
26
- export interface Tag {
26
+ export type Tag = {
27
27
  readonly name: string;
28
28
  readonly vars: TagVars;
29
- }
29
+ };
30
30
  /** Builds a tag. `tag('user', { id })` is the usual shape. */
31
31
  export declare function tag(name: string, vars?: TagVars): Tag;
32
32
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,uEAAuE;AACvE,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;AAEjF;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1D,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAID,8DAA8D;AAC9D,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAiB,GAAG,GAAG,CAE9D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAUhE;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,GAAG,OAAO,CASrF"}
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,uEAAuE;AACvE,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;AAEjF;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1D,MAAM,MAAM,GAAG,GAAG;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB,CAAC;AAIF,8DAA8D;AAC9D,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAiB,GAAG,GAAG,CAE9D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAUhE;AAED,sDAAsD;AACtD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,GAAG,OAAO,CASrF"}
package/dist/vite.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- interface TransformResult {
1
+ type TransformResult = {
2
2
  code: string;
3
3
  map: null;
4
- }
5
- export interface GraphQLPlugin {
4
+ };
5
+ export type GraphQLPlugin = {
6
6
  name: string;
7
7
  enforce: 'pre';
8
8
  transform(this: unknown, code: string, id: string): TransformResult | null;
9
- }
9
+ };
10
10
  /**
11
11
  * Inlines `#import "./fragments.gql"`, the convention every GraphQL loader
12
12
  * uses.
@@ -1 +1 @@
1
- {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAgCA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,CAAC;IACf,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;CAC5E;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,GAAG,CAAC,MAAM,CAAmB,EACnC,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAA6C,GACpE,MAAM,CAWR;AAED,wBAAgB,OAAO,IAAI,aAAa,CAgBvC"}
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAgCA,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,CAAC;IACf,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;CAC5E,CAAC;AAKF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,GAAG,CAAC,MAAM,CAAmB,EACnC,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAA6C,GACpE,MAAM,CAWR;AAED,wBAAgB,OAAO,IAAI,aAAa,CAgBvC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firsthandjs/data",
3
- "version": "0.7.0",
3
+ "version": "0.7.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.7.0",
32
- "@firsthandjs/dom": "0.7.0"
31
+ "@firsthandjs/core": "0.7.1",
32
+ "@firsthandjs/dom": "0.7.1"
33
33
  },
34
34
  "engines": {
35
35
  "node": ">=20.11.0"