vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
91 lines (88 loc) • 11.3 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import { resolveOptions } from '../config/resolveOptions.js';
import { getBundleManifest } from '../helpers/getBundleManifest.js';
import { addServerManifest, updateSharedManifest, signalServerManifestReady } from '../bundle/manifests.js';
import { handleError } from '../error/handleError.js';
function createBuildEventPlugin(options) {
return {
name: "vite:plugin-react-server:build-events",
enforce: "post",
apply: "build",
writeBundle(outputOptions, bundle) {
const resolvedOptionsResult = resolveOptions(options);
if (resolvedOptionsResult.type === "error") {
return;
}
const userOptions = resolvedOptionsResult.userOptions;
const environmentName = this.environment?.name;
let eventType;
if (environmentName?.startsWith("client")) {
eventType = "build.writeBundle.client";
} else if (environmentName?.startsWith("ssr")) {
eventType = "build.writeBundle.static";
} else if (environmentName?.startsWith("server")) {
eventType = "build.writeBundle.server";
}
if (environmentName?.startsWith("server")) {
try {
const bundleManifest = getBundleManifest({
bundle,
normalizer: userOptions.normalizer
});
addServerManifest(bundleManifest);
updateSharedManifest(this, "server", bundleManifest);
signalServerManifestReady(bundleManifest);
} catch (error) {
const eventPanicError = handleError({
error,
panicThreshold: userOptions.panicThreshold});
if (eventPanicError != null) {
this.error(eventPanicError);
} else {
this.warn(error);
}
}
}
if (eventType && userOptions.onEvent) {
try {
const result = userOptions.onEvent({
type: eventType,
data: {
pages: [],
options: outputOptions,
bundle
}
});
if (result != null && typeof result === "object" && "then" in result) {
result.catch((error) => {
const eventPanicError = handleError({
error,
panicThreshold: userOptions.panicThreshold,
context: `onEvent(${eventType})`
});
if (eventPanicError != null) {
throw eventPanicError;
}
});
}
} catch (error) {
const eventPanicError = handleError({
error,
panicThreshold: userOptions.panicThreshold});
if (eventPanicError != null) {
this.error(eventPanicError);
throw eventPanicError;
} else {
this.warn(error);
}
}
}
}
};
}
export { createBuildEventPlugin };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQnVpbGRFdmVudFBsdWdpbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Vudmlyb25tZW50cy9jcmVhdGVCdWlsZEV2ZW50UGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB0eXBlIHsgU3RyZWFtUGx1Z2luT3B0aW9ucywgUGx1Z2luRXZlbnRUeXBlIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGdldEJ1bmRsZU1hbmlmZXN0IH0gZnJvbSBcIi4uL2hlbHBlcnMvZ2V0QnVuZGxlTWFuaWZlc3QuanNcIjtcbmltcG9ydCB7XG4gIGFkZFNlcnZlck1hbmlmZXN0LFxuICB1cGRhdGVTaGFyZWRNYW5pZmVzdCxcbiAgc2lnbmFsU2VydmVyTWFuaWZlc3RSZWFkeSxcbn0gZnJvbSBcIi4uL2J1bmRsZS9tYW5pZmVzdHMuanNcIjtcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSBcIi4uL2Vycm9yL2hhbmRsZUVycm9yLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCdWlsZEV2ZW50UGx1Z2luKG9wdGlvbnM6IFN0cmVhbVBsdWdpbk9wdGlvbnMpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFwidml0ZTpwbHVnaW4tcmVhY3Qtc2VydmVyOmJ1aWxkLWV2ZW50c1wiLFxuICAgIGVuZm9yY2U6IFwicG9zdFwiLFxuICAgIGFwcGx5OiBcImJ1aWxkXCIsXG5cbiAgICB3cml0ZUJ1bmRsZShvdXRwdXRPcHRpb25zLCBidW5kbGUpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkT3B0aW9uc1Jlc3VsdCA9IHJlc29sdmVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc29sdmVkT3B0aW9uc1Jlc3VsdC50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVzZXJPcHRpb25zID0gcmVzb2x2ZWRPcHRpb25zUmVzdWx0LnVzZXJPcHRpb25zO1xuXG4gICAgICBjb25zdCBlbnZpcm9ubWVudE5hbWUgPSB0aGlzLmVudmlyb25tZW50Py5uYW1lO1xuXG5cbiAgICAgIC8vIERldGVybWluZSBldmVudCB0eXBlIGJhc2VkIG9uIGVudmlyb25tZW50IG5hbWVcbiAgICAgIGxldCBldmVudFR5cGU6IFBsdWdpbkV2ZW50VHlwZSB8IHVuZGVmaW5lZDtcblxuXG4gICAgICBpZiAoZW52aXJvbm1lbnROYW1lPy5zdGFydHNXaXRoKFwiY2xpZW50XCIpKSB7XG4gICAgICAgIGV2ZW50VHlwZSA9IFwiYnVpbGQud3JpdGVCdW5kbGUuY2xpZW50XCI7XG5cbiAgICAgIH0gZWxzZSBpZiAoZW52aXJvbm1lbnROYW1lPy5zdGFydHNXaXRoKFwic3NyXCIpKSB7XG4gICAgICAgIGV2ZW50VHlwZSA9IFwiYnVpbGQud3JpdGVCdW5kbGUuc3RhdGljXCI7XG4gICAgICB9IGVsc2UgaWYgKGVudmlyb25tZW50TmFtZT8uc3RhcnRzV2l0aChcInNlcnZlclwiKSkge1xuICAgICAgICBldmVudFR5cGUgPSBcImJ1aWxkLndyaXRlQnVuZGxlLnNlcnZlclwiO1xuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSBzZXJ2ZXIgbWFuaWZlc3QgaW4gZ2xvYmFsIHN0b3JlIGZvciBTU0cgcGx1Z2luIGFjY2Vzc1xuICAgICAgaWYgKGVudmlyb25tZW50TmFtZT8uc3RhcnRzV2l0aChcInNlcnZlclwiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGJ1bmRsZU1hbmlmZXN0ID0gZ2V0QnVuZGxlTWFuaWZlc3Qoe1xuICAgICAgICAgICAgYnVuZGxlLFxuICAgICAgICAgICAgbm9ybWFsaXplcjogdXNlck9wdGlvbnMubm9ybWFsaXplcixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBUeXBlIGFzc2VydGlvbiBzaW5jZSBnZXRCdW5kbGVNYW5pZmVzdCByZXR1cm5zIHRoZSBjb3JyZWN0IHN0cnVjdHVyZVxuICAgICAgICAgIGFkZFNlcnZlck1hbmlmZXN0KGJ1bmRsZU1hbmlmZXN0IGFzIGFueSk7XG5cbiAgICAgICAgICAvLyBBbHNvIHVwZGF0ZSB0aGUgc2hhcmVkIHN0YXRlIGJldHdlZW4gZW52aXJvbm1lbnRzXG4gICAgICAgICAgdXBkYXRlU2hhcmVkTWFuaWZlc3QodGhpcywgXCJzZXJ2ZXJcIiwgYnVuZGxlTWFuaWZlc3QgYXMgYW55KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBTaWduYWwgdGhhdCBzZXJ2ZXIgbWFuaWZlc3QgaXMgcmVhZHkgZm9yIHdhaXRpbmcgY29uc3VtZXJzXG4gICAgICAgICAgc2lnbmFsU2VydmVyTWFuaWZlc3RSZWFkeShidW5kbGVNYW5pZmVzdCBhcyBhbnkpO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRQYW5pY0Vycm9yID0gaGFuZGxlRXJyb3Ioe1xuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBwYW5pY1RocmVzaG9sZDogdXNlck9wdGlvbnMucGFuaWNUaHJlc2hvbGQsXG4gICAgICAgICAgICBjb250ZXh0OiBgd3JpdGVCdW5kbGUoc2VydmVyIG1hbmlmZXN0KWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGV2ZW50UGFuaWNFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKGV2ZW50UGFuaWNFcnJvcik7IC8vIFJlLXRocm93IHRvIGFib3J0IHRoZSBidWlsZFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndhcm4oZXJyb3IgYXMgYW55KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50VHlwZSAmJiB1c2VyT3B0aW9ucy5vbkV2ZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdXNlck9wdGlvbnMub25FdmVudCh7XG4gICAgICAgICAgICB0eXBlOiBldmVudFR5cGUsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHBhZ2VzOiBbXSxcbiAgICAgICAgICAgICAgb3B0aW9uczogb3V0cHV0T3B0aW9ucyxcbiAgICAgICAgICAgICAgYnVuZGxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIGFueSk7IC8vIFR5cGUgYXNzZXJ0aW9uIHRvIGF2b2lkIGNvbXBsZXggdHlwZSBjaGVja2luZ1xuXG4gICAgICAgICAgLy8gSGFuZGxlIGFzeW5jIGV2ZW50IGNhbGxiYWNrc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc3VsdCAhPSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcmVzdWx0ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBcInRoZW5cIiBpbiByZXN1bHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIChyZXN1bHQgYXMgUHJvbWlzZTxhbnk+KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXZlbnRQYW5pY0Vycm9yID0gaGFuZGxlRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgIHBhbmljVGhyZXNob2xkOiB1c2VyT3B0aW9ucy5wYW5pY1RocmVzaG9sZCxcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBgb25FdmVudCgke2V2ZW50VHlwZX0pYCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChldmVudFBhbmljRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IGV2ZW50UGFuaWNFcnJvcjsgLy8gUmUtdGhyb3cgdG8gYWJvcnQgdGhlIGJ1aWxkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBldmVudFBhbmljRXJyb3IgPSBoYW5kbGVFcnJvcih7XG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIHBhbmljVGhyZXNob2xkOiB1c2VyT3B0aW9ucy5wYW5pY1RocmVzaG9sZCxcbiAgICAgICAgICAgIGNvbnRleHQ6IGBvbkV2ZW50KCR7ZXZlbnRUeXBlfSlgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChldmVudFBhbmljRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcihldmVudFBhbmljRXJyb3IpOyAvLyBMb2cgdGhlIGVycm9yXG4gICAgICAgICAgICB0aHJvdyBldmVudFBhbmljRXJyb3I7IC8vIFJlLXRocm93IHRvIGFib3J0IHRoZSBidWlsZFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndhcm4oZXJyb3IgYXMgYW55KTtcbiAgICAgICAgICAgIC8vIEZvciBub24tcGFuaWMgZXJyb3JzLCBkb24ndCB0aHJvdyAtIGp1c3Qgd2FyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQVdPLFNBQVMsdUJBQXVCLE9BQXNDLEVBQUE7QUFDM0UsRUFBTyxPQUFBO0FBQUEsSUFDTCxJQUFNLEVBQUEsdUNBQUE7QUFBQSxJQUNOLE9BQVMsRUFBQSxNQUFBO0FBQUEsSUFDVCxLQUFPLEVBQUEsT0FBQTtBQUFBLElBRVAsV0FBQSxDQUFZLGVBQWUsTUFBUSxFQUFBO0FBQ2pDLE1BQU0sTUFBQSxxQkFBQSxHQUF3QixlQUFlLE9BQU8sQ0FBQTtBQUNwRCxNQUFJLElBQUEscUJBQUEsQ0FBc0IsU0FBUyxPQUFTLEVBQUE7QUFFMUMsUUFBQTtBQUFBO0FBRUYsTUFBQSxNQUFNLGNBQWMscUJBQXNCLENBQUEsV0FBQTtB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