@autorest/openapi-to-typespec
Version:
Autorest plugin to scaffold a Typespec definition from an OpenAPI document
30 lines • 1.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.emitModels = void 0;
const autorest_session_1 = require("../autorest-session");
const generate_enums_1 = require("../generate/generate-enums");
const generate_object_1 = require("../generate/generate-object");
const format_1 = require("../utils/format");
const imports_1 = require("../utils/imports");
const namespace_1 = require("../utils/namespace");
async function emitModels(filePath, program) {
const content = generateModels(program);
const session = (0, autorest_session_1.getSession)();
session.writeFile({ filename: filePath, content: await (0, format_1.formatTypespecFile)(content, filePath) });
}
exports.emitModels = emitModels;
function generateModels(program) {
const { models } = program;
const { modules, namespaces: namespacesSet } = (0, imports_1.getModelsImports)(program);
const imports = [...new Set([`import "@typespec/rest";`, `import "@typespec/http";`, ...modules])].join("\n");
const namespaces = [...new Set([`using TypeSpec.Rest;`, `using TypeSpec.Http;`, ...namespacesSet])].join("\n");
const enums = flattenEnums(models.enums).join("");
const objects = models.objects.map(generate_object_1.generateObject).join("\n\n");
return [imports, "\n", namespaces, "\n", (0, namespace_1.getNamespaceStatement)(program), "\n", enums, "\n", objects].join("\n");
}
function flattenEnums(enums) {
return enums.reduce((a, c) => {
return [...a, ...(0, generate_enums_1.generateEnums)(c)];
}, []);
}
//# sourceMappingURL=emit-models.js.map