openapi-typescript
Version:
Convert OpenAPI 3.0 & 3.1 schemas to TypeScript
50 lines • 2.23 kB
JavaScript
import ts from "typescript";
import { NEVER, STRING, tsModifiers, tsRecord } from "../lib/ts.js";
import { createRef, debug } from "../lib/utils.js";
import transformComponentsObject from "./components-object.js";
import transformPathsObject from "./paths-object.js";
import transformSchemaObject from "./schema-object.js";
import transformWebhooksObject from "./webhooks-object.js";
const transformers = {
paths: transformPathsObject,
webhooks: transformWebhooksObject,
components: transformComponentsObject,
$defs: (node, options) => transformSchemaObject(node, { path: createRef(["$defs"]), ctx: options }),
};
export default function transformSchema(schema, ctx) {
const type = [];
for (const root of Object.keys(transformers)) {
const emptyObj = ts.factory.createTypeAliasDeclaration(tsModifiers({ export: true }), root, undefined, tsRecord(STRING, NEVER));
if (schema[root] && typeof schema[root] === "object") {
const rootT = performance.now();
const subType = transformers[root](schema[root], ctx);
if (subType.members?.length) {
type.push(ctx.exportType
? ts.factory.createTypeAliasDeclaration(tsModifiers({ export: true }), root, undefined, subType)
: ts.factory.createInterfaceDeclaration(tsModifiers({ export: true }), root, undefined, undefined, subType.members));
debug(`${root} done`, "ts", performance.now() - rootT);
}
else {
type.push(emptyObj);
debug(`${root} done (skipped)`, "ts", 0);
}
}
else {
type.push(emptyObj);
debug(`${root} done (skipped)`, "ts", 0);
}
}
let hasOperations = false;
for (const injectedType of ctx.injectFooter) {
if (!hasOperations &&
injectedType?.name?.escapedText === "operations") {
hasOperations = true;
}
type.push(injectedType);
}
if (!hasOperations) {
type.push(ts.factory.createTypeAliasDeclaration(tsModifiers({ export: true }), "operations", undefined, tsRecord(STRING, NEVER)));
}
return type;
}
//# sourceMappingURL=index.js.map