zephyr-xpack-internal
Version:
Xpack internals for Zephyr
63 lines (62 loc) • 3.32 kB
JavaScript
import "node:module";
import { XPackBuildCoordinator } from "./xpack-build-coordinator.mjs";
import * as __rspack_external_node_path_806ed179 from "node:path";
function isServerTarget(target) {
const targets = Array.isArray(target) ? target : [
target
];
return targets.some((item)=>'string' == typeof item && /^(?:(?:async-)?node(?:\d+(?:\.\d+)*)?|electron-main)$/.test(item));
}
function commonDirectory(paths) {
if (0 === paths.length) return;
const split = paths.map((item)=>__rspack_external_node_path_806ed179.resolve(item).split(__rspack_external_node_path_806ed179.sep));
const length = Math.min(...split.map((parts)=>parts.length));
let index = 0;
while(index < length && split.every((parts)=>parts[index] === split[0]?.[index]))index += 1;
const common = split[0]?.slice(0, index).join(__rspack_external_node_path_806ed179.sep);
return common ? common || __rspack_external_node_path_806ed179.parse(paths[0]).root : void 0;
}
function coordinateXPackCompilers(engine, configs, options = {}) {
const usedNames = new Set();
const outputPaths = configs.map((config)=>config.output?.path).filter((item)=>!!item);
const outputRoot = outputPaths.length === configs.length ? commonDirectory(outputPaths) : void 0;
const hasDistinctOutputPaths = new Set(outputPaths.map((item)=>__rspack_external_node_path_806ed179.resolve(item))).size > 1;
const preserveTapArtifactPaths = engine.env?.target === 'tap-app';
const compilers = configs.map((config, index)=>{
const role = isServerTarget(config.target) ? 'server' : 'client';
const baseName = config.name?.trim() || `${role}-${index}`;
let participant = baseName;
let suffix = 1;
while(usedNames.has(participant))participant = `${baseName}-${suffix++}`;
usedNames.add(participant);
let assetPrefix;
if (!preserveTapArtifactPaths && hasDistinctOutputPaths && outputRoot && config.output?.path) {
const relative = __rspack_external_node_path_806ed179.relative(outputRoot, __rspack_external_node_path_806ed179.resolve(config.output.path));
if (relative && '.' !== relative && !relative.startsWith('..')) assetPrefix = relative.split(__rspack_external_node_path_806ed179.sep).join('/');
}
return {
participant,
role,
assetPrefix
};
});
const inferredSnapshotType = preserveTapArtifactPaths ? 'csr' : compilers.some(({ role })=>'server' === role) ? 'ssr' : 'csr';
const participantByConfigName = new Map();
configs.forEach((config, index)=>{
if (config.name?.trim() && compilers[index]) participantByConfigName.set(config.name.trim(), compilers[index].participant);
});
const coordinator = new XPackBuildCoordinator(engine, compilers.map(({ participant, role }, index)=>({
name: participant,
role,
dependencies: (configs[index]?.dependencies ?? []).map((dependency)=>participantByConfigName.get(dependency) ?? dependency)
})), {
...options,
snapshotType: options.snapshotType ?? inferredSnapshotType
});
return {
coordinator,
compilers
};
}
export { coordinateXPackCompilers };
//# sourceMappingURL=multi-compiler-coordinator.mjs.map