vite-plugin-react-server
Version:
Vite plugin for React Server Components (RSC)
46 lines (44 loc) • 6.25 kB
JavaScript
/**
* vite-plugin-react-server
* Copyright (c) Nico Brinkkemper
* MIT License
*/
async function resolveVirtualAndNodeModules(moduleId, exportName, verbose = false, logger) {
if (!moduleId.includes("_virtual/") && !moduleId.startsWith("_virtual") && !moduleId.includes("node_modules")) {
return null;
}
try {
const module = await import(moduleId);
if (exportName && !(exportName in module)) {
throw new Error(
`Export ${exportName} not found in module ${moduleId}`
);
}
return module;
} catch (error) {
if (moduleId.includes("dynamic-import-helper")) {
if (verbose) {
logger?.warn(
`[resolveVirtualAndNodeModules] Virtual module detected: ${moduleId}. Providing shim for variable dynamic imports.`
);
}
const dynamicImportHelper = (specifier) => {
return import(specifier);
};
const shim = {
default: dynamicImportHelper,
__variableDynamicImportRuntimeHelper: dynamicImportHelper
};
if (exportName) {
if (exportName === "default" || exportName === "__variableDynamicImportRuntimeHelper") {
return { [exportName]: dynamicImportHelper };
}
return shim;
}
return shim;
}
throw error;
}
}
export { resolveVirtualAndNodeModules };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZVZpcnR1YWxBbmROb2RlTW9kdWxlcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2hlbHBlcnMvcmVzb2x2ZVZpcnR1YWxBbmROb2RlTW9kdWxlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gXCJ2aXRlXCI7XG5cbi8qKlxuICogU2hhcmVkIHV0aWxpdHkgZm9yIGhhbmRsaW5nIHZpcnR1YWwgbW9kdWxlcyBhbmQgbm9kZV9tb2R1bGVzIGluIGxvYWRlcnMuXG4gKiBcbiAqIEZvciB2aXJ0dWFsIG1vZHVsZXMgYW5kIG5vZGVfbW9kdWxlcywgd2UgdXNlIE5vZGUuanMgbmF0aXZlIHJlc29sdXRpb24uXG4gKiBUaGVzZSBzaG91bGQgYmUgaGFuZGxlZCBieSBOb2RlLmpzJ3MgbW9kdWxlIHJlc29sdXRpb24sIG5vdCBjdXN0b20gbG9naWMuXG4gKiBcbiAqIEBwYXJhbSBtb2R1bGVJZCAtIFRoZSBtb2R1bGUgSUQgdG8gcmVzb2x2ZVxuICogQHBhcmFtIGV4cG9ydE5hbWUgLSBPcHRpb25hbCBleHBvcnQgbmFtZSB0byBleHRyYWN0XG4gKiBAcGFyYW0gdmVyYm9zZSAtIFdoZXRoZXIgdG8gbG9nIHZlcmJvc2UgbWVzc2FnZXNcbiAqIEBwYXJhbSBsb2dnZXIgLSBMb2dnZXIgaW5zdGFuY2VcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBtb2R1bGUsIG9yIG51bGwgaWYgdGhpcyBpc24ndCBhIHZpcnR1YWwvbm9kZV9tb2R1bGVzIG1vZHVsZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVZpcnR1YWxBbmROb2RlTW9kdWxlcyhcbiAgbW9kdWxlSWQ6IHN0cmluZyxcbiAgZXhwb3J0TmFtZT86IHN0cmluZyxcbiAgdmVyYm9zZSA9IGZhbHNlLFxuICBsb2dnZXI/OiBMb2dnZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PiB8IG51bGw+IHtcbiAgLy8gRm9yIHZpcnR1YWwgbW9kdWxlcyBhbmQgbm9kZV9tb2R1bGVzLCB1c2UgTm9kZS5qcyBuYXRpdmUgcmVzb2x1dGlvblxuICBpZiAoXG4gICAgIW1vZHVsZUlkLmluY2x1ZGVzKFwiX3ZpcnR1YWwvXCIpICYmXG4gICAgIW1vZHVsZUlkLnN0YXJ0c1dpdGgoXCJfdmlydHVhbFwiKSAmJlxuICAgICFtb2R1bGVJZC5pbmNsdWRlcyhcIm5vZGVfbW9kdWxlc1wiKVxuICApIHtcbiAgICByZXR1cm4gbnVsbDsgLy8gTm90IGEgdmlydHVhbCBtb2R1bGUgb3Igbm9kZV9tb2R1bGVzLCBsZXQgY2FsbGVyIGhhbmRsZSBpdFxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUcnkgdG8gaW1wb3J0IGRpcmVjdGx5IC0gTm9kZS5qcyB3aWxsIHJlc29sdmUgaXRcbiAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQobW9kdWxlSWQpO1xuICAgIGlmIChleHBvcnROYW1lICYmICEoZXhwb3J0TmFtZSBpbiBtb2R1bGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFeHBvcnQgJHtleHBvcnROYW1lfSBub3QgZm91bmQgaW4gbW9kdWxlICR7bW9kdWxlSWR9YFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZHVsZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBJZiBpdCdzIHRoZSBkeW5hbWljLWltcG9ydC1oZWxwZXIsIHByb3ZpZGUgYSBzaGltXG4gICAgaWYgKG1vZHVsZUlkLmluY2x1ZGVzKFwiZHluYW1pYy1pbXBvcnQtaGVscGVyXCIpKSB7XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/Lndhcm4oXG4gICAgICAgICAgYFtyZXNvbHZlVmlydHVhbEFuZE5vZGVNb2R1bGVzXSBWaXJ0dWFsIG1vZHVsZSBkZXRlY3RlZDogJHttb2R1bGVJZH0uIFByb3ZpZGluZyBzaGltIGZvciB2YXJpYWJsZSBkeW5hbWljIGltcG9ydHMuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBfdmlydHVhbC9keW5hbWljLWltcG9ydC1oZWxwZXIuanMgaXMgZ2VuZXJhdGVkIGZvciB2YXJpYWJsZSBkeW5hbWljIGltcG9ydHNcbiAgICAgIC8vIFByb3ZpZGUgYSBzaGltIHRoYXQgdXNlcyBuYXRpdmUgZHluYW1pYyBpbXBvcnRcbiAgICAgIGNvbnN0IGR5bmFtaWNJbXBvcnRIZWxwZXIgPSAoc3BlY2lmaWVyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGltcG9ydChzcGVjaWZpZXIpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgc2hpbSA9IHtcbiAgICAgICAgZGVmYXVsdDogZHluYW1pY0ltcG9ydEhlbHBlcixcbiAgICAgICAgX192YXJpYWJsZUR5bmFtaWNJbXBvcnRSdW50aW1lSGVscGVyOiBkeW5hbWljSW1wb3J0SGVscGVyLFxuICAgICAgfTtcblxuICAgICAgaWYgKGV4cG9ydE5hbWUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV4cG9ydE5hbWUgPT09IFwiZGVmYXVsdFwiIHx8XG4gICAgICAgICAgZXhwb3J0TmFtZSA9PT0gXCJfX3ZhcmlhYmxlRHluYW1pY0ltcG9ydFJ1bnRpbWVIZWxwZXJcIlxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4geyBbZXhwb3J0TmFtZV06IGR5bmFtaWNJbXBvcnRIZWxwZXIgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hpbTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzaGltO1xuICAgIH1cblxuICAgIC8vIEZvciBvdGhlciB2aXJ0dWFsIG1vZHVsZXMgb3Igbm9kZV9tb2R1bGVzLCByZS10aHJvdyB0aGUgZXJyb3JcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFjQSxlQUFzQiw0QkFDcEIsQ0FBQSxRQUFBLEVBQ0EsVUFDQSxFQUFBLE9BQUEsR0FBVSxPQUNWLE1BQ3FDLEVBQUE7QUFFckMsRUFBQSxJQUNFLENBQUMsUUFBQSxDQUFTLFFBQVMsQ0FBQSxXQUFXLEtBQzlCLENBQUMsUUFBQSxDQUFTLFVBQVcsQ0FBQSxVQUFVLENBQy9CLElBQUEsQ0FBQyxRQUFTLENBQUEsUUFBQSxDQUFTLGNBQWMsQ0FDakMsRUFBQTtBQUNBLElBQU8sT0FBQSxJQUFBO0FBQUE7QUFHVCxFQUFJLElBQUE7QUFFRixJQUFNLE1BQUEsTUFBQSxHQUFTLE1BQU0sT0FBTyxRQUFBLENBQUE7QUFDNUIsSUFBSSxJQUFBLFVBQUEsSUFBYyxFQUFFLFVBQUEsSUFBYyxNQUFTLENBQUEsRUFBQTtBQUN6QyxNQUFBLE1BQU0sSUFBSSxLQUFBO0FBQUEsUUFDUixDQUFBLE9BQUEsRUFBVSxVQUFVLENBQUEscUJBQUEsRUFBd0IsUUFBUSxDQUFBO0FBQUEsT0FDdEQ7QUFBQTtBQUVGLElBQU8sT0FBQSxNQUFBO0FBQUEsV0FDQSxLQUFPLEVBQUE7QUFFZCxJQUFJLElBQUEsUUFBQSxDQUFTLFFBQVMsQ0FBQSx1QkFBdUIsQ0FBRyxFQUFBO0FBQzlDLE1BQUEsSUFBSSxPQUFTLEVBQUE7QUFDWCxRQUFRLE1BQUEsRUFBQSxJQUFBO0FBQUEsVUFDTiwyREFBMkQsUUFBUSxDQUFBLDhDQUFBO0FBQUEsU0FDckU7QUFBQTtBQUtGLE1BQU0sTUFBQSxtQkFBQSxHQUFzQixDQUFDLFNBQXNCLEtBQUE7QUFDakQsUUFBQSxPQUFPLE9BQU8sU0FBQSxDQUFBO0FBQUEsT0FDaEI7QUFFQSxNQUFBLE1BQU0sSUFBTyxHQUFBO0FBQUEsUUFDWCxPQUFTLEVBQUEsbUJBQUE7QUFBQSxRQUNULG9DQUFzQyxFQUFBO0FBQUEsT0FDeEM7QUFFQSxNQUFBLElBQUksVUFBWSxFQUFBO0FBQ2QsUUFDRSxJQUFBLFVBQUEsS0FBZSxTQUNmLElBQUEsVUFBQSxLQUFlLHNDQUNmLEVBQUE7QUFDQSxVQUFBLE9BQU8sRUFBRSxDQUFDLFVBQVUsR0FBRyxtQkFBb0IsRUFBQTtBQUFBO0FBRTdDLFFBQU8sT0FBQSxJQUFBO0FBQUE7QUFFVCxNQUFPLE9BQUEsSUFBQTtBQUFBO0FBSVQsSUFBTSxNQUFBLEtBQUE7QUFBQTtBQUVWOzs7OyJ9