@zenstackhq/tanstack-query 1.1.1 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/generator.js +70 -37
  2. package/generator.js.map +1 -1
  3. package/package.json +40 -9
  4. package/runtime/common-5e18c135.d.ts +32 -0
  5. package/runtime/index.d.mts +1 -1
  6. package/runtime/index.d.ts +1 -1
  7. package/runtime/index.js +34 -0
  8. package/runtime/index.js.map +1 -1
  9. package/runtime/index.mjs +15 -0
  10. package/runtime/index.mjs.map +1 -1
  11. package/runtime/react.d.mts +17 -26
  12. package/runtime/react.d.ts +17 -26
  13. package/runtime/react.js +105 -72
  14. package/runtime/react.js.map +1 -1
  15. package/runtime/react.mjs +102 -68
  16. package/runtime/react.mjs.map +1 -1
  17. package/runtime/svelte.d.mts +16 -25
  18. package/runtime/svelte.d.ts +16 -25
  19. package/runtime/svelte.js +97 -71
  20. package/runtime/svelte.js.map +1 -1
  21. package/runtime/svelte.mjs +93 -66
  22. package/runtime/svelte.mjs.map +1 -1
  23. package/runtime/vue.d.mts +17 -27
  24. package/runtime/vue.d.ts +17 -27
  25. package/runtime/vue.js +105 -77
  26. package/runtime/vue.js.map +1 -1
  27. package/runtime/vue.mjs +101 -71
  28. package/runtime/vue.mjs.map +1 -1
  29. package/runtime-v5/common-5e18c135.d.ts +32 -0
  30. package/runtime-v5/index.d.mts +20 -0
  31. package/runtime-v5/index.d.ts +20 -0
  32. package/runtime-v5/index.js +53 -0
  33. package/runtime-v5/index.js.map +1 -0
  34. package/runtime-v5/index.mjs +16 -0
  35. package/runtime-v5/index.mjs.map +1 -0
  36. package/runtime-v5/react.d.mts +45 -0
  37. package/runtime-v5/react.d.ts +45 -0
  38. package/runtime-v5/react.js +269 -0
  39. package/runtime-v5/react.js.map +1 -0
  40. package/runtime-v5/react.mjs +237 -0
  41. package/runtime-v5/react.mjs.map +1 -0
  42. package/runtime-v5/svelte.d.mts +56 -0
  43. package/runtime-v5/svelte.d.ts +56 -0
  44. package/runtime-v5/svelte.js +296 -0
  45. package/runtime-v5/svelte.js.map +1 -0
  46. package/runtime-v5/svelte.mjs +264 -0
  47. package/runtime-v5/svelte.mjs.map +1 -0
  48. package/runtime-v5/vue.d.mts +52 -0
  49. package/runtime-v5/vue.d.ts +52 -0
  50. package/runtime-v5/vue.js +274 -0
  51. package/runtime-v5/vue.js.map +1 -0
  52. package/runtime-v5/vue.mjs +240 -0
  53. package/runtime-v5/vue.mjs.map +1 -0
  54. package/runtime/common-83308e88.d.ts +0 -19
