@kubb/plugin-react-query 5.0.0-beta.4 → 5.0.0-beta.42
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/README.md +38 -91
- package/dist/{components-dAKJEn9b.cjs → components-DQAYLQW0.cjs} +409 -279
- package/dist/components-DQAYLQW0.cjs.map +1 -0
- package/dist/{components-DTGLu4UV.js → components-IArDg-DO.js} +379 -279
- package/dist/components-IArDg-DO.js.map +1 -0
- package/dist/components.cjs +1 -1
- package/dist/components.d.ts +5 -77
- package/dist/components.js +1 -1
- package/dist/{generators-C_fbcjpG.js → generators-B86BJkmW.js} +346 -419
- package/dist/generators-B86BJkmW.js.map +1 -0
- package/dist/{generators-CWEQsdO9.cjs → generators-BqGaMUH6.cjs} +344 -417
- package/dist/generators-BqGaMUH6.cjs.map +1 -0
- package/dist/generators.cjs +1 -1
- package/dist/generators.d.ts +49 -10
- package/dist/generators.js +1 -1
- package/dist/index.cjs +176 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +32 -4
- package/dist/index.js +177 -27
- package/dist/index.js.map +1 -1
- package/dist/types-Dh4HNR9K.d.ts +400 -0
- package/extension.yaml +910 -364
- package/package.json +15 -17
- package/src/components/InfiniteQuery.tsx +24 -13
- package/src/components/InfiniteQueryOptions.tsx +37 -55
- package/src/components/Mutation.tsx +35 -15
- package/src/components/MutationOptions.tsx +14 -13
- package/src/components/Query.tsx +14 -10
- package/src/components/QueryOptions.tsx +17 -34
- package/src/components/SuspenseInfiniteQuery.tsx +19 -13
- package/src/components/SuspenseInfiniteQueryOptions.tsx +28 -52
- package/src/components/SuspenseQuery.tsx +9 -10
- package/src/generators/customHookOptionsFileGenerator.tsx +18 -14
- package/src/generators/hookOptionsGenerator.tsx +44 -51
- package/src/generators/infiniteQueryGenerator.tsx +57 -78
- package/src/generators/mutationGenerator.tsx +53 -64
- package/src/generators/queryGenerator.tsx +54 -63
- package/src/generators/suspenseInfiniteQueryGenerator.tsx +52 -65
- package/src/generators/suspenseQueryGenerator.tsx +56 -76
- package/src/plugin.ts +45 -31
- package/src/resolvers/resolverReactQuery.ts +102 -6
- package/src/types.ts +199 -61
- package/src/utils.ts +10 -33
- package/dist/components-DTGLu4UV.js.map +0 -1
- package/dist/components-dAKJEn9b.cjs.map +0 -1
- package/dist/generators-CWEQsdO9.cjs.map +0 -1
- package/dist/generators-C_fbcjpG.js.map +0 -1
- package/dist/types-DfaFRSBf.d.ts +0 -284
- /package/dist/{chunk--u3MIqq1.js → chunk-C0LytTxp.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_components = require("./components-
|
|
1
|
+
const require_components = require("./components-DQAYLQW0.cjs");
|
|
2
2
|
let node_path = require("node:path");
|
|
3
3
|
node_path = require_components.__toESM(node_path);
|
|
4
4
|
let _kubb_core = require("@kubb/core");
|
|
@@ -9,23 +9,29 @@ let _kubb_renderer_jsx = require("@kubb/renderer-jsx");
|
|
|
9
9
|
let _kubb_renderer_jsx_jsx_runtime = require("@kubb/renderer-jsx/jsx-runtime");
|
|
10
10
|
let node_fs = require("node:fs");
|
|
11
11
|
node_fs = require_components.__toESM(node_fs);
|
|
12
|
-
let remeda = require("remeda");
|
|
13
12
|
//#region src/generators/customHookOptionsFileGenerator.tsx
|
|
13
|
+
/**
|
|
14
|
+
* Scaffolds the user-editable `useCustomHookOptions` file when
|
|
15
|
+
* `pluginReactQuery({ customOptions: { ... } })` is configured. The file is
|
|
16
|
+
* only created when it does not already exist, so user edits persist across
|
|
17
|
+
* regeneration.
|
|
18
|
+
*/
|
|
14
19
|
const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
15
20
|
name: "react-query-custom-hook-options-file",
|
|
16
|
-
renderer: _kubb_renderer_jsx.
|
|
21
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
17
22
|
operations(nodes, ctx) {
|
|
18
23
|
const { resolver, config, root } = ctx;
|
|
19
|
-
const { output, customOptions, query, group
|
|
24
|
+
const { output, customOptions, query, group } = ctx.options;
|
|
20
25
|
if (!customOptions) return null;
|
|
21
26
|
const override = output.override ?? config.output.override ?? false;
|
|
22
27
|
const { importPath, name } = customOptions;
|
|
28
|
+
const hookOptionsName = resolver.resolveHookOptionsName();
|
|
29
|
+
const customHookOptionsName = resolver.resolveCustomHookOptionsName();
|
|
23
30
|
const reactQueryImportPath = query ? query.importPath : "@tanstack/react-query";
|
|
24
|
-
const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
|
|
25
31
|
let hookFilePath;
|
|
26
32
|
const firstNode = nodes[0];
|
|
27
33
|
if (firstNode) {
|
|
28
|
-
const hookName =
|
|
34
|
+
const hookName = resolver.resolveQueryName(firstNode);
|
|
29
35
|
hookFilePath = resolver.resolveFile({
|
|
30
36
|
name: hookName,
|
|
31
37
|
extname: ".ts",
|
|
@@ -34,7 +40,7 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
34
40
|
}, {
|
|
35
41
|
root,
|
|
36
42
|
output,
|
|
37
|
-
group
|
|
43
|
+
group: group ?? void 0
|
|
38
44
|
}).path;
|
|
39
45
|
} else hookFilePath = node_path.default.resolve(root, "index.ts");
|
|
40
46
|
const ensureExtension = (filePath, extname) => {
|
|
@@ -63,7 +69,7 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
63
69
|
path: reactQueryImportPath
|
|
64
70
|
}),
|
|
65
71
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
66
|
-
name: [
|
|
72
|
+
name: [hookOptionsName],
|
|
67
73
|
root: file.path,
|
|
68
74
|
path: node_path.default.resolve(root, "./index.ts")
|
|
69
75
|
}),
|
|
@@ -72,9 +78,9 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
72
78
|
isExportable: true,
|
|
73
79
|
isIndexable: true,
|
|
74
80
|
children: [/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.Function, {
|
|
75
|
-
name:
|
|
81
|
+
name: customHookOptionsName,
|
|
76
82
|
params: "{ queryClient }: { queryClient: QueryClient }",
|
|
77
|
-
returnType:
|
|
83
|
+
returnType: `Partial<${hookOptionsName}>`,
|
|
78
84
|
children: `return {
|
|
79
85
|
// TODO: Define custom hook options here
|
|
80
86
|
// Example:
|
|
@@ -86,12 +92,12 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
86
92
|
}`
|
|
87
93
|
}), /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.Function, {
|
|
88
94
|
name,
|
|
89
|
-
generics:
|
|
95
|
+
generics: `T extends keyof ${hookOptionsName}`,
|
|
90
96
|
params: "{ hookName, operationId }: { hookName: T, operationId: string }",
|
|
91
|
-
returnType:
|
|
97
|
+
returnType: `${hookOptionsName}[T]`,
|
|
92
98
|
export: true,
|
|
93
99
|
children: `const queryClient = useQueryClient()
|
|
94
|
-
const customOptions =
|
|
100
|
+
const customOptions = ${customHookOptionsName}({ queryClient })
|
|
95
101
|
return customOptions[hookName] ?? {}`
|
|
96
102
|
})]
|
|
97
103
|
})
|
|
@@ -101,52 +107,54 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
101
107
|
});
|
|
102
108
|
//#endregion
|
|
103
109
|
//#region src/generators/hookOptionsGenerator.tsx
|
|
110
|
+
/**
|
|
111
|
+
* Emits the `HookOptions` type used by `customOptions`. Enabled when
|
|
112
|
+
* `pluginReactQuery({ customOptions: { ... } })`. The generated type lists
|
|
113
|
+
* every hook keyed by name so user-supplied options stay in sync with the
|
|
114
|
+
* generated hooks at compile time.
|
|
115
|
+
*/
|
|
104
116
|
const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
105
117
|
name: "react-query-hook-options",
|
|
106
|
-
renderer: _kubb_renderer_jsx.
|
|
118
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
107
119
|
operations(nodes, ctx) {
|
|
108
|
-
const { resolver, config, root
|
|
109
|
-
const { output, customOptions, query, mutation, suspense, infinite, group,
|
|
120
|
+
const { resolver, config, root } = ctx;
|
|
121
|
+
const { output, customOptions, query, mutation, suspense, infinite, group, override } = ctx.options;
|
|
110
122
|
if (!customOptions) return null;
|
|
123
|
+
const name = resolver.resolveHookOptionsName();
|
|
111
124
|
const resolvedFile = resolver.resolveFile({
|
|
112
|
-
name
|
|
125
|
+
name,
|
|
113
126
|
extname: ".ts"
|
|
114
127
|
}, {
|
|
115
128
|
root,
|
|
116
129
|
output,
|
|
117
|
-
group
|
|
130
|
+
group: group ?? void 0
|
|
118
131
|
});
|
|
119
132
|
const hookOptionsFile = {
|
|
120
133
|
...resolvedFile,
|
|
121
|
-
baseName:
|
|
122
|
-
path: resolvedFile.path.replace(/
|
|
134
|
+
baseName: `${name}.ts`,
|
|
135
|
+
path: resolvedFile.path.replace(/[^/\\]+\.ts$/, `${name}.ts`)
|
|
123
136
|
};
|
|
124
|
-
const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
|
|
125
137
|
const imports = [];
|
|
126
138
|
const hookOptions = {};
|
|
127
139
|
for (const node of nodes) {
|
|
128
|
-
|
|
140
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) continue;
|
|
129
141
|
const opOverrides = require_components.resolveOperationOverrides(node, override);
|
|
130
142
|
const nodeQuery = "query" in opOverrides ? opOverrides.query : query;
|
|
131
143
|
const nodeMutation = "mutation" in opOverrides ? opOverrides.mutation : mutation;
|
|
132
144
|
const nodeInfinite = "infinite" in opOverrides ? opOverrides.infinite : infinite;
|
|
133
|
-
const nodeInfiniteOptions = nodeInfinite && typeof nodeInfinite === "object" ? nodeInfinite :
|
|
145
|
+
const nodeInfiniteOptions = nodeInfinite && typeof nodeInfinite === "object" ? nodeInfinite : null;
|
|
134
146
|
const isQueryOp = nodeQuery === false ? !!query && query.methods.some((m) => node.method.toLowerCase() === m.toLowerCase()) : !!nodeQuery && nodeQuery.methods.some((m) => node.method.toLowerCase() === m.toLowerCase());
|
|
135
|
-
const
|
|
147
|
+
const nodeQueryMethods = new Set(nodeQuery ? nodeQuery.methods : []);
|
|
148
|
+
const isMutationOp = nodeMutation !== false && !isQueryOp && (nodeMutation ? nodeMutation.methods : []).some((m) => !nodeQueryMethods.has(m) && node.method.toLowerCase() === m.toLowerCase());
|
|
136
149
|
const isSuspenseOp = !!suspense;
|
|
137
150
|
const isInfiniteOp = !!nodeInfiniteOptions;
|
|
138
151
|
if (isQueryOp) {
|
|
139
|
-
const queryOptionsName =
|
|
140
|
-
const queryHookName =
|
|
141
|
-
const queryHookFile = resolver.resolveFile({
|
|
142
|
-
name: queryHookName,
|
|
143
|
-
extname: ".ts",
|
|
144
|
-
tag: node.tags[0] ?? "default",
|
|
145
|
-
path: node.path
|
|
146
|
-
}, {
|
|
152
|
+
const queryOptionsName = resolver.resolveQueryOptionsName(node);
|
|
153
|
+
const queryHookName = resolver.resolveQueryName(node);
|
|
154
|
+
const queryHookFile = resolver.resolveFile(require_components.operationFileEntry(node, queryHookName), {
|
|
147
155
|
root,
|
|
148
156
|
output,
|
|
149
|
-
group
|
|
157
|
+
group: group ?? void 0
|
|
150
158
|
});
|
|
151
159
|
imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
152
160
|
name: [queryOptionsName],
|
|
@@ -155,17 +163,12 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
155
163
|
}));
|
|
156
164
|
hookOptions[queryHookName] = `Partial<ReturnType<typeof ${queryOptionsName}>>`;
|
|
157
165
|
if (isSuspenseOp) {
|
|
158
|
-
const suspenseOptionsName =
|
|
159
|
-
const suspenseHookName =
|
|
160
|
-
const suspenseHookFile = resolver.resolveFile({
|
|
161
|
-
name: suspenseHookName,
|
|
162
|
-
extname: ".ts",
|
|
163
|
-
tag: node.tags[0] ?? "default",
|
|
164
|
-
path: node.path
|
|
165
|
-
}, {
|
|
166
|
+
const suspenseOptionsName = resolver.resolveSuspenseQueryOptionsName(node);
|
|
167
|
+
const suspenseHookName = resolver.resolveSuspenseQueryName(node);
|
|
168
|
+
const suspenseHookFile = resolver.resolveFile(require_components.operationFileEntry(node, suspenseHookName), {
|
|
166
169
|
root,
|
|
167
170
|
output,
|
|
168
|
-
group
|
|
171
|
+
group: group ?? void 0
|
|
169
172
|
});
|
|
170
173
|
imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
171
174
|
name: [suspenseOptionsName],
|
|
@@ -176,19 +179,14 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
176
179
|
}
|
|
177
180
|
if (isInfiniteOp) {
|
|
178
181
|
const normalizeKey = (key) => key.replace(/\?$/, "");
|
|
179
|
-
const queryParamKeys =
|
|
182
|
+
const queryParamKeys = require_components.getOperationParameters(node).query.map((p) => p.name);
|
|
180
183
|
if (nodeInfiniteOptions.queryParam ? queryParamKeys.some((k) => normalizeKey(k) === nodeInfiniteOptions.queryParam) : false) {
|
|
181
|
-
const infiniteOptionsName =
|
|
182
|
-
const infiniteHookName =
|
|
183
|
-
const infiniteHookFile = resolver.resolveFile({
|
|
184
|
-
name: infiniteHookName,
|
|
185
|
-
extname: ".ts",
|
|
186
|
-
tag: node.tags[0] ?? "default",
|
|
187
|
-
path: node.path
|
|
188
|
-
}, {
|
|
184
|
+
const infiniteOptionsName = resolver.resolveInfiniteQueryOptionsName(node);
|
|
185
|
+
const infiniteHookName = resolver.resolveInfiniteQueryName(node);
|
|
186
|
+
const infiniteHookFile = resolver.resolveFile(require_components.operationFileEntry(node, infiniteHookName), {
|
|
189
187
|
root,
|
|
190
188
|
output,
|
|
191
|
-
group
|
|
189
|
+
group: group ?? void 0
|
|
192
190
|
});
|
|
193
191
|
imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
194
192
|
name: [infiniteOptionsName],
|
|
@@ -197,17 +195,12 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
197
195
|
}));
|
|
198
196
|
hookOptions[infiniteHookName] = `Partial<ReturnType<typeof ${infiniteOptionsName}>>`;
|
|
199
197
|
if (isSuspenseOp) {
|
|
200
|
-
const suspenseInfiniteOptionsName =
|
|
201
|
-
const suspenseInfiniteHookName =
|
|
202
|
-
const suspenseInfiniteHookFile = resolver.resolveFile({
|
|
203
|
-
name: suspenseInfiniteHookName,
|
|
204
|
-
extname: ".ts",
|
|
205
|
-
tag: node.tags[0] ?? "default",
|
|
206
|
-
path: node.path
|
|
207
|
-
}, {
|
|
198
|
+
const suspenseInfiniteOptionsName = resolver.resolveSuspenseInfiniteQueryOptionsName(node);
|
|
199
|
+
const suspenseInfiniteHookName = resolver.resolveSuspenseInfiniteQueryName(node);
|
|
200
|
+
const suspenseInfiniteHookFile = resolver.resolveFile(require_components.operationFileEntry(node, suspenseInfiniteHookName), {
|
|
208
201
|
root,
|
|
209
202
|
output,
|
|
210
|
-
group
|
|
203
|
+
group: group ?? void 0
|
|
211
204
|
});
|
|
212
205
|
imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
213
206
|
name: [suspenseInfiniteOptionsName],
|
|
@@ -220,17 +213,12 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
220
213
|
}
|
|
221
214
|
}
|
|
222
215
|
if (isMutationOp) {
|
|
223
|
-
const mutationOptionsName =
|
|
224
|
-
const mutationHookName =
|
|
225
|
-
const mutationHookFile = resolver.resolveFile({
|
|
226
|
-
name: mutationHookName,
|
|
227
|
-
extname: ".ts",
|
|
228
|
-
tag: node.tags[0] ?? "default",
|
|
229
|
-
path: node.path
|
|
230
|
-
}, {
|
|
216
|
+
const mutationOptionsName = resolver.resolveMutationOptionsName(node);
|
|
217
|
+
const mutationHookName = resolver.resolveMutationName(node);
|
|
218
|
+
const mutationHookFile = resolver.resolveFile(require_components.operationFileEntry(node, mutationHookName), {
|
|
231
219
|
root,
|
|
232
220
|
output,
|
|
233
|
-
group
|
|
221
|
+
group: group ?? void 0
|
|
234
222
|
});
|
|
235
223
|
imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
236
224
|
name: [mutationOptionsName],
|
|
@@ -240,18 +228,25 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
240
228
|
hookOptions[mutationHookName] = `Partial<ReturnType<typeof ${mutationOptionsName}>>`;
|
|
241
229
|
}
|
|
242
230
|
}
|
|
243
|
-
const name = "HookOptions";
|
|
244
231
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
245
232
|
baseName: hookOptionsFile.baseName,
|
|
246
233
|
path: hookOptionsFile.path,
|
|
247
234
|
meta: hookOptionsFile.meta,
|
|
248
|
-
banner: resolver.resolveBanner(
|
|
235
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
249
236
|
output,
|
|
250
|
-
config
|
|
237
|
+
config,
|
|
238
|
+
file: {
|
|
239
|
+
path: hookOptionsFile.path,
|
|
240
|
+
baseName: hookOptionsFile.baseName
|
|
241
|
+
}
|
|
251
242
|
}),
|
|
252
|
-
footer: resolver.resolveFooter(
|
|
243
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
253
244
|
output,
|
|
254
|
-
config
|
|
245
|
+
config,
|
|
246
|
+
file: {
|
|
247
|
+
path: hookOptionsFile.path,
|
|
248
|
+
baseName: hookOptionsFile.baseName
|
|
249
|
+
}
|
|
255
250
|
}),
|
|
256
251
|
children: [imports, /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
|
|
257
252
|
name,
|
|
@@ -269,114 +264,101 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
269
264
|
});
|
|
270
265
|
//#endregion
|
|
271
266
|
//#region src/generators/infiniteQueryGenerator.tsx
|
|
267
|
+
/**
|
|
268
|
+
* Built-in generator for `useInfiniteQuery` hooks. Enabled when
|
|
269
|
+
* `pluginReactQuery({ infinite: { ... } })`. Emits one `useFooInfiniteQuery`
|
|
270
|
+
* hook per query operation, wiring the configured `nextParam` /
|
|
271
|
+
* `previousParam` paths into TanStack Query's cursor-based pagination.
|
|
272
|
+
*/
|
|
272
273
|
const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
273
274
|
name: "react-infinite-query",
|
|
274
|
-
renderer: _kubb_renderer_jsx.
|
|
275
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
275
276
|
operation(node, ctx) {
|
|
276
|
-
|
|
277
|
-
const {
|
|
277
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
278
|
+
const { config, driver, resolver, root } = ctx;
|
|
279
|
+
const { output, query, mutation, infinite, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options;
|
|
278
280
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
279
281
|
if (!pluginTs) return null;
|
|
280
282
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
281
283
|
const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
282
|
-
const
|
|
283
|
-
const
|
|
284
|
+
const queryMethods = new Set(query ? query.methods : []);
|
|
285
|
+
const isMutation = mutation !== false && !isQuery && (mutation ? mutation.methods : []).some((method) => !queryMethods.has(method) && node.method.toLowerCase() === method.toLowerCase());
|
|
286
|
+
const infiniteOptions = infinite && typeof infinite === "object" ? infinite : null;
|
|
284
287
|
if (!isQuery || isMutation || !infiniteOptions) return null;
|
|
285
288
|
const normalizeKey = (key) => key.replace(/\?$/, "");
|
|
286
|
-
const queryParamKeys =
|
|
289
|
+
const queryParamKeys = require_components.getOperationParameters(node).query.map((p) => p.name);
|
|
287
290
|
const hasQueryParam = infiniteOptions.queryParam ? queryParamKeys.some((k) => normalizeKey(k) === infiniteOptions.queryParam) : false;
|
|
288
291
|
const hasCursorParam = !infiniteOptions.cursorParam || true;
|
|
289
292
|
if (!hasQueryParam || !hasCursorParam) return null;
|
|
290
293
|
const importPath = query ? query.importPath : "@tanstack/react-query";
|
|
291
|
-
const
|
|
292
|
-
const
|
|
293
|
-
const
|
|
294
|
-
const
|
|
295
|
-
const
|
|
296
|
-
const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}InfiniteQueryKey`, "type", transformers);
|
|
297
|
-
const clientBaseName = require_components.transformName(`${baseName}Infinite`, "function", transformers);
|
|
294
|
+
const queryName = resolver.resolveInfiniteQueryName(node);
|
|
295
|
+
const queryOptionsName = resolver.resolveInfiniteQueryOptionsName(node);
|
|
296
|
+
const queryKeyName = resolver.resolveInfiniteQueryKeyName(node);
|
|
297
|
+
const queryKeyTypeName = resolver.resolveInfiniteQueryKeyTypeName(node);
|
|
298
|
+
const clientBaseName = resolver.resolveInfiniteClientName(node);
|
|
298
299
|
const meta = {
|
|
299
|
-
file: resolver.resolveFile({
|
|
300
|
-
name: queryName,
|
|
301
|
-
extname: ".ts",
|
|
302
|
-
tag: node.tags[0] ?? "default",
|
|
303
|
-
path: node.path
|
|
304
|
-
}, {
|
|
300
|
+
file: resolver.resolveFile(require_components.operationFileEntry(node, queryName), {
|
|
305
301
|
root,
|
|
306
302
|
output,
|
|
307
|
-
group
|
|
303
|
+
group: group ?? void 0
|
|
308
304
|
}),
|
|
309
|
-
fileTs: tsResolver.resolveFile({
|
|
310
|
-
name: node.operationId,
|
|
311
|
-
extname: ".ts",
|
|
312
|
-
tag: node.tags[0] ?? "default",
|
|
313
|
-
path: node.path
|
|
314
|
-
}, {
|
|
305
|
+
fileTs: tsResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
315
306
|
root,
|
|
316
307
|
output: pluginTs.options?.output ?? output,
|
|
317
|
-
group: pluginTs.options?.group
|
|
308
|
+
group: pluginTs.options?.group ?? void 0
|
|
318
309
|
})
|
|
319
310
|
};
|
|
320
|
-
const
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
|
|
329
|
-
...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
|
|
330
|
-
...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
|
|
331
|
-
].filter((name) => !!name && name !== queryKeyTypeName);
|
|
332
|
-
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
333
|
-
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
334
|
-
const fileZod = zodResolver ? zodResolver.resolveFile({
|
|
335
|
-
name: node.operationId,
|
|
336
|
-
extname: ".ts",
|
|
337
|
-
tag: node.tags[0] ?? "default",
|
|
338
|
-
path: node.path
|
|
339
|
-
}, {
|
|
311
|
+
const importedTypeNames = require_components.resolveOperationTypeNames(node, tsResolver, {
|
|
312
|
+
paramsCasing,
|
|
313
|
+
exclude: [queryKeyTypeName],
|
|
314
|
+
order: "body-response-first"
|
|
315
|
+
});
|
|
316
|
+
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
317
|
+
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
318
|
+
const fileZod = zodResolver ? zodResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
340
319
|
root,
|
|
341
320
|
output: pluginZod?.options?.output ?? output,
|
|
342
|
-
group: pluginZod?.options?.group
|
|
343
|
-
}) :
|
|
344
|
-
const zodSchemaNames =
|
|
321
|
+
group: pluginZod?.options?.group ?? void 0
|
|
322
|
+
}) : null;
|
|
323
|
+
const zodSchemaNames = require_components.resolveZodSchemaNames(node, zodResolver);
|
|
345
324
|
const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
|
|
346
325
|
const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
|
|
347
|
-
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) :
|
|
348
|
-
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
|
|
349
|
-
name: node.operationId,
|
|
350
|
-
extname: ".ts",
|
|
351
|
-
tag: node.tags[0] ?? "default",
|
|
352
|
-
path: node.path
|
|
353
|
-
}, {
|
|
326
|
+
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : null;
|
|
327
|
+
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
354
328
|
root,
|
|
355
329
|
output: clientPlugin?.options?.output ?? output,
|
|
356
|
-
group: clientPlugin?.options?.group
|
|
357
|
-
}) :
|
|
330
|
+
group: clientPlugin?.options?.group ?? void 0
|
|
331
|
+
}) : null;
|
|
358
332
|
const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientBaseName : clientBaseName;
|
|
359
333
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
360
334
|
baseName: meta.file.baseName,
|
|
361
335
|
path: meta.file.path,
|
|
362
336
|
meta: meta.file.meta,
|
|
363
|
-
banner: resolver.resolveBanner(
|
|
337
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
364
338
|
output,
|
|
365
|
-
config
|
|
339
|
+
config,
|
|
340
|
+
file: {
|
|
341
|
+
path: meta.file.path,
|
|
342
|
+
baseName: meta.file.baseName
|
|
343
|
+
}
|
|
366
344
|
}),
|
|
367
|
-
footer: resolver.resolveFooter(
|
|
345
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
368
346
|
output,
|
|
369
|
-
config
|
|
347
|
+
config,
|
|
348
|
+
file: {
|
|
349
|
+
path: meta.file.path,
|
|
350
|
+
baseName: meta.file.baseName
|
|
351
|
+
}
|
|
370
352
|
}),
|
|
371
353
|
children: [
|
|
372
|
-
|
|
354
|
+
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
373
355
|
name: zodSchemaNames,
|
|
374
356
|
root: meta.file.path,
|
|
375
357
|
path: fileZod.path
|
|
376
358
|
}),
|
|
377
359
|
clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
378
360
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
379
|
-
name: "
|
|
361
|
+
name: "client",
|
|
380
362
|
path: clientOptions.importPath
|
|
381
363
|
}),
|
|
382
364
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -395,9 +377,9 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
395
377
|
})
|
|
396
378
|
] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
397
379
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
398
|
-
name: ["
|
|
380
|
+
name: ["client"],
|
|
399
381
|
root: meta.file.path,
|
|
400
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
382
|
+
path: node_path.default.resolve(root, ".kubb/client.ts")
|
|
401
383
|
}),
|
|
402
384
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
403
385
|
name: [
|
|
@@ -406,13 +388,13 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
406
388
|
"ResponseErrorConfig"
|
|
407
389
|
],
|
|
408
390
|
root: meta.file.path,
|
|
409
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
391
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
410
392
|
isTypeOnly: true
|
|
411
393
|
}),
|
|
412
394
|
clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
413
395
|
name: ["ResponseConfig"],
|
|
414
396
|
root: meta.file.path,
|
|
415
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
397
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
416
398
|
isTypeOnly: true
|
|
417
399
|
})
|
|
418
400
|
] }),
|
|
@@ -517,107 +499,92 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
517
499
|
});
|
|
518
500
|
//#endregion
|
|
519
501
|
//#region src/generators/mutationGenerator.tsx
|
|
502
|
+
/**
|
|
503
|
+
* Built-in generator for `useMutation` hooks. Emits one `useFooMutation` hook
|
|
504
|
+
* per POST/PUT/DELETE operation (configurable via `mutation.methods`) plus
|
|
505
|
+
* the matching `fooMutationKey` / `fooMutationOptions` helpers.
|
|
506
|
+
*/
|
|
520
507
|
const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
521
508
|
name: "react-query-mutation",
|
|
522
|
-
renderer: _kubb_renderer_jsx.
|
|
509
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
523
510
|
operation(node, ctx) {
|
|
524
|
-
|
|
525
|
-
const {
|
|
511
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
512
|
+
const { config, driver, resolver, root } = ctx;
|
|
513
|
+
const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options;
|
|
526
514
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
527
515
|
if (!pluginTs) return null;
|
|
528
516
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
529
517
|
const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
530
|
-
|
|
518
|
+
const queryMethods = new Set(query ? query.methods : []);
|
|
519
|
+
if (!(mutation !== false && !isQuery && (mutation ? mutation.methods : []).some((method) => !queryMethods.has(method) && node.method.toLowerCase() === method.toLowerCase()))) return null;
|
|
531
520
|
const importPath = mutation ? mutation.importPath : "@tanstack/react-query";
|
|
532
|
-
const
|
|
533
|
-
const
|
|
534
|
-
const
|
|
535
|
-
const
|
|
536
|
-
const
|
|
537
|
-
const mutationKeyName = require_components.transformName(`${baseName}MutationKey`, "const", transformers);
|
|
538
|
-
const clientName = require_components.transformName(baseName, "function", transformers);
|
|
521
|
+
const mutationHookName = resolver.resolveMutationName(node);
|
|
522
|
+
const mutationTypeName = resolver.resolveMutationTypeName(node);
|
|
523
|
+
const mutationOptionsName = resolver.resolveMutationOptionsName(node);
|
|
524
|
+
const mutationKeyName = resolver.resolveMutationKeyName(node);
|
|
525
|
+
const clientName = resolver.resolveClientName(node);
|
|
539
526
|
const meta = {
|
|
540
|
-
file: resolver.resolveFile({
|
|
541
|
-
name: mutationHookName,
|
|
542
|
-
extname: ".ts",
|
|
543
|
-
tag: node.tags[0] ?? "default",
|
|
544
|
-
path: node.path
|
|
545
|
-
}, {
|
|
527
|
+
file: resolver.resolveFile(require_components.operationFileEntry(node, mutationHookName), {
|
|
546
528
|
root,
|
|
547
529
|
output,
|
|
548
|
-
group
|
|
530
|
+
group: group ?? void 0
|
|
549
531
|
}),
|
|
550
|
-
fileTs: tsResolver.resolveFile({
|
|
551
|
-
name: node.operationId,
|
|
552
|
-
extname: ".ts",
|
|
553
|
-
tag: node.tags[0] ?? "default",
|
|
554
|
-
path: node.path
|
|
555
|
-
}, {
|
|
532
|
+
fileTs: tsResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
556
533
|
root,
|
|
557
534
|
output: pluginTs.options?.output ?? output,
|
|
558
|
-
group: pluginTs.options?.group
|
|
535
|
+
group: pluginTs.options?.group ?? void 0
|
|
559
536
|
})
|
|
560
537
|
};
|
|
561
|
-
const
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
const
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),
|
|
569
|
-
...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
|
|
570
|
-
...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
|
|
571
|
-
...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
|
|
572
|
-
].filter((name) => !!name);
|
|
573
|
-
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
574
|
-
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
575
|
-
const fileZod = zodResolver ? zodResolver.resolveFile({
|
|
576
|
-
name: node.operationId,
|
|
577
|
-
extname: ".ts",
|
|
578
|
-
tag: node.tags[0] ?? "default",
|
|
579
|
-
path: node.path
|
|
580
|
-
}, {
|
|
538
|
+
const importedTypeNames = require_components.resolveOperationTypeNames(node, tsResolver, {
|
|
539
|
+
paramsCasing,
|
|
540
|
+
order: "body-response-first"
|
|
541
|
+
});
|
|
542
|
+
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
543
|
+
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
544
|
+
const fileZod = zodResolver ? zodResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
581
545
|
root,
|
|
582
546
|
output: pluginZod?.options?.output ?? output,
|
|
583
|
-
group: pluginZod?.options?.group
|
|
584
|
-
}) :
|
|
585
|
-
const zodSchemaNames =
|
|
547
|
+
group: pluginZod?.options?.group ?? void 0
|
|
548
|
+
}) : null;
|
|
549
|
+
const zodSchemaNames = require_components.resolveZodSchemaNames(node, zodResolver);
|
|
586
550
|
const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
|
|
587
551
|
const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
|
|
588
|
-
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) :
|
|
589
|
-
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
|
|
590
|
-
name: node.operationId,
|
|
591
|
-
extname: ".ts",
|
|
592
|
-
tag: node.tags[0] ?? "default",
|
|
593
|
-
path: node.path
|
|
594
|
-
}, {
|
|
552
|
+
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : null;
|
|
553
|
+
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
595
554
|
root,
|
|
596
555
|
output: clientPlugin?.options?.output ?? output,
|
|
597
|
-
group: clientPlugin?.options?.group
|
|
598
|
-
}) :
|
|
556
|
+
group: clientPlugin?.options?.group ?? void 0
|
|
557
|
+
}) : null;
|
|
599
558
|
const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
|
|
600
559
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
601
560
|
baseName: meta.file.baseName,
|
|
602
561
|
path: meta.file.path,
|
|
603
562
|
meta: meta.file.meta,
|
|
604
|
-
banner: resolver.resolveBanner(
|
|
563
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
605
564
|
output,
|
|
606
|
-
config
|
|
565
|
+
config,
|
|
566
|
+
file: {
|
|
567
|
+
path: meta.file.path,
|
|
568
|
+
baseName: meta.file.baseName
|
|
569
|
+
}
|
|
607
570
|
}),
|
|
608
|
-
footer: resolver.resolveFooter(
|
|
571
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
609
572
|
output,
|
|
610
|
-
config
|
|
573
|
+
config,
|
|
574
|
+
file: {
|
|
575
|
+
path: meta.file.path,
|
|
576
|
+
baseName: meta.file.baseName
|
|
577
|
+
}
|
|
611
578
|
}),
|
|
612
579
|
children: [
|
|
613
|
-
|
|
580
|
+
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
614
581
|
name: zodSchemaNames,
|
|
615
582
|
root: meta.file.path,
|
|
616
583
|
path: fileZod.path
|
|
617
584
|
}),
|
|
618
585
|
clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
619
586
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
620
|
-
name: "
|
|
587
|
+
name: "client",
|
|
621
588
|
path: clientOptions.importPath
|
|
622
589
|
}),
|
|
623
590
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -636,9 +603,9 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
636
603
|
})
|
|
637
604
|
] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
638
605
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
639
|
-
name: ["
|
|
606
|
+
name: ["client"],
|
|
640
607
|
root: meta.file.path,
|
|
641
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
608
|
+
path: node_path.default.resolve(root, ".kubb/client.ts")
|
|
642
609
|
}),
|
|
643
610
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
644
611
|
name: [
|
|
@@ -647,13 +614,13 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
647
614
|
"ResponseErrorConfig"
|
|
648
615
|
],
|
|
649
616
|
root: meta.file.path,
|
|
650
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
617
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
651
618
|
isTypeOnly: true
|
|
652
619
|
}),
|
|
653
620
|
clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
654
621
|
name: ["ResponseConfig"],
|
|
655
622
|
root: meta.file.path,
|
|
656
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
623
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
657
624
|
isTypeOnly: true
|
|
658
625
|
})
|
|
659
626
|
] }),
|
|
@@ -662,7 +629,7 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
662
629
|
root: meta.file.path,
|
|
663
630
|
path: clientFile.path
|
|
664
631
|
}),
|
|
665
|
-
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
632
|
+
!shouldUseClientPlugin && node.requestBody?.content?.some((e) => e.contentType === "multipart/form-data") && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
666
633
|
name: ["buildFormData"],
|
|
667
634
|
root: meta.file.path,
|
|
668
635
|
path: node_path.default.resolve(root, ".kubb/config.ts")
|
|
@@ -744,108 +711,94 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
744
711
|
});
|
|
745
712
|
//#endregion
|
|
746
713
|
//#region src/generators/queryGenerator.tsx
|
|
714
|
+
/**
|
|
715
|
+
* Built-in generator for `useQuery` hooks. Emits one `useFooQuery` hook per
|
|
716
|
+
* GET operation (configurable via `query.methods`) plus the matching
|
|
717
|
+
* `fooQueryKey` / `fooQueryOptions` helpers.
|
|
718
|
+
*/
|
|
747
719
|
const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
748
720
|
name: "react-query",
|
|
749
|
-
renderer: _kubb_renderer_jsx.
|
|
721
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
750
722
|
operation(node, ctx) {
|
|
751
|
-
|
|
752
|
-
const {
|
|
723
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
724
|
+
const { config, driver, resolver, root } = ctx;
|
|
725
|
+
const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options;
|
|
753
726
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
754
727
|
if (!pluginTs) return null;
|
|
755
728
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
756
729
|
const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
757
|
-
const
|
|
730
|
+
const queryMethods = new Set(query ? query.methods : []);
|
|
731
|
+
const isMutation = mutation !== false && !isQuery && (mutation ? mutation.methods : []).some((method) => !queryMethods.has(method) && node.method.toLowerCase() === method.toLowerCase());
|
|
758
732
|
if (!isQuery || isMutation) return null;
|
|
759
733
|
const importPath = query ? query.importPath : "@tanstack/react-query";
|
|
760
|
-
const
|
|
761
|
-
const
|
|
762
|
-
const
|
|
763
|
-
const
|
|
764
|
-
const
|
|
765
|
-
const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}QueryKey`, "type", transformers);
|
|
766
|
-
const clientName = require_components.transformName(baseName, "function", transformers);
|
|
734
|
+
const queryName = resolver.resolveQueryName(node);
|
|
735
|
+
const queryOptionsName = resolver.resolveQueryOptionsName(node);
|
|
736
|
+
const queryKeyName = resolver.resolveQueryKeyName(node);
|
|
737
|
+
const queryKeyTypeName = resolver.resolveQueryKeyTypeName(node);
|
|
738
|
+
const clientName = resolver.resolveClientName(node);
|
|
767
739
|
const meta = {
|
|
768
|
-
file: resolver.resolveFile({
|
|
769
|
-
name: queryName,
|
|
770
|
-
extname: ".ts",
|
|
771
|
-
tag: node.tags[0] ?? "default",
|
|
772
|
-
path: node.path
|
|
773
|
-
}, {
|
|
740
|
+
file: resolver.resolveFile(require_components.operationFileEntry(node, queryName), {
|
|
774
741
|
root,
|
|
775
742
|
output,
|
|
776
|
-
group
|
|
743
|
+
group: group ?? void 0
|
|
777
744
|
}),
|
|
778
|
-
fileTs: tsResolver.resolveFile({
|
|
779
|
-
name: node.operationId,
|
|
780
|
-
extname: ".ts",
|
|
781
|
-
tag: node.tags[0] ?? "default",
|
|
782
|
-
path: node.path
|
|
783
|
-
}, {
|
|
745
|
+
fileTs: tsResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
784
746
|
root,
|
|
785
747
|
output: pluginTs.options?.output ?? output,
|
|
786
|
-
group: pluginTs.options?.group
|
|
748
|
+
group: pluginTs.options?.group ?? void 0
|
|
787
749
|
})
|
|
788
750
|
};
|
|
789
|
-
const
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
|
|
798
|
-
...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
|
|
799
|
-
...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
|
|
800
|
-
].filter((name) => !!name && name !== queryKeyTypeName);
|
|
801
|
-
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
802
|
-
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
803
|
-
const fileZod = zodResolver ? zodResolver.resolveFile({
|
|
804
|
-
name: node.operationId,
|
|
805
|
-
extname: ".ts",
|
|
806
|
-
tag: node.tags[0] ?? "default",
|
|
807
|
-
path: node.path
|
|
808
|
-
}, {
|
|
751
|
+
const importedTypeNames = require_components.resolveOperationTypeNames(node, tsResolver, {
|
|
752
|
+
paramsCasing,
|
|
753
|
+
exclude: [queryKeyTypeName],
|
|
754
|
+
order: "body-response-first"
|
|
755
|
+
});
|
|
756
|
+
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
757
|
+
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
758
|
+
const fileZod = zodResolver ? zodResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
809
759
|
root,
|
|
810
760
|
output: pluginZod?.options?.output ?? output,
|
|
811
|
-
group: pluginZod?.options?.group
|
|
812
|
-
}) :
|
|
813
|
-
const zodSchemaNames =
|
|
761
|
+
group: pluginZod?.options?.group ?? void 0
|
|
762
|
+
}) : null;
|
|
763
|
+
const zodSchemaNames = require_components.resolveZodSchemaNames(node, zodResolver);
|
|
814
764
|
const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
|
|
815
765
|
const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
|
|
816
|
-
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) :
|
|
817
|
-
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
|
|
818
|
-
name: node.operationId,
|
|
819
|
-
extname: ".ts",
|
|
820
|
-
tag: node.tags[0] ?? "default",
|
|
821
|
-
path: node.path
|
|
822
|
-
}, {
|
|
766
|
+
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : null;
|
|
767
|
+
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
823
768
|
root,
|
|
824
769
|
output: clientPlugin?.options?.output ?? output,
|
|
825
|
-
group: clientPlugin?.options?.group
|
|
826
|
-
}) :
|
|
770
|
+
group: clientPlugin?.options?.group ?? void 0
|
|
771
|
+
}) : null;
|
|
827
772
|
const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
|
|
828
773
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
829
774
|
baseName: meta.file.baseName,
|
|
830
775
|
path: meta.file.path,
|
|
831
776
|
meta: meta.file.meta,
|
|
832
|
-
banner: resolver.resolveBanner(
|
|
777
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
833
778
|
output,
|
|
834
|
-
config
|
|
779
|
+
config,
|
|
780
|
+
file: {
|
|
781
|
+
path: meta.file.path,
|
|
782
|
+
baseName: meta.file.baseName
|
|
783
|
+
}
|
|
835
784
|
}),
|
|
836
|
-
footer: resolver.resolveFooter(
|
|
785
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
837
786
|
output,
|
|
838
|
-
config
|
|
787
|
+
config,
|
|
788
|
+
file: {
|
|
789
|
+
path: meta.file.path,
|
|
790
|
+
baseName: meta.file.baseName
|
|
791
|
+
}
|
|
839
792
|
}),
|
|
840
793
|
children: [
|
|
841
|
-
|
|
794
|
+
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
842
795
|
name: zodSchemaNames,
|
|
843
796
|
root: meta.file.path,
|
|
844
797
|
path: fileZod.path
|
|
845
798
|
}),
|
|
846
799
|
clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
847
800
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
848
|
-
name: "
|
|
801
|
+
name: "client",
|
|
849
802
|
path: clientOptions.importPath
|
|
850
803
|
}),
|
|
851
804
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -864,9 +817,9 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
864
817
|
})
|
|
865
818
|
] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
866
819
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
867
|
-
name: ["
|
|
820
|
+
name: ["client"],
|
|
868
821
|
root: meta.file.path,
|
|
869
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
822
|
+
path: node_path.default.resolve(root, ".kubb/client.ts")
|
|
870
823
|
}),
|
|
871
824
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
872
825
|
name: [
|
|
@@ -875,13 +828,13 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
875
828
|
"ResponseErrorConfig"
|
|
876
829
|
],
|
|
877
830
|
root: meta.file.path,
|
|
878
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
831
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
879
832
|
isTypeOnly: true
|
|
880
833
|
}),
|
|
881
834
|
clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
882
835
|
name: ["ResponseConfig"],
|
|
883
836
|
root: meta.file.path,
|
|
884
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
837
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
885
838
|
isTypeOnly: true
|
|
886
839
|
})
|
|
887
840
|
] }),
|
|
@@ -976,115 +929,101 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
976
929
|
});
|
|
977
930
|
//#endregion
|
|
978
931
|
//#region src/generators/suspenseInfiniteQueryGenerator.tsx
|
|
932
|
+
/**
|
|
933
|
+
* Built-in generator for `useSuspenseInfiniteQuery` hooks. Enabled when both
|
|
934
|
+
* `suspense` and `infinite` are configured. Combines suspense semantics with
|
|
935
|
+
* cursor-based pagination — handlers throw promises while loading and pull
|
|
936
|
+
* additional pages on demand.
|
|
937
|
+
*/
|
|
979
938
|
const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
980
939
|
name: "react-suspense-infinite-query",
|
|
981
|
-
renderer: _kubb_renderer_jsx.
|
|
940
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
982
941
|
operation(node, ctx) {
|
|
983
|
-
|
|
984
|
-
const {
|
|
942
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
943
|
+
const { config, driver, resolver, root } = ctx;
|
|
944
|
+
const { output, query, mutation, infinite, suspense, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options;
|
|
985
945
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
986
946
|
if (!pluginTs) return null;
|
|
987
947
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
988
948
|
const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
989
|
-
const
|
|
949
|
+
const queryMethods = new Set(query ? query.methods : []);
|
|
950
|
+
const isMutation = mutation !== false && !isQuery && (mutation ? mutation.methods : []).some((method) => !queryMethods.has(method) && node.method.toLowerCase() === method.toLowerCase());
|
|
990
951
|
const isSuspense = !!suspense;
|
|
991
|
-
const infiniteOptions = infinite && typeof infinite === "object" ? infinite :
|
|
952
|
+
const infiniteOptions = infinite && typeof infinite === "object" ? infinite : null;
|
|
992
953
|
if (!isQuery || isMutation || !isSuspense || !infiniteOptions) return null;
|
|
993
954
|
const normalizeKey = (key) => key.replace(/\?$/, "");
|
|
994
|
-
const queryParamKeys =
|
|
955
|
+
const queryParamKeys = require_components.getOperationParameters(node).query.map((p) => p.name);
|
|
995
956
|
const hasQueryParam = infiniteOptions.queryParam ? queryParamKeys.some((k) => normalizeKey(k) === infiniteOptions.queryParam) : false;
|
|
996
957
|
const hasCursorParam = !infiniteOptions.cursorParam || true;
|
|
997
958
|
if (!hasQueryParam || !hasCursorParam) return null;
|
|
998
959
|
const importPath = query ? query.importPath : "@tanstack/react-query";
|
|
999
|
-
const
|
|
1000
|
-
const
|
|
1001
|
-
const
|
|
1002
|
-
const
|
|
1003
|
-
const
|
|
1004
|
-
const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}SuspenseInfiniteQueryKey`, "type", transformers);
|
|
1005
|
-
const clientBaseName = require_components.transformName(`${baseName}SuspenseInfinite`, "function", transformers);
|
|
960
|
+
const queryName = resolver.resolveSuspenseInfiniteQueryName(node);
|
|
961
|
+
const queryOptionsName = resolver.resolveSuspenseInfiniteQueryOptionsName(node);
|
|
962
|
+
const queryKeyName = resolver.resolveSuspenseInfiniteQueryKeyName(node);
|
|
963
|
+
const queryKeyTypeName = resolver.resolveSuspenseInfiniteQueryKeyTypeName(node);
|
|
964
|
+
const clientBaseName = resolver.resolveSuspenseInfiniteClientName(node);
|
|
1006
965
|
const meta = {
|
|
1007
|
-
file: resolver.resolveFile({
|
|
1008
|
-
name: queryName,
|
|
1009
|
-
extname: ".ts",
|
|
1010
|
-
tag: node.tags[0] ?? "default",
|
|
1011
|
-
path: node.path
|
|
1012
|
-
}, {
|
|
966
|
+
file: resolver.resolveFile(require_components.operationFileEntry(node, queryName), {
|
|
1013
967
|
root,
|
|
1014
968
|
output,
|
|
1015
|
-
group
|
|
969
|
+
group: group ?? void 0
|
|
1016
970
|
}),
|
|
1017
|
-
fileTs: tsResolver.resolveFile({
|
|
1018
|
-
name: node.operationId,
|
|
1019
|
-
extname: ".ts",
|
|
1020
|
-
tag: node.tags[0] ?? "default",
|
|
1021
|
-
path: node.path
|
|
1022
|
-
}, {
|
|
971
|
+
fileTs: tsResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1023
972
|
root,
|
|
1024
973
|
output: pluginTs.options?.output ?? output,
|
|
1025
|
-
group: pluginTs.options?.group
|
|
974
|
+
group: pluginTs.options?.group ?? void 0
|
|
1026
975
|
})
|
|
1027
976
|
};
|
|
1028
|
-
const
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
const
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),
|
|
1036
|
-
...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
|
|
1037
|
-
...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
|
|
1038
|
-
...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
|
|
1039
|
-
].filter(Boolean);
|
|
1040
|
-
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
1041
|
-
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
1042
|
-
const fileZod = zodResolver ? zodResolver.resolveFile({
|
|
1043
|
-
name: node.operationId,
|
|
1044
|
-
extname: ".ts",
|
|
1045
|
-
tag: node.tags[0] ?? "default",
|
|
1046
|
-
path: node.path
|
|
1047
|
-
}, {
|
|
977
|
+
const importedTypeNames = require_components.resolveOperationTypeNames(node, tsResolver, {
|
|
978
|
+
paramsCasing,
|
|
979
|
+
order: "body-response-first"
|
|
980
|
+
});
|
|
981
|
+
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
982
|
+
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
983
|
+
const fileZod = zodResolver ? zodResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1048
984
|
root,
|
|
1049
985
|
output: pluginZod?.options?.output ?? output,
|
|
1050
|
-
group: pluginZod?.options?.group
|
|
1051
|
-
}) :
|
|
1052
|
-
const zodSchemaNames =
|
|
986
|
+
group: pluginZod?.options?.group ?? void 0
|
|
987
|
+
}) : null;
|
|
988
|
+
const zodSchemaNames = require_components.resolveZodSchemaNames(node, zodResolver);
|
|
1053
989
|
const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
|
|
1054
990
|
const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
|
|
1055
|
-
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) :
|
|
1056
|
-
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
|
|
1057
|
-
name: node.operationId,
|
|
1058
|
-
extname: ".ts",
|
|
1059
|
-
tag: node.tags[0] ?? "default",
|
|
1060
|
-
path: node.path
|
|
1061
|
-
}, {
|
|
991
|
+
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : null;
|
|
992
|
+
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1062
993
|
root,
|
|
1063
994
|
output: clientPlugin?.options?.output ?? output,
|
|
1064
|
-
group: clientPlugin?.options?.group
|
|
1065
|
-
}) :
|
|
995
|
+
group: clientPlugin?.options?.group ?? void 0
|
|
996
|
+
}) : null;
|
|
1066
997
|
const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientBaseName : clientBaseName;
|
|
1067
998
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
1068
999
|
baseName: meta.file.baseName,
|
|
1069
1000
|
path: meta.file.path,
|
|
1070
1001
|
meta: meta.file.meta,
|
|
1071
|
-
banner: resolver.resolveBanner(
|
|
1002
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
1072
1003
|
output,
|
|
1073
|
-
config
|
|
1004
|
+
config,
|
|
1005
|
+
file: {
|
|
1006
|
+
path: meta.file.path,
|
|
1007
|
+
baseName: meta.file.baseName
|
|
1008
|
+
}
|
|
1074
1009
|
}),
|
|
1075
|
-
footer: resolver.resolveFooter(
|
|
1010
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
1076
1011
|
output,
|
|
1077
|
-
config
|
|
1012
|
+
config,
|
|
1013
|
+
file: {
|
|
1014
|
+
path: meta.file.path,
|
|
1015
|
+
baseName: meta.file.baseName
|
|
1016
|
+
}
|
|
1078
1017
|
}),
|
|
1079
1018
|
children: [
|
|
1080
|
-
|
|
1019
|
+
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1081
1020
|
name: zodSchemaNames,
|
|
1082
1021
|
root: meta.file.path,
|
|
1083
1022
|
path: fileZod.path
|
|
1084
1023
|
}),
|
|
1085
1024
|
clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
1086
1025
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1087
|
-
name: "
|
|
1026
|
+
name: "client",
|
|
1088
1027
|
path: clientOptions.importPath
|
|
1089
1028
|
}),
|
|
1090
1029
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -1103,9 +1042,9 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1103
1042
|
})
|
|
1104
1043
|
] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
1105
1044
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1106
|
-
name: ["
|
|
1045
|
+
name: ["client"],
|
|
1107
1046
|
root: meta.file.path,
|
|
1108
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1047
|
+
path: node_path.default.resolve(root, ".kubb/client.ts")
|
|
1109
1048
|
}),
|
|
1110
1049
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1111
1050
|
name: [
|
|
@@ -1114,13 +1053,13 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1114
1053
|
"ResponseErrorConfig"
|
|
1115
1054
|
],
|
|
1116
1055
|
root: meta.file.path,
|
|
1117
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1056
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
1118
1057
|
isTypeOnly: true
|
|
1119
1058
|
}),
|
|
1120
1059
|
clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1121
1060
|
name: ["ResponseConfig"],
|
|
1122
1061
|
root: meta.file.path,
|
|
1123
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1062
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
1124
1063
|
isTypeOnly: true
|
|
1125
1064
|
})
|
|
1126
1065
|
] }),
|
|
@@ -1225,108 +1164,95 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1225
1164
|
});
|
|
1226
1165
|
//#endregion
|
|
1227
1166
|
//#region src/generators/suspenseQueryGenerator.tsx
|
|
1167
|
+
/**
|
|
1168
|
+
* Built-in generator for `useSuspenseQuery` hooks. Enabled when
|
|
1169
|
+
* `pluginReactQuery({ suspense: {} })`. Emits one `useFooSuspenseQuery` hook
|
|
1170
|
+
* per query operation. Suspense queries throw promises while loading and
|
|
1171
|
+
* require a `<Suspense>` boundary in the React tree. TanStack Query v5+ only.
|
|
1172
|
+
*/
|
|
1228
1173
|
const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
1229
1174
|
name: "react-suspense-query",
|
|
1230
|
-
renderer: _kubb_renderer_jsx.
|
|
1175
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
1231
1176
|
operation(node, ctx) {
|
|
1232
|
-
|
|
1233
|
-
const {
|
|
1177
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
1178
|
+
const { config, driver, resolver, root } = ctx;
|
|
1179
|
+
const { output, query, mutation, suspense, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options;
|
|
1234
1180
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
1235
1181
|
if (!pluginTs) return null;
|
|
1236
1182
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
1237
1183
|
const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
1238
|
-
const
|
|
1184
|
+
const queryMethods = new Set(query ? query.methods : []);
|
|
1185
|
+
const isMutation = mutation !== false && !isQuery && (mutation ? mutation.methods : []).some((method) => !queryMethods.has(method) && node.method.toLowerCase() === method.toLowerCase());
|
|
1239
1186
|
if (!isQuery || isMutation || !!!suspense) return null;
|
|
1240
1187
|
const importPath = query ? query.importPath : "@tanstack/react-query";
|
|
1241
|
-
const
|
|
1242
|
-
const
|
|
1243
|
-
const
|
|
1244
|
-
const
|
|
1245
|
-
const
|
|
1246
|
-
const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}SuspenseQueryKey`, "type", transformers);
|
|
1247
|
-
const clientName = require_components.transformName(`${baseName}Suspense`, "function", transformers);
|
|
1188
|
+
const queryName = resolver.resolveSuspenseQueryName(node);
|
|
1189
|
+
const queryOptionsName = resolver.resolveSuspenseQueryOptionsName(node);
|
|
1190
|
+
const queryKeyName = resolver.resolveSuspenseQueryKeyName(node);
|
|
1191
|
+
const queryKeyTypeName = resolver.resolveSuspenseQueryKeyTypeName(node);
|
|
1192
|
+
const clientName = resolver.resolveSuspenseClientName(node);
|
|
1248
1193
|
const meta = {
|
|
1249
|
-
file: resolver.resolveFile({
|
|
1250
|
-
name: queryName,
|
|
1251
|
-
extname: ".ts",
|
|
1252
|
-
tag: node.tags[0] ?? "default",
|
|
1253
|
-
path: node.path
|
|
1254
|
-
}, {
|
|
1194
|
+
file: resolver.resolveFile(require_components.operationFileEntry(node, queryName), {
|
|
1255
1195
|
root,
|
|
1256
1196
|
output,
|
|
1257
|
-
group
|
|
1197
|
+
group: group ?? void 0
|
|
1258
1198
|
}),
|
|
1259
|
-
fileTs: tsResolver.resolveFile({
|
|
1260
|
-
name: node.operationId,
|
|
1261
|
-
extname: ".ts",
|
|
1262
|
-
tag: node.tags[0] ?? "default",
|
|
1263
|
-
path: node.path
|
|
1264
|
-
}, {
|
|
1199
|
+
fileTs: tsResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1265
1200
|
root,
|
|
1266
1201
|
output: pluginTs.options?.output ?? output,
|
|
1267
|
-
group: pluginTs.options?.group
|
|
1202
|
+
group: pluginTs.options?.group ?? void 0
|
|
1268
1203
|
})
|
|
1269
1204
|
};
|
|
1270
|
-
const
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
|
|
1279
|
-
...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
|
|
1280
|
-
...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
|
|
1281
|
-
].filter((name) => !!name && name !== queryKeyTypeName);
|
|
1282
|
-
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
1283
|
-
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
1284
|
-
const fileZod = zodResolver ? zodResolver.resolveFile({
|
|
1285
|
-
name: node.operationId,
|
|
1286
|
-
extname: ".ts",
|
|
1287
|
-
tag: node.tags[0] ?? "default",
|
|
1288
|
-
path: node.path
|
|
1289
|
-
}, {
|
|
1205
|
+
const importedTypeNames = require_components.resolveOperationTypeNames(node, tsResolver, {
|
|
1206
|
+
paramsCasing,
|
|
1207
|
+
exclude: [queryKeyTypeName],
|
|
1208
|
+
order: "body-response-first"
|
|
1209
|
+
});
|
|
1210
|
+
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
1211
|
+
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
1212
|
+
const fileZod = zodResolver ? zodResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1290
1213
|
root,
|
|
1291
1214
|
output: pluginZod?.options?.output ?? output,
|
|
1292
|
-
group: pluginZod?.options?.group
|
|
1293
|
-
}) :
|
|
1294
|
-
const zodSchemaNames =
|
|
1215
|
+
group: pluginZod?.options?.group ?? void 0
|
|
1216
|
+
}) : null;
|
|
1217
|
+
const zodSchemaNames = require_components.resolveZodSchemaNames(node, zodResolver);
|
|
1295
1218
|
const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
|
|
1296
1219
|
const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
|
|
1297
|
-
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) :
|
|
1298
|
-
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
|
|
1299
|
-
name: node.operationId,
|
|
1300
|
-
extname: ".ts",
|
|
1301
|
-
tag: node.tags[0] ?? "default",
|
|
1302
|
-
path: node.path
|
|
1303
|
-
}, {
|
|
1220
|
+
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : null;
|
|
1221
|
+
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1304
1222
|
root,
|
|
1305
1223
|
output: clientPlugin?.options?.output ?? output,
|
|
1306
|
-
group: clientPlugin?.options?.group
|
|
1307
|
-
}) :
|
|
1224
|
+
group: clientPlugin?.options?.group ?? void 0
|
|
1225
|
+
}) : null;
|
|
1308
1226
|
const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
|
|
1309
1227
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
1310
1228
|
baseName: meta.file.baseName,
|
|
1311
1229
|
path: meta.file.path,
|
|
1312
1230
|
meta: meta.file.meta,
|
|
1313
|
-
banner: resolver.resolveBanner(
|
|
1231
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
1314
1232
|
output,
|
|
1315
|
-
config
|
|
1233
|
+
config,
|
|
1234
|
+
file: {
|
|
1235
|
+
path: meta.file.path,
|
|
1236
|
+
baseName: meta.file.baseName
|
|
1237
|
+
}
|
|
1316
1238
|
}),
|
|
1317
|
-
footer: resolver.resolveFooter(
|
|
1239
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
1318
1240
|
output,
|
|
1319
|
-
config
|
|
1241
|
+
config,
|
|
1242
|
+
file: {
|
|
1243
|
+
path: meta.file.path,
|
|
1244
|
+
baseName: meta.file.baseName
|
|
1245
|
+
}
|
|
1320
1246
|
}),
|
|
1321
1247
|
children: [
|
|
1322
|
-
|
|
1248
|
+
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1323
1249
|
name: zodSchemaNames,
|
|
1324
1250
|
root: meta.file.path,
|
|
1325
1251
|
path: fileZod.path
|
|
1326
1252
|
}),
|
|
1327
1253
|
clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
1328
1254
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1329
|
-
name: "
|
|
1255
|
+
name: "client",
|
|
1330
1256
|
path: clientOptions.importPath
|
|
1331
1257
|
}),
|
|
1332
1258
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -1345,9 +1271,9 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1345
1271
|
})
|
|
1346
1272
|
] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
1347
1273
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1348
|
-
name: ["
|
|
1274
|
+
name: ["client"],
|
|
1349
1275
|
root: meta.file.path,
|
|
1350
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1276
|
+
path: node_path.default.resolve(root, ".kubb/client.ts")
|
|
1351
1277
|
}),
|
|
1352
1278
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1353
1279
|
name: [
|
|
@@ -1356,13 +1282,13 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1356
1282
|
"ResponseErrorConfig"
|
|
1357
1283
|
],
|
|
1358
1284
|
root: meta.file.path,
|
|
1359
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1285
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
1360
1286
|
isTypeOnly: true
|
|
1361
1287
|
}),
|
|
1362
1288
|
clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1363
1289
|
name: ["ResponseConfig"],
|
|
1364
1290
|
root: meta.file.path,
|
|
1365
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1291
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
1366
1292
|
isTypeOnly: true
|
|
1367
1293
|
})
|
|
1368
1294
|
] }),
|
|
@@ -1420,7 +1346,8 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1420
1346
|
paramsCasing,
|
|
1421
1347
|
paramsType,
|
|
1422
1348
|
pathParamsType,
|
|
1423
|
-
dataReturnType: clientOptions.dataReturnType || "data"
|
|
1349
|
+
dataReturnType: clientOptions.dataReturnType || "data",
|
|
1350
|
+
suspense: true
|
|
1424
1351
|
}),
|
|
1425
1352
|
suspense && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
1426
1353
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -1499,4 +1426,4 @@ Object.defineProperty(exports, "suspenseQueryGenerator", {
|
|
|
1499
1426
|
}
|
|
1500
1427
|
});
|
|
1501
1428
|
|
|
1502
|
-
//# sourceMappingURL=generators-
|
|
1429
|
+
//# sourceMappingURL=generators-BqGaMUH6.cjs.map
|