vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
48 lines (42 loc) • 1.43 kB
text/typescript
import type { Logger } from "vite";
import { workerData, type Worker } from "node:worker_threads";
import type { MessageHandler } from "../types.js";
import type { ServerResponse } from "node:http";
import type { RscChunkOutputMessage } from "../worker/rsc/types.js";
import type { PassThrough } from "node:stream";
import { getNodeEnv } from "../config/getNodeEnv.js";
import { handleError } from "../error/handleError.js";
import type { CleanupServerActionFn } from "./types.js";
/**
* Handles cleanup of worker server action resources
*/
export const cleanupServerAction: CleanupServerActionFn =
function _cleanupServerAction(
passThrough: PassThrough,
worker: Worker,
messageHandler: MessageHandler<RscChunkOutputMessage>,
res: ServerResponse,
error?: unknown,
logger?: Logger
) {
// Remove message handler first to prevent any new messages
worker.removeListener("message", messageHandler);
// End the pass-through stream
passThrough.end();
// Log error if provided
if (error) {
const panicError = handleError({
error,
logger,
mode: getNodeEnv(workerData?.resolvedConfig?.mode),
panicThreshold: workerData?.userOptions?.panicThreshold,
critical: false,
context: "cleanupWorkerServerAction",
});
if (panicError != null) {
throw panicError;
}
}
// End the response
res.end();
};