7z-iterator 0.2.9 → 0.2.10

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.
Files changed (84) hide show
  1. package/dist/cjs/FileEntry.js.map +1 -1
  2. package/dist/cjs/SevenZipIterator.js.map +1 -1
  3. package/dist/cjs/compat.js.map +1 -1
  4. package/dist/cjs/lib/streamToSource.js.map +1 -1
  5. package/dist/cjs/nextEntry.js.map +1 -1
  6. package/dist/cjs/sevenz/NumberCodec.js.map +1 -1
  7. package/dist/cjs/sevenz/SevenZipParser.js.map +1 -1
  8. package/dist/cjs/sevenz/codecs/Aes.js.map +1 -1
  9. package/dist/cjs/sevenz/codecs/Bcj.js +1 -1
  10. package/dist/cjs/sevenz/codecs/Bcj.js.map +1 -1
  11. package/dist/cjs/sevenz/codecs/Bcj2.js.map +1 -1
  12. package/dist/cjs/sevenz/codecs/BcjArm.js.map +1 -1
  13. package/dist/cjs/sevenz/codecs/BcjArm64.js.map +1 -1
  14. package/dist/cjs/sevenz/codecs/BcjArmt.js.map +1 -1
  15. package/dist/cjs/sevenz/codecs/BcjIa64.js.map +1 -1
  16. package/dist/cjs/sevenz/codecs/BcjPpc.js.map +1 -1
  17. package/dist/cjs/sevenz/codecs/BcjSparc.js.map +1 -1
  18. package/dist/cjs/sevenz/codecs/Delta.js.map +1 -1
  19. package/dist/cjs/sevenz/codecs/Lzma.js.map +1 -1
  20. package/dist/cjs/sevenz/codecs/Lzma2.js.map +1 -1
  21. package/dist/cjs/sevenz/codecs/createBufferingDecoder.js.map +1 -1
  22. package/dist/cjs/sevenz/codecs/index.js.map +1 -1
  23. package/dist/cjs/sevenz/codecs/lzmaCompat.d.cts +1 -1
  24. package/dist/cjs/sevenz/codecs/lzmaCompat.d.ts +1 -1
  25. package/dist/cjs/sevenz/codecs/lzmaCompat.js.map +1 -1
  26. package/dist/cjs/sevenz/codecs/streams.js.map +1 -1
  27. package/dist/cjs/sevenz/constants.d.cts +8 -8
  28. package/dist/cjs/sevenz/constants.d.ts +8 -8
  29. package/dist/cjs/sevenz/constants.js.map +1 -1
  30. package/dist/cjs/sevenz/headers.js +1 -1
  31. package/dist/cjs/sevenz/headers.js.map +1 -1
  32. package/dist/esm/FileEntry.js +1 -1
  33. package/dist/esm/FileEntry.js.map +1 -1
  34. package/dist/esm/SevenZipIterator.js +6 -6
  35. package/dist/esm/SevenZipIterator.js.map +1 -1
  36. package/dist/esm/compat.js +2 -2
  37. package/dist/esm/compat.js.map +1 -1
  38. package/dist/esm/lib/streamToSource.js +12 -12
  39. package/dist/esm/lib/streamToSource.js.map +1 -1
  40. package/dist/esm/nextEntry.js +11 -11
  41. package/dist/esm/nextEntry.js.map +1 -1
  42. package/dist/esm/sevenz/NumberCodec.js +19 -19
  43. package/dist/esm/sevenz/NumberCodec.js.map +1 -1
  44. package/dist/esm/sevenz/SevenZipParser.js +191 -191
  45. package/dist/esm/sevenz/SevenZipParser.js.map +1 -1
  46. package/dist/esm/sevenz/codecs/Aes.js +29 -29
  47. package/dist/esm/sevenz/codecs/Aes.js.map +1 -1
  48. package/dist/esm/sevenz/codecs/Bcj.js +8 -8
  49. package/dist/esm/sevenz/codecs/Bcj.js.map +1 -1
  50. package/dist/esm/sevenz/codecs/Bcj2.js +35 -35
  51. package/dist/esm/sevenz/codecs/Bcj2.js.map +1 -1
  52. package/dist/esm/sevenz/codecs/BcjArm.js +4 -4
  53. package/dist/esm/sevenz/codecs/BcjArm.js.map +1 -1
  54. package/dist/esm/sevenz/codecs/BcjArm64.js +5 -5
  55. package/dist/esm/sevenz/codecs/BcjArm64.js.map +1 -1
  56. package/dist/esm/sevenz/codecs/BcjArmt.js +10 -10
  57. package/dist/esm/sevenz/codecs/BcjArmt.js.map +1 -1
  58. package/dist/esm/sevenz/codecs/BcjIa64.js +24 -24
  59. package/dist/esm/sevenz/codecs/BcjIa64.js.map +1 -1
  60. package/dist/esm/sevenz/codecs/BcjPpc.js +5 -5
  61. package/dist/esm/sevenz/codecs/BcjPpc.js.map +1 -1
  62. package/dist/esm/sevenz/codecs/BcjSparc.js +8 -8
  63. package/dist/esm/sevenz/codecs/BcjSparc.js.map +1 -1
  64. package/dist/esm/sevenz/codecs/Delta.js +6 -6
  65. package/dist/esm/sevenz/codecs/Delta.js.map +1 -1
  66. package/dist/esm/sevenz/codecs/Lzma.js +16 -16
  67. package/dist/esm/sevenz/codecs/Lzma.js.map +1 -1
  68. package/dist/esm/sevenz/codecs/Lzma2.js +35 -35
  69. package/dist/esm/sevenz/codecs/Lzma2.js.map +1 -1
  70. package/dist/esm/sevenz/codecs/createBufferingDecoder.js +3 -3
  71. package/dist/esm/sevenz/codecs/createBufferingDecoder.js.map +1 -1
  72. package/dist/esm/sevenz/codecs/index.js +6 -6
  73. package/dist/esm/sevenz/codecs/index.js.map +1 -1
  74. package/dist/esm/sevenz/codecs/lzmaCompat.d.ts +1 -1
  75. package/dist/esm/sevenz/codecs/lzmaCompat.js +5 -5
  76. package/dist/esm/sevenz/codecs/lzmaCompat.js.map +1 -1
  77. package/dist/esm/sevenz/codecs/streams.js +13 -13
  78. package/dist/esm/sevenz/codecs/streams.js.map +1 -1
  79. package/dist/esm/sevenz/constants.d.ts +8 -8
  80. package/dist/esm/sevenz/constants.js +9 -9
  81. package/dist/esm/sevenz/constants.js.map +1 -1
  82. package/dist/esm/sevenz/headers.js +134 -134
  83. package/dist/esm/sevenz/headers.js.map +1 -1
  84. package/package.json +20 -20
