Self-review: drop the formatter re-export shim, import @shared/format directly

The prior commit kept a pass-through `export { fmtBytes, fmtSpeed, fmtEta }` in
main/lib/formatters.ts purely so existing importers wouldn't have to change —
which re-exported fmtSpeed (zero importers, dead) and left download.ts re-
exporting fmtBytes/fmtEta with no consumer at all, undercutting the "one home"
goal.

Now the real consumers import from the canonical module directly:
- probe.ts and the download.test import from @shared/format.
- formatters.ts keeps only its internal `import { fmtBytes }` (for parseProgress)
  and no longer re-exports.
- download.ts re-exports only parseProgress (its own function); the dead
  fmtBytes/fmtEta re-export is removed.

No behavior change. typecheck + 248 tests + eslint + prettier green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-30 21:10:11 -04:00
parent 3d09174c16
commit 4492eee054
4 changed files with 10 additions and 10 deletions
+3 -3
View File
@@ -80,9 +80,9 @@ export function hasActiveDownloads(): boolean {
}
// --- Formatting helpers (raw yt-dlp numbers → human strings) ----------------
// Implementations live in lib/formatters.ts (no electron import chain) so they
// can be unit-tested in isolation (L37). Re-exported here for external callers.
export { fmtBytes, fmtEta, parseProgress } from './lib/formatters'
// parseProgress lives in lib/formatters.ts (no electron import chain) so it can
// be unit-tested in isolation (L37). Byte/ETA formatters live in @shared/format.
export { parseProgress } from './lib/formatters'
import { parseProgress } from './lib/formatters'
function send(wc: WebContents, ev: DownloadEvent): void {
+3 -4
View File
@@ -2,10 +2,9 @@ import type { DownloadProgress } from '@shared/ipc'
import { fmtBytes } from '@shared/format'
// yt-dlp progress-line parsing. Extracted from download.ts so it can be
// unit-tested without pulling in the electron import chain (L37). The byte/
// speed/ETA formatters now live in @shared/format (one home for both sides of
// the IPC boundary); re-exported here so existing importers keep working.
export { fmtBytes, fmtSpeed, fmtEta } from '@shared/format'
// unit-tested without pulling in the electron import chain (L37). Byte/speed/ETA
// formatting lives in @shared/format — the one home for both sides of the IPC
// boundary; consumers import it directly.
function num(s?: string): number | undefined {
if (!s || s === 'NA') return undefined
+1 -1
View File
@@ -1,7 +1,7 @@
import { execFile } from 'child_process'
import { existsSync } from 'fs'
import { getYtdlpPath, YTDLP_MISSING_MSG } from './binaries'
import { fmtBytes } from './lib/formatters'
import { fmtBytes } from '@shared/format'
import { cleanError } from './log'
import { assertHttpUrl } from './url'
import { entryUrl, fmtDuration, type RawEntry } from './indexerCore'
+3 -2
View File
@@ -1,6 +1,7 @@
import { describe, it, expect } from 'vitest'
// Import from the pure formatter module directly — no electron import chain (L37).
import { fmtBytes, fmtEta, parseProgress } from '../src/main/lib/formatters'
// Import from the pure modules directly — no electron import chain (L37).
import { parseProgress } from '../src/main/lib/formatters'
import { fmtBytes, fmtEta } from '../src/shared/format'
describe('fmtBytes', () => {
it('formats bytes under 1 KB verbatim', () => {