CoolFace
Apppublic

Leon4gr45/builder

sourceHugging Facemitupdated 2d agoView on Hugging Face
0likes
build-delegation-handler.ts49 linesDownload Raw Back to server-generate
1// lib/server-generate/build-delegation-handler.ts2import { vfs } from '@/lib/vfs';3import { handleFilesChanged } from './file-sync-handler';4 5export async function handleBuildRequested(data: {6  sourceProjectId: string;7  taskId: string;8  fileManifest?: Record<string, number>;9}): Promise<void> {10  const { sourceProjectId, taskId, fileManifest } = data;11 12  try {13    if (fileManifest) {14      const stalePaths = Object.keys(fileManifest);15      if (stalePaths.length > 0) {16        await handleFilesChanged({ sourceProjectId, paths: stalePaths, taskId });17      }18    }19 20    const { VirtualServer } = await import('@/lib/preview/virtual-server');21    const { drainCompileErrors } = await import('@/lib/preview/compile-errors');22 23    const project = await vfs.getProject(sourceProjectId);24    if (!project) {25      await postBuildResult(taskId, false, ['Project not found']);26      return;27    }28 29    const server = new VirtualServer(vfs, sourceProjectId, { runtime: project.settings?.runtime });30    await server.compileProject();31    server.cleanupBlobUrls();32 33    const compileErrors = drainCompileErrors();34    const errorMessages = compileErrors.map((e) => `${e.file}: ${e.error}`);35    await postBuildResult(taskId, errorMessages.length === 0, errorMessages);36  } catch (error) {37    const message = error instanceof Error ? error.message : String(error);38    await postBuildResult(taskId, false, [message]);39  }40}41 42async function postBuildResult(taskId: string, success: boolean, errors?: string[]): Promise<void> {43  await fetch('/api/server-generate/build-result', {44    method: 'POST',45    headers: { 'Content-Type': 'application/json' },46    body: JSON.stringify({ taskId, success, errors }),47  });48}49