エラーIDが同じものは共通化するように

This commit is contained in:
kakkokari-gtyih 2024-06-22 22:56:16 +09:00
parent 9b85a33ab5
commit 883e205555
2 changed files with 2644 additions and 2292 deletions

View File

@ -14,7 +14,6 @@ async function generateBaseTypes(
openApiJsonPath: string, openApiJsonPath: string,
typeFileName: string, typeFileName: string,
) { ) {
const lines: string[] = []; const lines: string[] = [];
for (const lint of disabledLints) { for (const lint of disabledLints) {
lines.push(`/* eslint ${lint}: 0 */`); lines.push(`/* eslint ${lint}: 0 */`);
@ -76,6 +75,8 @@ async function generateEndpointErrors(
} }
endpointsErrorsOutputLine.push(''); endpointsErrorsOutputLine.push('');
const errorWithIdTypes = new Map<string, string>();
endpointsErrorsOutputLine.push('export type EndpointsErrors = {'); endpointsErrorsOutputLine.push('export type EndpointsErrors = {');
for (const operation of postPathItems) { for (const operation of postPathItems) {
@ -94,7 +95,8 @@ async function generateEndpointErrors(
]; ];
const errorResponseCodes = Object.keys(operation.responses).filter((key) => !okResponses.includes(key)); const errorResponseCodes = Object.keys(operation.responses).filter((key) => !okResponses.includes(key));
const errorTypes = new Map<string, OpenAPIV3_1.SchemaObject>(); // eslint-disable-next-line @typescript-eslint/no-explicit-any
const errorTypes = new Map<string, Record<string, any>>();
errorResponseCodes.forEach((code) => { errorResponseCodes.forEach((code) => {
if (operation.responses == null) return; if (operation.responses == null) return;
const response = operation.responses[code]; const response = operation.responses[code];
@ -118,9 +120,14 @@ async function generateEndpointErrors(
if ('error' in value && value.error != null) { if ('error' in value && value.error != null) {
let typeString = JSON.stringify(value.error); let typeString = JSON.stringify(value.error);
typeString = typeString.substring(0, typeString.length - 1) + ', [x: string]: any ' + typeString.substring(typeString.length - 1); typeString = typeString.substring(0, typeString.length - 1) + ', [x: string]: any ' + typeString.substring(typeString.length - 1);
if ('id' in value.error && value.error.id != null) {
errorWithIdTypes.set(value.error.id, typeString);
endpointsErrorsOutputLine.push(`\t\t'${key}': IdentifiableError['${value.error.id}'],`);
} else {
endpointsErrorsOutputLine.push(`\t\t'${key}': ${typeString},`); endpointsErrorsOutputLine.push(`\t\t'${key}': ${typeString},`);
} }
} }
}
endpointsErrorsOutputLine.push('\t},'); endpointsErrorsOutputLine.push('\t},');
} }
} }
@ -129,6 +136,12 @@ async function generateEndpointErrors(
endpointsErrorsOutputLine.push('};'); endpointsErrorsOutputLine.push('};');
endpointsErrorsOutputLine.push(''); endpointsErrorsOutputLine.push('');
endpointsErrorsOutputLine.push('export type IdentifiableError = {');
for (const [key, value] of errorWithIdTypes) {
endpointsErrorsOutputLine.push(`\t'${key}': ${value},`);
}
endpointsErrorsOutputLine.push('};');
await writeFile(endpointErrorsOutputPath, endpointsErrorsOutputLine.join('\n')); await writeFile(endpointErrorsOutputPath, endpointsErrorsOutputLine.join('\n'));
} }

File diff suppressed because it is too large Load Diff