vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
74 lines (71 loc) • 11.5 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
import { toError } from '../error/toError.js';
async function resolveComponent(options) {
const { componentPath, exportName, loader } = options;
try {
let modulePath = componentPath;
let moduleExportName = exportName;
if (componentPath.includes("#")) {
const [path, fragmentExport] = componentPath.split("#");
modulePath = path;
moduleExportName = fragmentExport;
}
const module = await loader(`${modulePath}#${moduleExportName}`);
if (module == null) {
return {
type: "error",
error: new Error(`Module ${modulePath} not found`)
};
}
if (module instanceof Error) {
return {
type: "error",
error: module
};
}
const component = module[moduleExportName];
if (!(moduleExportName in module)) {
if ("error" in module) {
return {
type: "error",
error: toError(module["error"])
};
}
return {
type: "error",
error: new Error(
`Export "${moduleExportName}" not found in module ${modulePath}. ` + (moduleExportName !== "default" ? `Did you use \`export default\`? Use \`export function ${moduleExportName}(...)\` or set pageExportName: "default" in your plugin config.` : `The module does not have a default export.`)
)
};
}
if (!component) {
return {
type: "error",
error: new Error(
`Export "${moduleExportName}" is null or undefined in module ${modulePath}.`
)
};
}
if (component instanceof Error) {
return {
type: "error",
error: component
};
}
return {
type: "success",
component
};
} catch (error) {
return {
type: "error",
error: error instanceof Error ? error : new Error(String(error))
};
}
}
export { resolveComponent };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZUNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2hlbHBlcnMvcmVzb2x2ZUNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0Vycm9yIH0gZnJvbSBcIi4uL2Vycm9yL3RvRXJyb3IuanNcIjtcbmltcG9ydCB0eXBlIHsgR2VuZXJpY01vZHVsZUxvYWRlciwgSHRtbENvbXBvbmVudFR5cGUsIFJvb3RDb21wb25lbnRUeXBlIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIENvbXBvbmVudE5hbWUgPSBcIlJvb3RcIiB8IFwiSHRtbFwiO1xuXG50eXBlIFJlc29sdmVDb21wb25lbnRSZXN1bHQ8VCA9IHVua25vd24+ID1cbiAgfCB7XG4gICAgICB0eXBlOiBcInN1Y2Nlc3NcIjtcbiAgICAgIGNvbXBvbmVudDogVDtcbiAgICAgIGVycm9yPzogbmV2ZXI7XG4gICAgfVxuICB8IHsgdHlwZTogXCJlcnJvclwiOyBlcnJvcjogRXJyb3I7IGNvbXBvbmVudD86IG5ldmVyIH1cbiAgfCB7IHR5cGU6IFwic2tpcFwiOyBlcnJvcj86IG5ldmVyOyBjb21wb25lbnQ/OiBuZXZlciB9O1xuXG50eXBlIFJlc29sdmVDb21wb25lbnRPcHRpb25zID0ge1xuICBjb21wb25lbnRQYXRoOiBzdHJpbmc7XG4gIGV4cG9ydE5hbWU6IHN0cmluZztcbiAgbG9hZGVyOiBHZW5lcmljTW9kdWxlTG9hZGVyO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyBhIGNvbXBvbmVudCAoUm9vdCBvciBIdG1sKSBmcm9tIGEgc3RyaW5nIHBhdGguXG4gKiBcbiAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlczpcbiAqIC0gU3RyaW5nIHBhdGhzOiBcInNyYy9Sb290LnRzeFwiXG4gKiAtIEZyYWdtZW50IHN5bnRheDogXCJzcmMvY29tcG9uZW50cy50c3gjTXlSb290XCJcbiAqIC0gRXhwb3J0IG5hbWUgcmVzb2x1dGlvblxuICogXG4gKiBAcGFyYW0gb3B0aW9ucy5jb21wb25lbnRQYXRoIC0gVGhlIHBhdGggdG8gdGhlIGNvbXBvbmVudCBmaWxlXG4gKiBAcGFyYW0gb3B0aW9ucy5leHBvcnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV4cG9ydCB0byByZXNvbHZlIChlLmcuICdSb290JywgJ0h0bWwnKVxuICogQHBhcmFtIG9wdGlvbnMubG9hZGVyIC0gVGhlIGxvYWRlciBmdW5jdGlvbiB0byB1c2UgZm9yIGxvYWRpbmcgdGhlIG1vZHVsZVxuICogXG4gKiBAcmV0dXJucyBBIHJlc3VsdCBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x2ZWQgY29tcG9uZW50IG9yIGVycm9yXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50PFQgPSBSb290Q29tcG9uZW50VHlwZSB8IEh0bWxDb21wb25lbnRUeXBlPihcbiAgb3B0aW9uczogUmVzb2x2ZUNvbXBvbmVudE9wdGlvbnNcbik6IFByb21pc2U8UmVzb2x2ZUNvbXBvbmVudFJlc3VsdDxUPj4ge1xuICBjb25zdCB7IGNvbXBvbmVudFBhdGgsIGV4cG9ydE5hbWUsIGxvYWRlciB9ID0gb3B0aW9ucztcbiAgXG4gIHRyeSB7XG4gICAgLy8gSGFuZGxlIGZyYWdtZW50IHN5bnRheCAoZS5nLiwgXCJzcmMvY29tcG9uZW50cy50c3gjTXlSb290XCIpXG4gICAgbGV0IG1vZHVsZVBhdGggPSBjb21wb25lbnRQYXRoO1xuICAgIGxldCBtb2R1bGVFeHBvcnROYW1lID0gZXhwb3J0TmFtZTtcbiAgICBcbiAgICBpZiAoY29tcG9uZW50UGF0aC5pbmNsdWRlcygnIycpKSB7XG4gICAgICBjb25zdCBbcGF0aCwgZnJhZ21lbnRFeHBvcnRdID0gY29tcG9uZW50UGF0aC5zcGxpdCgnIycpO1xuICAgICAgbW9kdWxlUGF0aCA9IHBhdGg7XG4gICAgICBtb2R1bGVFeHBvcnROYW1lID0gZnJhZ21lbnRFeHBvcnQ7XG4gICAgfVxuXG4gICAgLy8gTG9hZCB0aGUgbW9kdWxlXG4gICAgY29uc3QgbW9kdWxlID0gYXdhaXQgbG9hZGVyKGAke21vZHVsZVBhdGh9IyR7bW9kdWxlRXhwb3J0TmFtZX1gKTtcbiAgICBcbiAgICBpZiAobW9kdWxlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihgTW9kdWxlICR7bW9kdWxlUGF0aH0gbm90IGZvdW5kYCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChtb2R1bGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcjogbW9kdWxlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGNvbXBvbmVudCBmcm9tIHRoZSBtb2R1bGVcbiAgICBjb25zdCBjb21wb25lbnQgPSBtb2R1bGVbbW9kdWxlRXhwb3J0TmFtZV07XG4gICAgXG4gICAgaWYgKCEobW9kdWxlRXhwb3J0TmFtZSBpbiBtb2R1bGUpKSB7XG4gICAgICBpZiAoXCJlcnJvclwiIGluIG1vZHVsZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgICBlcnJvcjogdG9FcnJvcihtb2R1bGVbXCJlcnJvclwiXSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cG9ydCBcIiR7bW9kdWxlRXhwb3J0TmFtZX1cIiBub3QgZm91bmQgaW4gbW9kdWxlICR7bW9kdWxlUGF0aH0uIGAgK1xuICAgICAgICAgIChtb2R1bGVFeHBvcnROYW1lICE9PSBcImRlZmF1bHRcIlxuICAgICAgICAgICAgPyBgRGlkIHlvdSB1c2UgXFxgZXhwb3J0IGRlZmF1bHRcXGA/IFVzZSBcXGBleHBvcnQgZnVuY3Rpb24gJHttb2R1bGVFeHBvcnROYW1lfSguLi4pXFxgIG9yIHNldCBwYWdlRXhwb3J0TmFtZTogXCJkZWZhdWx0XCIgaW4geW91ciBwbHVnaW4gY29uZmlnLmBcbiAgICAgICAgICAgIDogYFRoZSBtb2R1bGUgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgZXhwb3J0LmApXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXG4gICAgICAgICAgYEV4cG9ydCBcIiR7bW9kdWxlRXhwb3J0TmFtZX1cIiBpcyBudWxsIG9yIHVuZGVmaW5lZCBpbiBtb2R1bGUgJHttb2R1bGVQYXRofS5gXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcjogY29tcG9uZW50LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCBhcyBULFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIFJvb3QgYW5kIEh0bWwgY29tcG9uZW50cyBmcm9tIHVzZXIgb3B0aW9ucy5cbiAqIFxuICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgUm9vdC9IdG1sIGFyZSBzdHJpbmdzIGFuZCByZXNvbHZlcyB0aGVtIHRvIGNvbXBvbmVudHMuXG4gKiBJZiB0aGV5J3JlIGFscmVhZHkgY29tcG9uZW50cywgaXQgcmV0dXJucyB0aGVtIGFzLWlzLlxuICogXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9iamVjdCBjb250YWluaW5nIFJvb3QsIEh0bWwsIGFuZCByZXNvbHV0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIFJlc29sdmVkIGNvbXBvbmVudHMgb3Igb3JpZ2luYWwgdmFsdWVzIGlmIG5vdCBzdHJpbmdzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50T3B0aW9ucyhvcHRpb25zOiB7XG4gIFJvb3Q6IFJvb3RDb21wb25lbnRUeXBlIHwgc3RyaW5nO1xuICBIdG1sOiBIdG1sQ29tcG9uZW50VHlwZSB8IHN0cmluZzsgXG4gIHJvb3RFeHBvcnROYW1lOiBzdHJpbmc7XG4gIGh0bWxFeHBvcnROYW1lOiBzdHJpbmc7XG4gIGxvYWRlcjogR2VuZXJpY01vZHVsZUxvYWRlcjtcbn0pOiBQcm9taXNlPHtcbiAgUm9vdDogUm9vdENvbXBvbmVudFR5cGU7XG4gIEh0bWw6IEh0bWxDb21wb25lbnRUeXBlO1xuICBlcnJvcnM6IEVycm9yW107XG59PiB7XG4gIGNvbnN0IGVycm9yczogRXJyb3JbXSA9IFtdO1xuICBsZXQgcmVzb2x2ZWRSb290ID0gb3B0aW9ucy5Sb290O1xuICBsZXQgcmVzb2x2ZWRIdG1sID0gb3B0aW9ucy5IdG1sO1xuXG4gIC8vIFJlc29sdmUgUm9vdCBpZiBpdCdzIGEgc3RyaW5nXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5Sb290ID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3Qgcm9vdFJlc3VsdCA9IGF3YWl0IHJlc29sdmVDb21wb25lbnQ8Um9vdENvbXBvbmVudFR5cGU+KHtcbiAgICAgIGNvbXBvbmVudFBhdGg6IG9wdGlvbnMuUm9vdCxcbiAgICAgIGV4cG9ydE5hbWU6IG9wdGlvbnMucm9vdEV4cG9ydE5hbWUsXG4gICAgICBsb2FkZXI6IG9wdGlvbnMubG9hZGVyLFxuICAgIH0pO1xuICAgIFxuICAgIGlmIChyb290UmVzdWx0LnR5cGUgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICByZXNvbHZlZFJvb3QgPSByb290UmVzdWx0LmNvbXBvbmVudDtcbiAgICB9IGVsc2UgaWYgKHJvb3RSZXN1bHQudHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICBlcnJvcnMucHVzaChyb290UmVzdWx0LmVycm9yKTtcbiAgICAgIC8vIEtlZXAgb3JpZ2luYWwgdmFsdWUgYXMgZmFsbGJhY2tcbiAgICB9XG4gIH1cblxuICAvLyBSZXNvbHZlIEh0bWwgaWYgaXQncyBhIHN0cmluZ1xuICBpZiAodHlwZW9mIG9wdGlvbnMuSHRtbCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IGh0bWxSZXN1bHQgPSBhd2FpdCByZXNvbHZlQ29tcG9uZW50PEh0bWxDb21wb25lbnRUeXBlPih7XG4gICAgICBjb21wb25lbnRQYXRoOiBvcHRpb25zLkh0bWwsXG4gICAgICBleHBvcnROYW1lOiBvcHRpb25zLmh0bWxFeHBvcnROYW1lLFxuICAgICAgbG9hZGVyOiBvcHRpb25zLmxvYWRlcixcbiAgICB9KTtcbiAgICBcbiAgICBpZiAoaHRtbFJlc3VsdC50eXBlID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgcmVzb2x2ZWRIdG1sID0gaHRtbFJlc3VsdC5jb21wb25lbnQ7XG4gICAgfSBlbHNlIGlmIChodG1sUmVzdWx0LnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgZXJyb3JzLnB1c2goaHRtbFJlc3VsdC5lcnJvcik7XG4gICAgICAvLyBLZWVwIG9yaWdpbmFsIHZhbHVlIGFzIGZhbGxiYWNrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBSb290OiByZXNvbHZlZFJvb3QgYXMgUm9vdENvbXBvbmVudFR5cGUsXG4gICAgSHRtbDogcmVzb2x2ZWRIdG1sIGFzIEh0bWxDb21wb25lbnRUeXBlLFxuICAgIGVycm9ycyxcbiAgfTtcbn0gIl0sIm5hbWVzIjpbXSwibWFwcGlu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