@cj-tech-master/excelts 1.4.5-canary.20251212064440.3eb099f → 1.4.5-canary.20251212160853.7621827

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.
@@ -133,14 +133,21 @@ class Worksheet {
133
133
  }
134
134
  this._name = name;
135
135
  }
136
+ /**
137
+ * The workbook that contains this worksheet
138
+ */
136
139
  get workbook() {
137
140
  return this._workbook;
138
141
  }
139
- // when you're done with this worksheet, call this to remove from workbook
142
+ /**
143
+ * When you're done with this worksheet, call this to remove from workbook
144
+ */
140
145
  destroy() {
141
146
  this._workbook.removeWorksheetEx(this);
142
147
  }
143
- // Get the bounding range of the cells in this worksheet
148
+ /**
149
+ * Get the bounding range of the cells in this worksheet
150
+ */
144
151
  get dimensions() {
145
152
  const dimensions = new range_js_1.Range();
146
153
  this._rows.forEach(row => {
@@ -155,12 +162,18 @@ class Worksheet {
155
162
  }
156
163
  // =========================================================================
157
164
  // Columns
158
- // get the current columns array.
165
+ /**
166
+ * Get the current columns array
167
+ */
159
168
  get columns() {
160
169
  return this._columns;
161
170
  }
162
- // set the columns from an array of column definitions.
163
- // Note: any headers defined will overwrite existing values.
171
+ /**
172
+ * Add column headers and define column keys and widths.
173
+ *
174
+ * Note: these column structures are a workbook-building convenience only,
175
+ * apart from the column width, they will not be fully persisted.
176
+ */
164
177
  set columns(value) {
165
178
  // calculate max header row count
166
179
  this._headerRowCount = value.reduce((pv, cv) => {
@@ -188,7 +201,9 @@ class Worksheet {
188
201
  eachColumnKey(f) {
189
202
  Object.keys(this._keys).forEach(key => f(this._keys[key], key));
190
203
  }
191
- // get a single column by col number. If it doesn't exist, create it and any gaps before it
204
+ /**
205
+ * Access an individual column by key, letter and 1-based column number
206
+ */
192
207
  getColumn(c) {
193
208
  let colNum;
194
209
  if (typeof c === "string") {
@@ -214,6 +229,17 @@ class Worksheet {
214
229
  }
215
230
  return this._columns[colNum - 1];
216
231
  }
232
+ /**
233
+ * Cut one or more columns (columns to the right are shifted left)
234
+ * and optionally insert more
235
+ *
236
+ * If column properties have been defined, they will be cut or moved accordingly
237
+ *
238
+ * Known Issue: If a splice causes any merged cells to move, the results may be unpredictable
239
+ *
240
+ * Also: If the worksheet has more rows than values in the column inserts,
241
+ * the rows will still be shifted as if the values existed
242
+ */
217
243
  spliceColumns(start, count, ...inserts) {
218
244
  const rows = this._rows;
219
245
  const nRows = rows.length;
@@ -253,9 +279,15 @@ class Worksheet {
253
279
  // account for defined names
254
280
  this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length);
255
281
  }
282
+ /**
283
+ * Get the last column in a worksheet
284
+ */
256
285
  get lastColumn() {
257
286
  return this.getColumn(this.columnCount);
258
287
  }
288
+ /**
289
+ * The total column size of the document. Equal to the maximum cell count from all of the rows
290
+ */
259
291
  get columnCount() {
260
292
  let maxCount = 0;
261
293
  this.eachRow(row => {
@@ -263,6 +295,9 @@ class Worksheet {
263
295
  });
264
296
  return maxCount;
265
297
  }
298
+ /**
299
+ * A count of the number of columns that have values
300
+ */
266
301
  get actualColumnCount() {
267
302
  // performance nightmare - for each row, counts all the columns used
268
303
  const counts = [];
@@ -294,23 +329,41 @@ class Worksheet {
294
329
  get _nextRow() {
295
330
  return this._lastRowNumber + 1;
296
331
  }
332
+ /**
333
+ * Get the last editable row in a worksheet (or undefined if there are none)
334
+ */
297
335
  get lastRow() {
298
336
  if (this._rows.length) {
299
337
  return this._rows[this._rows.length - 1];
300
338
  }
301
339
  return undefined;
302
340
  }
303
- // find a row (if exists) by row number
341
+ /**
342
+ * Tries to find and return row for row number, else undefined
343
+ *
344
+ * @param r - The 1-indexed row number
345
+ */
304
346
  findRow(r) {
305
347
  return this._rows[r - 1];
306
348
  }
307
- // find multiple rows (if exists) by row number
349
+ /**
350
+ * Tries to find and return rows for row number start and length, else undefined
351
+ *
352
+ * @param start - The 1-indexed starting row number
353
+ * @param length - The length of the expected array
354
+ */
308
355
  findRows(start, length) {
309
356
  return this._rows.slice(start - 1, start - 1 + length);
310
357
  }
358
+ /**
359
+ * The total row size of the document. Equal to the row number of the last row that has values.
360
+ */
311
361
  get rowCount() {
312
362
  return this._lastRowNumber;
313
363
  }
364
+ /**
365
+ * A count of the number of rows that have values. If a mid-document row is empty, it will not be included in the count.
366
+ */
314
367
  get actualRowCount() {
315
368
  // counts actual rows that have actual data
316
369
  let count = 0;
@@ -319,7 +372,9 @@ class Worksheet {
319
372
  });
320
373
  return count;
321
374
  }
322
- // get a row by row number.
375
+ /**
376
+ * Get or create row by 1-based index
377
+ */
323
378
  getRow(r) {
324
379
  let row = this._rows[r - 1];
325
380
  if (!row) {
@@ -327,7 +382,9 @@ class Worksheet {
327
382
  }
328
383
  return row;
329
384
  }
330
- // get multiple rows by row number.
385
+ /**
386
+ * Get or create rows by 1-based index
387
+ */
331
388
  getRows(start, length) {
332
389
  if (length < 1) {
333
390
  return undefined;
@@ -338,6 +395,10 @@ class Worksheet {
338
395
  }
339
396
  return rows;
340
397
  }
398
+ /**
399
+ * Add a couple of Rows by key-value, after the last current row, using the column keys,
400
+ * or add a row by contiguous Array (assign to columns A, B & C)
401
+ */
341
402
  addRow(value, style = "n") {
342
403
  const rowNo = this._nextRow;
343
404
  const row = this.getRow(rowNo);
@@ -345,6 +406,9 @@ class Worksheet {
345
406
  this._setStyleOption(rowNo, style[0] === "i" ? style : "n");
346
407
  return row;
347
408
  }
409
+ /**
410
+ * Add multiple rows by providing an array of arrays or key-value pairs
411
+ */
348
412
  addRows(value, style = "n") {
349
413
  const rows = [];
350
414
  value.forEach(row => {
@@ -352,11 +416,19 @@ class Worksheet {
352
416
  });
353
417
  return rows;
354
418
  }
419
+ /**
420
+ * Insert a Row by key-value, at the position (shifting down all rows from position),
421
+ * using the column keys, or add a row by contiguous Array (assign to columns A, B & C)
422
+ */
355
423
  insertRow(pos, value, style = "n") {
356
424
  this.spliceRows(pos, 0, value);
357
425
  this._setStyleOption(pos, style);
358
426
  return this.getRow(pos);
359
427
  }
428
+ /**
429
+ * Insert multiple rows at position (shifting down all rows from position)
430
+ * by providing an array of arrays or key-value pairs
431
+ */
360
432
  insertRows(pos, values, style = "n") {
361
433
  this.spliceRows(pos, 0, ...values);
362
434
  if (style !== "n") {
@@ -390,6 +462,9 @@ class Worksheet {
390
462
  });
391
463
  rDst.height = rSrc.height;
392
464
  }
465
+ /**
466
+ * Duplicate rows and insert new rows
467
+ */
393
468
  duplicateRow(rowNum, count, insert = false) {
394
469
  // create count duplicates of rowNum
395
470
  // either inserting new or overwriting existing rows
@@ -406,6 +481,12 @@ class Worksheet {
406
481
  });
407
482
  }
408
483
  }
484
+ /**
485
+ * Cut one or more rows (rows below are shifted up)
486
+ * and optionally insert more
487
+ *
488
+ * Known Issue: If a splice causes any merged cells to move, the results may be unpredictable
489
+ */
409
490
  spliceRows(start, count, ...inserts) {
410
491
  // same problem as row.splice, except worse.
411
492
  const nKeep = start + count;
@@ -470,26 +551,33 @@ class Worksheet {
470
551
  // account for defined names
471
552
  this.workbook.definedNames.spliceRows(this.name, start, count, nInserts);
472
553
  }
473
- eachRow(options, iteratee) {
474
- if (!iteratee) {
475
- iteratee = options;
476
- options = undefined;
554
+ eachRow(optOrCallback, maybeCallback) {
555
+ let options;
556
+ let callback;
557
+ if (typeof optOrCallback === "function") {
558
+ callback = optOrCallback;
559
+ }
560
+ else {
561
+ options = optOrCallback;
562
+ callback = maybeCallback;
477
563
  }
478
564
  if (options && options.includeEmpty) {
479
565
  const n = this._rows.length;
480
566
  for (let i = 1; i <= n; i++) {
481
- iteratee(this.getRow(i), i);
567
+ callback(this.getRow(i), i);
482
568
  }
483
569
  }
484
570
  else {
485
571
  this._rows.forEach(row => {
486
572
  if (row && row.hasValues) {
487
- iteratee(row, row.number);
573
+ callback(row, row.number);
488
574
  }
489
575
  });
490
576
  }
491
577
  }
492
- // return all rows as sparse array
578
+ /**
579
+ * Return all rows as sparse array
580
+ */
493
581
  getSheetValues() {
494
582
  const rows = [];
495
583
  this._rows.forEach(row => {
@@ -501,13 +589,17 @@ class Worksheet {
501
589
  }
502
590
  // =========================================================================
503
591
  // Cells
504
- // returns the cell at [r,c] or address given by r. If not found, return undefined
592
+ /**
593
+ * Returns the cell at [r,c] or address given by r. If not found, return undefined
594
+ */
505
595
  findCell(r, c) {
506
596
  const address = col_cache_js_1.colCache.getAddress(r, c);
507
597
  const row = this._rows[address.row - 1];
508
598
  return row ? row.findCell(address.col) : undefined;
509
599
  }
510
- // return the cell at [r,c] or address given by r. If not found, create a new one.
600
+ /**
601
+ * Get or create cell at [r,c] or address given by r
602
+ */
511
603
  getCell(r, c) {
512
604
  const address = col_cache_js_1.colCache.getAddress(r, c);
513
605
  const row = this.getRow(address.row);
@@ -515,7 +607,15 @@ class Worksheet {
515
607
  }
516
608
  // =========================================================================
517
609
  // Merge
518
- // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell
610
+ /**
611
+ * Merge cells, either:
612
+ *
613
+ * tlbr string, e.g. `'A4:B5'`
614
+ *
615
+ * tl string, br string, e.g. `'G10', 'H11'`
616
+ *
617
+ * t, l, b, r numbers, e.g. `10,11,12,13`
618
+ */
519
619
  mergeCells(...cells) {
520
620
  const dimensions = new range_js_1.Range(cells);
521
621
  this._mergeCellsInternal(dimensions);
@@ -560,9 +660,11 @@ class Worksheet {
560
660
  // return true if this._merges has a merge object
561
661
  return Object.values(this._merges).some(Boolean);
562
662
  }
563
- // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge,
564
- // un-merge the group. Note this function can affect multiple merges and merge-blocks are
565
- // atomic - either they're all merged or all un-merged.
663
+ /**
664
+ * Scan the range and if any cell is part of a merge, un-merge the group.
665
+ * Note this function can affect multiple merges and merge-blocks are
666
+ * atomic - either they're all merged or all un-merged.
667
+ */
566
668
  unMergeCells(...cells) {
567
669
  const dimensions = new range_js_1.Range(cells);
568
670
  // find any cells in that range and unmerge them
@@ -634,6 +736,10 @@ class Worksheet {
634
736
  }
635
737
  // =========================================================================
636
738
  // Images
739
+ /**
740
+ * Using the image id from `Workbook.addImage`,
741
+ * embed an image within the worksheet to cover a range
742
+ */
637
743
  addImage(imageId, range) {
638
744
  const model = {
639
745
  type: "image",
@@ -645,6 +751,9 @@ class Worksheet {
645
751
  getImages() {
646
752
  return this._media.filter(m => m.type === "image");
647
753
  }
754
+ /**
755
+ * Using the image id from `Workbook.addImage`, set the background to the worksheet
756
+ */
648
757
  addBackgroundImage(imageId) {
649
758
  const model = {
650
759
  type: "background",
@@ -658,6 +767,9 @@ class Worksheet {
658
767
  }
659
768
  // =========================================================================
660
769
  // Worksheet Protection
770
+ /**
771
+ * Protect the worksheet with optional password and options
772
+ */
661
773
  protect(password, options) {
662
774
  // TODO: make this function truly async
663
775
  // perhaps marshal to worker thread or something
@@ -692,17 +804,29 @@ class Worksheet {
692
804
  }
693
805
  // =========================================================================
694
806
  // Tables
807
+ /**
808
+ * Add a new table and return a reference to it
809
+ */
695
810
  addTable(model) {
696
811
  const table = new table_js_1.Table(this, model);
697
812
  this.tables[model.name] = table;
698
813
  return table;
699
814
  }
815
+ /**
816
+ * Fetch table by name
817
+ */
700
818
  getTable(name) {
701
819
  return this.tables[name];
702
820
  }
821
+ /**
822
+ * Delete table by name
823
+ */
703
824
  removeTable(name) {
704
825
  delete this.tables[name];
705
826
  }
827
+ /**
828
+ * Fetch all tables in the worksheet
829
+ */
706
830
  getTables() {
707
831
  return Object.values(this.tables);
708
832
  }
@@ -718,9 +842,15 @@ Please leave feedback at https://github.com/excelts/excelts/discussions/2575`);
718
842
  }
719
843
  // ===========================================================================
720
844
  // Conditional Formatting
845
+ /**
846
+ * Add conditional formatting rules
847
+ */
721
848
  addConditionalFormatting(cf) {
722
849
  this.conditionalFormattings.push(cf);
723
850
  }
851
+ /**
852
+ * Delete conditional formatting rules
853
+ */
724
854
  removeConditionalFormatting(filter) {
725
855
  if (typeof filter === "number") {
726
856
  this.conditionalFormattings.splice(filter, 1);
@@ -2,18 +2,19 @@
2
2
  /**
3
3
  * Simple ZIP extraction utilities
4
4
  * Provides easy-to-use Promise-based API for extracting ZIP files
5
+ * Works in both Node.js and browser environments
5
6
  */
6
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ZipParser = void 0;
7
9
  exports.extractAll = extractAll;
8
10
  exports.extractFile = extractFile;
9
11
  exports.listFiles = listFiles;
10
12
  exports.forEachEntry = forEachEntry;
11
- const stream_1 = require("stream");
12
- const parse_js_1 = require("./parse");
13
+ const zip_parser_js_1 = require("./zip-parser");
13
14
  /**
14
15
  * Extract all files from a ZIP buffer
15
16
  *
16
- * @param zipData - ZIP file data as Buffer or Uint8Array
17
+ * @param zipData - ZIP file data as Buffer, Uint8Array, or ArrayBuffer
17
18
  * @returns Map of file paths to their content
18
19
  *
19
20
  * @example
@@ -30,40 +31,24 @@ const parse_js_1 = require("./parse");
30
31
  */
31
32
  async function extractAll(zipData) {
32
33
  const files = new Map();
33
- const buffer = Buffer.isBuffer(zipData) ? zipData : Buffer.from(zipData);
34
- const parse = (0, parse_js_1.createParse)({ forceStream: true });
35
- const stream = stream_1.Readable.from([buffer]);
36
- stream.pipe(parse);
37
- for await (const entry of parse) {
38
- const zipEntry = entry;
39
- const isDirectory = zipEntry.type === "Directory";
40
- if (isDirectory) {
41
- files.set(zipEntry.path, {
42
- path: zipEntry.path,
43
- data: Buffer.alloc(0),
44
- isDirectory: true,
45
- size: 0
46
- });
47
- zipEntry.autodrain();
48
- }
49
- else {
50
- const data = await zipEntry.buffer();
51
- files.set(zipEntry.path, {
52
- path: zipEntry.path,
53
- data,
54
- isDirectory: false,
55
- size: data.length
56
- });
57
- }
34
+ const parser = new zip_parser_js_1.ZipParser(zipData);
35
+ for (const entry of parser.getEntries()) {
36
+ const data = await parser.extract(entry.path);
37
+ files.set(entry.path, {
38
+ path: entry.path,
39
+ data: data || new Uint8Array(0),
40
+ isDirectory: entry.isDirectory,
41
+ size: entry.uncompressedSize
42
+ });
58
43
  }
59
44
  return files;
60
45
  }
61
46
  /**
62
47
  * Extract a single file from a ZIP buffer
63
48
  *
64
- * @param zipData - ZIP file data as Buffer or Uint8Array
49
+ * @param zipData - ZIP file data as Buffer, Uint8Array, or ArrayBuffer
65
50
  * @param filePath - Path of the file to extract
66
- * @returns File content as Buffer, or null if not found
51
+ * @returns File content as Uint8Array, or null if not found
67
52
  *
68
53
  * @example
69
54
  * ```ts
@@ -72,31 +57,18 @@ async function extractAll(zipData) {
72
57
  * const zipData = fs.readFileSync("archive.zip");
73
58
  * const content = await extractFile(zipData, "readme.txt");
74
59
  * if (content) {
75
- * console.log(content.toString("utf-8"));
60
+ * console.log(new TextDecoder().decode(content));
76
61
  * }
77
62
  * ```
78
63
  */
79
64
  async function extractFile(zipData, filePath) {
80
- const buffer = Buffer.isBuffer(zipData) ? zipData : Buffer.from(zipData);
81
- const parse = (0, parse_js_1.createParse)({ forceStream: true });
82
- const stream = stream_1.Readable.from([buffer]);
83
- stream.pipe(parse);
84
- for await (const entry of parse) {
85
- const zipEntry = entry;
86
- if (zipEntry.path === filePath) {
87
- if (zipEntry.type === "Directory") {
88
- return Buffer.alloc(0);
89
- }
90
- return zipEntry.buffer();
91
- }
92
- zipEntry.autodrain();
93
- }
94
- return null;
65
+ const parser = new zip_parser_js_1.ZipParser(zipData);
66
+ return parser.extract(filePath);
95
67
  }
96
68
  /**
97
69
  * List all file paths in a ZIP buffer (without extracting content)
98
70
  *
99
- * @param zipData - ZIP file data as Buffer or Uint8Array
71
+ * @param zipData - ZIP file data as Buffer, Uint8Array, or ArrayBuffer
100
72
  * @returns Array of file paths
101
73
  *
102
74
  * @example
@@ -109,22 +81,13 @@ async function extractFile(zipData, filePath) {
109
81
  * ```
110
82
  */
111
83
  async function listFiles(zipData) {
112
- const paths = [];
113
- const buffer = Buffer.isBuffer(zipData) ? zipData : Buffer.from(zipData);
114
- const parse = (0, parse_js_1.createParse)({ forceStream: true });
115
- const stream = stream_1.Readable.from([buffer]);
116
- stream.pipe(parse);
117
- for await (const entry of parse) {
118
- const zipEntry = entry;
119
- paths.push(zipEntry.path);
120
- zipEntry.autodrain();
121
- }
122
- return paths;
84
+ const parser = new zip_parser_js_1.ZipParser(zipData);
85
+ return parser.listFiles();
123
86
  }
124
87
  /**
125
88
  * Iterate over ZIP entries with a callback (memory efficient for large ZIPs)
126
89
  *
127
- * @param zipData - ZIP file data as Buffer or Uint8Array
90
+ * @param zipData - ZIP file data as Buffer, Uint8Array, or ArrayBuffer
128
91
  * @param callback - Async callback for each entry, return false to stop iteration
129
92
  *
130
93
  * @example
@@ -134,33 +97,18 @@ async function listFiles(zipData) {
134
97
  * await forEachEntry(zipData, async (path, getData) => {
135
98
  * if (path.endsWith(".xml")) {
136
99
  * const content = await getData();
137
- * console.log(content.toString("utf-8"));
100
+ * console.log(new TextDecoder().decode(content));
138
101
  * }
139
102
  * return true; // continue iteration
140
103
  * });
141
104
  * ```
142
105
  */
143
106
  async function forEachEntry(zipData, callback) {
144
- const buffer = Buffer.isBuffer(zipData) ? zipData : Buffer.from(zipData);
145
- const parse = (0, parse_js_1.createParse)({ forceStream: true });
146
- const stream = stream_1.Readable.from([buffer]);
147
- stream.pipe(parse);
148
- for await (const entry of parse) {
149
- const zipEntry = entry;
150
- let dataPromise = null;
151
- const getData = () => {
152
- if (!dataPromise) {
153
- dataPromise = zipEntry.buffer();
154
- }
155
- return dataPromise;
156
- };
157
- const shouldContinue = await callback(zipEntry.path, getData, zipEntry);
158
- // If callback didn't read data, drain it
159
- if (!dataPromise) {
160
- zipEntry.autodrain();
161
- }
162
- if (shouldContinue === false) {
163
- break;
164
- }
165
- }
107
+ const parser = new zip_parser_js_1.ZipParser(zipData);
108
+ await parser.forEach(async (entry, getData) => {
109
+ return callback(entry.path, getData, entry);
110
+ });
166
111
  }
112
+ // Re-export ZipParser for advanced usage
113
+ var zip_parser_js_2 = require("./zip-parser");
114
+ Object.defineProperty(exports, "ZipParser", { enumerable: true, get: function () { return zip_parser_js_2.ZipParser; } });
@@ -1,11 +1,26 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Unzip utilities for parsing ZIP archives
4
+ *
5
+ * Two APIs are provided:
6
+ *
7
+ * 1. **Stream-based API** (Node.js only):
8
+ * - `Parse`, `createParse` - Parse ZIP files as a stream
9
+ * - Best for large files where you don't want to load entire file into memory
10
+ * - Requires Node.js `stream` module
11
+ *
12
+ * 2. **Buffer-based API** (Browser + Node.js):
13
+ * - `extractAll`, `extractFile`, `listFiles`, `forEachEntry`, `ZipParser`
14
+ * - Works in both Node.js and browser environments
15
+ * - Uses native `DecompressionStream` in browser, `zlib` in Node.js
16
+ * - Best for files already loaded into memory (ArrayBuffer, Uint8Array)
17
+ *
4
18
  * Original source: https://github.com/ZJONSSON/node-unzipper
5
19
  * License: MIT
6
20
  */
7
21
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.forEachEntry = exports.listFiles = exports.extractFile = exports.extractAll = exports.parseExtraField = exports.parseDateTime = exports.parseBuffer = exports.bufferStream = exports.NoopStream = exports.PullStream = exports.createParse = exports.Parse = void 0;
22
+ exports.ZipParser = exports.forEachEntry = exports.listFiles = exports.extractFile = exports.extractAll = exports.parseExtraField = exports.parseDateTime = exports.parseBuffer = exports.bufferStream = exports.NoopStream = exports.PullStream = exports.createParse = exports.Parse = void 0;
23
+ // Stream-based API (Node.js only - requires stream module)
9
24
  var parse_js_1 = require("./parse");
10
25
  Object.defineProperty(exports, "Parse", { enumerable: true, get: function () { return parse_js_1.Parse; } });
11
26
  Object.defineProperty(exports, "createParse", { enumerable: true, get: function () { return parse_js_1.createParse; } });
@@ -21,9 +36,10 @@ var parse_datetime_js_1 = require("./parse-datetime");
21
36
  Object.defineProperty(exports, "parseDateTime", { enumerable: true, get: function () { return parse_datetime_js_1.parseDateTime; } });
22
37
  var parse_extra_field_js_1 = require("./parse-extra-field");
23
38
  Object.defineProperty(exports, "parseExtraField", { enumerable: true, get: function () { return parse_extra_field_js_1.parseExtraField; } });
24
- // Simple extraction API
39
+ // Buffer-based API (Browser + Node.js - cross-platform)
25
40
  var extract_js_1 = require("./extract");
26
41
  Object.defineProperty(exports, "extractAll", { enumerable: true, get: function () { return extract_js_1.extractAll; } });
27
42
  Object.defineProperty(exports, "extractFile", { enumerable: true, get: function () { return extract_js_1.extractFile; } });
28
43
  Object.defineProperty(exports, "listFiles", { enumerable: true, get: function () { return extract_js_1.listFiles; } });
29
44
  Object.defineProperty(exports, "forEachEntry", { enumerable: true, get: function () { return extract_js_1.forEachEntry; } });
45
+ Object.defineProperty(exports, "ZipParser", { enumerable: true, get: function () { return extract_js_1.ZipParser; } });