vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
167 lines (164 loc) • 14.9 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import { sendMessage } from '../sendMessage.js';
import { serializeError } from '../../error/serializeError.js';
import { serializeErrorInfo } from '../../error/serializeErrorInfo.js';
import { MessagePortWritable } from '../../stream/MessagePortWritable.js';
function createHandlers(fromWorker, toWorker) {
const messagePortWritable = fromWorker ? new MessagePortWritable(fromWorker, toWorker) : null;
return {
onRscRender: (id) => {
if (toWorker) {
toWorker.postMessage({
type: "RSC_RENDER_START",
id
});
} else {
sendMessage({
type: "RSC_RENDER_START",
id
});
}
},
onError: (id, error, errorInfo) => {
if (toWorker) {
toWorker.postMessage({
type: "ERROR",
id,
errorInfo: serializeErrorInfo(errorInfo),
error: serializeError(error)
});
} else {
sendMessage({
type: "ERROR",
id,
errorInfo: serializeErrorInfo(errorInfo),
error: serializeError(error)
});
}
},
onShellError: (id, error) => {
if (toWorker) {
toWorker.postMessage({
type: "SHELL_ERROR",
id,
error: serializeError(error)
});
} else {
sendMessage({
type: "SHELL_ERROR",
id,
error: serializeError(error)
});
}
},
onData: (id, data) => {
if (messagePortWritable) ; else {
sendMessage({
type: "RSC_CHUNK",
id,
chunk: data
});
}
},
onEnd: (id) => {
if (fromWorker) {
try {
fromWorker.postMessage(null);
} catch (error) {
}
}
if (toWorker) {
toWorker.postMessage({
type: "RSC_END",
id
});
} else {
sendMessage({
type: "RSC_END",
id
});
}
},
onMetrics: (id, metrics) => {
if (metrics.type === "html" || metrics.type === "worker-startup" || metrics.type === "module-resolution") {
return;
}
if (toWorker) {
toWorker.postMessage({
type: "RSC_METRICS",
id,
metrics
});
} else {
sendMessage({
type: "RSC_METRICS",
id,
metrics
});
}
},
// Expose the writable stream for direct piping in two-port mode
...messagePortWritable && { getWritable: () => messagePortWritable },
onHmrAccept: (id, routes) => {
sendMessage({
type: "HMR_ACCEPT",
id,
routes
});
},
onHmrUpdate: (id, routes) => {
sendMessage({
type: "HMR_UPDATE",
id,
routes
});
},
onShutdown: (id) => {
sendMessage({
type: "HMR_CLEANUP",
id
});
},
onCssFile: (id, code) => {
sendMessage({
type: "CSS_FILE",
id,
content: code
});
},
onCleanup: (id) => {
sendMessage({
type: "HMR_CLEANUP",
id
});
},
onShellReady: (id) => {
sendMessage({
type: "SHELL_READY",
id
});
},
onAllReady: (id) => {
sendMessage({
type: "RSC_END",
id
});
},
onServerActionResponse: (id, result, error) => {
sendMessage({
type: "SERVER_ACTION_RESPONSE",
id,
result,
// Only include error if it's truthy - prevents serializeError(undefined)
...error ? { error } : {}
});
}
};
}
createHandlers();
export { createHandlers };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BsdWdpbi93b3JrZXIvcnNjL2hhbmRsZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VydmVyU3RyZWFtSGFuZGxlcnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IHNlbmRNZXNzYWdlIH0gZnJvbSBcIi4uL3NlbmRNZXNzYWdlLmpzXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVFcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvci9zZXJpYWxpemVFcnJvci5qc1wiO1xuaW1wb3J0IHsgc2VyaWFsaXplRXJyb3JJbmZvIH0gZnJvbSBcIi4uLy4uL2Vycm9yL3NlcmlhbGl6ZUVycm9ySW5mby5qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVBvcnRXcml0YWJsZSB9IGZyb20gXCIuLi8uLi9zdHJlYW0vTWVzc2FnZVBvcnRXcml0YWJsZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlUG9ydCB9IGZyb20gXCJub2RlOndvcmtlcl90aHJlYWRzXCI7XG5cbi8qKlxuICogQ3JlYXRlcyBoYW5kbGVycyBmb3IgdHdvLXBvcnQgY29tbXVuaWNhdGlvbjogZnJvbVdvcmtlciBmb3Igc3RyZWFtaW5nIGRhdGEgb3V0LCB0b1dvcmtlciBmb3IgY29udHJvbCBtZXNzYWdlcyBpblxuICogRm9sbG93aW5nIHplcm8tY29weSBzdHJlYW1pbmcgcGF0dGVybjogZnJvbVdvcmtlciAod29ya2VyIOKGkiBtYWluKSwgdG9Xb3JrZXIgKG1haW4g4oaSIHdvcmtlcilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhhbmRsZXJzKGZyb21Xb3JrZXI/OiBNZXNzYWdlUG9ydCwgdG9Xb3JrZXI/OiBNZXNzYWdlUG9ydCk6IFNlcnZlclN0cmVhbUhhbmRsZXJzIHtcbiAgLy8gQ3JlYXRlIHdyaXRhYmxlIHN0cmVhbSBmb3IgZnJvbVdvcmtlciBpZiBhdmFpbGFibGVcbiAgY29uc3QgbWVzc2FnZVBvcnRXcml0YWJsZSA9IGZyb21Xb3JrZXIgPyBuZXcgTWVzc2FnZVBvcnRXcml0YWJsZShmcm9tV29ya2VyLCB0b1dvcmtlcikgOiBudWxsO1xuICByZXR1cm4ge1xuICAgIG9uUnNjUmVuZGVyOiAoaWQpID0+IHtcbiAgICAgIGlmICh0b1dvcmtlcikge1xuICAgICAgICB0b1dvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgdHlwZTogXCJSU0NfUkVOREVSX1NUQVJUXCIsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbmRNZXNzYWdlKHtcbiAgICAgICAgICB0eXBlOiBcIlJTQ19SRU5ERVJfU1RBUlRcIixcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25FcnJvcjogKGlkLCBlcnJvciwgZXJyb3JJbmZvKSA9PiB7XG4gICAgICBpZiAodG9Xb3JrZXIpIHtcbiAgICAgICAgdG9Xb3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHR5cGU6IFwiRVJST1JcIixcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgZXJyb3JJbmZvOiBzZXJpYWxpemVFcnJvckluZm8oZXJyb3JJbmZvKSxcbiAgICAgICAgICBlcnJvcjogc2VyaWFsaXplRXJyb3IoZXJyb3IpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbmRNZXNzYWdlKHtcbiAgICAgICAgICB0eXBlOiBcIkVSUk9SXCIsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIGVycm9ySW5mbzogc2VyaWFsaXplRXJyb3JJbmZvKGVycm9ySW5mbyksXG4gICAgICAgICAgZXJyb3I6IHNlcmlhbGl6ZUVycm9yKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblNoZWxsRXJyb3I6IChpZCwgZXJyb3IpID0+IHtcbiAgICAgIGlmICh0b1dvcmtlcikge1xuICAgICAgICB0b1dvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgdHlwZTogXCJTSEVMTF9FUlJPUlwiLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBlcnJvcjogc2VyaWFsaXplRXJyb3IoZXJyb3IpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbmRNZXNzYWdlKHtcbiAgICAgICAgICB0eXBlOiBcIlNIRUxMX0VSUk9SXCIsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIGVycm9yOiBzZXJpYWxpemVFcnJvcihlcnJvciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25EYXRhOiAoaWQsIGRhdGEpID0+IHtcbiAgICAgIC8vIEluIHR3by1wb3J0IG1vZGUsIGRhdGEgZ29lcyB0aHJvdWdoIHRoZSB3cml0YWJsZSBzdHJlYW1cbiAgICAgIC8vIEluIHNpbmdsZS1wb3J0IG1vZGUsIHVzZSB0aGUgb2xkIG1lc3NhZ2UgYXBwcm9hY2hcbiAgICAgIGlmIChtZXNzYWdlUG9ydFdyaXRhYmxlKSB7XG4gICAgICAgIC8vIERhdGEgaXMgaGFuZGxlZCBieSBwaXBpbmcgdG8gbWVzc2FnZVBvcnRXcml0YWJsZVxuICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnV0IHRoZSBhY3R1YWwgZGF0YSBmbG93IGlzIHRocm91Z2ggdGhlIHN0cmVhbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VuZE1lc3NhZ2Uoe1xuICAgICAgICAgIHR5cGU6IFwiUlNDX0NIVU5LXCIsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIGNodW5rOiBkYXRhLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uRW5kOiAoaWQpID0+IHtcbiAgICAgIC8vIE1pcnJvciBIVE1MIHdvcmtlciBwYXR0ZXJuOiBzZW5kIG51bGwgdGhyb3VnaCBmcm9tV29ya2VyLCB0aGVuIEVORCB0aHJvdWdoIHRvV29ya2VyXG4gICAgICBpZiAoZnJvbVdvcmtlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZyb21Xb3JrZXIucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gUG9ydCBtYXkgYmUgY2xvc2VkLCBpZ25vcmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodG9Xb3JrZXIpIHtcbiAgICAgICAgdG9Xb3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHR5cGU6IFwiUlNDX0VORFwiLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZW5kTWVzc2FnZSh7XG4gICAgICAgICAgdHlwZTogXCJSU0NfRU5EXCIsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uTWV0cmljczogKGlkLCBtZXRyaWNzKSA9PiB7XG4gICAgICBpZiAobWV0cmljcy50eXBlID09PSBcImh0bWxcIiB8fCBtZXRyaWNzLnR5cGUgPT09IFwid29ya2VyLXN0YXJ0dXBcIiB8fCBtZXRyaWNzLnR5cGUgPT09IFwibW9kdWxlLXJlc29sdXRpb25cIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodG9Xb3JrZXIpIHtcbiAgICAgICAgdG9Xb3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHR5cGU6IFwiUlNDX01FVFJJQ1NcIixcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgbWV0cmljczogbWV0cmljcyBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VuZE1lc3NhZ2Uoe1xuICAgICAgICAgIHR5cGU6IFwiUlNDX01FVFJJQ1NcIixcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgbWV0cmljczogbWV0cmljcyBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gRXhwb3NlIHRoZSB3cml0YWJsZSBzdHJlYW0gZm9yIGRpcmVjdCBwaXBpbmcgaW4gdHdvLXBvcnQgbW9kZVxuICAgIC4uLihtZXNzYWdlUG9ydFdyaXRhYmxlICYmIHsgZ2V0V3JpdGFibGU6ICgpID0+IG1lc3NhZ2VQb3J0V3JpdGFibGUgfSksXG4gICAgb25IbXJBY2NlcHQ6IChpZCwgcm91dGVzKSA9PiB7XG4gICAgICBzZW5kTWVzc2FnZSh7XG4gICAgICAgIHR5cGU6IFwiSE1SX0FDQ0VQVFwiLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIHJvdXRlczogcm91dGVzLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbkhtclVwZGF0ZTogKGlkLCByb3V0ZXMpID0+IHtcbiAgICAgIHNlbmRNZXNzYWdlKHtcbiAgICAgICAgdHlwZTogXCJITVJfVVBEQVRFXCIsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgcm91dGVzOiByb3V0ZXMsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uU2h1dGRvd246IChpZCkgPT4ge1xuICAgICAgc2VuZE1lc3NhZ2Uoe1xuICAgICAgICB0eXBlOiBcIkhNUl9DTEVBTlVQXCIsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb25Dc3NGaWxlOiAoaWQsIGNvZGUpID0+IHtcbiAgICAgIHNlbmRNZXNzYWdlKHtcbiAgICAgICAgdHlwZTogXCJDU1NfRklMRVwiLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNvbnRlbnQ6IGNvZGUsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uQ2xlYW51cDogKGlkKSA9PiB7XG4gICAgICBzZW5kTWVzc2FnZSh7XG4gICAgICAgIHR5cGU6IFwiSE1SX0NMRUFOVVBcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvblNoZWxsUmVhZHk6IChpZCkgPT4ge1xuICAgICAgc2VuZE1lc3NhZ2Uoe1xuICAgICAgICB0eXBlOiBcIlNIRUxMX1JFQURZXCIsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb25BbGxSZWFkeTogKGlkKSA9PiB7XG4gICAgICBzZW5kTWVzc2FnZSh7XG4gICAgICAgIHR5cGU6IFwiUlNDX0VORFwiLFxuICAgICAgICBpZDogaWQsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uU2VydmVyQWN0aW9uUmVzcG9uc2U6IChpZCwgcmVzdWx0LCBlcnJvcikgPT4ge1xuICAgICAgc2VuZE1lc3NhZ2Uoe1xuICAgICAgICB0eXBlOiBcIlNFUlZFUl9BQ1RJT05fUkVTUE9OU0VcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgLy8gT25seSBpbmNsdWRlIGVycm9yIGlmIGl0J3MgdHJ1dGh5IC0gcHJldmVudHMgc2VyaWFsaXplRXJyb3IodW5kZWZpbmVkKVxuICAgICAgICAuLi4oZXJyb3IgPyB7IGVycm9yIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyBEZWZhdWx0IGhhbmRsZXJzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5leHBvcnQgY29uc3QgaGFuZGxlcnMgPSBjcmVhdGVIYW5kbGVycygpOyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBV08sU0FBUyxjQUFBLENBQWUsWUFBMEIsUUFBOEMsRUFBQTtBQUVyRyxFQUFBLE1BQU0sc0JBQXNCLFVBQWEsR0FBQSxJQUFJLG1CQUFvQixDQUFBLFVBQUEsRUFBWSxRQUFRLENBQUksR0FBQSxJQUFBO0FBQ3pGLEVBQU8sT0FBQTtBQUFBLElBQ0wsV0FBQSxFQUFhLENBQUMsRUFBTyxLQUFBO0FBQ25CLE1BQUEsSUFBSSxRQUFVLEVBQUE7QUFDWixRQUFBLFFBQUEsQ0FBUyxXQUFZLENBQUE7QUFBQSxVQUNuQixJQUFNLEVBQUEsa0JBQUE7QUFBQSxVQUNOO0FBQUEsU0FDRCxDQUFBO0FBQUEsT0FDSSxNQUFBO0FBQ0wsUUFBWSxXQUFBLENBQUE7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