(zipWriter, comment, options)
| 5569 | |
| 5570 | |
| 5571 | async function closeFile(zipWriter, comment, options) { |
| 5572 | const { files, writer } = zipWriter; |
| 5573 | const { diskOffset } = writer; |
| 5574 | let { diskNumber } = writer; |
| 5575 | let offset = 0; |
| 5576 | let directoryDataLength = 0; |
| 5577 | let directoryOffset = zipWriter.offset - diskOffset; |
| 5578 | let filesLength = files.size; |
| 5579 | for (const [, fileEntry] of files) { |
| 5580 | const { |
| 5581 | rawFilename, |
| 5582 | rawExtraFieldAES, |
| 5583 | rawComment, |
| 5584 | rawExtraFieldNTFS, |
| 5585 | rawExtraFieldUnix, |
| 5586 | rawExtraField, |
| 5587 | extendedTimestamp, |
| 5588 | extraFieldExtendedTimestampFlag, |
| 5589 | lastModDate, |
| 5590 | zip64UncompressedSize, |
| 5591 | zip64CompressedSize, |
| 5592 | uncompressedSize, |
| 5593 | compressedSize |
| 5594 | } = fileEntry; |
| 5595 | const zip64Offset = fileEntry.offset > MAX_32_BITS; |
| 5596 | const zip64DiskNumberStart = fileEntry.diskNumberStart > MAX_16_BITS; |
| 5597 | let rawExtraFieldZip64; |
| 5598 | if (zip64Offset || zip64DiskNumberStart || zip64UncompressedSize || zip64CompressedSize) { |
| 5599 | let length = 4; |
| 5600 | if (zip64UncompressedSize) length += 8; |
| 5601 | if (zip64CompressedSize) length += 8; |
| 5602 | if (zip64Offset) length += 8; |
| 5603 | if (zip64DiskNumberStart) length += 4; |
| 5604 | rawExtraFieldZip64 = new Uint8Array(length); |
| 5605 | const zip64View = getDataView(rawExtraFieldZip64); |
| 5606 | setUint16(zip64View, 0, EXTRAFIELD_TYPE_ZIP64); |
| 5607 | setUint16(zip64View, 2, length - 4); |
| 5608 | let zip64FieldOffset = 4; |
| 5609 | if (zip64UncompressedSize) { setBigUint64(zip64View, zip64FieldOffset, BigInt(uncompressedSize)); zip64FieldOffset += 8; } |
| 5610 | if (zip64CompressedSize) { setBigUint64(zip64View, zip64FieldOffset, BigInt(compressedSize)); zip64FieldOffset += 8; } |
| 5611 | if (zip64Offset) { setBigUint64(zip64View, zip64FieldOffset, BigInt(fileEntry.offset)); zip64FieldOffset += 8; } |
| 5612 | if (zip64DiskNumberStart) { setUint32(zip64View, zip64FieldOffset, fileEntry.diskNumberStart); } |
| 5613 | } else { |
| 5614 | rawExtraFieldZip64 = new Uint8Array(); |
| 5615 | } |
| 5616 | fileEntry.rawExtraFieldZip64 = rawExtraFieldZip64; |
| 5617 | fileEntry.zip64Offset = zip64Offset; |
| 5618 | fileEntry.zip64DiskNumberStart = zip64DiskNumberStart; |
| 5619 | let rawExtraFieldTimestamp; |
| 5620 | if (extendedTimestamp) { |
| 5621 | rawExtraFieldTimestamp = new Uint8Array(9); |
| 5622 | const extraFieldExtendedTimestampView = getDataView(rawExtraFieldTimestamp); |
| 5623 | setUint16(extraFieldExtendedTimestampView, 0, EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP); |
| 5624 | setUint16(extraFieldExtendedTimestampView, 2, 5); |
| 5625 | setUint8(extraFieldExtendedTimestampView, 4, extraFieldExtendedTimestampFlag); |
| 5626 | setUint32(extraFieldExtendedTimestampView, 5, Math.floor(lastModDate.getTime() / 1000)); |
| 5627 | } else { |
| 5628 | rawExtraFieldTimestamp = new Uint8Array(); |
no test coverage detected
searching dependent graphs…