@kubb/plugin-ts 5.0.0-alpha.12 → 5.0.0-alpha.13
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/dist/{Type-CX1HRooG.js → Type-C8EHVKjc.js} +6 -84
- package/dist/Type-C8EHVKjc.js.map +1 -0
- package/dist/{Type-Cat0_htq.cjs → Type-DrOq6-nh.cjs} +11 -139
- package/dist/Type-DrOq6-nh.cjs.map +1 -0
- package/dist/casing-Cp-jbC_k.js +84 -0
- package/dist/casing-Cp-jbC_k.js.map +1 -0
- package/dist/casing-D2uQKLWS.cjs +144 -0
- package/dist/casing-D2uQKLWS.cjs.map +1 -0
- package/dist/components.cjs +1 -1
- package/dist/components.d.ts +2 -1
- package/dist/components.js +1 -1
- package/dist/{generators-DWBU-MuW.cjs → generators-CX3cSSdF.cjs} +34 -19
- package/dist/generators-CX3cSSdF.cjs.map +1 -0
- package/dist/{generators-CLuCmfUz.js → generators-dCqW0ECC.js} +31 -16
- package/dist/generators-dCqW0ECC.js.map +1 -0
- package/dist/generators.cjs +1 -1
- package/dist/generators.d.ts +1 -1
- package/dist/generators.js +1 -1
- package/dist/index.cjs +8 -181
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -46
- package/dist/index.js +7 -178
- package/dist/index.js.map +1 -1
- package/dist/resolvers-CH7hINyz.js +181 -0
- package/dist/resolvers-CH7hINyz.js.map +1 -0
- package/dist/resolvers-ebHaaCyw.cjs +191 -0
- package/dist/resolvers-ebHaaCyw.cjs.map +1 -0
- package/dist/resolvers.cjs +4 -0
- package/dist/resolvers.d.ts +51 -0
- package/dist/resolvers.js +2 -0
- package/dist/{types-BA1ZCQ5p.d.ts → types-BSRhtbGl.d.ts} +8 -1
- package/package.json +12 -5
- package/src/components/Type.tsx +1 -0
- package/src/generators/typeGenerator.tsx +24 -9
- package/src/generators/utils.ts +5 -3
- package/src/index.ts +0 -1
- package/src/plugin.ts +3 -2
- package/src/printer.ts +5 -2
- package/src/resolvers/index.ts +2 -0
- package/src/{resolverTs.ts → resolvers/resolverTs.ts} +5 -89
- package/src/resolvers/resolverTsLegacy.ts +85 -0
- package/src/types.ts +7 -0
- package/dist/Type-CX1HRooG.js.map +0 -1
- package/dist/Type-Cat0_htq.cjs.map +0 -1
- package/dist/generators-CLuCmfUz.js.map +0 -1
- package/dist/generators-DWBU-MuW.cjs.map +0 -1
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
const require_casing = require("./casing-D2uQKLWS.cjs");
|
|
2
|
+
let _kubb_core = require("@kubb/core");
|
|
3
|
+
//#region src/resolvers/resolverTs.ts
|
|
4
|
+
function resolveName(name, type) {
|
|
5
|
+
return require_casing.pascalCase(name, { isFile: type === "file" });
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Resolver for `@kubb/plugin-ts` that provides the default naming and path-resolution
|
|
9
|
+
* helpers used by the plugin. Import this in other plugins to resolve the exact names and
|
|
10
|
+
* paths that `plugin-ts` generates without hardcoding the conventions.
|
|
11
|
+
*
|
|
12
|
+
* The `default` method is automatically injected by `defineResolver` — it uses `camelCase`
|
|
13
|
+
* for identifiers/files and `pascalCase` for type names.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { resolver } from '@kubb/plugin-ts'
|
|
18
|
+
*
|
|
19
|
+
* resolver.default('list pets', 'type') // → 'ListPets'
|
|
20
|
+
* resolver.resolveName('list pets status 200') // → 'listPetsStatus200'
|
|
21
|
+
* resolver.resolveTypedName('list pets status 200') // → 'ListPetsStatus200'
|
|
22
|
+
* resolver.resolvePathName('list pets', 'file') // → 'listPets'
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
const resolverTs = (0, _kubb_core.defineResolver)(() => {
|
|
26
|
+
return {
|
|
27
|
+
default(name, type) {
|
|
28
|
+
return resolveName(name, type);
|
|
29
|
+
},
|
|
30
|
+
resolveName(name) {
|
|
31
|
+
return this.default(name, "function");
|
|
32
|
+
},
|
|
33
|
+
resolveTypedName(name) {
|
|
34
|
+
return this.default(name, "type");
|
|
35
|
+
},
|
|
36
|
+
resolvePathName(name, type) {
|
|
37
|
+
return this.default(name, type);
|
|
38
|
+
},
|
|
39
|
+
resolveParamName(node, param) {
|
|
40
|
+
return this.resolveName(`${node.operationId} ${this.default(param.in)} ${param.name}`);
|
|
41
|
+
},
|
|
42
|
+
resolveParamTypedName(node, param) {
|
|
43
|
+
return this.resolveTypedName(`${node.operationId} ${this.default(param.in)} ${param.name}`);
|
|
44
|
+
},
|
|
45
|
+
resolveResponseStatusName(node, statusCode) {
|
|
46
|
+
return this.resolveName(`${node.operationId} Status ${statusCode}`);
|
|
47
|
+
},
|
|
48
|
+
resolveResponseStatusTypedName(node, statusCode) {
|
|
49
|
+
return this.resolveTypedName(`${node.operationId} Status ${statusCode}`);
|
|
50
|
+
},
|
|
51
|
+
resolveDataName(node) {
|
|
52
|
+
return this.resolveName(`${node.operationId} Data`);
|
|
53
|
+
},
|
|
54
|
+
resolveDataTypedName(node) {
|
|
55
|
+
return this.resolveTypedName(`${node.operationId} Data`);
|
|
56
|
+
},
|
|
57
|
+
resolveRequestConfigName(node) {
|
|
58
|
+
return this.resolveName(`${node.operationId} RequestConfig`);
|
|
59
|
+
},
|
|
60
|
+
resolveRequestConfigTypedName(node) {
|
|
61
|
+
return this.resolveTypedName(`${node.operationId} RequestConfig`);
|
|
62
|
+
},
|
|
63
|
+
resolveResponsesName(node) {
|
|
64
|
+
return this.resolveName(`${node.operationId} Responses`);
|
|
65
|
+
},
|
|
66
|
+
resolveResponsesTypedName(node) {
|
|
67
|
+
return this.resolveTypedName(`${node.operationId} Responses`);
|
|
68
|
+
},
|
|
69
|
+
resolveResponseName(node) {
|
|
70
|
+
return this.resolveName(`${node.operationId} Response`);
|
|
71
|
+
},
|
|
72
|
+
resolveResponseTypedName(node) {
|
|
73
|
+
return this.resolveTypedName(`${node.operationId} Response`);
|
|
74
|
+
},
|
|
75
|
+
resolveEnumKeyTypedName(node) {
|
|
76
|
+
return `${this.resolveTypedName(node.name ?? "")}Key`;
|
|
77
|
+
},
|
|
78
|
+
resolvePathParamsName(_node) {
|
|
79
|
+
throw new Error("resolvePathParamsName is only available in legacy mode (legacy: true). Use resolveParamName per individual parameter instead.");
|
|
80
|
+
},
|
|
81
|
+
resolvePathParamsTypedName(_node) {
|
|
82
|
+
throw new Error("resolvePathParamsTypedName is only available in legacy mode (legacy: true). Use resolveParamTypedName per individual parameter instead.");
|
|
83
|
+
},
|
|
84
|
+
resolveQueryParamsName(node) {
|
|
85
|
+
return this.resolveName(`${node.operationId} QueryParams`);
|
|
86
|
+
},
|
|
87
|
+
resolveQueryParamsTypedName(node) {
|
|
88
|
+
return this.resolveTypedName(`${node.operationId} QueryParams`);
|
|
89
|
+
},
|
|
90
|
+
resolveHeaderParamsName(_node) {
|
|
91
|
+
throw new Error("resolveHeaderParamsName is only available in legacy mode (legacy: true). Use resolveParamName per individual parameter instead.");
|
|
92
|
+
},
|
|
93
|
+
resolveHeaderParamsTypedName(_node) {
|
|
94
|
+
throw new Error("resolveHeaderParamsTypedName is only available in legacy mode (legacy: true). Use resolveParamTypedName per individual parameter instead.");
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
//#endregion
|
|
99
|
+
//#region src/resolvers/resolverTsLegacy.ts
|
|
100
|
+
/**
|
|
101
|
+
* Legacy resolver for `@kubb/plugin-ts` that reproduces the naming conventions
|
|
102
|
+
* used before the v2 resolver refactor. Enable via `legacy: true` in plugin options.
|
|
103
|
+
*
|
|
104
|
+
* Key differences from the default resolver:
|
|
105
|
+
* - Response status types: `<OperationId><StatusCode>` (e.g. `CreatePets201`) instead of `<OperationId>Status201`
|
|
106
|
+
* - Default/error responses: `<OperationId>Error` instead of `<OperationId>StatusDefault`
|
|
107
|
+
* - Request body: `<OperationId>MutationRequest` (non-GET) / `<OperationId>QueryRequest` (GET)
|
|
108
|
+
* - Combined responses type: `<OperationId>Mutation` / `<OperationId>Query`
|
|
109
|
+
* - Response union: `<OperationId>MutationResponse` / `<OperationId>QueryResponse`
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```ts
|
|
113
|
+
* import { resolverTsLegacy } from '@kubb/plugin-ts'
|
|
114
|
+
*
|
|
115
|
+
* resolverTsLegacy.resolveResponseStatusTypedName(node, 201) // → 'CreatePets201'
|
|
116
|
+
* resolverTsLegacy.resolveResponseStatusTypedName(node, 'default') // → 'CreatePetsError'
|
|
117
|
+
* resolverTsLegacy.resolveDataTypedName(node) // → 'CreatePetsMutationRequest' (POST)
|
|
118
|
+
* resolverTsLegacy.resolveResponsesTypedName(node) // → 'CreatePetsMutation' (POST)
|
|
119
|
+
* resolverTsLegacy.resolveResponseTypedName(node) // → 'CreatePetsMutationResponse' (POST)
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
const resolverTsLegacy = (0, _kubb_core.defineResolver)(() => {
|
|
123
|
+
return {
|
|
124
|
+
...resolverTs,
|
|
125
|
+
resolveResponseStatusName(node, statusCode) {
|
|
126
|
+
if (statusCode === "default") return this.resolveName(`${node.operationId} Error`);
|
|
127
|
+
return this.resolveName(`${node.operationId} ${statusCode}`);
|
|
128
|
+
},
|
|
129
|
+
resolveResponseStatusTypedName(node, statusCode) {
|
|
130
|
+
if (statusCode === "default") return this.resolveTypedName(`${node.operationId} Error`);
|
|
131
|
+
return this.resolveTypedName(`${node.operationId} ${statusCode}`);
|
|
132
|
+
},
|
|
133
|
+
resolveDataName(node) {
|
|
134
|
+
const suffix = node.method === "GET" ? "QueryRequest" : "MutationRequest";
|
|
135
|
+
return this.resolveName(`${node.operationId} ${suffix}`);
|
|
136
|
+
},
|
|
137
|
+
resolveDataTypedName(node) {
|
|
138
|
+
const suffix = node.method === "GET" ? "QueryRequest" : "MutationRequest";
|
|
139
|
+
return this.resolveTypedName(`${node.operationId} ${suffix}`);
|
|
140
|
+
},
|
|
141
|
+
resolveResponsesName(node) {
|
|
142
|
+
const suffix = node.method === "GET" ? "Query" : "Mutation";
|
|
143
|
+
return `${this.default(node.operationId, "function")}${suffix}`;
|
|
144
|
+
},
|
|
145
|
+
resolveResponsesTypedName(node) {
|
|
146
|
+
const suffix = node.method === "GET" ? "Query" : "Mutation";
|
|
147
|
+
return `${this.default(node.operationId, "type")}${suffix}`;
|
|
148
|
+
},
|
|
149
|
+
resolveResponseName(node) {
|
|
150
|
+
const suffix = node.method === "GET" ? "QueryResponse" : "MutationResponse";
|
|
151
|
+
return this.resolveName(`${node.operationId} ${suffix}`);
|
|
152
|
+
},
|
|
153
|
+
resolveResponseTypedName(node) {
|
|
154
|
+
const suffix = node.method === "GET" ? "QueryResponse" : "MutationResponse";
|
|
155
|
+
return this.resolveTypedName(`${node.operationId} ${suffix}`);
|
|
156
|
+
},
|
|
157
|
+
resolvePathParamsName(node) {
|
|
158
|
+
return this.resolveName(`${node.operationId} PathParams`);
|
|
159
|
+
},
|
|
160
|
+
resolvePathParamsTypedName(node) {
|
|
161
|
+
return this.resolveTypedName(`${node.operationId} PathParams`);
|
|
162
|
+
},
|
|
163
|
+
resolveQueryParamsName(node) {
|
|
164
|
+
return this.resolveName(`${node.operationId} QueryParams`);
|
|
165
|
+
},
|
|
166
|
+
resolveQueryParamsTypedName(node) {
|
|
167
|
+
return this.resolveTypedName(`${node.operationId} QueryParams`);
|
|
168
|
+
},
|
|
169
|
+
resolveHeaderParamsName(node) {
|
|
170
|
+
return this.resolveName(`${node.operationId} HeaderParams`);
|
|
171
|
+
},
|
|
172
|
+
resolveHeaderParamsTypedName(node) {
|
|
173
|
+
return this.resolveTypedName(`${node.operationId} HeaderParams`);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
//#endregion
|
|
178
|
+
Object.defineProperty(exports, "resolverTs", {
|
|
179
|
+
enumerable: true,
|
|
180
|
+
get: function() {
|
|
181
|
+
return resolverTs;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
Object.defineProperty(exports, "resolverTsLegacy", {
|
|
185
|
+
enumerable: true,
|
|
186
|
+
get: function() {
|
|
187
|
+
return resolverTsLegacy;
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
//# sourceMappingURL=resolvers-ebHaaCyw.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolvers-ebHaaCyw.cjs","names":["pascalCase"],"sources":["../src/resolvers/resolverTs.ts","../src/resolvers/resolverTsLegacy.ts"],"sourcesContent":["import { pascalCase } from '@internals/utils'\nimport { defineResolver } from '@kubb/core'\nimport type { PluginTs } from '../types.ts'\n\nfunction resolveName(name: string, type?: 'file' | 'function' | 'type' | 'const'): string {\n return pascalCase(name, { isFile: type === 'file' })\n}\n\n/**\n * Resolver for `@kubb/plugin-ts` that provides the default naming and path-resolution\n * helpers used by the plugin. Import this in other plugins to resolve the exact names and\n * paths that `plugin-ts` generates without hardcoding the conventions.\n *\n * The `default` method is automatically injected by `defineResolver` — it uses `camelCase`\n * for identifiers/files and `pascalCase` for type names.\n *\n * @example\n * ```ts\n * import { resolver } from '@kubb/plugin-ts'\n *\n * resolver.default('list pets', 'type') // → 'ListPets'\n * resolver.resolveName('list pets status 200') // → 'listPetsStatus200'\n * resolver.resolveTypedName('list pets status 200') // → 'ListPetsStatus200'\n * resolver.resolvePathName('list pets', 'file') // → 'listPets'\n * ```\n */\nexport const resolverTs = defineResolver<PluginTs>(() => {\n return {\n default(name, type) {\n return resolveName(name, type)\n },\n resolveName(name) {\n return this.default(name, 'function')\n },\n resolveTypedName(name) {\n return this.default(name, 'type')\n },\n resolvePathName(name, type) {\n return this.default(name, type)\n },\n resolveParamName(node, param) {\n return this.resolveName(`${node.operationId} ${this.default(param.in)} ${param.name}`)\n },\n resolveParamTypedName(node, param) {\n return this.resolveTypedName(`${node.operationId} ${this.default(param.in)} ${param.name}`)\n },\n resolveResponseStatusName(node, statusCode) {\n return this.resolveName(`${node.operationId} Status ${statusCode}`)\n },\n resolveResponseStatusTypedName(node, statusCode) {\n return this.resolveTypedName(`${node.operationId} Status ${statusCode}`)\n },\n resolveDataName(node) {\n return this.resolveName(`${node.operationId} Data`)\n },\n resolveDataTypedName(node) {\n return this.resolveTypedName(`${node.operationId} Data`)\n },\n resolveRequestConfigName(node) {\n return this.resolveName(`${node.operationId} RequestConfig`)\n },\n resolveRequestConfigTypedName(node) {\n return this.resolveTypedName(`${node.operationId} RequestConfig`)\n },\n resolveResponsesName(node) {\n return this.resolveName(`${node.operationId} Responses`)\n },\n resolveResponsesTypedName(node) {\n return this.resolveTypedName(`${node.operationId} Responses`)\n },\n resolveResponseName(node) {\n return this.resolveName(`${node.operationId} Response`)\n },\n resolveResponseTypedName(node) {\n return this.resolveTypedName(`${node.operationId} Response`)\n },\n resolveEnumKeyTypedName(node) {\n return `${this.resolveTypedName(node.name ?? '')}Key`\n },\n resolvePathParamsName(_node) {\n throw new Error('resolvePathParamsName is only available in legacy mode (legacy: true). Use resolveParamName per individual parameter instead.')\n },\n resolvePathParamsTypedName(_node) {\n throw new Error('resolvePathParamsTypedName is only available in legacy mode (legacy: true). Use resolveParamTypedName per individual parameter instead.')\n },\n resolveQueryParamsName(node) {\n return this.resolveName(`${node.operationId} QueryParams`)\n },\n resolveQueryParamsTypedName(node) {\n return this.resolveTypedName(`${node.operationId} QueryParams`)\n },\n resolveHeaderParamsName(_node) {\n throw new Error('resolveHeaderParamsName is only available in legacy mode (legacy: true). Use resolveParamName per individual parameter instead.')\n },\n resolveHeaderParamsTypedName(_node) {\n throw new Error(\n 'resolveHeaderParamsTypedName is only available in legacy mode (legacy: true). Use resolveParamTypedName per individual parameter instead.',\n )\n },\n }\n})\n","import { defineResolver } from '@kubb/core'\nimport type { PluginTs } from '../types.ts'\nimport { resolverTs } from './resolverTs.ts'\n\n/**\n * Legacy resolver for `@kubb/plugin-ts` that reproduces the naming conventions\n * used before the v2 resolver refactor. Enable via `legacy: true` in plugin options.\n *\n * Key differences from the default resolver:\n * - Response status types: `<OperationId><StatusCode>` (e.g. `CreatePets201`) instead of `<OperationId>Status201`\n * - Default/error responses: `<OperationId>Error` instead of `<OperationId>StatusDefault`\n * - Request body: `<OperationId>MutationRequest` (non-GET) / `<OperationId>QueryRequest` (GET)\n * - Combined responses type: `<OperationId>Mutation` / `<OperationId>Query`\n * - Response union: `<OperationId>MutationResponse` / `<OperationId>QueryResponse`\n *\n * @example\n * ```ts\n * import { resolverTsLegacy } from '@kubb/plugin-ts'\n *\n * resolverTsLegacy.resolveResponseStatusTypedName(node, 201) // → 'CreatePets201'\n * resolverTsLegacy.resolveResponseStatusTypedName(node, 'default') // → 'CreatePetsError'\n * resolverTsLegacy.resolveDataTypedName(node) // → 'CreatePetsMutationRequest' (POST)\n * resolverTsLegacy.resolveResponsesTypedName(node) // → 'CreatePetsMutation' (POST)\n * resolverTsLegacy.resolveResponseTypedName(node) // → 'CreatePetsMutationResponse' (POST)\n * ```\n */\nexport const resolverTsLegacy = defineResolver<PluginTs>(() => {\n return {\n ...resolverTs,\n resolveResponseStatusName(node, statusCode) {\n if (statusCode === 'default') {\n return this.resolveName(`${node.operationId} Error`)\n }\n return this.resolveName(`${node.operationId} ${statusCode}`)\n },\n resolveResponseStatusTypedName(node, statusCode) {\n if (statusCode === 'default') {\n return this.resolveTypedName(`${node.operationId} Error`)\n }\n return this.resolveTypedName(`${node.operationId} ${statusCode}`)\n },\n resolveDataName(node) {\n const suffix = node.method === 'GET' ? 'QueryRequest' : 'MutationRequest'\n return this.resolveName(`${node.operationId} ${suffix}`)\n },\n resolveDataTypedName(node) {\n const suffix = node.method === 'GET' ? 'QueryRequest' : 'MutationRequest'\n return this.resolveTypedName(`${node.operationId} ${suffix}`)\n },\n resolveResponsesName(node) {\n const suffix = node.method === 'GET' ? 'Query' : 'Mutation'\n return `${this.default(node.operationId, 'function')}${suffix}`\n },\n resolveResponsesTypedName(node) {\n const suffix = node.method === 'GET' ? 'Query' : 'Mutation'\n return `${this.default(node.operationId, 'type')}${suffix}`\n },\n resolveResponseName(node) {\n const suffix = node.method === 'GET' ? 'QueryResponse' : 'MutationResponse'\n return this.resolveName(`${node.operationId} ${suffix}`)\n },\n resolveResponseTypedName(node) {\n const suffix = node.method === 'GET' ? 'QueryResponse' : 'MutationResponse'\n return this.resolveTypedName(`${node.operationId} ${suffix}`)\n },\n resolvePathParamsName(node) {\n return this.resolveName(`${node.operationId} PathParams`)\n },\n resolvePathParamsTypedName(node) {\n return this.resolveTypedName(`${node.operationId} PathParams`)\n },\n resolveQueryParamsName(node) {\n return this.resolveName(`${node.operationId} QueryParams`)\n },\n resolveQueryParamsTypedName(node) {\n return this.resolveTypedName(`${node.operationId} QueryParams`)\n },\n resolveHeaderParamsName(node) {\n return this.resolveName(`${node.operationId} HeaderParams`)\n },\n resolveHeaderParamsTypedName(node) {\n return this.resolveTypedName(`${node.operationId} HeaderParams`)\n },\n }\n})\n"],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { t as __name } from "./chunk--u3MIqq1.js";
|
|
2
|
+
import { r as ResolverTs } from "./types-BSRhtbGl.js";
|
|
3
|
+
|
|
4
|
+
//#region src/resolvers/resolverTs.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Resolver for `@kubb/plugin-ts` that provides the default naming and path-resolution
|
|
7
|
+
* helpers used by the plugin. Import this in other plugins to resolve the exact names and
|
|
8
|
+
* paths that `plugin-ts` generates without hardcoding the conventions.
|
|
9
|
+
*
|
|
10
|
+
* The `default` method is automatically injected by `defineResolver` — it uses `camelCase`
|
|
11
|
+
* for identifiers/files and `pascalCase` for type names.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { resolver } from '@kubb/plugin-ts'
|
|
16
|
+
*
|
|
17
|
+
* resolver.default('list pets', 'type') // → 'ListPets'
|
|
18
|
+
* resolver.resolveName('list pets status 200') // → 'listPetsStatus200'
|
|
19
|
+
* resolver.resolveTypedName('list pets status 200') // → 'ListPetsStatus200'
|
|
20
|
+
* resolver.resolvePathName('list pets', 'file') // → 'listPets'
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
declare const resolverTs: ResolverTs;
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/resolvers/resolverTsLegacy.d.ts
|
|
26
|
+
/**
|
|
27
|
+
* Legacy resolver for `@kubb/plugin-ts` that reproduces the naming conventions
|
|
28
|
+
* used before the v2 resolver refactor. Enable via `legacy: true` in plugin options.
|
|
29
|
+
*
|
|
30
|
+
* Key differences from the default resolver:
|
|
31
|
+
* - Response status types: `<OperationId><StatusCode>` (e.g. `CreatePets201`) instead of `<OperationId>Status201`
|
|
32
|
+
* - Default/error responses: `<OperationId>Error` instead of `<OperationId>StatusDefault`
|
|
33
|
+
* - Request body: `<OperationId>MutationRequest` (non-GET) / `<OperationId>QueryRequest` (GET)
|
|
34
|
+
* - Combined responses type: `<OperationId>Mutation` / `<OperationId>Query`
|
|
35
|
+
* - Response union: `<OperationId>MutationResponse` / `<OperationId>QueryResponse`
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* import { resolverTsLegacy } from '@kubb/plugin-ts'
|
|
40
|
+
*
|
|
41
|
+
* resolverTsLegacy.resolveResponseStatusTypedName(node, 201) // → 'CreatePets201'
|
|
42
|
+
* resolverTsLegacy.resolveResponseStatusTypedName(node, 'default') // → 'CreatePetsError'
|
|
43
|
+
* resolverTsLegacy.resolveDataTypedName(node) // → 'CreatePetsMutationRequest' (POST)
|
|
44
|
+
* resolverTsLegacy.resolveResponsesTypedName(node) // → 'CreatePetsMutation' (POST)
|
|
45
|
+
* resolverTsLegacy.resolveResponseTypedName(node) // → 'CreatePetsMutationResponse' (POST)
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
declare const resolverTsLegacy: ResolverTs;
|
|
49
|
+
//#endregion
|
|
50
|
+
export { resolverTs, resolverTsLegacy };
|
|
51
|
+
//# sourceMappingURL=resolvers.d.ts.map
|
|
@@ -307,8 +307,15 @@ type ResolvedOptions = {
|
|
|
307
307
|
paramsCasing: Options['paramsCasing'];
|
|
308
308
|
legacy: NonNullable<Options['legacy']>;
|
|
309
309
|
resolver: ResolverTs;
|
|
310
|
+
/**
|
|
311
|
+
* The base resolver without any `transformers.name` wrapping.
|
|
312
|
+
* Used internally to derive enum prefix names so that user-defined
|
|
313
|
+
* name transformations (e.g. appending `Type`) are not embedded in
|
|
314
|
+
* the middle of inline-enum identifiers.
|
|
315
|
+
*/
|
|
316
|
+
baseResolver?: ResolverTs;
|
|
310
317
|
};
|
|
311
318
|
type PluginTs = PluginFactoryOptions<'plugin-ts', Options, ResolvedOptions, never, ResolvePathOptions, ResolverTs>;
|
|
312
319
|
//#endregion
|
|
313
320
|
export { PluginTs as n, ResolverTs as r, Options as t };
|
|
314
|
-
//# sourceMappingURL=types-
|
|
321
|
+
//# sourceMappingURL=types-BSRhtbGl.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubb/plugin-ts",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.13",
|
|
4
4
|
"description": "TypeScript code generation plugin for Kubb, transforming OpenAPI schemas into TypeScript interfaces, types, and utility functions.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -39,6 +39,10 @@
|
|
|
39
39
|
"import": "./dist/generators.js",
|
|
40
40
|
"require": "./dist/generators.cjs"
|
|
41
41
|
},
|
|
42
|
+
"./resolvers": {
|
|
43
|
+
"import": "./dist/resolvers.js",
|
|
44
|
+
"require": "./dist/resolvers.cjs"
|
|
45
|
+
},
|
|
42
46
|
"./package.json": "./package.json"
|
|
43
47
|
},
|
|
44
48
|
"types": "./dist/index.d.ts",
|
|
@@ -49,6 +53,9 @@
|
|
|
49
53
|
],
|
|
50
54
|
"generators": [
|
|
51
55
|
"./dist/generators.d.ts"
|
|
56
|
+
],
|
|
57
|
+
"resolvers": [
|
|
58
|
+
"./dist/resolvers.d.ts"
|
|
52
59
|
]
|
|
53
60
|
}
|
|
54
61
|
},
|
|
@@ -71,10 +78,10 @@
|
|
|
71
78
|
"@kubb/react-fabric": "0.14.0",
|
|
72
79
|
"remeda": "^2.33.6",
|
|
73
80
|
"typescript": "5.9.3",
|
|
74
|
-
"@kubb/
|
|
75
|
-
"@kubb/
|
|
76
|
-
"@kubb/
|
|
77
|
-
"@kubb/
|
|
81
|
+
"@kubb/ast": "5.0.0-alpha.13",
|
|
82
|
+
"@kubb/core": "5.0.0-alpha.13",
|
|
83
|
+
"@kubb/oas": "5.0.0-alpha.13",
|
|
84
|
+
"@kubb/plugin-oas": "5.0.0-alpha.13"
|
|
78
85
|
},
|
|
79
86
|
"peerDependencies": {
|
|
80
87
|
"@kubb/react-fabric": "0.14.0"
|
package/src/components/Type.tsx
CHANGED
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
buildGroupedParamsSchema,
|
|
12
12
|
buildLegacyResponsesSchemaNode,
|
|
13
13
|
buildLegacyResponseUnionSchemaNode,
|
|
14
|
+
buildParamsSchema,
|
|
14
15
|
buildResponsesSchemaNode,
|
|
15
16
|
buildResponseUnionSchemaNode,
|
|
16
17
|
nameUnnamedEnums,
|
|
@@ -20,7 +21,7 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
20
21
|
name: 'typescript',
|
|
21
22
|
type: 'react',
|
|
22
23
|
Operation({ node, adapter, options }) {
|
|
23
|
-
const { enumType, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, resolver, legacy } = options
|
|
24
|
+
const { enumType, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, resolver, baseResolver, legacy } = options
|
|
24
25
|
const { mode, getFile, resolveBanner, resolveFooter } = useKubb<PluginTs>()
|
|
25
26
|
|
|
26
27
|
const file = getFile({
|
|
@@ -71,6 +72,7 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
71
72
|
syntaxType={syntaxType}
|
|
72
73
|
resolver={resolver}
|
|
73
74
|
keysToOmit={keysToOmit}
|
|
75
|
+
legacy={legacy}
|
|
74
76
|
/>
|
|
75
77
|
</>
|
|
76
78
|
)
|
|
@@ -79,9 +81,10 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
79
81
|
const responseTypes = legacy
|
|
80
82
|
? node.responses.map((res) => {
|
|
81
83
|
const responseName = resolver.resolveResponseStatusName(node, res.statusCode)
|
|
84
|
+
const baseResponseName = (baseResolver ?? resolver).resolveResponseStatusName(node, res.statusCode)
|
|
82
85
|
|
|
83
86
|
return renderSchemaType({
|
|
84
|
-
node: res.schema ? nameUnnamedEnums(res.schema,
|
|
87
|
+
node: res.schema ? nameUnnamedEnums(res.schema, baseResponseName) : res.schema,
|
|
85
88
|
name: responseName,
|
|
86
89
|
typedName: resolver.resolveResponseStatusTypedName(node, res.statusCode),
|
|
87
90
|
description: res.description,
|
|
@@ -100,10 +103,10 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
100
103
|
|
|
101
104
|
const requestType = node.requestBody?.schema
|
|
102
105
|
? renderSchemaType({
|
|
103
|
-
node: legacy ? nameUnnamedEnums(node.requestBody.schema, resolver.resolveDataName(node)) : node.requestBody.schema,
|
|
106
|
+
node: legacy ? nameUnnamedEnums(node.requestBody.schema, (baseResolver ?? resolver).resolveDataName(node)) : node.requestBody.schema,
|
|
104
107
|
name: resolver.resolveDataName(node),
|
|
105
108
|
typedName: resolver.resolveDataTypedName(node),
|
|
106
|
-
description: node.requestBody.schema.description,
|
|
109
|
+
description: node.requestBody.description ?? node.requestBody.schema.description,
|
|
107
110
|
keysToOmit: node.requestBody.keysToOmit,
|
|
108
111
|
})
|
|
109
112
|
: null
|
|
@@ -116,21 +119,21 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
116
119
|
const legacyParamTypes = [
|
|
117
120
|
pathParams.length > 0
|
|
118
121
|
? renderSchemaType({
|
|
119
|
-
node: buildGroupedParamsSchema({ params: pathParams, parentName: resolver.resolvePathParamsName!(node) }),
|
|
122
|
+
node: buildGroupedParamsSchema({ params: pathParams, parentName: (baseResolver ?? resolver).resolvePathParamsName!(node) }),
|
|
120
123
|
name: resolver.resolvePathParamsName!(node),
|
|
121
124
|
typedName: resolver.resolvePathParamsTypedName!(node),
|
|
122
125
|
})
|
|
123
126
|
: null,
|
|
124
127
|
queryParams.length > 0
|
|
125
128
|
? renderSchemaType({
|
|
126
|
-
node: buildGroupedParamsSchema({ params: queryParams, parentName: resolver.resolveQueryParamsName!(node) }),
|
|
129
|
+
node: buildGroupedParamsSchema({ params: queryParams, parentName: (baseResolver ?? resolver).resolveQueryParamsName!(node) }),
|
|
127
130
|
name: resolver.resolveQueryParamsName!(node),
|
|
128
131
|
typedName: resolver.resolveQueryParamsTypedName!(node),
|
|
129
132
|
})
|
|
130
133
|
: null,
|
|
131
134
|
headerParams.length > 0
|
|
132
135
|
? renderSchemaType({
|
|
133
|
-
node: buildGroupedParamsSchema({ params: headerParams, parentName: resolver.resolveHeaderParamsName!(node) }),
|
|
136
|
+
node: buildGroupedParamsSchema({ params: headerParams, parentName: (baseResolver ?? resolver).resolveHeaderParamsName!(node) }),
|
|
134
137
|
name: resolver.resolveHeaderParamsName!(node),
|
|
135
138
|
typedName: resolver.resolveHeaderParamsTypedName!(node),
|
|
136
139
|
})
|
|
@@ -154,8 +157,8 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
154
157
|
{legacyParamTypes}
|
|
155
158
|
{responseTypes}
|
|
156
159
|
{requestType}
|
|
157
|
-
{legacyResponsesType}
|
|
158
160
|
{legacyResponseType}
|
|
161
|
+
{legacyResponsesType}
|
|
159
162
|
</File>
|
|
160
163
|
)
|
|
161
164
|
}
|
|
@@ -168,6 +171,16 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
168
171
|
}),
|
|
169
172
|
)
|
|
170
173
|
|
|
174
|
+
const queryParamsList = params.filter((p) => p.in === 'query')
|
|
175
|
+
const queryParamsType =
|
|
176
|
+
queryParamsList.length > 0
|
|
177
|
+
? renderSchemaType({
|
|
178
|
+
node: buildParamsSchema({ params: queryParamsList, node, resolver }),
|
|
179
|
+
name: resolver.resolveQueryParamsName!(node),
|
|
180
|
+
typedName: resolver.resolveQueryParamsTypedName!(node),
|
|
181
|
+
})
|
|
182
|
+
: null
|
|
183
|
+
|
|
171
184
|
const dataType = renderSchemaType({
|
|
172
185
|
node: buildDataSchemaNode({ node: { ...node, parameters: params }, resolver }),
|
|
173
186
|
name: resolver.resolveRequestConfigName(node),
|
|
@@ -190,6 +203,7 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
190
203
|
return (
|
|
191
204
|
<File baseName={file.baseName} path={file.path} meta={file.meta} banner={resolveBanner()} footer={resolveFooter()}>
|
|
192
205
|
{paramTypes}
|
|
206
|
+
{queryParamsType}
|
|
193
207
|
{responseTypes}
|
|
194
208
|
{requestType}
|
|
195
209
|
{dataType}
|
|
@@ -199,7 +213,7 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
199
213
|
)
|
|
200
214
|
},
|
|
201
215
|
Schema({ node, adapter, options }) {
|
|
202
|
-
const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, resolver } = options
|
|
216
|
+
const { enumType, enumKeyCasing, syntaxType, optionalType, arrayType, resolver, legacy } = options
|
|
203
217
|
const { mode, getFile, resolveBanner, resolveFooter } = useKubb<PluginTs>()
|
|
204
218
|
|
|
205
219
|
if (!node.name) {
|
|
@@ -237,6 +251,7 @@ export const typeGenerator = defineGenerator<PluginTs>({
|
|
|
237
251
|
arrayType={arrayType}
|
|
238
252
|
syntaxType={syntaxType}
|
|
239
253
|
resolver={resolver}
|
|
254
|
+
legacy={legacy}
|
|
240
255
|
/>
|
|
241
256
|
</File>
|
|
242
257
|
)
|
package/src/generators/utils.ts
CHANGED
|
@@ -169,7 +169,7 @@ export function buildGroupedParamsSchema({ params, parentName }: BuildGroupedPar
|
|
|
169
169
|
|
|
170
170
|
/**
|
|
171
171
|
* Builds the legacy wrapper `ObjectSchemaNode` for `<OperationId>Mutation` / `<OperationId>Query`.
|
|
172
|
-
* Structure: `{ Response, Request
|
|
172
|
+
* Structure: `{ Response, Request?, QueryParams?, PathParams?, HeaderParams?, Errors }`.
|
|
173
173
|
* Mirrors the v4 naming convention where this type acts as a namespace for the operation's shapes.
|
|
174
174
|
*
|
|
175
175
|
* @deprecated Legacy only — will be removed in v6.
|
|
@@ -211,11 +211,13 @@ export function buildLegacyResponsesSchemaNode({ node, resolver }: BuildOperatio
|
|
|
211
211
|
schema: createSchema({ type: 'ref', name: resolver.resolveDataTypedName(node) }),
|
|
212
212
|
}),
|
|
213
213
|
)
|
|
214
|
-
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (node.parameters.some((p) => p.in === 'query') && resolver.resolveQueryParamsTypedName) {
|
|
215
217
|
properties.push(
|
|
216
218
|
createProperty({
|
|
217
219
|
name: 'QueryParams',
|
|
218
|
-
schema: createSchema({ type: 'ref', name: resolver.resolveQueryParamsTypedName
|
|
220
|
+
schema: createSchema({ type: 'ref', name: resolver.resolveQueryParamsTypedName(node) }),
|
|
219
221
|
}),
|
|
220
222
|
)
|
|
221
223
|
}
|
package/src/index.ts
CHANGED
package/src/plugin.ts
CHANGED
|
@@ -2,8 +2,8 @@ import path from 'node:path'
|
|
|
2
2
|
import { camelCase } from '@internals/utils'
|
|
3
3
|
import { walk } from '@kubb/ast'
|
|
4
4
|
import { createPlugin, type Group, getBarrelFiles, getMode, renderOperation, renderSchema } from '@kubb/core'
|
|
5
|
-
import { typeGenerator } from './generators'
|
|
6
|
-
import { resolverTs, resolverTsLegacy } from './
|
|
5
|
+
import { typeGenerator } from './generators/index.ts'
|
|
6
|
+
import { resolverTs, resolverTsLegacy } from './resolvers/index.ts'
|
|
7
7
|
import type { PluginTs } from './types.ts'
|
|
8
8
|
|
|
9
9
|
export const pluginTsName = 'plugin-ts' satisfies PluginTs['name']
|
|
@@ -59,6 +59,7 @@ export const pluginTs = createPlugin<PluginTs>((options) => {
|
|
|
59
59
|
paramsCasing,
|
|
60
60
|
legacy,
|
|
61
61
|
resolver,
|
|
62
|
+
baseResolver,
|
|
62
63
|
},
|
|
63
64
|
resolvePath(baseName, pathMode, options) {
|
|
64
65
|
const root = path.resolve(this.config.root, this.config.output.path)
|
package/src/printer.ts
CHANGED
|
@@ -134,11 +134,14 @@ function buildPropertyType(schema: SchemaNode, baseType: ts.TypeNode, optionalTy
|
|
|
134
134
|
* Collects JSDoc annotation strings (description, deprecated, min/max, pattern, default, example, type) for a schema node.
|
|
135
135
|
*/
|
|
136
136
|
function buildPropertyJSDocComments(schema: SchemaNode): Array<string | undefined> {
|
|
137
|
+
const isArray = schema.type === 'array'
|
|
138
|
+
|
|
137
139
|
return [
|
|
138
140
|
'description' in schema && schema.description ? `@description ${jsStringEscape(schema.description)}` : undefined,
|
|
139
141
|
'deprecated' in schema && schema.deprecated ? '@deprecated' : undefined,
|
|
140
|
-
|
|
141
|
-
'
|
|
142
|
+
// minItems/maxItems on arrays should not be emitted as @minLength/@maxLength
|
|
143
|
+
!isArray && 'min' in schema && schema.min !== undefined ? `@minLength ${schema.min}` : undefined,
|
|
144
|
+
!isArray && 'max' in schema && schema.max !== undefined ? `@maxLength ${schema.max}` : undefined,
|
|
142
145
|
'pattern' in schema && schema.pattern ? `@pattern ${schema.pattern}` : undefined,
|
|
143
146
|
'default' in schema && schema.default !== undefined
|
|
144
147
|
? `@default ${'primitive' in schema && schema.primitive === 'string' ? stringify(schema.default as string) : schema.default}`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { pascalCase } from '@internals/utils'
|
|
2
2
|
import { defineResolver } from '@kubb/core'
|
|
3
|
-
import type { PluginTs } from '
|
|
3
|
+
import type { PluginTs } from '../types.ts'
|
|
4
4
|
|
|
5
5
|
function resolveName(name: string, type?: 'file' | 'function' | 'type' | 'const'): string {
|
|
6
6
|
return pascalCase(name, { isFile: type === 'file' })
|
|
@@ -83,13 +83,11 @@ export const resolverTs = defineResolver<PluginTs>(() => {
|
|
|
83
83
|
resolvePathParamsTypedName(_node) {
|
|
84
84
|
throw new Error('resolvePathParamsTypedName is only available in legacy mode (legacy: true). Use resolveParamTypedName per individual parameter instead.')
|
|
85
85
|
},
|
|
86
|
-
resolveQueryParamsName(
|
|
87
|
-
|
|
86
|
+
resolveQueryParamsName(node) {
|
|
87
|
+
return this.resolveName(`${node.operationId} QueryParams`)
|
|
88
88
|
},
|
|
89
|
-
resolveQueryParamsTypedName(
|
|
90
|
-
|
|
91
|
-
'resolveQueryParamsTypedName is only available in legacy mode (legacy: true). Use resolveParamTypedName per individual parameter instead.',
|
|
92
|
-
)
|
|
89
|
+
resolveQueryParamsTypedName(node) {
|
|
90
|
+
return this.resolveTypedName(`${node.operationId} QueryParams`)
|
|
93
91
|
},
|
|
94
92
|
resolveHeaderParamsName(_node) {
|
|
95
93
|
throw new Error('resolveHeaderParamsName is only available in legacy mode (legacy: true). Use resolveParamName per individual parameter instead.')
|
|
@@ -101,85 +99,3 @@ export const resolverTs = defineResolver<PluginTs>(() => {
|
|
|
101
99
|
},
|
|
102
100
|
}
|
|
103
101
|
})
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Legacy resolver for `@kubb/plugin-ts` that reproduces the naming conventions
|
|
107
|
-
* used before the v2 resolver refactor. Enable via `legacy: true` in plugin options.
|
|
108
|
-
*
|
|
109
|
-
* Key differences from the default resolver:
|
|
110
|
-
* - Response status types: `<OperationId><StatusCode>` (e.g. `CreatePets201`) instead of `<OperationId>Status201`
|
|
111
|
-
* - Default/error responses: `<OperationId>Error` instead of `<OperationId>StatusDefault`
|
|
112
|
-
* - Request body: `<OperationId>MutationRequest` (non-GET) / `<OperationId>QueryRequest` (GET)
|
|
113
|
-
* - Combined responses type: `<OperationId>Mutation` / `<OperationId>Query`
|
|
114
|
-
* - Response union: `<OperationId>MutationResponse` / `<OperationId>QueryResponse`
|
|
115
|
-
*
|
|
116
|
-
* @example
|
|
117
|
-
* ```ts
|
|
118
|
-
* import { resolverTsLegacy } from '@kubb/plugin-ts'
|
|
119
|
-
*
|
|
120
|
-
* resolverTsLegacy.resolveResponseStatusTypedName(node, 201) // → 'CreatePets201'
|
|
121
|
-
* resolverTsLegacy.resolveResponseStatusTypedName(node, 'default') // → 'CreatePetsError'
|
|
122
|
-
* resolverTsLegacy.resolveDataTypedName(node) // → 'CreatePetsMutationRequest' (POST)
|
|
123
|
-
* resolverTsLegacy.resolveResponsesTypedName(node) // → 'CreatePetsMutation' (POST)
|
|
124
|
-
* resolverTsLegacy.resolveResponseTypedName(node) // → 'CreatePetsMutationResponse' (POST)
|
|
125
|
-
* ```
|
|
126
|
-
*/
|
|
127
|
-
export const resolverTsLegacy = defineResolver<PluginTs>(() => {
|
|
128
|
-
return {
|
|
129
|
-
...resolverTs,
|
|
130
|
-
resolveResponseStatusName(node, statusCode) {
|
|
131
|
-
if (statusCode === 'default') {
|
|
132
|
-
return this.resolveName(`${node.operationId} Error`)
|
|
133
|
-
}
|
|
134
|
-
return this.resolveName(`${node.operationId} ${statusCode}`)
|
|
135
|
-
},
|
|
136
|
-
resolveResponseStatusTypedName(node, statusCode) {
|
|
137
|
-
if (statusCode === 'default') {
|
|
138
|
-
return this.resolveTypedName(`${node.operationId} Error`)
|
|
139
|
-
}
|
|
140
|
-
return this.resolveTypedName(`${node.operationId} ${statusCode}`)
|
|
141
|
-
},
|
|
142
|
-
resolveDataName(node) {
|
|
143
|
-
const suffix = node.method === 'GET' ? 'QueryRequest' : 'MutationRequest'
|
|
144
|
-
return this.resolveName(`${node.operationId} ${suffix}`)
|
|
145
|
-
},
|
|
146
|
-
resolveDataTypedName(node) {
|
|
147
|
-
const suffix = node.method === 'GET' ? 'QueryRequest' : 'MutationRequest'
|
|
148
|
-
return this.resolveTypedName(`${node.operationId} ${suffix}`)
|
|
149
|
-
},
|
|
150
|
-
resolveResponsesName(node) {
|
|
151
|
-
const suffix = node.method === 'GET' ? 'Query' : 'Mutation'
|
|
152
|
-
return this.resolveName(`${node.operationId} ${suffix}`)
|
|
153
|
-
},
|
|
154
|
-
resolveResponsesTypedName(node) {
|
|
155
|
-
const suffix = node.method === 'GET' ? 'Query' : 'Mutation'
|
|
156
|
-
return this.resolveTypedName(`${node.operationId} ${suffix}`)
|
|
157
|
-
},
|
|
158
|
-
resolveResponseName(node) {
|
|
159
|
-
const suffix = node.method === 'GET' ? 'QueryResponse' : 'MutationResponse'
|
|
160
|
-
return this.resolveName(`${node.operationId} ${suffix}`)
|
|
161
|
-
},
|
|
162
|
-
resolveResponseTypedName(node) {
|
|
163
|
-
const suffix = node.method === 'GET' ? 'QueryResponse' : 'MutationResponse'
|
|
164
|
-
return this.resolveTypedName(`${node.operationId} ${suffix}`)
|
|
165
|
-
},
|
|
166
|
-
resolvePathParamsName(node) {
|
|
167
|
-
return this.resolveName(`${node.operationId} PathParams`)
|
|
168
|
-
},
|
|
169
|
-
resolvePathParamsTypedName(node) {
|
|
170
|
-
return this.resolveTypedName(`${node.operationId} PathParams`)
|
|
171
|
-
},
|
|
172
|
-
resolveQueryParamsName(node) {
|
|
173
|
-
return this.resolveName(`${node.operationId} QueryParams`)
|
|
174
|
-
},
|
|
175
|
-
resolveQueryParamsTypedName(node) {
|
|
176
|
-
return this.resolveTypedName(`${node.operationId} QueryParams`)
|
|
177
|
-
},
|
|
178
|
-
resolveHeaderParamsName(node) {
|
|
179
|
-
return this.resolveName(`${node.operationId} HeaderParams`)
|
|
180
|
-
},
|
|
181
|
-
resolveHeaderParamsTypedName(node) {
|
|
182
|
-
return this.resolveTypedName(`${node.operationId} HeaderParams`)
|
|
183
|
-
},
|
|
184
|
-
}
|
|
185
|
-
})
|