UNPKG

@autorest/openapi-to-typespec

Version:

Autorest plugin to scaffold a Typespec definition from an OpenAPI document

65 lines 3.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getResourcesImports = exports.emitArmResources = void 0; const path_1 = require("path"); const autorest_session_1 = require("../autorest-session"); const generate_arm_resource_1 = require("../generate/generate-arm-resource"); const format_1 = require("../utils/format"); const namespace_1 = require("../utils/namespace"); const emit_main_1 = require("./emit-main"); async function emitArmResources(program, metadata, basePath) { // Create a file per resource const session = (0, autorest_session_1.getSession)(); const { serviceInformation } = program; for (const armResource of program.models.armResources) { const { modules, namespaces } = getResourcesImports(program, armResource); const filePath = (0, path_1.join)(basePath, `${armResource.name}.tsp`); const generatedResource = (0, generate_arm_resource_1.generateArmResource)(armResource); const content = [ modules.join("\n"), "\n", namespaces.join("\n"), "\n", (0, namespace_1.getNamespaceStatement)(program), generatedResource, ].join("\n"); session.writeFile({ filename: filePath, content: await (0, format_1.formatTypespecFile)(content, filePath) }); // generate examples for each operation const examples = (0, generate_arm_resource_1.generateArmResourceExamples)(armResource); (0, emit_main_1.emitExamples)(examples, serviceInformation.versions, basePath); } const multiPathResources = Object.keys(metadata.Resources).filter((key) => key.endsWith("FixMe")); for (const resource of multiPathResources) { const originalName = resource.replace("FixMe", ""); const filePath = (0, path_1.join)(basePath, `${resource}.tsp`); session.writeFile({ filename: filePath, content: `// You defined multiple pathes under the model ${originalName}. Some operations will be lost. Turn on isFullCompatible to keep all operations, or fix your TypeSpec manually.`, }); } } exports.emitArmResources = emitArmResources; function getResourcesImports(_program, armResource) { var _a; const imports = { modules: [ `import "@azure-tools/typespec-azure-core";`, `import "@azure-tools/typespec-azure-resource-manager";`, `import "@typespec/openapi";`, `import "@typespec/rest";`, `import "./models.tsp";`, ], namespaces: [ `using TypeSpec.Rest;`, `using Azure.ResourceManager;`, `using TypeSpec.Http;`, `using TypeSpec.OpenAPI;`, ], }; if ((_a = armResource.resourceParent) === null || _a === void 0 ? void 0 : _a.name) { imports.modules.push(`import "./${armResource.resourceParent.name}.tsp";`); } return imports; } exports.getResourcesImports = getResourcesImports; //# sourceMappingURL=emit-arm-resources.js.map