zephyr-xpack-internal
Version:
Xpack internals for Zephyr
114 lines (113 loc) • 4.39 kB
JavaScript
import "node:module";
import { ZeErrors, ZephyrError, resolveMfManifestPath, zeBuildDashData, ze_log } from "zephyr-agent";
import { extractFederatedConfig } from "../xpack-extract/extract-federation-config.mjs";
import { mergeModuleFederationBuildMetadata, mergeModuleFederationConfigs } from "../xpack-extract/federation-config-metadata.mjs";
import { FederationDashboardPlugin } from "./utils/federation-dashboard-plugin/FederationDashboardPlugin.mjs";
function getFederationConfigEntries(mfConfig) {
const plugins = mfConfig ? Array.isArray(mfConfig) ? mfConfig : [
mfConfig
] : [];
return plugins.flatMap((plugin)=>{
const config = extractFederatedConfig(plugin);
return config ? [
{
plugin,
config
}
] : [];
});
}
function getModuleFederationConfigs(mfConfig) {
return mergeModuleFederationConfigs([
getFederationConfigEntries(mfConfig).map(({ config })=>JSON.parse(JSON.stringify(config)))
]);
}
function getModuleFederationBuildMetadata(mfConfig) {
return mergeModuleFederationBuildMetadata([
getFederationConfigEntries(mfConfig).map(({ plugin, config })=>{
const emitsManifest = void 0 !== config.manifest || 'name' in plugin && 'string' == typeof plugin.name;
return {
name: config.name,
remote: config.filename,
mf_manifest: emitsManifest ? resolveMfManifestPath(config.manifest) : void 0,
library_type: config.library?.type ?? 'var',
exposes: config.exposes,
shared: config.shared
};
})
]);
}
async function getBuildStats({ stats, stats_json, pluginOptions, EDGE_URL, DOMAIN, PLATFORM, TYPE, DELIMITER: delimiter }) {
ze_log.app('get build stats started. create federation dashboard plugin');
const ze_engine = pluginOptions.zephyr_engine;
const app = ze_engine.applicationProperties;
const { git } = ze_engine.gitProperties;
const context = ze_engine.env;
const version = await ze_engine.snapshotId;
const application_uid = ze_engine.application_uid;
const buildId = await ze_engine.build_id;
const build_target = ze_engine.env.target ?? 'web';
const federation = getModuleFederationBuildMetadata(pluginOptions.mfConfig);
const legacyFederation = 1 === federation.length ? federation[0] : void 0;
const legacyFederationFields = legacyFederation ?? {
name: app.name,
remote: void 0,
mf_manifest: void 0,
library_type: void 0,
exposes: void 0,
shared: void 0
};
const remotes = ze_engine.federated_dependencies;
const data_overrides = {
id: application_uid,
...legacyFederationFields,
federation,
edge: {
url: EDGE_URL,
delimiter
},
domain: DOMAIN,
platform: PLATFORM,
type: TYPE ?? 'app',
app: Object.assign({}, app, {
buildId
}),
version,
git,
remotes: remotes?.map(({ application_uid })=>application_uid) ?? [],
context,
build_target,
zephyrDependencies: ze_engine.zephyr_dependencies
};
if ('tap-app' === build_target) {
const baseline = await zeBuildDashData(ze_engine);
const tapBuildStats = {
...baseline,
...data_overrides,
project: legacyFederation?.name ?? app.name,
tags: baseline.tags ?? []
};
ze_log.app('get tap-app build stats done.', tapBuildStats);
return tapBuildStats;
}
const dashboardPlugin = new FederationDashboardPlugin({
app,
git,
context
});
ze_log.app('process webpack graph.pluginOptions', pluginOptions);
const convertedGraph = dashboardPlugin.processWebpackGraph({
stats,
stats_json,
pluginOptions
});
if (!convertedGraph) throw new ZephyrError(ZeErrors.ERR_CONVERT_GRAPH_TO_DASHBOARD);
const res = Object.assign({}, convertedGraph, data_overrides, {
project: legacyFederation?.name ?? app.name,
tags: []
});
ze_log.app('get build stats done.', res);
return res;
}
export { getBuildStats, getModuleFederationBuildMetadata, getModuleFederationConfigs };
//# sourceMappingURL=get-build-stats.mjs.map