@@ -0,0 +1,237 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
32
+ var __async = (__this, __arguments, generator) => {
33
+ return new Promise((resolve, reject) => {
34
+ var fulfilled = (value) => {
35
+ try {
36
+ step(generator.next(value));
37
+ } catch (e) {
38
+ reject(e);
39
+ }
40
+ };
41
+ var rejected = (value) => {
42
+ try {
43
+ step(generator.throw(value));
44
+ } catch (e) {
45
+ reject(e);
46
+ }
47
+ };
48
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
49
+ step((generator = generator.apply(__this, __arguments)).next());
50
+ });
51
+ };
52
+
53
+ // src/runtime-v5/react.ts
54
+ import {
55
+ useInfiniteQuery,
56
+ useMutation,
57
+ useQuery,
58
+ useQueryClient
59
+ } from "@tanstack/react-query";
60
+ import { createContext, useContext } from "react";
61
+
62
+ // src/runtime/common.ts
63
+ import { deserialize, serialize } from "@zenstackhq/runtime/browser";
64
+ import { getMutatedModels, getReadModels } from "@zenstackhq/runtime/cross";
65
+ import * as crossFetch from "cross-fetch";
66
+ var DEFAULT_QUERY_ENDPOINT = "/api/model";
67
+ var QUERY_KEY_PREFIX = "zenstack";
68
+ function fetcher(url, options, fetch2, checkReadBack) {
69
+ return __async(this, null, function* () {
70
+ var _a, _b, _c;
71
+ const _fetch = fetch2 != null ? fetch2 : crossFetch.fetch;
72
+ const res = yield _fetch(url, options);
73
+ if (!res.ok) {
74
+ const errData = unmarshal(yield res.text());
75
+ if (checkReadBack !== false && ((_a = errData.error) == null ? void 0 : _a.prisma) && ((_b = errData.error) == null ? void 0 : _b.code) === "P2004" && ((_c = errData.error) == null ? void 0 : _c.reason) === "RESULT_NOT_READABLE") {
76
+ return void 0;
77
+ }
78
+ const error = new Error(
79
+ "An error occurred while fetching the data."
80
+ );
81
+ error.info = errData.error;
82
+ error.status = res.status;
83
+ throw error;
84
+ }
85
+ const textResult = yield res.text();
86
+ try {
87
+ return unmarshal(textResult).data;
88
+ } catch (err) {
89
+ console.error(`Unable to deserialize data:`, textResult);
90
+ throw err;
91
+ }
92
+ });
93
+ }
94
+ function getQueryKey(model, urlOrOperation, args) {
95
+ if (!urlOrOperation) {
96
+ throw new Error("Invalid urlOrOperation");
97
+ }
98
+ const operation = urlOrOperation.split("/").pop();
99
+ return [QUERY_KEY_PREFIX, model, operation, args];
100
+ }
101
+ function marshal(value) {
102
+ const { data, meta } = serialize(value);
103
+ if (meta) {
104
+ return JSON.stringify(__spreadProps(__spreadValues({}, data), { meta: { serialization: meta } }));
105
+ } else {
106
+ return JSON.stringify(data);
107
+ }
108
+ }
109
+ function unmarshal(value) {
110
+ var _a;
111
+ const parsed = JSON.parse(value);
112
+ if (parsed.data && ((_a = parsed.meta) == null ? void 0 : _a.serialization)) {
113
+ const deserializedData = deserialize(parsed.data, parsed.meta.serialization);
114
+ return __spreadProps(__spreadValues({}, parsed), { data: deserializedData });
115
+ } else {
116
+ return parsed;
117
+ }
118
+ }
119
+ function makeUrl(url, args) {
120
+ if (!args) {
121
+ return url;
122
+ }
123
+ const { data, meta } = serialize(args);
124
+ let result = `${url}?q=${encodeURIComponent(JSON.stringify(data))}`;
125
+ if (meta) {
126
+ result += `&meta=${encodeURIComponent(JSON.stringify({ serialization: meta }))}`;
127
+ }
128
+ return result;
129
+ }
130
+ function setupInvalidation(model, operation, modelMeta, options, invalidate, logging = false) {
131
+ const origOnSuccess = options == null ? void 0 : options.onSuccess;
132
+ options.onSuccess = (...args) => __async(this, null, function* () {
133
+ const [_, variables] = args;
134
+ const predicate = yield getInvalidationPredicate(
135
+ model,
136
+ operation,
137
+ variables,
138
+ modelMeta,
139
+ logging
140
+ );
141
+ yield invalidate(predicate);
142
+ return origOnSuccess == null ? void 0 : origOnSuccess(...args);
143
+ });
144
+ }
145
+ function getInvalidationPredicate(model, operation, mutationArgs, modelMeta, logging = false) {
146
+ return __async(this, null, function* () {
147
+ const mutatedModels = yield getMutatedModels(model, operation, mutationArgs, modelMeta);
148
+ return ({ queryKey }) => {
149
+ const [_model, queryModel, queryOp, args] = queryKey;
150
+ if (mutatedModels.includes(queryModel)) {
151
+ if (logging) {
152
+ console.log(`Invalidating query [${queryKey}] due to mutation "${model}.${operation}"`);
153
+ }
154
+ return true;
155
+ }
156
+ if (args) {
157
+ if (findNestedRead(queryModel, mutatedModels, modelMeta, args)) {
158
+ if (logging) {
159
+ console.log(`Invalidating query [${queryKey}] due to mutation "${model}.${operation}"`);
160
+ }
161
+ return true;
162
+ }
163
+ }
164
+ return false;
165
+ };
166
+ });
167
+ }
168
+ function findNestedRead(visitingModel, targetModels, modelMeta, args) {
169
+ const modelsRead = getReadModels(visitingModel, modelMeta, args);
170
+ return targetModels.some((m) => modelsRead.includes(m));
171
+ }
172
+
173
+ // src/runtime-v5/react.ts
174
+ var RequestHandlerContext = createContext({
175
+ endpoint: DEFAULT_QUERY_ENDPOINT,
176
+ fetch: void 0
177
+ });
178
+ function getHooksContext() {
179
+ const _a = useContext(RequestHandlerContext), { endpoint } = _a, rest = __objRest(_a, ["endpoint"]);
180
+ return __spreadValues({ endpoint: endpoint != null ? endpoint : DEFAULT_QUERY_ENDPOINT }, rest);
181
+ }
182
+ var Provider = RequestHandlerContext.Provider;
183
+ function useModelQuery(model, url, args, options, fetch2) {
184
+ const reqUrl = makeUrl(url, args);
185
+ return useQuery(__spreadValues({
186
+ queryKey: getQueryKey(model, url, args),
187
+ queryFn: () => fetcher(reqUrl, void 0, fetch2, false)
188
+ }, options));
189
+ }
190
+ function useInfiniteModelQuery(model, url, args, options, fetch2) {
191
+ return useInfiniteQuery(__spreadValues({
192
+ queryKey: getQueryKey(model, url, args),
193
+ queryFn: ({ pageParam }) => {
194
+ return fetcher(makeUrl(url, pageParam != null ? pageParam : args), void 0, fetch2, false);
195
+ }
196
+ }, options));
197
+ }
198
+ function useModelMutation(model, method, url, modelMeta, options, fetch2, invalidateQueries = true, checkReadBack) {
199
+ const queryClient = useQueryClient();
200
+ const mutationFn = (data) => {
201
+ const reqUrl = method === "DELETE" ? makeUrl(url, data) : url;
202
+ const fetchInit = __spreadValues({
203
+ method
204
+ }, method !== "DELETE" && {
205
+ headers: {
206
+ "content-type": "application/json"
207
+ },
208
+ body: marshal(data)
209
+ });
210
+ return fetcher(reqUrl, fetchInit, fetch2, checkReadBack);
211
+ };
212
+ const finalOptions = __spreadProps(__spreadValues({}, options), { mutationFn });
213
+ if (invalidateQueries) {
214
+ const { logging } = useContext(RequestHandlerContext);
215
+ const operation = url.split("/").pop();
216
+ if (operation) {
217
+ setupInvalidation(
218
+ model,
219
+ operation,
220
+ modelMeta,
221
+ finalOptions,
222
+ (predicate) => queryClient.invalidateQueries({ predicate }),
223
+ logging
224
+ );
225
+ }
226
+ }
227
+ return useMutation(finalOptions);
228
+ }
229
+ export {
230
+ Provider,
231
+ RequestHandlerContext,
232
+ getHooksContext,
233
+ useInfiniteModelQuery,
234
+ useModelMutation,
235
+ useModelQuery
236
+ };
237
+ //# sourceMappingURL=react.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime-v5/react.ts","../../src/runtime/common.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n useInfiniteQuery,\n useMutation,\n useQuery,\n useQueryClient,\n type InfiniteData,\n type UseInfiniteQueryOptions,\n type UseMutationOptions,\n type UseQueryOptions,\n} from '@tanstack/react-query-v5';\nimport type { ModelMeta } from '@zenstackhq/runtime/cross';\nimport { createContext, useContext } from 'react';\nimport {\n DEFAULT_QUERY_ENDPOINT,\n FetchFn,\n fetcher,\n getQueryKey,\n makeUrl,\n marshal,\n setupInvalidation,\n type APIContext,\n} from '../runtime/common';\n\n/**\n * Context for configuring react hooks.\n */\nexport const RequestHandlerContext = createContext<APIContext>({\n endpoint: DEFAULT_QUERY_ENDPOINT,\n fetch: undefined,\n});\n\n/**\n * Hooks context.\n */\nexport function getHooksContext() {\n const { endpoint, ...rest } = useContext(RequestHandlerContext);\n return { endpoint: endpoint ?? DEFAULT_QUERY_ENDPOINT, ...rest };\n}\n\n/**\n * Context provider.\n */\nexport const Provider = RequestHandlerContext.Provider;\n\n/**\n * Creates a react-query query.\n *\n * @param model The name of the model under query.\n * @param url The request URL.\n * @param args The request args object, URL-encoded and appended as \"?q=\" parameter\n * @param options The react-query options object\n * @returns useQuery hook\n */\nexport function useModelQuery<R>(\n model: string,\n url: string,\n args?: unknown,\n options?: Omit<UseQueryOptions<R>, 'queryKey'>,\n fetch?: FetchFn\n) {\n const reqUrl = makeUrl(url, args);\n return useQuery({\n queryKey: getQueryKey(model, url, args),\n queryFn: () => fetcher<R, false>(reqUrl, undefined, fetch, false),\n ...options,\n });\n}\n\n/**\n * Creates a react-query infinite query.\n *\n * @param model The name of the model under query.\n * @param url The request URL.\n * @param args The initial request args object, URL-encoded and appended as \"?q=\" parameter\n * @param options The react-query infinite query options object\n * @returns useInfiniteQuery hook\n */\nexport function useInfiniteModelQuery<R>(\n model: string,\n url: string,\n args: unknown,\n options: Omit<UseInfiniteQueryOptions<R, unknown, InfiniteData<R>>, 'queryKey'>,\n fetch?: FetchFn\n) {\n return useInfiniteQuery({\n queryKey: getQueryKey(model, url, args),\n queryFn: ({ pageParam }) => {\n return fetcher<R, false>(makeUrl(url, pageParam ?? args), undefined, fetch, false);\n },\n ...options,\n });\n}\n\nexport function useModelMutation<T, R = any, C extends boolean = boolean, Result = C extends true ? R | undefined : R>(\n model: string,\n method: 'POST' | 'PUT' | 'DELETE',\n url: string,\n modelMeta: ModelMeta,\n options?: Omit<UseMutationOptions<Result, unknown, T>, 'mutationFn'>,\n fetch?: FetchFn,\n invalidateQueries = true,\n checkReadBack?: C\n) {\n const queryClient = useQueryClient();\n const mutationFn = (data: any) => {\n const reqUrl = method === 'DELETE' ? makeUrl(url, data) : url;\n const fetchInit: RequestInit = {\n method,\n ...(method !== 'DELETE' && {\n headers: {\n 'content-type': 'application/json',\n },\n body: marshal(data),\n }),\n };\n return fetcher<R, C>(reqUrl, fetchInit, fetch, checkReadBack) as Promise<Result>;\n };\n\n const finalOptions = { ...options, mutationFn };\n if (invalidateQueries) {\n const { logging } = useContext(RequestHandlerContext);\n const operation = url.split('/').pop();\n if (operation) {\n setupInvalidation(\n model,\n operation,\n modelMeta,\n finalOptions,\n (predicate) => queryClient.invalidateQueries({ predicate }),\n logging\n );\n }\n }\n\n return useMutation(finalOptions);\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { deserialize, serialize } from '@zenstackhq/runtime/browser';\nimport { getMutatedModels, getReadModels, type ModelMeta, type PrismaWriteActionType } from '@zenstackhq/runtime/cross';\nimport * as crossFetch from 'cross-fetch';\n\n/**\n * The default query endpoint.\n */\nexport const DEFAULT_QUERY_ENDPOINT = '/api/model';\n\n/**\n * Prefix for react-query keys.\n */\nexport const QUERY_KEY_PREFIX = 'zenstack';\n\n/**\n * Function signature for `fetch`.\n */\nexport type FetchFn = (url: string, options?: RequestInit) => Promise<Response>;\n\n/**\n * Context type for configuring the hooks.\n */\nexport type APIContext = {\n /**\n * The endpoint to use for the queries.\n */\n endpoint?: string;\n\n /**\n * A custom fetch function for sending the HTTP requests.\n */\n fetch?: FetchFn;\n\n /**\n * If logging is enabled.\n */\n logging?: boolean;\n};\n\nexport async function fetcher<R, C extends boolean>(\n url: string,\n options?: RequestInit,\n fetch?: FetchFn,\n checkReadBack?: C\n): Promise<C extends true ? R | undefined : R> {\n const _fetch = fetch ?? crossFetch.fetch;\n const res = await _fetch(url, options);\n if (!res.ok) {\n const errData = unmarshal(await res.text());\n if (\n checkReadBack !== false &&\n errData.error?.prisma &&\n errData.error?.code === 'P2004' &&\n errData.error?.reason === 'RESULT_NOT_READABLE'\n ) {\n // policy doesn't allow mutation result to be read back, just return undefined\n return undefined as any;\n }\n const error: Error & { info?: unknown; status?: number } = new Error(\n 'An error occurred while fetching the data.'\n );\n error.info = errData.error;\n error.status = res.status;\n throw error;\n }\n\n const textResult = await res.text();\n try {\n return unmarshal(textResult).data as R;\n } catch (err) {\n console.error(`Unable to deserialize data:`, textResult);\n throw err;\n }\n}\n\ntype QueryKey = [string /* prefix */, string /* model */, string /* operation */, unknown /* args */];\n\n/**\n * Computes query key for the given model, operation and query args.\n * @param model Model name.\n * @param urlOrOperation Prisma operation (e.g, `findMany`) or request URL. If it's a URL, the last path segment will be used as the operation name.\n * @param args Prisma query arguments.\n * @returns Query key\n */\nexport function getQueryKey(model: string, urlOrOperation: string, args: unknown): QueryKey {\n if (!urlOrOperation) {\n throw new Error('Invalid urlOrOperation');\n }\n const operation = urlOrOperation.split('/').pop();\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return [QUERY_KEY_PREFIX, model, operation!, args];\n}\n\nexport function marshal(value: unknown) {\n const { data, meta } = serialize(value);\n if (meta) {\n return JSON.stringify({ ...(data as any), meta: { serialization: meta } });\n } else {\n return JSON.stringify(data);\n }\n}\n\nexport function unmarshal(value: string) {\n const parsed = JSON.parse(value);\n if (parsed.data && parsed.meta?.serialization) {\n const deserializedData = deserialize(parsed.data, parsed.meta.serialization);\n return { ...parsed, data: deserializedData };\n } else {\n return parsed;\n }\n}\n\nexport function makeUrl(url: string, args: unknown) {\n if (!args) {\n return url;\n }\n\n const { data, meta } = serialize(args);\n let result = `${url}?q=${encodeURIComponent(JSON.stringify(data))}`;\n if (meta) {\n result += `&meta=${encodeURIComponent(JSON.stringify({ serialization: meta }))}`;\n }\n return result;\n}\n\ntype InvalidationPredicate = ({ queryKey }: { queryKey: readonly unknown[] }) => boolean;\n\n// sets up invalidation hook for a mutation\nexport function setupInvalidation(\n model: string,\n operation: string,\n modelMeta: ModelMeta,\n options: { onSuccess?: (...args: any[]) => any },\n invalidate: (predicate: InvalidationPredicate) => Promise<void>,\n logging = false\n) {\n const origOnSuccess = options?.onSuccess;\n options.onSuccess = async (...args: unknown[]) => {\n const [_, variables] = args;\n const predicate = await getInvalidationPredicate(\n model,\n operation as PrismaWriteActionType,\n variables,\n modelMeta,\n logging\n );\n await invalidate(predicate);\n return origOnSuccess?.(...args);\n };\n}\n\n// gets a predicate for evaluating whether a query should be invalidated\nasync function getInvalidationPredicate(\n model: string,\n operation: PrismaWriteActionType,\n mutationArgs: any,\n modelMeta: ModelMeta,\n logging = false\n) {\n const mutatedModels = await getMutatedModels(model, operation, mutationArgs, modelMeta);\n\n return ({ queryKey }: { queryKey: readonly unknown[] }) => {\n const [_model, queryModel, queryOp, args] = queryKey as QueryKey;\n\n if (mutatedModels.includes(queryModel)) {\n // direct match\n if (logging) {\n console.log(`Invalidating query [${queryKey}] due to mutation \"${model}.${operation}\"`);\n }\n return true;\n }\n\n if (args) {\n // traverse query args to find nested reads that match the model under mutation\n if (findNestedRead(queryModel, mutatedModels, modelMeta, args)) {\n if (logging) {\n console.log(`Invalidating query [${queryKey}] due to mutation \"${model}.${operation}\"`);\n }\n return true;\n }\n }\n\n return false;\n };\n}\n\n// find nested reads that match the given models\nfunction findNestedRead(visitingModel: string, targetModels: string[], modelMeta: ModelMeta, args: any) {\n const modelsRead = getReadModels(visitingModel, modelMeta, args);\n return targetModels.some((m) => modelsRead.includes(m));\n}\n"],"mappings":"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","names":["fetch","fetch"]}
@@ -0,0 +1,56 @@
1
+ import * as _tanstack_svelte_query_v5 from '@tanstack/svelte-query';
2
+ import { StoreOrVal, CreateInfiniteQueryOptions, InfiniteData, MutationOptions } from '@tanstack/svelte-query';
3
+ import { QueryOptions } from '@tanstack/vue-query';
4
+ import { ModelMeta } from '@zenstackhq/runtime/cross';
5
+ import { A as APIContext, F as FetchFn } from './common-5e18c135.js';
6
+
7
+ /**
8
+ * Key for setting and getting the global query context.
9
+ */
10
+ declare const SvelteQueryContextKey = "zenstack-svelte-query-context";
11
+ /**
12
+ * Set context for the generated TanStack Query hooks.
13
+ */
14
+ declare function setHooksContext(context: APIContext): void;
15
+ /**
16
+ * Hooks context.
17
+ */
18
+ declare function getHooksContext(): {
19
+ fetch?: FetchFn | undefined;
20
+ logging?: boolean | undefined;
21
+ endpoint: string;
22
+ };
23
+ /**
24
+ * Creates a svelte-query query.
25
+ *
26
+ * @param model The name of the model under query.
27
+ * @param url The request URL.
28
+ * @param args The request args object, URL-encoded and appended as "?q=" parameter
29
+ * @param options The svelte-query options object
30
+ * @returns useQuery hook
31
+ */
32
+ declare function useModelQuery<R>(model: string, url: string, args?: unknown, options?: StoreOrVal<Omit<QueryOptions<R>, 'queryKey'>>, fetch?: FetchFn): _tanstack_svelte_query_v5.CreateQueryResult<unknown, Error>;
33
+ /**
34
+ * Creates a svelte-query infinite query.
35
+ *
36
+ * @param model The name of the model under query.
37
+ * @param url The request URL.
38
+ * @param args The initial request args object, URL-encoded and appended as "?q=" parameter
39
+ * @param options The svelte-query infinite query options object
40
+ * @returns useQuery hook
41
+ */
42
+ declare function useInfiniteModelQuery<R>(model: string, url: string, args: unknown, options: StoreOrVal<Omit<CreateInfiniteQueryOptions<R, unknown, InfiniteData<R>>, 'queryKey'>>, fetch?: FetchFn): _tanstack_svelte_query_v5.CreateInfiniteQueryResult<InfiniteData<R, unknown>, unknown>;
43
+ /**
44
+ * Creates a POST mutation with svelte-query.
45
+ *
46
+ * @param model The name of the model under mutation.
47
+ * @param method The HTTP method.
48
+ * @param modelMeta The model metadata.
49
+ * @param url The request URL.
50
+ * @param options The svelte-query options.
51
+ * @param invalidateQueries Whether to invalidate queries after mutation.
52
+ * @returns useMutation hooks
53
+ */
54
+ declare function useModelMutation<T, R = any, C extends boolean = boolean, Result = C extends true ? R | undefined : R>(model: string, method: 'POST' | 'PUT' | 'DELETE', url: string, modelMeta: ModelMeta, options?: Omit<MutationOptions<Result, unknown, T>, 'mutationFn'>, fetch?: FetchFn, invalidateQueries?: boolean, checkReadBack?: C): _tanstack_svelte_query_v5.CreateMutationResult<Result, unknown, T, unknown>;
55
+
56
+ export { APIContext as RequestHandlerContext, SvelteQueryContextKey, getHooksContext, setHooksContext, useInfiniteModelQuery, useModelMutation, useModelQuery };
@@ -0,0 +1,56 @@
1
+ import * as _tanstack_svelte_query_v5 from '@tanstack/svelte-query';
2
+ import { StoreOrVal, CreateInfiniteQueryOptions, InfiniteData, MutationOptions } from '@tanstack/svelte-query';
3
+ import { QueryOptions } from '@tanstack/vue-query';
4
+ import { ModelMeta } from '@zenstackhq/runtime/cross';
5
+ import { A as APIContext, F as FetchFn } from './common-5e18c135.js';
6
+
7
+ /**
8
+ * Key for setting and getting the global query context.
9
+ */
10
+ declare const SvelteQueryContextKey = "zenstack-svelte-query-context";
11
+ /**
12
+ * Set context for the generated TanStack Query hooks.
13
+ */
14
+ declare function setHooksContext(context: APIContext): void;
15
+ /**
16
+ * Hooks context.
17
+ */
18
+ declare function getHooksContext(): {
19
+ fetch?: FetchFn | undefined;
20
+ logging?: boolean | undefined;
21
+ endpoint: string;
22
+ };
23
+ /**
24
+ * Creates a svelte-query query.
25
+ *
26
+ * @param model The name of the model under query.
27
+ * @param url The request URL.
28
+ * @param args The request args object, URL-encoded and appended as "?q=" parameter
29
+ * @param options The svelte-query options object
30
+ * @returns useQuery hook
31
+ */
32
+ declare function useModelQuery<R>(model: string, url: string, args?: unknown, options?: StoreOrVal<Omit<QueryOptions<R>, 'queryKey'>>, fetch?: FetchFn): _tanstack_svelte_query_v5.CreateQueryResult<unknown, Error>;
33
+ /**
34
+ * Creates a svelte-query infinite query.
35
+ *
36
+ * @param model The name of the model under query.
37
+ * @param url The request URL.
38
+ * @param args The initial request args object, URL-encoded and appended as "?q=" parameter
39
+ * @param options The svelte-query infinite query options object
40
+ * @returns useQuery hook
41
+ */
42
+ declare function useInfiniteModelQuery<R>(model: string, url: string, args: unknown, options: StoreOrVal<Omit<CreateInfiniteQueryOptions<R, unknown, InfiniteData<R>>, 'queryKey'>>, fetch?: FetchFn): _tanstack_svelte_query_v5.CreateInfiniteQueryResult<InfiniteData<R, unknown>, unknown>;
43
+ /**
44
+ * Creates a POST mutation with svelte-query.
45
+ *
46
+ * @param model The name of the model under mutation.
47
+ * @param method The HTTP method.
48
+ * @param modelMeta The model metadata.
49
+ * @param url The request URL.
50
+ * @param options The svelte-query options.
51
+ * @param invalidateQueries Whether to invalidate queries after mutation.
52
+ * @returns useMutation hooks
53
+ */
54
+ declare function useModelMutation<T, R = any, C extends boolean = boolean, Result = C extends true ? R | undefined : R>(model: string, method: 'POST' | 'PUT' | 'DELETE', url: string, modelMeta: ModelMeta, options?: Omit<MutationOptions<Result, unknown, T>, 'mutationFn'>, fetch?: FetchFn, invalidateQueries?: boolean, checkReadBack?: C): _tanstack_svelte_query_v5.CreateMutationResult<Result, unknown, T, unknown>;
55
+
56
+ export { APIContext as RequestHandlerContext, SvelteQueryContextKey, getHooksContext, setHooksContext, useInfiniteModelQuery, useModelMutation, useModelQuery };
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __getProtoOf = Object.getPrototypeOf;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __spreadValues = (a, b) => {
14
+ for (var prop in b || (b = {}))
15
+ if (__hasOwnProp.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ if (__getOwnPropSymbols)
18
+ for (var prop of __getOwnPropSymbols(b)) {
19
+ if (__propIsEnum.call(b, prop))
20
+ __defNormalProp(a, prop, b[prop]);
21
+ }
22
+ return a;
23
+ };
24
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ var __objRest = (source, exclude) => {
26
+ var target = {};
27
+ for (var prop in source)
28
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
29
+ target[prop] = source[prop];
30
+ if (source != null && __getOwnPropSymbols)
31
+ for (var prop of __getOwnPropSymbols(source)) {
32
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
33
+ target[prop] = source[prop];
34
+ }
35
+ return target;
36
+ };
37
+ var __export = (target, all) => {
38
+ for (var name in all)
39
+ __defProp(target, name, { get: all[name], enumerable: true });
40
+ };
41
+ var __copyProps = (to, from, except, desc) => {
42
+ if (from && typeof from === "object" || typeof from === "function") {
43
+ for (let key of __getOwnPropNames(from))
44
+ if (!__hasOwnProp.call(to, key) && key !== except)
45
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
46
+ }
47
+ return to;
48
+ };
49
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
50
+ // If the importer is in node compatibility mode or this is not an ESM
51
+ // file that has been converted to a CommonJS file using a Babel-
52
+ // compatible transform (i.e. "__esModule" has not been set), then set
53
+ // "default" to the CommonJS "module.exports" for node compatibility.
54
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
55
+ mod
56
+ ));
57
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
58
+ var __async = (__this, __arguments, generator) => {
59
+ return new Promise((resolve, reject) => {
60
+ var fulfilled = (value) => {
61
+ try {
62
+ step(generator.next(value));
63
+ } catch (e) {
64
+ reject(e);
65
+ }
66
+ };
67
+ var rejected = (value) => {
68
+ try {
69
+ step(generator.throw(value));
70
+ } catch (e) {
71
+ reject(e);
72
+ }
73
+ };
74
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
75
+ step((generator = generator.apply(__this, __arguments)).next());
76
+ });
77
+ };
78
+
79
+ // src/runtime-v5/svelte.ts
80
+ var svelte_exports = {};
81
+ __export(svelte_exports, {
82
+ SvelteQueryContextKey: () => SvelteQueryContextKey,
83
+ getHooksContext: () => getHooksContext,
84
+ setHooksContext: () => setHooksContext,
85
+ useInfiniteModelQuery: () => useInfiniteModelQuery,
86
+ useModelMutation: () => useModelMutation,
87
+ useModelQuery: () => useModelQuery
88
+ });
89
+ module.exports = __toCommonJS(svelte_exports);
90
+ var import_svelte_query_v5 = require("@tanstack/svelte-query");
91
+ var import_svelte = require("svelte");
92
+ var import_store = require("svelte/store");
93
+
94
+ // src/runtime/common.ts
95
+ var import_browser = require("@zenstackhq/runtime/browser");
96
+ var import_cross = require("@zenstackhq/runtime/cross");
97
+ var crossFetch = __toESM(require("cross-fetch"));
98
+ var DEFAULT_QUERY_ENDPOINT = "/api/model";
99
+ var QUERY_KEY_PREFIX = "zenstack";
100
+ function fetcher(url, options, fetch2, checkReadBack) {
101
+ return __async(this, null, function* () {
102
+ var _a, _b, _c;
103
+ const _fetch = fetch2 != null ? fetch2 : crossFetch.fetch;
104
+ const res = yield _fetch(url, options);
105
+ if (!res.ok) {
106
+ const errData = unmarshal(yield res.text());
107
+ if (checkReadBack !== false && ((_a = errData.error) == null ? void 0 : _a.prisma) && ((_b = errData.error) == null ? void 0 : _b.code) === "P2004" && ((_c = errData.error) == null ? void 0 : _c.reason) === "RESULT_NOT_READABLE") {
108
+ return void 0;
109
+ }
110
+ const error = new Error(
111
+ "An error occurred while fetching the data."
112
+ );
113
+ error.info = errData.error;
114
+ error.status = res.status;
115
+ throw error;
116
+ }
117
+ const textResult = yield res.text();
118
+ try {
119
+ return unmarshal(textResult).data;
120
+ } catch (err) {
121
+ console.error(`Unable to deserialize data:`, textResult);
122
+ throw err;
123
+ }
124
+ });
125
+ }
126
+ function getQueryKey(model, urlOrOperation, args) {
127
+ if (!urlOrOperation) {
128
+ throw new Error("Invalid urlOrOperation");
129
+ }
130
+ const operation = urlOrOperation.split("/").pop();
131
+ return [QUERY_KEY_PREFIX, model, operation, args];
132
+ }
133
+ function marshal(value) {
134
+ const { data, meta } = (0, import_browser.serialize)(value);
135
+ if (meta) {
136
+ return JSON.stringify(__spreadProps(__spreadValues({}, data), { meta: { serialization: meta } }));
137
+ } else {
138
+ return JSON.stringify(data);
139
+ }
140
+ }
141
+ function unmarshal(value) {
142
+ var _a;
143
+ const parsed = JSON.parse(value);
144
+ if (parsed.data && ((_a = parsed.meta) == null ? void 0 : _a.serialization)) {
145
+ const deserializedData = (0, import_browser.deserialize)(parsed.data, parsed.meta.serialization);
146
+ return __spreadProps(__spreadValues({}, parsed), { data: deserializedData });
147
+ } else {
148
+ return parsed;
149
+ }
150
+ }
151
+ function makeUrl(url, args) {
152
+ if (!args) {
153
+ return url;
154
+ }
155
+ const { data, meta } = (0, import_browser.serialize)(args);
156
+ let result = `${url}?q=${encodeURIComponent(JSON.stringify(data))}`;
157
+ if (meta) {
158
+ result += `&meta=${encodeURIComponent(JSON.stringify({ serialization: meta }))}`;
159
+ }
160
+ return result;
161
+ }
162
+ function setupInvalidation(model, operation, modelMeta, options, invalidate, logging = false) {
163
+ const origOnSuccess = options == null ? void 0 : options.onSuccess;
164
+ options.onSuccess = (...args) => __async(this, null, function* () {
165
+ const [_, variables] = args;
166
+ const predicate = yield getInvalidationPredicate(
167
+ model,
168
+ operation,
169
+ variables,
170
+ modelMeta,
171
+ logging
172
+ );
173
+ yield invalidate(predicate);
174
+ return origOnSuccess == null ? void 0 : origOnSuccess(...args);
175
+ });
176
+ }
177
+ function getInvalidationPredicate(model, operation, mutationArgs, modelMeta, logging = false) {
178
+ return __async(this, null, function* () {
179
+ const mutatedModels = yield (0, import_cross.getMutatedModels)(model, operation, mutationArgs, modelMeta);
180
+ return ({ queryKey }) => {
181
+ const [_model, queryModel, queryOp, args] = queryKey;
182
+ if (mutatedModels.includes(queryModel)) {
183
+ if (logging) {
184
+ console.log(`Invalidating query [${queryKey}] due to mutation "${model}.${operation}"`);
185
+ }
186
+ return true;
187
+ }
188
+ if (args) {
189
+ if (findNestedRead(queryModel, mutatedModels, modelMeta, args)) {
190
+ if (logging) {
191
+ console.log(`Invalidating query [${queryKey}] due to mutation "${model}.${operation}"`);
192
+ }
193
+ return true;
194
+ }
195
+ }
196
+ return false;
197
+ };
198
+ });
199
+ }
200
+ function findNestedRead(visitingModel, targetModels, modelMeta, args) {
201
+ const modelsRead = (0, import_cross.getReadModels)(visitingModel, modelMeta, args);
202
+ return targetModels.some((m) => modelsRead.includes(m));
203
+ }
204
+
205
+ // src/runtime-v5/svelte.ts
206
+ var SvelteQueryContextKey = "zenstack-svelte-query-context";
207
+ function setHooksContext(context) {
208
+ (0, import_svelte.setContext)(SvelteQueryContextKey, context);
209
+ }
210
+ function getHooksContext() {
211
+ const _a = (0, import_svelte.getContext)(SvelteQueryContextKey), { endpoint } = _a, rest = __objRest(_a, ["endpoint"]);
212
+ return __spreadValues({ endpoint: endpoint != null ? endpoint : DEFAULT_QUERY_ENDPOINT }, rest);
213
+ }
214
+ function useModelQuery(model, url, args, options, fetch2) {
215
+ const reqUrl = makeUrl(url, args);
216
+ const queryKey = getQueryKey(model, url, args);
217
+ const queryFn = () => fetcher(reqUrl, void 0, fetch2, false);
218
+ let mergedOpt;
219
+ if (isStore(options)) {
220
+ mergedOpt = (0, import_store.derived)([options], ([$opt]) => {
221
+ return __spreadValues({
222
+ queryKey,
223
+ queryFn
224
+ }, $opt);
225
+ });
226
+ } else {
227
+ mergedOpt = __spreadValues({
228
+ queryKey,
229
+ queryFn
230
+ }, options);
231
+ }
232
+ return (0, import_svelte_query_v5.createQuery)(mergedOpt);
233
+ }
234
+ function useInfiniteModelQuery(model, url, args, options, fetch2) {
235
+ const queryKey = getQueryKey(model, url, args);
236
+ const queryFn = ({ pageParam }) => fetcher(makeUrl(url, pageParam != null ? pageParam : args), void 0, fetch2, false);
237
+ let mergedOpt;
238
+ if (isStore(options)) {
239
+ mergedOpt = (0, import_store.derived)([options], ([$opt]) => {
240
+ return __spreadValues({
241
+ queryKey,
242
+ queryFn
243
+ }, $opt);
244
+ });
245
+ } else {
246
+ mergedOpt = __spreadValues({
247
+ queryKey,
248
+ queryFn
249
+ }, options);
250
+ }
251
+ return (0, import_svelte_query_v5.createInfiniteQuery)(mergedOpt);
252
+ }
253
+ function isStore(opt) {
254
+ return typeof (opt == null ? void 0 : opt.subscribe) === "function";
255
+ }
256
+ function useModelMutation(model, method, url, modelMeta, options, fetch2, invalidateQueries = true, checkReadBack) {
257
+ const queryClient = (0, import_svelte_query_v5.useQueryClient)();
258
+ const mutationFn = (data) => {
259
+ const reqUrl = method === "DELETE" ? makeUrl(url, data) : url;
260
+ const fetchInit = __spreadValues({
261
+ method
262
+ }, method !== "DELETE" && {
263
+ headers: {
264
+ "content-type": "application/json"
265
+ },
266
+ body: marshal(data)
267
+ });
268
+ return fetcher(reqUrl, fetchInit, fetch2, checkReadBack);
269
+ };
270
+ const finalOptions = __spreadProps(__spreadValues({}, options), { mutationFn });
271
+ if (invalidateQueries) {
272
+ const { logging } = (0, import_svelte.getContext)(SvelteQueryContextKey);
273
+ const operation = url.split("/").pop();
274
+ if (operation) {
275
+ setupInvalidation(
276
+ model,
277
+ operation,
278
+ modelMeta,
279
+ finalOptions,
280
+ (predicate) => queryClient.invalidateQueries({ predicate }),
281
+ logging
282
+ );
283
+ }
284
+ }
285
+ return (0, import_svelte_query_v5.createMutation)(finalOptions);
286
+ }
287
+ // Annotate the CommonJS export names for ESM import in node:
288
+ 0 && (module.exports = {
289
+ SvelteQueryContextKey,
290
+ getHooksContext,
291
+ setHooksContext,
292
+ useInfiniteModelQuery,
293
+ useModelMutation,
294
+ useModelQuery
295
+ });
296
+ //# sourceMappingURL=svelte.js.map