@orval/fetch 7.2.0 → 7.4.0
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.d.ts +2 -2
- package/dist/index.js +23 -14
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GeneratorVerbOptions, GeneratorOptions, ClientBuilder, ClientGeneratorsBuilder } from '@orval/core';
|
|
2
2
|
|
|
3
|
-
declare const generateRequestFunction: ({ queryParams, operationName, response, mutator, body, props, verb, formData, formUrlEncoded, override, }: GeneratorVerbOptions, { route, context, pathRoute }: GeneratorOptions) => string;
|
|
4
|
-
declare const fetchResponseTypeName: (
|
|
3
|
+
declare const generateRequestFunction: ({ queryParams, headers, operationName, response, mutator, body, props, verb, formData, formUrlEncoded, override, }: GeneratorVerbOptions, { route, context, pathRoute }: GeneratorOptions) => string;
|
|
4
|
+
declare const fetchResponseTypeName: (includeHttpResponseReturnType: boolean, definitionSuccessResponse: string, operationName: string) => string;
|
|
5
5
|
declare const generateClient: ClientBuilder;
|
|
6
6
|
declare const builder: () => () => ClientGeneratorsBuilder;
|
|
7
7
|
|
package/dist/index.js
CHANGED
|
@@ -30,6 +30,7 @@ module.exports = __toCommonJS(src_exports);
|
|
|
30
30
|
var import_core = require("@orval/core");
|
|
31
31
|
var generateRequestFunction = ({
|
|
32
32
|
queryParams,
|
|
33
|
+
headers,
|
|
33
34
|
operationName,
|
|
34
35
|
response,
|
|
35
36
|
mutator,
|
|
@@ -83,14 +84,19 @@ ${queryParams ? ` const normalizedParams = new URLSearchParams();
|
|
|
83
84
|
${queryParams ? `return normalizedParams.size ? \`${route}${"?${normalizedParams.toString()}"}\` : \`${route}\`` : `return \`${route}\``}
|
|
84
85
|
}
|
|
85
86
|
`;
|
|
87
|
+
const isNdJson = response.contentTypes.some(
|
|
88
|
+
(c) => c === "application/nd-json" || c === "application/x-ndjson"
|
|
89
|
+
);
|
|
86
90
|
const responseTypeName = fetchResponseTypeName(
|
|
87
|
-
override.fetch.
|
|
88
|
-
response.definition.success,
|
|
91
|
+
override.fetch.includeHttpResponseReturnType,
|
|
92
|
+
isNdJson ? "Response" : response.definition.success,
|
|
89
93
|
operationName
|
|
90
94
|
);
|
|
91
|
-
const
|
|
92
|
-
|
|
95
|
+
const responseDataType = response.definition.success || response.definition.errors ? `${response.definition.success !== "unknown" ? response.definition.success : ""}${response.definition.success !== "unknown" && response.definition.errors !== "unknown" ? " | " : ""}${response.definition.errors !== "unknown" ? response.definition.errors : ""}` : "unknown";
|
|
96
|
+
const responseTypeImplementation = override.fetch.includeHttpResponseReturnType ? `export type ${responseTypeName} = {
|
|
97
|
+
${isNdJson ? "stream: Response" : `data: ${responseDataType}`};
|
|
93
98
|
status: number;
|
|
99
|
+
headers: Headers;
|
|
94
100
|
}
|
|
95
101
|
|
|
96
102
|
` : "";
|
|
@@ -104,11 +110,11 @@ ${queryParams ? ` const normalizedParams = new URLSearchParams();
|
|
|
104
110
|
}
|
|
105
111
|
}).join(",");
|
|
106
112
|
const args = `${(0, import_core.toObjectString)(props, "implementation")} ${isRequestOptions ? `options?: RequestInit` : ""}`;
|
|
107
|
-
const
|
|
113
|
+
const returnType = `Promise<${responseTypeName}>`;
|
|
108
114
|
const globalFetchOptions = (0, import_core.isObject)(override == null ? void 0 : override.requestOptions) ? `${(_c = (_b = (0, import_core.stringify)(override == null ? void 0 : override.requestOptions)) == null ? void 0 : _b.slice(1, -1)) == null ? void 0 : _c.trim()}` : "";
|
|
109
115
|
const fetchMethodOption = `method: '${verb.toUpperCase()}'`;
|
|
110
116
|
const ignoreContentTypes = ["multipart/form-data"];
|
|
111
|
-
const fetchHeadersOption = body.contentType && !ignoreContentTypes.includes(body.contentType) ? `headers: { 'Content-Type': '${body.contentType}', ...options?.headers }` : "";
|
|
117
|
+
const fetchHeadersOption = body.contentType && !ignoreContentTypes.includes(body.contentType) ? `headers: { 'Content-Type': '${body.contentType}',${headers ? "...headers," : ""} ...options?.headers }` : headers ? "headers: {...headers, ...options?.headers}" : "";
|
|
112
118
|
const requestBodyParams = (0, import_core.generateBodyOptions)(
|
|
113
119
|
body,
|
|
114
120
|
isFormData,
|
|
@@ -123,13 +129,16 @@ ${queryParams ? ` const normalizedParams = new URLSearchParams();
|
|
|
123
129
|
${fetchBodyOption}
|
|
124
130
|
}
|
|
125
131
|
`;
|
|
126
|
-
const fetchResponseImplementation = `const
|
|
127
|
-
|
|
128
|
-
|
|
132
|
+
const fetchResponseImplementation = isNdJson ? `const stream = await fetch(${fetchFnOptions})
|
|
133
|
+
|
|
134
|
+
${override.fetch.includeHttpResponseReturnType ? "return { status: stream.status, stream, headers: stream.headers }" : `return stream`}
|
|
135
|
+
` : `const res = await fetch(${fetchFnOptions})
|
|
136
|
+
|
|
137
|
+
const data:${response.definition.success} = ([204, 205, 304].includes(res.status) || !res.body) ? {} : await res.json()
|
|
129
138
|
|
|
130
|
-
${override.fetch.
|
|
139
|
+
${override.fetch.includeHttpResponseReturnType ? "return { status: res.status, data, headers: res.headers }" : `return data as ${responseTypeName}`}
|
|
131
140
|
`;
|
|
132
|
-
const customFetchResponseImplementation = `return ${mutator == null ? void 0 : mutator.name}<${
|
|
141
|
+
const customFetchResponseImplementation = `return ${mutator == null ? void 0 : mutator.name}<${responseTypeName}>(${fetchFnOptions});`;
|
|
133
142
|
const bodyForm = (0, import_core.generateFormDataAndUrlEncodedFunction)({
|
|
134
143
|
formData,
|
|
135
144
|
formUrlEncoded,
|
|
@@ -138,7 +147,7 @@ ${queryParams ? ` const normalizedParams = new URLSearchParams();
|
|
|
138
147
|
isFormUrlEncoded
|
|
139
148
|
});
|
|
140
149
|
const fetchImplementationBody = mutator ? customFetchResponseImplementation : fetchResponseImplementation;
|
|
141
|
-
const fetchImplementation = `export const ${operationName} = async (${args}): ${
|
|
150
|
+
const fetchImplementation = `export const ${operationName} = async (${args}): ${returnType} => {
|
|
142
151
|
${bodyForm ? ` ${bodyForm}` : ""}
|
|
143
152
|
${fetchImplementationBody}}
|
|
144
153
|
`;
|
|
@@ -147,8 +156,8 @@ ${fetchImplementation}
|
|
|
147
156
|
`;
|
|
148
157
|
return implementation;
|
|
149
158
|
};
|
|
150
|
-
var fetchResponseTypeName = (
|
|
151
|
-
return
|
|
159
|
+
var fetchResponseTypeName = (includeHttpResponseReturnType, definitionSuccessResponse, operationName) => {
|
|
160
|
+
return includeHttpResponseReturnType ? `${operationName}Response` : definitionSuccessResponse;
|
|
152
161
|
};
|
|
153
162
|
var generateClient = (verbOptions, options) => {
|
|
154
163
|
const imports = (0, import_core.generateVerbImports)(verbOptions);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\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 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 !== 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 ${\n queryParams\n ? `return normalizedParams.size ? \\`${route}${'?${normalizedParams.toString()}'}\\` : \\`${route}\\``\n : `return \\`${route}\\``\n }\n}\\n`;\n\n const responseTypeName = fetchResponseTypeName(\n override.fetch.includeHttpStatusReturnType,\n response.definition.success,\n operationName,\n );\n const responseTypeImplementation = override.fetch.includeHttpStatusReturnType\n ? `export type ${responseTypeName} = {\n data: ${response.definition.success || 'unknown'};\n status: number;\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 retrunType = `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}', ...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 = `const res = await fetch(${fetchFnOptions}\n )\n const data = await res.json()\n\n ${override.fetch.includeHttpStatusReturnType ? 'return { status: res.status, data }' : `return data as ${responseTypeName}`}\n`;\n const customFetchResponseImplementation = `return ${mutator?.name}<${retrunType}>(${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}): ${retrunType} => {\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 includeHttpStatusReturnType: boolean,\n definitionSuccessResponse: string,\n operationName: string,\n) => {\n return includeHttpStatusReturnType\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 fetchClientBuilder: ClientGeneratorsBuilder = {\n client: generateClient,\n dependencies: () => [],\n};\n\nexport const builder = () => () => fetchClientBuilder;\n\nexport default builder;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\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 !== 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 ${\n queryParams\n ? `return normalizedParams.size ? \\`${route}${'?${normalizedParams.toString()}'}\\` : \\`${route}\\``\n : `return \\`${route}\\``\n }\n}\\n`;\n\n const isNdJson = response.contentTypes.some(\n (c) => c === 'application/nd-json' || c === 'application/x-ndjson',\n );\n const responseTypeName = fetchResponseTypeName(\n override.fetch.includeHttpResponseReturnType,\n isNdJson ? 'Response' : response.definition.success,\n operationName,\n );\n\n const responseDataType =\n response.definition.success || response.definition.errors\n ? `${response.definition.success !== 'unknown' ? response.definition.success : ''}${response.definition.success !== 'unknown' && response.definition.errors !== 'unknown' ? ' | ' : ''}${response.definition.errors !== 'unknown' ? response.definition.errors : ''}`\n : 'unknown';\n\n const responseTypeImplementation = override.fetch\n .includeHttpResponseReturnType\n ? `export type ${responseTypeName} = {\n ${isNdJson ? 'stream: Response' : `data: ${responseDataType}`};\n status: number;\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 data:${response.definition.success} = ([204, 205, 304].includes(res.status) || !res.body) ? {} : await res.json()\n\n ${override.fetch.includeHttpResponseReturnType ? 'return { status: res.status, data, headers: res.headers }' : `return data as ${responseTypeName}`}\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 fetchClientBuilder: ClientGeneratorsBuilder = {\n client: generateClient,\n dependencies: () => [],\n};\n\nexport const builder = () => () => fetchClientBuilder;\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/fetch",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.4.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
"lint": "eslint src/**/*.ts"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@orval/core": "7.
|
|
16
|
+
"@orval/core": "7.4.0"
|
|
17
17
|
}
|
|
18
18
|
}
|