From 7a47eda68f8f8b6f850b7fd714624f0f92427bc9 Mon Sep 17 00:00:00 2001 From: Jeongho Nam Date: Mon, 15 Apr 2024 11:08:29 +0900 Subject: [PATCH] Fix mis-converted property -> `Object.propertes` --- package.json | 2 +- src/internal/OpenApiV3Converter.ts | 13 ++++++++----- src/internal/OpenApiV3_1Converter.ts | 3 ++- src/internal/SwaggerV2Converter.ts | 6 ++++-- test/index.ts | 1 + 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index ea5a0a8..035c467 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@samchon/openapi", - "version": "0.1.13", + "version": "0.1.14", "description": "OpenAPI definitions and converters for 'typia' and 'nestia'.", "main": "./lib/index.js", "typings": "./lib/index.d.ts", diff --git a/src/internal/OpenApiV3Converter.ts b/src/internal/OpenApiV3Converter.ts index a5fd664..857d6bc 100644 --- a/src/internal/OpenApiV3Converter.ts +++ b/src/internal/OpenApiV3Converter.ts @@ -186,7 +186,7 @@ export namespace OpenApiV3Converter { /* ----------------------------------------------------------- DEFINITIONS ----------------------------------------------------------- */ - const convertComponents = ( + export const convertComponents = ( input: OpenApiV3.IComponents, ): OpenApi.IComponents => ({ schemas: input.schemas @@ -198,7 +198,9 @@ export namespace OpenApiV3Converter { : undefined, securitySchemes: input.securitySchemes, }); - const convertSchema = (input: OpenApiV3.IJsonSchema): OpenApi.IJsonSchema => { + export const convertSchema = ( + input: OpenApiV3.IJsonSchema, + ): OpenApi.IJsonSchema => { const nullable: { value: boolean } = { value: false }; const union: OpenApi.IJsonSchema[] = []; const attribute: OpenApi.IJsonSchema.__IAttribute = { @@ -243,7 +245,7 @@ export namespace OpenApiV3Converter { union.push({ ...schema, ...{ - properites: schema.properties + properties: schema.properties ? Object.fromEntries( Object.entries(schema.properties) .filter(([_, v]) => v !== undefined) @@ -273,12 +275,13 @@ export namespace OpenApiV3Converter { ? { type: undefined } : union.length === 1 ? { ...union[0] } - : { oneOf: union }), + : { oneOf: union.map((u) => ({ ...u, nullable: undefined })) }), ...attribute, + ...{ nullable: undefined }, }; }; - namespace TypeChecker { + export namespace TypeChecker { export const isBoolean = ( schema: OpenApiV3.IJsonSchema, ): schema is OpenApiV3.IJsonSchema.IBoolean => diff --git a/src/internal/OpenApiV3_1Converter.ts b/src/internal/OpenApiV3_1Converter.ts index 3b0f187..b2435b1 100644 --- a/src/internal/OpenApiV3_1Converter.ts +++ b/src/internal/OpenApiV3_1Converter.ts @@ -470,8 +470,9 @@ export namespace OpenApiV3_1Converter { ? { type: undefined } : union.length === 1 ? { ...union[0] } - : { oneOf: union }), + : { oneOf: union.map((u) => ({ ...u, nullable: undefined })) }), ...attribute, + ...{ nullable: undefined }, }; }; diff --git a/src/internal/SwaggerV2Converter.ts b/src/internal/SwaggerV2Converter.ts index fd7ce47..6044e24 100644 --- a/src/internal/SwaggerV2Converter.ts +++ b/src/internal/SwaggerV2Converter.ts @@ -257,6 +257,7 @@ export namespace SwaggerV2Converter { ), }; const visit = (schema: SwaggerV2.IJsonSchema): void => { + // NULLABLE PROPERTY if ( (schema as SwaggerV2.IJsonSchema.__ISignificant)["x-nullable"] === true @@ -289,7 +290,7 @@ export namespace SwaggerV2Converter { union.push({ ...schema, ...{ - properites: schema.properties + properties: schema.properties ? Object.fromEntries( Object.entries(schema.properties) .filter(([_, v]) => v !== undefined) @@ -323,8 +324,9 @@ export namespace SwaggerV2Converter { ? { type: undefined } : union.length === 1 ? { ...union[0] } - : { oneOf: union }), + : { oneOf: union.map((u) => ({ ...u, "x-nullable": undefined })) }), ...attribute, + ...{ "x-nullable": undefined }, }; }; diff --git a/test/index.ts b/test/index.ts index 5955aaa..b9009f8 100644 --- a/test/index.ts +++ b/test/index.ts @@ -51,6 +51,7 @@ const main = async (): Promise => { const document: OpenApi.IDocument = JSON.parse( await fs.promises.readFile(`${NORMALIZED}/${file}`, "utf8"), ); + if (file === "shopping.json") typia.assertEquals(document); typia.assert(document); typia.assert(document); }