UNPKG

vite-plugin-react-server

Version:
121 lines (118 loc) 13.8 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { PassThrough } from 'node:stream'; import { toError } from '../error/toError.js'; import { createMessageChannels } from './createMessageChannels.js'; function createRscWorkerStream(options) { const { worker, route, url, projectRoot, verbose = false, logger, panicThreshold, serverPipeableStreamOptions, onError, rscTimeout, build, pagePath, propsPath, rootPath, htmlPath } = options; const { dataPort1, dataPort2, controlPort1, controlPort2 } = createMessageChannels(); const rscStream = new PassThrough({ objectMode: false, highWaterMark: 64 * 1024 // 64KB buffer }); dataPort1.onmessage = (event) => { const data = event.data; if (data === null) { if (verbose) { logger?.info(`[createRscWorkerStream] End of RSC stream via dataPort`); } rscStream.end(); } else { if (verbose) { logger?.info(`[createRscWorkerStream] Writing raw RSC data to stream: ${data.length} bytes`); } rscStream.write(data); } }; controlPort1.onmessage = (event) => { const message = event.data; if (verbose) { logger?.info(`[createRscWorkerStream] Received control message: ${message.type}`); } switch (message.type) { case "RSC_END": if (verbose) { logger?.info(`[createRscWorkerStream] RSC stream ended by control message`); } rscStream.end(); break; case "ERROR": if (verbose) { logger?.error(`[createRscWorkerStream] RSC stream error: ${message.error?.message}`, { error: message.error }); } const error = toError(message.error); rscStream.destroy(error); if (onError) { onError(error); } break; case "METRICS": if (verbose) { logger?.info(`[createRscWorkerStream] Received metrics:`, message.metrics); } break; case "RSC_RENDER_START": if (verbose) { logger?.info(`[createRscWorkerStream] RSC render started`); } break; default: if (verbose) { logger?.warn(`[createRscWorkerStream] Unknown control message type: ${message.type}`); } } }; worker.postMessage({ type: "INIT", id: route, dataPort: dataPort2, controlPort: controlPort2, options: { route, url, projectRoot, panicThreshold, rscTimeout, serverPipeableStreamOptions, pagePath, propsPath, rootPath, htmlPath, build: build ? { outDir: build.outDir, assetsDir: build.assetsDir, pages: build.pages, static: build.static, rscOutputPath: build.rscOutputPath, htmlOutputPath: build.htmlOutputPath } : void 0 } }, [dataPort2, controlPort2]); return { stream: rscStream, dataPort1, controlPort1 }; } export { createRscWorkerStream }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUnNjV29ya2VyU3RyZWFtLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vc3RyZWFtL2NyZWF0ZVJzY1dvcmtlclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdvcmtlciB9IGZyb20gXCJub2RlOndvcmtlcl90aHJlYWRzXCI7XG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgeyBQYXNzVGhyb3VnaCB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHR5cGUgeyBTZXJpYWxpemVhYmxlUmVuZGVyVG9QaXBlYWJsZVN0cmVhbU9wdGlvbnMgfSBmcm9tIFwiLi4vd29ya2VyL3JzYy90eXBlcy5qc1wiO1xuaW1wb3J0IHsgdG9FcnJvciB9IGZyb20gXCIuLi9lcnJvci90b0Vycm9yLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVNZXNzYWdlQ2hhbm5lbHMgfSBmcm9tIFwiLi9jcmVhdGVNZXNzYWdlQ2hhbm5lbHMuanNcIjtcblxuLyoqXG4gKiBSU0Mtc3BlY2lmaWMgb3B0aW9ucyBmb3Igd29ya2VyIHN0cmVhbVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJzY1dvcmtlclN0cmVhbU9wdGlvbnMge1xuICB3b3JrZXI6IFdvcmtlcjtcbiAgcm91dGU6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIHByb2plY3RSb290OiBzdHJpbmc7XG4gIG1vZHVsZUJhc2VQYXRoOiBzdHJpbmc7XG4gIG1vZHVsZUJhc2VVUkw6IHN0cmluZztcbiAgbW9kdWxlUm9vdFBhdGg6IHN0cmluZztcbiAgc2VydmVyUGlwZWFibGVTdHJlYW1PcHRpb25zOiBTZXJpYWxpemVhYmxlUmVuZGVyVG9QaXBlYWJsZVN0cmVhbU9wdGlvbnM7XG4gIHZlcmJvc2U/OiBib29sZWFuO1xuICBsb2dnZXI/OiBMb2dnZXI7XG4gIHBhbmljVGhyZXNob2xkPzogYW55O1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvciwgZXJyb3JJbmZvPzogYW55KSA9PiB2b2lkO1xuICBcbiAgLy8gUlNDLXNwZWNpZmljIG9wdGlvbnNcbiAgcnNjVGltZW91dD86IG51bWJlcjtcbiAgYnVpbGQ/OiBhbnk7XG4gIHBhZ2VQYXRoPzogc3RyaW5nO1xuICBwcm9wc1BhdGg/OiBzdHJpbmc7XG4gIHJvb3RQYXRoPzogc3RyaW5nO1xuICBodG1sUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIFJTQyB3b3JrZXIgc3RyZWFtIHVzaW5nIHRoZSB0d28tcG9ydCBhcmNoaXRlY3R1cmVcbiAqIFxuICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIFJTQyBzdHJlYW1zIGJ5IG9mZmxvYWRpbmcgUmVhY3QgcmVuZGVyaW5nIHRvIGEgc2VwYXJhdGUgd29ya2VyIHRocmVhZFxuICogdXNpbmcgdGhlIHR3by1wb3J0IGFyY2hpdGVjdHVyZSAoZGF0YSBwb3J0ICsgY29udHJvbCBwb3J0KSBmb3IgY2xlYW4gc2VwYXJhdGlvbiBvZiBjb25jZXJucy5cbiAqIFxuICogKipGbG93Kio6IFJvdXRlICsgQ29tcG9uZW50cyDihpIgUlNDIFdvcmtlciAodHdvLXBvcnQpIOKGkiBSU0MgU3RyZWFtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSc2NXb3JrZXJTdHJlYW0ob3B0aW9uczogUnNjV29ya2VyU3RyZWFtT3B0aW9ucyk6IHtcbiAgc3RyZWFtOiBQYXNzVGhyb3VnaDtcbiAgZGF0YVBvcnQxOiBhbnk7XG4gIGNvbnRyb2xQb3J0MTogYW55O1xufSB7XG4gIGNvbnN0IHtcbiAgICB3b3JrZXIsXG4gICAgcm91dGUsXG4gICAgdXJsLFxuICAgIHByb2plY3RSb290LFxuICAgIHZlcmJvc2UgPSBmYWxzZSxcbiAgICBsb2dnZXIsXG4gICAgcGFuaWNUaHJlc2hvbGQsXG4gICAgc2VydmVyUGlwZWFibGVTdHJlYW1PcHRpb25zLFxuICAgIG9uRXJyb3IsXG4gICAgcnNjVGltZW91dCxcbiAgICBidWlsZCxcbiAgICBwYWdlUGF0aCxcbiAgICBwcm9wc1BhdGgsXG4gICAgcm9vdFBhdGgsXG4gICAgaHRtbFBhdGhcbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gQ3JlYXRlIHR3byBzZXBhcmF0ZSBNZXNzYWdlUG9ydHMgZm9yIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnNcbiAgY29uc3QgeyBkYXRhUG9ydDEsIGRhdGFQb3J0MiwgY29udHJvbFBvcnQxLCBjb250cm9sUG9ydDIgfSA9IGNyZWF0ZU1lc3NhZ2VDaGFubmVscygpO1xuICBcbiAgLy8gTm90ZTogQ2xlYW51cCBpcyBoYW5kbGVkIGJ5IHRoZSByZXNwb25zZSBjbG9zZSBoYW5kbGVyIGluIGNvbmZpZ3VyZVJlYWN0U2VydmVyLnNlcnZlci50c1xuICAvLyBUaGlzIHByZXZlbnRzIG11bHRpcGxlIGNsZWFudXAgbWVjaGFuaXNtcyBmcm9tIGNvbmZsaWN0aW5nXG4gIFxuICAvLyBDcmVhdGUgdGhlIFJTQyBvdXRwdXQgc3RyZWFtXG4gIGNvbnN0IHJzY1N0cmVhbSA9IG5ldyBQYXNzVGhyb3VnaCh7XG4gICAgb2JqZWN0TW9kZTogZmFsc2UsXG4gICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0IC8vIDY0S0IgYnVmZmVyXG4gIH0pO1xuICBcbiAgLy8gRGF0YSBwb3J0IC0gT05MWSBmb3IgcmF3IFJTQyBzdHJlYW0gZGF0YVxuICAoZGF0YVBvcnQxIGFzIGFueSkub25tZXNzYWdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcbiAgICBcbiAgICBpZiAoZGF0YSA9PT0gbnVsbCkge1xuICAgICAgLy8gRW5kIG9mIHN0cmVhbVxuICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgbG9nZ2VyPy5pbmZvKGBbY3JlYXRlUnNjV29ya2VyU3RyZWFtXSBFbmQgb2YgUlNDIHN0cmVhbSB2aWEgZGF0YVBvcnRgKTtcbiAgICAgIH1cbiAgICAgIHJzY1N0cmVhbS5lbmQoKTtcbiAgICAgIFxuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgY2xvc2UgcG9ydHMgaGVyZSAtIGxldCB0aGUgc3RyZWFtIGNvbnN1bWVyIG1hbmFnZSBwb3J0IGxpZmVjeWNsZVxuICAgICAgLy8gVGhpcyBlbnN1cmVzIFJlYWN0RE9NQ2xpZW50LmNyZWF0ZUZyb21Ob2RlU3RyZWFtKCkgY2FuIGZ1bGx5IGNvbnN1bWUgdGhlIHN0cmVhbVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSYXcgUlNDIGRhdGEgLSBkaXJlY3QgcGlwaW5nXG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oYFtjcmVhdGVSc2NXb3JrZXJTdHJlYW1dIFdyaXRpbmcgcmF3IFJTQyBkYXRhIHRvIHN0cmVhbTogJHtkYXRhLmxlbmd0aH0gYnl0ZXNgKTtcbiAgICAgIH1cbiAgICAgIHJzY1N0cmVhbS53cml0ZShkYXRhKTtcbiAgICB9XG4gIH07XG4gIFxuICAvLyBDb250cm9sIHBvcnQgLSBPTkxZIGZvciBjb250cm9sIG1lc3NhZ2VzXG4gIChjb250cm9sUG9ydDEgYXMgYW55KS5vbm1lc3NhZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBldmVudC5kYXRhO1xuICAgIFxuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBsb2dnZXI/LmluZm8oYFtjcmVhdGVSc2NXb3JrZXJTdHJlYW1dIFJlY2VpdmVkIGNvbnRyb2wgbWVzc2FnZTogJHttZXNzYWdlLnR5cGV9YCk7XG4gICAgfVxuICAgIFxuICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICBjYXNlICdSU0NfRU5EJzpcbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXI/LmluZm8oYFtjcmVhdGVSc2NXb3JrZXJTdHJlYW1dIFJTQyBzdHJlYW0gZW5kZWQgYnkgY29udHJvbCBtZXNzYWdlYCk7XG4gICAgICAgIH1cbiAgICAgICAgcnNjU3RyZWFtLmVuZCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VSUk9SJzpcbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXI/LmVycm9yKGBbY3JlYXRlUnNjV29ya2VyU3RyZWFtXSBSU0Mgc3RyZWFtIGVycm9yOiAke21lc3NhZ2UuZXJyb3I/Lm1lc3NhZ2V9YCwge2Vycm9yOiBtZXNzYWdlLmVycm9yfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXJyb3IgPSB0b0Vycm9yKG1lc3NhZ2UuZXJyb3IpO1xuICAgICAgICByc2NTdHJlYW0uZGVzdHJveShlcnJvcik7XG4gICAgICAgIFxuICAgICAgICBpZiAob25FcnJvcikge1xuICAgICAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTUVUUklDUyc6XG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyPy5pbmZvKGBbY3JlYXRlUnNjV29ya2VyU3RyZWFtXSBSZWNlaXZlZCBtZXRyaWNzOmAsIG1lc3NhZ2UubWV0cmljcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdSU0NfUkVOREVSX1NUQVJUJzpcbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXI/LmluZm8oYFtjcmVhdGVSc2NXb3JrZXJTdHJlYW1dIFJTQyByZW5kZXIgc3RhcnRlZGApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXI/Lndhcm4oYFtjcmVhdGVSc2NXb3JrZXJTdHJlYW1dIFVua25vd24gY29udHJvbCBtZXNzYWdlIHR5cGU6ICR7bWVzc2FnZS50eXBlfWApO1xuICAgICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIFNlbmQgdGhlIElOSVQgbWVzc2FnZSB0byB0aGUgd29ya2VyIHdpdGggYm90aCBNZXNzYWdlUG9ydHNcbiAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICB0eXBlOiBcIklOSVRcIixcbiAgICBpZDogcm91dGUsXG4gICAgZGF0YVBvcnQ6IGRhdGFQb3J0MixcbiAgICBjb250cm9sUG9ydDogY29udHJvbFBvcnQyLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHJvdXRlLFxuICAgICAgdXJsLFxuICAgICAgcHJvamVjdFJvb3QsXG4gICAgICBwYW5pY1RocmVzaG9sZCxcbiAgICAgIHJzY1RpbWVvdXQsXG4gICAgICBzZXJ2ZXJQaXBlYWJsZVN0cmVhbU9wdGlvbnMsXG4gICAgICBwYWdlUGF0aCxcbiAgICAgIHByb3BzUGF0aCxcbiAgICAgIHJvb3RQYXRoLFxuICAgICAgaHRtbFBhdGgsXG4gICAgICBidWlsZDogYnVpbGQgPyB7XG4gICAgICAgIG91dERpcjogYnVpbGQub3V0RGlyLFxuICAgICAgICBhc3NldHNEaXI6IGJ1aWxkLmFzc2V0c0RpcixcbiAgICAgICAgcGFnZXM6IGJ1aWxkLnBhZ2VzLFxuICAgICAgICBzdGF0aWM6IGJ1aWxkLnN0YXRpYyxcbiAgICAgICAgcnNjT3V0cHV0UGF0aDogYnVpbGQucnNjT3V0cHV0UGF0aCxcbiAgICAgICAgaHRtbE91dHB1dFBhdGg6IGJ1aWxkLmh0bWxPdXRwdXRQYXRoLFxuICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICB9XG4gIH0sIFtkYXRhUG9ydDIsIGNvbnRyb2xQb3J0Ml0gYXMgYW55KTsgLy8gVHJhbnNmZXIgYm90aCBwb3J0cyB0byB0aGUgd29ya2VyXG5cbiAgLy8gTm90ZTogQ2xlYW51cCBpcyBoYW5kbGVkIGJ5IHRoZSByZXNwb25zZSBjbG9zZSBoYW5kbGVyIGluIGNvbmZpZ3VyZVJlYWN0U2VydmVyLnNlcnZlci50c1xuICAvLyBObyBuZWVkIGZvciBhIGNsZWFudXAgbWV0aG9kIG9uIHRoZSBzdHJlYW0gaXRzZWxmXG5cbiAgcmV0dXJuIHtcbiAgICBzdHJlYW06IHJzY1N0cmVhbSxcbiAgICBkYXRhUG9ydDEsXG4gICAgY29udHJvbFBvcnQxXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBw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