Something went wrong. Try again.
Monorepo for Tangled
Something went wrong. Try again.
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384import type { MigrationTask } from "$lib/api/migrator";import type { MigrationItem } from "./MigrationStep.svelte";
type MigrationRowDraft = { id?: string | number; name: string; migration: { status: "idle" | "submitting" | "error" | "success"; error?: string; task?: { taskId: string; name: string }; jobId?: string; jobStatus?: string; jobError?: string; repoDid?: string; };};
type DraftInput = | readonly MigrationRowDraft[] | Record<string | number, MigrationRowDraft | undefined> | null | undefined;
export const migrationRows = ( tasks?: readonly MigrationTask[] | null, drafts?: DraftInput): MigrationItem[] => { const rows: MigrationItem[] = []; const seenNames = new Set<string>(); const seenJobIds = new Set<string>();
const draftList: MigrationRowDraft[] = Array.isArray(drafts) ? drafts : drafts && typeof drafts === "object" ? Object.values(drafts).filter((d): d is MigrationRowDraft => d !== undefined) : [];
for (const draft of draftList) { if (!draft || !draft.migration || draft.migration.status === "idle") continue; const id = draft.id !== undefined ? draft.id : draft.migration.status === "success" && draft.migration.jobId ? draft.migration.jobId : draft.name;
seenNames.add(draft.name); if (draft.migration.status === "success" && draft.migration.jobId) { seenJobIds.add(draft.migration.jobId); }
rows.push({ id, name: draft.name, migration: draft.migration }); }
for (const task of tasks ?? []) { for (const job of task.jobs ?? []) { if (seenJobIds.has(job.id) || seenNames.has(job.name)) { continue; } seenJobIds.add(job.id); seenNames.add(job.name);
rows.push({ id: job.id, name: job.name, migration: { status: "success", task: { taskId: task.id, name: job.name }, jobId: job.id, jobStatus: job.status, jobError: job.error, repoDid: job.repoDid } }); } }
return rows;};