/**
 * Node-only filesystem byte-source helpers for `apply`.
 *
 * `fileSetFromDir(path)` walks a directory and emits a path-keyed `FileSet`
 * of `FsFileSource` markers. The SDK normalizer reads each file's bytes
 * lazily during the plan/upload phases — never loaded into memory at
 * collection time. Suitable for multi-GB build outputs.
 */
import type { FileSet } from "../namespaces/deploy.types.js";
export interface FileSetFromDirOptions {
    /** Additional names to skip at any depth. Merged with the default ignore
     *  list (`.git`, `node_modules`, `.DS_Store`) and, unless
     *  `includeSensitive` is true, common secret-bearing filenames. */
    ignore?: Iterable<string>;
    /** Include dotenv, npmrc, and private-key-like files that are skipped by
     *  default. Use only when these files are intentional deploy artifacts. */
    includeSensitive?: boolean;
}
/**
 * Walk a directory and return a `FileSet` whose values are `FsFileSource`
 * markers. Each marker holds an absolute path and an extension-derived
 * content-type; the deploy normalizer hashes and uploads each file from
 * disk on demand.
 *
 * Skips `.git`, `node_modules`, `.DS_Store`, common secret-bearing filenames
 * like `.env`, `.npmrc`, and private-key material (plus any names in
 * `opts.ignore`) at every depth. Pass `{ includeSensitive: true }` to opt in
 * to collecting those sensitive filenames deliberately. Rejects symlinks.
 * Throws `LocalError` if the directory does not exist, is not a directory, or
 * contains no deployable files after the ignore list is applied.
 *
 * @example
 *   import { run402 } from "@run402/sdk/node";
 *   import { fileSetFromDir } from "@run402/sdk/node";
 *   const r = run402();
 *   await r.project(id).apply({
 *     project,
 *     site: { replace: fileSetFromDir("./dist") },
 *   });
 */
export declare function fileSetFromDir(root: string, opts?: FileSetFromDirOptions): Promise<FileSet>;
/**
 * Synchronous twin of {@link fileSetFromDir}: the same ignore rules, symlink
 * refusal, and errors. For local previews that must not go async, such as the
 * `run402 up --check` site summary, so they count exactly what deploy uploads.
 */
export declare function fileSetFromDirSync(root: string, opts?: FileSetFromDirOptions): FileSet;
/** Normalize a relative path to POSIX forward slashes. Exposed for tests. */
export declare function normalizeRelPath(rel: string): string;
//# sourceMappingURL=files.d.ts.map