@zip.js/zip.js 2.7.66 → 2.7.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/zip-fs.js CHANGED
@@ -38,6 +38,7 @@
38
38
  const MAX_32_BITS = 0xffffffff;
39
39
  const MAX_16_BITS = 0xffff;
40
40
  const COMPRESSION_METHOD_DEFLATE = 0x08;
41
+ const COMPRESSION_METHOD_DEFLATE_64 = 0x09;
41
42
  const COMPRESSION_METHOD_STORE = 0x00;
42
43
  const COMPRESSION_METHOD_AES = 0x63;
43
44
 
@@ -2904,11 +2905,18 @@
2904
2905
  if (eocdCache && index == size - END_OF_CENTRAL_DIR_LENGTH && length == END_OF_CENTRAL_DIR_LENGTH) {
2905
2906
  return eocdCache;
2906
2907
  }
2907
- const response = await sendRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader, index, length));
2908
- if (response.status != 206) {
2909
- throw new Error(ERR_HTTP_RANGE);
2908
+ if (index >= size) {
2909
+ return new Uint8Array();
2910
+ } else {
2911
+ if (index + length > size) {
2912
+ length = size - index;
2913
+ }
2914
+ const response = await sendRequest(HTTP_METHOD_GET, httpReader, getRangeHeaders(httpReader, index, length));
2915
+ if (response.status != 206) {
2916
+ throw new Error(ERR_HTTP_RANGE);
2917
+ }
2918
+ return new Uint8Array(await response.arrayBuffer());
2910
2919
  }
2911
- return new Uint8Array(await response.arrayBuffer());
2912
2920
  } else {
2913
2921
  const { data } = httpReader;
2914
2922
  if (!data) {
@@ -4196,27 +4204,11 @@
4196
4204
  if (this.filenames.size) {
4197
4205
  throw new Error(ERR_ZIP_NOT_EMPTY);
4198
4206
  }
4199
- ({ reader } = new GenericReader(reader));
4200
- const [zipEntriesReader, zipDataReader] = reader.readable.tee();
4201
- const zipReader = new ZipReader(new ReadableStream({
4202
- async start(controller) {
4203
- const reader = zipEntriesReader.getReader();
4204
- await readChunk();
4205
-
4206
- async function readChunk() {
4207
- const { done, value } = await reader.read();
4208
- if (done) {
4209
- controller.close();
4210
- } else {
4211
- controller.enqueue(value);
4212
- await readChunk();
4213
- }
4214
- }
4215
- }
4216
- }));
4207
+ reader = new GenericReader(reader);
4208
+ const zipReader = new ZipReader(reader.readable);
4217
4209
  const entries = await zipReader.getEntries();
4218
4210
  await zipReader.close();
4219
- await zipDataReader.pipeTo(this.writer.writable, { preventClose: true, preventAbort: true });
4211
+ await reader.readable.pipeTo(this.writer.writable, { preventClose: true, preventAbort: true });
4220
4212
  this.writer.size = this.offset = reader.size;
4221
4213
  this.filenames = new Set(entries.map(entry => entry.filename));
4222
4214
  this.files = new Map(entries.map(entry => {
@@ -4256,7 +4248,7 @@
4256
4248
  headerView
4257
4249
  } = getHeaderArrayData({
4258
4250
  version,
4259
- bitFlag: getBitFlag(level, languageEncodingFlag, dataDescriptor, encrypted),
4251
+ bitFlag: getBitFlag(level, languageEncodingFlag, dataDescriptor, encrypted, compressionMethod),
4260
4252
  compressionMethod,
4261
4253
  uncompressedSize,
4262
4254
  compressedSize,
@@ -5042,7 +5034,7 @@
5042
5034
  rawLastModDate
5043
5035
  } = getHeaderArrayData({
5044
5036
  version,
5045
- bitFlag: getBitFlag(level, useUnicodeFileNames, dataDescriptor, encrypted),
5037
+ bitFlag: getBitFlag(level, useUnicodeFileNames, dataDescriptor, encrypted, compressionMethod),
5046
5038
  compressionMethod,
5047
5039
  uncompressedSize,
5048
5040
  lastModDate: lastModDate < MIN_DATE ? MIN_DATE : lastModDate > MAX_DATE ? MAX_DATE : lastModDate,
@@ -5530,8 +5522,7 @@
5530
5522
  };
5531
5523
  }
5532
5524
 
5533
-
5534
- function getBitFlag(level, useUnicodeFileNames, dataDescriptor, encrypted) {
5525
+ function getBitFlag(level, useUnicodeFileNames, dataDescriptor, encrypted, compressionMethod) {
5535
5526
  let bitFlag = 0;
5536
5527
  if (useUnicodeFileNames) {
5537
5528
  bitFlag = bitFlag | BITFLAG_LANG_ENCODING_FLAG;
@@ -5539,14 +5530,16 @@
5539
5530
  if (dataDescriptor) {
5540
5531
  bitFlag = bitFlag | BITFLAG_DATA_DESCRIPTOR;
5541
5532
  }
5542
- if (level > 0 && level <= 3) {
5543
- bitFlag = bitFlag | BITFLAG_LEVEL_SUPER_FAST_MASK;
5544
- }
5545
- if (level > 3 && level <= 5) {
5546
- bitFlag = bitFlag | BITFLAG_LEVEL_FAST_MASK;
5547
- }
5548
- if (level == 9) {
5549
- bitFlag = bitFlag | BITFLAG_LEVEL_MAX_MASK;
5533
+ if (compressionMethod == COMPRESSION_METHOD_DEFLATE || compressionMethod == COMPRESSION_METHOD_DEFLATE_64) {
5534
+ if (level >= 0 && level <= 3) {
5535
+ bitFlag = bitFlag | BITFLAG_LEVEL_SUPER_FAST_MASK;
5536
+ }
5537
+ if (level > 3 && level <= 5) {
5538
+ bitFlag = bitFlag | BITFLAG_LEVEL_FAST_MASK;
5539
+ }
5540
+ if (level == 9) {
5541
+ bitFlag = bitFlag | BITFLAG_LEVEL_MAX_MASK;
5542
+ }
5550
5543
  }
5551
5544
  if (encrypted) {
5552
5545
  bitFlag = bitFlag | BITFLAG_ENCRYPTED;