vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
67 lines (64 loc) • 7.7 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import { createFromFetch } from 'react-server-dom-esm/client.browser';
import { createCallServer } from './createCallServer.js';
import { env } from './env.js';
import { createPageURL } from './urls.js';
function createReactFetcher({
moduleBaseURL = env.BASE_URL,
publicOrigin = env.PUBLIC_ORIGIN,
url = window.location.pathname,
indexRSC = "index.rsc",
headers = {
Accept: "text/x-component"
}
} = {}) {
const parsedURL = createPageURL(
moduleBaseURL,
publicOrigin,
env.DEV
)(url, indexRSC);
return createFromFetch(
fetch(parsedURL.indexRSC, {
headers
}),
{
callServer: createCallServer(parsedURL.moduleBaseURL),
moduleBaseURL: parsedURL.moduleBaseURL
}
);
}
const RSC_HMR_EVENT = "vite-plugin-react-server:server-component-update";
function setupRscHmr(options = {}) {
const { onUpdate, verbose = env.DEV } = options;
if (typeof import.meta.hot === "undefined") {
return;
}
import.meta.hot.on(RSC_HMR_EVENT, async (data) => {
if (verbose) {
console.log("[RSC HMR] Server component updated:", data.file);
}
if (onUpdate === "reload") {
window.location.reload();
return;
}
if (onUpdate) {
try {
await onUpdate(data);
} catch (error) {
console.error("[RSC HMR] Error in onUpdate handler:", error);
window.location.reload();
}
} else {
window.location.reload();
}
});
if (verbose) {
console.log("[RSC HMR] Listening for server component updates");
}
}
export { RSC_HMR_EVENT, createReactFetcher, setupRscHmr };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUmVhY3RGZXRjaGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vdXRpbHMvY3JlYXRlUmVhY3RGZXRjaGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlRnJvbUZldGNoIH0gZnJvbSBcInJlYWN0LXNlcnZlci1kb20tZXNtL2NsaWVudC5icm93c2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVDYWxsU2VydmVyIH0gZnJvbSBcIi4vY3JlYXRlQ2FsbFNlcnZlci5qc1wiO1xuaW1wb3J0IHsgZW52IH0gZnJvbSBcIi4vZW52LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYWdlVVJMIH0gZnJvbSBcIi4vdXJscy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVhY3RGZXRjaGVyKHtcbiAgbW9kdWxlQmFzZVVSTCA9IGVudi5CQVNFX1VSTCxcbiAgcHVibGljT3JpZ2luID0gZW52LlBVQkxJQ19PUklHSU4sXG4gIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgaW5kZXhSU0MgPSBcImluZGV4LnJzY1wiLFxuICBoZWFkZXJzID0ge1xuICAgIEFjY2VwdDogXCJ0ZXh0L3gtY29tcG9uZW50XCIsXG4gIH0sXG59OiB7XG4gIHVybD86IHN0cmluZztcbiAgbW9kdWxlQmFzZVVSTD86IHN0cmluZztcbiAgcHVibGljT3JpZ2luPzogc3RyaW5nO1xuICBpbmRleFJTQz86IHN0cmluZztcbiAgaGVhZGVycz86IEhlYWRlcnNJbml0O1xufSA9IHt9KTogUHJvbWlzZUxpa2U8UmVhY3QuUmVhY3ROb2RlPiB7XG4gIGNvbnN0IHBhcnNlZFVSTCA9IGNyZWF0ZVBhZ2VVUkwoXG4gICAgbW9kdWxlQmFzZVVSTCxcbiAgICBwdWJsaWNPcmlnaW4sXG4gICAgZW52LkRFVlxuICApKHVybCwgaW5kZXhSU0MpO1xuICByZXR1cm4gY3JlYXRlRnJvbUZldGNoKFxuICAgIGZldGNoKHBhcnNlZFVSTC5pbmRleFJTQywge1xuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICB9KSxcbiAgICB7XG4gICAgICBjYWxsU2VydmVyOiBjcmVhdGVDYWxsU2VydmVyKHBhcnNlZFVSTC5tb2R1bGVCYXNlVVJMKSxcbiAgICAgIG1vZHVsZUJhc2VVUkw6IHBhcnNlZFVSTC5tb2R1bGVCYXNlVVJMLFxuICAgIH1cbiAgKTtcbn1cblxuLyoqIEhNUiBldmVudCBuYW1lIHVzZWQgYnkgdGhlIHBsdWdpbiAqL1xuZXhwb3J0IGNvbnN0IFJTQ19ITVJfRVZFTlQgPSAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1jb21wb25lbnQtdXBkYXRlJztcblxuLyoqIERhdGEgc2VudCB3aXRoIFJTQyBITVIgZXZlbnRzICovXG5leHBvcnQgaW50ZXJmYWNlIFJzY0htckRhdGEge1xuICBmaWxlOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXQgdXAgSE1SIGZvciBSZWFjdCBTZXJ2ZXIgQ29tcG9uZW50cyAobm9uLVJlYWN0IEFQSSkuXG4gKiBcbiAqIEZvciBSZWFjdCBjb21wb25lbnRzLCB1c2UgYHVzZVJzY0htcigpYCBob29rIGluc3RlYWQuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IHNldHVwUnNjSG1yIH0gZnJvbSAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyL3V0aWxzJztcbiAqIFxuICogLy8gRGVmYXVsdDogcmVmZXRjaCBjdXJyZW50IHBhZ2UncyBSU0Mgc3RyZWFtIChzbWFydCByZWZyZXNoKVxuICogc2V0dXBSc2NIbXIoKTtcbiAqIFxuICogLy8gQ3VzdG9tIGhhbmRsZXJcbiAqIHNldHVwUnNjSG1yKHtcbiAqICAgb25VcGRhdGU6IGFzeW5jIChkYXRhKSA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ0NoYW5nZWQ6JywgZGF0YS5maWxlKTtcbiAqICAgICBteUN1c3RvbVJlZmV0Y2goKTtcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUnNjSG1yKG9wdGlvbnM6IHtcbiAgLyoqXG4gICAqIEN1c3RvbSBoYW5kbGVyIGZvciBzZXJ2ZXIgY29tcG9uZW50IHVwZGF0ZXMuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgZGVmYXVsdHMgdG8gcmVmZXRjaGluZyB0aGUgUlNDIHN0cmVhbSBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cbiAgICogU2V0IHRvIGAncmVsb2FkJ2AgZm9yIGZ1bGwgcGFnZSByZWxvYWQgYmVoYXZpb3IuXG4gICAqL1xuICBvblVwZGF0ZT86ICgoZGF0YTogUnNjSG1yRGF0YSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHwgJ3JlbG9hZCc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGxvZyBITVIgZXZlbnRzIHRvIGNvbnNvbGUuXG4gICAqIEBkZWZhdWx0IHRydWUgaW4gZGV2ZWxvcG1lbnRcbiAgICovXG4gIHZlcmJvc2U/OiBib29sZWFuO1xufSA9IHt9KSB7XG4gIGNvbnN0IHsgb25VcGRhdGUsIHZlcmJvc2UgPSBlbnYuREVWIH0gPSBvcHRpb25zO1xuICBcbiAgaWYgKHR5cGVvZiBpbXBvcnQubWV0YS5ob3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICBpbXBvcnQubWV0YS5ob3Qub24oUlNDX0hNUl9FVkVOVCwgYXN5bmMgKGRhdGE6IFJzY0htckRhdGEpID0+IHtcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coJ1tSU0MgSE1SXSBTZXJ2ZXIgY29tcG9uZW50IHVwZGF0ZWQ6JywgZGF0YS5maWxlKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKG9uVXBkYXRlID09PSAncmVsb2FkJykge1xuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAob25VcGRhdGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG9uVXBkYXRlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1JTQyBITVJdIEVycm9yIGluIG9uVXBkYXRlIGhhbmRsZXI6JywgZXJyb3IpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQ6IGZ1bGwgcGFnZSByZWxvYWRcbiAgICAgIC8vIEZvciBzbWFydCBSU0MgcmVmZXRjaCwgdXNlIHVzZVJzY0htcigpIGhvb2sgaW4geW91ciBSZWFjdCB0cmVlXG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfVxuICB9KTtcbiAgXG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5sb2coJ1tSU0MgSE1SXSBMaXN0ZW5pbmcgZm9yIHNlcnZlciBjb21wb25lbnQgdXBkYXRlcycpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQU1PLFNBQVMsa0JBQW1CLENBQUE7QUFBQSxFQUNqQyxnQkFBZ0IsR0FBSSxDQUFBLFFBQUE7QUFBQSxFQUNwQixlQUFlLEdBQUksQ0FBQSxhQUFBO0FBQUEsRUFDbkIsR0FBQSxHQUFNLE9BQU8sUUFBUyxDQUFBLFFBQUE7QUFBQSxFQUN0QixRQUFXLEdBQUEsV0FBQTtBQUFBLEVBQ1gsT0FBVSxHQUFBO0FBQUEsSUFDUixNQUFRLEVBQUE7QUFBQTtBQUVaLENBQUEsR0FNSSxFQUFrQyxFQUFBO0FBQ3BDLEVBQUEsTUFBTSxTQUFZLEdBQUEsYUFBQTtBQUFBLElBQ2hCLGFBQUE7QUFBQSxJQUNBLFlBQUE7QUFBQSxJQUNBLEdBQUksQ0FBQTtBQUFBLEdBQ04sQ0FBRSxLQUFLLFFBQVEsQ0FBQTtBQUNSLEVBQUEsT0FBQSxlQUFBO0FBQUEsSUFDTCxLQUFBLENBQU0sVUFBVSxRQUFVLEVBQUE7QUFBQSxNQUN4QjtBQUFBLEtBQ0QsQ0FBQTtBQUFBLElBQ0Q7QUFBQSxNQUNFLFVBQUEsRUFBWSxnQkFBaUIsQ0FBQSxTQUFBLENBQVUsYUFBYSxDQUFBO0FBQUEsTUFDcEQsZUFBZSxTQUFVLENBQUE7QUFBQTtBQUMzQixHQUNGO0FBQ0Y7QUFHTyxNQUFNLGFBQWdCLEdBQUE7QUE2QnRCLFNBQVMsV0FBQSxDQUFZLE9BWXhCLEdBQUEsRUFBSSxFQUFBO0FBQ04sRUFBQSxNQUFNLEVBQUUsUUFBQSxFQUFVLE9BQVUsR0FBQSxHQUFBLENBQUksS0FBUSxHQUFBLE9BQUE7QUFFcEMsRUFBQSxJQUFBLE9BQU8sb0JBQW9CLFdBQWEsRUFBQTtBQUMxQyxJQUFBO0FBQUE7QUFHRixFQUFnQixNQUFBLENBQUEsSUFBQSxDQUFBLEdBQUEsQ0FBQSxFQUFBLENBQUcsYUFBZSxFQUFBLE9BQU8sSUFBcUIsS0FBQTtBQUM1RCxJQUFBLElBQUksT0FBUyxFQUFBO0FBQ0gsTUFBQSxPQUFBLENBQUEsR0FBQSxDQUFJLHFDQUF1QyxFQUFBLElBQUEsQ0FBSyxJQUFJLENBQUE7QUFBQTtBQUc5RCxJQUFBLElBQUksYUFBYSxRQUFVLEVBQUE7QUFDekIsTUFBQSxNQUFBLENBQU8sU0FBUyxNQUFPLEVBQUE7QUFDdkIsTUFBQTtBQUFBO0FBR0YsSUFBQSxJQUFJLFFBQVUsRUFBQTtBQUNSLE1BQUEsSUFBQTtBQUNGLFFBQUEsTUFBTSxTQUFTLElBQUksQ0FBQTtBQUFBLGVBQ1osS0FBTyxFQUFBO0FBQ04sUUFBQSxPQUFBLENBQUEsS0FBQSxDQUFNLHdDQUF3QyxLQUFLLENBQUE7QUFDM0QsUUFBQSxNQUFBLENBQU8sU0FBUyxNQUFPLEVBQUE7QUFBQTtBQUN6QixLQUNLLE1BQUE7QUFHTCxNQUFBLE1BQUEsQ0FBTyxTQUFTLE1BQU8sRUFBQTtBQUFBO0FBQ3pCLEdBQ0QsQ0FBQTtBQUVELEVBQUEsSUFBSSxPQUFTLEVBQUE7QUFDWCxJQUFBLE9BQUEsQ0FBUSxJQUFJLGtEQUFrRCxDQUFBO0FBQUE7QUFFbEU7Ozs7In0=