From b3095fe73e90bf49543a336e70e83d832b08bca4 Mon Sep 17 00:00:00 2001 From: Drew Powers Date: Thu, 30 Sep 2021 14:57:36 -0600 Subject: [PATCH] Feat: add support for "type": "file" in parameters --- src/transform/schema.ts | 3 ++- src/utils.ts | 17 ++++++++++++++++- tests/schema.test.ts | 4 ++++ tests/v2/expected/petstore.immutable.ts | 2 +- tests/v2/expected/petstore.ts | 2 +- 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/transform/schema.ts b/src/transform/schema.ts index b60bcaa4d..cf02e035f 100644 --- a/src/transform/schema.ts +++ b/src/transform/schema.ts @@ -97,7 +97,8 @@ export function transformSchemaObj(node: any, options: TransformSchemaObjOptions } case "string": case "number": - case "boolean": { + case "boolean": + case "unknown": { output += nodeType(node) || "any"; break; } diff --git a/src/utils.ts b/src/utils.ts index bb7203f74..527c09d0c 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -32,7 +32,17 @@ export function isRef(obj: any): obj is ReferenceObject { } /** Return type of node (works for v2 or v3, as there are no conflicting types) */ -type SchemaObjectType = "anyOf" | "array" | "boolean" | "enum" | "number" | "object" | "oneOf" | "ref" | "string"; +type SchemaObjectType = + | "anyOf" + | "array" + | "boolean" + | "enum" + | "number" + | "object" + | "oneOf" + | "ref" + | "string" + | "unknown"; export function nodeType(obj: any): SchemaObjectType | undefined { if (!obj || typeof obj !== "object") { return undefined; @@ -67,6 +77,11 @@ export function nodeType(obj: any): SchemaObjectType | undefined { return "array"; } + // file + if (obj.type === "file") { + return "unknown"; + } + // return object by default return "object"; } diff --git a/tests/schema.test.ts b/tests/schema.test.ts index ff49a3971..1f9af509b 100644 --- a/tests/schema.test.ts +++ b/tests/schema.test.ts @@ -209,6 +209,10 @@ describe("SchemaObject", () => { `components["parameters"]["ReferenceObject"]` ); }); + + it("file", () => { + expect(transform({ type: "file" }, { ...defaults })).toBe("unknown"); + }); }); describe("advanced", () => { diff --git a/tests/v2/expected/petstore.immutable.ts b/tests/v2/expected/petstore.immutable.ts index df4653288..e6d41a0e1 100644 --- a/tests/v2/expected/petstore.immutable.ts +++ b/tests/v2/expected/petstore.immutable.ts @@ -235,7 +235,7 @@ export interface operations { /** Additional data to pass to server */ readonly additionalMetadata?: string; /** file to upload */ - readonly file?: { readonly [key: string]: unknown }; + readonly file?: unknown; }; }; readonly responses: { diff --git a/tests/v2/expected/petstore.ts b/tests/v2/expected/petstore.ts index 46f9c1f82..73f853a99 100644 --- a/tests/v2/expected/petstore.ts +++ b/tests/v2/expected/petstore.ts @@ -235,7 +235,7 @@ export interface operations { /** Additional data to pass to server */ additionalMetadata?: string; /** file to upload */ - file?: { [key: string]: unknown }; + file?: unknown; }; }; responses: {