zephyr-xpack-internal
Version:
Xpack internals for Zephyr
97 lines (96 loc) • 4.72 kB
JavaScript
import "node:module";
import { xpack_zephyr_agent } from "../xpack-extract/ze-xpack-upload-agent.mjs";
import { ZeErrors, ZephyrError } from "zephyr-agent";
import * as __rspack_external_node_path_806ed179 from "node:path";
function dependencyList(dependencies) {
return dependencies ? [
...dependencies
].filter((value)=>'string' == typeof value) : [];
}
function collectDependencyPaths(compilation) {
return {
fileDependencies: dependencyList(compilation.fileDependencies),
contextDependencies: dependencyList(compilation.contextDependencies),
missingDependencies: dependencyList(compilation.missingDependencies),
buildDependencies: dependencyList(compilation.buildDependencies)
};
}
function setupZeDeploy(pluginOptions, compiler) {
const { pluginName } = pluginOptions;
let generation = 0;
const finalizedUploads = new WeakMap();
const getSuccessfulStats = (compilation)=>{
const stats = compilation.getStats();
if (!stats.hasErrors?.() && (compilation.errors?.length ?? 0) === 0) return stats;
const error = new ZephyrError(ZeErrors.ERR_DEPLOY_LOCAL_BUILD, {
message: `Zephyr will not upload ${pluginOptions.participant ?? 'xpack'} output because the compilation contains errors.`
});
if (pluginOptions.coordinator && pluginOptions.participant) pluginOptions.coordinator.failParticipant(pluginOptions.participant, error);
else if (pluginOptions.zephyr_engine.hasActiveBuild) pluginOptions.zephyr_engine.build_failed();
throw error;
};
const upload = async (compilation, assets, compilationGeneration, assetsAreFinal)=>{
const stats = getSuccessfulStats(compilation);
const stats_json = stats.toJson();
if (!pluginOptions.coordinator) try {
await pluginOptions.zephyr_engine.start_new_build();
} catch (error) {
if (false !== pluginOptions.zephyr_engine.hasActiveBuild) pluginOptions.zephyr_engine.build_failed();
throw error;
}
await xpack_zephyr_agent({
stats,
stats_json,
assets,
pluginOptions: {
...pluginOptions,
generation: compilationGeneration,
dependencyPaths: collectDependencyPaths(compilation),
wait_for_index_html: assetsAreFinal ? false : pluginOptions.wait_for_index_html
}
});
console.log();
};
if (pluginOptions.wait_for_index_html) compiler.hooks.afterEmit.tapPromise(pluginName, async (compilation)=>{
const pending = finalizedUploads.get(compilation);
if (!pending) return;
finalizedUploads.delete(compilation);
await upload(compilation, pending.assets, pending.generation, true);
});
if (pluginOptions.coordinator && pluginOptions.participant) {
const participant = pluginOptions.participant;
compiler.hooks.invalid?.tap(pluginName, (filename)=>{
const invalidatedPath = filename ? __rspack_external_node_path_806ed179.resolve(compiler.context ?? process.cwd(), filename) : filename;
pluginOptions.coordinator?.invalidateParticipant(participant, invalidatedPath);
});
}
compiler.hooks.failed?.tap(pluginName, (error)=>{
if (pluginOptions.coordinator && pluginOptions.participant) pluginOptions.coordinator.failParticipant(pluginOptions.participant, error);
else if (false !== pluginOptions.zephyr_engine.hasActiveBuild) pluginOptions.zephyr_engine.build_failed();
});
compiler.hooks.thisCompilation.tap(pluginName, (compilation)=>{
const compilationGeneration = generation++;
if (pluginOptions.coordinator) {
if (!pluginOptions.participant) throw new ZephyrError(ZeErrors.ERR_DEPLOY_LOCAL_BUILD, {
message: 'A coordinated xpack build requires a participant name'
});
pluginOptions.coordinator.beginParticipant(pluginOptions.participant, compilationGeneration);
}
compilation.hooks.processAssets.tapPromise({
name: pluginName,
stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT
}, async (assets)=>{
if (pluginOptions.wait_for_index_html) {
getSuccessfulStats(compilation);
finalizedUploads.set(compilation, {
assets,
generation: compilationGeneration
});
return;
}
await upload(compilation, assets, compilationGeneration, false);
});
});
}
export { setupZeDeploy };
//# sourceMappingURL=ze-setup-ze-deploy.mjs.map