UNPKG

zephyr-xpack-internal

Version:

Xpack internals for Zephyr

97 lines (96 loc) • 4.72 kB
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