UNPKG

@autorest/openapi-to-typespec

Version:

Autorest plugin to scaffold a Typespec definition from an OpenAPI document

104 lines 4.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.emitExamples = exports.emitMain = void 0; const path_1 = require("path"); const autorest_session_1 = require("../autorest-session"); const generate_service_information_1 = require("../generate/generate-service-information"); const options_1 = require("../options"); const format_1 = require("../utils/format"); const imports_1 = require("../utils/imports"); const packageInfo = require("../../package.json"); async function emitMain(program, metadata, basePath) { var _a; const { isArm } = (0, options_1.getOptions)(); const content = `${getHeaders()}\n${isArm ? getArmServiceInformation(program, metadata) : getServiceInformation(program)}${isArm && program.listOperation !== undefined ? "\n\ninterface Operations extends Azure.ResourceManager.Operations {}" : ""}`; const filePath = (0, path_1.join)(basePath, "main.tsp"); const session = (0, autorest_session_1.getSession)(); session.writeFile({ filename: filePath, content: await (0, format_1.formatTypespecFile)(content, filePath) }); if ((_a = program.listOperation) === null || _a === void 0 ? void 0 : _a.examples) { emitExamples(program.listOperation.examples, program.serviceInformation.versions, basePath); } } exports.emitMain = emitMain; function getHeaders() { const { isTest, isFullCompatible, guessResourceKey } = (0, options_1.getOptions)(); return [ `/**`, `* PLEASE DO NOT REMOVE - USED FOR CONVERTER METRICS`, `* Generated by package: ${packageInfo.name}`, `* Parameters used:`, `* isFullCompatible: ${isFullCompatible}`, `* guessResourceKey: ${guessResourceKey}`, `* Version: ${isTest ? "Not generated in test" : packageInfo.version}`, `* Date: ${isTest ? "Not generated in test" : new Date().toISOString()}`, `*/`, ].join("\n"); } function getServiceInformation(program) { const { modules, namespaces: namespacesSet } = (0, imports_1.getMainImports)(program); const imports = [ ...new Set([`import "@typespec/rest";`, `import "@typespec/http";`, ...modules, `import "./routes.tsp"`]), ].join("\n"); const namespaces = [ ...new Set([ `using TypeSpec.Rest;`, `using TypeSpec.Http;`, `using TypeSpec.Versioning;`, ...namespacesSet, ]), ].join("\n"); return [imports, "\n", namespaces, "\n", (0, generate_service_information_1.generateServiceInformation)(program)].join("\n"); } function getArmServiceInformation(program, metadata) { const imports = [ `import "@typespec/rest";`, `import "@typespec/versioning";`, `import "@azure-tools/typespec-azure-core";`, `import "@azure-tools/typespec-azure-resource-manager";`, `import "./models.tsp";`, ...getArmResourceImports(program, metadata), ``, `using TypeSpec.Rest;`, `using TypeSpec.Http;`, `using Azure.ResourceManager.Foundations;`, `using Azure.Core;`, `using Azure.ResourceManager;`, `using TypeSpec.Versioning;`, ]; const content = (0, generate_service_information_1.generateServiceInformation)(program); return [...imports, content].join("\n"); } function getArmResourceImports(program, metadata) { const imports = []; for (const resource in metadata.Resources) { const fileName = metadata.Resources[resource][0].SwaggerModelName; if (fileName) { imports.push(`import "./${fileName}.tsp";`); } } if (program.operationGroups.length > 0) { imports.push(`import "./routes.tsp";`); } if (Object.keys(metadata.Resources).find((key) => metadata.Resources[key].length > 1)) { imports.push(`import "./legacy.tsp";`); } return imports; } function emitExamples(examples, versions, basePath) { const session = (0, autorest_session_1.getSession)(); for (const [filename, content] of Object.entries(examples)) { if (versions) { session.writeFile({ filename: (0, path_1.join)(basePath, "examples", versions[0], filename), content, }); } else { session.writeFile({ filename: (0, path_1.join)(basePath, "examples", "unknown", filename), content }); } } } exports.emitExamples = emitExamples; //# sourceMappingURL=emit-main.js.map