UNPKG

@autorest/openapi-to-typespec

Version:

Autorest plugin to scaffold a Typespec definition from an OpenAPI document

30 lines 1.59 kB
"use strict"; 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