vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
86 lines (83 loc) • 10.3 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import { createLogger } from 'vite';
import { resolveOptions } from '../config/resolveOptions.js';
import { resolveUserConfig } from '../config/resolveUserConfig.js';
import { resolveAutoDiscover } from '../config/autoDiscover/resolveAutoDiscover.js';
import { handleError } from '../error/handleError.js';
import { assertReactServer } from '../config/getCondition.js';
assertReactServer();
const reactClientPlugin = function _reactClientPlugin(options) {
let userConfig;
let configEnv;
let autoDiscoveredFiles;
let implicitSsr = void 0;
const resolvedOptions = resolveOptions(options);
if (resolvedOptions.type === "error") {
if (resolvedOptions.error != null) {
throw resolvedOptions.error;
}
throw new Error("React client plugin failed to resolve options");
}
const { userOptions } = resolvedOptions;
return {
name: "vite:plugin-react-server/client",
applyToEnvironment(env) {
const envName = (env?.name || "").toLowerCase();
if (envName === "client" || envName === "ssr") {
return true;
}
return false;
},
async config(config, viteConfigEnv) {
configEnv = viteConfigEnv;
if (configEnv.command !== "build") {
return;
}
if (typeof config?.build?.ssr === "boolean" || typeof config?.build?.ssr === "string") {
implicitSsr = config?.build?.ssr === "true" || config?.build?.ssr === true;
} else if (implicitSsr === void 0) {
implicitSsr = configEnv.isSsrBuild;
}
const logger = config.customLogger || createLogger();
const autoDiscoverResult = await resolveAutoDiscover({
config,
configEnv,
userOptions,
logger
});
if (autoDiscoverResult.type === "error") {
const panicError = handleError({
error: autoDiscoverResult.error,
logger,
panicThreshold: userOptions.panicThreshold});
if (panicError != null) {
throw panicError;
}
throw new Error("Failed to resolve autoDiscoveredFiles");
}
autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;
const resolvedConfig = resolveUserConfig({
condition: "react-client",
config,
configEnv,
userOptions,
autoDiscoveredFiles,
ssr: implicitSsr
});
if (resolvedConfig.type === "error") {
if (resolvedConfig.error != null) {
throw resolvedConfig.error;
}
throw new Error("Failed to resolve config");
}
userConfig = resolvedConfig.userConfig;
return userConfig;
}
};
};
export { reactClientPlugin };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNlcnZlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL3JlYWN0LWNsaWVudC9wbHVnaW4uc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgdHlwZSBDb25maWdFbnYgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHR5cGUge1xuICBBdXRvRGlzY292ZXJlZEZpbGVzLFxuICBSZXNvbHZlZFVzZXJDb25maWcsXG4gIFZpdGVQbHVnaW5Gbixcbn0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB7IHJlc29sdmVVc2VyQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9yZXNvbHZlVXNlckNvbmZpZy5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUF1dG9EaXNjb3ZlciB9IGZyb20gXCIuLi9jb25maWcvYXV0b0Rpc2NvdmVyL3Jlc29sdmVBdXRvRGlzY292ZXIuanNcIjtcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSBcIi4uL2Vycm9yL2hhbmRsZUVycm9yLmpzXCI7XG5pbXBvcnQgeyBhc3NlcnRSZWFjdFNlcnZlciB9IGZyb20gXCIuLi9jb25maWcvZ2V0Q29uZGl0aW9uLmpzXCI7XG5cbmFzc2VydFJlYWN0U2VydmVyKCk7ICBcblxuLyoqXG4gKiBTZW1hbnRpYyBlbnRyeSBmb3IgYHJlYWN0LWNsaWVudGAgYnVpbGQgYmVoYXZpb3IgdW5kZXIgdGhlIGByZWFjdC1zZXJ2ZXJgICBjb25kaXRpb24uXG4gKiAtIE9ubHkgdXNlZCB3aGUgaW1wb3J0ZWQgZGlyZWN0bHkgYW5kIHVuZGVyIHRoZSBgcmVhY3Qtc2VydmVyYCBjb25kaXRpb24uXG4gKiBcbiAqIFRoaXMgcGx1Z2luIGlzIHJlc3BvbnNpYmxlIGZvcjpcbiAqICBEZXYgbW9kZSB1bmRlciBub24tcmVhY3Qtc2VydmVyIGNvbmRpdGlvbnM6XG4gKiAgIC0gRGlzYWJsZWQsIHVzZSAvc2VydmVyL3BsdWdpbi5zZXJ2ZXIudHMgaW5zdGVhZFxuICogIEJ1aWxkOlxuICogIC0gQ29uZmlndXJlIHRoZSBjb25maWcgZm9yIHRoZSBjbGllbnQgYm91bmRhcnkgYnVpbGRcbiAqIEBwYXJhbSBvcHRpb25zIFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBjb25zdCByZWFjdENsaWVudFBsdWdpbjogVml0ZVBsdWdpbkZuID0gZnVuY3Rpb24gX3JlYWN0Q2xpZW50UGx1Z2luKFxuICBvcHRpb25zXG4pIHtcbiAgbGV0IHVzZXJDb25maWc6IFJlc29sdmVkVXNlckNvbmZpZztcbiAgbGV0IGNvbmZpZ0VudjogQ29uZmlnRW52O1xuICBsZXQgYXV0b0Rpc2NvdmVyZWRGaWxlczogQXV0b0Rpc2NvdmVyZWRGaWxlcztcbiAgbGV0IGltcGxpY2l0U3NyOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAvLyBJbml0aWFsIG9wdGlvbnMgcmVzb2x1dGlvblxuICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlT3B0aW9ucyhvcHRpb25zKTtcbiAgaWYgKHJlc29sdmVkT3B0aW9ucy50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICBpZihyZXNvbHZlZE9wdGlvbnMuZXJyb3IgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgcmVzb2x2ZWRPcHRpb25zLmVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFjdCBjbGllbnQgcGx1Z2luIGZhaWxlZCB0byByZXNvbHZlIG9wdGlvbnNcIik7XG4gIH1cbiAgY29uc3QgeyB1c2VyT3B0aW9ucyB9ID0gcmVzb2x2ZWRPcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJ2aXRlOnBsdWdpbi1yZWFjdC1zZXJ2ZXIvY2xpZW50XCIsXG4gICAgYXBwbHlUb0Vudmlyb25tZW50KGVudikge1xuICAgICAgLy8gT25seSBhcHBseSB0aGlzIHBsdWdpbiBpbiB0aGUgY2xpZW50IGVudmlyb25tZW50XG4gICAgICBjb25zdCBlbnZOYW1lID0gKGVudj8ubmFtZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYoZW52TmFtZSA9PT0gXCJjbGllbnRcIiB8fCBlbnZOYW1lID09PSBcInNzclwiKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgYXN5bmMgY29uZmlnKGNvbmZpZywgdml0ZUNvbmZpZ0Vudikge1xuICAgICAgY29uZmlnRW52ID0gdml0ZUNvbmZpZ0VudjtcbiAgICAgIGlmKGNvbmZpZ0Vudi5jb21tYW5kICE9PSBcImJ1aWxkXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYodHlwZW9mIGNvbmZpZz8uYnVpbGQ/LnNzciA9PT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIGNvbmZpZz8uYnVpbGQ/LnNzciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpbXBsaWNpdFNzciA9IGNvbmZpZz8uYnVpbGQ/LnNzciA9PT0gXCJ0cnVlXCIgfHwgY29uZmlnPy5idWlsZD8uc3NyID09PSB0cnVlO1xuICAgICAgfSBlbHNlIGlmKGltcGxpY2l0U3NyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW1wbGljaXRTc3IgPSBjb25maWdFbnYuaXNTc3JCdWlsZDtcbiAgICAgIH1cbiAgICBcbiAgICAgIGNvbnN0IGxvZ2dlciA9IGNvbmZpZy5jdXN0b21Mb2dnZXIgfHwgY3JlYXRlTG9nZ2VyKCk7XG4gICAgICBjb25zdCBhdXRvRGlzY292ZXJSZXN1bHQgPSBhd2FpdCByZXNvbHZlQXV0b0Rpc2NvdmVyKHtcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBjb25maWdFbnYsXG4gICAgICAgIHVzZXJPcHRpb25zOiB1c2VyT3B0aW9ucyxcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgfSk7XG4gICAgICBpZiAoYXV0b0Rpc2NvdmVyUmVzdWx0LnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBjb25zdCBwYW5pY0Vycm9yID0gaGFuZGxlRXJyb3Ioe1xuICAgICAgICAgIGVycm9yOiBhdXRvRGlzY292ZXJSZXN1bHQuZXJyb3IsXG4gICAgICAgICAgbG9nZ2VyLFxuICAgICAgICAgIHBhbmljVGhyZXNob2xkOiB1c2VyT3B0aW9ucy5wYW5pY1RocmVzaG9sZCxcbiAgICAgICAgICBjb250ZXh0OiBcImNvbmZpZyhhdXRvRGlzY292ZXIpXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGFuaWNFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgcGFuaWNFcnJvcjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVzb2x2ZSBhdXRvRGlzY292ZXJlZEZpbGVzXCIpO1xuICAgICAgfVxuICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlcyA9IGF1dG9EaXNjb3ZlclJlc3VsdC5hdXRvRGlzY292ZXJlZEZpbGVzO1xuICAgICAgXG5cbiAgICAgIGNvbnN0IHJlc29sdmVkQ29uZmlnID0gcmVzb2x2ZVVzZXJDb25maWcoe1xuICAgICAgICBjb25kaXRpb246IFwicmVhY3QtY2xpZW50XCIsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY29uZmlnRW52LFxuICAgICAgICB1c2VyT3B0aW9uczogdXNlck9wdGlvbnMsXG4gICAgICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXMsXG4gICAgICAgIHNzcjogaW1wbGljaXRTc3IsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc29sdmVkQ29uZmlnLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBpZihyZXNvbHZlZENvbmZpZy5lcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgcmVzb2x2ZWRDb25maWcuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlc29sdmUgY29uZmlnXCIpO1xuICAgICAgfVxuXG5cbiAgICAgIHVzZXJDb25maWcgPSByZXNvbHZlZENvbmZpZy51c2VyQ29uZmlnO1xuICAgICAgcmV0dXJuIHVzZXJDb25maWc7XG4gICAgfSxcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFZQSxpQkFBa0IsRUFBQTtBQWNMLE1BQUEsaUJBQUEsR0FBa0MsU0FBUyxrQkFBQSxDQUN0RCxPQUNBLEVBQUE7QUFDQSxFQUFJLElBQUEsVUFBQTtBQUNKLEVBQUksSUFBQSxTQUFBO0FBQ0osRUFBSSxJQUFBLG1CQUFBO0FBQ0osRUFBQSxJQUFJLFdBQW1DLEdBQUEsTUFBQTtBQUV2QyxFQUFNLE1BQUEsZUFBQSxHQUFrQixlQUFlLE9BQU8sQ0FBQTtBQUM5QyxFQUFJLElBQUEsZUFBQSxDQUFnQixTQUFTLE9BQVMsRUFBQTtBQUNwQyxJQUFHLElBQUEsZUFBQSxDQUFnQixTQUFTLElBQU0sRUFBQTtBQUNoQyxNQUFBLE1BQU0sZUFBZ0IsQ0FBQSxLQUFBO0FBQUE7QUFFeEIsSUFBTSxNQUFBLElBQUksTUFBTSwrQ0FBK0MsQ0FBQTtBQUFBO0FBRWpFLEVBQU0sTUFBQSxFQUFFLGFBQWdCLEdBQUEsZUFBQTtBQUV4QixFQUFPLE9BQUE7QUFBQSxJQUNMLElBQU0sRUFBQSxpQ0FBQTtBQUFBLElBQ04sbUJBQW1CLEdBQUssRUFBQTtBQUV0QixNQUFBLE1BQU0sT0FBVyxHQUFBLENBQUEsR0FBQSxFQUFLLElBQVEsSUFBQSxFQUFBLEVBQUksV0FBWSxFQUFBO0FBQzlDLE1BQUcsSUFBQSxPQUFBLEtBQVksUUFBWSxJQUFBLE9BQUEsS0FBWSxLQUFPLEVBQUE7QUFDNUMsUUFBTyxPQUFBLElBQUE7QUFBQTtBQUVULE1BQU8sT0FBQSxLQUFBO0FBQUEsS0FDVDtBQUFBLElBQ0EsTUFBTSxNQUFPLENBQUEsTUFBQSxFQUFRLGFBQWUsRUFBQTtBQUNsQyxNQUFZLFNBQUEsR0FBQSxhQUFBO0FBQ1osTUFBRyxJQUFBLFNBQUEsQ0FBVSxZQUFZLE9BQVMsRUFBQTtBQUNoQyxRQUFBO0FBQUE7QUFFRixNQUFHLElBQUEsT0FBTyxRQUFRLEtBQU8sRUFBQSxHQUFBLEtBQVEsYUFBYSxPQUFPLE1BQUEsRUFBUSxLQUFPLEVBQUEsR0FBQSxLQUFRLFFBQVUsRUFBQTtBQUNwRixRQUFBLFdBQUEsR0FBYyxRQUFRLEtBQU8sRUFBQSxHQUFBLEtBQVEsTUFBVSxJQUFBLE1BQUEsRUFBUSxPQUFPLEdBQVEsS0FBQSxJQUFBO0FBQUEsT0FDeEUsTUFBQSxJQUFVLGdCQUFnQixNQUFXLEVBQUE7QUFDbkMsUUFBQSxXQUFBLEdBQWMsU0FBVSxDQUFBLFVBQUE7QUFBQTtBQUcxQixNQUFNLE1BQUEsTUFBQSxHQUFTLE1BQU8sQ0FBQSxZQUFBLElBQWdCLFlBQWEsRUFBQTtBQUNuRCxNQUFNLE1BQUEsa0JBQUEsR0FBcUIsTUFBTSxtQkFBb0IsQ0FBQTtBQUFBLFFBQ25ELE1BQUE7QUFBQSxRQUNBLFNBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxRQUNBO0FBQUEsT0FDRCxDQUFBO0FBQ0QsTUFBSSxJQUFBLGtCQUFBLENBQW1CLFNBQVMsT0FBUyxFQUFBO0FBQ3ZDLFFBQUEsTUFBTSxhQUFhLFdBQVksQ0FBQTtBQUFBLFVBQzdCLE9BQU8sa0JBQW1CLENBQUEsS0FBQTtBQUFBLFVBQzFCLE1BQUE7QUFBQSxVQUNBLGdCQUFnQixXQUFZLENBQUEsY0FFOUIsQ0FBQyxDQUFBO0FBQ0QsUUFBQSxJQUFJLGNBQWMsSUFBTSxFQUFBO0FBQ3RCLFVBQU0sTUFBQSxVQUFBO0FBQUE7QUFFUixRQUFNLE1BQUEsSUFBSSxNQUFNLHVDQUF1QyxDQUFBO0FBQUE7QUFFekQsTUFBQSxtQkFBQSxHQUFzQixrQkFBbUIsQ0FBQSxtQkFBQTtBQUd6QyxNQUFBLE1BQU0saUJBQWlCLGlCQUFrQixDQUFBO0FBQUEsUUFDdkMsU0FBVyxFQUFBLGNBQUE7QUFBQSxRQUNYLE1BQUE7QUFBQSxRQUNBLFNBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxRQUNBLG1CQUFBO0FBQUEsUUFDQSxHQUFLLEVBQUE7QUFBQSxPQUNOLENBQUE7QUFFRCxNQUFJLElBQUEsY0FBQSxDQUFlLFNBQVMsT0FBUyxFQUFBO0FBQ25DLFFBQUcsSUFBQSxjQUFBLENBQWUsU0FBUyxJQUFNLEVBQUE7QUFDL0IsVUFBQSxNQUFNLGNBQWUsQ0FBQSxLQUFBO0FBQUE7QUFFdkIsUUFBTSxNQUFBLElBQUksTUFBTSwwQkFBMEIsQ0FBQTtBQUFBO0FBSTVDLE1BQUEsVUFBQSxHQUFhLGNBQWUsQ0FBQSxVQUFBO0FBQzVCLE1BQU8sT0FBQSxVQUFBO0FBQUE7QUFDVCxHQUNGO0FBQ0Y7Ozs7In0=