@kubb/plugin-react-query 5.0.0-alpha.8 → 5.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +17 -10
  2. package/README.md +34 -85
  3. package/dist/components-Dow6tde8.js +1459 -0
  4. package/dist/components-Dow6tde8.js.map +1 -0
  5. package/dist/components-HwdCDefj.cjs +1603 -0
  6. package/dist/components-HwdCDefj.cjs.map +1 -0
  7. package/dist/components.cjs +1 -1
  8. package/dist/components.d.ts +49 -179
  9. package/dist/components.js +1 -1
  10. package/dist/generators-CcOmnTPa.cjs +1454 -0
  11. package/dist/generators-CcOmnTPa.cjs.map +1 -0
  12. package/dist/generators-yfZr_qfT.js +1412 -0
  13. package/dist/generators-yfZr_qfT.js.map +1 -0
  14. package/dist/generators.cjs +1 -1
  15. package/dist/generators.d.ts +9 -476
  16. package/dist/generators.js +1 -1
  17. package/dist/index.cjs +197 -126
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.ts +4 -4
  20. package/dist/index.js +193 -126
  21. package/dist/index.js.map +1 -1
  22. package/dist/types-DG_OxOym.d.ts +363 -0
  23. package/extension.yaml +911 -0
  24. package/package.json +59 -64
  25. package/src/components/InfiniteQuery.tsx +79 -138
  26. package/src/components/InfiniteQueryOptions.tsx +55 -166
  27. package/src/components/Mutation.tsx +74 -111
  28. package/src/components/MutationOptions.tsx +61 -80
  29. package/src/components/Query.tsx +66 -142
  30. package/src/components/QueryOptions.tsx +56 -138
  31. package/src/components/SuspenseInfiniteQuery.tsx +79 -138
  32. package/src/components/SuspenseInfiniteQueryOptions.tsx +55 -166
  33. package/src/components/SuspenseQuery.tsx +66 -152
  34. package/src/generators/customHookOptionsFileGenerator.tsx +37 -51
  35. package/src/generators/hookOptionsGenerator.tsx +111 -174
  36. package/src/generators/infiniteQueryGenerator.tsx +158 -178
  37. package/src/generators/mutationGenerator.tsx +112 -139
  38. package/src/generators/queryGenerator.tsx +128 -142
  39. package/src/generators/suspenseInfiniteQueryGenerator.tsx +157 -156
  40. package/src/generators/suspenseQueryGenerator.tsx +126 -152
  41. package/src/index.ts +1 -1
  42. package/src/plugin.ts +134 -187
  43. package/src/resolvers/resolverReactQuery.ts +107 -0
  44. package/src/types.ts +172 -49
  45. package/src/utils.ts +10 -0
  46. package/dist/components-BHQT9ZLc.cjs +0 -1634
  47. package/dist/components-BHQT9ZLc.cjs.map +0 -1
  48. package/dist/components-CpyHYGOw.js +0 -1520
  49. package/dist/components-CpyHYGOw.js.map +0 -1
  50. package/dist/generators-DP07m3rH.cjs +0 -1469
  51. package/dist/generators-DP07m3rH.cjs.map +0 -1
  52. package/dist/generators-DkQwKTc2.js +0 -1427
  53. package/dist/generators-DkQwKTc2.js.map +0 -1
  54. package/dist/types-D5S7Ny9r.d.ts +0 -270
package/dist/index.js CHANGED
@@ -1,22 +1,128 @@
1
1
  import "./chunk--u3MIqq1.js";
2
- import { d as MutationKey, f as camelCase, p as pascalCase, u as QueryKey } from "./components-CpyHYGOw.js";
3
- import { a as infiniteQueryGenerator, i as mutationGenerator, n as suspenseInfiniteQueryGenerator, o as hookOptionsGenerator, r as queryGenerator, s as customHookOptionsFileGenerator, t as suspenseQueryGenerator } from "./generators-DkQwKTc2.js";
2
+ import { _ as mutationKeyTransformer, d as queryKeyTransformer, v as camelCase } from "./components-Dow6tde8.js";
3
+ import { a as infiniteQueryGenerator, i as mutationGenerator, n as suspenseInfiniteQueryGenerator, o as hookOptionsGenerator, r as queryGenerator, s as customHookOptionsFileGenerator, t as suspenseQueryGenerator } from "./generators-yfZr_qfT.js";
4
4
  import path from "node:path";
5
- import { createPlugin, getBarrelFiles, getMode } from "@kubb/core";
5
+ import { ast, definePlugin, defineResolver } from "@kubb/core";
6
6
  import { pluginClientName } from "@kubb/plugin-client";