@@ -11,22 +11,22 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
11
11
  throw createCodedError('Not a valid 7z archive', ErrorCode.INVALID_SIGNATURE);
12
12
  }
13
13
  // Read version
14
- var majorVersion = buf[6];
15
- var minorVersion = buf[7];
14
+ const majorVersion = buf[6];
15
+ const minorVersion = buf[7];
16
16
  // Version check - we support 0.x (current is 0.4)
17
17
  if (majorVersion > 0) {
18
18
  throw createCodedError(`Unsupported 7z version: ${majorVersion}.${minorVersion}`, ErrorCode.UNSUPPORTED_VERSION);
19
19
  }
20
20
  // Read start header CRC (CRC of the next 20 bytes)
21
- var startHeaderCRC = buf.readUInt32LE(8);
21
+ const startHeaderCRC = buf.readUInt32LE(8);
22
22
  // Verify start header CRC
23
23
  if (!verifyCrc32Region(buf, 12, 20, startHeaderCRC)) {
24
24
  throw createCodedError('Start header CRC mismatch', ErrorCode.CRC_MISMATCH);
25
25
  }
26
26
  // Read next header location
27
- var nextHeaderOffset = readUInt64LE(buf, 12);
28
- var nextHeaderSize = readUInt64LE(buf, 20);
29
- var nextHeaderCRC = buf.readUInt32LE(28);
27
+ const nextHeaderOffset = readUInt64LE(buf, 12);
28
+ const nextHeaderSize = readUInt64LE(buf, 20);
29
+ const nextHeaderCRC = buf.readUInt32LE(28);
30
30
  return {
31
31
  majorVersion: majorVersion,
32
32
  minorVersion: minorVersion,
@@ -43,9 +43,9 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
43
43
  if (!verifyCrc32Region(buf, 0, buf.length, expectedCRC)) {
44
44
  throw createCodedError('Encoded header CRC mismatch', ErrorCode.CRC_MISMATCH);
45
45
  }
46
- var offset = 0;
46
+ let offset = 0;
47
47
  // Read property ID
48
- var propertyId = buf[offset++];
48
+ const propertyId = buf[offset++];
49
49
  // Handle kEncodedHeader - means the header itself is compressed
50
50
  if (propertyId === PropertyId.kEncodedHeader) {
51
51
  // Return indicator that we need to decompress
@@ -62,12 +62,12 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
62
62
  * Parse header content (after kHeader byte has been read)
63
63
  * Used by parseEncodedHeader and for decompressed headers
64
64
  */ export function parseHeaderContent(buf, offset) {
65
- var result = {
65
+ const result = {
66
66
  filesInfo: []
67
67
  };
68
68
  // Parse header contents
69
69
  while(offset < buf.length){
70
- var propertyId = buf[offset++];
70
+ const propertyId = buf[offset++];
71
71
  if (propertyId === PropertyId.kEnd) {
72
72
  break;
73
73
  }
@@ -81,14 +81,14 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
81
81
  break;
82
82
  case PropertyId.kMainStreamsInfo:
83
83
  {
84
- var streamsResult = parseStreamsInfo(buf, offset);
84
+ const streamsResult = parseStreamsInfo(buf, offset);
85
85
  result.streamsInfo = streamsResult.info;
86
86
  offset = streamsResult.offset;
87
87
  break;
88
88
  }
89
89
  case PropertyId.kFilesInfo:
90
90
  {
91
- var filesResult = parseFilesInfo(buf, offset);
91
+ const filesResult = parseFilesInfo(buf, offset);
92
92
  result.filesInfo = filesResult.files;
93
93
  offset = filesResult.offset;
94
94
  break;
@@ -102,7 +102,7 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
102
102
  /**
103
103
  * Parse StreamsInfo block
104
104
  */ function parseStreamsInfo(buf, offset) {
105
- var info = {
105
+ const info = {
106
106
  packPos: 0,
107
107
  packSizes: [],
108
108
  folders: [],
@@ -110,14 +110,14 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
110
110
  unpackSizes: []
111
111
  };
112
112
  while(offset < buf.length){
113
- var propertyId = buf[offset++];
113
+ const propertyId = buf[offset++];
114
114
  if (propertyId === PropertyId.kEnd) {
115
115
  break;
116
116
  }
117
117
  switch(propertyId){
118
118
  case PropertyId.kPackInfo:
119
119
  {
120
- var packResult = parsePackInfo(buf, offset);
120
+ const packResult = parsePackInfo(buf, offset);
121
121
  info.packPos = packResult.packPos;
122
122
  info.packSizes = packResult.packSizes;
123
123
  info.packCRCs = packResult.packCRCs;
@@ -126,14 +126,14 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
126
126
  }
127
127
  case PropertyId.kUnpackInfo:
128
128
  {
129
- var unpackResult = parseUnpackInfo(buf, offset);
129
+ const unpackResult = parseUnpackInfo(buf, offset);
130
130
  info.folders = unpackResult.folders;
131
131
  offset = unpackResult.offset;
132
132
  break;
133
133
  }
134
134
  case PropertyId.kSubStreamsInfo:
135
135
  {
136
- var subResult = parseSubStreamsInfo(buf, offset, info.folders);
136
+ const subResult = parseSubStreamsInfo(buf, offset, info.folders);
137
137
  info.numUnpackStreamsPerFolder = subResult.numUnpackStreamsPerFolder;
138
138
  info.unpackSizes = subResult.unpackSizes;
139
139
  info.unpackCRCs = subResult.unpackCRCs;
@@ -146,10 +146,10 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
146
146
  }
147
147
  // If no SubStreamsInfo, each folder produces one file
148
148
  if (info.unpackSizes.length === 0 && info.folders.length > 0) {
149
- for(var i = 0; i < info.folders.length; i++){
150
- var folder = info.folders[i];
149
+ for(let i = 0; i < info.folders.length; i++){
150
+ const folder = info.folders[i];
151
151
  // Get the final unpack size (last coder's output)
152
- var finalSize = folder.unpackSizes[folder.unpackSizes.length - 1];
152
+ const finalSize = folder.unpackSizes[folder.unpackSizes.length - 1];
153
153
  info.unpackSizes.push(finalSize);
154
154
  info.numUnpackStreamsPerFolder.push(1);
155
155
  }
@@ -163,31 +163,31 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
163
163
  * Parse PackInfo block
164
164
  */ function parsePackInfo(buf, offset) {
165
165
  // Pack position
166
- var packPosResult = readNumber(buf, offset);
167
- var packPos = packPosResult.value;
166
+ const packPosResult = readNumber(buf, offset);
167
+ const packPos = packPosResult.value;
168
168
  offset += packPosResult.bytesRead;
169
169
  // Number of pack streams
170
- var numPackResult = readNumber(buf, offset);
171
- var numPackStreams = numPackResult.value;
170
+ const numPackResult = readNumber(buf, offset);
171
+ const numPackStreams = numPackResult.value;
172
172
  offset += numPackResult.bytesRead;
173
- var packSizes = [];
174
- var packCRCs;
173
+ const packSizes = [];
174
+ let packCRCs;
175
175
  while(offset < buf.length){
176
- var propertyId = buf[offset++];
176
+ const propertyId = buf[offset++];
177
177
  if (propertyId === PropertyId.kEnd) {
178
178
  break;
179
179
  }
180
180
  if (propertyId === PropertyId.kSize) {
181
- for(var i = 0; i < numPackStreams; i++){
182
- var sizeResult = readNumber(buf, offset);
181
+ for(let i = 0; i < numPackStreams; i++){
182
+ const sizeResult = readNumber(buf, offset);
183
183
  packSizes.push(sizeResult.value);
184
184
  offset += sizeResult.bytesRead;
185
185
  }
186
186
  } else if (propertyId === PropertyId.kCRC) {
187
187
  packCRCs = [];
188
- var definedResult = readDefinedVector(buf, offset, numPackStreams);
188
+ const definedResult = readDefinedVector(buf, offset, numPackStreams);
189
189
  offset += definedResult.bytesRead;
190
- for(var j = 0; j < numPackStreams; j++){
190
+ for(let j = 0; j < numPackStreams; j++){
191
191
  if (definedResult.defined[j]) {
192
192
  packCRCs.push(buf.readUInt32LE(offset));
193
193
  offset += 4;
@@ -207,49 +207,49 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
207
207
  /**
208
208
  * Parse UnpackInfo block
209
209
  */ function parseUnpackInfo(buf, offset) {
210
- var folders = [];
210
+ const folders = [];
211
211
  while(offset < buf.length){
212
- var propertyId = buf[offset++];
212
+ const propertyId = buf[offset++];
213
213
  if (propertyId === PropertyId.kEnd) {
214
214
  break;
215
215
  }
216
216
  if (propertyId === PropertyId.kFolder) {
217
217
  // Number of folders
218
- var numFoldersResult = readNumber(buf, offset);
219
- var numFolders = numFoldersResult.value;
218
+ const numFoldersResult = readNumber(buf, offset);
219
+ const numFolders = numFoldersResult.value;
220
220
  offset += numFoldersResult.bytesRead;
221
221
  // External flag
222
- var external = buf[offset++];
222
+ const external = buf[offset++];
223
223
  if (external !== 0) {
224
224
  throw createCodedError('External folders not supported', ErrorCode.CORRUPT_HEADER);
225
225
  }
226
226
  // Parse each folder
227
- for(var i = 0; i < numFolders; i++){
228
- var folderResult = parseFolder(buf, offset);
227
+ for(let i = 0; i < numFolders; i++){
228
+ const folderResult = parseFolder(buf, offset);
229
229
  folders.push(folderResult.folder);
230
230
  offset = folderResult.offset;
231
231
  }
232
232
  } else if (propertyId === PropertyId.kCodersUnpackSize) {
233
233
  // Unpack sizes for each coder output
234
- for(var j = 0; j < folders.length; j++){
235
- var folder = folders[j];
234
+ for(let j = 0; j < folders.length; j++){
235
+ const folder = folders[j];
236
236
  folder.unpackSizes = [];
237
237
  // One unpack size per coder output stream
238
- var numOutputs = 0;
239
- for(var k = 0; k < folder.coders.length; k++){
238
+ let numOutputs = 0;
239
+ for(let k = 0; k < folder.coders.length; k++){
240
240
  numOutputs += folder.coders[k].numOutStreams;
241
241
  }
242
- for(var l = 0; l < numOutputs; l++){
243
- var sizeResult = readNumber(buf, offset);
242
+ for(let l = 0; l < numOutputs; l++){
243
+ const sizeResult = readNumber(buf, offset);
244
244
  folder.unpackSizes.push(sizeResult.value);
245
245
  offset += sizeResult.bytesRead;
246
246
  }
247
247
  }
248
248
  } else if (propertyId === PropertyId.kCRC) {
249
249
  // CRCs for folders
250
- var definedResult = readDefinedVector(buf, offset, folders.length);
250
+ const definedResult = readDefinedVector(buf, offset, folders.length);
251
251
  offset += definedResult.bytesRead;
252
- for(var m = 0; m < folders.length; m++){
252
+ for(let m = 0; m < folders.length; m++){
253
253
  folders[m].hasCRC = definedResult.defined[m];
254
254
  if (definedResult.defined[m]) {
255
255
  folders[m].unpackCRC = buf.readUInt32LE(offset);
@@ -267,35 +267,35 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
267
267
  * Parse a single Folder structure
268
268
  */ function parseFolder(buf, offset) {
269
269
  // Number of coders
270
- var numCodersResult = readNumber(buf, offset);
271
- var numCoders = numCodersResult.value;
270
+ const numCodersResult = readNumber(buf, offset);
271
+ const numCoders = numCodersResult.value;
272
272
  offset += numCodersResult.bytesRead;
273
- var coders = [];
274
- var numInStreamsTotal = 0;
275
- var numOutStreamsTotal = 0;
276
- for(var i = 0; i < numCoders; i++){
277
- var flags = buf[offset++];
278
- var idSize = flags & 0x0f;
279
- var isComplex = (flags & 0x10) !== 0;
280
- var hasAttributes = (flags & 0x20) !== 0;
273
+ const coders = [];
274
+ let numInStreamsTotal = 0;
275
+ let numOutStreamsTotal = 0;
276
+ for(let i = 0; i < numCoders; i++){
277
+ const flags = buf[offset++];
278
+ const idSize = flags & 0x0f;
279
+ const isComplex = (flags & 0x10) !== 0;
280
+ const hasAttributes = (flags & 0x20) !== 0;
281
281
  // Read codec ID
282
- var id = [];
283
- for(var j = 0; j < idSize; j++){
282
+ const id = [];
283
+ for(let j = 0; j < idSize; j++){
284
284
  id.push(buf[offset++]);
285
285
  }
286
- var numInStreams = 1;
287
- var numOutStreams = 1;
286
+ let numInStreams = 1;
287
+ let numOutStreams = 1;
288
288
  if (isComplex) {
289
- var inResult = readNumber(buf, offset);
289
+ const inResult = readNumber(buf, offset);
290
290
  numInStreams = inResult.value;
291
291
  offset += inResult.bytesRead;
292
- var outResult = readNumber(buf, offset);
292
+ const outResult = readNumber(buf, offset);
293
293
  numOutStreams = outResult.value;
294
294
  offset += outResult.bytesRead;
295
295
  }
296
- var properties;
296
+ let properties;
297
297
  if (hasAttributes) {
298
- var propsLenResult = readNumber(buf, offset);
298
+ const propsLenResult = readNumber(buf, offset);
299
299
  offset += propsLenResult.bytesRead;
300
300
  properties = buf.slice(offset, offset + propsLenResult.value);
301
301
  offset += propsLenResult.value;
@@ -310,12 +310,12 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
310
310
  numOutStreamsTotal += numOutStreams;
311
311
  }
312
312
  // Bind pairs
313
- var numBindPairs = numOutStreamsTotal - 1;
314
- var bindPairs = [];
315
- for(var k = 0; k < numBindPairs; k++){
316
- var inIndexResult = readNumber(buf, offset);
313
+ const numBindPairs = numOutStreamsTotal - 1;
314
+ const bindPairs = [];
315
+ for(let k = 0; k < numBindPairs; k++){
316
+ const inIndexResult = readNumber(buf, offset);
317
317
  offset += inIndexResult.bytesRead;
318
- var outIndexResult = readNumber(buf, offset);
318
+ const outIndexResult = readNumber(buf, offset);
319
319
  offset += outIndexResult.bytesRead;
320
320
  bindPairs.push({
321
321
  inIndex: inIndexResult.value,
@@ -323,13 +323,13 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
323
323
  });
324
324
  }
325
325
  // Packed stream indices
326
- var numPackedStreams = numInStreamsTotal - numBindPairs;
327
- var packedStreams = [];
326
+ const numPackedStreams = numInStreamsTotal - numBindPairs;
327
+ const packedStreams = [];
328
328
  if (numPackedStreams === 1) {
329
329
  // Find the unbound input stream
330
- for(var m = 0; m < numInStreamsTotal; m++){
331
- var isBound = false;
332
- for(var n = 0; n < bindPairs.length; n++){
330
+ for(let m = 0; m < numInStreamsTotal; m++){
331
+ let isBound = false;
332
+ for(let n = 0; n < bindPairs.length; n++){
333
333
  if (bindPairs[n].inIndex === m) {
334
334
  isBound = true;
335
335
  break;
@@ -341,8 +341,8 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
341
341
  }
342
342
  }
343
343
  } else {
344
- for(var p = 0; p < numPackedStreams; p++){
345
- var indexResult = readNumber(buf, offset);
344
+ for(let p = 0; p < numPackedStreams; p++){
345
+ const indexResult = readNumber(buf, offset);
346
346
  packedStreams.push(indexResult.value);
347
347
  offset += indexResult.bytesRead;
348
348
  }
@@ -361,32 +361,32 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
361
361
  /**
362
362
  * Parse SubStreamsInfo block
363
363
  */ function parseSubStreamsInfo(buf, offset, folders) {
364
- var numUnpackStreamsPerFolder = [];
365
- var unpackSizes = [];
366
- var unpackCRCs;
364
+ const numUnpackStreamsPerFolder = [];
365
+ const unpackSizes = [];
366
+ let unpackCRCs;
367
367
  // Default: 1 file per folder
368
- for(var i = 0; i < folders.length; i++){
368
+ for(let i = 0; i < folders.length; i++){
369
369
  numUnpackStreamsPerFolder.push(1);
370
370
  }
371
371
  while(offset < buf.length){
372
- var propertyId = buf[offset++];
372
+ const propertyId = buf[offset++];
373
373
  if (propertyId === PropertyId.kEnd) {
374
374
  break;
375
375
  }
376
376
  if (propertyId === PropertyId.kNumUnpackStream) {
377
- for(var j = 0; j < folders.length; j++){
378
- var numResult = readNumber(buf, offset);
377
+ for(let j = 0; j < folders.length; j++){
378
+ const numResult = readNumber(buf, offset);
379
379
  numUnpackStreamsPerFolder[j] = numResult.value;
380
380
  offset += numResult.bytesRead;
381
381
  }
382
382
  } else if (propertyId === PropertyId.kSize) {
383
- for(var k = 0; k < folders.length; k++){
384
- var numStreams = numUnpackStreamsPerFolder[k];
383
+ for(let k = 0; k < folders.length; k++){
384
+ const numStreams = numUnpackStreamsPerFolder[k];
385
385
  if (numStreams === 0) continue;
386
386
  // Read sizes for all but last stream in folder (last is calculated)
387
- var remaining = folders[k].unpackSizes[folders[k].unpackSizes.length - 1];
388
- for(var l = 0; l < numStreams - 1; l++){
389
- var sizeResult = readNumber(buf, offset);
387
+ let remaining = folders[k].unpackSizes[folders[k].unpackSizes.length - 1];
388
+ for(let l = 0; l < numStreams - 1; l++){
389
+ const sizeResult = readNumber(buf, offset);
390
390
  unpackSizes.push(sizeResult.value);
391
391
  remaining -= sizeResult.value;
392
392
  offset += sizeResult.bytesRead;
@@ -396,18 +396,18 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
396
396
  }
397
397
  } else if (propertyId === PropertyId.kCRC) {
398
398
  // Count files that need CRC
399
- var numFiles = 0;
400
- for(var m = 0; m < folders.length; m++){
401
- var numStreamsInFolder = numUnpackStreamsPerFolder[m];
399
+ let numFiles = 0;
400
+ for(let m = 0; m < folders.length; m++){
401
+ const numStreamsInFolder = numUnpackStreamsPerFolder[m];
402
402
  // Only count if folder doesn't have CRC or has multiple streams
403
403
  if (!folders[m].hasCRC || numStreamsInFolder > 1) {
404
404
  numFiles += numStreamsInFolder;
405
405
  }
406
406
  }
407
407
  unpackCRCs = [];
408
- var definedResult = readDefinedVector(buf, offset, numFiles);
408
+ const definedResult = readDefinedVector(buf, offset, numFiles);
409
409
  offset += definedResult.bytesRead;
410
- for(var n = 0; n < numFiles; n++){
410
+ for(let n = 0; n < numFiles; n++){
411
411
  if (definedResult.defined[n]) {
412
412
  unpackCRCs.push(buf.readUInt32LE(offset));
413
413
  offset += 4;
@@ -419,8 +419,8 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
419
419
  }
420
420
  // If no sizes specified, use folder unpack sizes
421
421
  if (unpackSizes.length === 0) {
422
- for(var p = 0; p < folders.length; p++){
423
- var folder = folders[p];
422
+ for(let p = 0; p < folders.length; p++){
423
+ const folder = folders[p];
424
424
  unpackSizes.push(folder.unpackSizes[folder.unpackSizes.length - 1]);
425
425
  }
426
426
  }
@@ -435,12 +435,12 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
435
435
  * Parse FilesInfo block
436
436
  */ function parseFilesInfo(buf, offset) {
437
437
  // Number of files
438
- var numFilesResult = readNumber(buf, offset);
439
- var numFiles = numFilesResult.value;
438
+ const numFilesResult = readNumber(buf, offset);
439
+ const numFiles = numFilesResult.value;
440
440
  offset += numFilesResult.bytesRead;
441
441
  // Initialize files array
442
- var files = [];
443
- for(var i = 0; i < numFiles; i++){
442
+ const files = [];
443
+ for(let i = 0; i < numFiles; i++){
444
444
  files.push({
445
445
  name: '',
446
446
  size: 0,
@@ -449,30 +449,30 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
449
449
  hasStream: true
450
450
  });
451
451
  }
452
- var emptyStreamFlags = [];
453
- var emptyFileFlags = [];
452
+ let emptyStreamFlags = [];
453
+ let emptyFileFlags = [];
454
454
  while(offset < buf.length){
455
- var propertyId = buf[offset++];
455
+ const propertyId = buf[offset++];
456
456
  if (propertyId === PropertyId.kEnd) {
457
457
  break;
458
458
  }
459
459
  // Read property size
460
- var propSizeResult = readNumber(buf, offset);
461
- var propSize = propSizeResult.value;
460
+ const propSizeResult = readNumber(buf, offset);
461
+ const propSize = propSizeResult.value;
462
462
  offset += propSizeResult.bytesRead;
463
- var propEnd = offset + propSize;
463
+ const propEnd = offset + propSize;
464
464
  switch(propertyId){
465
465
  case PropertyId.kEmptyStream:
466
466
  emptyStreamFlags = readBoolVector(buf, offset, numFiles);
467
467
  // Mark files that don't have streams
468
- for(var j = 0; j < numFiles; j++){
468
+ for(let j = 0; j < numFiles; j++){
469
469
  files[j].hasStream = !emptyStreamFlags[j];
470
470
  }
471
471
  break;
472
472
  case PropertyId.kEmptyFile:
473
473
  {
474
- var numEmptyStreams = 0;
475
- for(var k = 0; k < emptyStreamFlags.length; k++){
474
+ let numEmptyStreams = 0;
475
+ for(let k = 0; k < emptyStreamFlags.length; k++){
476
476
  if (emptyStreamFlags[k]) numEmptyStreams++;
477
477
  }
478
478
  emptyFileFlags = readBoolVector(buf, offset, numEmptyStreams);
@@ -480,13 +480,13 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
480
480
  }
481
481
  case PropertyId.kAnti:
482
482
  {
483
- var numAnti = 0;
484
- for(var l = 0; l < emptyStreamFlags.length; l++){
483
+ let numAnti = 0;
484
+ for(let l = 0; l < emptyStreamFlags.length; l++){
485
485
  if (emptyStreamFlags[l]) numAnti++;
486
486
  }
487
- var antiFlags = readBoolVector(buf, offset, numAnti);
488
- var antiIdx = 0;
489
- for(var m = 0; m < numFiles; m++){
487
+ const antiFlags = readBoolVector(buf, offset, numAnti);
488
+ let antiIdx = 0;
489
+ for(let m = 0; m < numFiles; m++){
490
490
  if (emptyStreamFlags[m]) {
491
491
  files[m].isAntiFile = antiFlags[antiIdx++];
492
492
  }
@@ -516,8 +516,8 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
516
516
  offset = propEnd;
517
517
  }
518
518
  // Determine directories from empty stream + not empty file
519
- var emptyIdx = 0;
520
- for(var n = 0; n < numFiles; n++){
519
+ let emptyIdx = 0;
520
+ for(let n = 0; n < numFiles; n++){
521
521
  if (emptyStreamFlags[n]) {
522
522
  // Empty stream - could be directory or empty file
523
523
  if (emptyIdx < emptyFileFlags.length && emptyFileFlags[emptyIdx]) {
@@ -536,10 +536,10 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
536
536
  /**
537
537
  * Read a boolean vector (bit-packed)
538
538
  */ function readBoolVector(buf, offset, count) {
539
- var result = [];
540
- var byteIdx = 0;
541
- var bitMask = 0x80;
542
- for(var i = 0; i < count; i++){
539
+ const result = [];
540
+ let byteIdx = 0;
541
+ let bitMask = 0x80;
542
+ for(let i = 0; i < count; i++){
543
543
  result.push((buf[offset + byteIdx] & bitMask) !== 0);
544
544
  bitMask = bitMask >>> 1;
545
545
  if (bitMask === 0) {
@@ -553,15 +553,15 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
553
553
  * Parse file names (UTF-16LE encoded)
554
554
  */ function parseFileNames(buf, offset, files) {
555
555
  // External flag
556
- var external = buf[offset++];
556
+ const external = buf[offset++];
557
557
  if (external !== 0) {
558
558
  throw createCodedError('External file names not supported', ErrorCode.CORRUPT_HEADER);
559
559
  }
560
560
  // Names are UTF-16LE, null-terminated
561
- for(var i = 0; i < files.length; i++){
562
- var nameChars = [];
561
+ for(let i = 0; i < files.length; i++){
562
+ const nameChars = [];
563
563
  while(offset < buf.length){
564
- var charCode = buf.readUInt16LE(offset);
564
+ const charCode = buf.readUInt16LE(offset);
565
565
  offset += 2;
566
566
  if (charCode === 0) break;
567
567
  nameChars.push(charCode);
@@ -574,23 +574,23 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
574
574
  * Parse file times (Windows FILETIME format)
575
575
  */ function parseFileTimes(buf, offset, files, timeType) {
576
576
  // Read defined vector (allDefined byte + optional bitmask)
577
- var definedResult = readDefinedVector(buf, offset, files.length);
577
+ const definedResult = readDefinedVector(buf, offset, files.length);
578
578
  offset += definedResult.bytesRead;
579
579
  // External flag - 0x00 means data follows inline, non-zero means external stream
580
- var external = buf[offset++];
580
+ const external = buf[offset++];
581
581
  if (external !== 0) {
582
582
  throw createCodedError('External file times not supported', ErrorCode.UNSUPPORTED_FEATURE);
583
583
  }
584
584
  // Read times
585
- for(var i = 0; i < files.length; i++){
585
+ for(let i = 0; i < files.length; i++){
586
586
  if (definedResult.defined[i]) {
587
- var filetime = readUInt64LE(buf, offset);
587
+ const filetime = readUInt64LE(buf, offset);
588
588
  offset += 8;
589
589
  // Convert FILETIME (100ns since 1601) to JavaScript Date
590
590
  // FILETIME epoch: 1601-01-01
591
591
  // JS Date epoch: 1970-01-01
592
592
  // Difference: 11644473600 seconds
593
- var ms = filetime / 10000 - 11644473600000;
593
+ const ms = filetime / 10000 - 11644473600000;
594
594
  files[i][timeType] = new Date(ms);
595
595
  }
596
596
  }
@@ -600,15 +600,15 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
600
600
  * Parse Windows file attributes
601
601
  */ function parseAttributes(buf, offset, files) {
602
602
  // Read defined vector (allDefined byte + optional bitmask)
603
- var definedResult = readDefinedVector(buf, offset, files.length);
603
+ const definedResult = readDefinedVector(buf, offset, files.length);
604
604
  offset += definedResult.bytesRead;
605
605
  // External flag - 0x00 means data follows inline, non-zero means external stream
606
- var external = buf[offset++];
606
+ const external = buf[offset++];
607
607
  if (external !== 0) {
608
608
  throw createCodedError('External file attributes not supported', ErrorCode.UNSUPPORTED_FEATURE);
609
609
  }
610
610
  // Read attributes
611
- for(var i = 0; i < files.length; i++){
611
+ for(let i = 0; i < files.length; i++){
612
612
  if (definedResult.defined[i]) {
613
613
  files[i].attributes = buf.readUInt32LE(offset);
614
614
  offset += 4;
@@ -620,11 +620,11 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
620
620
  * Skip archive properties block
621
621
  */ function skipArchiveProperties(buf, offset) {
622
622
  while(offset < buf.length){
623
- var propertyId = buf[offset++];
623
+ const propertyId = buf[offset++];
624
624
  if (propertyId === PropertyId.kEnd) {
625
625
  break;
626
626
  }
627
- var sizeResult = readNumber(buf, offset);
627
+ const sizeResult = readNumber(buf, offset);
628
628
  offset += sizeResult.bytesRead + sizeResult.value;
629
629
  }
630
630
  return offset;
@@ -633,7 +633,7 @@ import { readDefinedVector, readNumber } from './NumberCodec.js';
633
633
  * Skip streams info block (for additional streams)
634
634
  */ function skipStreamsInfo(buf, offset) {
635
635
  while(offset < buf.length){
636
- var propertyId = buf[offset++];
636
+ const propertyId = buf[offset++];
637
637
  if (propertyId === PropertyId.kEnd) {
638
638
  break;
639
639
  }