zephyr-rspress-plugin
Version:
Rspress plugin for Zephyr
102 lines (101 loc) • 4.2 kB
JavaScript
;
var __webpack_require__ = {};
(()=>{
__webpack_require__.d = (exports1, getters, values)=>{
var define = (defs, kind)=>{
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
enumerable: true,
[kind]: defs[key]
});
};
define(getters, "get");
define(values, "value");
};
})();
(()=>{
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
})();
(()=>{
__webpack_require__.r = (exports1)=>{
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
value: 'Module'
});
Object.defineProperty(exports1, '__esModule', {
value: true
});
};
})();
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
moduleFederationPublicPathPlugin: ()=>moduleFederationPublicPathPlugin,
setPortableModuleFederationPublicPath: ()=>setPortableModuleFederationPublicPath
});
const external_zephyr_xpack_internal_namespaceObject = require("zephyr-xpack-internal");
function moduleFederationPublicPathPlugin(options = {}) {
return {
name: 'zephyr-rspress-module-federation-public-path',
setup (api) {
api.onBeforeCreateCompiler({
order: 'post',
handler ({ bundlerConfigs }) {
const configs = bundlerConfigs ?? [];
options.onModuleFederationPlugins?.(configs.filter((config)=>!isNodeCompiler(config)).flatMap((config)=>(config.plugins ?? []).filter((plugin)=>(0, external_zephyr_xpack_internal_namespaceObject.isModuleFederationPlugin)(plugin))));
if ('tap-app' !== options.target) for (const config of configs)setPortableModuleFederationPublicPath(config);
}
});
}
};
}
function setPortableModuleFederationPublicPath(config) {
if (isNodeCompiler(config) || !hasExposedModuleFederationRemote(config.plugins)) return;
if (isHttpPublicPath(config.output?.publicPath)) config.output = {
...config.output,
publicPath: 'auto'
};
}
function isNodeCompiler(config) {
return 'node' === config.name || hasNodeTarget(config.target);
}
function hasNodeTarget(target) {
const targets = Array.isArray(target) ? target : [
target
];
return targets.some((value)=>'string' == typeof value && value.toLowerCase().includes('node'));
}
function hasExposedModuleFederationRemote(plugins = []) {
return plugins.some((plugin)=>{
const options = getModuleFederationOptions(plugin);
return Boolean(options && hasExposes(options.exposes));
});
}
function getModuleFederationOptions(plugin) {
if (!isRecord(plugin)) return null;
const candidate = plugin;
const pluginName = candidate.name ?? candidate.constructor?.name;
if (!pluginName?.includes('ModuleFederationPlugin')) return null;
const rawOptions = candidate._options;
if (!isRecord(rawOptions)) return null;
const nestedConfig = rawOptions['config'];
return isRecord(nestedConfig) ? nestedConfig : rawOptions;
}
function hasExposes(exposes) {
if (Array.isArray(exposes)) return exposes.length > 0;
return isRecord(exposes) ? Object.keys(exposes).length > 0 : false;
}
function isRecord(value) {
return 'object' == typeof value && null !== value;
}
function isHttpPublicPath(value) {
return 'string' == typeof value && /^https?:\/\//i.test(value);
}
exports.moduleFederationPublicPathPlugin = __webpack_exports__.moduleFederationPublicPathPlugin;
exports.setPortableModuleFederationPublicPath = __webpack_exports__.setPortableModuleFederationPublicPath;
for(var __rspack_i in __webpack_exports__)if (-1 === [
"moduleFederationPublicPathPlugin",
"setPortableModuleFederationPublicPath"
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
Object.defineProperty(exports, '__esModule', {
value: true
});
//# sourceMappingURL=moduleFederationPublicPathPlugin.js.map