import fs from "node:fs/promises";
import { getReadmeFromGitRepo } from "./getGit";
export type HandlerDeps = {
readFile: (path: string, encoding: BufferEncoding) => Promise<string>;
getReadmeFromGitRepo: (repoUrl: string) => Promise<string>;
};
const defaultDeps: HandlerDeps = {
readFile: fs.readFile,
getReadmeFromGitRepo,
};
export function mergeDeps<K extends keyof HandlerDeps>(
keys: K[],
overrides: Partial<Pick<HandlerDeps, K>>
): Pick<HandlerDeps, K> {
const result = {} as Pick<HandlerDeps, K>;
for (const key of keys) {
const hasOverride = Object.prototype.hasOwnProperty.call(overrides, key);
const value = hasOverride ? overrides[key] : defaultDeps[key];
if (value === undefined) {
throw new Error(`Missing required dependency: ${key}`);
}
result[key] = value;
}
return result;
}