@samchon/openapi
Version:
OpenAPI definitions and converters for 'typia' and 'nestia'.
1 lines • 23.7 kB
Source Map (JSON)
{"version":3,"file":"SwaggerV2Downgrader.mjs","sources":["../../src/converters/SwaggerV2Downgrader.ts"],"sourcesContent":["import { OpenApi } from \"../OpenApi\";\nimport { SwaggerV2 } from \"../SwaggerV2\";\nimport { OpenApiTypeChecker } from \"../utils/OpenApiTypeChecker\";\n\nexport namespace SwaggerV2Downgrader {\n export interface IComponentsCollection {\n original: OpenApi.IComponents;\n downgraded: Record<string, SwaggerV2.IJsonSchema>;\n }\n\n export const downgrade = (input: OpenApi.IDocument): SwaggerV2.IDocument => {\n const collection: IComponentsCollection = downgradeComponents(\n input.components,\n );\n return {\n swagger: \"2.0\",\n info: input.info,\n host: input.servers?.[0]?.url\n ? input.servers[0].url.split(\"://\").pop()!\n : \"\",\n definitions: collection.downgraded,\n securityDefinitions: input.components?.securitySchemes\n ? Object.fromEntries(\n Object.entries(input.components.securitySchemes)\n .filter(([_, v]) => v !== undefined)\n .map(([key, value]) =>\n downgradeSecurityScheme(value).map((v) => [key, v]),\n )\n .flat(),\n )\n : undefined,\n paths: input.paths\n ? Object.fromEntries(\n Object.entries(input.paths)\n .filter(([_, v]) => v !== undefined)\n .map(\n ([key, value]) =>\n [key, downgradePathItem(collection)(value)] as const,\n ),\n )\n : undefined,\n security: input.security,\n tags: input.tags,\n };\n };\n\n /* -----------------------------------------------------------\n OPERATORS\n ----------------------------------------------------------- */\n const downgradePathItem =\n (collection: IComponentsCollection) =>\n (pathItem: OpenApi.IPath): SwaggerV2.IPath => ({\n ...(pathItem as any),\n ...(pathItem.get\n ? { get: downgradeOperation(collection)(pathItem.get) }\n : undefined),\n ...(pathItem.put\n ? { put: downgradeOperation(collection)(pathItem.put) }\n : undefined),\n ...(pathItem.post\n ? { post: downgradeOperation(collection)(pathItem.post) }\n : undefined),\n ...(pathItem.delete\n ? { delete: downgradeOperation(collection)(pathItem.delete) }\n : undefined),\n ...(pathItem.options\n ? { options: downgradeOperation(collection)(pathItem.options) }\n : undefined),\n ...(pathItem.head\n ? { head: downgradeOperation(collection)(pathItem.head) }\n : undefined),\n ...(pathItem.patch\n ? { patch: downgradeOperation(collection)(pathItem.patch) }\n : undefined),\n ...(pathItem.trace\n ? { trace: downgradeOperation(collection)(pathItem.trace) }\n : undefined),\n });\n\n const downgradeOperation =\n (collection: IComponentsCollection) =>\n (input: OpenApi.IOperation): SwaggerV2.IOperation => ({\n ...input,\n parameters:\n input.parameters !== undefined || input.requestBody !== undefined\n ? [\n ...(input.parameters ?? []).map(downgradeParameter(collection)),\n ...(input.requestBody\n ? [downgradeRequestBody(collection)(input.requestBody)]\n : []),\n ]\n : undefined,\n responses: input.responses\n ? Object.fromEntries(\n Object.entries(input.responses)\n .filter(([_, v]) => v !== undefined)\n .map(([key, value]) => [\n key,\n downgradeResponse(collection)(value),\n ]),\n )\n : undefined,\n ...{\n requestBody: undefined,\n servers: undefined,\n },\n });\n\n const downgradeParameter =\n (collection: IComponentsCollection) =>\n (\n input: OpenApi.IOperation.IParameter,\n i: number,\n ): SwaggerV2.IOperation.IParameter =>\n ({\n ...downgradeSchema(collection)(input.schema),\n ...input,\n required: (input.schema as any)?.required,\n schema: undefined,\n name: input.name ?? `p${i}`,\n ...{\n example: undefined,\n examples: undefined,\n },\n }) as any;\n\n const downgradeRequestBody =\n (collection: IComponentsCollection) =>\n (\n input: OpenApi.IOperation.IRequestBody,\n ): SwaggerV2.IOperation.IParameter => ({\n name: \"body\",\n in: \"body\",\n description: input.description,\n required: input.required,\n schema: downgradeSchema(collection)(\n Object.values(input.content ?? {})[0]?.schema ?? {},\n ),\n });\n\n const downgradeResponse =\n (collection: IComponentsCollection) =>\n (input: OpenApi.IOperation.IResponse): SwaggerV2.IOperation.IResponse => ({\n description: input.description,\n schema: downgradeSchema(collection)(\n Object.values(input.content ?? {})[0]?.schema ?? {},\n ),\n headers: input.headers\n ? Object.fromEntries(\n Object.entries(input.headers)\n .filter(([_, v]) => v !== undefined)\n .map(([key, value]) => [\n key,\n {\n ...value,\n schema: downgradeSchema(collection)(value.schema),\n ...{\n example: undefined,\n examples: undefined,\n },\n },\n ]),\n )\n : undefined,\n });\n\n /* -----------------------------------------------------------\n DEFINITIONS\n ----------------------------------------------------------- */\n export const downgradeComponents = (\n input: OpenApi.IComponents,\n ): IComponentsCollection => {\n const collection: IComponentsCollection = {\n original: input,\n downgraded: {},\n };\n if (input.schemas) {\n collection.downgraded.schemas = {};\n for (const [key, value] of Object.entries(input.schemas))\n if (value !== undefined)\n collection.downgraded[key.split(\"/\").pop()!] =\n downgradeSchema(collection)(value);\n }\n return collection;\n };\n\n export const downgradeSchema =\n (collection: IComponentsCollection) =>\n (input: OpenApi.IJsonSchema): SwaggerV2.IJsonSchema => {\n const nullable: boolean = isNullable(new Set())(collection.original)(\n input,\n );\n const union: SwaggerV2.IJsonSchema[] = [];\n const attribute: SwaggerV2.IJsonSchema.__IAttribute = {\n title: input.title,\n description: input.description,\n example: input.example,\n examples: input.examples ? Object.values(input.examples) : undefined,\n ...Object.fromEntries(\n Object.entries(input).filter(\n ([key, value]) => key.startsWith(\"x-\") && value !== undefined,\n ),\n ),\n };\n const visit = (schema: OpenApi.IJsonSchema): void => {\n if (OpenApiTypeChecker.isBoolean(schema))\n union.push({ type: \"boolean\" });\n else if (\n OpenApiTypeChecker.isBoolean(schema) ||\n OpenApiTypeChecker.isInteger(schema) ||\n OpenApiTypeChecker.isNumber(schema) ||\n OpenApiTypeChecker.isString(schema)\n )\n union.push({\n ...schema,\n examples: schema.examples\n ? Object.values(schema.examples)\n : undefined,\n });\n else if (OpenApiTypeChecker.isReference(schema))\n union.push({ $ref: `#/definitions/${schema.$ref.split(\"/\").pop()}` });\n else if (OpenApiTypeChecker.isArray(schema))\n union.push({\n ...schema,\n items: downgradeSchema(collection)(schema.items),\n examples: schema.examples\n ? Object.values(schema.examples)\n : undefined,\n });\n else if (OpenApiTypeChecker.isTuple(schema))\n union.push({\n ...schema,\n items: ((): SwaggerV2.IJsonSchema => {\n if (schema.additionalItems === true) return {};\n const elements = [\n ...schema.prefixItems,\n ...(typeof schema.additionalItems === \"object\"\n ? [downgradeSchema(collection)(schema.additionalItems)]\n : []),\n ];\n if (elements.length === 0) return {};\n return {\n \"x-oneOf\": elements.map(downgradeSchema(collection) as any),\n };\n })(),\n minItems: schema.prefixItems.length,\n maxItems:\n !!schema.additionalItems === true\n ? undefined\n : schema.prefixItems.length,\n ...{\n prefixItems: undefined,\n additionalItems: undefined,\n },\n examples: schema.examples\n ? Object.values(schema.examples)\n : undefined,\n });\n else if (OpenApiTypeChecker.isObject(schema))\n union.push({\n ...schema,\n properties: schema.properties\n ? Object.fromEntries(\n Object.entries(schema.properties)\n .filter(([_, v]) => v !== undefined)\n .map(([key, value]) => [\n key,\n downgradeSchema(collection)(value),\n ]),\n )\n : undefined,\n additionalProperties:\n typeof schema.additionalProperties === \"object\"\n ? downgradeSchema(collection)(schema.additionalProperties)\n : schema.additionalProperties,\n required: schema.required,\n examples: schema.examples\n ? Object.values(schema.examples)\n : undefined,\n });\n else if (OpenApiTypeChecker.isOneOf(schema))\n schema.oneOf.forEach(visit);\n };\n const visitConstant = (schema: OpenApi.IJsonSchema): void => {\n const insert = (value: any): void => {\n const matched: SwaggerV2.IJsonSchema.INumber | undefined = union.find(\n (u) =>\n (u as SwaggerV2.IJsonSchema.__ISignificant<any>).type === value,\n ) as SwaggerV2.IJsonSchema.INumber | undefined;\n if (matched !== undefined) {\n matched.enum ??= [];\n matched.enum.push(value);\n } else union.push({ type: typeof value as \"number\", enum: [value] });\n if (OpenApiTypeChecker.isConstant(schema)) insert(schema.const);\n else if (OpenApiTypeChecker.isOneOf(schema))\n schema.oneOf.forEach(insert);\n };\n };\n\n visit(input);\n visitConstant(input);\n if (nullable) {\n for (const u of union)\n if (OpenApiTypeChecker.isReference(u as any))\n downgradeNullableReference(new Set())(collection)(u as any);\n else (u as SwaggerV2.IJsonSchema.IArray)[\"x-nullable\"] = true;\n }\n\n if (nullable === true && union.length === 0)\n return { type: \"null\", ...attribute };\n return {\n ...(union.length === 0\n ? { type: undefined }\n : union.length === 1\n ? { ...union[0] }\n : { \"x-oneOf\": union }),\n ...attribute,\n ...(union.length > 1 ? { discriminator: undefined } : {}),\n };\n };\n\n const downgradeNullableReference =\n (visited: Set<string>) =>\n (collection: IComponentsCollection) =>\n (schema: SwaggerV2.IJsonSchema.IReference): void => {\n const key: string = schema.$ref.split(\"/\").pop()!;\n if (key.endsWith(\".Nullable\")) return;\n\n const found: OpenApi.IJsonSchema | undefined =\n collection.original.schemas?.[key];\n if (found === undefined) return;\n else if (isNullable(visited)(collection.original)(found) === true) return;\n else if (collection.downgraded[`${key}.Nullable`] === undefined) {\n collection.downgraded[`${key}.Nullable`] = {};\n collection.downgraded[`${key}.Nullable`] = downgradeSchema(collection)(\n OpenApiTypeChecker.isOneOf(found)\n ? {\n ...found,\n oneOf: [...found.oneOf, { type: \"null\" }],\n }\n : {\n title: found.title,\n description: found.description,\n example: found.example,\n examples: found.examples\n ? Object.values(found.examples)\n : undefined,\n ...Object.fromEntries(\n Object.entries(found).filter(\n ([key, value]) =>\n key.startsWith(\"x-\") && value !== undefined,\n ),\n ),\n oneOf: [found, { type: \"null\" }],\n },\n );\n }\n schema.$ref += \".Nullable\";\n };\n\n const downgradeSecurityScheme = (\n input: OpenApi.ISecurityScheme,\n ): SwaggerV2.ISecurityDefinition[] => {\n if (input.type === \"apiKey\") return [input];\n else if (input.type === \"http\")\n if (input.scheme === \"basic\")\n return [{ type: \"basic\", description: input.description }];\n else return [];\n else if (input.type === \"oauth2\") {\n const output: SwaggerV2.ISecurityDefinition[] = [];\n if (input.flows.implicit)\n output.push({\n type: \"oauth2\",\n flow: \"implicit\",\n authorizationUrl: input.flows.implicit.authorizationUrl,\n scopes: input.flows.implicit.scopes,\n });\n if (input.flows.password)\n output.push({\n type: \"oauth2\",\n flow: \"password\",\n tokenUrl: input.flows.password.tokenUrl,\n scopes: input.flows.password.scopes,\n });\n if (input.flows.clientCredentials)\n output.push({\n type: \"oauth2\",\n flow: \"application\",\n tokenUrl: input.flows.clientCredentials.tokenUrl,\n scopes: input.flows.clientCredentials.scopes,\n });\n if (input.flows.authorizationCode)\n output.push({\n type: \"oauth2\",\n flow: \"accessCode\",\n authorizationUrl: input.flows.authorizationCode.authorizationUrl,\n tokenUrl: input.flows.authorizationCode.tokenUrl,\n scopes: input.flows.authorizationCode.scopes,\n });\n return output;\n }\n return [];\n };\n\n const isNullable =\n (visited: Set<string>) =>\n (components: OpenApi.IComponents) =>\n (schema: OpenApi.IJsonSchema): boolean => {\n if (OpenApiTypeChecker.isNull(schema)) return true;\n else if (OpenApiTypeChecker.isReference(schema)) {\n if (visited.has(schema.$ref)) return false;\n visited.add(schema.$ref);\n const key: string = schema.$ref.split(\"/\").pop()!;\n const next: OpenApi.IJsonSchema | undefined = components.schemas?.[key];\n return next ? isNullable(visited)(components)(next) : false;\n }\n return (\n OpenApiTypeChecker.isOneOf(schema) &&\n schema.oneOf.some(isNullable(visited)(components))\n );\n };\n}\n"],"names":["SwaggerV2Downgrader","downgrade","input","collection","downgradeComponents","components","swagger","info","host","servers","url","split","pop","definitions","downgraded","securityDefinitions","securitySchemes","Object","fromEntries","entries","filter","_","v","undefined","map","key","value","downgradeSecurityScheme","flat","paths","downgradePathItem","security","tags","pathItem","get","downgradeOperation","put","post","delete","options","head","patch","trace","parameters","requestBody","downgradeParameter","downgradeRequestBody","responses","downgradeResponse","i","downgradeSchema","schema","required","name","example","examples","in","description","values","content","headers","original","schemas","nullable","isNullable","Set","union","attribute","title","startsWith","visit","OpenApiTypeChecker","isBoolean","push","type","isInteger","isNumber","isString","isReference","$ref","isArray","items","isTuple","additionalItems","elements","prefixItems","length","minItems","maxItems","isObject","properties","additionalProperties","isOneOf","oneOf","forEach","u","downgradeNullableReference","discriminator","visited","endsWith","found","scheme","output","flows","implicit","flow","authorizationUrl","scopes","password","tokenUrl","clientCredentials","authorizationCode","isNull","has","add","next","some"],"mappings":"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"}