@tsed/schema
Version:
JsonSchema module for Ts.ED Framework
34 lines (33 loc) • 1.19 kB
JavaScript
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;
}