everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
57 lines (55 loc) • 2.8 kB
JavaScript
const require_theme = require('../../utils/theme.cjs');
const require_string = require('../../utils/string.cjs');
const require_timing = require('../../utils/timing.cjs');
//#region src/cli/render/deploy-train.ts
/** The Build section's attributed warnings block: one sub-block per workspace
* that has them, name-padded like every other row (#431). */
function renderBuildWarnings(deployResults) {
const withWarnings = deployResults.filter((r) => (r.warnings ?? []).length > 0);
if (withWarnings.length === 0) return;
console.log();
console.log(` ${require_theme.colors.yellow("⚠")} Build warnings:`);
for (const result of withWarnings) for (const warning of result.warnings ?? []) {
const lines = warning.split("\n");
console.log(` ${require_string.padRight(result.key, NAME_COLUMN)} ${require_theme.colors.dim(lines[0] ?? "")}`);
for (const continuation of lines.slice(1)) console.log(` ${require_string.padRight("", NAME_COLUMN)} ${require_theme.colors.dim(continuation)}`);
}
}
const NAME_COLUMN = 28;
/**
* The deploy train's sectioned renderer (#431): Build / Upload / Publish /
* Image+Railway, one consistent name-padded column, deterministic order (the
* train reports outcomes in target order — parallel units never interleave).
* Default view: one line per workspace upload; detail lines only under
* --verbose.
*/
const cliDeployTrainRender = {
cdnBanner: (storageOrigin) => {
console.log();
console.log(` CDN deploy — uploading workspace dists to ${storageOrigin}...`);
},
uploadOutcome: (outcome) => {
const name = require_string.padRight(outcome.key, NAME_COLUMN);
if (!outcome.ok) {
console.log(` ${require_theme.colors.error(require_theme.icons.err)} ${name} upload failed`);
return;
}
console.log(` ${require_theme.colors.green(require_theme.icons.ok)} ${name} → ${outcome.base} (${outcome.uploaded} uploaded, ${outcome.skipped} skipped, ${require_timing.formatDuration(outcome.durationMs ?? 0)})`);
if (outcome.detailNotes) for (const note of outcome.detailNotes) console.log(` ${require_theme.colors.dim(`${require_string.padRight("", NAME_COLUMN)} ${note}`)}`);
},
publish: (info) => {
console.log();
console.log(" Publishing to:");
console.log(` ${require_theme.colors.cyan(info.registryUrl)}`);
console.log(` ${require_theme.colors.dim("Fingerprint:")} ${info.fingerprint}`);
for (const [slot, pin] of info.slotPins) {
console.log(` ${require_theme.colors.dim(`${slot}:`)}`);
console.log(` ${pin}`);
}
console.log(` ${require_theme.colors.dim(`+ per-deploy manifest ${info.auditManifestFile} (audit trail)`)}`);
}
};
//#endregion
exports.cliDeployTrainRender = cliDeployTrainRender;
exports.renderBuildWarnings = renderBuildWarnings;
//# sourceMappingURL=deploy-train.cjs.map