@autorest/openapi-to-typespec
Version:
Autorest plugin to scaffold a Typespec definition from an OpenAPI document
104 lines • 4.48 kB
JavaScript
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
;