vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
71 lines (68 loc) • 8.06 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import { createRscStream } from './createRscStream.server.js';
import { handleError } from '../error/handleError.js';
import { getNodeEnv } from '../config/getNodeEnv.js';
const handleRscStream = function _handleRscStream({
options
}) {
const verbose = options.verbose;
const logger = options.logger;
const panicThreshold = options.panicThreshold;
try {
if (verbose) {
logger?.info("[handleWorkerRscStream:server] Creating RSC stream directly");
}
if (verbose) {
logger?.info(`[handleWorkerRscStream:server] Options: route=${options.route}, rscWorker=${!!options.rscWorker}`);
}
const requestId = options.id ?? `${options.route}-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
if (verbose) {
logger?.info(`[handleWorkerRscStream:server] About to call createRscStream with worker=${!!options.rscWorker}`);
}
const rscResult = createRscStream({
...options,
id: requestId,
logger,
verbose,
panicThreshold,
rscWorker: options.rscWorker,
// Use rscWorker if provided
loader: options.loader || (() => Promise.resolve({ default: {} }))
// Add missing loader
});
return new ReadableStream({
start(controller) {
rscResult.rscStream.on("data", (chunk) => {
controller.enqueue(new Uint8Array(chunk));
});
rscResult.rscStream.on("end", () => {
controller.close();
});
rscResult.rscStream.on("error", (error) => {
controller.error(error);
});
},
cancel() {
rscResult.abort?.();
}
});
} catch (error) {
const panicError = handleError({
error,
logger,
mode: getNodeEnv(),
panicThreshold,
context: `Server RSC stream creation error for route ${options.route}`
});
if (panicError != null) {
throw panicError;
}
throw error;
}
};
export { handleRscStream };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlUnNjU3RyZWFtLnNlcnZlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL3N0cmVhbS9oYW5kbGVSc2NTdHJlYW0uc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSGFuZGxlUnNjU3RyZWFtRm4gfSBmcm9tIFwiLi9oYW5kbGVSc2NTdHJlYW0udHlwZXMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVJzY1N0cmVhbSB9IGZyb20gXCIuL2NyZWF0ZVJzY1N0cmVhbS5zZXJ2ZXIuanNcIjtcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSBcIi4uL2Vycm9yL2hhbmRsZUVycm9yLmpzXCI7XG5pbXBvcnQgeyBnZXROb2RlRW52IH0gZnJvbSBcIi4uL2NvbmZpZy9nZXROb2RlRW52LmpzXCI7XG5cbi8qKlxuICogU2VydmVyLXNpZGUgUlNDIHN0cmVhbSBoYW5kbGVyXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVSc2NTdHJlYW06IEhhbmRsZVJzY1N0cmVhbUZuPFwic2VydmVyXCI+ID0gZnVuY3Rpb24gX2hhbmRsZVJzY1N0cmVhbSh7XG4gIG9wdGlvbnMsXG59KSB7XG4gIC8vIE5vdGU6IHdvcmtlciBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpbiBzZXJ2ZXIgdmVyc2lvblxuICBjb25zdCB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlO1xuICBjb25zdCBsb2dnZXIgPSBvcHRpb25zLmxvZ2dlcjtcbiAgY29uc3QgcGFuaWNUaHJlc2hvbGQgPSBvcHRpb25zLnBhbmljVGhyZXNob2xkO1xuICB0cnkge1xuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXI/LmluZm8oXCJbaGFuZGxlV29ya2VyUnNjU3RyZWFtOnNlcnZlcl0gQ3JlYXRpbmcgUlNDIHN0cmVhbSBkaXJlY3RseVwiKTtcbiAgICB9XG4gICAgXG4gICAgLy8gRGVidWc6IExvZyB0aGUgb3B0aW9ucyB0byBzZWUgd2hhdCB3ZSdyZSB3b3JraW5nIHdpdGhcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKGBbaGFuZGxlV29ya2VyUnNjU3RyZWFtOnNlcnZlcl0gT3B0aW9uczogcm91dGU9JHtvcHRpb25zLnJvdXRlfSwgcnNjV29ya2VyPSR7ISEob3B0aW9ucyBhcyBhbnkpLnJzY1dvcmtlcn1gKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgUlNDIHN0cmVhbSB1c2luZyB0aGUgaGVscGVyIC0gbWVzc2FnZSBpcyBhbHJlYWR5IENyZWF0ZVJzY1N0cmVhbU9wdGlvbnNcbiAgICBjb25zdCByZXF1ZXN0SWQgPVxuICAgICAgb3B0aW9ucy5pZCA/P1xuICAgICAgYCR7b3B0aW9ucy5yb3V0ZX0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKClcbiAgICAgICAgLnRvU3RyaW5nKDM2KVxuICAgICAgICAuc3Vic3RyaW5nKDIsIDExKX1gO1xuXG4gICAgLy8gQ3JlYXRlIFJTQyBzdHJlYW0gd2l0aCB1bmlmaWVkIHN0cmVhbSBtYW5hZ2VtZW50XG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlcj8uaW5mbyhgW2hhbmRsZVdvcmtlclJzY1N0cmVhbTpzZXJ2ZXJdIEFib3V0IHRvIGNhbGwgY3JlYXRlUnNjU3RyZWFtIHdpdGggd29ya2VyPSR7ISEob3B0aW9ucyBhcyBhbnkpLnJzY1dvcmtlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgcnNjUmVzdWx0ID0gY3JlYXRlUnNjU3RyZWFtKHtcbiAgICAgIC4uLm9wdGlvbnMsIFxuICAgICAgaWQ6IHJlcXVlc3RJZCxcbiAgICAgIGxvZ2dlcixcbiAgICAgIHZlcmJvc2UsXG4gICAgICBwYW5pY1RocmVzaG9sZCxcbiAgICAgIHJzY1dvcmtlcjogb3B0aW9ucy5yc2NXb3JrZXIsIC8vIFVzZSByc2NXb3JrZXIgaWYgcHJvdmlkZWRcbiAgICAgIGxvYWRlcjogb3B0aW9ucy5sb2FkZXIgfHwgKCgpID0+IFByb21pc2UucmVzb2x2ZSh7IGRlZmF1bHQ6IHt9IH0pKSwgLy8gQWRkIG1pc3NpbmcgbG9hZGVyXG4gICAgfSBhcyBhbnkpO1xuXG4gICAgLy8gQ29udmVydCB0aGUgUlNDIHN0cmVhbSBkaXJlY3RseSB0byBhIFJlYWRhYmxlU3RyZWFtXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pih7XG4gICAgICBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICAgIHJzY1Jlc3VsdC5yc2NTdHJlYW0ub24oXCJkYXRhXCIsIChjaHVuazogQnVmZmVyKSA9PiB7XG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGNodW5rKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJzY1Jlc3VsdC5yc2NTdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcnNjUmVzdWx0LnJzY1N0cmVhbS5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnRyb2xsZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBjYW5jZWwoKSB7XG4gICAgICAgIHJzY1Jlc3VsdC5hYm9ydD8uKCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgcGFuaWNFcnJvciA9IGhhbmRsZUVycm9yKHtcbiAgICAgIGVycm9yLFxuICAgICAgbG9nZ2VyLFxuICAgICAgbW9kZTogZ2V0Tm9kZUVudigpLFxuICAgICAgcGFuaWNUaHJlc2hvbGQsXG4gICAgICBjb250ZXh0OiBgU2VydmVyIFJTQyBzdHJlYW0gY3JlYXRpb24gZXJyb3IgZm9yIHJvdXRlICR7b3B0aW9ucy5yb3V0ZX1gLFxuICAgIH0pO1xuXG4gICAgaWYgKHBhbmljRXJyb3IgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgcGFuaWNFcnJvcjtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtc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