@zenstackhq/tanstack-query 2.17.2 → 2.18.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/generator.js CHANGED
@@ -22,7 +22,7 @@ const path_1 = __importDefault(require("path"));
22
22
  const ts_morph_1 = require("ts-morph");
23
23
  const ts_pattern_1 = require("ts-pattern");
24
24
  const _1 = require(".");
25
- const supportedTargets = ['react', 'vue', 'svelte'];
25
+ const supportedTargets = ['react', 'vue', 'svelte', 'angular'];
26
26
  function generate(model, options, dmmf) {
27
27
  return __awaiter(this, void 0, void 0, function* () {
28
28
  const project = (0, sdk_1.createProject)();
@@ -37,6 +37,10 @@ function generate(model, options, dmmf) {
37
37
  if (version !== 'v4' && version !== 'v5') {
38
38
  throw new sdk_1.PluginError(_1.name, `Unsupported version "${version}": use "v4" or "v5"`);
39
39
  }
40
+ // Angular is only supported in v5
41
+ if (target === 'angular' && version !== 'v5') {
42
+ throw new sdk_1.PluginError(_1.name, `Angular target is only supported with version "v5", got "${version}"`);
43
+ }
40
44
  let outDir = (0, sdk_1.requireOption)(options, 'output', _1.name);
41
45
  outDir = (0, sdk_1.resolvePath)(outDir, options);
42
46
  (0, sdk_1.ensureEmptyDir)(outDir);
@@ -84,7 +88,10 @@ function generateQueryHook(target, version, sf, model, operation, returnArray, o
84
88
  for (const generateMode of generateModes) {
85
89
  const capOperation = (0, local_helpers_1.upperCaseFirst)(operation);
86
90
  const argsType = overrideInputType !== null && overrideInputType !== void 0 ? overrideInputType : `Prisma.${model}${capOperation}Args`;
87
- const inputType = makeQueryArgsType(target, argsType);
91
+ let inputType = makeQueryArgsType(target, argsType);
92
+ if (target === 'angular') {
93
+ inputType = `${inputType} | (() => ${inputType})`;
94
+ }
88
95
  const infinite = generateMode.includes('Infinite');
89
96
  const suspense = generateMode.includes('Suspense');
90
97
  const optimistic = supportOptimistic &&
@@ -165,6 +172,7 @@ function generateMutationHook(target, sf, model, operation, httpVerb, checkReadB
165
172
  switch (target) {
166
173
  case 'react':
167
174
  case 'vue':
175
+ case 'angular':
168
176
  // override the mutateAsync function to return the correct type
169
177
  func.addVariableStatement({
170
178
  declarationKind: ts_morph_1.VariableDeclarationKind.Const,
@@ -417,6 +425,9 @@ function generateIndex(project, outDir, models, target, version) {
417
425
  case 'svelte':
418
426
  sf.addStatements(`export { SvelteQueryContextKey, setHooksContext } from '${runtimeImportBase}/svelte';`);
419
427
  break;
428
+ case 'angular':
429
+ sf.addStatements(`export { AngularQueryContextKey, provideAngularQueryContext } from '${runtimeImportBase}/angular';`);
430
+ break;
420
431
  }
421
432
  sf.addStatements(`export { default as metadata } from './__model_meta';`);
422
433
  }
@@ -428,6 +439,8 @@ function makeGetContext(target) {
428
439
  return 'const { endpoint, fetch } = getHooksContext();';
429
440
  case 'svelte':
430
441
  return `const { endpoint, fetch } = getHooksContext();`;
442
+ case 'angular':
443
+ return 'const { endpoint, fetch } = getHooksContext();';
431
444
  default:
432
445
  throw new sdk_1.PluginError(_1.name, `Unsupported target "${target}"`);
433
446
  }
@@ -475,6 +488,13 @@ function makeBaseImports(target, version) {
475
488
  ...shared,
476
489
  ];
477
490
  }
491
+ case 'angular': {
492
+ return [
493
+ `import type { CreateMutationOptions, CreateQueryOptions, CreateInfiniteQueryOptions, InfiniteData } from '@tanstack/angular-query-experimental';`,
494
+ `import { getHooksContext } from '${runtimeImportBase}/${target}';`,
495
+ ...shared,
496
+ ];
497
+ }
478
498
  default:
479
499
  throw new sdk_1.PluginError(_1.name, `Unsupported target: ${target}`);
480
500
  }
@@ -510,6 +530,9 @@ function makeQueryOptions(target, returnType, dataType, infinite, suspense, vers
510
530
  : version === 'v4'
511
531
  ? `Omit<CreateQueryOptions<${returnType}, TError, ${dataType}>, 'queryKey'>`
512
532
  : `StoreOrVal<Omit<CreateQueryOptions<${returnType}, TError, ${dataType}>, 'queryKey'>>`)
533
+ .with('angular', () => infinite
534
+ ? `Omit<CreateInfiniteQueryOptions<${returnType}, TError, InfiniteData<${dataType}>>, 'queryKey' | 'initialPageParam'>`
535
+ : `Omit<CreateQueryOptions<${returnType}, TError, ${dataType}>, 'queryKey'>`)
513
536
  .otherwise(() => {
514
537
  throw new sdk_1.PluginError(_1.name, `Unsupported target: ${target}`);
515
538
  });
@@ -527,6 +550,7 @@ function makeMutationOptions(target, returnType, argsType) {
527
550
  return `MaybeRefOrGetter<${baseOption}> | ComputedRef<${baseOption}>`;
528
551
  })
529
552
  .with('svelte', () => `MutationOptions<${returnType}, DefaultError, ${argsType}>`)
553
+ .with('angular', () => `CreateMutationOptions<${returnType}, DefaultError, ${argsType}>`)
530
554
  .otherwise(() => {
531
555
  throw new sdk_1.PluginError(_1.name, `Unsupported target: ${target}`);
532
556
  });
package/generator.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zenstackhq/tanstack-query",
3
3
  "displayName": "ZenStack plugin for generating tanstack-query hooks",
4
- "version": "2.17.2",
4
+ "version": "2.18.1",
5
5
  "description": "ZenStack plugin for generating tanstack-query hooks",
6
6
  "main": "index.js",
7
7
  "exports": {
@@ -58,6 +58,12 @@
58
58
  "import": "./runtime-v5/svelte.mjs",
59
59
  "require": "./runtime-v5/svelte.js",
60
60
  "default": "./runtime-v5/svelte.js"
61
+ },
62
+ "./runtime-v5/angular": {
63
+ "types": "./runtime-v5/angular.d.ts",
64
+ "import": "./runtime-v5/angular.mjs",
65
+ "require": "./runtime-v5/angular.js",
66
+ "default": "./runtime-v5/angular.js"
61
67
  }
62
68
  },
63
69
  "repository": {
@@ -74,12 +80,16 @@
74
80
  "dependencies": {
75
81
  "cross-fetch": "^4.0.0",
76
82
  "semver": "^7.5.2",
77
- "ts-morph": "^16.0.0",
83
+ "ts-morph": "^26.0.0",
78
84
  "ts-pattern": "^4.3.0",
79
- "@zenstackhq/sdk": "2.17.2",
80
- "@zenstackhq/runtime": "2.17.2"
85
+ "@zenstackhq/sdk": "2.18.1",
86
+ "@zenstackhq/runtime": "2.18.1"
81
87
  },
82
88
  "devDependencies": {
89
+ "@angular/core": "^20.0.0",
90
+ "@angular/common": "^20.0.0",
91
+ "@angular/platform-browser": "^20.0.0",
92
+ "@tanstack/angular-query-v5": "npm:@tanstack/angular-query-experimental@5.84.x",
83
93
  "@tanstack/react-query": "^4.29.7",
84
94
  "@tanstack/react-query-v5": "npm:@tanstack/react-query@5.56.x",
85
95
  "@tanstack/svelte-query": "^4.29.7",
@@ -94,11 +104,14 @@
94
104
  "nock": "^13.3.6",
95
105
  "react": "18.2.0",
96
106
  "react-test-renderer": "^18.2.0",
107
+ "rxjs": "^7.8.0",
97
108
  "svelte": "^4.2.1",
98
109
  "swr": "^2.0.3",
99
110
  "tmp": "^0.2.3",
111
+ "typescript": "^5.0.0",
100
112
  "vue": "^3.3.4",
101
- "@zenstackhq/testtools": "2.17.2"
113
+ "zone.js": "^0.15.0",
114
+ "@zenstackhq/testtools": "2.18.1"
102
115
  },
103
116
  "scripts": {
104
117
  "clean": "rimraf dist",
@@ -0,0 +1,59 @@
1
+ import * as _tanstack_angular_query_v5 from '@tanstack/angular-query-experimental';
2
+ import { CreateQueryOptions, CreateInfiniteQueryOptions, InfiniteData, CreateMutationOptions } from '@tanstack/angular-query-experimental';
3
+ import { ModelMeta } from '@zenstackhq/runtime/cross';
4
+ import { InjectionToken } from '@angular/core';
5
+ import { A as APIContext, F as FetchFn, a as ExtraQueryOptions, E as ExtraMutationOptions } from './common-CXlL7vTW.mjs';
6
+
7
+ declare const AngularQueryContextKey: InjectionToken<APIContext>;
8
+ /**
9
+ * Provide context for the generated TanStack Query hooks.
10
+ */
11
+ declare function provideAngularQueryContext(context: APIContext): {
12
+ provide: InjectionToken<APIContext>;
13
+ useValue: APIContext;
14
+ };
15
+ /**
16
+ * Hooks context.
17
+ */
18
+ declare function getHooksContext(): {
19
+ fetch?: FetchFn;
20
+ logging?: boolean;
21
+ endpoint: string;
22
+ };
23
+ /**
24
+ * Creates an Angular TanStack 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 Angular query options object
30
+ * @param fetch The fetch function to use for sending the HTTP request
31
+ * @returns injectQuery hook
32
+ */
33
+ declare function useModelQuery<TQueryFnData, TData, TError>(model: string, url: string, args?: unknown, options?: Omit<CreateQueryOptions<TQueryFnData, TError, TData>, 'queryKey'> & ExtraQueryOptions, fetch?: FetchFn): _tanstack_angular_query_v5.CreateQueryResult<TData, TError>;
34
+ /**
35
+ * Creates an Angular TanStack Query infinite query.
36
+ *
37
+ * @param model The name of the model under query.
38
+ * @param url The request URL.
39
+ * @param args The initial request args object, URL-encoded and appended as "?q=" parameter
40
+ * @param options The Angular infinite query options object
41
+ * @param fetch The fetch function to use for sending the HTTP request
42
+ * @returns injectInfiniteQuery hook
43
+ */
44
+ declare function useInfiniteModelQuery<TQueryFnData, TData, TError>(model: string, url: string, args: unknown, options: Omit<CreateInfiniteQueryOptions<TQueryFnData, TError, InfiniteData<TData>>, 'queryKey' | 'initialPageParam'>, fetch?: FetchFn): _tanstack_angular_query_v5.CreateInfiniteQueryResult<InfiniteData<TData, unknown>, TError>;
45
+ /**
46
+ * Creates an Angular TanStack Query mutation.
47
+ *
48
+ * @param model The name of the model under mutation.
49
+ * @param method The HTTP method.
50
+ * @param url The request URL.
51
+ * @param modelMeta The model metadata.
52
+ * @param options The Angular mutation options.
53
+ * @param fetch The fetch function to use for sending the HTTP request
54
+ * @param checkReadBack Whether to check for read back errors and return undefined if found.
55
+ * @returns injectMutation hook
56
+ */
57
+ declare function useModelMutation<TArgs, TError, 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<CreateMutationOptions<Result, TError, TArgs>, 'mutationFn'> & ExtraMutationOptions, fetch?: FetchFn, checkReadBack?: C): _tanstack_angular_query_v5.CreateMutationResult<Result, TError, TArgs, unknown>;
58
+
59
+ export { AngularQueryContextKey, APIContext as RequestHandlerContext, getHooksContext, provideAngularQueryContext, useInfiniteModelQuery, useModelMutation, useModelQuery };
@@ -0,0 +1,59 @@
1
+ import * as _tanstack_angular_query_v5 from '@tanstack/angular-query-experimental';
2
+ import { CreateQueryOptions, CreateInfiniteQueryOptions, InfiniteData, CreateMutationOptions } from '@tanstack/angular-query-experimental';
3
+ import { ModelMeta } from '@zenstackhq/runtime/cross';
4
+ import { InjectionToken } from '@angular/core';
5
+ import { A as APIContext, F as FetchFn, a as ExtraQueryOptions, E as ExtraMutationOptions } from './common-CXlL7vTW.js';
6
+
7
+ declare const AngularQueryContextKey: InjectionToken<APIContext>;
8
+ /**
9
+ * Provide context for the generated TanStack Query hooks.
10
+ */
11
+ declare function provideAngularQueryContext(context: APIContext): {
12
+ provide: InjectionToken<APIContext>;
13
+ useValue: APIContext;
14
+ };
15
+ /**
16
+ * Hooks context.
17
+ */
18
+ declare function getHooksContext(): {
19
+ fetch?: FetchFn;
20
+ logging?: boolean;
21
+ endpoint: string;
22
+ };
23
+ /**
24
+ * Creates an Angular TanStack 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 Angular query options object
30
+ * @param fetch The fetch function to use for sending the HTTP request
31
+ * @returns injectQuery hook
32
+ */
33
+ declare function useModelQuery<TQueryFnData, TData, TError>(model: string, url: string, args?: unknown, options?: Omit<CreateQueryOptions<TQueryFnData, TError, TData>, 'queryKey'> & ExtraQueryOptions, fetch?: FetchFn): _tanstack_angular_query_v5.CreateQueryResult<TData, TError>;
34
+ /**
35
+ * Creates an Angular TanStack Query infinite query.
36
+ *
37
+ * @param model The name of the model under query.
38
+ * @param url The request URL.
39
+ * @param args The initial request args object, URL-encoded and appended as "?q=" parameter
40
+ * @param options The Angular infinite query options object
41
+ * @param fetch The fetch function to use for sending the HTTP request
42
+ * @returns injectInfiniteQuery hook
43
+ */
44
+ declare function useInfiniteModelQuery<TQueryFnData, TData, TError>(model: string, url: string, args: unknown, options: Omit<CreateInfiniteQueryOptions<TQueryFnData, TError, InfiniteData<TData>>, 'queryKey' | 'initialPageParam'>, fetch?: FetchFn): _tanstack_angular_query_v5.CreateInfiniteQueryResult<InfiniteData<TData, unknown>, TError>;
45
+ /**
46
+ * Creates an Angular TanStack Query mutation.
47
+ *
48
+ * @param model The name of the model under mutation.
49
+ * @param method The HTTP method.
50
+ * @param url The request URL.
51
+ * @param modelMeta The model metadata.
52
+ * @param options The Angular mutation options.
53
+ * @param fetch The fetch function to use for sending the HTTP request
54
+ * @param checkReadBack Whether to check for read back errors and return undefined if found.
55
+ * @returns injectMutation hook
56
+ */
57
+ declare function useModelMutation<TArgs, TError, 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<CreateMutationOptions<Result, TError, TArgs>, 'mutationFn'> & ExtraMutationOptions, fetch?: FetchFn, checkReadBack?: C): _tanstack_angular_query_v5.CreateMutationResult<Result, TError, TArgs, unknown>;
58
+
59
+ export { AngularQueryContextKey, APIContext as RequestHandlerContext, getHooksContext, provideAngularQueryContext, useInfiniteModelQuery, useModelMutation, useModelQuery };
@@ -0,0 +1,425 @@
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/angular.ts
80
+ var angular_exports = {};
81
+ __export(angular_exports, {
82
+ AngularQueryContextKey: () => AngularQueryContextKey,
83
+ getHooksContext: () => getHooksContext,
84
+ provideAngularQueryContext: () => provideAngularQueryContext,
85
+ useInfiniteModelQuery: () => useInfiniteModelQuery,
86
+ useModelMutation: () => useModelMutation,
87
+ useModelQuery: () => useModelQuery
88
+ });
89
+ module.exports = __toCommonJS(angular_exports);
90
+ var import_angular_query_v5 = require("@tanstack/angular-query-experimental");
91
+ var import_core = require("@angular/core");
92
+
93
+ // src/runtime/common.ts
94
+ var import_browser = require("@zenstackhq/runtime/browser");
95
+ var import_cross = require("@zenstackhq/runtime/cross");
96
+ var DEFAULT_QUERY_ENDPOINT = "/api/model";
97
+ var QUERY_KEY_PREFIX = "zenstack";
98
+ function fetcher(url, options, customFetch, checkReadBack) {
99
+ return __async(this, null, function* () {
100
+ var _a, _b, _c;
101
+ const _fetch = customFetch != null ? customFetch : (
102
+ // check if fetch is available globally
103
+ typeof fetch === "function" ? fetch : (
104
+ // fallback to 'cross-fetch' if otherwise
105
+ (yield import("cross-fetch")).default
106
+ )
107
+ );
108
+ const res = yield _fetch(url, options);
109
+ if (!res.ok) {
110
+ const errData = unmarshal(yield res.text());
111
+ 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") {
112
+ return void 0;
113
+ }
114
+ const error = new Error("An error occurred while fetching the data.");
115
+ error.info = errData.error;
116
+ error.status = res.status;
117
+ throw error;
118
+ }
119
+ const textResult = yield res.text();
120
+ try {
121
+ return unmarshal(textResult).data;
122
+ } catch (err) {
123
+ console.error(`Unable to deserialize data:`, textResult);
124
+ throw err;
125
+ }
126
+ });
127
+ }
128
+ function getQueryKey(model, urlOrOperation, args, options = { infinite: false, optimisticUpdate: true }) {
129
+ if (!urlOrOperation) {
130
+ throw new Error("Invalid urlOrOperation");
131
+ }
132
+ const operation = urlOrOperation.split("/").pop();
133
+ const infinite = options.infinite;
134
+ const optimisticUpdate2 = options.infinite ? false : options.optimisticUpdate;
135
+ return [QUERY_KEY_PREFIX, model, operation, args, { infinite, optimisticUpdate: optimisticUpdate2 }];
136
+ }
137
+ function marshal(value) {
138
+ const { data, meta } = (0, import_browser.serialize)(value);
139
+ if (meta) {
140
+ return JSON.stringify(__spreadProps(__spreadValues({}, data), { meta: { serialization: meta } }));
141
+ } else {
142
+ return JSON.stringify(data);
143
+ }
144
+ }
145
+ function unmarshal(value) {
146
+ var _a;
147
+ const parsed = JSON.parse(value);
148
+ if (typeof parsed === "object" && (parsed == null ? void 0 : parsed.data) && ((_a = parsed == null ? void 0 : parsed.meta) == null ? void 0 : _a.serialization)) {
149
+ const deserializedData = (0, import_browser.deserialize)(parsed.data, parsed.meta.serialization);
150
+ return __spreadProps(__spreadValues({}, parsed), { data: deserializedData });
151
+ } else {
152
+ return parsed;
153
+ }
154
+ }
155
+ function makeUrl(url, args) {
156
+ if (!args) {
157
+ return url;
158
+ }
159
+ const { data, meta } = (0, import_browser.serialize)(args);
160
+ let result = `${url}?q=${encodeURIComponent(JSON.stringify(data))}`;
161
+ if (meta) {
162
+ result += `&meta=${encodeURIComponent(JSON.stringify({ serialization: meta }))}`;
163
+ }
164
+ return result;
165
+ }
166
+ function setupInvalidation(model, operation, modelMeta, options, invalidate, logging = false) {
167
+ const origOnSuccess = options == null ? void 0 : options.onSuccess;
168
+ options.onSuccess = (...args) => __async(this, null, function* () {
169
+ const [_, variables] = args;
170
+ const predicate = yield getInvalidationPredicate(
171
+ model,
172
+ operation,
173
+ variables,
174
+ modelMeta,
175
+ logging
176
+ );
177
+ yield invalidate(predicate);
178
+ return origOnSuccess == null ? void 0 : origOnSuccess(...args);
179
+ });
180
+ }
181
+ function getInvalidationPredicate(model, operation, mutationArgs, modelMeta, logging = false) {
182
+ return __async(this, null, function* () {
183
+ const mutatedModels = yield (0, import_cross.getMutatedModels)(model, operation, mutationArgs, modelMeta);
184
+ return ({ queryKey }) => {
185
+ const [_, queryModel, , args] = queryKey;
186
+ if (mutatedModels.includes(queryModel)) {
187
+ if (logging) {
188
+ console.log(`Invalidating query ${JSON.stringify(queryKey)} due to mutation "${model}.${operation}"`);
189
+ }
190
+ return true;
191
+ }
192
+ if (args) {
193
+ if (findNestedRead(queryModel, mutatedModels, modelMeta, args)) {
194
+ if (logging) {
195
+ console.log(
196
+ `Invalidating query ${JSON.stringify(queryKey)} due to mutation "${model}.${operation}"`
197
+ );
198
+ }
199
+ return true;
200
+ }
201
+ }
202
+ return false;
203
+ };
204
+ });
205
+ }
206
+ function findNestedRead(visitingModel, targetModels, modelMeta, args) {
207
+ const modelsRead = (0, import_cross.getReadModels)(visitingModel, modelMeta, args);
208
+ return targetModels.some((m) => modelsRead.includes(m));
209
+ }
210
+ function setupOptimisticUpdate(model, operation, modelMeta, options, queryCache, setCache, invalidate, logging = false) {
211
+ const origOnMutate = options == null ? void 0 : options.onMutate;
212
+ const origOnSettled = options == null ? void 0 : options.onSettled;
213
+ options.onMutate = (...args) => __async(this, null, function* () {
214
+ const [variables] = args;
215
+ yield optimisticUpdate(
216
+ model,
217
+ operation,
218
+ variables,
219
+ options,
220
+ modelMeta,
221
+ queryCache,
222
+ setCache,
223
+ logging
224
+ );
225
+ return origOnMutate == null ? void 0 : origOnMutate(...args);
226
+ });
227
+ options.onSettled = (...args) => __async(this, null, function* () {
228
+ if (invalidate) {
229
+ const [, , variables] = args;
230
+ const predicate = yield getInvalidationPredicate(
231
+ model,
232
+ operation,
233
+ variables,
234
+ modelMeta,
235
+ logging
236
+ );
237
+ yield invalidate(predicate);
238
+ }
239
+ return origOnSettled == null ? void 0 : origOnSettled(...args);
240
+ });
241
+ }
242
+ function optimisticUpdate(mutationModel, mutationOp, mutationArgs, options, modelMeta, queryCache, setCache, logging = false) {
243
+ return __async(this, null, function* () {
244
+ for (const cacheItem of queryCache) {
245
+ const {
246
+ queryKey,
247
+ state: { data, error }
248
+ } = cacheItem;
249
+ if (!isZenStackQueryKey(queryKey)) {
250
+ continue;
251
+ }
252
+ if (error) {
253
+ if (logging) {
254
+ console.warn(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to error:`, error);
255
+ }
256
+ continue;
257
+ }
258
+ const [_, queryModel, queryOperation, queryArgs, queryOptions] = queryKey;
259
+ if (!(queryOptions == null ? void 0 : queryOptions.optimisticUpdate)) {
260
+ if (logging) {
261
+ console.log(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to opt-out`);
262
+ }
263
+ continue;
264
+ }
265
+ if (options.optimisticDataProvider) {
266
+ const providerResult = yield options.optimisticDataProvider({
267
+ queryModel,
268
+ queryOperation,
269
+ queryArgs,
270
+ currentData: data,
271
+ mutationArgs
272
+ });
273
+ if ((providerResult == null ? void 0 : providerResult.kind) === "Skip") {
274
+ if (logging) {
275
+ console.log(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to provider`);
276
+ }
277
+ continue;
278
+ } else if ((providerResult == null ? void 0 : providerResult.kind) === "Update") {
279
+ if (logging) {
280
+ console.log(`Optimistically updating query ${JSON.stringify(queryKey)} due to provider`);
281
+ }
282
+ setCache(queryKey, providerResult.data);
283
+ continue;
284
+ }
285
+ }
286
+ const mutatedData = yield (0, import_cross.applyMutation)(
287
+ queryModel,
288
+ queryOperation,
289
+ data,
290
+ mutationModel,
291
+ mutationOp,
292
+ mutationArgs,
293
+ modelMeta,
294
+ logging
295
+ );
296
+ if (mutatedData !== void 0) {
297
+ if (logging) {
298
+ console.log(
299
+ `Optimistically updating query ${JSON.stringify(
300
+ queryKey
301
+ )} due to mutation "${mutationModel}.${mutationOp}"`
302
+ );
303
+ }
304
+ setCache(queryKey, mutatedData);
305
+ }
306
+ }
307
+ });
308
+ }
309
+ function isZenStackQueryKey(queryKey) {
310
+ if (queryKey.length < 5) {
311
+ return false;
312
+ }
313
+ if (queryKey[0] !== QUERY_KEY_PREFIX) {
314
+ return false;
315
+ }
316
+ return true;
317
+ }
318
+
319
+ // src/runtime-v5/angular.ts
320
+ var isFn = (v) => typeof v === "function";
321
+ var AngularQueryContextKey = new import_core.InjectionToken("zenstack-angular-query-context");
322
+ function provideAngularQueryContext(context) {
323
+ return {
324
+ provide: AngularQueryContextKey,
325
+ useValue: context
326
+ };
327
+ }
328
+ function getHooksContext() {
329
+ const context = (0, import_core.inject)(AngularQueryContextKey, {
330
+ optional: true
331
+ }) || {
332
+ endpoint: DEFAULT_QUERY_ENDPOINT,
333
+ fetch: void 0,
334
+ logging: false
335
+ };
336
+ const _a = context, { endpoint } = _a, rest = __objRest(_a, ["endpoint"]);
337
+ return __spreadValues({ endpoint: endpoint != null ? endpoint : DEFAULT_QUERY_ENDPOINT }, rest);
338
+ }
339
+ function useModelQuery(model, url, args, options, fetch2) {
340
+ const query = (0, import_angular_query_v5.injectQuery)(() => {
341
+ const resolvedArgs = isFn(args) ? args() : args;
342
+ const reqUrl = makeUrl(url, resolvedArgs);
343
+ const queryKey = getQueryKey(model, url, resolvedArgs, {
344
+ infinite: false,
345
+ optimisticUpdate: (options == null ? void 0 : options.optimisticUpdate) !== false
346
+ });
347
+ return __spreadValues({
348
+ queryKey,
349
+ queryFn: ({ signal }) => fetcher(reqUrl, { signal }, fetch2, false)
350
+ }, options);
351
+ });
352
+ return query;
353
+ }
354
+ function useInfiniteModelQuery(model, url, args, options, fetch2) {
355
+ const query = (0, import_angular_query_v5.injectInfiniteQuery)(() => {
356
+ const resolvedArgs = isFn(args) ? args() : args;
357
+ const queryKey = getQueryKey(model, url, resolvedArgs, { infinite: true, optimisticUpdate: false });
358
+ return __spreadValues({
359
+ queryKey,
360
+ queryFn: ({ pageParam, signal }) => {
361
+ return fetcher(makeUrl(url, pageParam != null ? pageParam : resolvedArgs), { signal }, fetch2, false);
362
+ },
363
+ initialPageParam: resolvedArgs
364
+ }, options);
365
+ });
366
+ return query;
367
+ }
368
+ function useModelMutation(model, method, url, modelMeta, options, fetch2, checkReadBack) {
369
+ const queryClient = (0, import_core.inject)(import_angular_query_v5.QueryClient);
370
+ const mutationFn = (data) => {
371
+ const reqUrl = method === "DELETE" ? makeUrl(url, data) : url;
372
+ const fetchInit = __spreadValues({
373
+ method
374
+ }, method !== "DELETE" && {
375
+ headers: {
376
+ "content-type": "application/json"
377
+ },
378
+ body: marshal(data)
379
+ });
380
+ return fetcher(reqUrl, fetchInit, fetch2, checkReadBack);
381
+ };
382
+ const finalOptions = __spreadProps(__spreadValues({}, options), { mutationFn });
383
+ const operation = url.split("/").pop();
384
+ const invalidateQueries = (options == null ? void 0 : options.invalidateQueries) !== false;
385
+ const optimisticUpdate2 = !!(options == null ? void 0 : options.optimisticUpdate);
386
+ if (operation) {
387
+ const { logging } = getHooksContext();
388
+ if (invalidateQueries) {
389
+ setupInvalidation(
390
+ model,
391
+ operation,
392
+ modelMeta,
393
+ finalOptions,
394
+ (predicate) => queryClient.invalidateQueries({ predicate }),
395
+ logging
396
+ );
397
+ }
398
+ if (optimisticUpdate2) {
399
+ setupOptimisticUpdate(
400
+ model,
401
+ operation,
402
+ modelMeta,
403
+ finalOptions,
404
+ queryClient.getQueryCache().getAll(),
405
+ (queryKey, data) => {
406
+ queryClient.setQueryData(queryKey, data);
407
+ queryClient.cancelQueries({ queryKey }, { revert: false, silent: true });
408
+ },
409
+ invalidateQueries ? (predicate) => queryClient.invalidateQueries({ predicate }) : void 0,
410
+ logging
411
+ );
412
+ }
413
+ }
414
+ return (0, import_angular_query_v5.injectMutation)(() => finalOptions);
415
+ }
416
+ // Annotate the CommonJS export names for ESM import in node:
417
+ 0 && (module.exports = {
418
+ AngularQueryContextKey,
419
+ getHooksContext,
420
+ provideAngularQueryContext,
421
+ useInfiniteModelQuery,
422
+ useModelMutation,
423
+ useModelQuery
424
+ });
425
+ //# sourceMappingURL=angular.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime-v5/angular.ts","../../src/runtime/common.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n injectQuery,\n injectMutation,\n injectInfiniteQuery,\n QueryClient,\n type CreateQueryOptions,\n type CreateMutationOptions,\n type CreateInfiniteQueryOptions,\n type InfiniteData,\n} from '@tanstack/angular-query-v5';\nimport type { ModelMeta } from '@zenstackhq/runtime/cross';\nimport { inject, InjectionToken } from '@angular/core';\nimport {\n APIContext,\n DEFAULT_QUERY_ENDPOINT,\n fetcher,\n getQueryKey,\n makeUrl,\n marshal,\n setupInvalidation,\n setupOptimisticUpdate,\n type ExtraMutationOptions,\n type ExtraQueryOptions,\n type FetchFn,\n} from '../runtime/common';\n\nexport { APIContext as RequestHandlerContext } from '../runtime/common';\n\ntype AnyFn = (...a: unknown[]) => unknown;\nconst isFn = (v: unknown): v is AnyFn => typeof v === 'function';\n\nexport const AngularQueryContextKey = new InjectionToken<APIContext>('zenstack-angular-query-context');\n\n/**\n * Provide context for the generated TanStack Query hooks.\n */\nexport function provideAngularQueryContext(context: APIContext) {\n return {\n provide: AngularQueryContextKey,\n useValue: context,\n };\n}\n\n/**\n * Hooks context.\n */\nexport function getHooksContext() {\n const context = inject(AngularQueryContextKey, {\n optional: true,\n }) || {\n endpoint: DEFAULT_QUERY_ENDPOINT,\n fetch: undefined,\n logging: false,\n };\n\n const { endpoint, ...rest } = context;\n return { endpoint: endpoint ?? DEFAULT_QUERY_ENDPOINT, ...rest };\n}\n\n/**\n * Creates an Angular TanStack 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 Angular query options object\n * @param fetch The fetch function to use for sending the HTTP request\n * @returns injectQuery hook\n */\nexport function useModelQuery<TQueryFnData, TData, TError>(\n model: string,\n url: string,\n args?: unknown,\n options?: Omit<CreateQueryOptions<TQueryFnData, TError, TData>, 'queryKey'> & ExtraQueryOptions,\n fetch?: FetchFn\n) {\n const query = injectQuery(() => {\n const resolvedArgs = isFn(args) ? args() : args;\n\n const reqUrl = makeUrl(url, resolvedArgs);\n const queryKey = getQueryKey(model, url, resolvedArgs, {\n infinite: false,\n optimisticUpdate: options?.optimisticUpdate !== false,\n });\n return {\n queryKey,\n queryFn: ({ signal }) => fetcher<TQueryFnData, false>(reqUrl, { signal }, fetch, false),\n ...options,\n };\n });\n return query;\n}\n\n/**\n * Creates an Angular TanStack 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 Angular infinite query options object\n * @param fetch The fetch function to use for sending the HTTP request\n * @returns injectInfiniteQuery hook\n */\nexport function useInfiniteModelQuery<TQueryFnData, TData, TError>(\n model: string,\n url: string,\n args: unknown,\n options: Omit<\n CreateInfiniteQueryOptions<TQueryFnData, TError, InfiniteData<TData>>,\n 'queryKey' | 'initialPageParam'\n >,\n fetch?: FetchFn\n) {\n const query = injectInfiniteQuery(() => {\n const resolvedArgs = isFn(args) ? args() : args;\n\n const queryKey = getQueryKey(model, url, resolvedArgs, { infinite: true, optimisticUpdate: false });\n\n return {\n queryKey,\n queryFn: ({ pageParam, signal }) => {\n return fetcher<TQueryFnData, false>(makeUrl(url, pageParam ?? resolvedArgs), { signal }, fetch, false);\n },\n initialPageParam: resolvedArgs,\n ...options,\n };\n });\n return query;\n}\n\n/**\n * Creates an Angular TanStack Query mutation.\n *\n * @param model The name of the model under mutation.\n * @param method The HTTP method.\n * @param url The request URL.\n * @param modelMeta The model metadata.\n * @param options The Angular mutation options.\n * @param fetch The fetch function to use for sending the HTTP request\n * @param checkReadBack Whether to check for read back errors and return undefined if found.\n * @returns injectMutation hook\n */\nexport function useModelMutation<\n TArgs,\n TError,\n R = any,\n C extends boolean = boolean,\n Result = C extends true ? R | undefined : R\n>(\n model: string,\n method: 'POST' | 'PUT' | 'DELETE',\n url: string,\n modelMeta: ModelMeta,\n options?: Omit<CreateMutationOptions<Result, TError, TArgs>, 'mutationFn'> & ExtraMutationOptions,\n fetch?: FetchFn,\n checkReadBack?: C\n) {\n const queryClient = inject(QueryClient);\n const mutationFn = (data: unknown) => {\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 const operation = url.split('/').pop();\n const invalidateQueries = options?.invalidateQueries !== false;\n const optimisticUpdate = !!options?.optimisticUpdate;\n\n if (operation) {\n const { logging } = getHooksContext();\n if (invalidateQueries) {\n setupInvalidation(\n model,\n operation,\n modelMeta,\n finalOptions,\n (predicate) => queryClient.invalidateQueries({ predicate }),\n logging\n );\n }\n\n if (optimisticUpdate) {\n setupOptimisticUpdate(\n model,\n operation,\n modelMeta,\n finalOptions,\n queryClient.getQueryCache().getAll(),\n (queryKey, data) => {\n // update query cache\n queryClient.setQueryData<unknown>(queryKey, data);\n // cancel on-flight queries to avoid redundant cache updates,\n // the settlement of the current mutation will trigger a new revalidation\n queryClient.cancelQueries({ queryKey }, { revert: false, silent: true });\n },\n invalidateQueries ? (predicate) => queryClient.invalidateQueries({ predicate }) : undefined,\n logging\n );\n }\n }\n\n return injectMutation(() => 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 {\n applyMutation,\n getMutatedModels,\n getReadModels,\n type ModelMeta,\n type PrismaWriteActionType,\n} from '@zenstackhq/runtime/cross';\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 * Type for query and mutation errors.\n */\nexport type QueryError = Error & {\n /**\n * Additional error information.\n */\n info?: unknown;\n\n /**\n * HTTP status code.\n */\n status?: number;\n};\n\n/**\n * Result of optimistic data provider.\n */\nexport type OptimisticDataProviderResult = {\n /**\n * Kind of the result.\n * - Update: use the `data` field to update the query cache.\n * - Skip: skip the optimistic update for this query.\n * - ProceedDefault: proceed with the default optimistic update.\n */\n kind: 'Update' | 'Skip' | 'ProceedDefault';\n\n /**\n * Data to update the query cache. Only applicable if `kind` is 'Update'.\n *\n * If the data is an object with fields updated, it should have a `$optimistic`\n * field set to `true`. If it's an array and an element object is created or updated,\n * the element should have a `$optimistic` field set to `true`.\n */\n data?: any;\n};\n\n/**\n * Optimistic data provider.\n *\n * @param args Arguments.\n * @param args.queryModel The model of the query.\n * @param args.queryOperation The operation of the query, `findMany`, `count`, etc.\n * @param args.queryArgs The arguments of the query.\n * @param args.currentData The current cache data for the query.\n * @param args.mutationArgs The arguments of the mutation.\n */\nexport type OptimisticDataProvider = (args: {\n queryModel: string;\n queryOperation: string;\n queryArgs: any;\n currentData: any;\n mutationArgs: any;\n}) => OptimisticDataProviderResult | Promise<OptimisticDataProviderResult>;\n\n/**\n * Extra mutation options.\n */\nexport type ExtraMutationOptions = {\n /**\n * Whether to automatically invalidate queries potentially affected by the mutation. Defaults to `true`.\n */\n invalidateQueries?: boolean;\n\n /**\n * Whether to optimistically update queries potentially affected by the mutation. Defaults to `false`.\n */\n optimisticUpdate?: boolean;\n\n /**\n * A callback for computing optimistic update data for each query cache entry.\n */\n optimisticDataProvider?: OptimisticDataProvider;\n};\n\n/**\n * Extra query options.\n */\nexport type ExtraQueryOptions = {\n /**\n * Whether to opt-in to optimistic updates for this query. Defaults to `true`.\n */\n optimisticUpdate?: boolean;\n};\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 customFetch?: FetchFn,\n checkReadBack?: C\n): Promise<C extends true ? R | undefined : R> {\n // Note: 'cross-fetch' is supposed to handle fetch compatibility\n // but it doesn't work for cloudflare workers\n const _fetch =\n customFetch ??\n // check if fetch is available globally\n (typeof fetch === 'function'\n ? fetch\n : // fallback to 'cross-fetch' if otherwise\n (await import('cross-fetch')).default);\n\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: QueryError = new Error('An error occurred while fetching the data.');\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 = [\n string /* prefix */,\n string /* model */,\n string /* operation */,\n unknown /* args */,\n {\n infinite: boolean;\n optimisticUpdate: boolean;\n } /* flags */\n];\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 * @param options Query options, including `infinite` indicating if it's an infinite query (defaults to false), and `optimisticUpdate` indicating if optimistic updates are enabled (defaults to true).\n * @returns Query key\n */\nexport function getQueryKey(\n model: string,\n urlOrOperation: string,\n args: unknown,\n options: { infinite: boolean; optimisticUpdate: boolean } = { infinite: false, optimisticUpdate: true }\n): QueryKey {\n if (!urlOrOperation) {\n throw new Error('Invalid urlOrOperation');\n }\n const operation = urlOrOperation.split('/').pop();\n\n const infinite = options.infinite;\n // infinite query doesn't support optimistic updates\n const optimisticUpdate = options.infinite ? false : options.optimisticUpdate;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return [QUERY_KEY_PREFIX, model, operation!, args, { infinite, optimisticUpdate }];\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 (typeof parsed === 'object' && 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;\ntype InvalidateFunc = (predicate: InvalidationPredicate) => Promise<void>;\ntype MutationOptions = {\n onMutate?: (...args: any[]) => any;\n onSuccess?: (...args: any[]) => any;\n onSettled?: (...args: any[]) => any;\n};\n\n// sets up invalidation hook for a mutation\nexport function setupInvalidation(\n model: string,\n operation: string,\n modelMeta: ModelMeta,\n options: MutationOptions,\n invalidate: InvalidateFunc,\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 [_, queryModel, , args] = queryKey as QueryKey;\n\n if (mutatedModels.includes(queryModel)) {\n // direct match\n if (logging) {\n console.log(`Invalidating query ${JSON.stringify(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(\n `Invalidating query ${JSON.stringify(queryKey)} due to mutation \"${model}.${operation}\"`\n );\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\ntype QueryCache = {\n queryKey: readonly unknown[];\n state: {\n data: unknown;\n error: unknown;\n };\n}[];\n\ntype SetCacheFunc = (queryKey: readonly unknown[], data: unknown) => void;\n\n/**\n * Sets up optimistic update and invalidation (after settled) for a mutation.\n */\nexport function setupOptimisticUpdate(\n model: string,\n operation: string,\n modelMeta: ModelMeta,\n options: MutationOptions & ExtraMutationOptions,\n queryCache: QueryCache,\n setCache: SetCacheFunc,\n invalidate?: InvalidateFunc,\n logging = false\n) {\n const origOnMutate = options?.onMutate;\n const origOnSettled = options?.onSettled;\n\n // optimistic update on mutate\n options.onMutate = async (...args: unknown[]) => {\n const [variables] = args;\n await optimisticUpdate(\n model,\n operation as PrismaWriteActionType,\n variables,\n options,\n modelMeta,\n queryCache,\n setCache,\n logging\n );\n return origOnMutate?.(...args);\n };\n\n // invalidate on settled\n options.onSettled = async (...args: unknown[]) => {\n if (invalidate) {\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 }\n return origOnSettled?.(...args);\n };\n}\n\n// optimistically updates query cache\nasync function optimisticUpdate(\n mutationModel: string,\n mutationOp: string,\n mutationArgs: any,\n options: MutationOptions & ExtraMutationOptions,\n modelMeta: ModelMeta,\n queryCache: QueryCache,\n setCache: SetCacheFunc,\n logging = false\n) {\n for (const cacheItem of queryCache) {\n const {\n queryKey,\n state: { data, error },\n } = cacheItem;\n\n if (!isZenStackQueryKey(queryKey)) {\n // skip non-zenstack queries\n continue;\n }\n\n if (error) {\n if (logging) {\n console.warn(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to error:`, error);\n }\n continue;\n }\n\n const [_, queryModel, queryOperation, queryArgs, queryOptions] = queryKey;\n if (!queryOptions?.optimisticUpdate) {\n if (logging) {\n console.log(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to opt-out`);\n }\n continue;\n }\n\n if (options.optimisticDataProvider) {\n const providerResult = await options.optimisticDataProvider({\n queryModel,\n queryOperation,\n queryArgs,\n currentData: data,\n mutationArgs,\n });\n\n if (providerResult?.kind === 'Skip') {\n // skip\n if (logging) {\n console.log(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to provider`);\n }\n continue;\n } else if (providerResult?.kind === 'Update') {\n // update cache\n if (logging) {\n console.log(`Optimistically updating query ${JSON.stringify(queryKey)} due to provider`);\n }\n setCache(queryKey, providerResult.data);\n continue;\n }\n }\n\n // proceed with default optimistic update\n const mutatedData = await applyMutation(\n queryModel,\n queryOperation,\n data,\n mutationModel,\n mutationOp as PrismaWriteActionType,\n mutationArgs,\n modelMeta,\n logging\n );\n\n if (mutatedData !== undefined) {\n // mutation applicable to this query, update cache\n if (logging) {\n console.log(\n `Optimistically updating query ${JSON.stringify(\n queryKey\n )} due to mutation \"${mutationModel}.${mutationOp}\"`\n );\n }\n setCache(queryKey, mutatedData);\n }\n }\n}\n\nfunction isZenStackQueryKey(queryKey: readonly unknown[]): queryKey is QueryKey {\n if (queryKey.length < 5) {\n return false;\n }\n\n if (queryKey[0] !== QUERY_KEY_PREFIX) {\n return false;\n }\n\n return true;\n}\n"],"mappings":"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","names":["optimisticUpdate","fetch","optimisticUpdate"]}
@@ -0,0 +1,397 @@
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/angular.ts
54
+ import {
55
+ injectQuery,
56
+ injectMutation,
57
+ injectInfiniteQuery,
58
+ QueryClient
59
+ } from "@tanstack/angular-query-experimental";
60
+ import { inject, InjectionToken } from "@angular/core";
61
+
62
+ // src/runtime/common.ts
63
+ import { deserialize, serialize } from "@zenstackhq/runtime/browser";
64
+ import {
65
+ applyMutation,
66
+ getMutatedModels,
67
+ getReadModels
68
+ } from "@zenstackhq/runtime/cross";
69
+ var DEFAULT_QUERY_ENDPOINT = "/api/model";
70
+ var QUERY_KEY_PREFIX = "zenstack";
71
+ function fetcher(url, options, customFetch, checkReadBack) {
72
+ return __async(this, null, function* () {
73
+ var _a, _b, _c;
74
+ const _fetch = customFetch != null ? customFetch : (
75
+ // check if fetch is available globally
76
+ typeof fetch === "function" ? fetch : (
77
+ // fallback to 'cross-fetch' if otherwise
78
+ (yield import("cross-fetch")).default
79
+ )
80
+ );
81
+ const res = yield _fetch(url, options);
82
+ if (!res.ok) {
83
+ const errData = unmarshal(yield res.text());
84
+ 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") {
85
+ return void 0;
86
+ }
87
+ const error = new Error("An error occurred while fetching the data.");
88
+ error.info = errData.error;
89
+ error.status = res.status;
90
+ throw error;
91
+ }
92
+ const textResult = yield res.text();
93
+ try {
94
+ return unmarshal(textResult).data;
95
+ } catch (err) {
96
+ console.error(`Unable to deserialize data:`, textResult);
97
+ throw err;
98
+ }
99
+ });
100
+ }
101
+ function getQueryKey(model, urlOrOperation, args, options = { infinite: false, optimisticUpdate: true }) {
102
+ if (!urlOrOperation) {
103
+ throw new Error("Invalid urlOrOperation");
104
+ }
105
+ const operation = urlOrOperation.split("/").pop();
106
+ const infinite = options.infinite;
107
+ const optimisticUpdate2 = options.infinite ? false : options.optimisticUpdate;
108
+ return [QUERY_KEY_PREFIX, model, operation, args, { infinite, optimisticUpdate: optimisticUpdate2 }];
109
+ }
110
+ function marshal(value) {
111
+ const { data, meta } = serialize(value);
112
+ if (meta) {
113
+ return JSON.stringify(__spreadProps(__spreadValues({}, data), { meta: { serialization: meta } }));
114
+ } else {
115
+ return JSON.stringify(data);
116
+ }
117
+ }
118
+ function unmarshal(value) {
119
+ var _a;
120
+ const parsed = JSON.parse(value);
121
+ if (typeof parsed === "object" && (parsed == null ? void 0 : parsed.data) && ((_a = parsed == null ? void 0 : parsed.meta) == null ? void 0 : _a.serialization)) {
122
+ const deserializedData = deserialize(parsed.data, parsed.meta.serialization);
123
+ return __spreadProps(__spreadValues({}, parsed), { data: deserializedData });
124
+ } else {
125
+ return parsed;
126
+ }
127
+ }
128
+ function makeUrl(url, args) {
129
+ if (!args) {
130
+ return url;
131
+ }
132
+ const { data, meta } = serialize(args);
133
+ let result = `${url}?q=${encodeURIComponent(JSON.stringify(data))}`;
134
+ if (meta) {
135
+ result += `&meta=${encodeURIComponent(JSON.stringify({ serialization: meta }))}`;
136
+ }
137
+ return result;
138
+ }
139
+ function setupInvalidation(model, operation, modelMeta, options, invalidate, logging = false) {
140
+ const origOnSuccess = options == null ? void 0 : options.onSuccess;
141
+ options.onSuccess = (...args) => __async(this, null, function* () {
142
+ const [_, variables] = args;
143
+ const predicate = yield getInvalidationPredicate(
144
+ model,
145
+ operation,
146
+ variables,
147
+ modelMeta,
148
+ logging
149
+ );
150
+ yield invalidate(predicate);
151
+ return origOnSuccess == null ? void 0 : origOnSuccess(...args);
152
+ });
153
+ }
154
+ function getInvalidationPredicate(model, operation, mutationArgs, modelMeta, logging = false) {
155
+ return __async(this, null, function* () {
156
+ const mutatedModels = yield getMutatedModels(model, operation, mutationArgs, modelMeta);
157
+ return ({ queryKey }) => {
158
+ const [_, queryModel, , args] = queryKey;
159
+ if (mutatedModels.includes(queryModel)) {
160
+ if (logging) {
161
+ console.log(`Invalidating query ${JSON.stringify(queryKey)} due to mutation "${model}.${operation}"`);
162
+ }
163
+ return true;
164
+ }
165
+ if (args) {
166
+ if (findNestedRead(queryModel, mutatedModels, modelMeta, args)) {
167
+ if (logging) {
168
+ console.log(
169
+ `Invalidating query ${JSON.stringify(queryKey)} due to mutation "${model}.${operation}"`
170
+ );
171
+ }
172
+ return true;
173
+ }
174
+ }
175
+ return false;
176
+ };
177
+ });
178
+ }
179
+ function findNestedRead(visitingModel, targetModels, modelMeta, args) {
180
+ const modelsRead = getReadModels(visitingModel, modelMeta, args);
181
+ return targetModels.some((m) => modelsRead.includes(m));
182
+ }
183
+ function setupOptimisticUpdate(model, operation, modelMeta, options, queryCache, setCache, invalidate, logging = false) {
184
+ const origOnMutate = options == null ? void 0 : options.onMutate;
185
+ const origOnSettled = options == null ? void 0 : options.onSettled;
186
+ options.onMutate = (...args) => __async(this, null, function* () {
187
+ const [variables] = args;
188
+ yield optimisticUpdate(
189
+ model,
190
+ operation,
191
+ variables,
192
+ options,
193
+ modelMeta,
194
+ queryCache,
195
+ setCache,
196
+ logging
197
+ );
198
+ return origOnMutate == null ? void 0 : origOnMutate(...args);
199
+ });
200
+ options.onSettled = (...args) => __async(this, null, function* () {
201
+ if (invalidate) {
202
+ const [, , variables] = args;
203
+ const predicate = yield getInvalidationPredicate(
204
+ model,
205
+ operation,
206
+ variables,
207
+ modelMeta,
208
+ logging
209
+ );
210
+ yield invalidate(predicate);
211
+ }
212
+ return origOnSettled == null ? void 0 : origOnSettled(...args);
213
+ });
214
+ }
215
+ function optimisticUpdate(mutationModel, mutationOp, mutationArgs, options, modelMeta, queryCache, setCache, logging = false) {
216
+ return __async(this, null, function* () {
217
+ for (const cacheItem of queryCache) {
218
+ const {
219
+ queryKey,
220
+ state: { data, error }
221
+ } = cacheItem;
222
+ if (!isZenStackQueryKey(queryKey)) {
223
+ continue;
224
+ }
225
+ if (error) {
226
+ if (logging) {
227
+ console.warn(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to error:`, error);
228
+ }
229
+ continue;
230
+ }
231
+ const [_, queryModel, queryOperation, queryArgs, queryOptions] = queryKey;
232
+ if (!(queryOptions == null ? void 0 : queryOptions.optimisticUpdate)) {
233
+ if (logging) {
234
+ console.log(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to opt-out`);
235
+ }
236
+ continue;
237
+ }
238
+ if (options.optimisticDataProvider) {
239
+ const providerResult = yield options.optimisticDataProvider({
240
+ queryModel,
241
+ queryOperation,
242
+ queryArgs,
243
+ currentData: data,
244
+ mutationArgs
245
+ });
246
+ if ((providerResult == null ? void 0 : providerResult.kind) === "Skip") {
247
+ if (logging) {
248
+ console.log(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to provider`);
249
+ }
250
+ continue;
251
+ } else if ((providerResult == null ? void 0 : providerResult.kind) === "Update") {
252
+ if (logging) {
253
+ console.log(`Optimistically updating query ${JSON.stringify(queryKey)} due to provider`);
254
+ }
255
+ setCache(queryKey, providerResult.data);
256
+ continue;
257
+ }
258
+ }
259
+ const mutatedData = yield applyMutation(
260
+ queryModel,
261
+ queryOperation,
262
+ data,
263
+ mutationModel,
264
+ mutationOp,
265
+ mutationArgs,
266
+ modelMeta,
267
+ logging
268
+ );
269
+ if (mutatedData !== void 0) {
270
+ if (logging) {
271
+ console.log(
272
+ `Optimistically updating query ${JSON.stringify(
273
+ queryKey
274
+ )} due to mutation "${mutationModel}.${mutationOp}"`
275
+ );
276
+ }
277
+ setCache(queryKey, mutatedData);
278
+ }
279
+ }
280
+ });
281
+ }
282
+ function isZenStackQueryKey(queryKey) {
283
+ if (queryKey.length < 5) {
284
+ return false;
285
+ }
286
+ if (queryKey[0] !== QUERY_KEY_PREFIX) {
287
+ return false;
288
+ }
289
+ return true;
290
+ }
291
+
292
+ // src/runtime-v5/angular.ts
293
+ var isFn = (v) => typeof v === "function";
294
+ var AngularQueryContextKey = new InjectionToken("zenstack-angular-query-context");
295
+ function provideAngularQueryContext(context) {
296
+ return {
297
+ provide: AngularQueryContextKey,
298
+ useValue: context
299
+ };
300
+ }
301
+ function getHooksContext() {
302
+ const context = inject(AngularQueryContextKey, {
303
+ optional: true
304
+ }) || {
305
+ endpoint: DEFAULT_QUERY_ENDPOINT,
306
+ fetch: void 0,
307
+ logging: false
308
+ };
309
+ const _a = context, { endpoint } = _a, rest = __objRest(_a, ["endpoint"]);
310
+ return __spreadValues({ endpoint: endpoint != null ? endpoint : DEFAULT_QUERY_ENDPOINT }, rest);
311
+ }
312
+ function useModelQuery(model, url, args, options, fetch2) {
313
+ const query = injectQuery(() => {
314
+ const resolvedArgs = isFn(args) ? args() : args;
315
+ const reqUrl = makeUrl(url, resolvedArgs);
316
+ const queryKey = getQueryKey(model, url, resolvedArgs, {
317
+ infinite: false,
318
+ optimisticUpdate: (options == null ? void 0 : options.optimisticUpdate) !== false
319
+ });
320
+ return __spreadValues({
321
+ queryKey,
322
+ queryFn: ({ signal }) => fetcher(reqUrl, { signal }, fetch2, false)
323
+ }, options);
324
+ });
325
+ return query;
326
+ }
327
+ function useInfiniteModelQuery(model, url, args, options, fetch2) {
328
+ const query = injectInfiniteQuery(() => {
329
+ const resolvedArgs = isFn(args) ? args() : args;
330
+ const queryKey = getQueryKey(model, url, resolvedArgs, { infinite: true, optimisticUpdate: false });
331
+ return __spreadValues({
332
+ queryKey,
333
+ queryFn: ({ pageParam, signal }) => {
334
+ return fetcher(makeUrl(url, pageParam != null ? pageParam : resolvedArgs), { signal }, fetch2, false);
335
+ },
336
+ initialPageParam: resolvedArgs
337
+ }, options);
338
+ });
339
+ return query;
340
+ }
341
+ function useModelMutation(model, method, url, modelMeta, options, fetch2, checkReadBack) {
342
+ const queryClient = inject(QueryClient);
343
+ const mutationFn = (data) => {
344
+ const reqUrl = method === "DELETE" ? makeUrl(url, data) : url;
345
+ const fetchInit = __spreadValues({
346
+ method
347
+ }, method !== "DELETE" && {
348
+ headers: {
349
+ "content-type": "application/json"
350
+ },
351
+ body: marshal(data)
352
+ });
353
+ return fetcher(reqUrl, fetchInit, fetch2, checkReadBack);
354
+ };
355
+ const finalOptions = __spreadProps(__spreadValues({}, options), { mutationFn });
356
+ const operation = url.split("/").pop();
357
+ const invalidateQueries = (options == null ? void 0 : options.invalidateQueries) !== false;
358
+ const optimisticUpdate2 = !!(options == null ? void 0 : options.optimisticUpdate);
359
+ if (operation) {
360
+ const { logging } = getHooksContext();
361
+ if (invalidateQueries) {
362
+ setupInvalidation(
363
+ model,
364
+ operation,
365
+ modelMeta,
366
+ finalOptions,
367
+ (predicate) => queryClient.invalidateQueries({ predicate }),
368
+ logging
369
+ );
370
+ }
371
+ if (optimisticUpdate2) {
372
+ setupOptimisticUpdate(
373
+ model,
374
+ operation,
375
+ modelMeta,
376
+ finalOptions,
377
+ queryClient.getQueryCache().getAll(),
378
+ (queryKey, data) => {
379
+ queryClient.setQueryData(queryKey, data);
380
+ queryClient.cancelQueries({ queryKey }, { revert: false, silent: true });
381
+ },
382
+ invalidateQueries ? (predicate) => queryClient.invalidateQueries({ predicate }) : void 0,
383
+ logging
384
+ );
385
+ }
386
+ }
387
+ return injectMutation(() => finalOptions);
388
+ }
389
+ export {
390
+ AngularQueryContextKey,
391
+ getHooksContext,
392
+ provideAngularQueryContext,
393
+ useInfiniteModelQuery,
394
+ useModelMutation,
395
+ useModelQuery
396
+ };
397
+ //# sourceMappingURL=angular.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime-v5/angular.ts","../../src/runtime/common.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n injectQuery,\n injectMutation,\n injectInfiniteQuery,\n QueryClient,\n type CreateQueryOptions,\n type CreateMutationOptions,\n type CreateInfiniteQueryOptions,\n type InfiniteData,\n} from '@tanstack/angular-query-v5';\nimport type { ModelMeta } from '@zenstackhq/runtime/cross';\nimport { inject, InjectionToken } from '@angular/core';\nimport {\n APIContext,\n DEFAULT_QUERY_ENDPOINT,\n fetcher,\n getQueryKey,\n makeUrl,\n marshal,\n setupInvalidation,\n setupOptimisticUpdate,\n type ExtraMutationOptions,\n type ExtraQueryOptions,\n type FetchFn,\n} from '../runtime/common';\n\nexport { APIContext as RequestHandlerContext } from '../runtime/common';\n\ntype AnyFn = (...a: unknown[]) => unknown;\nconst isFn = (v: unknown): v is AnyFn => typeof v === 'function';\n\nexport const AngularQueryContextKey = new InjectionToken<APIContext>('zenstack-angular-query-context');\n\n/**\n * Provide context for the generated TanStack Query hooks.\n */\nexport function provideAngularQueryContext(context: APIContext) {\n return {\n provide: AngularQueryContextKey,\n useValue: context,\n };\n}\n\n/**\n * Hooks context.\n */\nexport function getHooksContext() {\n const context = inject(AngularQueryContextKey, {\n optional: true,\n }) || {\n endpoint: DEFAULT_QUERY_ENDPOINT,\n fetch: undefined,\n logging: false,\n };\n\n const { endpoint, ...rest } = context;\n return { endpoint: endpoint ?? DEFAULT_QUERY_ENDPOINT, ...rest };\n}\n\n/**\n * Creates an Angular TanStack 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 Angular query options object\n * @param fetch The fetch function to use for sending the HTTP request\n * @returns injectQuery hook\n */\nexport function useModelQuery<TQueryFnData, TData, TError>(\n model: string,\n url: string,\n args?: unknown,\n options?: Omit<CreateQueryOptions<TQueryFnData, TError, TData>, 'queryKey'> & ExtraQueryOptions,\n fetch?: FetchFn\n) {\n const query = injectQuery(() => {\n const resolvedArgs = isFn(args) ? args() : args;\n\n const reqUrl = makeUrl(url, resolvedArgs);\n const queryKey = getQueryKey(model, url, resolvedArgs, {\n infinite: false,\n optimisticUpdate: options?.optimisticUpdate !== false,\n });\n return {\n queryKey,\n queryFn: ({ signal }) => fetcher<TQueryFnData, false>(reqUrl, { signal }, fetch, false),\n ...options,\n };\n });\n return query;\n}\n\n/**\n * Creates an Angular TanStack 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 Angular infinite query options object\n * @param fetch The fetch function to use for sending the HTTP request\n * @returns injectInfiniteQuery hook\n */\nexport function useInfiniteModelQuery<TQueryFnData, TData, TError>(\n model: string,\n url: string,\n args: unknown,\n options: Omit<\n CreateInfiniteQueryOptions<TQueryFnData, TError, InfiniteData<TData>>,\n 'queryKey' | 'initialPageParam'\n >,\n fetch?: FetchFn\n) {\n const query = injectInfiniteQuery(() => {\n const resolvedArgs = isFn(args) ? args() : args;\n\n const queryKey = getQueryKey(model, url, resolvedArgs, { infinite: true, optimisticUpdate: false });\n\n return {\n queryKey,\n queryFn: ({ pageParam, signal }) => {\n return fetcher<TQueryFnData, false>(makeUrl(url, pageParam ?? resolvedArgs), { signal }, fetch, false);\n },\n initialPageParam: resolvedArgs,\n ...options,\n };\n });\n return query;\n}\n\n/**\n * Creates an Angular TanStack Query mutation.\n *\n * @param model The name of the model under mutation.\n * @param method The HTTP method.\n * @param url The request URL.\n * @param modelMeta The model metadata.\n * @param options The Angular mutation options.\n * @param fetch The fetch function to use for sending the HTTP request\n * @param checkReadBack Whether to check for read back errors and return undefined if found.\n * @returns injectMutation hook\n */\nexport function useModelMutation<\n TArgs,\n TError,\n R = any,\n C extends boolean = boolean,\n Result = C extends true ? R | undefined : R\n>(\n model: string,\n method: 'POST' | 'PUT' | 'DELETE',\n url: string,\n modelMeta: ModelMeta,\n options?: Omit<CreateMutationOptions<Result, TError, TArgs>, 'mutationFn'> & ExtraMutationOptions,\n fetch?: FetchFn,\n checkReadBack?: C\n) {\n const queryClient = inject(QueryClient);\n const mutationFn = (data: unknown) => {\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 const operation = url.split('/').pop();\n const invalidateQueries = options?.invalidateQueries !== false;\n const optimisticUpdate = !!options?.optimisticUpdate;\n\n if (operation) {\n const { logging } = getHooksContext();\n if (invalidateQueries) {\n setupInvalidation(\n model,\n operation,\n modelMeta,\n finalOptions,\n (predicate) => queryClient.invalidateQueries({ predicate }),\n logging\n );\n }\n\n if (optimisticUpdate) {\n setupOptimisticUpdate(\n model,\n operation,\n modelMeta,\n finalOptions,\n queryClient.getQueryCache().getAll(),\n (queryKey, data) => {\n // update query cache\n queryClient.setQueryData<unknown>(queryKey, data);\n // cancel on-flight queries to avoid redundant cache updates,\n // the settlement of the current mutation will trigger a new revalidation\n queryClient.cancelQueries({ queryKey }, { revert: false, silent: true });\n },\n invalidateQueries ? (predicate) => queryClient.invalidateQueries({ predicate }) : undefined,\n logging\n );\n }\n }\n\n return injectMutation(() => 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 {\n applyMutation,\n getMutatedModels,\n getReadModels,\n type ModelMeta,\n type PrismaWriteActionType,\n} from '@zenstackhq/runtime/cross';\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 * Type for query and mutation errors.\n */\nexport type QueryError = Error & {\n /**\n * Additional error information.\n */\n info?: unknown;\n\n /**\n * HTTP status code.\n */\n status?: number;\n};\n\n/**\n * Result of optimistic data provider.\n */\nexport type OptimisticDataProviderResult = {\n /**\n * Kind of the result.\n * - Update: use the `data` field to update the query cache.\n * - Skip: skip the optimistic update for this query.\n * - ProceedDefault: proceed with the default optimistic update.\n */\n kind: 'Update' | 'Skip' | 'ProceedDefault';\n\n /**\n * Data to update the query cache. Only applicable if `kind` is 'Update'.\n *\n * If the data is an object with fields updated, it should have a `$optimistic`\n * field set to `true`. If it's an array and an element object is created or updated,\n * the element should have a `$optimistic` field set to `true`.\n */\n data?: any;\n};\n\n/**\n * Optimistic data provider.\n *\n * @param args Arguments.\n * @param args.queryModel The model of the query.\n * @param args.queryOperation The operation of the query, `findMany`, `count`, etc.\n * @param args.queryArgs The arguments of the query.\n * @param args.currentData The current cache data for the query.\n * @param args.mutationArgs The arguments of the mutation.\n */\nexport type OptimisticDataProvider = (args: {\n queryModel: string;\n queryOperation: string;\n queryArgs: any;\n currentData: any;\n mutationArgs: any;\n}) => OptimisticDataProviderResult | Promise<OptimisticDataProviderResult>;\n\n/**\n * Extra mutation options.\n */\nexport type ExtraMutationOptions = {\n /**\n * Whether to automatically invalidate queries potentially affected by the mutation. Defaults to `true`.\n */\n invalidateQueries?: boolean;\n\n /**\n * Whether to optimistically update queries potentially affected by the mutation. Defaults to `false`.\n */\n optimisticUpdate?: boolean;\n\n /**\n * A callback for computing optimistic update data for each query cache entry.\n */\n optimisticDataProvider?: OptimisticDataProvider;\n};\n\n/**\n * Extra query options.\n */\nexport type ExtraQueryOptions = {\n /**\n * Whether to opt-in to optimistic updates for this query. Defaults to `true`.\n */\n optimisticUpdate?: boolean;\n};\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 customFetch?: FetchFn,\n checkReadBack?: C\n): Promise<C extends true ? R | undefined : R> {\n // Note: 'cross-fetch' is supposed to handle fetch compatibility\n // but it doesn't work for cloudflare workers\n const _fetch =\n customFetch ??\n // check if fetch is available globally\n (typeof fetch === 'function'\n ? fetch\n : // fallback to 'cross-fetch' if otherwise\n (await import('cross-fetch')).default);\n\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: QueryError = new Error('An error occurred while fetching the data.');\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 = [\n string /* prefix */,\n string /* model */,\n string /* operation */,\n unknown /* args */,\n {\n infinite: boolean;\n optimisticUpdate: boolean;\n } /* flags */\n];\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 * @param options Query options, including `infinite` indicating if it's an infinite query (defaults to false), and `optimisticUpdate` indicating if optimistic updates are enabled (defaults to true).\n * @returns Query key\n */\nexport function getQueryKey(\n model: string,\n urlOrOperation: string,\n args: unknown,\n options: { infinite: boolean; optimisticUpdate: boolean } = { infinite: false, optimisticUpdate: true }\n): QueryKey {\n if (!urlOrOperation) {\n throw new Error('Invalid urlOrOperation');\n }\n const operation = urlOrOperation.split('/').pop();\n\n const infinite = options.infinite;\n // infinite query doesn't support optimistic updates\n const optimisticUpdate = options.infinite ? false : options.optimisticUpdate;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return [QUERY_KEY_PREFIX, model, operation!, args, { infinite, optimisticUpdate }];\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 (typeof parsed === 'object' && 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;\ntype InvalidateFunc = (predicate: InvalidationPredicate) => Promise<void>;\ntype MutationOptions = {\n onMutate?: (...args: any[]) => any;\n onSuccess?: (...args: any[]) => any;\n onSettled?: (...args: any[]) => any;\n};\n\n// sets up invalidation hook for a mutation\nexport function setupInvalidation(\n model: string,\n operation: string,\n modelMeta: ModelMeta,\n options: MutationOptions,\n invalidate: InvalidateFunc,\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 [_, queryModel, , args] = queryKey as QueryKey;\n\n if (mutatedModels.includes(queryModel)) {\n // direct match\n if (logging) {\n console.log(`Invalidating query ${JSON.stringify(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(\n `Invalidating query ${JSON.stringify(queryKey)} due to mutation \"${model}.${operation}\"`\n );\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\ntype QueryCache = {\n queryKey: readonly unknown[];\n state: {\n data: unknown;\n error: unknown;\n };\n}[];\n\ntype SetCacheFunc = (queryKey: readonly unknown[], data: unknown) => void;\n\n/**\n * Sets up optimistic update and invalidation (after settled) for a mutation.\n */\nexport function setupOptimisticUpdate(\n model: string,\n operation: string,\n modelMeta: ModelMeta,\n options: MutationOptions & ExtraMutationOptions,\n queryCache: QueryCache,\n setCache: SetCacheFunc,\n invalidate?: InvalidateFunc,\n logging = false\n) {\n const origOnMutate = options?.onMutate;\n const origOnSettled = options?.onSettled;\n\n // optimistic update on mutate\n options.onMutate = async (...args: unknown[]) => {\n const [variables] = args;\n await optimisticUpdate(\n model,\n operation as PrismaWriteActionType,\n variables,\n options,\n modelMeta,\n queryCache,\n setCache,\n logging\n );\n return origOnMutate?.(...args);\n };\n\n // invalidate on settled\n options.onSettled = async (...args: unknown[]) => {\n if (invalidate) {\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 }\n return origOnSettled?.(...args);\n };\n}\n\n// optimistically updates query cache\nasync function optimisticUpdate(\n mutationModel: string,\n mutationOp: string,\n mutationArgs: any,\n options: MutationOptions & ExtraMutationOptions,\n modelMeta: ModelMeta,\n queryCache: QueryCache,\n setCache: SetCacheFunc,\n logging = false\n) {\n for (const cacheItem of queryCache) {\n const {\n queryKey,\n state: { data, error },\n } = cacheItem;\n\n if (!isZenStackQueryKey(queryKey)) {\n // skip non-zenstack queries\n continue;\n }\n\n if (error) {\n if (logging) {\n console.warn(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to error:`, error);\n }\n continue;\n }\n\n const [_, queryModel, queryOperation, queryArgs, queryOptions] = queryKey;\n if (!queryOptions?.optimisticUpdate) {\n if (logging) {\n console.log(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to opt-out`);\n }\n continue;\n }\n\n if (options.optimisticDataProvider) {\n const providerResult = await options.optimisticDataProvider({\n queryModel,\n queryOperation,\n queryArgs,\n currentData: data,\n mutationArgs,\n });\n\n if (providerResult?.kind === 'Skip') {\n // skip\n if (logging) {\n console.log(`Skipping optimistic update for ${JSON.stringify(queryKey)} due to provider`);\n }\n continue;\n } else if (providerResult?.kind === 'Update') {\n // update cache\n if (logging) {\n console.log(`Optimistically updating query ${JSON.stringify(queryKey)} due to provider`);\n }\n setCache(queryKey, providerResult.data);\n continue;\n }\n }\n\n // proceed with default optimistic update\n const mutatedData = await applyMutation(\n queryModel,\n queryOperation,\n data,\n mutationModel,\n mutationOp as PrismaWriteActionType,\n mutationArgs,\n modelMeta,\n logging\n );\n\n if (mutatedData !== undefined) {\n // mutation applicable to this query, update cache\n if (logging) {\n console.log(\n `Optimistically updating query ${JSON.stringify(\n queryKey\n )} due to mutation \"${mutationModel}.${mutationOp}\"`\n );\n }\n setCache(queryKey, mutatedData);\n }\n }\n}\n\nfunction isZenStackQueryKey(queryKey: readonly unknown[]): queryKey is QueryKey {\n if (queryKey.length < 5) {\n return false;\n }\n\n if (queryKey[0] !== QUERY_KEY_PREFIX) {\n return false;\n }\n\n return true;\n}\n"],"mappings":"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","names":["optimisticUpdate","fetch","optimisticUpdate"]}