7
7
  import { source } from "@kubb/plugin-client/templates/clients/axios.source";
8
8
  import { source as source$1 } from "@kubb/plugin-client/templates/clients/fetch.source";
9
9
  import { source as source$2 } from "@kubb/plugin-client/templates/config.source";
10
- import { OperationGenerator, pluginOasName } from "@kubb/plugin-oas";
11
10
  import { pluginTsName } from "@kubb/plugin-ts";
12
11
  import { pluginZodName } from "@kubb/plugin-zod";
12
+ //#region src/resolvers/resolverReactQuery.ts
13
+ function capitalize(name) {
14
+ return `${name.charAt(0).toUpperCase()}${name.slice(1)}`;
15
+ }
16
+ /**
17
+ * Naming convention resolver for React Query plugin.
18
+ *
19
+ * Provides default naming helpers using camelCase for functions and file paths.
20
+ *
21
+ * @example
22
+ * `resolverReactQuery.default('list pets', 'function') // → 'listPets'`
23
+ */
24
+ const resolverReactQuery = defineResolver(() => ({
25
+ name: "default",
26
+ pluginName: "plugin-react-query",
27
+ default(name, type) {
28
+ return camelCase(name, { isFile: type === "file" });
29
+ },
30
+ resolveName(name) {
31
+ return this.default(name, "function");
32
+ },
33
+ resolvePathName(name, type) {
34
+ return this.default(name, type);
35
+ },
36
+ resolveQueryName(node) {
37
+ return `use${capitalize(this.resolveName(node.operationId))}`;
38
+ },
39
+ resolveSuspenseQueryName(node) {
40
+ return `use${capitalize(this.resolveName(node.operationId))}Suspense`;
41
+ },
42
+ resolveInfiniteQueryName(node) {
43
+ return `use${capitalize(this.resolveName(node.operationId))}Infinite`;
44
+ },
45
+ resolveSuspenseInfiniteQueryName(node) {
46
+ return `use${capitalize(this.resolveName(node.operationId))}SuspenseInfinite`;
47
+ },
48
+ resolveMutationName(node) {
49
+ return `use${capitalize(this.resolveName(node.operationId))}`;
50
+ },
51
+ resolveQueryOptionsName(node) {
52
+ return `${this.resolveName(node.operationId)}QueryOptions`;
53
+ },
54
+ resolveSuspenseQueryOptionsName(node) {
55
+ return `${this.resolveName(node.operationId)}SuspenseQueryOptions`;
56
+ },
57
+ resolveInfiniteQueryOptionsName(node) {
58
+ return `${this.resolveName(node.operationId)}InfiniteQueryOptions`;
59
+ },
60
+ resolveSuspenseInfiniteQueryOptionsName(node) {
61
+ return `${this.resolveName(node.operationId)}SuspenseInfiniteQueryOptions`;
62
+ },
63
+ resolveMutationOptionsName(node) {
64
+ return `${this.resolveName(node.operationId)}MutationOptions`;
65
+ },
66
+ resolveQueryKeyName(node) {
67
+ return `${this.resolveName(node.operationId)}QueryKey`;
68
+ },
69
+ resolveSuspenseQueryKeyName(node) {
70
+ return `${this.resolveName(node.operationId)}SuspenseQueryKey`;
71
+ },
72
+ resolveInfiniteQueryKeyName(node) {
73
+ return `${this.resolveName(node.operationId)}InfiniteQueryKey`;
74
+ },
75
+ resolveSuspenseInfiniteQueryKeyName(node) {
76
+ return `${this.resolveName(node.operationId)}SuspenseInfiniteQueryKey`;
77
+ },
78
+ resolveMutationKeyName(node) {
79
+ return `${this.resolveName(node.operationId)}MutationKey`;
80
+ },
81
+ resolveQueryKeyTypeName(node) {
82
+ return `${capitalize(this.resolveName(node.operationId))}QueryKey`;
83
+ },
84
+ resolveSuspenseQueryKeyTypeName(node) {
85
+ return `${capitalize(this.resolveName(node.operationId))}SuspenseQueryKey`;
86
+ },
87
+ resolveInfiniteQueryKeyTypeName(node) {
88
+ return `${capitalize(this.resolveName(node.operationId))}InfiniteQueryKey`;
89
+ },
90
+ resolveSuspenseInfiniteQueryKeyTypeName(node) {
91
+ return `${capitalize(this.resolveName(node.operationId))}SuspenseInfiniteQueryKey`;
92
+ },
93
+ resolveMutationTypeName(node) {
94
+ return capitalize(this.resolveName(node.operationId));
95
+ },
96
+ resolveClientName(node) {
97
+ return this.resolveName(node.operationId);
98
+ },
99
+ resolveSuspenseClientName(node) {
100
+ return `${this.resolveName(node.operationId)}Suspense`;
101
+ },
102
+ resolveInfiniteClientName(node) {
103
+ return `${this.resolveName(node.operationId)}Infinite`;
104
+ },
105
+ resolveSuspenseInfiniteClientName(node) {
106
+ return `${this.resolveName(node.operationId)}SuspenseInfinite`;
107
+ },
108
+ resolveHookOptionsName() {
109
+ return "HookOptions";
110
+ },
111
+ resolveCustomHookOptionsName() {
112
+ return "getCustomHookOptions";
113
+ }
114
+ }));
115
+ //#endregion
13
116
  //#region src/plugin.ts
