import { sevenZipVolume } from '../sevenzip/index.js' /** * Files whose first segment says what an archive holds: named first RAR * volumes (.part01.rar, .rar), 7z (.7z, .7z.001) and `.bin`, an extension * uploaders use for archive volumes too (sniffed by content). */ export function isArchiveStart(name: string): boolean { if (/\.bin$/i.test(name)) return true const volume = sevenZipVolume(name) if (volume === 0 || volume === 1) return true return /\.part0*1\.rar$/i.test(name) || (/\.rar$/i.test(name) && !/\.part\d+\.rar$/i.test(name)) } /** * A later RAR volume (.part02.rar, .r00) or a par2 recovery volume * (.vol03+04.par2): the volume number is readable even under a random stem. * The set is listed from its first volume and named from its index .par2, * so the first segment of these says nothing new (LOG.md 2026-10-04). */ export function isLaterVolume(name: string): boolean { const part = /\.part(\d+)\.rar$/i.exec(name) if (part) return Number(part[1]) > 1 return /\.r\d{2,3}$/i.test(name) || /\.vol\d+[+-]\d+\.par2$/i.test(name) }