import { readSettings, getPageData } from "./pageContext.js"; import { uploadPathUploads } from "../pathOperations/uploadPathUploads.js"; import { deletePathUploads } from "../pathOperations/deletePathUploads.js"; import { validateDirSettings, displayUploadPlan } from "./settingsValidation.js"; import { validateAndGetFilesFromDir } from "./validateAndGetFilesFromDir.js"; import { populateCache } from "./populateCache.js"; import { createPrefixLog } from "./prefixLog.js"; import { createLoggedFs } from "./createLoggedFs.js"; import { resolveTarget } from "./resolveTarget.js"; import { logData } from "./logData.js"; /** * Create a push command from a push primitive (e.g. pushPathViaGit). * * The harness handles: * 1. Resolving target (server, credentials) * 2. Reading settings.json * 3. Validating template/slot directories vs settings * 4. Building page contexts via getPageData * 5. Optionally displaying upload plan + confirmation (tar flow) * 6. Pushing each context via the primitive * 7. Uploading/deleting uploads for each context * 8. Populating cache */ export function pushHarness(pushPrimitive, options) { return async (ctx, source) => { const log = createPrefixLog(ctx.cliName, 'push'); const target = await resolveTarget(ctx, log, source); const { serverUrl, documentPath } = target; const settings = await readSettings(); if (!settings) { throw new Error('Could not determine document path from settings.json'); } settings.path = documentPath; // Validate dirs await validateDirSettings(settings, ctx.cliName, createLoggedFs(log, ctx.cwd)); // Build contexts const contexts = await getPageData(settings, serverUrl, target.auth, log, { prompt: ctx.prompt, }); // Validate files for each context for (const pathCtx of contexts) { await validateAndGetFilesFromDir(pathCtx.dir); } // Show upload plan + confirm (tar flow) if (options?.showPlan) { const proceed = await displayUploadPlan({ contexts, settings, serverUrl, auth: target.auth, log, prompt: options.prompt, }); if (!proceed) return; } try { // Push each context for (const pathCtx of contexts) { await pushPrimitive(pathCtx); } // Upload/delete for each context for (const pathCtx of contexts) { await uploadPathUploads(pathCtx); await deletePathUploads(pathCtx); } } catch (error) { throw new Error(`Push failed: ${error.message}`); } await populateCache(target, log); const normalizedPath = documentPath.startsWith('/') ? documentPath.slice(1) : documentPath; const url = normalizedPath ? `${serverUrl}/${normalizedPath}` : serverUrl; if (ctx.json) { logData({ url }, true); } else { log.info(`url: ${url}`); } }; } //# sourceMappingURL=pushHarness.js.map