UNPKG

@autorest/openapi-to-typespec

Version:

Autorest plugin to scaffold a Typespec definition from an OpenAPI document

95 lines 5 kB
"use strict"; // 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