{"version":3,"file":"OpenApiV3Downgrader.mjs","sources":["../../src/converters/OpenApiV3Downgrader.ts"],"sourcesContent":["import { OpenApi } from \"../OpenApi\";\nimport { OpenApiV3 } from \"../OpenApiV3\";\nimport { OpenApiTypeChecker } from \"../utils/OpenApiTypeChecker\";\n\nexport namespace OpenApiV3Downgrader {\n  export interface IComponentsCollection {\n    original: OpenApi.IComponents;\n    downgraded: OpenApiV3.IComponents;\n  }\n\n  export const downgrade = (input: OpenApi.IDocument): OpenApiV3.IDocument => {\n    const collection: IComponentsCollection = downgradeComponents(\n      input.components,\n    );\n    return {\n      openapi: \"3.0.0\",\n      servers: input.servers,\n      info: input.info,\n      components: collection.downgraded,\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): OpenApiV3.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): OpenApiV3.IOperation => ({\n      ...input,\n      parameters: input.parameters\n        ? input.parameters.map(downgradeParameter(collection))\n        : undefined,\n      requestBody: input.requestBody\n        ? downgradeRequestBody(collection)(input.requestBody)\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\n  const downgradeParameter =\n    (collection: IComponentsCollection) =>\n    (\n      input: OpenApi.IOperation.IParameter,\n    ): OpenApiV3.IOperation.IParameter => ({\n      ...input,\n      schema: downgradeSchema(collection)(input.schema),\n    });\n\n  const downgradeRequestBody =\n    (collection: IComponentsCollection) =>\n    (\n      input: OpenApi.IOperation.IRequestBody,\n    ): OpenApiV3.IOperation.IRequestBody => ({\n      ...input,\n      content: input.content\n        ? downgradeContent(collection)(input.content)\n        : undefined,\n    });\n\n  const downgradeResponse =\n    (collection: IComponentsCollection) =>\n    (input: OpenApi.IOperation.IResponse): OpenApiV3.IOperation.IResponse => ({\n      ...input,\n      content: input.content\n        ? downgradeContent(collection)(input.content)\n        : undefined,\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              ]),\n          )\n        : undefined,\n    });\n\n  const downgradeContent =\n    (collection: IComponentsCollection) =>\n    (\n      record: OpenApi.IOperation.IContent,\n    ): Record<string, OpenApiV3.IOperation.IMediaType> =>\n      Object.fromEntries(\n        Object.entries(record)\n          .filter(([_, v]) => v !== undefined)\n          .map(\n            ([key, value]) =>\n              [\n                key,\n                {\n                  ...value,\n                  schema: value?.schema\n                    ? downgradeSchema(collection)(value.schema)\n                    : undefined,\n                },\n              ] as const,\n          ),\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        securitySchemes: input.securitySchemes,\n      },\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.schemas[key] =\n            downgradeSchema(collection)(value);\n    }\n    return collection;\n  };\n\n  export const downgradeSchema =\n    (collection: IComponentsCollection) =>\n    (input: OpenApi.IJsonSchema): OpenApiV3.IJsonSchema => {\n      const nullable: boolean = isNullable(new Set())(collection.original)(\n        input,\n      );\n      const union: OpenApiV3.IJsonSchema[] = [];\n      const attribute: OpenApiV3.IJsonSchema.__IAttribute = {\n        title: input.title,\n        description: input.description,\n        deprecated: input.deprecated,\n        readOnly: input.readOnly,\n        writeOnly: input.writeOnly,\n        example: input.example,\n        examples: input.examples,\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          OpenApiTypeChecker.isReference(schema)\n        )\n          union.push({ ...schema });\n        else if (OpenApiTypeChecker.isArray(schema))\n          union.push({\n            ...schema,\n            items: downgradeSchema(collection)(schema.items),\n          });\n        else if (OpenApiTypeChecker.isTuple(schema))\n          union.push({\n            ...schema,\n            items: ((): OpenApiV3.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                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          });\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          });\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: OpenApiV3.IJsonSchema.INumber | undefined = union.find(\n            (u) => (u as OpenApiV3.IJsonSchema.INumber).type === typeof value,\n          ) as OpenApiV3.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        };\n        if (OpenApiTypeChecker.isConstant(schema)) insert(schema.const);\n        else if (OpenApiTypeChecker.isOneOf(schema))\n          for (const u of schema.oneOf)\n            if (OpenApiTypeChecker.isConstant(u)) insert(u.const);\n      };\n\n      visit(input);\n      visitConstant(input);\n      if (nullable === true)\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 OpenApiV3.IJsonSchema.IArray).nullable = true;\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            : { oneOf: union }),\n        ...attribute,\n      };\n    };\n\n  const downgradeNullableReference =\n    (visited: Set<string>) =>\n    (collection: IComponentsCollection) =>\n    (schema: OpenApiV3.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 (\n        collection.downgraded.schemas?.[`${key}.Nullable`] === undefined\n      ) {\n        collection.downgraded.schemas ??= {};\n        collection.downgraded.schemas[`${key}.Nullable`] = {};\n        collection.downgraded.schemas[`${key}.Nullable`] = downgradeSchema(\n          collection,\n        )(\n          OpenApiTypeChecker.isOneOf(found)\n            ? {\n                ...found,\n                oneOf: [...found.oneOf, { type: \"null\" }],\n              }\n            : {\n                oneOf: [found, { type: \"null\" }],\n                title: found.title,\n                description: found.description,\n                example: found.example,\n                examples: found.examples,\n                ...Object.fromEntries(\n                  Object.entries(found).filter(\n                    ([key, value]) =>\n                      key.startsWith(\"x-\") && value !== undefined,\n                  ),\n                ),\n              },\n        );\n      }\n      schema.$ref += \".Nullable\";\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":["OpenApiV3Downgrader","downgrade","input","collection","downgradeComponents","components","openapi","servers","info","downgraded","paths","Object","fromEntries","entries","filter","_","v","undefined","map","key","value","downgradePathItem","security","tags","pathItem","get","downgradeOperation","put","post","delete","options","head","patch","trace","parameters","downgradeParameter","requestBody","downgradeRequestBody","responses","downgradeResponse","schema","downgradeSchema","content","downgradeContent","headers","record","original","securitySchemes","schemas","nullable","isNullable","Set","union","attribute","title","description","deprecated","readOnly","writeOnly","example","examples","startsWith","visit","OpenApiTypeChecker","isBoolean","push","type","isInteger","isNumber","isString","isReference","isArray","items","isTuple","additionalItems","elements","prefixItems","length","oneOf","minItems","maxItems","isObject","properties","additionalProperties","required","isOneOf","forEach","visitConstant","insert","matched","find","u","enum","isConstant","const","downgradeNullableReference","visited","$ref","split","pop","endsWith","found","_a","isNull","has","add","next","some"],"mappings":"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"}