15 lines · 656 B
import { kvCached } from "./cache";
import type { GitStore } from "../git/store";

const MAX_LISTED_FILES = 20_000;

export type FileListing = { paths: string[]; truncated: boolean };

/** Recursive blob paths under a root tree, cached in KV by tree sha since trees are immutable. */
export async function listAllFiles(store: GitStore, treeSha: string): Promise<FileListing> {
  return kvCached(`files:v1:${store.artifactsName}:${treeSha}`, async () => {
    const { entries, truncated } = await store.walk(treeSha, MAX_LISTED_FILES);
    return { paths: entries.filter((entry) => entry.type !== "gitlink").map((entry) => entry.path), truncated };
  });
}