eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.15 kB
JavaScript
import{mkdir,rename,rm,stat}from"node:fs/promises";import{dirname}from"node:path";import{pathExists}from"#shared/path-exists.js";async function assertStagedPublicationExists(e){await Promise.all([stat(e.stagedOutputDir),stat(e.stagedSummaryPath)])}async function prepareOutputPublication(e){[e.hadOutput,e.hadSummary]=await Promise.all([pathExists(e.finalOutputDir),pathExists(e.finalSummaryPath)]),await Promise.all([mkdir(dirname(e.finalOutputDir),{recursive:!0}),mkdir(dirname(e.finalSummaryPath),{recursive:!0})])}async function backupOutputPublication(e){e.hadOutput&&await rename(e.finalOutputDir,e.outputBackupPath),e.hadSummary&&await rename(e.finalSummaryPath,e.summaryBackupPath)}async function installOutputPublication(e,t){await rename(e.stagedOutputDir,e.finalOutputDir),await t(),await rename(e.stagedSummaryPath,e.finalSummaryPath)}async function rollbackOutputPublication(e){let t=(await Promise.allSettled([rollbackArtifact({backupPath:e.outputBackupPath,finalPath:e.finalOutputDir,hadPrevious:e.hadOutput,stagedPath:e.stagedOutputDir}),rollbackArtifact({backupPath:e.summaryBackupPath,finalPath:e.finalSummaryPath,hadPrevious:e.hadSummary,stagedPath:e.stagedSummaryPath})])).flatMap(e=>e.status===`rejected`?[e.reason]:[]);if(t.length>0)throw AggregateError(t,`Failed to restore the previous build publication.`)}async function removeOutputPublicationBackups(e){await Promise.all([rm(e.outputBackupPath,{force:!0,recursive:!0}),rm(e.summaryBackupPath,{force:!0,recursive:!0})])}async function rollbackArtifact(e){if(await pathExists(e.backupPath)){!await pathExists(e.stagedPath)&&await pathExists(e.finalPath)?(await mkdir(dirname(e.stagedPath),{recursive:!0}),await rename(e.finalPath,e.stagedPath)):await rm(e.finalPath,{force:!0,recursive:!0}),await rename(e.backupPath,e.finalPath);return}!e.hadPrevious&&!await pathExists(e.stagedPath)&&await pathExists(e.finalPath)&&(await mkdir(dirname(e.stagedPath),{recursive:!0}),await rename(e.finalPath,e.stagedPath))}export{assertStagedPublicationExists,backupOutputPublication,installOutputPublication,prepareOutputPublication,removeOutputPublicationBackups,rollbackOutputPublication};