feature: First push to git

This commit is contained in:
Keith Solomon
2026-05-16 14:02:49 -05:00
commit 265f69d95a
46 changed files with 11551 additions and 0 deletions
+32
View File
@@ -0,0 +1,32 @@
import { mkdir } from 'node:fs/promises';
import { dirname } from 'node:path';
import XLSX from 'xlsx';
import { CatalogPayload, OutputWriter, sanitizeSheetName } from './sheets.js';
export class ExcelWriter implements OutputWriter {
public constructor(private readonly path: string) {}
public async write(payload: CatalogPayload): Promise<void> {
const workbook = XLSX.utils.book_new();
const grouped = new Map<string, Record<string, unknown>[]>();
for (const row of payload.rows) {
const sheet = sanitizeSheetName(String(row['Source Newsletter'] ?? 'Newsletter'));
grouped.set(sheet, [...(grouped.get(sheet) ?? []), row]);
}
for (const [sheet, rows] of grouped) {
XLSX.utils.book_append_sheet(workbook, XLSX.utils.json_to_sheet(rows), sheet);
}
XLSX.utils.book_append_sheet(
workbook,
XLSX.utils.json_to_sheet(payload.sponsors),
'Sponsored Links'
);
XLSX.utils.book_append_sheet(
workbook,
XLSX.utils.json_to_sheet(payload.deadLinks),
'Dead Links'
);
await mkdir(dirname(this.path), { recursive: true });
XLSX.writeFile(workbook, this.path);
}
}