Files
accounted/lib/export/register-export.ts
T
f266c386f3 chore: repo-wide bloat sweep, remove dead code and fold duplicate helpers (#2150)
* chore: repo-wide bloat sweep, remove dead code and fold duplicate helpers

Remove 33 dead files, ~270 unreferenced exports/types, 13 dead i18n
namespaces and 4 unused dependencies; fold byte-identical helper copies
into one canonical home each (lib/utils chunk/sleep/utcDateStamp,
lib/dates/iso, lib/invariants/uuid, lib/xml/escape, lib/reports/sru/format,
lib/pdf/number-text, lib/browser/panel-request, lib/api/v1/body +
v1ValidationError rolled out to ~55 v1 routes, booking-template schemas).

No behaviour change: v1 bodies and status codes, MCP tool schemas, DB
writes and money math are untouched. Naive ore rounding was deliberately
not swapped for roundOre; see DECISIONS.md 2026-09-02 for the full list
of things left alone on purpose.

tsc, lint, 19588 unit tests and check:guards green; antipattern baseline
ratcheted (naive-ore-round 622 -> 620, hand-rolled-invariant 115 -> 113).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* test(transactions): import RawTransaction from @/types after the ingest re-export removal

CI's type ratchet (check:types, full tsconfig) caught the one test file
that still imported the type through lib/transactions/ingest.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 11:51:16 +02:00

46 lines
1.5 KiB
TypeScript

import {
reportToWorkbook,
exportFilename,
UTF8_BOM,
} from '@/lib/reports/xlsx-export'
export type RegisterExportFormat = 'xlsx' | 'csv'
const XLSX_MIME = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
/** Normalize the `?format=` query param to a supported export format. */
export function parseExportFormat(raw: string | null): RegisterExportFormat {
return raw === 'csv' ? 'csv' : 'xlsx'
}
/**
* Build the download body + headers for a register export (customers,
* suppliers, articles) in either xlsx or csv. CSV is a single sheet with a
* UTF-8 BOM so Excel renders åäö correctly; both formats share the same
* column/row spec so files round-trip back through the importer.
*/
export function buildRegisterExport(
spec: Parameters<typeof reportToWorkbook>[0],
opts: { format: RegisterExportFormat; slug: string; companyName: string; date: string },
): { buffer: Buffer; contentType: string; filename: string } {
const { format, slug, companyName, date } = opts
if (format === 'csv') {
const buf = reportToWorkbook(spec, { bookType: 'csv' })
return {
buffer: Buffer.concat([Buffer.from(UTF8_BOM, 'utf-8'), buf]),
contentType: 'text/csv; charset=utf-8',
filename: exportFilename(slug, companyName, date, 'csv'),
}
}
return {
buffer: reportToWorkbook(spec),
contentType: XLSX_MIME,
filename: exportFilename(slug, companyName, date, 'xlsx'),
}
}
/** Today's date as `YYYY-MM-DD` for export filenames. */
export { todayIsoUtc as todayIso } from '@/lib/dates/iso'