45 lines
1.2 KiB
TypeScript

import { join, relative } from "@std/path";
import { ensureDir } from "@std/fs/ensure-dir";
import { walk } from "@std/fs/walk";
export type DeployOptions = {
srcDir: string;
destParentDir: string;
/** Final folder name under destParentDir (defaults to basename of srcDir) */
folderName?: string;
dryRun: boolean;
};
export async function deployCampaignFolder(
options: DeployOptions,
): Promise<{ destDir: string; files: number }> {
const src = options.srcDir.replace(/\/+$/, "");
const baseName = options.folderName ?? src.split("/").pop() ?? "campaign";
const destDir = join(options.destParentDir, baseName);
let count = 0;
if (options.dryRun) {
for await (
const entry of walk(src, { includeFiles: true, includeDirs: false })
) {
if (entry.isFile) count++;
}
return { destDir, files: count };
}
await ensureDir(options.destParentDir);
for await (
const entry of walk(src, { includeFiles: true, includeDirs: false })
) {
if (!entry.isFile) continue;
const rel = relative(src, entry.path);
const target = join(destDir, rel);
await ensureDir(join(target, ".."));
await Deno.copyFile(entry.path, target);
count++;
}
return { destDir, files: count };
}