openapi-typescript
Version:
Generate TypeScript types from Swagger OpenAPI specs
50 lines (48 loc) • 1.83 kB
JavaScript
import path from "path";
import prettier from "prettier";
import parserTypescript from "prettier/parser-typescript";
import { swaggerVersion } from "./utils";
import { transformAll } from "./transform/index";
export * from "./types";
export const WARNING_MESSAGE = `/**
* This file was auto-generated by openapi-typescript.
* Do not make direct changes to the file.
*/
`;
export default function openapiTS(schema, options = {}) {
const ctx = {
additionalProperties: options.additionalProperties || false,
auth: options.auth,
defaultNonNullable: options.defaultNonNullable || false,
formatter: typeof options.formatter === "function" ? options.formatter : undefined,
immutableTypes: options.immutableTypes || false,
rawSchema: options.rawSchema || false,
version: options.version || swaggerVersion(schema),
};
let output = WARNING_MESSAGE;
const rootTypes = transformAll(schema, { ...ctx });
for (const k of Object.keys(rootTypes)) {
if (typeof rootTypes[k] !== "string")
continue;
output += `export interface ${k} {\n ${rootTypes[k]}\n}\n\n`;
}
let prettierOptions = {
parser: "typescript",
plugins: [parserTypescript],
};
if (options && options.prettierConfig) {
try {
const userOptions = prettier.resolveConfig.sync(path.resolve(process.cwd(), options.prettierConfig));
prettierOptions = {
...(userOptions || {}),
...prettierOptions,
plugins: [...prettierOptions.plugins, ...((userOptions && userOptions.plugins) || [])],
};
}
catch (err) {
console.error(`❌ ${err}`);
}
}
return prettier.format(output, prettierOptions);
}
//# sourceMappingURL=index.js.map