/** Lock file path: `/.absolutejs/build.lock` where * projectRoot is `dirname(buildDirectory)`. Single file (NOT a dir * inside build/) — placing it inside .absolutejs avoids interfering * with watcher includes scoped to src/, db/, assets/, styles/. */ export declare const lockPathForBuildDirectory: (buildDirectory: string) => string; /** Update the metadata in an already-acquired lock (e.g. fill in the * resolved dev-server port once it's been chosen). No-op if we don't * hold the lock for this build dir. */ export declare const updateLockMetadata: (buildDirectory: string, updates: { pid?: number; port?: number | null; }) => void; export declare const acquireBuildDirectoryLock: (buildDirectory: string, options?: { port?: number | null; /** When true, an alive holder makes us wait (polling every * 250ms up to `waitTimeoutMs`) instead of throwing immediately. * Default: true. Dev-server startup passes `wait: false` so * the user gets a fast Vite-style error pointing them at the * next free port. CLI build/compile leave it true so concurrent * invocations against a shared outdir serialize cleanly. */ wait?: boolean; waitTimeoutMs?: number; }) => Promise<() => Promise>; export declare const withBuildDirectoryLock: (buildDirectory: string, action: () => Promise, options?: { port?: number | null; wait?: boolean; waitTimeoutMs?: number; }) => Promise;