vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
59 lines (56 loc) • 2 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import { Worker } from 'node:worker_threads';
import { getNodePath, getMode } from '../config/getPaths.js';
import { getCondition } from '../config/getCondition.js';
async function createWorker(options) {
const {
projectRoot = process.cwd(),
nodePath = getNodePath(projectRoot),
condition = getCondition(),
reverseCondition = true,
maxListeners = 100,
mode = getMode(),
workerPath,
resourceLimits = {
maxOldGenerationSizeMb: 512,
maxYoungGenerationSizeMb: 128
}
} = options;
const isTestEnv = process.env["VITEST"] || process.env["NODE_ENV"] === "test";
const nodeEnv = isTestEnv ? "development" : mode;
const env = {
...process.env,
NODE_ENV: nodeEnv,
NODE_PATH: nodePath,
NODE_OPTIONS: `${reverseCondition ? condition === "react-server" ? process.env["NODE_OPTIONS"]?.includes("react-server") ? process.env["NODE_OPTIONS"]?.replace("react-server", "react-client") : `${process.env["NODE_OPTIONS"] ?? ""} --conditions=react-client` : process.env["NODE_OPTIONS"]?.includes("react-client") ? process.env["NODE_OPTIONS"]?.replace("react-client", "react-server") : `${process.env["NODE_OPTIONS"] ?? ""} --conditions=react-server` : process.env["NODE_OPTIONS"]}`
};
const worker = new Worker(
workerPath.startsWith("/") ? workerPath : "./" + workerPath,
{
env,
resourceLimits
}
);
worker.setMaxListeners(maxListeners);
return await new Promise((resolve, reject) => {
const timeout = setTimeout(() => {
reject(new Error("Worker ready timeout"));
}, 5e3);
worker.once("message", (msg) => {
if (msg.type === "READY" && msg.env === nodeEnv) {
clearTimeout(timeout);
resolve(worker);
}
});
worker.once("error", (error) => {
clearTimeout(timeout);
reject(error);
});
});
}
export { createWorker };
//# sourceMappingURL=createWorker.js.map