/** * A minimal stored (uncompressed) zip archive, byte-compatible with `unzip`, * for tests that fake GitHub artifact downloads without network or a zip CLI. */ export function storedZip(files: Record): Buffer { const locals: Buffer[] = [], centrals: Buffer[] = []; let offset = 0; for (const [name, text] of Object.entries(files)) { const data = Buffer.from(text), fileName = Buffer.from(name), crc = Bun.hash.crc32(data) >>> 0; const local = Buffer.alloc(30); local.writeUInt32LE(0x04034b50, 0); local.writeUInt16LE(20, 4); local.writeUInt32LE(crc, 14); local.writeUInt32LE(data.length, 18); local.writeUInt32LE(data.length, 22); local.writeUInt16LE(fileName.length, 26); const central = Buffer.alloc(46); central.writeUInt32LE(0x02014b50, 0); central.writeUInt16LE(20, 4); central.writeUInt16LE(20, 6); central.writeUInt32LE(crc, 16); central.writeUInt32LE(data.length, 20); central.writeUInt32LE(data.length, 24); central.writeUInt16LE(fileName.length, 28); central.writeUInt32LE(offset, 42); locals.push(local, fileName, data); centrals.push(central, fileName); offset += 30 + fileName.length + data.length; } const size = centrals.reduce((sum, b) => sum + b.length, 0); const end = Buffer.alloc(22); end.writeUInt32LE(0x06054b50, 0); end.writeUInt16LE(Object.keys(files).length, 8); end.writeUInt16LE(Object.keys(files).length, 10); end.writeUInt32LE(size, 12); end.writeUInt32LE(offset, 16); return Buffer.concat([...locals, ...centrals, end]); }