UNPKG

vite-plugin-react-server

Version:
80 lines (77 loc) 10.7 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { createSerializableHandlerOptions } from '../helpers/createSerializableHandlerOptions.js'; import { assertNonReactServer } from '../config/getCondition.js'; import { validateRscStreamOptions } from './createRscStream.utils.js'; import { toError } from '../error/toError.js'; import { createStreamMetrics } from '../metrics/createStreamMetrics.js'; import { createMessageChannels } from './createMessageChannels.js'; import { MessagePortReadable } from './MessagePortReadable.js'; assertNonReactServer(); const createRscStream = function _createRscStreamClient(options) { validateRscStreamOptions(options, "createRscStream.client"); if (!options.rscWorker) { throw new Error("RSC worker is required for client-side RSC streaming"); } const { dataPort1, dataPort2, controlPort1, controlPort2 } = createMessageChannels(); const rscStream = new MessagePortReadable(dataPort1, controlPort1); controlPort1.on("message", (message) => { switch (message.type) { case "ERROR": const error = toError(message.error, message.errorInfo); if (options.onEvent) { options.onEvent({ type: "route.error", data: { error, route: options.route, panicThreshold: options.panicThreshold } }); } rscStream.destroy(); break; } }); const serializedOptions = createSerializableHandlerOptions({ ...options, dataPort: dataPort2, controlPort: controlPort2 }); options.rscWorker.postMessage({ type: "INIT", id: options.route, dataPort: dataPort2, controlPort: controlPort2, options: serializedOptions }, [dataPort2, controlPort2]); const metrics = createStreamMetrics({ route: options.route, startTime: Date.now() }); const clientResult = { type: "client", id: options.id || `${options.route}-${Date.now()}`, rscStream, metrics, pipe: (destination) => { return rscStream.pipe(destination); }, abort: (reason) => { try { controlPort1.postMessage({ type: "ABORT", reason }); } catch (error) { } try { rscStream.destroy(); } catch (error) { } } }; return clientResult; }; export { createRscStream }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUnNjU3RyZWFtLmNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL3N0cmVhbS9jcmVhdGVSc2NTdHJlYW0uY2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVNlcmlhbGl6YWJsZUhhbmRsZXJPcHRpb25zIH0gZnJvbSBcIi4uL2hlbHBlcnMvY3JlYXRlU2VyaWFsaXphYmxlSGFuZGxlck9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUnNjU3RyZWFtRm4sIENsaWVudFJzY1N0cmVhbVJlc3VsdCB9IGZyb20gXCIuL2NyZWF0ZVJzY1N0cmVhbS50eXBlcy5qc1wiO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uUmVhY3RTZXJ2ZXIgfSBmcm9tIFwiLi4vY29uZmlnL2dldENvbmRpdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVSc2NTdHJlYW1PcHRpb25zIH0gZnJvbSBcIi4vY3JlYXRlUnNjU3RyZWFtLnV0aWxzLmpzXCI7XG5pbXBvcnQgeyB0b0Vycm9yIH0gZnJvbSBcIi4uL2Vycm9yL3RvRXJyb3IuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVN0cmVhbU1ldHJpY3MgfSBmcm9tIFwiLi4vbWV0cmljcy9jcmVhdGVTdHJlYW1NZXRyaWNzLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVNZXNzYWdlQ2hhbm5lbHMgfSBmcm9tIFwiLi9jcmVhdGVNZXNzYWdlQ2hhbm5lbHMuanNcIjtcbmltcG9ydCB7IE1lc3NhZ2VQb3J0UmVhZGFibGUgfSBmcm9tIFwiLi9NZXNzYWdlUG9ydFJlYWRhYmxlLmpzXCI7XG5cbmFzc2VydE5vblJlYWN0U2VydmVyKCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBSU0Mgc3RyZWFtIGJ5IGNvbW11bmljYXRpbmcgd2l0aCB0aGUgUlNDIHdvcmtlci5cbiAqIFxuICogKipQdXJwb3NlKio6IENyZWF0ZXMgUlNDIHN0cmVhbXMgYnkgb2ZmbG9hZGluZyBSZWFjdCByZW5kZXJpbmcgdG8gYSBzZXBhcmF0ZSB3b3JrZXIgdGhyZWFkLlxuICogKipXaGVuIHRvIHVzZSoqOiBcbiAqIC0gWW91IG5lZWQgdG8gY3JlYXRlIFJTQyBzdHJlYW1zIGluIGEgY2xpZW50IGVudmlyb25tZW50XG4gKiAtIFlvdSB3YW50IHRvIGF2b2lkIGJsb2NraW5nIHRoZSBtYWluIHRocmVhZCBkdXJpbmcgUmVhY3QgcmVuZGVyaW5nXG4gKiAtIFlvdSdyZSBidWlsZGluZyBzdGF0aWMgc2l0ZXMgYW5kIG5lZWQgUlNDIGNvbnRlbnQgZm9yIG11bHRpcGxlIHJvdXRlc1xuICogLSBZb3UgbmVlZCB0byBjcmVhdGUgLnJzYyBmaWxlcyBmb3IgY2xpZW50LXNpZGUgbmF2aWdhdGlvblxuICogXG4gKiAqKkZsb3cqKjogUm91dGUgKyBDb21wb25lbnRzIOKGkiBSU0MgV29ya2VyIOKGkiBSU0MgU3RyZWFtXG4gKiBcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgUlNDIHN0cmVhbSBjcmVhdGlvblxuICogQHJldHVybnMgUlNDIHN0cmVhbSB3aXRoIHBpcGUvYWJvcnQgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVSc2NTdHJlYW06IENyZWF0ZVJzY1N0cmVhbUZuPFwiY2xpZW50XCI+ID0gZnVuY3Rpb24gX2NyZWF0ZVJzY1N0cmVhbUNsaWVudChvcHRpb25zKSB7XG4gIC8vIFZhbGlkYXRlIG9wdGlvbnNcbiAgdmFsaWRhdGVSc2NTdHJlYW1PcHRpb25zKG9wdGlvbnMsIFwiY3JlYXRlUnNjU3RyZWFtLmNsaWVudFwiKTtcblxuICBpZiAoIW9wdGlvbnMucnNjV29ya2VyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUlNDIHdvcmtlciBpcyByZXF1aXJlZCBmb3IgY2xpZW50LXNpZGUgUlNDIHN0cmVhbWluZ1wiKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSB0d28gc2VwYXJhdGUgTWVzc2FnZVBvcnRzIGZvciBjbGVhbiBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zXG4gIGNvbnN0IHsgZGF0YVBvcnQxLCBkYXRhUG9ydDIsIGNvbnRyb2xQb3J0MSwgY29udHJvbFBvcnQyIH0gPSBjcmVhdGVNZXNzYWdlQ2hhbm5lbHMoKTtcblxuICAvLyBDcmVhdGUgdGhlIFJTQyBvdXRwdXQgc3RyZWFtXG4gIGNvbnN0IHJzY1N0cmVhbSA9IG5ldyBNZXNzYWdlUG9ydFJlYWRhYmxlKGRhdGFQb3J0MSwgY29udHJvbFBvcnQxKTtcblxuICAvLyBDb250cm9sIHBvcnQgLSBoYW5kbGVzIGNvbnRyb2wgbWVzc2FnZXNcbiAgY29udHJvbFBvcnQxLm9uKCdtZXNzYWdlJywgKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICBjYXNlICdFUlJPUic6XG4gICAgICAgIGNvbnN0IGVycm9yID0gdG9FcnJvcihtZXNzYWdlLmVycm9yLCBtZXNzYWdlLmVycm9ySW5mbyk7XG4gICAgICAgIFxuICAgICAgICAvLyBFbWl0IHJvdXRlLmVycm9yIGV2ZW50IGZvciBwYW5pYyBoYW5kbGluZ1xuICAgICAgICBpZiAob3B0aW9ucy5vbkV2ZW50KSB7XG4gICAgICAgICAgb3B0aW9ucy5vbkV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6IFwicm91dGUuZXJyb3JcIixcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICByb3V0ZTogb3B0aW9ucy5yb3V0ZSxcbiAgICAgICAgICAgICAgcGFuaWNUaHJlc2hvbGQ6IG9wdGlvbnMucGFuaWNUaHJlc2hvbGRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gRW5kIHRoZSBzdHJlYW0gbm9ybWFsbHlcbiAgICAgICAgcnNjU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdSU0NfRU5EJzpcbiAgICAgICAgLy8gV29ya2VyIGhhcyBmaW5pc2hlZCBzZW5kaW5nIGRhdGEgLSBkb24ndCBjbG9zZSBwb3J0cyB5ZXRcbiAgICAgICAgLy8gTGV0IHRoZSBNZXNzYWdlUG9ydFJlYWRhYmxlIGhhbmRsZSB0aGUgbmF0dXJhbCBlbmQgb2Ygc3RyZWFtXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTUVUUklDUyc6XG4gICAgICAgIC8vIE1ldHJpY3MgYXJlIGhhbmRsZWQgYnkgdGhlIHdvcmtlciBpbnRlcm5hbGx5XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQ3JlYXRlIHNlcmlhbGl6YWJsZSBoYW5kbGVyIG9wdGlvbnMgZm9yIHRoZSB3b3JrZXJcbiAgY29uc3Qgc2VyaWFsaXplZE9wdGlvbnMgPSBjcmVhdGVTZXJpYWxpemFibGVIYW5kbGVyT3B0aW9ucyh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBkYXRhUG9ydDogZGF0YVBvcnQyLFxuICAgIGNvbnRyb2xQb3J0OiBjb250cm9sUG9ydDIsXG4gIH0pO1xuXG4gIC8vIFNlbmQgaW5pdGlhbGl6YXRpb24gdG8gd29ya2VyXG4gIG9wdGlvbnMucnNjV29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICB0eXBlOiBcIklOSVRcIixcbiAgICBpZDogb3B0aW9ucy5yb3V0ZSxcbiAgICBkYXRhUG9ydDogZGF0YVBvcnQyLFxuICAgIGNvbnRyb2xQb3J0OiBjb250cm9sUG9ydDIsXG4gICAgb3B0aW9uczogc2VyaWFsaXplZE9wdGlvbnMsXG4gIH0sIFtkYXRhUG9ydDIsIGNvbnRyb2xQb3J0Ml0gYXMgYW55KTtcblxuICAvLyBDcmVhdGUgc3RyZWFtIG1ldHJpY3NcbiAgY29uc3QgbWV0cmljcyA9IGNyZWF0ZVN0cmVhbU1ldHJpY3Moe1xuICAgIHJvdXRlOiBvcHRpb25zLnJvdXRlLFxuICAgIHN0YXJ0VGltZTogRGF0ZS5ub3coKSxcbiAgfSk7XG5cbiAgLy8gUmV0dXJuIGNsaWVudCByZXN1bHQgd2l0aCBjb25zaXN0ZW50IGludGVyZmFjZVxuICBjb25zdCBjbGllbnRSZXN1bHQ6IENsaWVudFJzY1N0cmVhbVJlc3VsdCA9IHtcbiAgICB0eXBlOiBcImNsaWVudFwiIGFzIGNvbnN0LFxuICAgIGlkOiBvcHRpb25zLmlkIHx8IGAke29wdGlvbnMucm91dGV9LSR7RGF0ZS5ub3coKX1gLFxuICAgIHJzY1N0cmVhbSxcbiAgICBtZXRyaWNzLFxuICAgIHBpcGU6IDxXcml0YWJsZSBleHRlbmRzIE5vZGVKUy5Xcml0YWJsZVN0cmVhbT4oZGVzdGluYXRpb246IFdyaXRhYmxlKSA9PiB7XG4gICAgICByZXR1cm4gcnNjU3RyZWFtLnBpcGUoZGVzdGluYXRpb24pO1xuICAgIH0sXG4gICAgYWJvcnQ6IChyZWFzb24/OiB1bmtub3duKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb250cm9sUG9ydDEucG9zdE1lc3NhZ2UoeyB0eXBlOiBcIkFCT1JUXCIsIHJlYXNvbiB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIFBvcnQgbWF5IGFscmVhZHkgYmUgY2xvc2VkXG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEltbWVkaWF0ZSBjbGVhbnVwIGZvciBhYm9ydCB0byBwcmV2ZW50IGhhbmdpbmdcbiAgICAgIHRyeSB7XG4gICAgICAgIHJzY1N0cmVhbS5kZXN0cm95KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBTdHJlYW0gbWF5IGFscmVhZHkgYmUgZGVzdHJveWVkLCBpZ25vcmVcbiAgICAgIH1cbiAgICAgIC8vIERvbid0IGNsb3NlIHBvcnRzIC0gbGV0IFJlYWN0IGhhbmRsZSBjbGVhbnVwIHRvIHByZXZlbnQgXCJDb25uZWN0aW9uIGNsb3NlZFwiIGVycm9yc1xuICAgICAgLy8gUG9ydHMgd2lsbCBiZSBjbGVhbmVkIHVwIHdoZW4gd29ya2VyIHRlcm1pbmF0ZXNcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBjbGllbnRSZXN1bHQ7XG59OyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBU0Esb0JBQXFCLEVBQUE7QUFpQlIsTUFBQSxlQUFBLEdBQStDLFNBQVMsc0JBQUEsQ0FBdUIsT0FBUyxFQUFBO0FBRW5HLEVBQUEsd0JBQUEsQ0FBeUIsU0FBUyx3QkFBd0IsQ0FBQTtBQUUxRCxFQUFJLElBQUEsQ0FBQyxRQUFRLFNBQVcsRUFBQTtBQUN0QixJQUFNLE1BQUEsSUFBSSxNQUFNLHNEQUFzRCxDQUFBO0FBQUE7QUFJeEUsRUFBQSxNQUFNLEVBQUUsU0FBVyxFQUFBLFNBQUEsRUFBVyxZQUFjLEVBQUEsWUFBQSxLQUFpQixxQkFBc0IsRUFBQTtBQUduRixFQUFBLE1BQU0sU0FBWSxHQUFBLElBQUksbUJBQW9CLENBQUEsU0FBQSxFQUFXLFlBQVksQ0FBQTtBQUdqRSxFQUFhLFlBQUEsQ0FBQSxFQUFBLENBQUcsU0FBVyxFQUFBLENBQUMsT0FBaUIsS0FBQTtBQUMzQyxJQUFBLFFBQVEsUUFBUSxJQUFNO0FBQUEsTUFDcEIsS0FBSyxPQUFBO0FBQ0gsUUFBQSxNQUFNLEtBQVEsR0FBQSxPQUFBLENBQVEsT0FBUSxDQUFBLEtBQUEsRUFBTyxRQUFRLFNBQVMsQ0FBQTtBQUd0RCxRQUFBLElBQUksUUFBUSxPQUFTLEVBQUE7QUFDbkIsVUFBQSxPQUFBLENBQVEsT0FBUSxDQUFBO0FBQUEsWUFDZCxJQUFNLEVBQUEsYUFBQTtBQUFBLFlBQ04sSUFBTSxFQUFBO0FBQUEsY0FDSixLQUFBO0FBQUEsY0FDQSxPQUFPLE9BQVEsQ0FBQSxLQUFBO0FBQUEsY0FDZixnQkFBZ0IsT0FBUSxDQUFBO0FBQUE7QUFDMUIsV0FDRCxDQUFBO0FBQUE7QUFJSCxRQUFBLFNBQUEsQ0FBVSxPQUFRLEVBQUE7QUFDbEIsUUFBQTtBQU9BO0FBQ0osR0FDRCxDQUFBO0FBR0QsRUFBQSxNQUFNLG9CQUFvQixnQ0FBaUMsQ0FBQTtBQUFBLElBQ3pELEdBQUcsT0FBQTtBQUFBLElBQ0gsUUFBVSxFQUFBLFNBQUE7QUFBQSxJQUNWLFdBQWEsRUFBQTtBQUFBLEdBQ2QsQ0FBQTtBQUdELEVBQUEsT0FBQSxDQUFRLFVBQVUsV0FBWSxDQUFBO0FBQUEsSUFDNUIsSUFBTSxFQUFBLE1BQUE7QUFBQSxJQUNOLElBQUksT0FBUSxDQUFBLEtBQUE7QUFBQSxJQUNaLFFBQVUsRUFBQSxTQUFBO0FBQUEsSUFDVixXQUFhLEVBQUEsWUFBQTtBQUFBLElBQ2IsT0FBUyxFQUFBO0FBQUEsR0FDUixFQUFBLENBQUMsU0FBVyxFQUFBLFlBQVksQ0FBUSxDQUFBO0FBR25DLEVBQUEsTUFBTSxVQUFVLG1CQUFvQixDQUFBO0FBQUEsSUFDbEMsT0FBTyxPQUFRLENBQUEsS0FBQTtBQUFBLElBQ2YsU0FBQSxFQUFXLEtBQUssR0FBSTtBQUFBLEdBQ3JCLENBQUE7QUFHRCxFQUFBLE1BQU0sWUFBc0MsR0FBQTtBQUFBLElBQzFDLElBQU0sRUFBQSxRQUFBO0FBQUEsSUFDTixFQUFBLEVBQUksUUFBUSxFQUFNLElBQUEsQ0FBQSxFQUFHLFFBQVEsS0FBSyxDQUFBLENBQUEsRUFBSSxJQUFLLENBQUEsR0FBQSxFQUFLLENBQUEsQ0FBQTtBQUFBLElBQ2hELFNBQUE7QUFBQSxJQUNBLE9BQUE7QUFBQSxJQUNBLElBQUEsRUFBTSxDQUF5QyxXQUEwQixLQUFBO0FBQ3ZFLE1BQU8sT0FBQSxTQUFBLENBQVUsS0FBSyxXQUFXLENBQUE7QUFBQSxLQUNuQztBQUFBLElBQ0EsS0FBQSxFQUFPLENBQUMsTUFBcUIsS0FBQTtBQUMzQixNQUFJLElBQUE7QUFDRixRQUFBLFlBQUEsQ0FBYSxXQUFZLENBQUEsRUFBRSxJQUFNLEVBQUEsT0FBQSxFQUFTLFFBQVEsQ0FBQTtBQUFBLGVBQzNDLEtBQU8sRUFBQTtBQUFBO0FBS2hCLE1BQUksSUFBQTtBQUNGLFFBQUEsU0FBQSxDQUFVLE9BQVEsRUFBQTtBQUFBLGVBQ1gsS0FBTyxFQUFBO0FBQUE7QUFFaEI7QUFHRixHQUNGO0FBRUEsRUFBTyxPQUFBLFlBQUE7QUFDVDs7OzsifQ==