Something went wrong. Try again.
Monorepo for Tangled forked from tangled.org/core
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334export type JobRef = { id?: string; name: string };
type DraftLookup = { name: string; rkey?: string; migration?: { status: string; jobId?: string } };
export const createJobMatcher = <T extends { id: number; name: string }>( repos: readonly T[], drafts: Record<number, DraftLookup>): ((job: JobRef) => T | undefined) => { const byJobId = new Map<string, T>(); const byDraft = new Map<string, T>(); const byName = new Map<string, T>(); const claim = (map: Map<string, T>, key: string | undefined, repo: T) => { if (key !== undefined && !map.has(key)) map.set(key, repo); }; for (const repo of repos) { const draft = drafts[repo.id]; const m = draft?.migration; if (m?.status === "success") claim(byJobId, m.jobId, repo); if (draft) { claim(byDraft, draft.name.toLowerCase(), repo); claim(byDraft, draft.rkey?.toLowerCase(), repo); } claim(byName, repo.name.toLowerCase(), repo); } return (job) => { const jobName = job.name.toLowerCase(); return ( (job.id ? byJobId.get(job.id) : undefined) ?? byDraft.get(jobName) ?? byName.get(jobName) ); };};