houdini 1.0.0-next.1 → 1.0.0-next.3

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.
Files changed (224) hide show
  1. package/build/cmd/generate.d.ts +0 -1
  2. package/build/cmd-cjs/index.js +1400 -2836
  3. package/build/cmd-esm/index.js +1400 -2836
  4. package/build/codegen/generators/artifacts/fieldKey.d.ts +1 -1
  5. package/build/codegen/generators/artifacts/index.d.ts +1 -1
  6. package/build/codegen/generators/artifacts/indexFile.d.ts +1 -1
  7. package/build/codegen/generators/artifacts/inputs.d.ts +2 -2
  8. package/build/codegen/generators/artifacts/operations.d.ts +2 -2
  9. package/build/codegen/generators/artifacts/selection.d.ts +1 -1
  10. package/build/codegen/generators/artifacts/utils.d.ts +1 -1
  11. package/build/codegen/generators/definitions/enums.d.ts +1 -1
  12. package/build/codegen/generators/definitions/index.d.ts +1 -1
  13. package/build/codegen/generators/indexFile/index.d.ts +1 -1
  14. package/build/codegen/generators/persistedQueries/index.d.ts +1 -1
  15. package/build/codegen/generators/runtime/graphqlFunction.d.ts +2 -0
  16. package/build/codegen/generators/runtime/index.d.ts +1 -1
  17. package/build/codegen/generators/runtime/injectPlugins.d.ts +7 -0
  18. package/build/codegen/generators/runtime/pluginIndex.d.ts +5 -0
  19. package/build/codegen/generators/typescript/addReferencedInputTypes.d.ts +1 -1
  20. package/build/codegen/generators/typescript/documentTypes.d.ts +2 -0
  21. package/build/codegen/generators/typescript/{imperativeCache.d.ts → imperativeTypeDef.d.ts} +1 -1
  22. package/build/codegen/generators/typescript/index.d.ts +1 -1
  23. package/build/codegen/generators/typescript/inlineType.d.ts +1 -1
  24. package/build/codegen/generators/typescript/typeReference.d.ts +1 -1
  25. package/build/codegen/generators/typescript/types.d.ts +1 -1
  26. package/build/codegen/index.d.ts +1 -1
  27. package/build/codegen/transforms/addID.d.ts +1 -1
  28. package/build/codegen/transforms/composeQueries.d.ts +2 -2
  29. package/build/codegen/transforms/fragmentVariables.d.ts +3 -2
  30. package/build/codegen/transforms/list.d.ts +1 -1
  31. package/build/codegen/transforms/paginate.d.ts +1 -1
  32. package/build/codegen/transforms/schema.d.ts +1 -1
  33. package/build/codegen/transforms/typename.d.ts +1 -1
  34. package/build/codegen/utils/commonjs.d.ts +2 -0
  35. package/build/codegen/utils/flattenSelections.d.ts +2 -2
  36. package/build/codegen/utils/moduleExport.d.ts +1 -1
  37. package/build/codegen/utils/objectIdentificationSelection.d.ts +1 -1
  38. package/build/codegen/validators/noIDAlias.d.ts +1 -1
  39. package/build/codegen/validators/typeCheck.d.ts +1 -1
  40. package/build/codegen-cjs/index.js +1320 -2779
  41. package/build/codegen-esm/index.js +1320 -2779
  42. package/build/lib/config.d.ts +9 -4
  43. package/build/lib/fs.d.ts +1 -1
  44. package/build/lib/graphql.d.ts +1 -1
  45. package/build/lib/imports.d.ts +1 -1
  46. package/build/lib/types.d.ts +3 -3
  47. package/build/lib/walk.d.ts +8 -5
  48. package/build/lib-cjs/index.js +155 -1856
  49. package/build/lib-esm/index.js +155 -1856
  50. package/build/runtime/cache/cache.d.ts +10 -8
  51. package/build/runtime/cache/gc.d.ts +1 -1
  52. package/build/runtime/cache/lists.d.ts +3 -2
  53. package/build/runtime/cache/schema.d.ts +2 -2
  54. package/build/runtime/cache/stuff.d.ts +2 -2
  55. package/build/runtime/cache/subscription.d.ts +19 -11
  56. package/build/runtime/client/documentStore.d.ts +87 -0
  57. package/build/runtime/client/index.d.ts +25 -0
  58. package/build/runtime/client/plugins/cache.d.ts +8 -0
  59. package/build/runtime/client/plugins/fetch.d.ts +37 -0
  60. package/build/runtime/client/plugins/fetchParams.d.ts +9 -0
  61. package/build/runtime/client/plugins/index.d.ts +7 -0
  62. package/build/runtime/client/plugins/injectedPlugins.d.ts +3 -0
  63. package/build/runtime/client/plugins/mutation.d.ts +1 -0
  64. package/build/runtime/client/plugins/query.d.ts +2 -0
  65. package/build/runtime/client/plugins/subscription.d.ts +18 -0
  66. package/build/runtime/client/plugins/throwOnError.d.ts +7 -0
  67. package/build/runtime/client/utils/documentPlugins.d.ts +3 -0
  68. package/build/runtime/client/utils/index.d.ts +1 -0
  69. package/build/runtime/generated.d.ts +1 -0
  70. package/build/runtime/imports/config.d.ts +3 -0
  71. package/build/runtime/index.d.ts +3 -2
  72. package/build/runtime/lib/config.d.ts +26 -25
  73. package/build/runtime/lib/index.d.ts +1 -2
  74. package/build/runtime/lib/scalars.d.ts +6 -5
  75. package/build/runtime/lib/selection.d.ts +1 -1
  76. package/build/runtime/lib/store.d.ts +19 -0
  77. package/build/runtime/lib/types.d.ts +22 -9
  78. package/build/runtime/public/cache.d.ts +20 -7
  79. package/build/runtime/public/list.d.ts +2 -2
  80. package/build/runtime/public/record.d.ts +18 -18
  81. package/build/runtime/public/tests/test.d.ts +44 -1
  82. package/build/runtime/public/types.d.ts +8 -0
  83. package/build/runtime-cjs/cache/cache.d.ts +10 -8
  84. package/build/runtime-cjs/cache/cache.js +5 -11
  85. package/build/runtime-cjs/cache/gc.d.ts +1 -1
  86. package/build/runtime-cjs/cache/lists.d.ts +3 -2
  87. package/build/runtime-cjs/cache/lists.js +5 -2
  88. package/build/runtime-cjs/cache/schema.d.ts +2 -2
  89. package/build/runtime-cjs/cache/stuff.d.ts +2 -2
  90. package/build/runtime-cjs/cache/subscription.d.ts +19 -11
  91. package/build/runtime-cjs/cache/subscription.js +95 -56
  92. package/build/runtime-cjs/client/documentStore.d.ts +87 -0
  93. package/build/runtime-cjs/client/documentStore.js +360 -0
  94. package/build/runtime-cjs/client/index.d.ts +25 -0
  95. package/build/runtime-cjs/client/index.js +87 -0
  96. package/build/runtime-cjs/client/plugins/cache.d.ts +8 -0
  97. package/build/runtime-cjs/client/plugins/cache.js +99 -0
  98. package/build/runtime-cjs/client/plugins/fetch.d.ts +37 -0
  99. package/build/runtime-cjs/{lib/networkUtils.js → client/plugins/fetch.js} +95 -3
  100. package/build/runtime-cjs/client/plugins/fetchParams.d.ts +9 -0
  101. package/build/runtime-cjs/client/plugins/fetchParams.js +40 -0
  102. package/build/runtime-cjs/client/plugins/index.d.ts +7 -0
  103. package/build/runtime-cjs/client/plugins/index.js +24 -0
  104. package/build/runtime-cjs/client/plugins/injectedPlugins.d.ts +3 -0
  105. package/build/runtime-cjs/{lib/errors.js → client/plugins/injectedPlugins.js} +7 -15
  106. package/build/runtime-cjs/client/plugins/mutation.d.ts +1 -0
  107. package/build/runtime-cjs/client/plugins/mutation.js +86 -0
  108. package/build/runtime-cjs/client/plugins/query.d.ts +2 -0
  109. package/build/runtime-cjs/client/plugins/query.js +83 -0
  110. package/build/runtime-cjs/client/plugins/subscription.d.ts +18 -0
  111. package/build/runtime-cjs/client/plugins/subscription.js +98 -0
  112. package/build/runtime-cjs/client/plugins/throwOnError.d.ts +7 -0
  113. package/build/runtime-cjs/client/plugins/throwOnError.js +47 -0
  114. package/build/runtime-cjs/client/utils/documentPlugins.d.ts +3 -0
  115. package/build/runtime-cjs/client/utils/documentPlugins.js +56 -0
  116. package/build/runtime-cjs/client/utils/index.d.ts +1 -0
  117. package/build/runtime-cjs/client/utils/index.js +18 -0
  118. package/build/runtime-cjs/generated.d.ts +1 -0
  119. package/build/runtime-cjs/imports/config.d.ts +3 -0
  120. package/build/runtime-cjs/imports/config.js +26 -0
  121. package/build/runtime-cjs/index.d.ts +3 -2
  122. package/build/runtime-cjs/index.js +1 -0
  123. package/build/runtime-cjs/lib/config.d.ts +26 -25
  124. package/build/runtime-cjs/lib/config.js +5 -4
  125. package/build/runtime-cjs/lib/index.d.ts +1 -2
  126. package/build/runtime-cjs/lib/index.js +1 -2
  127. package/build/runtime-cjs/lib/scalars.d.ts +6 -5
  128. package/build/runtime-cjs/lib/scalars.js +20 -24
  129. package/build/runtime-cjs/lib/selection.d.ts +1 -1
  130. package/build/runtime-cjs/lib/store.d.ts +19 -0
  131. package/build/runtime-cjs/lib/store.js +81 -0
  132. package/build/runtime-cjs/lib/types.d.ts +22 -9
  133. package/build/runtime-cjs/public/cache.d.ts +20 -7
  134. package/build/runtime-cjs/public/cache.js +29 -32
  135. package/build/runtime-cjs/public/list.d.ts +2 -2
  136. package/build/runtime-cjs/public/list.js +6 -28
  137. package/build/runtime-cjs/public/record.d.ts +18 -18
  138. package/build/runtime-cjs/public/record.js +23 -189
  139. package/build/runtime-cjs/public/tests/test.d.ts +44 -1
  140. package/build/runtime-cjs/public/tests/test.js +27 -2
  141. package/build/runtime-cjs/public/types.d.ts +8 -0
  142. package/build/runtime-esm/cache/cache.d.ts +10 -8
  143. package/build/runtime-esm/cache/cache.js +5 -11
  144. package/build/runtime-esm/cache/gc.d.ts +1 -1
  145. package/build/runtime-esm/cache/lists.d.ts +3 -2
  146. package/build/runtime-esm/cache/lists.js +5 -2
  147. package/build/runtime-esm/cache/schema.d.ts +2 -2
  148. package/build/runtime-esm/cache/stuff.d.ts +2 -2
  149. package/build/runtime-esm/cache/subscription.d.ts +19 -11
  150. package/build/runtime-esm/cache/subscription.js +95 -56
  151. package/build/runtime-esm/client/documentStore.d.ts +87 -0
  152. package/build/runtime-esm/client/documentStore.js +336 -0
  153. package/build/runtime-esm/client/index.d.ts +25 -0
  154. package/build/runtime-esm/client/index.js +58 -0
  155. package/build/runtime-esm/client/plugins/cache.d.ts +8 -0
  156. package/build/runtime-esm/client/plugins/cache.js +69 -0
  157. package/build/runtime-esm/client/plugins/fetch.d.ts +37 -0
  158. package/build/runtime-esm/client/plugins/fetch.js +151 -0
  159. package/build/runtime-esm/client/plugins/fetchParams.d.ts +9 -0
  160. package/build/runtime-esm/client/plugins/fetchParams.js +16 -0
  161. package/build/runtime-esm/client/plugins/index.d.ts +7 -0
  162. package/build/runtime-esm/client/plugins/index.js +7 -0
  163. package/build/runtime-esm/client/plugins/injectedPlugins.d.ts +3 -0
  164. package/build/runtime-esm/client/plugins/injectedPlugins.js +5 -0
  165. package/build/runtime-esm/client/plugins/mutation.d.ts +1 -0
  166. package/build/runtime-esm/client/plugins/mutation.js +56 -0
  167. package/build/runtime-esm/client/plugins/query.d.ts +2 -0
  168. package/build/runtime-esm/client/plugins/query.js +53 -0
  169. package/build/runtime-esm/client/plugins/subscription.d.ts +18 -0
  170. package/build/runtime-esm/client/plugins/subscription.js +74 -0
  171. package/build/runtime-esm/client/plugins/throwOnError.d.ts +7 -0
  172. package/build/runtime-esm/client/plugins/throwOnError.js +23 -0
  173. package/build/runtime-esm/client/utils/documentPlugins.d.ts +3 -0
  174. package/build/runtime-esm/client/utils/documentPlugins.js +32 -0
  175. package/build/runtime-esm/client/utils/index.d.ts +1 -0
  176. package/build/runtime-esm/client/utils/index.js +1 -0
  177. package/build/runtime-esm/generated.d.ts +1 -0
  178. package/build/runtime-esm/imports/config.d.ts +3 -0
  179. package/build/runtime-esm/imports/config.js +4 -0
  180. package/build/runtime-esm/index.d.ts +3 -2
  181. package/build/runtime-esm/index.js +1 -0
  182. package/build/runtime-esm/lib/config.d.ts +26 -25
  183. package/build/runtime-esm/lib/config.js +5 -4
  184. package/build/runtime-esm/lib/index.d.ts +1 -2
  185. package/build/runtime-esm/lib/index.js +1 -2
  186. package/build/runtime-esm/lib/scalars.d.ts +6 -5
  187. package/build/runtime-esm/lib/scalars.js +20 -24
  188. package/build/runtime-esm/lib/selection.d.ts +1 -1
  189. package/build/runtime-esm/lib/store.d.ts +19 -0
  190. package/build/runtime-esm/lib/store.js +57 -0
  191. package/build/runtime-esm/lib/types.d.ts +22 -9
  192. package/build/runtime-esm/public/cache.d.ts +20 -7
  193. package/build/runtime-esm/public/cache.js +28 -30
  194. package/build/runtime-esm/public/list.d.ts +2 -2
  195. package/build/runtime-esm/public/list.js +6 -28
  196. package/build/runtime-esm/public/record.d.ts +18 -18
  197. package/build/runtime-esm/public/record.js +22 -185
  198. package/build/runtime-esm/public/tests/test.d.ts +44 -1
  199. package/build/runtime-esm/public/tests/test.js +26 -1
  200. package/build/runtime-esm/public/types.d.ts +8 -0
  201. package/build/test/index.d.ts +4 -3
  202. package/build/test-cjs/index.js +1334 -2766
  203. package/build/test-esm/index.js +1334 -2766
  204. package/build/vite/ast.d.ts +1 -1
  205. package/build/vite/houdini.d.ts +1 -1
  206. package/build/vite/imports.d.ts +3 -3
  207. package/build/vite/index.d.ts +1 -1
  208. package/build/vite/schema.d.ts +1 -1
  209. package/build/vite-cjs/index.js +1395 -2821
  210. package/build/vite-esm/index.js +1395 -2821
  211. package/package.json +1 -1
  212. package/build/runtime/lib/errors.d.ts +0 -3
  213. package/build/runtime/lib/network.d.ts +0 -79
  214. package/build/runtime/lib/networkUtils.d.ts +0 -8
  215. package/build/runtime-cjs/lib/errors.d.ts +0 -3
  216. package/build/runtime-cjs/lib/network.d.ts +0 -79
  217. package/build/runtime-cjs/lib/network.js +0 -200
  218. package/build/runtime-cjs/lib/networkUtils.d.ts +0 -8
  219. package/build/runtime-esm/lib/errors.d.ts +0 -3
  220. package/build/runtime-esm/lib/errors.js +0 -11
  221. package/build/runtime-esm/lib/network.d.ts +0 -79
  222. package/build/runtime-esm/lib/network.js +0 -170
  223. package/build/runtime-esm/lib/networkUtils.d.ts +0 -8
  224. package/build/runtime-esm/lib/networkUtils.js +0 -60
