vite-plugin-zephyr
Version:
Vite plugin for Zephyr
110 lines (109 loc) • 4.21 kB
JavaScript
import { ZeErrors, ZephyrError, resolveMfManifestPath } from "zephyr-agent";
function nonEmptyString(value) {
return 'string' == typeof value && value.trim() ? value : void 0;
}
function serializeConfig(config) {
try {
const serialized = JSON.stringify(config);
if (!serialized) throw new Error('configuration did not serialize to JSON');
return JSON.parse(serialized);
} catch {
throw new ZephyrError(ZeErrors.ERR_DEPLOY_LOCAL_BUILD, {
message: 'Vite Module Federation configuration must be JSON-serializable before Zephyr can publish it.'
});
}
}
function stableJson(value) {
if (null === value || 'object' != typeof value) return JSON.stringify(value) ?? 'undefined';
if (Array.isArray(value)) return `[${value.map((item)=>stableJson(item)).join(',')}]`;
const record = value;
return `{${Object.keys(record).sort().map((key)=>`${JSON.stringify(key)}:${stableJson(record[key])}`).join(',')}}`;
}
function getConfigIdentities(config) {
return [
nonEmptyString(config.name) ? `name:${config.name}` : void 0,
nonEmptyString(config.filename) ? `entry:${config.filename}` : void 0
].filter((identity)=>!!identity);
}
function mergeViteModuleFederationConfigs(configLists) {
const byFingerprint = new Set();
const byIdentity = new Map();
const merged = [];
for (const sourceConfig of configLists.flatMap((configs)=>configs ?? [])){
const config = serializeConfig(sourceConfig);
const fingerprint = stableJson(config);
if (!byFingerprint.has(fingerprint)) {
for (const identity of getConfigIdentities(config)){
const existing = byIdentity.get(identity);
if (existing && existing !== fingerprint) throw new ZephyrError(ZeErrors.ERR_DEPLOY_LOCAL_BUILD, {
message: `Conflicting Vite Module Federation configuration for ${identity}.`
});
}
byFingerprint.add(fingerprint);
for (const identity of getConfigIdentities(config))byIdentity.set(identity, fingerprint);
merged.push(config);
}
}
return merged;
}
function stringRecord(value) {
if (!value || 'object' != typeof value || Array.isArray(value) || !Object.values(value).every((entry)=>'string' == typeof entry)) return;
return value;
}
function getLegacyConfig(configs) {
const config = 1 === configs.length ? configs[0] : void 0;
const name = nonEmptyString(config?.name);
const filename = nonEmptyString(config?.filename);
if (!config || !name || !filename) return;
const remotes = stringRecord(config.remotes);
return {
name,
filename,
...config.exposes ? {
exposes: config.exposes
} : {},
...remotes ? {
remotes
} : {},
...config.shared ? {
shared: config.shared
} : {},
...config.runtimePlugins ? {
runtimePlugins: config.runtimePlugins
} : {},
...void 0 !== config.manifest ? {
manifest: config.manifest
} : {}
};
}
function libraryType(library) {
if ('string' == typeof library) return library;
if (library && !Array.isArray(library)) return library.type;
}
function createViteModuleFederationPublicationMetadata(configs) {
const mfConfigs = mergeViteModuleFederationConfigs([
configs
]);
const mfConfig = getLegacyConfig(mfConfigs);
const federation = mfConfigs.map((config)=>({
name: config.name,
remote: config.filename,
mf_manifest: resolveMfManifestPath(config.manifest),
library_type: libraryType(config.library),
exposes: config.exposes,
shared: config.shared
}));
return {
...mfConfigs.length > 0 ? {
mfConfigs
} : {},
...mfConfig ? {
mfConfig
} : {},
...federation.length > 0 ? {
federation
} : {}
};
}
export { createViteModuleFederationPublicationMetadata, getConfigIdentities, mergeViteModuleFederationConfigs };
//# sourceMappingURL=federation-metadata.mjs.map