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