14
117
  const pluginReactQueryName = "plugin-react-query";
15
- const pluginReactQuery = createPlugin((options) => {
118
+ const pluginReactQuery = definePlugin((options) => {
16
119
  const { output = {
17
120
  path: "hooks",
18
121
  barrelType: "named"
19
- }, group, exclude = [], include, override = [], parser = "client", suspense = {}, infinite = false, transformers = {}, paramsType = "inline", pathParamsType = paramsType === "object" ? "object" : options.pathParamsType || "inline", generators = [
122
+ }, group, exclude = [], include, override = [], parser = "client", suspense = {}, infinite = false, paramsType = "inline", pathParamsType = paramsType === "object" ? "object" : options.pathParamsType || "inline", mutation = {}, query = {}, mutationKey = mutationKeyTransformer, queryKey = queryKeyTransformer, customOptions, paramsCasing, client, resolver: userResolver, transformer: userTransformer, generators: userGenerators = [] } = options;
123
+ const clientName = client?.client ?? "axios";
124
+ const clientImportPath = client?.importPath ?? (!client?.bundle ? `@kubb/plugin-client/clients/${clientName}` : void 0);
125
+ const selectedGenerators = options.generators ?? [
20
126
  queryGenerator,
21
127
  suspenseQueryGenerator,
22
128
  infiniteQueryGenerator,
@@ -24,143 +130,104 @@ const pluginReactQuery = createPlugin((options) => {
24
130
  mutationGenerator,
25
131
  hookOptionsGenerator,
26
132
  customHookOptionsFileGenerator
27
- ].filter(Boolean), mutation = {}, query = {}, mutationKey = MutationKey.getTransformer, queryKey = QueryKey.getTransformer, customOptions, paramsCasing, contentType, client } = options;
28
- const clientName = client?.client ?? "axios";
29
- const clientImportPath = client?.importPath ?? (!client?.bundle ? `@kubb/plugin-client/clients/${clientName}` : void 0);
133
+ ].filter((generator) => Boolean(generator));
134
+ const groupConfig = group ? {
135
+ ...group,
136
+ name: group.name ? group.name : (ctx) => {
137
+ if (group.type === "path") return `${ctx.group.split("/")[1]}`;
138
+ return `${camelCase(ctx.group)}Controller`;
139
+ }
140
+ } : void 0;
30
141
  return {
31
142
  name: pluginReactQueryName,
32
- options: {
33
- output,
34
- client: {
35
- bundle: client?.bundle,
36
- baseURL: client?.baseURL,
37
- client: clientName,
38
- clientType: client?.clientType ?? "function",
39
- dataReturnType: client?.dataReturnType ?? "data",
143
+ options,
144
+ dependencies: [pluginTsName, parser === "zod" ? pluginZodName : void 0].filter((dependency) => Boolean(dependency)),
145
+ hooks: { "kubb:plugin:setup"(ctx) {
146
+ const resolver = userResolver ? {
147
+ ...resolverReactQuery,
148
+ ...userResolver
149
+ } : resolverReactQuery;
150
+ ctx.setOptions({
151
+ output,
152
+ client: {
153
+ bundle: client?.bundle,
154
+ baseURL: client?.baseURL,
155
+ client: clientName,
156
+ clientType: client?.clientType ?? "function",
157
+ importPath: clientImportPath,
158
+ dataReturnType: client?.dataReturnType ?? "data",
159
+ paramsCasing
160
+ },
161
+ queryKey,
162
+ query: query === false ? false : {
163
+ importPath: "@tanstack/react-query",
164
+ methods: ["get"],
165
+ ...query
166
+ },
167
+ mutationKey,
168
+ mutation: mutation === false ? false : {
169
+ importPath: "@tanstack/react-query",
170
+ methods: [
171
+ "post",
172
+ "put",
173
+ "patch",
174
+ "delete"
175
+ ],
176
+ ...mutation
177
+ },
178
+ infinite: infinite ? {
179
+ queryParam: "id",
180
+ initialPageParam: 0,
181
+ cursorParam: void 0,
182
+ nextParam: void 0,
183
+ previousParam: void 0,
184
+ ...infinite
185
+ } : false,
186
+ suspense,
187
+ customOptions: customOptions ? {
188
+ name: "useCustomHookOptions",
189
+ ...customOptions
190
+ } : void 0,
191
+ parser,
192
+ paramsType,
40
193
  pathParamsType,
41
- importPath: clientImportPath,
42
- paramsCasing
43
- },
44
- infinite: infinite ? {
45
- queryParam: "id",
46
- initialPageParam: 0,
47
- cursorParam: void 0,
48
- nextParam: void 0,
49
- previousParam: void 0,
50
- ...infinite
51
- } : false,
52
- suspense,
53
- queryKey,
54
- query: query === false ? false : {
55
- methods: ["get"],
56
- importPath: "@tanstack/react-query",
57
- ...query
58
- },
59
- mutationKey,
60
- mutation: mutation === false ? false : {
61
- methods: [
62
- "post",
63
- "put",
64
- "patch",
65
- "delete"
66
- ],
67
- importPath: "@tanstack/react-query",
68
- ...mutation
69
- },
70
- customOptions: customOptions ? {
71
- name: "useCustomHookOptions",
72
- ...customOptions
73
- } : void 0,
74
- paramsType,
75
- pathParamsType,
76
- parser,
77
- paramsCasing,
78
- group
79
- },
80
- pre: [
81
- pluginOasName,
82
- pluginTsName,
83
- parser === "zod" ? pluginZodName : void 0
84
- ].filter(Boolean),
85
- resolvePath(baseName, pathMode, options) {
86
- const root = path.resolve(this.config.root, this.config.output.path);
87
- if ((pathMode ?? getMode(path.resolve(root, output.path))) === "single")
88
- /**
89
- * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend
90
- * Other plugins then need to call addOrAppend instead of just add from the fileManager class
91
- */
92
- return path.resolve(root, output.path);
93
- if (group && (options?.group?.path || options?.group?.tag)) {
94
- const groupName = group?.name ? group.name : (ctx) => {
95
- if (group?.type === "path") return `${ctx.group.split("/")[1]}`;
96
- return `${camelCase(ctx.group)}Controller`;
97
- };
98
- return path.resolve(root, output.path, groupName({ group: group.type === "path" ? options.group.path : options.group.tag }), baseName);
99
- }
100
- return path.resolve(root, output.path, baseName);
101
- },
102
- resolveName(name, type) {
103
- let resolvedName = camelCase(name);
104
- if (type === "file" || type === "function") resolvedName = camelCase(name, { isFile: type === "file" });
105
- if (type === "type") resolvedName = pascalCase(name);
106
- if (type) return transformers?.name?.(resolvedName, type) || resolvedName;
107
- return resolvedName;
108
- },
109
- async install() {
110
- const root = path.resolve(this.config.root, this.config.output.path);
111
- const mode = getMode(path.resolve(root, output.path));
112
- const oas = await this.getOas();
113
- const baseURL = await this.getBaseURL();
114
- if (baseURL) this.plugin.options.client.baseURL = baseURL;
115
- const hasClientPlugin = !!this.driver.getPluginByName(pluginClientName);
116
- if (this.plugin.options.client.bundle && !hasClientPlugin && !this.plugin.options.client.importPath) await this.upsertFile({
194
+ paramsCasing,
195
+ group: groupConfig,
196
+ exclude,
197
+ include,
198
+ override,
199
+ resolver
200
+ });
201
+ ctx.setResolver(resolver);
202
+ if (userTransformer) ctx.setTransformer(userTransformer);
203
+ for (const gen of selectedGenerators) ctx.addGenerator(gen);
204
+ for (const gen of userGenerators) ctx.addGenerator(gen);
205
+ const root = path.resolve(ctx.config.root, ctx.config.output.path);
206
+ const hasClientPlugin = !!ctx.config.plugins?.some((p) => p.name === pluginClientName);
207
+ if (client?.bundle && !hasClientPlugin && !clientImportPath) ctx.injectFile({
117
208
  baseName: "fetch.ts",
118
209
  path: path.resolve(root, ".kubb/fetch.ts"),
119
- sources: [{
210
+ sources: [ast.createSource({
120
211
  name: "fetch",
121
- value: this.plugin.options.client.client === "fetch" ? source$1 : source,
212
+ nodes: [ast.createText(clientName === "fetch" ? source$1 : source)],
122
213
  isExportable: true,
123
214
  isIndexable: true
124
- }],
125
- imports: [],
126
- exports: []
215
+ })]
127
216
  });
128
- if (!hasClientPlugin) await this.upsertFile({
217
+ if (!hasClientPlugin) ctx.injectFile({
129
218
  baseName: "config.ts",
130
219
  path: path.resolve(root, ".kubb/config.ts"),
131
- sources: [{
220
+ sources: [ast.createSource({
132
221
  name: "config",
133
- value: source$2,
222
+ nodes: [ast.createText(source$2)],
134
223
  isExportable: false,
135
224
  isIndexable: false
136
- }],
137
- imports: [],
138
- exports: []
139
- });
140
- const files = await new OperationGenerator(this.plugin.options, {
141
- fabric: this.fabric,
142
- oas,
143
- driver: this.driver,
144
- events: this.events,
145
- plugin: this.plugin,
146
- contentType,
147
- exclude,
148
- include,
149
- override,
150
- mode
151
- }).build(...generators);
152
- await this.upsertFile(...files);
153
- const barrelFiles = await getBarrelFiles(this.fabric.files, {
154
- type: output.barrelType ?? "named",
155
- root,
156
- output,
157
- meta: { pluginName: this.plugin.name }
225
+ })]
158
226
  });
159
- await this.upsertFile(...barrelFiles);
160
- }
227
+ } }
161
228
  };
162
229
  });
163
230
  //#endregion
164
- export { pluginReactQuery, pluginReactQueryName };
231
+ export { pluginReactQuery as default, pluginReactQuery, pluginReactQueryName };
165
232
 
166
233
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["fetchClientSource","axiosClientSource","configSource"],"sources":["../src/plugin.ts"],"sourcesContent":["import path from 'node:path'\nimport { camelCase, pascalCase } from '@internals/utils'\nimport { createPlugin, type Group, getBarrelFiles, getMode } from '@kubb/core'\nimport { pluginClientName } from '@kubb/plugin-client'\nimport { source as axiosClientSource } from '@kubb/plugin-client/templates/clients/axios.source'\nimport { source as fetchClientSource } from '@kubb/plugin-client/templates/clients/fetch.source'\nimport { source as configSource } from '@kubb/plugin-client/templates/config.source'\nimport { OperationGenerator, pluginOasName } from '@kubb/plugin-oas'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { pluginZodName } from '@kubb/plugin-zod'\nimport { MutationKey } from './components'\nimport { QueryKey } from './components/QueryKey.tsx'\nimport {\n customHookOptionsFileGenerator,\n hookOptionsGenerator,\n infiniteQueryGenerator,\n mutationGenerator,\n queryGenerator,\n suspenseInfiniteQueryGenerator,\n suspenseQueryGenerator,\n} from './generators'\nimport type { PluginReactQuery } from './types.ts'\n\nexport const pluginReactQueryName = 'plugin-react-query' satisfies PluginReactQuery['name']\n\nexport const pluginReactQuery = createPlugin<PluginReactQuery>((options) => {\n const {\n output = { path: 'hooks', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n parser = 'client',\n suspense = {},\n infinite = false,\n transformers = {},\n paramsType = 'inline',\n pathParamsType = paramsType === 'object' ? 'object' : options.pathParamsType || 'inline',\n generators = [\n queryGenerator,\n suspenseQueryGenerator,\n infiniteQueryGenerator,\n suspenseInfiniteQueryGenerator,\n mutationGenerator,\n hookOptionsGenerator,\n customHookOptionsFileGenerator,\n ].filter(Boolean),\n mutation = {},\n query = {},\n mutationKey = MutationKey.getTransformer,\n queryKey = QueryKey.getTransformer,\n customOptions,\n paramsCasing,\n contentType,\n client,\n } = options\n\n const clientName = client?.client ?? 'axios'\n const clientImportPath = client?.importPath ?? (!client?.bundle ? `@kubb/plugin-client/clients/${clientName}` : undefined)\n\n return {\n name: pluginReactQueryName,\n options: {\n output,\n client: {\n bundle: client?.bundle,\n baseURL: client?.baseURL,\n client: clientName,\n clientType: client?.clientType ?? 'function',\n dataReturnType: client?.dataReturnType ?? 'data',\n pathParamsType,\n importPath: clientImportPath,\n paramsCasing,\n },\n infinite: infinite\n ? {\n queryParam: 'id',\n initialPageParam: 0,\n cursorParam: undefined,\n nextParam: undefined,\n previousParam: undefined,\n ...infinite,\n }\n : false,\n suspense,\n queryKey,\n query:\n query === false\n ? false\n : {\n methods: ['get'],\n importPath: '@tanstack/react-query',\n ...query,\n },\n mutationKey,\n mutation:\n mutation === false\n ? false\n : {\n methods: ['post', 'put', 'patch', 'delete'],\n importPath: '@tanstack/react-query',\n ...mutation,\n },\n customOptions: customOptions ? { name: 'useCustomHookOptions', ...customOptions } : undefined,\n paramsType,\n pathParamsType,\n parser,\n paramsCasing,\n group,\n },\n pre: [pluginOasName, pluginTsName, parser === 'zod' ? pluginZodName : undefined].filter(Boolean),\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? getMode(path.resolve(root, output.path))\n\n if (mode === 'single') {\n /**\n * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend\n * Other plugins then need to call addOrAppend instead of just add from the fileManager class\n */\n return path.resolve(root, output.path)\n }\n\n if (group && (options?.group?.path || options?.group?.tag)) {\n const groupName: Group['name'] = group?.name\n ? group.name\n : (ctx) => {\n if (group?.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n }\n\n return path.resolve(\n root,\n output.path,\n groupName({\n group: group.type === 'path' ? options.group.path! : options.group.tag!,\n }),\n baseName,\n )\n }\n\n return path.resolve(root, output.path, baseName)\n },\n resolveName(name, type) {\n let resolvedName = camelCase(name)\n\n if (type === 'file' || type === 'function') {\n resolvedName = camelCase(name, {\n isFile: type === 'file',\n })\n }\n if (type === 'type') {\n resolvedName = pascalCase(name)\n }\n\n if (type) {\n return transformers?.name?.(resolvedName, type) || resolvedName\n }\n\n return resolvedName\n },\n async install() {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = getMode(path.resolve(root, output.path))\n const oas = await this.getOas()\n const baseURL = await this.getBaseURL()\n\n if (baseURL) {\n this.plugin.options.client.baseURL = baseURL\n }\n\n const hasClientPlugin = !!this.driver.getPluginByName(pluginClientName)\n\n if (this.plugin.options.client.bundle && !hasClientPlugin && !this.plugin.options.client.importPath) {\n // pre add bundled fetch\n await this.upsertFile({\n baseName: 'fetch.ts',\n path: path.resolve(root, '.kubb/fetch.ts'),\n sources: [\n {\n name: 'fetch',\n value: this.plugin.options.client.client === 'fetch' ? fetchClientSource : axiosClientSource,\n isExportable: true,\n isIndexable: true,\n },\n ],\n imports: [],\n exports: [],\n })\n }\n\n if (!hasClientPlugin) {\n await this.upsertFile({\n baseName: 'config.ts',\n path: path.resolve(root, '.kubb/config.ts'),\n sources: [\n {\n name: 'config',\n value: configSource,\n isExportable: false,\n isIndexable: false,\n },\n ],\n imports: [],\n exports: [],\n })\n }\n\n const operationGenerator = new OperationGenerator(this.plugin.options, {\n fabric: this.fabric,\n oas,\n driver: this.driver,\n events: this.events,\n plugin: this.plugin,\n contentType,\n exclude,\n include,\n override,\n mode,\n })\n\n const files = await operationGenerator.build(...generators)\n await this.upsertFile(...files)\n\n const barrelFiles = await getBarrelFiles(this.fabric.files, {\n type: output.barrelType ?? 'named',\n root,\n output,\n meta: {\n pluginName: this.plugin.name,\n },\n })\n\n await this.upsertFile(...barrelFiles)\n },\n }\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["fetchClientSource","axiosClientSource","configSource"],"sources":["../src/resolvers/resolverReactQuery.ts","../src/plugin.ts"],"sourcesContent":["import { camelCase } from '@internals/utils'\nimport { defineResolver } from '@kubb/core'\nimport type { PluginReactQuery } from '../types.ts'\n\nfunction capitalize(name: string): string {\n return `${name.charAt(0).toUpperCase()}${name.slice(1)}`\n}\n\n/**\n * Naming convention resolver for React Query plugin.\n *\n * Provides default naming helpers using camelCase for functions and file paths.\n *\n * @example\n * `resolverReactQuery.default('list pets', 'function') // → 'listPets'`\n */\nexport const resolverReactQuery = defineResolver<PluginReactQuery>(() => ({\n name: 'default',\n pluginName: 'plugin-react-query',\n default(name, type) {\n return camelCase(name, { isFile: type === 'file' })\n },\n resolveName(name) {\n return this.default(name, 'function')\n },\n resolvePathName(name, type) {\n return this.default(name, type)\n },\n resolveQueryName(node) {\n return `use${capitalize(this.resolveName(node.operationId))}`\n },\n resolveSuspenseQueryName(node) {\n return `use${capitalize(this.resolveName(node.operationId))}Suspense`\n },\n resolveInfiniteQueryName(node) {\n return `use${capitalize(this.resolveName(node.operationId))}Infinite`\n },\n resolveSuspenseInfiniteQueryName(node) {\n return `use${capitalize(this.resolveName(node.operationId))}SuspenseInfinite`\n },\n resolveMutationName(node) {\n return `use${capitalize(this.resolveName(node.operationId))}`\n },\n resolveQueryOptionsName(node) {\n return `${this.resolveName(node.operationId)}QueryOptions`\n },\n resolveSuspenseQueryOptionsName(node) {\n return `${this.resolveName(node.operationId)}SuspenseQueryOptions`\n },\n resolveInfiniteQueryOptionsName(node) {\n return `${this.resolveName(node.operationId)}InfiniteQueryOptions`\n },\n resolveSuspenseInfiniteQueryOptionsName(node) {\n return `${this.resolveName(node.operationId)}SuspenseInfiniteQueryOptions`\n },\n resolveMutationOptionsName(node) {\n return `${this.resolveName(node.operationId)}MutationOptions`\n },\n resolveQueryKeyName(node) {\n return `${this.resolveName(node.operationId)}QueryKey`\n },\n resolveSuspenseQueryKeyName(node) {\n return `${this.resolveName(node.operationId)}SuspenseQueryKey`\n },\n resolveInfiniteQueryKeyName(node) {\n return `${this.resolveName(node.operationId)}InfiniteQueryKey`\n },\n resolveSuspenseInfiniteQueryKeyName(node) {\n return `${this.resolveName(node.operationId)}SuspenseInfiniteQueryKey`\n },\n resolveMutationKeyName(node) {\n return `${this.resolveName(node.operationId)}MutationKey`\n },\n resolveQueryKeyTypeName(node) {\n return `${capitalize(this.resolveName(node.operationId))}QueryKey`\n },\n resolveSuspenseQueryKeyTypeName(node) {\n return `${capitalize(this.resolveName(node.operationId))}SuspenseQueryKey`\n },\n resolveInfiniteQueryKeyTypeName(node) {\n return `${capitalize(this.resolveName(node.operationId))}InfiniteQueryKey`\n },\n resolveSuspenseInfiniteQueryKeyTypeName(node) {\n return `${capitalize(this.resolveName(node.operationId))}SuspenseInfiniteQueryKey`\n },\n resolveMutationTypeName(node) {\n return capitalize(this.resolveName(node.operationId))\n },\n resolveClientName(node) {\n return this.resolveName(node.operationId)\n },\n resolveSuspenseClientName(node) {\n return `${this.resolveName(node.operationId)}Suspense`\n },\n resolveInfiniteClientName(node) {\n return `${this.resolveName(node.operationId)}Infinite`\n },\n resolveSuspenseInfiniteClientName(node) {\n return `${this.resolveName(node.operationId)}SuspenseInfinite`\n },\n resolveHookOptionsName() {\n return 'HookOptions'\n },\n resolveCustomHookOptionsName() {\n return 'getCustomHookOptions'\n },\n}))\n","import path from 'node:path'\nimport { camelCase } from '@internals/utils'\nimport { ast, definePlugin, type Group } from '@kubb/core'\nimport { pluginClientName } from '@kubb/plugin-client'\nimport { source as axiosClientSource } from '@kubb/plugin-client/templates/clients/axios.source'\nimport { source as fetchClientSource } from '@kubb/plugin-client/templates/clients/fetch.source'\nimport { source as configSource } from '@kubb/plugin-client/templates/config.source'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { pluginZodName } from '@kubb/plugin-zod'\nimport { mutationKeyTransformer, queryKeyTransformer } from '@internals/tanstack-query'\nimport {\n customHookOptionsFileGenerator,\n hookOptionsGenerator,\n infiniteQueryGenerator,\n mutationGenerator,\n queryGenerator,\n suspenseInfiniteQueryGenerator,\n suspenseQueryGenerator,\n} from './generators'\nimport { resolverReactQuery } from './resolvers/resolverReactQuery.ts'\nimport type { PluginReactQuery } from './types.ts'\n\nexport const pluginReactQueryName = 'plugin-react-query' satisfies PluginReactQuery['name']\n\nexport const pluginReactQuery = definePlugin<PluginReactQuery>((options) => {\n const {\n output = { path: 'hooks', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n parser = 'client',\n suspense = {},\n infinite = false,\n paramsType = 'inline',\n pathParamsType = paramsType === 'object' ? 'object' : options.pathParamsType || 'inline',\n mutation = {},\n query = {},\n mutationKey = mutationKeyTransformer,\n queryKey = queryKeyTransformer,\n customOptions,\n paramsCasing,\n client,\n resolver: userResolver,\n transformer: userTransformer,\n generators: userGenerators = [],\n } = options\n\n const clientName = client?.client ?? 'axios'\n const clientImportPath = client?.importPath ?? (!client?.bundle ? `@kubb/plugin-client/clients/${clientName}` : undefined)\n\n const selectedGenerators =\n options.generators ??\n [\n queryGenerator,\n suspenseQueryGenerator,\n infiniteQueryGenerator,\n suspenseInfiniteQueryGenerator,\n mutationGenerator,\n hookOptionsGenerator,\n customHookOptionsFileGenerator,\n ].filter((generator): generator is NonNullable<typeof generator> => Boolean(generator))\n\n const groupConfig = group\n ? ({\n ...group,\n name: group.name\n ? group.name\n : (ctx: { group: string }) => {\n if (group.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n },\n } satisfies Group)\n : undefined\n\n return {\n name: pluginReactQueryName,\n options,\n dependencies: [pluginTsName, parser === 'zod' ? pluginZodName : undefined].filter((dependency): dependency is string => Boolean(dependency)),\n hooks: {\n 'kubb:plugin:setup'(ctx) {\n const resolver = userResolver ? { ...resolverReactQuery, ...userResolver } : resolverReactQuery\n\n ctx.setOptions({\n output,\n client: {\n bundle: client?.bundle,\n baseURL: client?.baseURL,\n client: clientName,\n clientType: client?.clientType ?? 'function',\n importPath: clientImportPath,\n dataReturnType: client?.dataReturnType ?? 'data',\n paramsCasing,\n },\n queryKey,\n query:\n query === false\n ? false\n : {\n importPath: '@tanstack/react-query',\n methods: ['get'],\n ...query,\n },\n mutationKey,\n mutation:\n mutation === false\n ? false\n : {\n importPath: '@tanstack/react-query',\n methods: ['post', 'put', 'patch', 'delete'],\n ...mutation,\n },\n infinite: infinite\n ? {\n queryParam: 'id',\n initialPageParam: 0,\n cursorParam: undefined,\n nextParam: undefined,\n previousParam: undefined,\n ...infinite,\n }\n : false,\n suspense,\n customOptions: customOptions ? { name: 'useCustomHookOptions', ...customOptions } : undefined,\n parser,\n paramsType,\n pathParamsType,\n paramsCasing,\n group: groupConfig,\n exclude,\n include,\n override,\n resolver,\n })\n ctx.setResolver(resolver)\n if (userTransformer) {\n ctx.setTransformer(userTransformer)\n }\n\n for (const gen of selectedGenerators) {\n ctx.addGenerator(gen)\n }\n for (const gen of userGenerators) {\n ctx.addGenerator(gen)\n }\n\n const root = path.resolve(ctx.config.root, ctx.config.output.path)\n const hasClientPlugin = !!ctx.config.plugins?.some((p) => (p as { name?: string }).name === pluginClientName)\n\n if (client?.bundle && !hasClientPlugin && !clientImportPath) {\n ctx.injectFile({\n baseName: 'fetch.ts',\n path: path.resolve(root, '.kubb/fetch.ts'),\n sources: [\n ast.createSource({\n name: 'fetch',\n nodes: [ast.createText(clientName === 'fetch' ? fetchClientSource : axiosClientSource)],\n isExportable: true,\n isIndexable: true,\n }),\n ],\n })\n }\n\n if (!hasClientPlugin) {\n ctx.injectFile({\n baseName: 'config.ts',\n path: path.resolve(root, '.kubb/config.ts'),\n sources: [\n ast.createSource({\n name: 'config',\n nodes: [ast.createText(configSource)],\n isExportable: false,\n isIndexable: false,\n }),\n ],\n })\n }\n },\n },\n }\n})\n\nexport default pluginReactQuery\n"],"mappings":"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"}