UNPKG

@autorest/openapi-to-cadl

Version:

Autorest plugin to scaffold a Typespec definition from an OpenAPI document

53 lines (45 loc) 1.81 kB
import { CadlProgram, EndpointParameter } from "../interfaces"; import { generateDocs } from "../utils/docs"; import { getNamespace } from "../utils/namespace"; export function generateServiceInformation(program: CadlProgram) { const { serviceInformation } = program; const definitions: string[] = []; definitions.push(`@service({ title: "${serviceInformation.name}" ${serviceInformation.version ? `, version: "${serviceInformation.version}"` : ""} })`); if (serviceInformation.endpoint) { definitions.push(`@server("${serviceInformation.endpoint}", ${JSON.stringify(serviceInformation.doc) ?? ""}`); const parametrizedHost = getEndpointParameters(serviceInformation.endpoint); const hasParameters = (serviceInformation.endpointParameters && serviceInformation.endpointParameters.length) || parametrizedHost.length; const allParams: EndpointParameter[] = [ ...(serviceInformation.endpointParameters ?? []).filter((p) => !parametrizedHost.some((e) => e.name === p.name)), ...parametrizedHost, ]; if (hasParameters) { definitions.push(", {"); for (const param of allParams ?? []) { const doc = generateDocs(param); doc && definitions.push(doc); definitions.push(`${param.name}: string `); } } hasParameters && definitions.push("}"); definitions.push(")"); } const serviceDoc = generateDocs(serviceInformation); serviceDoc && definitions.push(serviceDoc); definitions.push(getNamespace(program)); return definitions.join("\n"); } function getEndpointParameters(endpoint: string) { const regex = /{([^{}]+)}/g; const params: EndpointParameter[] = []; let match; while ((match = regex.exec(endpoint)) !== null) { params.push({ name: match[1] }); } return params; }