UNPKG

@tsed/schema

Version:
34 lines (33 loc) 1.19 kB
import { getValue } from "@tsed/core"; import { SpecTypes } from "../domain/SpecTypes.js"; import { getSpec } from "./getSpec.js"; import { getSpecTypeFromSpec } from "./getSpecType.js"; import { mapOpenSpec } from "./mapOpenSpec.js"; import { mergeSpec } from "./mergeSpec.js"; import { transformToOS2 } from "./transformToOS2.js"; /** * Generate OpenAPI spec from multiple sources (models, files, conf) * @param tokens * @param options */ export function generateSpec({ tokens, ...options }) { const { version = "1.0.0", acceptMimes, fileSpec = {}, specVersion } = options; const defaultSpec = mapOpenSpec(getValue(options, "spec", {}), { fileSpec, version, specVersion, acceptMimes }); const specType = getSpecTypeFromSpec(defaultSpec); let controllersSpec = getSpec(tokens, options); const spec = mergeSpec(defaultSpec, controllersSpec); if (options.sortPaths) { spec.paths = Object.fromEntries(Object.entries(spec.paths).sort(([k1], [k2]) => { return k1.localeCompare(k2); })); } if (specType === SpecTypes.SWAGGER) { return transformToOS2(spec); } return spec; }