@typespec/http-server-js
Version:
TypeSpec HTTP server code generator for JavaScript
52 lines • 2.15 kB
JavaScript
// 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