UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

142 lines (140 loc) • 9.87 kB
const require_theme = require('../../utils/theme.cjs'); const require_exit_codes = require('../exit-codes.cjs'); const require_sync = require('../render/sync.cjs'); //#region src/cli/commands/scaffold.ts const scaffoldRenderers = { import: async (result, ctx) => { if (ctx.input.json) { console.log(JSON.stringify(result, null, 2)); return; } console.log(); if (require_exit_codes.exitCodeFor(result) === 1) { console.error(`[CLI] ${result.error || "Unknown error"}`); if (result.reportPath) console.error(` Report: ${result.reportPath}`); process.exit(1); } if (result.sourceRepository) console.log(` ${require_theme.colors.dim("Upstream:")} ${result.sourceRepository} @ ${result.ref || "default branch"}${result.resolvedSha ? require_theme.colors.dim(` (commit ${result.resolvedSha})`) : ""}`); for (const warning of result.warnings ?? []) console.log(` ${require_theme.colors.yellow("Note:")} ${warning}`); if (result.status === "dry-run") console.log(require_theme.colors.cyan(`${require_theme.icons.ok} Dry run — no files written`)); else if (result.status === "imported") console.log(require_theme.colors.green(`${require_theme.icons.ok} Imported ${result.workspace} from ${result.from}`)); else console.log(require_theme.colors.yellow(`${require_theme.icons.err} Conflicts — nothing written`)); console.log(` ${require_theme.colors.dim("Results:")} ${result.updated.length} updated, ${result.added.length} added, ${result.merged.length} merged, ${result.conflicts.length} conflicted, ${result.preservedLocal.length} local-only preserved, ${result.unchanged.length} unchanged`); if (result.conflicts.length > 0) { const heldSet = new Set(result.heldBackMigrations ?? []); console.log(` ${require_theme.colors.yellow("Conflicts")} (unresolvable — manual-port checklist${result.status === "conflicts" ? "; re-run with --yes to apply upstream" : result.backupDir ? `, upstream applied, local copies at ${result.backupDir}` : ""}):`); for (const file of result.conflicts) console.log(` ${require_theme.colors.dim(heldSet.has(file) ? `${file} (held — migration chain)` : file)}`); } if (result.heldBackMigrations?.length > 0) { console.log(` ${require_theme.colors.yellow("Migration chain held back")}:`); for (const file of result.heldBackMigrations) console.log(` ${require_theme.colors.dim(file)}`); } if (result.migrationCollisions.length > 0) { console.log(` ${require_theme.colors.yellow("Unresolvable migration collisions")}:`); for (const collision of result.migrationCollisions) console.log(` ${require_theme.colors.dim(collision.message)}`); } if (result.migrationReconciliation && result.migrationReconciliation.appended.length > 0) { console.log(` ${require_theme.colors.green("Migration chain reconciled")}: ${result.migrationReconciliation.kept.length} applied migration(s) kept, ${result.migrationReconciliation.appended.length} appended:`); for (const append of result.migrationReconciliation.appended) console.log(` ${require_theme.colors.dim(`${append.fromTag} → ${append.toTag} (idx ${append.idx})`)}`); console.log(` ${require_theme.colors.dim("Next boot applies the appended migration(s); renamed snapshots should be reviewed against `drizzle-kit generate` before generating new migrations.")}`); } else if (result.migrationReconciliation && result.migrationReconciliation.contentMatched.length > 0) console.log(` ${require_theme.colors.dim("Migration chain:")} every upstream migration is already applied (kept: ${result.migrationReconciliation.kept.length}, matched by content: ${result.migrationReconciliation.contentMatched.length})`); if (result.routeDelta && (result.routeDelta.oursOnly.length > 0 || result.routeDelta.theirsOnly.length > 0)) { console.log(` ${require_theme.colors.dim("Route delta:")} ${result.routeDelta.oursOnly.length} ours-only, ${result.routeDelta.theirsOnly.length} theirs-only`); for (const route of result.routeDelta.oursOnly) console.log(` ${require_theme.colors.dim(`ours: ${route}`)}`); for (const route of result.routeDelta.theirsOnly) console.log(` ${require_theme.colors.dim(`theirs: ${route}`)}`); } if (result.reportPath) console.log(` Report: ${require_theme.colors.dim(result.reportPath)}`); if (result.status === "conflicts") { console.log(); console.error(`[CLI] ${result.conflicts.length} unresolvable conflict(s)${result.migrationCollisions.length > 0 ? ` and ${result.migrationCollisions.length} migration collision(s)` : ""} — nothing was written. Re-run with --yes to apply upstream (local copies are backed up first).`); process.exit(1); } console.log(); }, upgrade: async (result, ctx) => { const input = ctx.input; if (input.json) { console.log(JSON.stringify(result, null, 2)); return; } console.log(); if (result.status === "already-upgraded") { console.log(require_theme.colors.green(`${require_theme.icons.ok} Already upgraded · v2 — nothing to do`)); for (const note of result.notes ?? []) console.log(` ${require_theme.colors.dim(note)}`); console.log(); return; } if (result.status === "audit") { const audit = result.audit; const findings = audit?.findings ?? []; const blockers = findings.filter((f) => f.severity === "blocker"); const warns = findings.filter((f) => f.severity === "warn"); console.log(require_theme.colors.cyan(`v1 upgrade audit — Tier ${audit?.tier ?? "?"}`)); console.log(` ${require_theme.colors.dim(`blockers: ${blockers.length}, warns: ${warns.length}`)}`); const formatFinding = (f) => ` [${f.severity}] ${f.check} ${f.path}: ${f.message}`; for (const f of blockers) console.log(require_theme.colors.error(formatFinding(f))); for (const f of warns) console.log(require_theme.colors.yellow(formatFinding(f))); console.log(` ${require_theme.colors.dim("manifest: .bos/v2-upgrade-manifest.json")}`); console.log(); return; } if (result.status === "gate-blocked") { console.error(require_theme.colors.error("\nGATE BLOCKED — normalize in v1 before upgrading to v2.")); for (const blocker of result.blockers ?? []) console.error(` [${blocker.severity}] ${blocker.check} ${blocker.path}: ${blocker.message}`); console.error(); process.exit(1); } if (require_exit_codes.exitCodeFor(result) === 1) { console.error(`[CLI] ${result.error || "Unknown error"}`); process.exit(1); } if (result.status === "dry-run") console.log(require_theme.colors.cyan(`${require_theme.icons.ok} Dry run — no changes applied`)); else console.log(require_theme.colors.green(`${require_theme.icons.ok} Upgrade complete`)); if (result.platform) console.log(` ${require_theme.colors.dim(`Platform ${result.platform.resolved}${result.platform.fromCache ? " (cached)" : ""} — ${result.platform.source}`)}`); const mainPkg = result.packages.find((p) => p.name === "everything-dev"); const versionDelta = mainPkg?.from && mainPkg.from !== mainPkg.to ? `${mainPkg.from} → ${mainPkg.to}` : null; if (versionDelta) console.log(` ${require_theme.colors.dim(`Upgraded everything-dev ${versionDelta}`)}`); for (const pkg of result.packages) { if (pkg.name === "everything-dev") continue; if (pkg.from && pkg.from !== pkg.to) console.log(` ${require_theme.colors.dim(`${pkg.name} ${pkg.from} → ${pkg.to}`)}`); else if (!pkg.from) console.log(` ${require_theme.colors.dim(`${pkg.name} ${pkg.to} (new)`)}`); else if (result.status !== "dry-run") console.log(` ${require_theme.colors.dim(`${pkg.name} ${pkg.to} (up to date)`)}`); } if (result.changelogUrl) console.log(` Changelog: ${result.changelogUrl}`); for (const note of result.notes ?? []) console.log(` ${require_theme.colors.dim(`note: ${note}`)}`); if (result.status === "dry-run" && input.check) { if (result.updatesAvailable) { console.log(require_theme.colors.yellow(`${require_theme.icons.err} Updates available — run \`bos upgrade\``)); console.log(); process.exit(1); } console.log(require_theme.colors.green(`${require_theme.icons.ok} Up to date`)); console.log(); process.exit(0); } if (result.sync) { console.log(` ${require_theme.colors.dim("Sync results:")}`); require_sync.printSyncOutcome(result.sync); } if (result.migrated && result.migrated.length > 0) { console.log(` Migrated: ${result.migrated.length} file(s)`); for (const f of result.migrated) console.log(` ${require_theme.colors.dim(f)}`); } if (versionDelta || result.sync && result.sync.conflicted.length > 0) { console.log(); console.log(require_theme.colors.dim(" For AI agents:")); const somedelta = mainPkg?.from && mainPkg.to ? `v${mainPkg.from.replace(/^[\^~>=v]+/, "")}...v${mainPkg.to.replace(/^[\^~>=v]+/, "")}` : ""; console.log(require_theme.colors.dim(` This upgrade applied template changes${somedelta ? ` (${somedelta})` : ""}.`)); if (result.sync && result.sync.conflicted.length > 0) { console.log(require_theme.colors.dim(` ${result.sync.conflicted.length} file(s) were applied over local conflicts — backups at ${result.sync.backupDir || ".bos/sync-backup/"}.`)); console.log(require_theme.colors.dim(` If local changes should be preserved upstream, file an issue: ${require_sync.UPSTREAM_ISSUE_URL} (or open a PR).`)); } console.log(require_theme.colors.dim(" Load matching intent skills: pnpm dlx @tanstack/intent@latest load everything-dev#...")); console.log(require_theme.colors.dim(" Review AGENTS.md — local updates may need merging.")); } else if (!versionDelta) console.log(require_theme.colors.dim(" Framework version unchanged — template files untouched; changes land on the next release.")); console.log(); } }; //#endregion exports.scaffoldRenderers = scaffoldRenderers; //# sourceMappingURL=scaffold.cjs.map