UNPKG

@typespec/http-server-js

Version:

TypeSpec HTTP server code generator for JavaScript

52 lines 2.15 kB
// Copyright (c) Microsoft Corporation // Licensed under the MIT license. import { NoTarget } from "@typespec/compiler"; import { getHttpService, getServers } from "@typespec/http"; import { createModule } from "../ctx.js"; import { reportDiagnostic } from "../lib.js"; import { getOpenApi3Emitter, getOpenApi3ServiceRecord, tryGetOpenApi3 } from "../util/openapi3.js"; import { emitRawServer } from "./server/index.js"; import { emitRouter } from "./server/router.js"; /** * Emits bindings for the service to be carried over the HTTP protocol. */ export async function emitHttp(ctx) { const [httpService, diagnostics] = getHttpService(ctx.program, ctx.service.type); const diagnosticsAreError = diagnostics.some((d) => d.severity === "error"); if (diagnosticsAreError) { reportDiagnostic(ctx.program, { code: "http-emit-disabled", target: NoTarget, messageId: "default", }); return; } const servers = getServers(ctx.program, ctx.service.type) ?? []; const httpModule = createModule("http", ctx.generatedModule); const httpContext = { ...ctx, httpService, httpModule, servers, }; const openapi3Emitter = await getOpenApi3Emitter(); const openapi3 = await tryGetOpenApi3(ctx.program, ctx.service); if (openapi3) { const openApiDocumentModule = createModule("openapi3", httpModule); openApiDocumentModule.declarations.push([ `export const openApiDocument = ${JSON.stringify(openapi3)}`, ]); } else if (openapi3Emitter) { const serviceRecord = await getOpenApi3ServiceRecord(ctx.program, ctx.service); reportDiagnostic(ctx.program, { code: "openapi3-document-not-generated", target: ctx.service.type, messageId: serviceRecord?.versioned ? "versioned" : "unable", }); } const operationsModule = createModule("operations", httpModule); const serverRawModule = emitRawServer(httpContext, operationsModule); emitRouter(httpContext, httpService, serverRawModule); } //# sourceMappingURL=index.js.map