@@ -0,0 +1,87 @@
1
+ import type { HoudiniClient } from '.';
2
+ import type { Layer } from '../cache/storage';
3
+ import type { ConfigFile } from '../lib/config';
4
+ import { Writable } from '../lib/store';
5
+ import type { CachePolicy, DocumentArtifact, QueryResult, GraphQLObject, SubscriptionSpec } from '../lib/types';
6
+ export declare class DocumentStore<_Data extends GraphQLObject, _Input extends Record<string, any>> extends Writable<QueryResult<_Data, _Input>> {
7
+ #private;
8
+ constructor({ artifact, plugins, pipeline, client, cache, initialValue, fetching, }: {
9
+ artifact: DocumentArtifact;
10
+ plugins?: ClientPlugin[];
11
+ pipeline?: ClientPlugin[];
12
+ client: HoudiniClient;
13
+ cache?: boolean;
14
+ initialValue?: _Data | null;
15
+ fetching?: boolean;
16
+ });
17
+ send({ metadata, session, fetch, variables, policy, stuff, cacheParams, setup, }?: {
18
+ fetch?: Fetch;
19
+ variables?: Record<string, any> | null;
20
+ metadata?: App.Metadata | null;
21
+ session?: App.Session | null;
22
+ policy?: CachePolicy;
23
+ stuff?: Partial<App.Stuff>;
24
+ cacheParams?: ClientPluginContext['cacheParams'];
25
+ setup?: boolean;
26
+ }): Promise<QueryResult<_Data, _Input>>;
27
+ }
28
+ declare function marshalVariables<_Data extends GraphQLObject, _Input extends {}>(ctx: ClientPluginContext): Record<string, any>;
29
+ export type ClientPlugin = () => {
30
+ start?: ClientPluginEnterPhase;
31
+ beforeNetwork?: ClientPluginEnterPhase;
32
+ network?: ClientPluginEnterPhase;
33
+ afterNetwork?: ClientPluginExitPhase;
34
+ end?: ClientPluginExitPhase;
35
+ cleanup?(ctx: ClientPluginContext): void | Promise<void>;
36
+ catch?(ctx: ClientPluginContext, args: ClientPluginErrorHandlers): void | Promise<void>;
37
+ };
38
+ export type Fetch = typeof globalThis.fetch;
39
+ export type ClientPluginContext = {
40
+ config: ConfigFile;
41
+ text: string;
42
+ hash: string;
43
+ artifact: DocumentArtifact;
44
+ policy?: CachePolicy;
45
+ fetch?: Fetch;
46
+ variables?: Record<string, any>;
47
+ metadata?: App.Metadata | null;
48
+ session?: App.Session | null;
49
+ fetchParams?: RequestInit;
50
+ cacheParams?: {
51
+ layer?: Layer;
52
+ notifySubscribers?: SubscriptionSpec[];
53
+ forceNotify?: boolean;
54
+ disableWrite?: boolean;
55
+ disableRead?: boolean;
56
+ applyUpdates?: boolean;
57
+ };
58
+ stuff: App.Stuff;
59
+ };
60
+ type ClientPluginPhase<Handlers> = (ctx: ClientPluginContext, handlers: Handlers) => void | Promise<void>;
61
+ export type ClientPluginEnterPhase = ClientPluginPhase<ClientPluginEnterHandlers>;
62
+ export type ClientPluginExitPhase = ClientPluginPhase<ClientPluginExitHandlers>;
63
+ export type ClientPluginEnterHandlers = {
64
+ initialValue: QueryResult;
65
+ /** A reference to the houdini client to access any configuration values */
66
+ client: HoudiniClient;
67
+ /** Move onto the next step using the provided context. */
68
+ next(ctx: ClientPluginContext): void;
69
+ /** Terminate the current chain */
70
+ resolve(ctx: ClientPluginContext, data: QueryResult): void;
71
+ /** Update the stores state without resolving the promise */
72
+ updateState(updater: (old: QueryResult) => QueryResult): void;
73
+ /** Return true if the variables have changed */
74
+ variablesChanged: (ctx: ClientPluginContext) => boolean;
75
+ /** Returns the marshaled variables for the operation */
76
+ marshalVariables: typeof marshalVariables;
77
+ };
78
+ /** Exit handlers are the same as enter handles but don't need to resolve with a specific value */
79
+ export type ClientPluginExitHandlers = Omit<ClientPluginEnterHandlers, 'resolve'> & {
80
+ resolve: (ctx: ClientPluginContext, data?: QueryResult) => void;
81
+ value: QueryResult;
82
+ };
83
+ /** Exit handlers are the same as enter handles but don't need to resolve with a specific value */
84
+ export type ClientPluginErrorHandlers = ClientPluginEnterHandlers & {
85
+ error: unknown;
86
+ };
87
+ export {};
@@ -0,0 +1,360 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var documentStore_exports = {};
20
+ __export(documentStore_exports, {
21
+ DocumentStore: () => DocumentStore
22
+ });
23
+ module.exports = __toCommonJS(documentStore_exports);
24
+ var import_config = require("../lib/config");
25
+ var import_deepEquals = require("../lib/deepEquals");
26
+ var import_scalars = require("../lib/scalars");
27
+ var import_store = require("../lib/store");
28
+ var import_types = require("../lib/types");
29
+ var import_plugins = require("./plugins");
30
+ const steps = {
31
+ forward: ["start", "beforeNetwork", "network"],
32
+ backwards: ["end", "afterNetwork"]
33
+ };
34
+ class DocumentStore extends import_store.Writable {
35
+ #artifact;
36
+ #client;
37
+ #configFile;
38
+ #plugins;
39
+ #lastVariables;
40
+ #lastContext = null;
41
+ constructor({
42
+ artifact,
43
+ plugins,
44
+ pipeline,
45
+ client,
46
+ cache = true,
47
+ initialValue,
48
+ fetching
49
+ }) {
50
+ if (fetching === void 0) {
51
+ fetching = artifact.kind === import_types.ArtifactKind.Query;
52
+ }
53
+ const initialState = {
54
+ data: initialValue ?? null,
55
+ errors: null,
56
+ partial: false,
57
+ source: null,
58
+ fetching,
59
+ variables: null
60
+ };
61
+ super(initialState, () => {
62
+ return () => {
63
+ this.#lastVariables = null;
64
+ for (const plugin of this.#plugins) {
65
+ plugin.cleanup?.(this.#lastContext);
66
+ }
67
+ };
68
+ });
69
+ this.#artifact = artifact;
70
+ this.#client = client;
71
+ this.#lastVariables = null;
72
+ this.#configFile = (0, import_config.getCurrentConfig)();
73
+ this.#plugins = (pipeline ?? [
74
+ (0, import_plugins.cachePolicyPlugin)({
75
+ enabled: cache,
76
+ setFetching: (fetching2) => this.update((state) => ({ ...state, fetching: fetching2 }))
77
+ }),
78
+ ...plugins ?? []
79
+ ]).map((factory) => factory());
80
+ }
81
+ async send({
82
+ metadata,
83
+ session,
84
+ fetch = globalThis.fetch,
85
+ variables,
86
+ policy,
87
+ stuff,
88
+ cacheParams,
89
+ setup = false
90
+ } = {}) {
91
+ let context = new ClientPluginContextWrapper({
92
+ config: this.#configFile,
93
+ text: this.#artifact.raw,
94
+ hash: this.#artifact.hash,
95
+ policy: policy ?? this.#artifact.policy,
96
+ variables: {},
97
+ metadata,
98
+ session,
99
+ fetch,
100
+ stuff: {
101
+ inputs: {
102
+ changed: false,
103
+ init: false,
104
+ marshaled: {}
105
+ },
106
+ ...stuff
107
+ },
108
+ artifact: this.#artifact,
109
+ lastVariables: this.#lastVariables,
110
+ cacheParams
111
+ });
112
+ const draft = context.draft();
113
+ draft.variables = variables ?? {};
114
+ context = context.apply(draft, false);
115
+ return await new Promise((resolve, reject) => {
116
+ const state = {
117
+ setup,
118
+ currentStep: 0,
119
+ index: 0,
120
+ promise: {
121
+ resolved: false,
122
+ resolve,
123
+ reject
124
+ },
125
+ context
126
+ };
127
+ this.#step("forward", state);
128
+ });
129
+ }
130
+ #step(direction, ctx, value) {
131
+ const hook = direction === "error" ? "catch" : steps[direction][ctx.currentStep];
132
+ let valid = (i) => i <= this.#plugins.length;
133
+ let step = (i) => i + 1;
134
+ if (["backwards", "error"].includes(direction)) {
135
+ valid = (i) => i >= 0;
136
+ step = (i) => i - 1;
137
+ }
138
+ for (let index = ctx.index; valid(index); index = step(index)) {
139
+ let target = this.#plugins[index]?.[hook];
140
+ if (!target) {
141
+ continue;
142
+ }
143
+ const draft = ctx.context.draft();
144
+ let variablesRefChanged = (newContext) => newContext.variables !== draft.variables;
145
+ const common = {
146
+ initialValue: this.state,
147
+ client: this.#client,
148
+ variablesChanged,
149
+ marshalVariables,
150
+ updateState: this.update.bind(this),
151
+ next: (newContext) => {
152
+ const nextIndex = ["forward", "error"].includes(direction) ? index + 1 : index;
153
+ const nextStep = ["backwards", "error"].includes(direction) ? 0 : ctx.currentStep;
154
+ this.#step("forward", {
155
+ ...ctx,
156
+ index: nextIndex,
157
+ currentStep: nextStep,
158
+ context: ctx.context.apply(newContext, variablesRefChanged(newContext))
159
+ });
160
+ },
161
+ resolve: (newContext, value2) => {
162
+ const nextIndex = direction === "backwards" ? index - 1 : index;
163
+ this.#step(
164
+ "backwards",
165
+ {
166
+ ...ctx,
167
+ index: nextIndex,
168
+ context: ctx.context.apply(newContext, variablesRefChanged(newContext))
169
+ },
170
+ value2
171
+ );
172
+ }
173
+ };
174
+ let handlers;
175
+ if (direction === "forward") {
176
+ handlers = common;
177
+ } else if (direction === "backwards") {
178
+ handlers = {
179
+ ...common,
180
+ value,
181
+ resolve: (ctx2, data2) => {
182
+ return common.resolve(ctx2, data2 ?? value);
183
+ }
184
+ };
185
+ } else if (direction === "error") {
186
+ handlers = {
187
+ ...common,
188
+ error: value
189
+ };
190
+ }
191
+ try {
192
+ const result = target(draft, handlers);
193
+ result?.catch((err) => {
194
+ this.#step("error", { ...ctx, index: index - 1 }, err);
195
+ });
196
+ } catch (err) {
197
+ this.#step("error", { ...ctx, index: index - 1 }, err);
198
+ }
199
+ return;
200
+ }
201
+ if (direction === "forward") {
202
+ if (ctx.setup) {
203
+ return this.#step(
204
+ "backwards",
205
+ {
206
+ ...ctx,
207
+ currentStep: 0,
208
+ index: this.#plugins.length
209
+ },
210
+ this.state
211
+ );
212
+ }
213
+ if (ctx.currentStep <= steps.forward.length - 2) {
214
+ return this.#step("forward", {
215
+ ...ctx,
216
+ currentStep: ctx.currentStep + 1,
217
+ index: 0
218
+ });
219
+ }
220
+ throw new Error(
221
+ "Called next() on last possible plugin. Your chain is missing a plugin that calls resolve()."
222
+ );
223
+ }
224
+ if (direction === "error") {
225
+ if (!ctx.promise.resolved) {
226
+ ctx.promise.reject(value);
227
+ ctx.promise.resolved = true;
228
+ }
229
+ return;
230
+ }
231
+ if (ctx.currentStep > 0) {
232
+ return this.#step(
233
+ "backwards",
234
+ {
235
+ ...ctx,
236
+ currentStep: ctx.currentStep - 1,
237
+ index: this.#plugins.length - 1
238
+ },
239
+ value
240
+ );
241
+ }
242
+ let data = value.data;
243
+ try {
244
+ data = (0, import_scalars.unmarshalSelection)(this.#configFile, this.#artifact.selection, data) ?? null;
245
+ } catch {
246
+ }
247
+ const finalValue = {
248
+ ...value,
249
+ data
250
+ };
251
+ if (!ctx.promise.resolved) {
252
+ ctx.promise.resolve(finalValue);
253
+ ctx.promise.resolved = true;
254
+ }
255
+ this.#lastContext = ctx.context.draft();
256
+ this.#lastVariables = this.#lastContext.stuff.inputs.marshaled;
257
+ this.set(finalValue);
258
+ }
259
+ }
260
+ class ClientPluginContextWrapper {
261
+ #context;
262
+ #lastVariables;
263
+ constructor({
264
+ lastVariables,
265
+ ...values
266
+ }) {
267
+ this.#context = values;
268
+ this.#lastVariables = lastVariables;
269
+ }
270
+ get variables() {
271
+ return this.#context.variables;
272
+ }
273
+ draft() {
274
+ const ctx = {
275
+ ...this.#context
276
+ };
277
+ const applyVariables = this.applyVariables.bind(this);
278
+ return {
279
+ ...ctx,
280
+ get stuff() {
281
+ return ctx.stuff;
282
+ },
283
+ set stuff(val) {
284
+ ctx.stuff = val;
285
+ },
286
+ get variables() {
287
+ return ctx.variables ?? {};
288
+ },
289
+ set variables(val) {
290
+ Object.assign(ctx, applyVariables(ctx, { variables: val }));
291
+ }
292
+ };
293
+ }
294
+ applyVariables(source, values) {
295
+ const artifact = source.artifact;
296
+ const ctx = {
297
+ ...source,
298
+ ...values
299
+ };
300
+ const val = values.variables;
301
+ let changed = {};
302
+ for (const [name, value] of Object.entries(val ?? {})) {
303
+ if (value !== source.variables?.[name]) {
304
+ changed[name] = value;
305
+ }
306
+ }
307
+ ctx.stuff = {
308
+ ...ctx.stuff,
309
+ inputs: {
310
+ ...ctx.stuff.inputs
311
+ }
312
+ };
313
+ const firstInit = !ctx.stuff.inputs || !ctx.stuff.inputs.init;
314
+ const hasChanged = Object.keys(changed).length > 0 || firstInit;
315
+ if (artifact.kind !== import_types.ArtifactKind.Fragment && hasChanged) {
316
+ const newVariables = {
317
+ ...ctx.stuff.inputs?.marshaled,
318
+ ...(0, import_scalars.marshalInputs)({
319
+ artifact,
320
+ input: changed,
321
+ config: source.config
322
+ })
323
+ };
324
+ ctx.stuff.inputs = {
325
+ init: true,
326
+ marshaled: newVariables,
327
+ changed: true
328
+ };
329
+ ctx.variables = val;
330
+ }
331
+ ctx.stuff = {
332
+ ...ctx.stuff,
333
+ inputs: {
334
+ ...ctx.stuff.inputs,
335
+ changed: !(0, import_deepEquals.deepEquals)(ctx.stuff.inputs.marshaled, this.#lastVariables)
336
+ }
337
+ };
338
+ return ctx;
339
+ }
340
+ apply(values, newVariables) {
341
+ if (newVariables) {
342
+ values = this.applyVariables(this.#context, values);
343
+ }
344
+ const wrapper = new ClientPluginContextWrapper({
345
+ ...values,
346
+ lastVariables: this.#lastVariables
347
+ });
348
+ return wrapper;
349
+ }
350
+ }
351
+ function marshalVariables(ctx) {
352
+ return ctx.stuff.inputs?.marshaled ?? {};
353
+ }
354
+ function variablesChanged(ctx) {
355
+ return ctx.stuff.inputs?.changed;
356
+ }
357
+ // Annotate the CommonJS export names for ESM import in node:
358
+ 0 && (module.exports = {
359
+ DocumentStore
360
+ });
@@ -0,0 +1,25 @@
1
+ /// <reference path="../../../../../houdini.d.ts" />
2
+ import type { DocumentArtifact, GraphQLObject } from '../lib/types';
3
+ import type { ClientPlugin } from './documentStore';
4
+ import { DocumentStore } from './documentStore';
5
+ import { type FetchParamFn, type ThrowOnErrorParams } from './plugins';
6
+ export { DocumentStore, type ClientPlugin } from './documentStore';
7
+ export { fetchPlugin, mutationPlugin, queryPlugin, subscriptionPlugin } from './plugins';
8
+ type ConstructorArgs = {
9
+ url: string;
10
+ fetchParams?: FetchParamFn;
11
+ plugins?: ClientPlugin[];
12
+ pipeline?: ClientPlugin[];
13
+ throwOnError?: ThrowOnErrorParams;
14
+ };
15
+ export declare class HoudiniClient {
16
+ #private;
17
+ url: string;
18
+ constructor({ url, fetchParams, plugins, pipeline, throwOnError }: ConstructorArgs);
19
+ observe<_Data extends GraphQLObject, _Input extends Record<string, any>>({ artifact, cache, initialValue, fetching, }: {
20
+ artifact: DocumentArtifact;
21
+ cache?: boolean;
22
+ initialValue?: _Data | null;
23
+ fetching?: boolean;
24
+ }): DocumentStore<_Data, _Input>;
25
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var client_exports = {};
26
+ __export(client_exports, {
27
+ DocumentStore: () => import_documentStore2.DocumentStore,
28
+ HoudiniClient: () => HoudiniClient,
29
+ fetchPlugin: () => import_plugins2.fetchPlugin,
30
+ mutationPlugin: () => import_plugins2.mutationPlugin,
31
+ queryPlugin: () => import_plugins2.queryPlugin,
32
+ subscriptionPlugin: () => import_plugins2.subscriptionPlugin
33
+ });
34
+ module.exports = __toCommonJS(client_exports);
35
+ var import_documentStore = require("./documentStore");
36
+ var import_plugins = require("./plugins");
37
+ var import_injectedPlugins = __toESM(require("./plugins/injectedPlugins"), 1);
38
+ var import_documentStore2 = require("./documentStore");
39
+ var import_plugins2 = require("./plugins");
40
+ class HoudiniClient {
41
+ url;
42
+ #plugins;
43
+ constructor({ url, fetchParams, plugins, pipeline, throwOnError }) {
44
+ if (plugins && pipeline) {
45
+ throw new Error(
46
+ "A client cannot be given a pipeline and a list of plugins at the same time."
47
+ );
48
+ }
49
+ this.#plugins = [].concat(
50
+ throwOnError ? [(0, import_plugins.throwOnErrorPlugin)(throwOnError)] : [],
51
+ (0, import_plugins.fetchParamsPlugin)(fetchParams),
52
+ pipeline ?? [
53
+ import_plugins.queryPlugin,
54
+ import_plugins.mutationPlugin
55
+ ].concat(
56
+ plugins ?? [],
57
+ import_injectedPlugins.default,
58
+ (0, import_plugins.fetchPlugin)()
59
+ )
60
+ );
61
+ this.url = url;
62
+ }
63
+ observe({
64
+ artifact,
65
+ cache = true,
66
+ initialValue,
67
+ fetching = false
68
+ }) {
69
+ return new import_documentStore.DocumentStore({
70
+ client: this,
71
+ artifact,
72
+ plugins: this.#plugins,
73
+ cache,
74
+ initialValue,
75
+ fetching
76
+ });
77
+ }
78
+ }
79
+ // Annotate the CommonJS export names for ESM import in node:
80
+ 0 && (module.exports = {
81
+ DocumentStore,
82
+ HoudiniClient,
83
+ fetchPlugin,
84
+ mutationPlugin,
85
+ queryPlugin,
86
+ subscriptionPlugin
87
+ });
@@ -0,0 +1,8 @@
1
+ import cache from '../../cache';
2
+ import type { Cache } from '../../cache/cache';
3
+ import type { ClientPlugin } from '../documentStore';
4
+ export declare const cachePolicyPlugin: ({ enabled, setFetching, cache: localCache, }: {
5
+ enabled: boolean;
6
+ setFetching: (val: boolean) => void;
7
+ cache?: Cache | undefined;
8
+ }) => ClientPlugin;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var cache_exports = {};
26
+ __export(cache_exports, {
27
+ cachePolicyPlugin: () => cachePolicyPlugin
28
+ });
29
+ module.exports = __toCommonJS(cache_exports);
30
+ var import_cache = __toESM(require("../../cache"), 1);
31
+ var import_types = require("../../lib/types");
32
+ const cachePolicyPlugin = ({
33
+ enabled,
34
+ setFetching,
35
+ cache: localCache = import_cache.default
36
+ }) => () => {
37
+ return {
38
+ network(ctx, { next, resolve, marshalVariables }) {
39
+ const { policy, artifact } = ctx;
40
+ let useCache = false;
41
+ if (enabled && artifact.kind === import_types.ArtifactKind.Query && !ctx.cacheParams?.disableRead) {
42
+ if (policy !== import_types.CachePolicy.NetworkOnly) {
43
+ const value = localCache.read({
44
+ selection: artifact.selection,
45
+ variables: marshalVariables(ctx)
46
+ });
47
+ const allowed = !value.partial || artifact.kind === import_types.ArtifactKind.Query && artifact.partial;
48
+ if (policy === import_types.CachePolicy.CacheOnly) {
49
+ return resolve(ctx, {
50
+ fetching: false,
51
+ variables: ctx.variables ?? null,
52
+ data: value.data,
53
+ errors: null,
54
+ source: import_types.DataSource.Cache,
55
+ partial: value.partial
56
+ });
57
+ }
58
+ useCache = !!(value.data !== null && allowed);
59
+ if (useCache) {
60
+ resolve(ctx, {
61
+ fetching: false,
62
+ variables: ctx.variables ?? null,
63
+ data: value.data,
64
+ errors: null,
65
+ source: import_types.DataSource.Cache,
66
+ partial: value.partial
67
+ });
68
+ }
69
+ if (useCache && !value.partial) {
70
+ return;
71
+ }
72
+ }
73
+ }
74
+ if (enabled) {
75
+ setTimeout(() => {
76
+ localCache._internal_unstable.collectGarbage();
77
+ }, 0);
78
+ }
79
+ setFetching(!useCache);
80
+ return next(ctx);
81
+ },
82
+ afterNetwork(ctx, { resolve, value, marshalVariables }) {
83
+ if (value.source !== import_types.DataSource.Cache && enabled && value.data && !ctx.cacheParams?.disableWrite) {
84
+ localCache.write({
85
+ ...ctx.cacheParams,
86
+ layer: ctx.cacheParams?.layer?.id,
87
+ selection: ctx.artifact.selection,
88
+ data: value.data,
89
+ variables: marshalVariables(ctx)
90
+ });
91
+ }
92
+ resolve(ctx, value);
93
+ }
94
+ };
95
+ };
96
+ // Annotate the CommonJS export names for ESM import in node:
97
+ 0 && (module.exports = {
98
+ cachePolicyPlugin
99
+ });
@@ -0,0 +1,37 @@
1
+ import type { RequestPayload } from '../../lib/types';
2
+ import type { ClientPlugin } from '../documentStore';
3
+ export declare const fetchPlugin: (target?: RequestHandler | string) => ClientPlugin;
4
+ export type FetchContext = {
5
+ fetch: typeof globalThis.fetch;
6
+ metadata?: App.Metadata | null;
7
+ session: App.Session | null;
8
+ };
9
+ /**
10
+ * ## Tip 👇
11
+ *
12
+ * To define types for your metadata, create a file `src/app.d.ts` containing the followingI:
13
+ *
14
+ * ```ts
15
+ * declare namespace App { *
16
+ * interface Metadata {}
17
+ * }
18
+ * ```
19
+ *
20
+ */
21
+ export type RequestHandlerArgs = FetchContext & FetchParams;
22
+ export type RequestHandler<_Data = any> = (args: RequestHandlerArgs) => Promise<RequestPayload<_Data>>;
23
+ export type FetchParams = {
24
+ text: string;
25
+ hash: string;
26
+ variables: {
27
+ [key: string]: any;
28
+ };
29
+ };
30
+ export declare function isExtractableFile(value: any): value is ExtractableFile;
31
+ type ExtractableFile = File | Blob;
32
+ /** @typedef {import("./isExtractableFile.mjs").default} isExtractableFile */
33
+ export declare function extractFiles(value: any): {
34
+ clone: any;
35
+ files: Map<any, any>;
36
+ };
37
+ export {};