@orval/mcp 7.10.0 → 7.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -237
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __commonJS = (cb, mod) => function __require() {
|
|
9
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
10
|
-
};
|
|
11
6
|
var __export = (target, all) => {
|
|
12
7
|
for (var name in all)
|
|
13
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -20,239 +15,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
20
15
|
}
|
|
21
16
|
return to;
|
|
22
17
|
};
|
|
23
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
24
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
25
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
26
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
27
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
28
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
29
|
-
mod
|
|
30
|
-
));
|
|
31
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
19
|
|
|
33
|
-
// ../fetch/dist/index.js
|
|
34
|
-
var require_dist = __commonJS({
|
|
35
|
-
"../fetch/dist/index.js"(exports2, module2) {
|
|
36
|
-
"use strict";
|
|
37
|
-
var __defProp2 = Object.defineProperty;
|
|
38
|
-
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
|
39
|
-
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
40
|
-
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
41
|
-
var __export2 = (target, all) => {
|
|
42
|
-
for (var name in all)
|
|
43
|
-
__defProp2(target, name, { get: all[name], enumerable: true });
|
|
44
|
-
};
|
|
45
|
-
var __copyProps2 = (to, from, except, desc) => {
|
|
46
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
47
|
-
for (let key of __getOwnPropNames2(from))
|
|
48
|
-
if (!__hasOwnProp2.call(to, key) && key !== except)
|
|
49
|
-
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
|
|
50
|
-
}
|
|
51
|
-
return to;
|
|
52
|
-
};
|
|
53
|
-
var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
|
|
54
|
-
var index_exports2 = {};
|
|
55
|
-
__export2(index_exports2, {
|
|
56
|
-
builder: () => builder2,
|
|
57
|
-
default: () => index_default2,
|
|
58
|
-
fetchResponseTypeName: () => fetchResponseTypeName,
|
|
59
|
-
generateClient: () => generateClient2,
|
|
60
|
-
generateFetchHeader: () => generateFetchHeader2,
|
|
61
|
-
generateRequestFunction: () => generateRequestFunction
|
|
62
|
-
});
|
|
63
|
-
module2.exports = __toCommonJS2(index_exports2);
|
|
64
|
-
var import_core2 = require("@orval/core");
|
|
65
|
-
var import_core22 = require("@orval/core");
|
|
66
|
-
var generateRequestFunction = ({
|
|
67
|
-
queryParams,
|
|
68
|
-
headers,
|
|
69
|
-
operationName,
|
|
70
|
-
response,
|
|
71
|
-
mutator,
|
|
72
|
-
body,
|
|
73
|
-
props,
|
|
74
|
-
verb,
|
|
75
|
-
formData,
|
|
76
|
-
formUrlEncoded,
|
|
77
|
-
override
|
|
78
|
-
}, { route, context, pathRoute }) => {
|
|
79
|
-
var _a, _b, _c;
|
|
80
|
-
const isRequestOptions = (override == null ? void 0 : override.requestOptions) !== false;
|
|
81
|
-
const isFormData = (override == null ? void 0 : override.formData.disabled) === false;
|
|
82
|
-
const isFormUrlEncoded = (override == null ? void 0 : override.formUrlEncoded) !== false;
|
|
83
|
-
const getUrlFnName = (0, import_core22.camel)(`get-${operationName}-url`);
|
|
84
|
-
const getUrlFnProps = (0, import_core22.toObjectString)(
|
|
85
|
-
props.filter(
|
|
86
|
-
(prop) => prop.type === import_core22.GetterPropType.PARAM || prop.type === import_core22.GetterPropType.NAMED_PATH_PARAMS || prop.type === import_core22.GetterPropType.QUERY_PARAM
|
|
87
|
-
),
|
|
88
|
-
"implementation"
|
|
89
|
-
);
|
|
90
|
-
const spec = context.specs[context.specKey].paths[pathRoute];
|
|
91
|
-
const parameters = ((_a = spec == null ? void 0 : spec[verb]) == null ? void 0 : _a.parameters) || [];
|
|
92
|
-
const explodeParameters = parameters.filter((parameter) => {
|
|
93
|
-
const { schema } = (0, import_core22.resolveRef)(parameter, context);
|
|
94
|
-
return schema.in === "query" && schema.explode;
|
|
95
|
-
});
|
|
96
|
-
const explodeParametersNames = explodeParameters.map((parameter) => {
|
|
97
|
-
const { schema } = (0, import_core22.resolveRef)(parameter, context);
|
|
98
|
-
return schema.name;
|
|
99
|
-
});
|
|
100
|
-
const explodeArrayImplementation = explodeParameters.length > 0 ? `const explodeParameters = ${JSON.stringify(explodeParametersNames)};
|
|
101
|
-
|
|
102
|
-
if (value instanceof Array && explodeParameters.includes(key)) {
|
|
103
|
-
value.forEach((v) => normalizedParams.append(key, v === null ? 'null' : v.toString()));
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
` : "";
|
|
107
|
-
const isExplodeParametersOnly = explodeParameters.length === parameters.length;
|
|
108
|
-
const nomalParamsImplementation = `if (value !== undefined) {
|
|
109
|
-
normalizedParams.append(key, value === null ? 'null' : value.toString())
|
|
110
|
-
}`;
|
|
111
|
-
const getUrlFnImplementation = `export const ${getUrlFnName} = (${getUrlFnProps}) => {
|
|
112
|
-
${queryParams ? ` const normalizedParams = new URLSearchParams();
|
|
113
|
-
|
|
114
|
-
Object.entries(params || {}).forEach(([key, value]) => {
|
|
115
|
-
${explodeArrayImplementation}
|
|
116
|
-
${!isExplodeParametersOnly ? nomalParamsImplementation : ""}
|
|
117
|
-
});` : ""}
|
|
118
|
-
|
|
119
|
-
${queryParams ? `const stringifiedParams = normalizedParams.toString();` : ``}
|
|
120
|
-
|
|
121
|
-
${queryParams ? `return stringifiedParams.length > 0 ? \`${route}${"?${stringifiedParams}"}\` : \`${route}\`` : `return \`${route}\``}
|
|
122
|
-
}
|
|
123
|
-
`;
|
|
124
|
-
const isContentTypeNdJson = (contentType) => contentType === "application/nd-json" || contentType === "application/x-ndjson";
|
|
125
|
-
const isNdJson = response.contentTypes.some(isContentTypeNdJson);
|
|
126
|
-
const responseTypeName = fetchResponseTypeName(
|
|
127
|
-
override.fetch.includeHttpResponseReturnType,
|
|
128
|
-
isNdJson ? "Response" : response.definition.success,
|
|
129
|
-
operationName
|
|
130
|
-
);
|
|
131
|
-
const allResponses = [...response.types.success, ...response.types.errors];
|
|
132
|
-
if (allResponses.length === 0) {
|
|
133
|
-
allResponses.push({
|
|
134
|
-
contentType: "",
|
|
135
|
-
hasReadonlyProps: false,
|
|
136
|
-
imports: [],
|
|
137
|
-
isEnum: false,
|
|
138
|
-
isRef: false,
|
|
139
|
-
key: "default",
|
|
140
|
-
schemas: [],
|
|
141
|
-
type: "unknown",
|
|
142
|
-
value: "unknown"
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
const nonDefaultStatuses = allResponses.filter((r) => r.key !== "default").map((r) => r.key);
|
|
146
|
-
const responseDataTypes = allResponses.map(
|
|
147
|
-
(r) => `export type ${responseTypeName}${(0, import_core2.pascal)(r.key)} = {
|
|
148
|
-
${isContentTypeNdJson(r.contentType) ? "stream: Response" : `data: ${r.value || "unknown"}`}
|
|
149
|
-
status: ${r.key === "default" ? nonDefaultStatuses.length ? `Exclude<HTTPStatusCodes, ${nonDefaultStatuses.join(" | ")}>` : "number" : r.key}
|
|
150
|
-
}`
|
|
151
|
-
).join("\n\n");
|
|
152
|
-
const compositeName = `${responseTypeName}Composite`;
|
|
153
|
-
const compositeResponse = `${compositeName} = ${allResponses.map((r) => `${responseTypeName}${(0, import_core2.pascal)(r.key)}`).join(" | ")}`;
|
|
154
|
-
const responseTypeImplementation = override.fetch.includeHttpResponseReturnType ? `${responseDataTypes}
|
|
155
|
-
|
|
156
|
-
export type ${compositeResponse};
|
|
157
|
-
|
|
158
|
-
export type ${responseTypeName} = ${compositeName} & {
|
|
159
|
-
headers: Headers;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
` : "";
|
|
163
|
-
const getUrlFnProperties = props.filter(
|
|
164
|
-
(prop) => prop.type === import_core22.GetterPropType.PARAM || prop.type === import_core22.GetterPropType.QUERY_PARAM || prop.type === import_core22.GetterPropType.NAMED_PATH_PARAMS
|
|
165
|
-
).map((param) => {
|
|
166
|
-
if (param.type === import_core22.GetterPropType.NAMED_PATH_PARAMS) {
|
|
167
|
-
return param.destructured;
|
|
168
|
-
} else {
|
|
169
|
-
return param.name;
|
|
170
|
-
}
|
|
171
|
-
}).join(",");
|
|
172
|
-
const args = `${(0, import_core22.toObjectString)(props, "implementation")} ${isRequestOptions ? `options?: RequestInit` : ""}`;
|
|
173
|
-
const returnType = `Promise<${responseTypeName}>`;
|
|
174
|
-
const globalFetchOptions = (0, import_core22.isObject)(override == null ? void 0 : override.requestOptions) ? `${(_c = (_b = (0, import_core22.stringify)(override == null ? void 0 : override.requestOptions)) == null ? void 0 : _b.slice(1, -1)) == null ? void 0 : _c.trim()}` : "";
|
|
175
|
-
const fetchMethodOption = `method: '${verb.toUpperCase()}'`;
|
|
176
|
-
const ignoreContentTypes = ["multipart/form-data"];
|
|
177
|
-
const fetchHeadersOption = body.contentType && !ignoreContentTypes.includes(body.contentType) ? `headers: { 'Content-Type': '${body.contentType}',${headers ? "...headers," : ""} ...options?.headers }` : headers ? "headers: {...headers, ...options?.headers}" : "";
|
|
178
|
-
const requestBodyParams = (0, import_core22.generateBodyOptions)(
|
|
179
|
-
body,
|
|
180
|
-
isFormData,
|
|
181
|
-
isFormUrlEncoded
|
|
182
|
-
);
|
|
183
|
-
const fetchBodyOption = requestBodyParams ? isFormData && body.formData || isFormUrlEncoded && body.formUrlEncoded ? `body: ${requestBodyParams}` : `body: JSON.stringify(${requestBodyParams})` : "";
|
|
184
|
-
const fetchFnOptions = `${getUrlFnName}(${getUrlFnProperties}),
|
|
185
|
-
{${globalFetchOptions ? "\n" : ""} ${globalFetchOptions}
|
|
186
|
-
${isRequestOptions ? "...options," : ""}
|
|
187
|
-
${fetchMethodOption}${fetchHeadersOption ? "," : ""}
|
|
188
|
-
${fetchHeadersOption}${fetchBodyOption ? "," : ""}
|
|
189
|
-
${fetchBodyOption}
|
|
190
|
-
}
|
|
191
|
-
`;
|
|
192
|
-
const fetchResponseImplementation = isNdJson ? `const stream = await fetch(${fetchFnOptions})
|
|
193
|
-
|
|
194
|
-
${override.fetch.includeHttpResponseReturnType ? "return { status: stream.status, stream, headers: stream.headers }" : `return stream`}
|
|
195
|
-
` : `const res = await fetch(${fetchFnOptions})
|
|
196
|
-
|
|
197
|
-
const body = [204, 205, 304].includes(res.status) ? null : await res.text()
|
|
198
|
-
const data: ${responseTypeName}${override.fetch.includeHttpResponseReturnType ? `['data']` : ""} = body ? JSON.parse(body) : {}
|
|
199
|
-
|
|
200
|
-
${override.fetch.includeHttpResponseReturnType ? `return { data, status: res.status, headers: res.headers } as ${responseTypeName}` : "return data"}
|
|
201
|
-
`;
|
|
202
|
-
const customFetchResponseImplementation = `return ${mutator == null ? void 0 : mutator.name}<${responseTypeName}>(${fetchFnOptions});`;
|
|
203
|
-
const bodyForm = (0, import_core22.generateFormDataAndUrlEncodedFunction)({
|
|
204
|
-
formData,
|
|
205
|
-
formUrlEncoded,
|
|
206
|
-
body,
|
|
207
|
-
isFormData,
|
|
208
|
-
isFormUrlEncoded
|
|
209
|
-
});
|
|
210
|
-
const fetchImplementationBody = mutator ? customFetchResponseImplementation : fetchResponseImplementation;
|
|
211
|
-
const fetchImplementation = `export const ${operationName} = async (${args}): ${returnType} => {
|
|
212
|
-
${bodyForm ? ` ${bodyForm}` : ""}
|
|
213
|
-
${fetchImplementationBody}}
|
|
214
|
-
`;
|
|
215
|
-
const implementation = `${responseTypeImplementation}${getUrlFnImplementation}
|
|
216
|
-
${fetchImplementation}
|
|
217
|
-
`;
|
|
218
|
-
return implementation;
|
|
219
|
-
};
|
|
220
|
-
var fetchResponseTypeName = (includeHttpResponseReturnType, definitionSuccessResponse, operationName) => {
|
|
221
|
-
return includeHttpResponseReturnType ? `${operationName}Response` : definitionSuccessResponse;
|
|
222
|
-
};
|
|
223
|
-
var generateClient2 = (verbOptions, options) => {
|
|
224
|
-
const imports = (0, import_core22.generateVerbImports)(verbOptions);
|
|
225
|
-
const functionImplementation = generateRequestFunction(verbOptions, options);
|
|
226
|
-
return {
|
|
227
|
-
implementation: `${functionImplementation}
|
|
228
|
-
`,
|
|
229
|
-
imports
|
|
230
|
-
};
|
|
231
|
-
};
|
|
232
|
-
var getHTTPStatusCodes = () => `
|
|
233
|
-
export type HTTPStatusCode1xx = 100 | 101 | 102 | 103;
|
|
234
|
-
export type HTTPStatusCode2xx = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207;
|
|
235
|
-
export type HTTPStatusCode3xx = 300 | 301 | 302 | 303 | 304 | 305 | 307 | 308;
|
|
236
|
-
export type HTTPStatusCode4xx = 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 426 | 428 | 429 | 431 | 451;
|
|
237
|
-
export type HTTPStatusCode5xx = 500 | 501 | 502 | 503 | 504 | 505 | 507 | 511;
|
|
238
|
-
export type HTTPStatusCodes = HTTPStatusCode1xx | HTTPStatusCode2xx | HTTPStatusCode3xx | HTTPStatusCode4xx | HTTPStatusCode5xx;
|
|
239
|
-
|
|
240
|
-
`;
|
|
241
|
-
var generateFetchHeader2 = ({
|
|
242
|
-
clientImplementation
|
|
243
|
-
}) => {
|
|
244
|
-
return clientImplementation.includes("<HTTPStatusCodes,") ? getHTTPStatusCodes() : "";
|
|
245
|
-
};
|
|
246
|
-
var fetchClientBuilder = {
|
|
247
|
-
client: generateClient2,
|
|
248
|
-
header: generateFetchHeader2,
|
|
249
|
-
dependencies: () => []
|
|
250
|
-
};
|
|
251
|
-
var builder2 = () => () => fetchClientBuilder;
|
|
252
|
-
var index_default2 = builder2;
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
|
|
256
20
|
// src/index.ts
|
|
257
21
|
var index_exports = {};
|
|
258
22
|
__export(index_exports, {
|
|
@@ -266,7 +30,7 @@ __export(index_exports, {
|
|
|
266
30
|
module.exports = __toCommonJS(index_exports);
|
|
267
31
|
var import_core = require("@orval/core");
|
|
268
32
|
var import_zod = require("@orval/zod");
|
|
269
|
-
var import_fetch =
|
|
33
|
+
var import_fetch = require("@orval/fetch");
|
|
270
34
|
var getHeader = (option, info) => {
|
|
271
35
|
if (!option) {
|
|
272
36
|
return "";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../fetch/src/index.ts","../src/index.ts"],"sourcesContent":["import { ClientHeaderBuilder, pascal } from '@orval/core';\nimport {\n camel,\n ClientBuilder,\n ClientGeneratorsBuilder,\n generateFormDataAndUrlEncodedFunction,\n generateVerbImports,\n GeneratorOptions,\n GeneratorVerbOptions,\n GetterPropType,\n stringify,\n toObjectString,\n generateBodyOptions,\n isObject,\n resolveRef,\n} from '@orval/core';\nimport {\n PathItemObject,\n ParameterObject,\n ReferenceObject,\n} from 'openapi3-ts/oas30';\n\nexport const generateRequestFunction = (\n {\n queryParams,\n headers,\n operationName,\n response,\n mutator,\n body,\n props,\n verb,\n formData,\n formUrlEncoded,\n override,\n }: GeneratorVerbOptions,\n { route, context, pathRoute }: GeneratorOptions,\n) => {\n const isRequestOptions = override?.requestOptions !== false;\n const isFormData = override?.formData.disabled === false;\n const isFormUrlEncoded = override?.formUrlEncoded !== false;\n\n const getUrlFnName = camel(`get-${operationName}-url`);\n const getUrlFnProps = toObjectString(\n props.filter(\n (prop) =>\n prop.type === GetterPropType.PARAM ||\n prop.type === GetterPropType.NAMED_PATH_PARAMS ||\n prop.type === GetterPropType.QUERY_PARAM,\n ),\n 'implementation',\n );\n\n const spec = context.specs[context.specKey].paths[pathRoute] as\n | PathItemObject\n | undefined;\n const parameters =\n spec?.[verb]?.parameters || ([] as (ParameterObject | ReferenceObject)[]);\n\n const explodeParameters = parameters.filter((parameter) => {\n const { schema } = resolveRef<ParameterObject>(parameter, context);\n\n return schema.in === 'query' && schema.explode;\n });\n\n const explodeParametersNames = explodeParameters.map((parameter) => {\n const { schema } = resolveRef<ParameterObject>(parameter, context);\n\n return schema.name;\n });\n\n const explodeArrayImplementation =\n explodeParameters.length > 0\n ? `const explodeParameters = ${JSON.stringify(explodeParametersNames)};\n\n if (value instanceof Array && explodeParameters.includes(key)) {\n value.forEach((v) => normalizedParams.append(key, v === null ? 'null' : v.toString()));\n return;\n }\n `\n : '';\n\n const isExplodeParametersOnly =\n explodeParameters.length === parameters.length;\n\n const nomalParamsImplementation = `if (value !== undefined) {\n normalizedParams.append(key, value === null ? 'null' : value.toString())\n }`;\n\n const getUrlFnImplementation = `export const ${getUrlFnName} = (${getUrlFnProps}) => {\n${\n queryParams\n ? ` const normalizedParams = new URLSearchParams();\n\n Object.entries(params || {}).forEach(([key, value]) => {\n ${explodeArrayImplementation}\n ${!isExplodeParametersOnly ? nomalParamsImplementation : ''}\n });`\n : ''\n}\n\n ${queryParams ? `const stringifiedParams = normalizedParams.toString();` : ``}\n\n ${\n queryParams\n ? `return stringifiedParams.length > 0 ? \\`${route}${'?${stringifiedParams}'}\\` : \\`${route}\\``\n : `return \\`${route}\\``\n }\n}\\n`;\n\n const isContentTypeNdJson = (contentType: string) =>\n contentType === 'application/nd-json' ||\n contentType === 'application/x-ndjson';\n\n const isNdJson = response.contentTypes.some(isContentTypeNdJson);\n const responseTypeName = fetchResponseTypeName(\n override.fetch.includeHttpResponseReturnType,\n isNdJson ? 'Response' : response.definition.success,\n operationName,\n );\n\n const allResponses = [...response.types.success, ...response.types.errors];\n if (allResponses.length === 0) {\n allResponses.push({\n contentType: '',\n hasReadonlyProps: false,\n imports: [],\n isEnum: false,\n isRef: false,\n key: 'default',\n schemas: [],\n type: 'unknown',\n value: 'unknown',\n });\n }\n const nonDefaultStatuses = allResponses\n .filter((r) => r.key !== 'default')\n .map((r) => r.key);\n const responseDataTypes = allResponses\n .map(\n (r) => `export type ${responseTypeName}${pascal(r.key)} = {\n ${isContentTypeNdJson(r.contentType) ? 'stream: Response' : `data: ${r.value || 'unknown'}`}\n status: ${\n r.key === 'default'\n ? nonDefaultStatuses.length\n ? `Exclude<HTTPStatusCodes, ${nonDefaultStatuses.join(' | ')}>`\n : 'number'\n : r.key\n }\n}`,\n )\n .join('\\n\\n');\n\n const compositeName = `${responseTypeName}Composite`;\n const compositeResponse = `${compositeName} = ${allResponses.map((r) => `${responseTypeName}${pascal(r.key)}`).join(' | ')}`;\n\n const responseTypeImplementation = override.fetch\n .includeHttpResponseReturnType\n ? `${responseDataTypes}\n \nexport type ${compositeResponse};\n \nexport type ${responseTypeName} = ${compositeName} & {\n headers: Headers;\n}\\n\\n`\n : '';\n\n const getUrlFnProperties = props\n .filter(\n (prop) =>\n prop.type === GetterPropType.PARAM ||\n prop.type === GetterPropType.QUERY_PARAM ||\n prop.type === GetterPropType.NAMED_PATH_PARAMS,\n )\n .map((param) => {\n if (param.type === GetterPropType.NAMED_PATH_PARAMS) {\n return param.destructured;\n } else {\n return param.name;\n }\n })\n .join(',');\n\n const args = `${toObjectString(props, 'implementation')} ${isRequestOptions ? `options?: RequestInit` : ''}`;\n const returnType = `Promise<${responseTypeName}>`;\n\n const globalFetchOptions = isObject(override?.requestOptions)\n ? `${stringify(override?.requestOptions)?.slice(1, -1)?.trim()}`\n : '';\n const fetchMethodOption = `method: '${verb.toUpperCase()}'`;\n const ignoreContentTypes = ['multipart/form-data'];\n const fetchHeadersOption =\n body.contentType && !ignoreContentTypes.includes(body.contentType)\n ? `headers: { 'Content-Type': '${body.contentType}',${headers ? '...headers,' : ''} ...options?.headers }`\n : headers\n ? 'headers: {...headers, ...options?.headers}'\n : '';\n const requestBodyParams = generateBodyOptions(\n body,\n isFormData,\n isFormUrlEncoded,\n );\n const fetchBodyOption = requestBodyParams\n ? (isFormData && body.formData) || (isFormUrlEncoded && body.formUrlEncoded)\n ? `body: ${requestBodyParams}`\n : `body: JSON.stringify(${requestBodyParams})`\n : '';\n\n const fetchFnOptions = `${getUrlFnName}(${getUrlFnProperties}),\n {${globalFetchOptions ? '\\n' : ''} ${globalFetchOptions}\n ${isRequestOptions ? '...options,' : ''}\n ${fetchMethodOption}${fetchHeadersOption ? ',' : ''}\n ${fetchHeadersOption}${fetchBodyOption ? ',' : ''}\n ${fetchBodyOption}\n }\n`;\n const fetchResponseImplementation = isNdJson\n ? `const stream = await fetch(${fetchFnOptions})\n\n ${override.fetch.includeHttpResponseReturnType ? 'return { status: stream.status, stream, headers: stream.headers }' : `return stream`}\n `\n : `const res = await fetch(${fetchFnOptions})\n\n const body = [204, 205, 304].includes(res.status) ? null : await res.text()\n const data: ${responseTypeName}${override.fetch.includeHttpResponseReturnType ? `['data']` : ''} = body ? JSON.parse(body) : {}\n\n ${override.fetch.includeHttpResponseReturnType ? `return { data, status: res.status, headers: res.headers } as ${responseTypeName}` : 'return data'}\n`;\n const customFetchResponseImplementation = `return ${mutator?.name}<${responseTypeName}>(${fetchFnOptions});`;\n\n const bodyForm = generateFormDataAndUrlEncodedFunction({\n formData,\n formUrlEncoded,\n body,\n isFormData,\n isFormUrlEncoded,\n });\n\n const fetchImplementationBody = mutator\n ? customFetchResponseImplementation\n : fetchResponseImplementation;\n\n const fetchImplementation = `export const ${operationName} = async (${args}): ${returnType} => {\n ${bodyForm ? ` ${bodyForm}` : ''}\n ${fetchImplementationBody}}\n`;\n\n const implementation =\n `${responseTypeImplementation}` +\n `${getUrlFnImplementation}\\n` +\n `${fetchImplementation}\\n`;\n\n return implementation;\n};\n\nexport const fetchResponseTypeName = (\n includeHttpResponseReturnType: boolean,\n definitionSuccessResponse: string,\n operationName: string,\n) => {\n return includeHttpResponseReturnType\n ? `${operationName}Response`\n : definitionSuccessResponse;\n};\n\nexport const generateClient: ClientBuilder = (verbOptions, options) => {\n const imports = generateVerbImports(verbOptions);\n const functionImplementation = generateRequestFunction(verbOptions, options);\n\n return {\n implementation: `${functionImplementation}\\n`,\n imports,\n };\n};\n\nconst getHTTPStatusCodes = () => `\nexport type HTTPStatusCode1xx = 100 | 101 | 102 | 103;\nexport type HTTPStatusCode2xx = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207;\nexport type HTTPStatusCode3xx = 300 | 301 | 302 | 303 | 304 | 305 | 307 | 308;\nexport type HTTPStatusCode4xx = 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 426 | 428 | 429 | 431 | 451;\nexport type HTTPStatusCode5xx = 500 | 501 | 502 | 503 | 504 | 505 | 507 | 511;\nexport type HTTPStatusCodes = HTTPStatusCode1xx | HTTPStatusCode2xx | HTTPStatusCode3xx | HTTPStatusCode4xx | HTTPStatusCode5xx;\n\n`;\n\nexport const generateFetchHeader: ClientHeaderBuilder = ({\n clientImplementation,\n}) => {\n return clientImplementation.includes('<HTTPStatusCodes,')\n ? getHTTPStatusCodes()\n : '';\n};\n\nconst fetchClientBuilder: ClientGeneratorsBuilder = {\n client: generateClient,\n header: generateFetchHeader,\n dependencies: () => [],\n};\n\nexport const builder = () => () => fetchClientBuilder;\n\nexport default builder;\n","import {\n generateVerbImports,\n ClientBuilder,\n ClientExtraFilesBuilder,\n ClientGeneratorsBuilder,\n ClientHeaderBuilder,\n ContextSpecs,\n generateMutatorImports,\n GeneratorMutator,\n GeneratorVerbOptions,\n getFileInfo,\n jsDoc,\n NormalizedOutputOptions,\n upath,\n camel,\n pascal,\n getFullRoute,\n} from '@orval/core';\nimport { generateZod } from '@orval/zod';\nimport {\n generateRequestFunction as generateFetchRequestFunction,\n generateClient,\n generateFetchHeader,\n} from '@orval/fetch';\n\nimport { InfoObject } from 'openapi3-ts/oas30';\n\nconst getHeader = (\n option: false | ((info: InfoObject) => string | string[]),\n info: InfoObject,\n): string => {\n if (!option) {\n return '';\n }\n\n const header = option(info);\n\n return Array.isArray(header) ? jsDoc({ description: header }) : header;\n};\n\nexport const getMcpHeader: ClientHeaderBuilder = ({\n verbOptions,\n output,\n clientImplementation,\n}) => {\n const targetInfo = getFileInfo(output.target);\n const schemaInfo = getFileInfo(output.schemas);\n\n const relativeSchemaImportPath = output.schemas\n ? upath.relativeSafe(targetInfo.dirname, schemaInfo.dirname)\n : './' + targetInfo.filename + '.schemas';\n\n const importSchemaNames = Object.values(verbOptions)\n .flatMap((verbOption) => {\n const imports = [];\n const pascalOperationName = pascal(verbOption.operationName);\n\n if (verbOption.queryParams) {\n imports.push(`${pascalOperationName}Params`);\n }\n\n if (verbOption.body.definition) {\n imports.push(`${pascalOperationName}Body`);\n }\n\n return imports;\n })\n .reduce((acc, name) => {\n if (!acc.find((i) => i === name)) {\n acc.push(name);\n }\n return acc;\n }, [] as string[]);\n\n const importSchemasImplementation = `import {\\n ${importSchemaNames.join(\n ',\\n ',\n )}\\n} from '${relativeSchemaImportPath}';\n`;\n\n const relativeFetchClientPath = './http-client';\n const importFetchClientNames = Object.values(verbOptions)\n .flatMap((verbOption) => verbOption.operationName)\n .reduce((acc, name) => {\n if (!acc.find((i) => i === name)) {\n acc.push(name);\n }\n\n return acc;\n }, [] as string[]);\n\n const importFetchClientImplementation = `import {\\n ${importFetchClientNames.join(\n ',\\n ',\n )}\\n} from '${relativeFetchClientPath}';\n `;\n\n const content = [\n importSchemasImplementation,\n importFetchClientImplementation,\n ].join('\\n');\n\n return content + '\\n';\n};\n\nexport const generateMcp: ClientBuilder = async (verbOptions, options) => {\n const handlerArgsTypes = [];\n const pathParamsType = verbOptions.params\n .map((param) => {\n const paramName = param.name.split(': ')[0];\n const paramType = param.implementation.split(': ')[1];\n return ` ${paramName}: ${paramType}`;\n })\n .join(',\\n');\n if (pathParamsType) {\n handlerArgsTypes.push(` pathParams: {\\n${pathParamsType}\\n };`);\n }\n if (verbOptions.queryParams) {\n handlerArgsTypes.push(\n ` queryParams: ${verbOptions.queryParams.schema.name};`,\n );\n }\n if (verbOptions.body.definition) {\n handlerArgsTypes.push(` bodyParams: ${verbOptions.body.definition};`);\n }\n\n const handlerArgsName = `${verbOptions.operationName}Args`;\n const handlerArgsImplementation = handlerArgsTypes.length\n ? `\nexport type ${handlerArgsName} = {\n${handlerArgsTypes.join('\\n')}\n}\n`\n : '';\n\n const fetchParams = [];\n if (verbOptions.params.length) {\n const pathParamsArgs = verbOptions.params\n .map((param) => {\n const paramName = param.name.split(': ')[0];\n\n return `args.pathParams.${paramName}`;\n })\n .join(', ');\n\n fetchParams.push(`${pathParamsArgs}`);\n }\n if (verbOptions.body.definition) fetchParams.push(`args.bodyParams`);\n if (verbOptions.queryParams) fetchParams.push(`args.queryParams`);\n\n const handlerName = `${verbOptions.operationName}Handler`;\n const handlerImplementation = `\nexport const ${handlerName} = async (${handlerArgsTypes.length ? `args: ${handlerArgsName}` : ''}) => {\n const res = await ${verbOptions.operationName}(${fetchParams.join(', ')});\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(res),\n },\n ],\n };\n};`;\n\n const handlersImplementation = [\n handlerArgsImplementation,\n handlerImplementation,\n ].join('');\n\n return {\n implementation: handlersImplementation ? `${handlersImplementation}\\n` : '',\n imports: [],\n };\n};\n\nexport const generateServer = async (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpecs,\n) => {\n const info = context.specs[context.specKey].info;\n const { extension, dirname } = getFileInfo(output.target);\n const serverPath = upath.join(dirname, `server${extension}`);\n const header = getHeader(output.override.header, info);\n\n const toolImplementations = Object.values(verbOptions)\n .map((verbOption) => {\n const imputSchemaTypes = [];\n if (verbOption.params.length)\n imputSchemaTypes.push(\n ` pathParams: ${verbOption.operationName}Params`,\n );\n if (verbOption.queryParams)\n imputSchemaTypes.push(\n ` queryParams: ${verbOption.operationName}QueryParams`,\n );\n if (verbOption.body.definition)\n imputSchemaTypes.push(` bodyParams: ${verbOption.operationName}Body`);\n\n const imputSchemaImplementation = imputSchemaTypes.length\n ? ` {\n ${imputSchemaTypes.join(',\\n ')}\n },`\n : '';\n\n const toolImplementation = `\nserver.tool(\n '${verbOption.operationName}',\n '${verbOption.summary}',${imputSchemaImplementation ? `\\n${imputSchemaImplementation}` : ''}\n ${verbOption.operationName}Handler\n);`;\n\n return toolImplementation;\n })\n .join('\\n');\n\n const importToolSchemas = Object.values(verbOptions)\n .flatMap((verbOption) => {\n const imports = [];\n\n if (verbOption.headers)\n imports.push(` ${verbOption.operationName}Header`);\n if (verbOption.params.length)\n imports.push(` ${verbOption.operationName}Params`);\n if (verbOption.queryParams)\n imports.push(` ${verbOption.operationName}QueryParams`);\n if (verbOption.body.definition)\n imports.push(` ${verbOption.operationName}Body`);\n\n return imports;\n })\n .join(',\\n');\n const importToolSchemasImplementation = `import {\\n${importToolSchemas}\\n} from './tool-schemas.zod';`;\n\n const importHandlers = Object.values(verbOptions)\n .filter((verbOption) =>\n toolImplementations.includes(`${verbOption.operationName}Handler`),\n )\n .map((verbOption) => ` ${verbOption.operationName}Handler`)\n .join(`,\\n`);\n const importHandlersImplementation = `import {\\n${importHandlers}\\n} from './handlers';`;\n\n const importDependenciesImplementation = `import {\n McpServer\n} from '@modelcontextprotocol/sdk/server/mcp.js';\n \nimport {\n StdioServerTransport\n} from '@modelcontextprotocol/sdk/server/stdio.js'; \n`;\n const newMcpServerImplementation = `\nconst server = new McpServer({\n name: '${camel(info.title)}Server',\n version: '1.0.0',\n});\n`;\n const serverConnectImplementation = `\nconst transport = new StdioServerTransport();\n\nserver.connect(transport).then(() => {\n console.error('MCP server running on stdio');\n}).catch(console.error);\n`;\n\n const content = [\n header,\n importDependenciesImplementation,\n importHandlersImplementation,\n importToolSchemasImplementation,\n newMcpServerImplementation,\n toolImplementations,\n serverConnectImplementation,\n ].join('\\n');\n\n return [\n {\n content,\n path: serverPath,\n },\n ];\n};\n\nconst generateZodFiles = async (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpecs,\n) => {\n const { extension, dirname, filename } = getFileInfo(output.target);\n\n const header = getHeader(\n output.override.header,\n context.specs[context.specKey].info,\n );\n\n const zods = await Promise.all(\n Object.values(verbOptions).map((verbOption) =>\n generateZod(\n verbOption,\n {\n route: verbOption.route,\n pathRoute: verbOption.pathRoute,\n override: output.override,\n context,\n mock: output.mock,\n output: output.target!,\n },\n output.client,\n ),\n ),\n );\n\n const allMutators = zods.reduce(\n (acc, z) => {\n (z.mutators ?? []).forEach((mutator) => {\n acc[mutator.name] = mutator;\n });\n return acc;\n },\n {} as Record<string, GeneratorMutator>,\n );\n\n const mutatorsImports = generateMutatorImports({\n mutators: Object.values(allMutators),\n });\n\n let content = `${header}import { z as zod } from 'zod';\\n${mutatorsImports}\\n`;\n\n const zodPath = upath.join(dirname, `tool-schemas.zod${extension}`);\n\n content += zods.map((zod) => zod.implementation).join('\\n');\n\n return [\n {\n content,\n path: zodPath,\n },\n ];\n};\n\nconst generateHttpClinetFiles = async (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpecs,\n) => {\n const { extension, dirname, filename } = getFileInfo(output.target);\n\n const header = getHeader(\n output.override.header,\n context.specs[context.specKey].info,\n );\n\n const clients = await Promise.all(\n Object.values(verbOptions).map((verbOption) => {\n const fullRoute = getFullRoute(\n verbOption.route,\n context.specs[context.specKey].servers,\n output.baseUrl,\n );\n\n const options = {\n route: fullRoute,\n pathRoute: verbOption.pathRoute,\n override: output.override,\n context,\n mock: output.mock,\n output: output.target!,\n };\n\n return generateClient(verbOption, options, output.client, output);\n }),\n );\n\n const clientImplementation = clients\n .map((client) => client.implementation)\n .join('\\n');\n\n const relativeSchemasPath = output.schemas\n ? upath.relativeSafe(dirname, getFileInfo(output.schemas).dirname)\n : './' + filename + '.schemas';\n const importNames = clients\n .flatMap((client) => client.imports)\n .reduce((acc, imp) => {\n if (!acc.find((i) => i === imp.name)) {\n acc.push(imp.name);\n }\n\n return acc;\n }, [] as string[]);\n const importImplementation = `import { ${importNames.join(\n ',\\n',\n )} } from '${relativeSchemasPath}';`;\n\n const fetchHeader = generateFetchHeader({\n title: '',\n isRequestOptions: false,\n isMutator: false,\n noFunction: false,\n isGlobalMutator: false,\n provideIn: false,\n hasAwaitedType: false,\n output,\n verbOptions,\n clientImplementation,\n });\n\n const content = [\n header,\n importImplementation,\n fetchHeader,\n clientImplementation,\n ].join('\\n');\n const outputPath = upath.join(dirname, `http-client${extension}`);\n\n return [\n {\n content,\n path: outputPath,\n },\n ];\n};\n\nexport const generateExtraFiles: ClientExtraFilesBuilder = async (\n verbOptions,\n output,\n context,\n) => {\n const [server, zods, httpClients] = await Promise.all([\n generateServer(verbOptions, output, context),\n generateZodFiles(verbOptions, output, context),\n generateHttpClinetFiles(verbOptions, output, context),\n ]);\n\n return [...server, ...zods, ...httpClients];\n};\n\nconst mcpClientBuilder: ClientGeneratorsBuilder = {\n client: generateMcp,\n header: getMcpHeader,\n extraFiles: generateExtraFiles,\n};\n\nexport const builder = () => () => mcpClientBuilder;\n\nexport default builder;\n"],"mappings":"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","names":["index_exports","__export","builder","index_default","generateClient","generateFetchHeader","module","__toCommonJS","import_core","import_core2"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n generateVerbImports,\n ClientBuilder,\n ClientExtraFilesBuilder,\n ClientGeneratorsBuilder,\n ClientHeaderBuilder,\n ContextSpecs,\n generateMutatorImports,\n GeneratorMutator,\n GeneratorVerbOptions,\n getFileInfo,\n jsDoc,\n NormalizedOutputOptions,\n upath,\n camel,\n pascal,\n getFullRoute,\n} from '@orval/core';\nimport { generateZod } from '@orval/zod';\nimport {\n generateRequestFunction as generateFetchRequestFunction,\n generateClient,\n generateFetchHeader,\n} from '@orval/fetch';\n\nimport { InfoObject } from 'openapi3-ts/oas30';\n\nconst getHeader = (\n option: false | ((info: InfoObject) => string | string[]),\n info: InfoObject,\n): string => {\n if (!option) {\n return '';\n }\n\n const header = option(info);\n\n return Array.isArray(header) ? jsDoc({ description: header }) : header;\n};\n\nexport const getMcpHeader: ClientHeaderBuilder = ({\n verbOptions,\n output,\n clientImplementation,\n}) => {\n const targetInfo = getFileInfo(output.target);\n const schemaInfo = getFileInfo(output.schemas);\n\n const relativeSchemaImportPath = output.schemas\n ? upath.relativeSafe(targetInfo.dirname, schemaInfo.dirname)\n : './' + targetInfo.filename + '.schemas';\n\n const importSchemaNames = Object.values(verbOptions)\n .flatMap((verbOption) => {\n const imports = [];\n const pascalOperationName = pascal(verbOption.operationName);\n\n if (verbOption.queryParams) {\n imports.push(`${pascalOperationName}Params`);\n }\n\n if (verbOption.body.definition) {\n imports.push(`${pascalOperationName}Body`);\n }\n\n return imports;\n })\n .reduce((acc, name) => {\n if (!acc.find((i) => i === name)) {\n acc.push(name);\n }\n return acc;\n }, [] as string[]);\n\n const importSchemasImplementation = `import {\\n ${importSchemaNames.join(\n ',\\n ',\n )}\\n} from '${relativeSchemaImportPath}';\n`;\n\n const relativeFetchClientPath = './http-client';\n const importFetchClientNames = Object.values(verbOptions)\n .flatMap((verbOption) => verbOption.operationName)\n .reduce((acc, name) => {\n if (!acc.find((i) => i === name)) {\n acc.push(name);\n }\n\n return acc;\n }, [] as string[]);\n\n const importFetchClientImplementation = `import {\\n ${importFetchClientNames.join(\n ',\\n ',\n )}\\n} from '${relativeFetchClientPath}';\n `;\n\n const content = [\n importSchemasImplementation,\n importFetchClientImplementation,\n ].join('\\n');\n\n return content + '\\n';\n};\n\nexport const generateMcp: ClientBuilder = async (verbOptions, options) => {\n const handlerArgsTypes = [];\n const pathParamsType = verbOptions.params\n .map((param) => {\n const paramName = param.name.split(': ')[0];\n const paramType = param.implementation.split(': ')[1];\n return ` ${paramName}: ${paramType}`;\n })\n .join(',\\n');\n if (pathParamsType) {\n handlerArgsTypes.push(` pathParams: {\\n${pathParamsType}\\n };`);\n }\n if (verbOptions.queryParams) {\n handlerArgsTypes.push(\n ` queryParams: ${verbOptions.queryParams.schema.name};`,\n );\n }\n if (verbOptions.body.definition) {\n handlerArgsTypes.push(` bodyParams: ${verbOptions.body.definition};`);\n }\n\n const handlerArgsName = `${verbOptions.operationName}Args`;\n const handlerArgsImplementation = handlerArgsTypes.length\n ? `\nexport type ${handlerArgsName} = {\n${handlerArgsTypes.join('\\n')}\n}\n`\n : '';\n\n const fetchParams = [];\n if (verbOptions.params.length) {\n const pathParamsArgs = verbOptions.params\n .map((param) => {\n const paramName = param.name.split(': ')[0];\n\n return `args.pathParams.${paramName}`;\n })\n .join(', ');\n\n fetchParams.push(`${pathParamsArgs}`);\n }\n if (verbOptions.body.definition) fetchParams.push(`args.bodyParams`);\n if (verbOptions.queryParams) fetchParams.push(`args.queryParams`);\n\n const handlerName = `${verbOptions.operationName}Handler`;\n const handlerImplementation = `\nexport const ${handlerName} = async (${handlerArgsTypes.length ? `args: ${handlerArgsName}` : ''}) => {\n const res = await ${verbOptions.operationName}(${fetchParams.join(', ')});\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(res),\n },\n ],\n };\n};`;\n\n const handlersImplementation = [\n handlerArgsImplementation,\n handlerImplementation,\n ].join('');\n\n return {\n implementation: handlersImplementation ? `${handlersImplementation}\\n` : '',\n imports: [],\n };\n};\n\nexport const generateServer = async (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpecs,\n) => {\n const info = context.specs[context.specKey].info;\n const { extension, dirname } = getFileInfo(output.target);\n const serverPath = upath.join(dirname, `server${extension}`);\n const header = getHeader(output.override.header, info);\n\n const toolImplementations = Object.values(verbOptions)\n .map((verbOption) => {\n const imputSchemaTypes = [];\n if (verbOption.params.length)\n imputSchemaTypes.push(\n ` pathParams: ${verbOption.operationName}Params`,\n );\n if (verbOption.queryParams)\n imputSchemaTypes.push(\n ` queryParams: ${verbOption.operationName}QueryParams`,\n );\n if (verbOption.body.definition)\n imputSchemaTypes.push(` bodyParams: ${verbOption.operationName}Body`);\n\n const imputSchemaImplementation = imputSchemaTypes.length\n ? ` {\n ${imputSchemaTypes.join(',\\n ')}\n },`\n : '';\n\n const toolImplementation = `\nserver.tool(\n '${verbOption.operationName}',\n '${verbOption.summary}',${imputSchemaImplementation ? `\\n${imputSchemaImplementation}` : ''}\n ${verbOption.operationName}Handler\n);`;\n\n return toolImplementation;\n })\n .join('\\n');\n\n const importToolSchemas = Object.values(verbOptions)\n .flatMap((verbOption) => {\n const imports = [];\n\n if (verbOption.headers)\n imports.push(` ${verbOption.operationName}Header`);\n if (verbOption.params.length)\n imports.push(` ${verbOption.operationName}Params`);\n if (verbOption.queryParams)\n imports.push(` ${verbOption.operationName}QueryParams`);\n if (verbOption.body.definition)\n imports.push(` ${verbOption.operationName}Body`);\n\n return imports;\n })\n .join(',\\n');\n const importToolSchemasImplementation = `import {\\n${importToolSchemas}\\n} from './tool-schemas.zod';`;\n\n const importHandlers = Object.values(verbOptions)\n .filter((verbOption) =>\n toolImplementations.includes(`${verbOption.operationName}Handler`),\n )\n .map((verbOption) => ` ${verbOption.operationName}Handler`)\n .join(`,\\n`);\n const importHandlersImplementation = `import {\\n${importHandlers}\\n} from './handlers';`;\n\n const importDependenciesImplementation = `import {\n McpServer\n} from '@modelcontextprotocol/sdk/server/mcp.js';\n \nimport {\n StdioServerTransport\n} from '@modelcontextprotocol/sdk/server/stdio.js'; \n`;\n const newMcpServerImplementation = `\nconst server = new McpServer({\n name: '${camel(info.title)}Server',\n version: '1.0.0',\n});\n`;\n const serverConnectImplementation = `\nconst transport = new StdioServerTransport();\n\nserver.connect(transport).then(() => {\n console.error('MCP server running on stdio');\n}).catch(console.error);\n`;\n\n const content = [\n header,\n importDependenciesImplementation,\n importHandlersImplementation,\n importToolSchemasImplementation,\n newMcpServerImplementation,\n toolImplementations,\n serverConnectImplementation,\n ].join('\\n');\n\n return [\n {\n content,\n path: serverPath,\n },\n ];\n};\n\nconst generateZodFiles = async (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpecs,\n) => {\n const { extension, dirname, filename } = getFileInfo(output.target);\n\n const header = getHeader(\n output.override.header,\n context.specs[context.specKey].info,\n );\n\n const zods = await Promise.all(\n Object.values(verbOptions).map((verbOption) =>\n generateZod(\n verbOption,\n {\n route: verbOption.route,\n pathRoute: verbOption.pathRoute,\n override: output.override,\n context,\n mock: output.mock,\n output: output.target!,\n },\n output.client,\n ),\n ),\n );\n\n const allMutators = zods.reduce(\n (acc, z) => {\n (z.mutators ?? []).forEach((mutator) => {\n acc[mutator.name] = mutator;\n });\n return acc;\n },\n {} as Record<string, GeneratorMutator>,\n );\n\n const mutatorsImports = generateMutatorImports({\n mutators: Object.values(allMutators),\n });\n\n let content = `${header}import { z as zod } from 'zod';\\n${mutatorsImports}\\n`;\n\n const zodPath = upath.join(dirname, `tool-schemas.zod${extension}`);\n\n content += zods.map((zod) => zod.implementation).join('\\n');\n\n return [\n {\n content,\n path: zodPath,\n },\n ];\n};\n\nconst generateHttpClinetFiles = async (\n verbOptions: Record<string, GeneratorVerbOptions>,\n output: NormalizedOutputOptions,\n context: ContextSpecs,\n) => {\n const { extension, dirname, filename } = getFileInfo(output.target);\n\n const header = getHeader(\n output.override.header,\n context.specs[context.specKey].info,\n );\n\n const clients = await Promise.all(\n Object.values(verbOptions).map((verbOption) => {\n const fullRoute = getFullRoute(\n verbOption.route,\n context.specs[context.specKey].servers,\n output.baseUrl,\n );\n\n const options = {\n route: fullRoute,\n pathRoute: verbOption.pathRoute,\n override: output.override,\n context,\n mock: output.mock,\n output: output.target!,\n };\n\n return generateClient(verbOption, options, output.client, output);\n }),\n );\n\n const clientImplementation = clients\n .map((client) => client.implementation)\n .join('\\n');\n\n const relativeSchemasPath = output.schemas\n ? upath.relativeSafe(dirname, getFileInfo(output.schemas).dirname)\n : './' + filename + '.schemas';\n const importNames = clients\n .flatMap((client) => client.imports)\n .reduce((acc, imp) => {\n if (!acc.find((i) => i === imp.name)) {\n acc.push(imp.name);\n }\n\n return acc;\n }, [] as string[]);\n const importImplementation = `import { ${importNames.join(\n ',\\n',\n )} } from '${relativeSchemasPath}';`;\n\n const fetchHeader = generateFetchHeader({\n title: '',\n isRequestOptions: false,\n isMutator: false,\n noFunction: false,\n isGlobalMutator: false,\n provideIn: false,\n hasAwaitedType: false,\n output,\n verbOptions,\n clientImplementation,\n });\n\n const content = [\n header,\n importImplementation,\n fetchHeader,\n clientImplementation,\n ].join('\\n');\n const outputPath = upath.join(dirname, `http-client${extension}`);\n\n return [\n {\n content,\n path: outputPath,\n },\n ];\n};\n\nexport const generateExtraFiles: ClientExtraFilesBuilder = async (\n verbOptions,\n output,\n context,\n) => {\n const [server, zods, httpClients] = await Promise.all([\n generateServer(verbOptions, output, context),\n generateZodFiles(verbOptions, output, context),\n generateHttpClinetFiles(verbOptions, output, context),\n ]);\n\n return [...server, ...zods, ...httpClients];\n};\n\nconst mcpClientBuilder: ClientGeneratorsBuilder = {\n client: generateMcp,\n header: getMcpHeader,\n extraFiles: generateExtraFiles,\n};\n\nexport const builder = () => () => mcpClientBuilder;\n\nexport default builder;\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orval/mcp",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.11.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
"lint": "eslint src/**/*.ts"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@orval/core": "7.
|
|
17
|
-
"@orval/
|
|
16
|
+
"@orval/core": "7.11.1",
|
|
17
|
+
"@orval/fetch": "7.11.1",
|
|
18
|
+
"@orval/zod": "7.11.1"
|
|
18
19
|
}
|
|
19
20
|
}
|