@autorest/openapi-to-typespec
Version:
Autorest plugin to scaffold a Typespec definition from an OpenAPI document
95 lines • 5 kB
JavaScript
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.processDetector = exports.processConverter = void 0;
const path_1 = require("path");
const codemodel_1 = require("@autorest/codemodel");
const extension_base_1 = require("@autorest/extension-base");
const autorest_session_1 = require("./autorest-session");
const emit_arm_resources_1 = require("./emiters/emit-arm-resources");
const emit_client_1 = require("./emiters/emit-client");
const emit_legacy_1 = require("./emiters/emit-legacy");
const emit_main_1 = require("./emiters/emit-main");
const emit_models_1 = require("./emiters/emit-models");
const emit_package_1 = require("./emiters/emit-package");
const emit_routes_1 = require("./emiters/emit-routes");
const emit_typespec_config_1 = require("./emiters/emit-typespec-config");
const model_1 = require("./model");
const options_1 = require("./options");
const arm_pretransform_1 = require("./pretransforms/arm-pretransform");
const name_pretransform_1 = require("./pretransforms/name-pretransform");
const rename_pretransform_1 = require("./pretransforms/rename-pretransform");
const parse_metadata_1 = require("./resource/parse-metadata");
const errors_1 = require("./utils/errors");
const paging_1 = require("./utils/paging");
const resources_1 = require("./utils/resources");
async function processConverter(host) {
const session = await (0, extension_base_1.startSession)(host, codemodel_1.codeModelSchema);
(0, autorest_session_1.setSession)(session);
const codeModel = session.model;
(0, name_pretransform_1.pretransformNames)(codeModel);
const { isArm } = (0, options_1.getOptions)();
let metadata = undefined;
if (isArm) {
// await host.writeFile({ filename: "codeModel.yaml", content: serialize(codeModel, codeModelSchema) });
metadata = (0, parse_metadata_1.parseMetadata)(codeModel, session.configuration);
// metadata.RenameMapping = session.configuration["rename-mapping"];
// metadata.OverrideOperationName = session.configuration["override-operation-name"];
await host.writeFile({ filename: "resources.json", content: JSON.stringify(metadata, null, 2) });
(0, arm_pretransform_1.pretransformArmResources)(codeModel, metadata);
(0, rename_pretransform_1.pretransformRename)(codeModel, metadata);
}
(0, paging_1.markPagination)(codeModel);
(0, errors_1.markErrorModels)(codeModel);
(0, resources_1.markResources)(codeModel);
const programDetails = (0, model_1.getModel)(codeModel);
if (isArm) {
await (0, emit_arm_resources_1.emitArmResources)(programDetails, metadata, getOutuptDirectory(session));
}
await (0, emit_models_1.emitModels)(getFilePath(session, "models.tsp"), programDetails);
await (0, emit_routes_1.emitRoutes)(programDetails, getOutuptDirectory(session));
await (0, emit_main_1.emitMain)(programDetails, metadata, getOutuptDirectory(session));
await (0, emit_package_1.emitPackage)(getFilePath(session, "package.json"), programDetails);
await (0, emit_typespec_config_1.emitTypespecConfig)(getFilePath(session, "tspconfig.yaml"), programDetails);
await (0, emit_client_1.emitClient)(getFilePath(session, "client.tsp"), programDetails);
if (metadata && Object.keys(metadata.Resources).find((key) => metadata.Resources[key].length > 1)) {
await (0, emit_legacy_1.emitLegacy)(getFilePath(session, "legacy.tsp"));
}
}
exports.processConverter = processConverter;
function getOutuptDirectory(session) {
var _a;
return (_a = session.configuration["src-path"]) !== null && _a !== void 0 ? _a : "";
}
function getFilePath(session, fileName) {
return (0, path_1.join)(getOutuptDirectory(session), fileName);
}
async function main() {
const pluginHost = new extension_base_1.AutoRestExtension();
pluginHost.add("source-swagger-detector", processDetector);
pluginHost.add("openapi-to-typespec", processConverter);
await pluginHost.run();
}
main().catch((e) => {
throw new Error(e);
});
async function processDetector(host) {
var _a, _b;
const session = await (0, extension_base_1.startSession)(host, codemodel_1.codeModelSchema);
if ((_a = session.model.components) === null || _a === void 0 ? void 0 : _a.schemas) {
for (const v of Object.values(session.model.components.schemas)) {
if ((_b = v["x-ms-metadata"]) === null || _b === void 0 ? void 0 : _b.originalLocations) {
for (const p of v["x-ms-metadata"].originalLocations) {
const result = p.match(/\/common-types\/resource-management\/(v\d)\//);
if (result) {
(0, autorest_session_1.setArmCommonTypeVersion)(result[1]);
return;
}
}
}
}
}
}
exports.processDetector = processDetector;
//# sourceMappingURL=main.js.map
;