UNPKG

vite-plugin-zephyr

Version:

Vite plugin for Zephyr

110 lines (109 loc) • 4.21 kB
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