read-excel-file 9.1.0 → 9.1.1
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/commonjs/export/convertInputToNodeStream.js +6 -6
- package/commonjs/export/convertInputToNodeStream.js.map +1 -1
- package/commonjs/zip/unzipFromStream.js +8 -2
- package/commonjs/zip/unzipFromStream.js.map +1 -1
- package/commonjs/zip/unzipFromStream.test.js.map +1 -1
- package/modules/export/convertInputToNodeStream.js +3 -3
- package/modules/export/convertInputToNodeStream.js.map +1 -1
- package/modules/zip/unzipFromStream.js +7 -1
- package/modules/zip/unzipFromStream.js.map +1 -1
- package/modules/zip/unzipFromStream.test.js.map +1 -1
- package/node/input.d.ts +2 -2
- package/package.json +1 -1
|
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports["default"] = convertInputToNodeStream;
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
8
|
+
var _nodeFs = _interopRequireDefault(require("node:fs"));
|
|
9
|
+
var _nodeBuffer = require("node:buffer");
|
|
10
|
+
var _nodeStream = _interopRequireWildcard(require("node:stream"));
|
|
11
11
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
12
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
@@ -17,7 +17,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
17
17
|
* @returns {Stream}
|
|
18
18
|
*/
|
|
19
19
|
function convertInputToNodeStream(input) {
|
|
20
|
-
return input instanceof
|
|
20
|
+
return input instanceof _nodeStream["default"] ? input : input instanceof Buffer ? createReadableStreamFromBuffer(input) : input instanceof _nodeBuffer.Blob ? createReadableStreamFromBlob(input) : _nodeFs["default"].createReadStream(input);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
// Creates a readable stream from a `Buffer`.
|
|
@@ -28,7 +28,7 @@ function createReadableStreamFromBuffer(buffer) {
|
|
|
28
28
|
if (buffer.length === 0) {
|
|
29
29
|
throw new Error('No data');
|
|
30
30
|
}
|
|
31
|
-
return
|
|
31
|
+
return _nodeStream.Readable.from(buffer);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
// Creates a readable stream from a `Blob`.
|
|
@@ -40,6 +40,6 @@ function createReadableStreamFromBlob(blob) {
|
|
|
40
40
|
throw new Error('No data');
|
|
41
41
|
}
|
|
42
42
|
// Convert a web `ReadableStream` to a Node.js `Readable` `Stream`.
|
|
43
|
-
return
|
|
43
|
+
return _nodeStream.Readable.fromWeb(blob.stream());
|
|
44
44
|
}
|
|
45
45
|
//# sourceMappingURL=convertInputToNodeStream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertInputToNodeStream.js","names":["
|
|
1
|
+
{"version":3,"file":"convertInputToNodeStream.js","names":["_nodeFs","_interopRequireDefault","require","_nodeBuffer","_nodeStream","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","convertInputToNodeStream","input","Stream","Buffer","createReadableStreamFromBuffer","Blob","createReadableStreamFromBlob","fs","createReadStream","buffer","length","Error","Readable","from","blob","size","fromWeb","stream"],"sources":["../../source/export/convertInputToNodeStream.js"],"sourcesContent":["import fs from 'node:fs'\r\nimport { Blob } from 'node:buffer'\r\nimport Stream, { Readable } from 'node:stream'\r\n\r\n/**\r\n * Converts Node.js input argument to a stream.\r\n * @param {(string|Stream|Buffer|Blob)} input - A Node.js readable stream or a `Buffer` or a `Blob` or a path to a file.\r\n * @returns {Stream}\r\n */\r\nexport default function convertInputToNodeStream(input) {\r\n return input instanceof Stream\r\n ? input\r\n : (\r\n input instanceof Buffer\r\n ? createReadableStreamFromBuffer(input)\r\n : (\r\n input instanceof Blob\r\n ? createReadableStreamFromBlob(input)\r\n : fs.createReadStream(input)\r\n )\r\n )\r\n}\r\n\r\n// Creates a readable stream from a `Buffer`.\r\nfunction createReadableStreamFromBuffer(buffer) {\r\n // Node.js seems to have a bug in `Readable.from()` function:\r\n // it doesn't correctly handle empty buffers, i.e. it doesn't return a correct stream.\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/106\r\n if (buffer.length === 0) {\r\n throw new Error('No data')\r\n }\r\n return Readable.from(buffer)\r\n}\r\n\r\n// Creates a readable stream from a `Blob`.\r\nfunction createReadableStreamFromBlob(blob) {\r\n // I didn't test but I'd presume that Node.js would throw on an empty `Blob`\r\n // same way it does on an empty `Buffer`.\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/106\r\n if (blob.size === 0) {\r\n throw new Error('No data')\r\n }\r\n // Convert a web `ReadableStream` to a Node.js `Readable` `Stream`.\r\n return Readable.fromWeb(blob.stream())\r\n}"],"mappings":";;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAC,uBAAA,CAAAH,OAAA;AAA8C,SAAAI,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,yBAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAF,wBAAAM,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,aAAAE,OAAA,CAAAF,GAAA,yBAAAA,GAAA,uCAAAA,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,cAAAN,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAAA,SAAAhB,uBAAAU,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,gBAAAA,GAAA;AAE9C;AACA;AACA;AACA;AACA;AACe,SAASiB,wBAAwBA,CAACC,KAAK,EAAE;EACtD,OAAOA,KAAK,YAAYC,sBAAM,GAC1BD,KAAK,GAELA,KAAK,YAAYE,MAAM,GACnBC,8BAA8B,CAACH,KAAK,CAAC,GAErCA,KAAK,YAAYI,gBAAI,GACjBC,4BAA4B,CAACL,KAAK,CAAC,GACnCM,kBAAE,CAACC,gBAAgB,CAACP,KAAK,CAElC;AACL;;AAEA;AACA,SAASG,8BAA8BA,CAACK,MAAM,EAAE;EAC9C;EACA;EACA;EACA,IAAIA,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE;IACvB,MAAM,IAAIC,KAAK,CAAC,SAAS,CAAC;EAC5B;EACA,OAAOC,oBAAQ,CAACC,IAAI,CAACJ,MAAM,CAAC;AAC9B;;AAEA;AACA,SAASH,4BAA4BA,CAACQ,IAAI,EAAE;EAC1C;EACA;EACA;EACA,IAAIA,IAAI,CAACC,IAAI,KAAK,CAAC,EAAE;IACnB,MAAM,IAAIJ,KAAK,CAAC,SAAS,CAAC;EAC5B;EACA;EACA,OAAOC,oBAAQ,CAACI,OAAO,CAACF,IAAI,CAACG,MAAM,CAAC,CAAC,CAAC;AACxC"}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = unzipFromStream;
|
|
7
7
|
var _fflate = require("fflate");
|
|
8
|
-
var
|
|
8
|
+
var _nodeBuffer = require("node:buffer");
|
|
9
9
|
// This code was originally submitted by Stian Jensen.
|
|
10
10
|
// https://github.com/catamphetamine/read-excel-file/pull/122
|
|
11
11
|
|
|
@@ -45,6 +45,12 @@ var _buffer = require("buffer");
|
|
|
45
45
|
// This code reads the binary input stream and forwards each chunk of it to `unzip.push()`,
|
|
46
46
|
// and then collects the decompressed file entries.
|
|
47
47
|
//
|
|
48
|
+
// P.S. In the comments to `UnzipInflate` in `fflate` package, it says:
|
|
49
|
+
// "Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for better performance."
|
|
50
|
+
// But there seems to be no `AsyncZipInflate` class in the `fflate` package.
|
|
51
|
+
// https://github.com/101arrowz/fflate/issues/277
|
|
52
|
+
// So just the regular `UnzipInflate` is used here.
|
|
53
|
+
//
|
|
48
54
|
|
|
49
55
|
/**
|
|
50
56
|
* Reads `*.zip` file contents.
|
|
@@ -104,7 +110,7 @@ function unzipFromStream(stream) {
|
|
|
104
110
|
}
|
|
105
111
|
chunks.push(chunk);
|
|
106
112
|
if (isLast) {
|
|
107
|
-
files[entry.name] =
|
|
113
|
+
files[entry.name] = _nodeBuffer.Buffer.concat(chunks);
|
|
108
114
|
}
|
|
109
115
|
};
|
|
110
116
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unzipFromStream.js","names":["_fflate","require","_buffer","unzipFromStream","stream","_ref","arguments","length","undefined","filter","files","Promise","resolve","reject","errored","onError","error","_createZipFileValidat","createZipFileValidator","isValid","Error","validateChunk","unzip","Unzip","entry","name","endsWith","path","chunks","ondata","chunk","isLast","push","Buffer","concat","start","register","UnzipInflate","on","Uint8Array","onValidationResult","firstBytesCount","firstBytes","firstBytesCheckResult","i"],"sources":["../../source/zip/unzipFromStream.js"],"sourcesContent":["// This code was originally submitted by Stian Jensen.\r\n// https://github.com/catamphetamine/read-excel-file/pull/122\r\n\r\n// A `*.zip` file consists of individual file entries with the \"total\" summary section\r\n// placed at the end of the file rather than at the start of it, which was originally done\r\n// to allow for easy append of data to a given `.zip` file.\r\n// https://en.wikipedia.org/wiki/ZIP_(file_format)\r\n//\r\n// But this also means that reading a `*.zip` file from a stream can't really be done\r\n// using the \"officially recommended\" way of first reading the \"total\" summary section\r\n// and only then reading the individual file entries specified in that summary section.\r\n//\r\n// So in order to be able to read a `*.zip` file from a stream, some corners have to be cut.\r\n// For example, the \"total\" summary section is completely ignored and instead the reader\r\n// should adopt \"data recovery\" software approach — it should proactively \"scan\" the input stream\r\n// for individual file entries and handle them one-by-one as they come.\r\n//\r\n// Such approach doesn't seem to contradict with the XLSX specification\r\n// because an `*.xlsx` files is supposed to be a normal `.zip` archive\r\n// without any \"trickery\" such as \"deleted\" files or \"garbage\" data\r\n// hiding under the hood.\r\n//\r\n// So when handling `*.xlsx` file, we assume that each such file must start\r\n// with an individual file entry followed by another individual file entry, etc.\r\n//\r\n// When the \"summary\" section is reached, we assume that the archive has ended.\r\n//\r\n// To read a `.zip` archive, the code uses `fflate`'s `Unzip` class\r\n// with `UnzipInflate` decompression implementation to decompress the data\r\n// that was previously compressed using `DEFLATE` compressing algorithm,\r\n// which is what `*.xlsx` files use.\r\n//\r\n// The `Unzip` class doesn't speak the Node.js stream interface, and `fflate`'s readme\r\n// doesn't include a clear \"reading a `.zip` file from a Node.js stream\" section.\r\n// https://github.com/101arrowz/fflate/issues/251\r\n// Instead, the `Unzip` class has its own `push(chunk)` / `onfile` / `entry.ondata` protocol.\r\n// This code reads the binary input stream and forwards each chunk of it to `unzip.push()`,\r\n// and then collects the decompressed file entries.\r\n//\r\nimport { Unzip, UnzipInflate } from 'fflate'\r\n\r\nimport { Buffer } from 'buffer'\r\n\r\n/**\r\n * Reads `*.zip` file contents.\r\n * @param {Stream} stream\r\n * @return {Promise<Record<string,Buffer>>} Resolves to an object holding `*.zip` file entries. P.S. `Buffer` is a `Uint8Array`.\r\n */\r\nexport default function unzipFromStream(stream, { filter } = {}) {\r\n\t// The `files` object stores the files and their contents.\r\n\tconst files = {}\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\tlet errored = false\r\n\r\n\t\tconst onError = (error) => {\r\n\t\t\tif (!errored) {\r\n\t\t\t\terrored = true\r\n\t\t\t\treject(error)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst { validateChunk } = createZipFileValidator((isValid) => {\r\n\t\t\tif (!isValid) {\r\n\t\t\t\tonError(new Error('Invalid `.zip` archive'))\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\t// `Unzip` discovers each individual file entry in the input data stream\r\n\t\t// and then calls the callback function for each such entry.\r\n\t\tconst unzip = new Unzip((entry) => {\r\n\t\t\t// If there already was an error while reading this `.zip` file,\r\n\t\t\t// ignore any follow-up entries.\r\n\t\t\tif (errored) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\t// Skip directory entries (their names end with a slash).\r\n\t\t\t// Only files are of any interest.\r\n\t\t\tif (entry.name.endsWith('/')) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\t// See if this file should be ignored.\r\n\t\t\t// If it should, this entry won't be processed, i.e. `Unzip` will not try\r\n\t\t\t// to decompress its data, and will just discard it.\r\n\t\t\tif (filter && !filter({ path: entry.name })) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\tconst chunks = []\r\n\r\n\t\t\t// `entry.ondata` is called with each decompressed chunk of the entry,\r\n\t\t\t// and a final time with `isLast === true` once the entry is complete.\r\n\t\t\tentry.ondata = (error, chunk, isLast) => {\r\n\t\t\t\tif (error) {\r\n\t\t\t\t\treturn onError(error)\r\n\t\t\t\t}\r\n\t\t\t\tchunks.push(chunk)\r\n\t\t\t\tif (isLast) {\r\n\t\t\t\t\tfiles[entry.name] = Buffer.concat(chunks)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Start decompressing this entry.\r\n\t\t\tentry.start()\r\n\t\t})\r\n\r\n\t\t// Register the decompressor for the data that was compressed using\r\n\t\t// `DEFLATE` compression algorithm (compression method `8`),\r\n\t\t// which is what `.xlsx` files use.\r\n\t\tunzip.register(UnzipInflate)\r\n\r\n\t\tstream\r\n\t\t\t// Catch errors emitted from the input stream (for example, a file read error).\r\n\t\t\t.on('error', onError)\r\n\t\t\t// When another chunk of data is read from the input stream.\r\n\t\t\t.on('data', (chunk) => {\r\n\t\t\t\t// If there already was an error while reading this `.zip` file,\r\n\t\t\t\t// ignore any follow-up data chunks.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\t// Validate the `.zip` archive as its data comes through.\r\n\t\t\t\tvalidateChunk(chunk)\r\n\t\t\t\t// If the `.zip` archive is found to be invalid, stop any further\r\n\t\t\t\t// processing of it.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\t// Push the next data chunk to `fflate`'s `Unzip` class instance.\r\n\t\t\t\t// The `.push()` function is synchronous, meaning that by the time it returns,\r\n\t\t\t\t// any complete files entries encountered so far have already been decompressed\r\n\t\t\t\t// and populated in the `files` object.\r\n\t\t\t\ttry {\r\n\t\t\t\t\tunzip.push(chunk, false)\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tonError(error)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// When there's no more data in the input stream to consume,\r\n\t\t\t// finish reading the `.zip` archive.\r\n\t\t\t.on('end', () => {\r\n\t\t\t\t// If there were any errors when reading the `.zip` archive,\r\n\t\t\t\t// don't `resolve()` with anything.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\ttry {\r\n\t\t\t\t\t// Signal the end of the archive to `fflate`'s `Unzip` class instance.\r\n\t\t\t\t\t// It will flush any remaining state in it.\r\n\t\t\t\t\tunzip.push(new Uint8Array(0), true)\r\n\t\t\t\t\t// Resolve with the unzipped files.\r\n\t\t\t\t\tresolve(files)\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tonError(error)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t})\r\n}\r\n\r\n// Every section in a `.zip` archive is marked with 4 bytes, the first two of which\r\n// are `0x50` and `0x4B`, which reads \"PK\", referencing the initials of the inventor Phil Katz.\r\n//\r\n// It looks like `fflate`'s `Unzip` doesn't ever complain about whatever data is thrown at it.\r\n// Due to how `.zip` file format is defined, \"garbage\" data could be placed at various\r\n// places in it and it'd still be a valid `.zip` archive. It's likely that for this reason\r\n// `fflate` doesn't ever complain and simply emits no entries when fed any kind of invalid data.\r\n//\r\n// In order to introduce some basic validation, here we specifically demand\r\n// that a `.zip` archive must at least start with an individual file entry\r\n// because an `.xlsx` file creator softwared really shouldn't attempt doing\r\n// anything \"funny\" when writing a file, hence this adherence requirement.\r\n//\r\nfunction createZipFileValidator(onValidationResult) {\r\n\tconst firstBytesCount = 2\r\n\tconst firstBytes = []\r\n\tlet firstBytesCheckResult\r\n\treturn {\r\n\t\tvalidateChunk(chunk) {\r\n\t\t\tif (firstBytes.length < 2) {\r\n\t\t\t\tlet i = 0\r\n\t\t\t\twhile (i < chunk.length && i < firstBytesCount) {\r\n\t\t\t\t\tfirstBytes.push(chunk[i])\r\n\t\t\t\t\ti++\r\n\t\t\t\t}\r\n\t\t\t\tif (firstBytes.length === 2) {\r\n\t\t\t\t\tconst isValid = firstBytes[0] === 0x50 && firstBytes[1] === 0x4B\r\n\t\t\t\t\tonValidationResult(isValid)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unzipFromStream.js","names":["_fflate","require","_nodeBuffer","unzipFromStream","stream","_ref","arguments","length","undefined","filter","files","Promise","resolve","reject","errored","onError","error","_createZipFileValidat","createZipFileValidator","isValid","Error","validateChunk","unzip","Unzip","entry","name","endsWith","path","chunks","ondata","chunk","isLast","push","Buffer","concat","start","register","UnzipInflate","on","Uint8Array","onValidationResult","firstBytesCount","firstBytes","firstBytesCheckResult","i"],"sources":["../../source/zip/unzipFromStream.js"],"sourcesContent":["// This code was originally submitted by Stian Jensen.\r\n// https://github.com/catamphetamine/read-excel-file/pull/122\r\n\r\n// A `*.zip` file consists of individual file entries with the \"total\" summary section\r\n// placed at the end of the file rather than at the start of it, which was originally done\r\n// to allow for easy append of data to a given `.zip` file.\r\n// https://en.wikipedia.org/wiki/ZIP_(file_format)\r\n//\r\n// But this also means that reading a `*.zip` file from a stream can't really be done\r\n// using the \"officially recommended\" way of first reading the \"total\" summary section\r\n// and only then reading the individual file entries specified in that summary section.\r\n//\r\n// So in order to be able to read a `*.zip` file from a stream, some corners have to be cut.\r\n// For example, the \"total\" summary section is completely ignored and instead the reader\r\n// should adopt \"data recovery\" software approach — it should proactively \"scan\" the input stream\r\n// for individual file entries and handle them one-by-one as they come.\r\n//\r\n// Such approach doesn't seem to contradict with the XLSX specification\r\n// because an `*.xlsx` files is supposed to be a normal `.zip` archive\r\n// without any \"trickery\" such as \"deleted\" files or \"garbage\" data\r\n// hiding under the hood.\r\n//\r\n// So when handling `*.xlsx` file, we assume that each such file must start\r\n// with an individual file entry followed by another individual file entry, etc.\r\n//\r\n// When the \"summary\" section is reached, we assume that the archive has ended.\r\n//\r\n// To read a `.zip` archive, the code uses `fflate`'s `Unzip` class\r\n// with `UnzipInflate` decompression implementation to decompress the data\r\n// that was previously compressed using `DEFLATE` compressing algorithm,\r\n// which is what `*.xlsx` files use.\r\n//\r\n// The `Unzip` class doesn't speak the Node.js stream interface, and `fflate`'s readme\r\n// doesn't include a clear \"reading a `.zip` file from a Node.js stream\" section.\r\n// https://github.com/101arrowz/fflate/issues/251\r\n// Instead, the `Unzip` class has its own `push(chunk)` / `onfile` / `entry.ondata` protocol.\r\n// This code reads the binary input stream and forwards each chunk of it to `unzip.push()`,\r\n// and then collects the decompressed file entries.\r\n//\r\n// P.S. In the comments to `UnzipInflate` in `fflate` package, it says:\r\n// \"Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for better performance.\"\r\n// But there seems to be no `AsyncZipInflate` class in the `fflate` package.\r\n// https://github.com/101arrowz/fflate/issues/277\r\n// So just the regular `UnzipInflate` is used here.\r\n//\r\nimport { Unzip, UnzipInflate } from 'fflate'\r\n\r\nimport { Buffer } from 'node:buffer'\r\n\r\n/**\r\n * Reads `*.zip` file contents.\r\n * @param {Stream} stream\r\n * @return {Promise<Record<string,Buffer>>} Resolves to an object holding `*.zip` file entries. P.S. `Buffer` is a `Uint8Array`.\r\n */\r\nexport default function unzipFromStream(stream, { filter } = {}) {\r\n\t// The `files` object stores the files and their contents.\r\n\tconst files = {}\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\tlet errored = false\r\n\r\n\t\tconst onError = (error) => {\r\n\t\t\tif (!errored) {\r\n\t\t\t\terrored = true\r\n\t\t\t\treject(error)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst { validateChunk } = createZipFileValidator((isValid) => {\r\n\t\t\tif (!isValid) {\r\n\t\t\t\tonError(new Error('Invalid `.zip` archive'))\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\t// `Unzip` discovers each individual file entry in the input data stream\r\n\t\t// and then calls the callback function for each such entry.\r\n\t\tconst unzip = new Unzip((entry) => {\r\n\t\t\t// If there already was an error while reading this `.zip` file,\r\n\t\t\t// ignore any follow-up entries.\r\n\t\t\tif (errored) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\t// Skip directory entries (their names end with a slash).\r\n\t\t\t// Only files are of any interest.\r\n\t\t\tif (entry.name.endsWith('/')) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\t// See if this file should be ignored.\r\n\t\t\t// If it should, this entry won't be processed, i.e. `Unzip` will not try\r\n\t\t\t// to decompress its data, and will just discard it.\r\n\t\t\tif (filter && !filter({ path: entry.name })) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\tconst chunks = []\r\n\r\n\t\t\t// `entry.ondata` is called with each decompressed chunk of the entry,\r\n\t\t\t// and a final time with `isLast === true` once the entry is complete.\r\n\t\t\tentry.ondata = (error, chunk, isLast) => {\r\n\t\t\t\tif (error) {\r\n\t\t\t\t\treturn onError(error)\r\n\t\t\t\t}\r\n\t\t\t\tchunks.push(chunk)\r\n\t\t\t\tif (isLast) {\r\n\t\t\t\t\tfiles[entry.name] = Buffer.concat(chunks)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Start decompressing this entry.\r\n\t\t\tentry.start()\r\n\t\t})\r\n\r\n\t\t// Register the decompressor for the data that was compressed using\r\n\t\t// `DEFLATE` compression algorithm (compression method `8`),\r\n\t\t// which is what `.xlsx` files use.\r\n\t\tunzip.register(UnzipInflate)\r\n\r\n\t\tstream\r\n\t\t\t// Catch errors emitted from the input stream (for example, a file read error).\r\n\t\t\t.on('error', onError)\r\n\t\t\t// When another chunk of data is read from the input stream.\r\n\t\t\t.on('data', (chunk) => {\r\n\t\t\t\t// If there already was an error while reading this `.zip` file,\r\n\t\t\t\t// ignore any follow-up data chunks.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\t// Validate the `.zip` archive as its data comes through.\r\n\t\t\t\tvalidateChunk(chunk)\r\n\t\t\t\t// If the `.zip` archive is found to be invalid, stop any further\r\n\t\t\t\t// processing of it.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\t// Push the next data chunk to `fflate`'s `Unzip` class instance.\r\n\t\t\t\t// The `.push()` function is synchronous, meaning that by the time it returns,\r\n\t\t\t\t// any complete files entries encountered so far have already been decompressed\r\n\t\t\t\t// and populated in the `files` object.\r\n\t\t\t\ttry {\r\n\t\t\t\t\tunzip.push(chunk, false)\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tonError(error)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// When there's no more data in the input stream to consume,\r\n\t\t\t// finish reading the `.zip` archive.\r\n\t\t\t.on('end', () => {\r\n\t\t\t\t// If there were any errors when reading the `.zip` archive,\r\n\t\t\t\t// don't `resolve()` with anything.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\ttry {\r\n\t\t\t\t\t// Signal the end of the archive to `fflate`'s `Unzip` class instance.\r\n\t\t\t\t\t// It will flush any remaining state in it.\r\n\t\t\t\t\tunzip.push(new Uint8Array(0), true)\r\n\t\t\t\t\t// Resolve with the unzipped files.\r\n\t\t\t\t\tresolve(files)\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tonError(error)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t})\r\n}\r\n\r\n// Every section in a `.zip` archive is marked with 4 bytes, the first two of which\r\n// are `0x50` and `0x4B`, which reads \"PK\", referencing the initials of the inventor Phil Katz.\r\n//\r\n// It looks like `fflate`'s `Unzip` doesn't ever complain about whatever data is thrown at it.\r\n// Due to how `.zip` file format is defined, \"garbage\" data could be placed at various\r\n// places in it and it'd still be a valid `.zip` archive. It's likely that for this reason\r\n// `fflate` doesn't ever complain and simply emits no entries when fed any kind of invalid data.\r\n//\r\n// In order to introduce some basic validation, here we specifically demand\r\n// that a `.zip` archive must at least start with an individual file entry\r\n// because an `.xlsx` file creator softwared really shouldn't attempt doing\r\n// anything \"funny\" when writing a file, hence this adherence requirement.\r\n//\r\nfunction createZipFileValidator(onValidationResult) {\r\n\tconst firstBytesCount = 2\r\n\tconst firstBytes = []\r\n\tlet firstBytesCheckResult\r\n\treturn {\r\n\t\tvalidateChunk(chunk) {\r\n\t\t\tif (firstBytes.length < 2) {\r\n\t\t\t\tlet i = 0\r\n\t\t\t\twhile (i < chunk.length && i < firstBytesCount) {\r\n\t\t\t\t\tfirstBytes.push(chunk[i])\r\n\t\t\t\t\ti++\r\n\t\t\t\t}\r\n\t\t\t\tif (firstBytes.length === 2) {\r\n\t\t\t\t\tconst isValid = firstBytes[0] === 0x50 && firstBytes[1] === 0x4B\r\n\t\t\t\t\tonValidationResult(isValid)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"],"mappings":";;;;;;AA6CA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AA/CA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACe,SAASE,eAAeA,CAACC,MAAM,EAAmB;EAAA,IAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAJ,CAAC,CAAC;IAAbG,MAAM,GAAAJ,IAAA,CAANI,MAAM;EACvD;EACA,IAAMC,KAAK,GAAG,CAAC,CAAC;EAEhB,OAAO,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IACvC,IAAIC,OAAO,GAAG,KAAK;IAEnB,IAAMC,OAAO,GAAG,SAAVA,OAAOA,CAAIC,KAAK,EAAK;MAC1B,IAAI,CAACF,OAAO,EAAE;QACbA,OAAO,GAAG,IAAI;QACdD,MAAM,CAACG,KAAK,CAAC;MACd;IACD,CAAC;IAED,IAAAC,qBAAA,GAA0BC,sBAAsB,CAAC,UAACC,OAAO,EAAK;QAC7D,IAAI,CAACA,OAAO,EAAE;UACbJ,OAAO,CAAC,IAAIK,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC7C;MACD,CAAC,CAAC;MAJMC,aAAa,GAAAJ,qBAAA,CAAbI,aAAa;;IAMrB;IACA;IACA,IAAMC,KAAK,GAAG,IAAIC,aAAK,CAAC,UAACC,KAAK,EAAK;MAClC;MACA;MACA,IAAIV,OAAO,EAAE;QACZ;MACD;;MAEA;MACA;MACA,IAAIU,KAAK,CAACC,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC7B;MACD;;MAEA;MACA;MACA;MACA,IAAIjB,MAAM,IAAI,CAACA,MAAM,CAAC;QAAEkB,IAAI,EAAEH,KAAK,CAACC;MAAK,CAAC,CAAC,EAAE;QAC5C;MACD;MAEA,IAAMG,MAAM,GAAG,EAAE;;MAEjB;MACA;MACAJ,KAAK,CAACK,MAAM,GAAG,UAACb,KAAK,EAAEc,KAAK,EAAEC,MAAM,EAAK;QACxC,IAAIf,KAAK,EAAE;UACV,OAAOD,OAAO,CAACC,KAAK,CAAC;QACtB;QACAY,MAAM,CAACI,IAAI,CAACF,KAAK,CAAC;QAClB,IAAIC,MAAM,EAAE;UACXrB,KAAK,CAACc,KAAK,CAACC,IAAI,CAAC,GAAGQ,kBAAM,CAACC,MAAM,CAACN,MAAM,CAAC;QAC1C;MACD,CAAC;;MAED;MACAJ,KAAK,CAACW,KAAK,CAAC,CAAC;IACd,CAAC,CAAC;;IAEF;IACA;IACA;IACAb,KAAK,CAACc,QAAQ,CAACC,oBAAY,CAAC;IAE5BjC;IACC;IAAA,CACCkC,EAAE,CAAC,OAAO,EAAEvB,OAAO;IACpB;IAAA,CACCuB,EAAE,CAAC,MAAM,EAAE,UAACR,KAAK,EAAK;MACtB;MACA;MACA,IAAIhB,OAAO,EAAE;QACZ;MACD;MACA;MACAO,aAAa,CAACS,KAAK,CAAC;MACpB;MACA;MACA,IAAIhB,OAAO,EAAE;QACZ;MACD;MACA;MACA;MACA;MACA;MACA,IAAI;QACHQ,KAAK,CAACU,IAAI,CAACF,KAAK,EAAE,KAAK,CAAC;MACzB,CAAC,CAAC,OAAOd,KAAK,EAAE;QACfD,OAAO,CAACC,KAAK,CAAC;MACf;IACD,CAAC;IACD;IACA;IAAA,CACCsB,EAAE,CAAC,KAAK,EAAE,YAAM;MAChB;MACA;MACA,IAAIxB,OAAO,EAAE;QACZ;MACD;MACA,IAAI;QACH;QACA;QACAQ,KAAK,CAACU,IAAI,CAAC,IAAIO,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QACnC;QACA3B,OAAO,CAACF,KAAK,CAAC;MACf,CAAC,CAAC,OAAOM,KAAK,EAAE;QACfD,OAAO,CAACC,KAAK,CAAC;MACf;IACD,CAAC,CAAC;EACJ,CAAC,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,sBAAsBA,CAACsB,kBAAkB,EAAE;EACnD,IAAMC,eAAe,GAAG,CAAC;EACzB,IAAMC,UAAU,GAAG,EAAE;EACrB,IAAIC,qBAAqB;EACzB,OAAO;IACNtB,aAAa,WAAAA,cAACS,KAAK,EAAE;MACpB,IAAIY,UAAU,CAACnC,MAAM,GAAG,CAAC,EAAE;QAC1B,IAAIqC,CAAC,GAAG,CAAC;QACT,OAAOA,CAAC,GAAGd,KAAK,CAACvB,MAAM,IAAIqC,CAAC,GAAGH,eAAe,EAAE;UAC/CC,UAAU,CAACV,IAAI,CAACF,KAAK,CAACc,CAAC,CAAC,CAAC;UACzBA,CAAC,EAAE;QACJ;QACA,IAAIF,UAAU,CAACnC,MAAM,KAAK,CAAC,EAAE;UAC5B,IAAMY,OAAO,GAAGuB,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,IAAIA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;UAChEF,kBAAkB,CAACrB,OAAO,CAAC;QAC5B;MACD;IACD;EACD,CAAC;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unzipFromStream.test.js","names":["_mocha","require","_chai","_stream","_fflate","_unzipFromStream","_interopRequireDefault","obj","__esModule","_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","describe","it","_callee","zip","files","_callee$","_context","createZip","unzipFromStream","createStreamFromBuffer","expect","convertValuesFromBufferToString","to","deep","equal","_callee2","_callee2$","_context2","level","_callee3","_callee3$","_context3","repeat","chunkSize","_callee4","_callee4$","_context4","Buffer","from","zipSync","Uint8Array","strToU8","_callee5","_callee5$","_context5","filter","_ref6","path","endsWith","_callee6","stream","thrown","_callee6$","_context6","Readable","read","process","nextTick","emit","t0","_callee7","garbage","_callee7$","_context7","be","an","_ref9","entries","_i","_Object$keys","buffer","_ref10","_ref10$chunkSize","chunks","subarray","alloc","object","convertedObject","_i2","_Object$keys2","strFromU8"],"sources":["../../source/zip/unzipFromStream.test.js"],"sourcesContent":["// This code was originally submitted by Stian Jensen.\r\n// https://github.com/catamphetamine/read-excel-file/pull/122\r\n\r\nimport { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { Readable } from 'stream'\r\nimport { zipSync, strToU8, strFromU8 } from 'fflate'\r\n\r\nimport unzipFromStream from './unzipFromStream.js'\r\n\r\ndescribe('unzipFromStream', () => {\r\n\tit('should read DEFLATE-compressed entries from a stream', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'a.xml': '<a>Hello</a>',\r\n\t\t\t'dir/b.xml': '<b>World</b>'\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({\r\n\t\t\t'a.xml': '<a>Hello</a>',\r\n\t\t\t'dir/b.xml': '<b>World</b>'\r\n\t\t})\r\n\t})\r\n\r\n\tit('should read \"stored\" (uncompressed) entries from a stream', async () => {\r\n\t\tconst zip = createZip({ 'a.xml': '<a>Hello</a>' }, { level: 0 })\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'a.xml': '<a>Hello</a>' })\r\n\t})\r\n\r\n\tit('should read entries split across small stream chunks', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'a.xml': '<a>'.repeat(500),\r\n\t\t\t'b.xml': '<b>'.repeat(500)\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip, { chunkSize: 7 }))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({\r\n\t\t\t'a.xml': '<a>'.repeat(500),\r\n\t\t\t'b.xml': '<b>'.repeat(500)\r\n\t\t})\r\n\t})\r\n\r\n\tit('should ignore directory entries', async () => {\r\n\t\tconst zip = Buffer.from(zipSync({\r\n\t\t\t'dir/': new Uint8Array(0),\r\n\t\t\t'dir/a.xml': strToU8('<a/>')\r\n\t\t}))\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'dir/a.xml': '<a/>' })\r\n\t})\r\n\r\n\tit('should ignore entries rejected by the `filter` option', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'keep.xml': '<keep/>',\r\n\t\t\t'skip.png': 'binary'\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip), {\r\n\t\t\tfilter: ({ path }) => path.endsWith('.xml')\r\n\t\t})\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'keep.xml': '<keep/>' })\r\n\t})\r\n\r\n\tit('should reject when the source stream errors', async () => {\r\n\t\tconst stream = new Readable({ read() {} })\r\n\t\tconst error = new Error('Stream read failure')\r\n\t\tprocess.nextTick(() => stream.emit('error', error))\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unzipFromStream(stream)\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.equal(error)\r\n\t})\r\n\r\n\tit('should reject on invalid (non-zip) data', async () => {\r\n\t\tconst garbage = Buffer.from('this is definitely not a zip archive')\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unzipFromStream(createStreamFromBuffer(garbage))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an('error')\r\n\t})\r\n})\r\n\r\n\r\n// Builds a `.zip` archive (in memory) from a map of text files.\r\n//\r\n// Accepts `fflate`'s `zipSync()` function options as the optional second argument.\r\n// For example, passing `level: 0` will produce a `.zip` file with no compression.\r\n//\r\n// Returns a `Buffer`.\r\n//\r\nfunction createZip(files, { level } = {}) {\r\n\tconst entries = {}\r\n\tfor (const name of Object.keys(files)) {\r\n\t\tentries[name] = strToU8(files[name])\r\n\t}\r\n\treturn Buffer.from(zipSync(entries, { level }))\r\n}\r\n\r\n// Creates a Node.js Stream from a given `buffer` containing the data.\r\n// The stream will split the data into `chunkSize`-byte chunks.\r\n// (this is used to exercise reading across arbitrary chunk boundaries)\r\nfunction createStreamFromBuffer(buffer, { chunkSize = buffer.length } = {}) {\r\n\tconst chunks = []\r\n\tfor (let i = 0; i < buffer.length; i += chunkSize) {\r\n\t\tchunks.push(buffer.subarray(i, i + chunkSize))\r\n\t}\r\n\treturn Readable.from(chunks.length > 0 ? chunks : [Buffer.alloc(0)])\r\n}\r\n\r\n// Converts the values in the given object from `Buffer` to UTF-8 `string`.\r\nfunction convertValuesFromBufferToString(object) {\r\n\tconst convertedObject = {}\r\n\tfor (const path of Object.keys(object)) {\r\n\t\tconvertedObject[path] = strFromU8(object[path])\r\n\t}\r\n\treturn convertedObject\r\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unzipFromStream.test.js","names":["_mocha","require","_chai","_nodeStream","_fflate","_unzipFromStream","_interopRequireDefault","obj","__esModule","_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","describe","it","_callee","zip","files","_callee$","_context","createZip","unzipFromStream","createStreamFromBuffer","expect","convertValuesFromBufferToString","to","deep","equal","_callee2","_callee2$","_context2","level","_callee3","_callee3$","_context3","repeat","chunkSize","_callee4","_callee4$","_context4","Buffer","from","zipSync","Uint8Array","strToU8","_callee5","_callee5$","_context5","filter","_ref6","path","endsWith","_callee6","stream","thrown","_callee6$","_context6","Readable","read","process","nextTick","emit","t0","_callee7","garbage","_callee7$","_context7","be","an","_ref9","entries","_i","_Object$keys","buffer","_ref10","_ref10$chunkSize","chunks","subarray","alloc","object","convertedObject","_i2","_Object$keys2","strFromU8"],"sources":["../../source/zip/unzipFromStream.test.js"],"sourcesContent":["// This code was originally submitted by Stian Jensen.\r\n// https://github.com/catamphetamine/read-excel-file/pull/122\r\n\r\nimport { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { Readable } from 'node:stream'\r\nimport { zipSync, strToU8, strFromU8 } from 'fflate'\r\n\r\nimport unzipFromStream from './unzipFromStream.js'\r\n\r\ndescribe('unzipFromStream', () => {\r\n\tit('should read DEFLATE-compressed entries from a stream', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'a.xml': '<a>Hello</a>',\r\n\t\t\t'dir/b.xml': '<b>World</b>'\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({\r\n\t\t\t'a.xml': '<a>Hello</a>',\r\n\t\t\t'dir/b.xml': '<b>World</b>'\r\n\t\t})\r\n\t})\r\n\r\n\tit('should read \"stored\" (uncompressed) entries from a stream', async () => {\r\n\t\tconst zip = createZip({ 'a.xml': '<a>Hello</a>' }, { level: 0 })\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'a.xml': '<a>Hello</a>' })\r\n\t})\r\n\r\n\tit('should read entries split across small stream chunks', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'a.xml': '<a>'.repeat(500),\r\n\t\t\t'b.xml': '<b>'.repeat(500)\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip, { chunkSize: 7 }))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({\r\n\t\t\t'a.xml': '<a>'.repeat(500),\r\n\t\t\t'b.xml': '<b>'.repeat(500)\r\n\t\t})\r\n\t})\r\n\r\n\tit('should ignore directory entries', async () => {\r\n\t\tconst zip = Buffer.from(zipSync({\r\n\t\t\t'dir/': new Uint8Array(0),\r\n\t\t\t'dir/a.xml': strToU8('<a/>')\r\n\t\t}))\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'dir/a.xml': '<a/>' })\r\n\t})\r\n\r\n\tit('should ignore entries rejected by the `filter` option', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'keep.xml': '<keep/>',\r\n\t\t\t'skip.png': 'binary'\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip), {\r\n\t\t\tfilter: ({ path }) => path.endsWith('.xml')\r\n\t\t})\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'keep.xml': '<keep/>' })\r\n\t})\r\n\r\n\tit('should reject when the source stream errors', async () => {\r\n\t\tconst stream = new Readable({ read() {} })\r\n\t\tconst error = new Error('Stream read failure')\r\n\t\tprocess.nextTick(() => stream.emit('error', error))\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unzipFromStream(stream)\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.equal(error)\r\n\t})\r\n\r\n\tit('should reject on invalid (non-zip) data', async () => {\r\n\t\tconst garbage = Buffer.from('this is definitely not a zip archive')\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unzipFromStream(createStreamFromBuffer(garbage))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an('error')\r\n\t})\r\n})\r\n\r\n\r\n// Builds a `.zip` archive (in memory) from a map of text files.\r\n//\r\n// Accepts `fflate`'s `zipSync()` function options as the optional second argument.\r\n// For example, passing `level: 0` will produce a `.zip` file with no compression.\r\n//\r\n// Returns a `Buffer`.\r\n//\r\nfunction createZip(files, { level } = {}) {\r\n\tconst entries = {}\r\n\tfor (const name of Object.keys(files)) {\r\n\t\tentries[name] = strToU8(files[name])\r\n\t}\r\n\treturn Buffer.from(zipSync(entries, { level }))\r\n}\r\n\r\n// Creates a Node.js Stream from a given `buffer` containing the data.\r\n// The stream will split the data into `chunkSize`-byte chunks.\r\n// (this is used to exercise reading across arbitrary chunk boundaries)\r\nfunction createStreamFromBuffer(buffer, { chunkSize = buffer.length } = {}) {\r\n\tconst chunks = []\r\n\tfor (let i = 0; i < buffer.length; i += chunkSize) {\r\n\t\tchunks.push(buffer.subarray(i, i + chunkSize))\r\n\t}\r\n\treturn Readable.from(chunks.length > 0 ? chunks : [Buffer.alloc(0)])\r\n}\r\n\r\n// Converts the values in the given object from `Buffer` to UTF-8 `string`.\r\nfunction convertValuesFromBufferToString(object) {\r\n\tconst convertedObject = {}\r\n\tfor (const path of Object.keys(object)) {\r\n\t\tconvertedObject[path] = strFromU8(object[path])\r\n\t}\r\n\treturn convertedObject\r\n}"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import { Blob } from 'buffer';
|
|
3
|
-
import Stream, { Readable } from 'stream';
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import { Blob } from 'node:buffer';
|
|
3
|
+
import Stream, { Readable } from 'node:stream';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Converts Node.js input argument to a stream.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertInputToNodeStream.js","names":["fs","Blob","Stream","Readable","convertInputToNodeStream","input","Buffer","createReadableStreamFromBuffer","createReadableStreamFromBlob","createReadStream","buffer","length","Error","from","blob","size","fromWeb","stream"],"sources":["../../source/export/convertInputToNodeStream.js"],"sourcesContent":["import fs from 'fs'\r\nimport { Blob } from 'buffer'\r\nimport Stream, { Readable } from 'stream'\r\n\r\n/**\r\n * Converts Node.js input argument to a stream.\r\n * @param {(string|Stream|Buffer|Blob)} input - A Node.js readable stream or a `Buffer` or a `Blob` or a path to a file.\r\n * @returns {Stream}\r\n */\r\nexport default function convertInputToNodeStream(input) {\r\n return input instanceof Stream\r\n ? input\r\n : (\r\n input instanceof Buffer\r\n ? createReadableStreamFromBuffer(input)\r\n : (\r\n input instanceof Blob\r\n ? createReadableStreamFromBlob(input)\r\n : fs.createReadStream(input)\r\n )\r\n )\r\n}\r\n\r\n// Creates a readable stream from a `Buffer`.\r\nfunction createReadableStreamFromBuffer(buffer) {\r\n // Node.js seems to have a bug in `Readable.from()` function:\r\n // it doesn't correctly handle empty buffers, i.e. it doesn't return a correct stream.\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/106\r\n if (buffer.length === 0) {\r\n throw new Error('No data')\r\n }\r\n return Readable.from(buffer)\r\n}\r\n\r\n// Creates a readable stream from a `Blob`.\r\nfunction createReadableStreamFromBlob(blob) {\r\n // I didn't test but I'd presume that Node.js would throw on an empty `Blob`\r\n // same way it does on an empty `Buffer`.\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/106\r\n if (blob.size === 0) {\r\n throw new Error('No data')\r\n }\r\n // Convert a web `ReadableStream` to a Node.js `Readable` `Stream`.\r\n return Readable.fromWeb(blob.stream())\r\n}"],"mappings":"AAAA,OAAOA,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"convertInputToNodeStream.js","names":["fs","Blob","Stream","Readable","convertInputToNodeStream","input","Buffer","createReadableStreamFromBuffer","createReadableStreamFromBlob","createReadStream","buffer","length","Error","from","blob","size","fromWeb","stream"],"sources":["../../source/export/convertInputToNodeStream.js"],"sourcesContent":["import fs from 'node:fs'\r\nimport { Blob } from 'node:buffer'\r\nimport Stream, { Readable } from 'node:stream'\r\n\r\n/**\r\n * Converts Node.js input argument to a stream.\r\n * @param {(string|Stream|Buffer|Blob)} input - A Node.js readable stream or a `Buffer` or a `Blob` or a path to a file.\r\n * @returns {Stream}\r\n */\r\nexport default function convertInputToNodeStream(input) {\r\n return input instanceof Stream\r\n ? input\r\n : (\r\n input instanceof Buffer\r\n ? createReadableStreamFromBuffer(input)\r\n : (\r\n input instanceof Blob\r\n ? createReadableStreamFromBlob(input)\r\n : fs.createReadStream(input)\r\n )\r\n )\r\n}\r\n\r\n// Creates a readable stream from a `Buffer`.\r\nfunction createReadableStreamFromBuffer(buffer) {\r\n // Node.js seems to have a bug in `Readable.from()` function:\r\n // it doesn't correctly handle empty buffers, i.e. it doesn't return a correct stream.\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/106\r\n if (buffer.length === 0) {\r\n throw new Error('No data')\r\n }\r\n return Readable.from(buffer)\r\n}\r\n\r\n// Creates a readable stream from a `Blob`.\r\nfunction createReadableStreamFromBlob(blob) {\r\n // I didn't test but I'd presume that Node.js would throw on an empty `Blob`\r\n // same way it does on an empty `Buffer`.\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/106\r\n if (blob.size === 0) {\r\n throw new Error('No data')\r\n }\r\n // Convert a web `ReadableStream` to a Node.js `Readable` `Stream`.\r\n return Readable.fromWeb(blob.stream())\r\n}"],"mappings":"AAAA,OAAOA,EAAE,MAAM,SAAS;AACxB,SAASC,IAAI,QAAQ,aAAa;AAClC,OAAOC,MAAM,IAAIC,QAAQ,QAAQ,aAAa;;AAE9C;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,wBAAwBA,CAACC,KAAK,EAAE;EACtD,OAAOA,KAAK,YAAYH,MAAM,GAC1BG,KAAK,GAELA,KAAK,YAAYC,MAAM,GACnBC,8BAA8B,CAACF,KAAK,CAAC,GAErCA,KAAK,YAAYJ,IAAI,GACjBO,4BAA4B,CAACH,KAAK,CAAC,GACnCL,EAAE,CAACS,gBAAgB,CAACJ,KAAK,CAElC;AACL;;AAEA;AACA,SAASE,8BAA8BA,CAACG,MAAM,EAAE;EAC9C;EACA;EACA;EACA,IAAIA,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE;IACvB,MAAM,IAAIC,KAAK,CAAC,SAAS,CAAC;EAC5B;EACA,OAAOT,QAAQ,CAACU,IAAI,CAACH,MAAM,CAAC;AAC9B;;AAEA;AACA,SAASF,4BAA4BA,CAACM,IAAI,EAAE;EAC1C;EACA;EACA;EACA,IAAIA,IAAI,CAACC,IAAI,KAAK,CAAC,EAAE;IACnB,MAAM,IAAIH,KAAK,CAAC,SAAS,CAAC;EAC5B;EACA;EACA,OAAOT,QAAQ,CAACa,OAAO,CAACF,IAAI,CAACG,MAAM,CAAC,CAAC,CAAC;AACxC"}
|
|
@@ -37,8 +37,14 @@
|
|
|
37
37
|
// This code reads the binary input stream and forwards each chunk of it to `unzip.push()`,
|
|
38
38
|
// and then collects the decompressed file entries.
|
|
39
39
|
//
|
|
40
|
+
// P.S. In the comments to `UnzipInflate` in `fflate` package, it says:
|
|
41
|
+
// "Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for better performance."
|
|
42
|
+
// But there seems to be no `AsyncZipInflate` class in the `fflate` package.
|
|
43
|
+
// https://github.com/101arrowz/fflate/issues/277
|
|
44
|
+
// So just the regular `UnzipInflate` is used here.
|
|
45
|
+
//
|
|
40
46
|
import { Unzip, UnzipInflate } from 'fflate';
|
|
41
|
-
import { Buffer } from 'buffer';
|
|
47
|
+
import { Buffer } from 'node:buffer';
|
|
42
48
|
|
|
43
49
|
/**
|
|
44
50
|
* Reads `*.zip` file contents.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unzipFromStream.js","names":["Unzip","UnzipInflate","Buffer","unzipFromStream","stream","_ref","arguments","length","undefined","filter","files","Promise","resolve","reject","errored","onError","error","_createZipFileValidat","createZipFileValidator","isValid","Error","validateChunk","unzip","entry","name","endsWith","path","chunks","ondata","chunk","isLast","push","concat","start","register","on","Uint8Array","onValidationResult","firstBytesCount","firstBytes","firstBytesCheckResult","i"],"sources":["../../source/zip/unzipFromStream.js"],"sourcesContent":["// This code was originally submitted by Stian Jensen.\r\n// https://github.com/catamphetamine/read-excel-file/pull/122\r\n\r\n// A `*.zip` file consists of individual file entries with the \"total\" summary section\r\n// placed at the end of the file rather than at the start of it, which was originally done\r\n// to allow for easy append of data to a given `.zip` file.\r\n// https://en.wikipedia.org/wiki/ZIP_(file_format)\r\n//\r\n// But this also means that reading a `*.zip` file from a stream can't really be done\r\n// using the \"officially recommended\" way of first reading the \"total\" summary section\r\n// and only then reading the individual file entries specified in that summary section.\r\n//\r\n// So in order to be able to read a `*.zip` file from a stream, some corners have to be cut.\r\n// For example, the \"total\" summary section is completely ignored and instead the reader\r\n// should adopt \"data recovery\" software approach — it should proactively \"scan\" the input stream\r\n// for individual file entries and handle them one-by-one as they come.\r\n//\r\n// Such approach doesn't seem to contradict with the XLSX specification\r\n// because an `*.xlsx` files is supposed to be a normal `.zip` archive\r\n// without any \"trickery\" such as \"deleted\" files or \"garbage\" data\r\n// hiding under the hood.\r\n//\r\n// So when handling `*.xlsx` file, we assume that each such file must start\r\n// with an individual file entry followed by another individual file entry, etc.\r\n//\r\n// When the \"summary\" section is reached, we assume that the archive has ended.\r\n//\r\n// To read a `.zip` archive, the code uses `fflate`'s `Unzip` class\r\n// with `UnzipInflate` decompression implementation to decompress the data\r\n// that was previously compressed using `DEFLATE` compressing algorithm,\r\n// which is what `*.xlsx` files use.\r\n//\r\n// The `Unzip` class doesn't speak the Node.js stream interface, and `fflate`'s readme\r\n// doesn't include a clear \"reading a `.zip` file from a Node.js stream\" section.\r\n// https://github.com/101arrowz/fflate/issues/251\r\n// Instead, the `Unzip` class has its own `push(chunk)` / `onfile` / `entry.ondata` protocol.\r\n// This code reads the binary input stream and forwards each chunk of it to `unzip.push()`,\r\n// and then collects the decompressed file entries.\r\n//\r\nimport { Unzip, UnzipInflate } from 'fflate'\r\n\r\nimport { Buffer } from 'buffer'\r\n\r\n/**\r\n * Reads `*.zip` file contents.\r\n * @param {Stream} stream\r\n * @return {Promise<Record<string,Buffer>>} Resolves to an object holding `*.zip` file entries. P.S. `Buffer` is a `Uint8Array`.\r\n */\r\nexport default function unzipFromStream(stream, { filter } = {}) {\r\n\t// The `files` object stores the files and their contents.\r\n\tconst files = {}\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\tlet errored = false\r\n\r\n\t\tconst onError = (error) => {\r\n\t\t\tif (!errored) {\r\n\t\t\t\terrored = true\r\n\t\t\t\treject(error)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst { validateChunk } = createZipFileValidator((isValid) => {\r\n\t\t\tif (!isValid) {\r\n\t\t\t\tonError(new Error('Invalid `.zip` archive'))\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\t// `Unzip` discovers each individual file entry in the input data stream\r\n\t\t// and then calls the callback function for each such entry.\r\n\t\tconst unzip = new Unzip((entry) => {\r\n\t\t\t// If there already was an error while reading this `.zip` file,\r\n\t\t\t// ignore any follow-up entries.\r\n\t\t\tif (errored) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\t// Skip directory entries (their names end with a slash).\r\n\t\t\t// Only files are of any interest.\r\n\t\t\tif (entry.name.endsWith('/')) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\t// See if this file should be ignored.\r\n\t\t\t// If it should, this entry won't be processed, i.e. `Unzip` will not try\r\n\t\t\t// to decompress its data, and will just discard it.\r\n\t\t\tif (filter && !filter({ path: entry.name })) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\tconst chunks = []\r\n\r\n\t\t\t// `entry.ondata` is called with each decompressed chunk of the entry,\r\n\t\t\t// and a final time with `isLast === true` once the entry is complete.\r\n\t\t\tentry.ondata = (error, chunk, isLast) => {\r\n\t\t\t\tif (error) {\r\n\t\t\t\t\treturn onError(error)\r\n\t\t\t\t}\r\n\t\t\t\tchunks.push(chunk)\r\n\t\t\t\tif (isLast) {\r\n\t\t\t\t\tfiles[entry.name] = Buffer.concat(chunks)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Start decompressing this entry.\r\n\t\t\tentry.start()\r\n\t\t})\r\n\r\n\t\t// Register the decompressor for the data that was compressed using\r\n\t\t// `DEFLATE` compression algorithm (compression method `8`),\r\n\t\t// which is what `.xlsx` files use.\r\n\t\tunzip.register(UnzipInflate)\r\n\r\n\t\tstream\r\n\t\t\t// Catch errors emitted from the input stream (for example, a file read error).\r\n\t\t\t.on('error', onError)\r\n\t\t\t// When another chunk of data is read from the input stream.\r\n\t\t\t.on('data', (chunk) => {\r\n\t\t\t\t// If there already was an error while reading this `.zip` file,\r\n\t\t\t\t// ignore any follow-up data chunks.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\t// Validate the `.zip` archive as its data comes through.\r\n\t\t\t\tvalidateChunk(chunk)\r\n\t\t\t\t// If the `.zip` archive is found to be invalid, stop any further\r\n\t\t\t\t// processing of it.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\t// Push the next data chunk to `fflate`'s `Unzip` class instance.\r\n\t\t\t\t// The `.push()` function is synchronous, meaning that by the time it returns,\r\n\t\t\t\t// any complete files entries encountered so far have already been decompressed\r\n\t\t\t\t// and populated in the `files` object.\r\n\t\t\t\ttry {\r\n\t\t\t\t\tunzip.push(chunk, false)\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tonError(error)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// When there's no more data in the input stream to consume,\r\n\t\t\t// finish reading the `.zip` archive.\r\n\t\t\t.on('end', () => {\r\n\t\t\t\t// If there were any errors when reading the `.zip` archive,\r\n\t\t\t\t// don't `resolve()` with anything.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\ttry {\r\n\t\t\t\t\t// Signal the end of the archive to `fflate`'s `Unzip` class instance.\r\n\t\t\t\t\t// It will flush any remaining state in it.\r\n\t\t\t\t\tunzip.push(new Uint8Array(0), true)\r\n\t\t\t\t\t// Resolve with the unzipped files.\r\n\t\t\t\t\tresolve(files)\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tonError(error)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t})\r\n}\r\n\r\n// Every section in a `.zip` archive is marked with 4 bytes, the first two of which\r\n// are `0x50` and `0x4B`, which reads \"PK\", referencing the initials of the inventor Phil Katz.\r\n//\r\n// It looks like `fflate`'s `Unzip` doesn't ever complain about whatever data is thrown at it.\r\n// Due to how `.zip` file format is defined, \"garbage\" data could be placed at various\r\n// places in it and it'd still be a valid `.zip` archive. It's likely that for this reason\r\n// `fflate` doesn't ever complain and simply emits no entries when fed any kind of invalid data.\r\n//\r\n// In order to introduce some basic validation, here we specifically demand\r\n// that a `.zip` archive must at least start with an individual file entry\r\n// because an `.xlsx` file creator softwared really shouldn't attempt doing\r\n// anything \"funny\" when writing a file, hence this adherence requirement.\r\n//\r\nfunction createZipFileValidator(onValidationResult) {\r\n\tconst firstBytesCount = 2\r\n\tconst firstBytes = []\r\n\tlet firstBytesCheckResult\r\n\treturn {\r\n\t\tvalidateChunk(chunk) {\r\n\t\t\tif (firstBytes.length < 2) {\r\n\t\t\t\tlet i = 0\r\n\t\t\t\twhile (i < chunk.length && i < firstBytesCount) {\r\n\t\t\t\t\tfirstBytes.push(chunk[i])\r\n\t\t\t\t\ti++\r\n\t\t\t\t}\r\n\t\t\t\tif (firstBytes.length === 2) {\r\n\t\t\t\t\tconst isValid = firstBytes[0] === 0x50 && firstBytes[1] === 0x4B\r\n\t\t\t\t\tonValidationResult(isValid)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"],"mappings":"AAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,KAAK,EAAEC,YAAY,QAAQ,QAAQ;AAE5C,SAASC,MAAM,QAAQ,QAAQ;;AAE/B;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,eAAeA,CAACC,MAAM,EAAmB;EAAA,IAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAJ,CAAC,CAAC;IAAbG,MAAM,GAAAJ,IAAA,CAANI,MAAM;EACvD;EACA,IAAMC,KAAK,GAAG,CAAC,CAAC;EAEhB,OAAO,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IACvC,IAAIC,OAAO,GAAG,KAAK;IAEnB,IAAMC,OAAO,GAAG,SAAVA,OAAOA,CAAIC,KAAK,EAAK;MAC1B,IAAI,CAACF,OAAO,EAAE;QACbA,OAAO,GAAG,IAAI;QACdD,MAAM,CAACG,KAAK,CAAC;MACd;IACD,CAAC;IAED,IAAAC,qBAAA,GAA0BC,sBAAsB,CAAC,UAACC,OAAO,EAAK;QAC7D,IAAI,CAACA,OAAO,EAAE;UACbJ,OAAO,CAAC,IAAIK,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC7C;MACD,CAAC,CAAC;MAJMC,aAAa,GAAAJ,qBAAA,CAAbI,aAAa;;IAMrB;IACA;IACA,IAAMC,KAAK,GAAG,IAAItB,KAAK,CAAC,UAACuB,KAAK,EAAK;MAClC;MACA;MACA,IAAIT,OAAO,EAAE;QACZ;MACD;;MAEA;MACA;MACA,IAAIS,KAAK,CAACC,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC7B;MACD;;MAEA;MACA;MACA;MACA,IAAIhB,MAAM,IAAI,CAACA,MAAM,CAAC;QAAEiB,IAAI,EAAEH,KAAK,CAACC;MAAK,CAAC,CAAC,EAAE;QAC5C;MACD;MAEA,IAAMG,MAAM,GAAG,EAAE;;MAEjB;MACA;MACAJ,KAAK,CAACK,MAAM,GAAG,UAACZ,KAAK,EAAEa,KAAK,EAAEC,MAAM,EAAK;QACxC,IAAId,KAAK,EAAE;UACV,OAAOD,OAAO,CAACC,KAAK,CAAC;QACtB;QACAW,MAAM,CAACI,IAAI,CAACF,KAAK,CAAC;QAClB,IAAIC,MAAM,EAAE;UACXpB,KAAK,CAACa,KAAK,CAACC,IAAI,CAAC,GAAGtB,MAAM,CAAC8B,MAAM,CAACL,MAAM,CAAC;QAC1C;MACD,CAAC;;MAED;MACAJ,KAAK,CAACU,KAAK,CAAC,CAAC;IACd,CAAC,CAAC;;IAEF;IACA;IACA;IACAX,KAAK,CAACY,QAAQ,CAACjC,YAAY,CAAC;IAE5BG;IACC;IAAA,CACC+B,EAAE,CAAC,OAAO,EAAEpB,OAAO;IACpB;IAAA,CACCoB,EAAE,CAAC,MAAM,EAAE,UAACN,KAAK,EAAK;MACtB;MACA;MACA,IAAIf,OAAO,EAAE;QACZ;MACD;MACA;MACAO,aAAa,CAACQ,KAAK,CAAC;MACpB;MACA;MACA,IAAIf,OAAO,EAAE;QACZ;MACD;MACA;MACA;MACA;MACA;MACA,IAAI;QACHQ,KAAK,CAACS,IAAI,CAACF,KAAK,EAAE,KAAK,CAAC;MACzB,CAAC,CAAC,OAAOb,KAAK,EAAE;QACfD,OAAO,CAACC,KAAK,CAAC;MACf;IACD,CAAC;IACD;IACA;IAAA,CACCmB,EAAE,CAAC,KAAK,EAAE,YAAM;MAChB;MACA;MACA,IAAIrB,OAAO,EAAE;QACZ;MACD;MACA,IAAI;QACH;QACA;QACAQ,KAAK,CAACS,IAAI,CAAC,IAAIK,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QACnC;QACAxB,OAAO,CAACF,KAAK,CAAC;MACf,CAAC,CAAC,OAAOM,KAAK,EAAE;QACfD,OAAO,CAACC,KAAK,CAAC;MACf;IACD,CAAC,CAAC;EACJ,CAAC,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,sBAAsBA,CAACmB,kBAAkB,EAAE;EACnD,IAAMC,eAAe,GAAG,CAAC;EACzB,IAAMC,UAAU,GAAG,EAAE;EACrB,IAAIC,qBAAqB;EACzB,OAAO;IACNnB,aAAa,WAAAA,cAACQ,KAAK,EAAE;MACpB,IAAIU,UAAU,CAAChC,MAAM,GAAG,CAAC,EAAE;QAC1B,IAAIkC,CAAC,GAAG,CAAC;QACT,OAAOA,CAAC,GAAGZ,KAAK,CAACtB,MAAM,IAAIkC,CAAC,GAAGH,eAAe,EAAE;UAC/CC,UAAU,CAACR,IAAI,CAACF,KAAK,CAACY,CAAC,CAAC,CAAC;UACzBA,CAAC,EAAE;QACJ;QACA,IAAIF,UAAU,CAAChC,MAAM,KAAK,CAAC,EAAE;UAC5B,IAAMY,OAAO,GAAGoB,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,IAAIA,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI;UAChEF,kBAAkB,CAAClB,OAAO,CAAC;QAC5B;MACD;IACD;EACD,CAAC;AACF"}
|
|
1
|
+
{"version":3,"file":"unzipFromStream.js","names":["Unzip","UnzipInflate","Buffer","unzipFromStream","stream","_ref","arguments","length","undefined","filter","files","Promise","resolve","reject","errored","onError","error","_createZipFileValidat","createZipFileValidator","isValid","Error","validateChunk","unzip","entry","name","endsWith","path","chunks","ondata","chunk","isLast","push","concat","start","register","on","Uint8Array","onValidationResult","firstBytesCount","firstBytes","firstBytesCheckResult","i"],"sources":["../../source/zip/unzipFromStream.js"],"sourcesContent":["// This code was originally submitted by Stian Jensen.\r\n// https://github.com/catamphetamine/read-excel-file/pull/122\r\n\r\n// A `*.zip` file consists of individual file entries with the \"total\" summary section\r\n// placed at the end of the file rather than at the start of it, which was originally done\r\n// to allow for easy append of data to a given `.zip` file.\r\n// https://en.wikipedia.org/wiki/ZIP_(file_format)\r\n//\r\n// But this also means that reading a `*.zip` file from a stream can't really be done\r\n// using the \"officially recommended\" way of first reading the \"total\" summary section\r\n// and only then reading the individual file entries specified in that summary section.\r\n//\r\n// So in order to be able to read a `*.zip` file from a stream, some corners have to be cut.\r\n// For example, the \"total\" summary section is completely ignored and instead the reader\r\n// should adopt \"data recovery\" software approach — it should proactively \"scan\" the input stream\r\n// for individual file entries and handle them one-by-one as they come.\r\n//\r\n// Such approach doesn't seem to contradict with the XLSX specification\r\n// because an `*.xlsx` files is supposed to be a normal `.zip` archive\r\n// without any \"trickery\" such as \"deleted\" files or \"garbage\" data\r\n// hiding under the hood.\r\n//\r\n// So when handling `*.xlsx` file, we assume that each such file must start\r\n// with an individual file entry followed by another individual file entry, etc.\r\n//\r\n// When the \"summary\" section is reached, we assume that the archive has ended.\r\n//\r\n// To read a `.zip` archive, the code uses `fflate`'s `Unzip` class\r\n// with `UnzipInflate` decompression implementation to decompress the data\r\n// that was previously compressed using `DEFLATE` compressing algorithm,\r\n// which is what `*.xlsx` files use.\r\n//\r\n// The `Unzip` class doesn't speak the Node.js stream interface, and `fflate`'s readme\r\n// doesn't include a clear \"reading a `.zip` file from a Node.js stream\" section.\r\n// https://github.com/101arrowz/fflate/issues/251\r\n// Instead, the `Unzip` class has its own `push(chunk)` / `onfile` / `entry.ondata` protocol.\r\n// This code reads the binary input stream and forwards each chunk of it to `unzip.push()`,\r\n// and then collects the decompressed file entries.\r\n//\r\n// P.S. In the comments to `UnzipInflate` in `fflate` package, it says:\r\n// \"Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for better performance.\"\r\n// But there seems to be no `AsyncZipInflate` class in the `fflate` package.\r\n// https://github.com/101arrowz/fflate/issues/277\r\n// So just the regular `UnzipInflate` is used here.\r\n//\r\nimport { Unzip, UnzipInflate } from 'fflate'\r\n\r\nimport { Buffer } from 'node:buffer'\r\n\r\n/**\r\n * Reads `*.zip` file contents.\r\n * @param {Stream} stream\r\n * @return {Promise<Record<string,Buffer>>} Resolves to an object holding `*.zip` file entries. P.S. `Buffer` is a `Uint8Array`.\r\n */\r\nexport default function unzipFromStream(stream, { filter } = {}) {\r\n\t// The `files` object stores the files and their contents.\r\n\tconst files = {}\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\tlet errored = false\r\n\r\n\t\tconst onError = (error) => {\r\n\t\t\tif (!errored) {\r\n\t\t\t\terrored = true\r\n\t\t\t\treject(error)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst { validateChunk } = createZipFileValidator((isValid) => {\r\n\t\t\tif (!isValid) {\r\n\t\t\t\tonError(new Error('Invalid `.zip` archive'))\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\t// `Unzip` discovers each individual file entry in the input data stream\r\n\t\t// and then calls the callback function for each such entry.\r\n\t\tconst unzip = new Unzip((entry) => {\r\n\t\t\t// If there already was an error while reading this `.zip` file,\r\n\t\t\t// ignore any follow-up entries.\r\n\t\t\tif (errored) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\t// Skip directory entries (their names end with a slash).\r\n\t\t\t// Only files are of any interest.\r\n\t\t\tif (entry.name.endsWith('/')) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\t// See if this file should be ignored.\r\n\t\t\t// If it should, this entry won't be processed, i.e. `Unzip` will not try\r\n\t\t\t// to decompress its data, and will just discard it.\r\n\t\t\tif (filter && !filter({ path: entry.name })) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\r\n\t\t\tconst chunks = []\r\n\r\n\t\t\t// `entry.ondata` is called with each decompressed chunk of the entry,\r\n\t\t\t// and a final time with `isLast === true` once the entry is complete.\r\n\t\t\tentry.ondata = (error, chunk, isLast) => {\r\n\t\t\t\tif (error) {\r\n\t\t\t\t\treturn onError(error)\r\n\t\t\t\t}\r\n\t\t\t\tchunks.push(chunk)\r\n\t\t\t\tif (isLast) {\r\n\t\t\t\t\tfiles[entry.name] = Buffer.concat(chunks)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Start decompressing this entry.\r\n\t\t\tentry.start()\r\n\t\t})\r\n\r\n\t\t// Register the decompressor for the data that was compressed using\r\n\t\t// `DEFLATE` compression algorithm (compression method `8`),\r\n\t\t// which is what `.xlsx` files use.\r\n\t\tunzip.register(UnzipInflate)\r\n\r\n\t\tstream\r\n\t\t\t// Catch errors emitted from the input stream (for example, a file read error).\r\n\t\t\t.on('error', onError)\r\n\t\t\t// When another chunk of data is read from the input stream.\r\n\t\t\t.on('data', (chunk) => {\r\n\t\t\t\t// If there already was an error while reading this `.zip` file,\r\n\t\t\t\t// ignore any follow-up data chunks.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\t// Validate the `.zip` archive as its data comes through.\r\n\t\t\t\tvalidateChunk(chunk)\r\n\t\t\t\t// If the `.zip` archive is found to be invalid, stop any further\r\n\t\t\t\t// processing of it.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\t// Push the next data chunk to `fflate`'s `Unzip` class instance.\r\n\t\t\t\t// The `.push()` function is synchronous, meaning that by the time it returns,\r\n\t\t\t\t// any complete files entries encountered so far have already been decompressed\r\n\t\t\t\t// and populated in the `files` object.\r\n\t\t\t\ttry {\r\n\t\t\t\t\tunzip.push(chunk, false)\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tonError(error)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// When there's no more data in the input stream to consume,\r\n\t\t\t// finish reading the `.zip` archive.\r\n\t\t\t.on('end', () => {\r\n\t\t\t\t// If there were any errors when reading the `.zip` archive,\r\n\t\t\t\t// don't `resolve()` with anything.\r\n\t\t\t\tif (errored) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t\ttry {\r\n\t\t\t\t\t// Signal the end of the archive to `fflate`'s `Unzip` class instance.\r\n\t\t\t\t\t// It will flush any remaining state in it.\r\n\t\t\t\t\tunzip.push(new Uint8Array(0), true)\r\n\t\t\t\t\t// Resolve with the unzipped files.\r\n\t\t\t\t\tresolve(files)\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tonError(error)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t})\r\n}\r\n\r\n// Every section in a `.zip` archive is marked with 4 bytes, the first two of which\r\n// are `0x50` and `0x4B`, which reads \"PK\", referencing the initials of the inventor Phil Katz.\r\n//\r\n// It looks like `fflate`'s `Unzip` doesn't ever complain about whatever data is thrown at it.\r\n// Due to how `.zip` file format is defined, \"garbage\" data could be placed at various\r\n// places in it and it'd still be a valid `.zip` archive. It's likely that for this reason\r\n// `fflate` doesn't ever complain and simply emits no entries when fed any kind of invalid data.\r\n//\r\n// In order to introduce some basic validation, here we specifically demand\r\n// that a `.zip` archive must at least start with an individual file entry\r\n// because an `.xlsx` file creator softwared really shouldn't attempt doing\r\n// anything \"funny\" when writing a file, hence this adherence requirement.\r\n//\r\nfunction createZipFileValidator(onValidationResult) {\r\n\tconst firstBytesCount = 2\r\n\tconst firstBytes = []\r\n\tlet firstBytesCheckResult\r\n\treturn {\r\n\t\tvalidateChunk(chunk) {\r\n\t\t\tif (firstBytes.length < 2) {\r\n\t\t\t\tlet i = 0\r\n\t\t\t\twhile (i < chunk.length && i < firstBytesCount) {\r\n\t\t\t\t\tfirstBytes.push(chunk[i])\r\n\t\t\t\t\ti++\r\n\t\t\t\t}\r\n\t\t\t\tif (firstBytes.length === 2) {\r\n\t\t\t\t\tconst isValid = firstBytes[0] === 0x50 && firstBytes[1] === 0x4B\r\n\t\t\t\t\tonValidationResult(isValid)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unzipFromStream.test.js","names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","describe","it","expect","Readable","zipSync","strToU8","strFromU8","unzipFromStream","_callee","zip","files","_callee$","_context","createZip","createStreamFromBuffer","convertValuesFromBufferToString","to","deep","equal","_callee2","_callee2$","_context2","level","_callee3","_callee3$","_context3","repeat","chunkSize","_callee4","_callee4$","_context4","Buffer","from","Uint8Array","_callee5","_callee5$","_context5","filter","_ref6","path","endsWith","_callee6","stream","thrown","_callee6$","_context6","read","process","nextTick","emit","t0","_callee7","garbage","_callee7$","_context7","be","an","_ref9","entries","_i","_Object$keys","buffer","_ref10","_ref10$chunkSize","chunks","subarray","alloc","object","convertedObject","_i2","_Object$keys2"],"sources":["../../source/zip/unzipFromStream.test.js"],"sourcesContent":["// This code was originally submitted by Stian Jensen.\r\n// https://github.com/catamphetamine/read-excel-file/pull/122\r\n\r\nimport { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { Readable } from 'stream'\r\nimport { zipSync, strToU8, strFromU8 } from 'fflate'\r\n\r\nimport unzipFromStream from './unzipFromStream.js'\r\n\r\ndescribe('unzipFromStream', () => {\r\n\tit('should read DEFLATE-compressed entries from a stream', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'a.xml': '<a>Hello</a>',\r\n\t\t\t'dir/b.xml': '<b>World</b>'\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({\r\n\t\t\t'a.xml': '<a>Hello</a>',\r\n\t\t\t'dir/b.xml': '<b>World</b>'\r\n\t\t})\r\n\t})\r\n\r\n\tit('should read \"stored\" (uncompressed) entries from a stream', async () => {\r\n\t\tconst zip = createZip({ 'a.xml': '<a>Hello</a>' }, { level: 0 })\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'a.xml': '<a>Hello</a>' })\r\n\t})\r\n\r\n\tit('should read entries split across small stream chunks', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'a.xml': '<a>'.repeat(500),\r\n\t\t\t'b.xml': '<b>'.repeat(500)\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip, { chunkSize: 7 }))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({\r\n\t\t\t'a.xml': '<a>'.repeat(500),\r\n\t\t\t'b.xml': '<b>'.repeat(500)\r\n\t\t})\r\n\t})\r\n\r\n\tit('should ignore directory entries', async () => {\r\n\t\tconst zip = Buffer.from(zipSync({\r\n\t\t\t'dir/': new Uint8Array(0),\r\n\t\t\t'dir/a.xml': strToU8('<a/>')\r\n\t\t}))\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'dir/a.xml': '<a/>' })\r\n\t})\r\n\r\n\tit('should ignore entries rejected by the `filter` option', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'keep.xml': '<keep/>',\r\n\t\t\t'skip.png': 'binary'\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip), {\r\n\t\t\tfilter: ({ path }) => path.endsWith('.xml')\r\n\t\t})\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'keep.xml': '<keep/>' })\r\n\t})\r\n\r\n\tit('should reject when the source stream errors', async () => {\r\n\t\tconst stream = new Readable({ read() {} })\r\n\t\tconst error = new Error('Stream read failure')\r\n\t\tprocess.nextTick(() => stream.emit('error', error))\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unzipFromStream(stream)\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.equal(error)\r\n\t})\r\n\r\n\tit('should reject on invalid (non-zip) data', async () => {\r\n\t\tconst garbage = Buffer.from('this is definitely not a zip archive')\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unzipFromStream(createStreamFromBuffer(garbage))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an('error')\r\n\t})\r\n})\r\n\r\n\r\n// Builds a `.zip` archive (in memory) from a map of text files.\r\n//\r\n// Accepts `fflate`'s `zipSync()` function options as the optional second argument.\r\n// For example, passing `level: 0` will produce a `.zip` file with no compression.\r\n//\r\n// Returns a `Buffer`.\r\n//\r\nfunction createZip(files, { level } = {}) {\r\n\tconst entries = {}\r\n\tfor (const name of Object.keys(files)) {\r\n\t\tentries[name] = strToU8(files[name])\r\n\t}\r\n\treturn Buffer.from(zipSync(entries, { level }))\r\n}\r\n\r\n// Creates a Node.js Stream from a given `buffer` containing the data.\r\n// The stream will split the data into `chunkSize`-byte chunks.\r\n// (this is used to exercise reading across arbitrary chunk boundaries)\r\nfunction createStreamFromBuffer(buffer, { chunkSize = buffer.length } = {}) {\r\n\tconst chunks = []\r\n\tfor (let i = 0; i < buffer.length; i += chunkSize) {\r\n\t\tchunks.push(buffer.subarray(i, i + chunkSize))\r\n\t}\r\n\treturn Readable.from(chunks.length > 0 ? chunks : [Buffer.alloc(0)])\r\n}\r\n\r\n// Converts the values in the given object from `Buffer` to UTF-8 `string`.\r\nfunction convertValuesFromBufferToString(object) {\r\n\tconst convertedObject = {}\r\n\tfor (const path of Object.keys(object)) {\r\n\t\tconvertedObject[path] = strFromU8(object[path])\r\n\t}\r\n\treturn convertedObject\r\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unzipFromStream.test.js","names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","describe","it","expect","Readable","zipSync","strToU8","strFromU8","unzipFromStream","_callee","zip","files","_callee$","_context","createZip","createStreamFromBuffer","convertValuesFromBufferToString","to","deep","equal","_callee2","_callee2$","_context2","level","_callee3","_callee3$","_context3","repeat","chunkSize","_callee4","_callee4$","_context4","Buffer","from","Uint8Array","_callee5","_callee5$","_context5","filter","_ref6","path","endsWith","_callee6","stream","thrown","_callee6$","_context6","read","process","nextTick","emit","t0","_callee7","garbage","_callee7$","_context7","be","an","_ref9","entries","_i","_Object$keys","buffer","_ref10","_ref10$chunkSize","chunks","subarray","alloc","object","convertedObject","_i2","_Object$keys2"],"sources":["../../source/zip/unzipFromStream.test.js"],"sourcesContent":["// This code was originally submitted by Stian Jensen.\r\n// https://github.com/catamphetamine/read-excel-file/pull/122\r\n\r\nimport { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { Readable } from 'node:stream'\r\nimport { zipSync, strToU8, strFromU8 } from 'fflate'\r\n\r\nimport unzipFromStream from './unzipFromStream.js'\r\n\r\ndescribe('unzipFromStream', () => {\r\n\tit('should read DEFLATE-compressed entries from a stream', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'a.xml': '<a>Hello</a>',\r\n\t\t\t'dir/b.xml': '<b>World</b>'\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({\r\n\t\t\t'a.xml': '<a>Hello</a>',\r\n\t\t\t'dir/b.xml': '<b>World</b>'\r\n\t\t})\r\n\t})\r\n\r\n\tit('should read \"stored\" (uncompressed) entries from a stream', async () => {\r\n\t\tconst zip = createZip({ 'a.xml': '<a>Hello</a>' }, { level: 0 })\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'a.xml': '<a>Hello</a>' })\r\n\t})\r\n\r\n\tit('should read entries split across small stream chunks', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'a.xml': '<a>'.repeat(500),\r\n\t\t\t'b.xml': '<b>'.repeat(500)\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip, { chunkSize: 7 }))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({\r\n\t\t\t'a.xml': '<a>'.repeat(500),\r\n\t\t\t'b.xml': '<b>'.repeat(500)\r\n\t\t})\r\n\t})\r\n\r\n\tit('should ignore directory entries', async () => {\r\n\t\tconst zip = Buffer.from(zipSync({\r\n\t\t\t'dir/': new Uint8Array(0),\r\n\t\t\t'dir/a.xml': strToU8('<a/>')\r\n\t\t}))\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip))\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'dir/a.xml': '<a/>' })\r\n\t})\r\n\r\n\tit('should ignore entries rejected by the `filter` option', async () => {\r\n\t\tconst zip = createZip({\r\n\t\t\t'keep.xml': '<keep/>',\r\n\t\t\t'skip.png': 'binary'\r\n\t\t})\r\n\t\tconst files = await unzipFromStream(createStreamFromBuffer(zip), {\r\n\t\t\tfilter: ({ path }) => path.endsWith('.xml')\r\n\t\t})\r\n\t\texpect(convertValuesFromBufferToString(files)).to.deep.equal({ 'keep.xml': '<keep/>' })\r\n\t})\r\n\r\n\tit('should reject when the source stream errors', async () => {\r\n\t\tconst stream = new Readable({ read() {} })\r\n\t\tconst error = new Error('Stream read failure')\r\n\t\tprocess.nextTick(() => stream.emit('error', error))\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unzipFromStream(stream)\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.equal(error)\r\n\t})\r\n\r\n\tit('should reject on invalid (non-zip) data', async () => {\r\n\t\tconst garbage = Buffer.from('this is definitely not a zip archive')\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unzipFromStream(createStreamFromBuffer(garbage))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an('error')\r\n\t})\r\n})\r\n\r\n\r\n// Builds a `.zip` archive (in memory) from a map of text files.\r\n//\r\n// Accepts `fflate`'s `zipSync()` function options as the optional second argument.\r\n// For example, passing `level: 0` will produce a `.zip` file with no compression.\r\n//\r\n// Returns a `Buffer`.\r\n//\r\nfunction createZip(files, { level } = {}) {\r\n\tconst entries = {}\r\n\tfor (const name of Object.keys(files)) {\r\n\t\tentries[name] = strToU8(files[name])\r\n\t}\r\n\treturn Buffer.from(zipSync(entries, { level }))\r\n}\r\n\r\n// Creates a Node.js Stream from a given `buffer` containing the data.\r\n// The stream will split the data into `chunkSize`-byte chunks.\r\n// (this is used to exercise reading across arbitrary chunk boundaries)\r\nfunction createStreamFromBuffer(buffer, { chunkSize = buffer.length } = {}) {\r\n\tconst chunks = []\r\n\tfor (let i = 0; i < buffer.length; i += chunkSize) {\r\n\t\tchunks.push(buffer.subarray(i, i + chunkSize))\r\n\t}\r\n\treturn Readable.from(chunks.length > 0 ? chunks : [Buffer.alloc(0)])\r\n}\r\n\r\n// Converts the values in the given object from `Buffer` to UTF-8 `string`.\r\nfunction convertValuesFromBufferToString(object) {\r\n\tconst convertedObject = {}\r\n\tfor (const path of Object.keys(object)) {\r\n\t\tconvertedObject[path] = strFromU8(object[path])\r\n\t}\r\n\treturn convertedObject\r\n}"],"mappings":";+CACA,qJAAAA,mBAAA,YAAAA,oBAAA,WAAAC,CAAA,SAAAC,CAAA,EAAAD,CAAA,OAAAE,CAAA,GAAAC,MAAA,CAAAC,SAAA,EAAAC,CAAA,GAAAH,CAAA,CAAAI,cAAA,EAAAC,CAAA,GAAAJ,MAAA,CAAAK,cAAA,cAAAP,CAAA,EAAAD,CAAA,EAAAE,CAAA,IAAAD,CAAA,CAAAD,CAAA,IAAAE,CAAA,CAAAO,KAAA,KAAAC,CAAA,wBAAAC,MAAA,GAAAA,MAAA,OAAAC,CAAA,GAAAF,CAAA,CAAAG,QAAA,kBAAAC,CAAA,GAAAJ,CAAA,CAAAK,aAAA,uBAAAC,CAAA,GAAAN,CAAA,CAAAO,WAAA,8BAAAC,OAAAjB,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAC,MAAA,CAAAK,cAAA,CAAAP,CAAA,EAAAD,CAAA,IAAAS,KAAA,EAAAP,CAAA,EAAAiB,UAAA,MAAAC,YAAA,MAAAC,QAAA,SAAApB,CAAA,CAAAD,CAAA,WAAAkB,MAAA,mBAAAjB,CAAA,IAAAiB,MAAA,YAAAA,OAAAjB,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAD,CAAA,CAAAD,CAAA,IAAAE,CAAA,gBAAAoB,KAAArB,CAAA,EAAAD,CAAA,EAAAE,CAAA,EAAAG,CAAA,QAAAK,CAAA,GAAAV,CAAA,IAAAA,CAAA,CAAAI,SAAA,YAAAmB,SAAA,GAAAvB,CAAA,GAAAuB,SAAA,EAAAX,CAAA,GAAAT,MAAA,CAAAqB,MAAA,CAAAd,CAAA,CAAAN,SAAA,GAAAU,CAAA,OAAAW,OAAA,CAAApB,CAAA,gBAAAE,CAAA,CAAAK,CAAA,eAAAH,KAAA,EAAAiB,gBAAA,CAAAzB,CAAA,EAAAC,CAAA,EAAAY,CAAA,MAAAF,CAAA,aAAAe,SAAA1B,CAAA,EAAAD,CAAA,EAAAE,CAAA,mBAAA0B,IAAA,YAAAC,GAAA,EAAA5B,CAAA,CAAA6B,IAAA,CAAA9B,CAAA,EAAAE,CAAA,cAAAD,CAAA,aAAA2B,IAAA,WAAAC,GAAA,EAAA5B,CAAA,QAAAD,CAAA,CAAAsB,IAAA,GAAAA,IAAA,MAAAS,CAAA,qBAAAC,CAAA,qBAAAC,CAAA,gBAAAC,CAAA,gBAAAC,CAAA,gBAAAZ,UAAA,cAAAa,kBAAA,cAAAC,2BAAA,SAAAC,CAAA,OAAApB,MAAA,CAAAoB,CAAA,EAAA1B,CAAA,qCAAA2B,CAAA,GAAApC,MAAA,CAAAqC,cAAA,EAAAC,CAAA,GAAAF,CAAA,IAAAA,CAAA,CAAAA,CAAA,CAAAG,MAAA,QAAAD,CAAA,IAAAA,CAAA,KAAAvC,CAAA,IAAAG,CAAA,CAAAyB,IAAA,CAAAW,CAAA,EAAA7B,CAAA,MAAA0B,CAAA,GAAAG,CAAA,OAAAE,CAAA,GAAAN,0BAAA,CAAAjC,SAAA,GAAAmB,SAAA,CAAAnB,SAAA,GAAAD,MAAA,CAAAqB,MAAA,CAAAc,CAAA,YAAAM,sBAAA3C,CAAA,gCAAA4C,OAAA,WAAA7C,CAAA,IAAAkB,MAAA,CAAAjB,CAAA,EAAAD,CAAA,YAAAC,CAAA,gBAAA6C,OAAA,CAAA9C,CAAA,EAAAC,CAAA,sBAAA8C,cAAA9C,CAAA,EAAAD,CAAA,aAAAgD,OAAA9C,CAAA,EAAAK,CAAA,EAAAG,CAAA,EAAAE,CAAA,QAAAE,CAAA,GAAAa,QAAA,CAAA1B,CAAA,CAAAC,CAAA,GAAAD,CAAA,EAAAM,CAAA,mBAAAO,CAAA,CAAAc,IAAA,QAAAZ,CAAA,GAAAF,CAAA,CAAAe,GAAA,EAAAE,CAAA,GAAAf,CAAA,CAAAP,KAAA,SAAAsB,CAAA,gBAAAkB,OAAA,CAAAlB,CAAA,KAAA1B,CAAA,CAAAyB,IAAA,CAAAC,CAAA,eAAA/B,CAAA,CAAAkD,OAAA,CAAAnB,CAAA,CAAAoB,OAAA,EAAAC,IAAA,WAAAnD,CAAA,IAAA+C,MAAA,SAAA/C,CAAA,EAAAS,CAAA,EAAAE,CAAA,gBAAAX,CAAA,IAAA+C,MAAA,UAAA/C,CAAA,EAAAS,CAAA,EAAAE,CAAA,QAAAZ,CAAA,CAAAkD,OAAA,CAAAnB,CAAA,EAAAqB,IAAA,WAAAnD,CAAA,IAAAe,CAAA,CAAAP,KAAA,GAAAR,CAAA,EAAAS,CAAA,CAAAM,CAAA,gBAAAf,CAAA,WAAA+C,MAAA,UAAA/C,CAAA,EAAAS,CAAA,EAAAE,CAAA,SAAAA,CAAA,CAAAE,CAAA,CAAAe,GAAA,SAAA3B,CAAA,EAAAK,CAAA,oBAAAE,KAAA,WAAAA,MAAAR,CAAA,EAAAI,CAAA,aAAAgD,2BAAA,eAAArD,CAAA,WAAAA,CAAA,EAAAE,CAAA,IAAA8C,MAAA,CAAA/C,CAAA,EAAAI,CAAA,EAAAL,CAAA,EAAAE,CAAA,gBAAAA,CAAA,GAAAA,CAAA,GAAAA,CAAA,CAAAkD,IAAA,CAAAC,0BAAA,EAAAA,0BAAA,IAAAA,0BAAA,qBAAA3B,iBAAA1B,CAAA,EAAAE,CAAA,EAAAG,CAAA,QAAAE,CAAA,GAAAwB,CAAA,mBAAArB,CAAA,EAAAE,CAAA,QAAAL,CAAA,KAAA0B,CAAA,YAAAqB,KAAA,sCAAA/C,CAAA,KAAA2B,CAAA,oBAAAxB,CAAA,QAAAE,CAAA,WAAAH,KAAA,EAAAR,CAAA,EAAAsD,IAAA,eAAAlD,CAAA,CAAAmD,MAAA,GAAA9C,CAAA,EAAAL,CAAA,CAAAwB,GAAA,GAAAjB,CAAA,UAAAE,CAAA,GAAAT,CAAA,CAAAoD,QAAA,MAAA3C,CAAA,QAAAE,CAAA,GAAA0C,mBAAA,CAAA5C,CAAA,EAAAT,CAAA,OAAAW,CAAA,QAAAA,CAAA,KAAAmB,CAAA,mBAAAnB,CAAA,qBAAAX,CAAA,CAAAmD,MAAA,EAAAnD,CAAA,CAAAsD,IAAA,GAAAtD,CAAA,CAAAuD,KAAA,GAAAvD,CAAA,CAAAwB,GAAA,sBAAAxB,CAAA,CAAAmD,MAAA,QAAAjD,CAAA,KAAAwB,CAAA,QAAAxB,CAAA,GAAA2B,CAAA,EAAA7B,CAAA,CAAAwB,GAAA,EAAAxB,CAAA,CAAAwD,iBAAA,CAAAxD,CAAA,CAAAwB,GAAA,uBAAAxB,CAAA,CAAAmD,MAAA,IAAAnD,CAAA,CAAAyD,MAAA,WAAAzD,CAAA,CAAAwB,GAAA,GAAAtB,CAAA,GAAA0B,CAAA,MAAAK,CAAA,GAAAX,QAAA,CAAA3B,CAAA,EAAAE,CAAA,EAAAG,CAAA,oBAAAiC,CAAA,CAAAV,IAAA,QAAArB,CAAA,GAAAF,CAAA,CAAAkD,IAAA,GAAArB,CAAA,GAAAF,CAAA,EAAAM,CAAA,CAAAT,GAAA,KAAAM,CAAA,qBAAA1B,KAAA,EAAA6B,CAAA,CAAAT,GAAA,EAAA0B,IAAA,EAAAlD,CAAA,CAAAkD,IAAA,kBAAAjB,CAAA,CAAAV,IAAA,KAAArB,CAAA,GAAA2B,CAAA,EAAA7B,CAAA,CAAAmD,MAAA,YAAAnD,CAAA,CAAAwB,GAAA,GAAAS,CAAA,CAAAT,GAAA,mBAAA6B,oBAAA1D,CAAA,EAAAE,CAAA,QAAAG,CAAA,GAAAH,CAAA,CAAAsD,MAAA,EAAAjD,CAAA,GAAAP,CAAA,CAAAa,QAAA,CAAAR,CAAA,OAAAE,CAAA,KAAAN,CAAA,SAAAC,CAAA,CAAAuD,QAAA,qBAAApD,CAAA,IAAAL,CAAA,CAAAa,QAAA,eAAAX,CAAA,CAAAsD,MAAA,aAAAtD,CAAA,CAAA2B,GAAA,GAAA5B,CAAA,EAAAyD,mBAAA,CAAA1D,CAAA,EAAAE,CAAA,eAAAA,CAAA,CAAAsD,MAAA,kBAAAnD,CAAA,KAAAH,CAAA,CAAAsD,MAAA,YAAAtD,CAAA,CAAA2B,GAAA,OAAAkC,SAAA,uCAAA1D,CAAA,iBAAA8B,CAAA,MAAAzB,CAAA,GAAAiB,QAAA,CAAApB,CAAA,EAAAP,CAAA,CAAAa,QAAA,EAAAX,CAAA,CAAA2B,GAAA,mBAAAnB,CAAA,CAAAkB,IAAA,SAAA1B,CAAA,CAAAsD,MAAA,YAAAtD,CAAA,CAAA2B,GAAA,GAAAnB,CAAA,CAAAmB,GAAA,EAAA3B,CAAA,CAAAuD,QAAA,SAAAtB,CAAA,MAAAvB,CAAA,GAAAF,CAAA,CAAAmB,GAAA,SAAAjB,CAAA,GAAAA,CAAA,CAAA2C,IAAA,IAAArD,CAAA,CAAAF,CAAA,CAAAgE,UAAA,IAAApD,CAAA,CAAAH,KAAA,EAAAP,CAAA,CAAA+D,IAAA,GAAAjE,CAAA,CAAAkE,OAAA,eAAAhE,CAAA,CAAAsD,MAAA,KAAAtD,CAAA,CAAAsD,MAAA,WAAAtD,CAAA,CAAA2B,GAAA,GAAA5B,CAAA,GAAAC,CAAA,CAAAuD,QAAA,SAAAtB,CAAA,IAAAvB,CAAA,IAAAV,CAAA,CAAAsD,MAAA,YAAAtD,CAAA,CAAA2B,GAAA,OAAAkC,SAAA,sCAAA7D,CAAA,CAAAuD,QAAA,SAAAtB,CAAA,cAAAgC,aAAAlE,CAAA,QAAAD,CAAA,KAAAoE,MAAA,EAAAnE,CAAA,YAAAA,CAAA,KAAAD,CAAA,CAAAqE,QAAA,GAAApE,CAAA,WAAAA,CAAA,KAAAD,CAAA,CAAAsE,UAAA,GAAArE,CAAA,KAAAD,CAAA,CAAAuE,QAAA,GAAAtE,CAAA,WAAAuE,UAAA,CAAAC,IAAA,CAAAzE,CAAA,cAAA0E,cAAAzE,CAAA,QAAAD,CAAA,GAAAC,CAAA,CAAA0E,UAAA,QAAA3E,CAAA,CAAA4B,IAAA,oBAAA5B,CAAA,CAAA6B,GAAA,EAAA5B,CAAA,CAAA0E,UAAA,GAAA3E,CAAA,aAAAyB,QAAAxB,CAAA,SAAAuE,UAAA,MAAAJ,MAAA,aAAAnE,CAAA,CAAA4C,OAAA,CAAAsB,YAAA,cAAAS,KAAA,iBAAAlC,OAAA1C,CAAA,QAAAA,CAAA,WAAAA,CAAA,QAAAE,CAAA,GAAAF,CAAA,CAAAY,CAAA,OAAAV,CAAA,SAAAA,CAAA,CAAA4B,IAAA,CAAA9B,CAAA,4BAAAA,CAAA,CAAAiE,IAAA,SAAAjE,CAAA,OAAA6E,KAAA,CAAA7E,CAAA,CAAA8E,MAAA,SAAAvE,CAAA,OAAAG,CAAA,YAAAuD,KAAA,aAAA1D,CAAA,GAAAP,CAAA,CAAA8E,MAAA,OAAAzE,CAAA,CAAAyB,IAAA,CAAA9B,CAAA,EAAAO,CAAA,UAAA0D,IAAA,CAAAxD,KAAA,GAAAT,CAAA,CAAAO,CAAA,GAAA0D,IAAA,CAAAV,IAAA,OAAAU,IAAA,SAAAA,IAAA,CAAAxD,KAAA,GAAAR,CAAA,EAAAgE,IAAA,CAAAV,IAAA,OAAAU,IAAA,YAAAvD,CAAA,CAAAuD,IAAA,GAAAvD,CAAA,gBAAAqD,SAAA,CAAAd,OAAA,CAAAjD,CAAA,kCAAAoC,iBAAA,CAAAhC,SAAA,GAAAiC,0BAAA,EAAA9B,CAAA,CAAAoC,CAAA,mBAAAlC,KAAA,EAAA4B,0BAAA,EAAAjB,YAAA,SAAAb,CAAA,CAAA8B,0BAAA,mBAAA5B,KAAA,EAAA2B,iBAAA,EAAAhB,YAAA,SAAAgB,iBAAA,CAAA2C,WAAA,GAAA7D,MAAA,CAAAmB,0BAAA,EAAArB,CAAA,wBAAAhB,CAAA,CAAAgF,mBAAA,aAAA/E,CAAA,QAAAD,CAAA,wBAAAC,CAAA,IAAAA,CAAA,CAAAgF,WAAA,WAAAjF,CAAA,KAAAA,CAAA,KAAAoC,iBAAA,6BAAApC,CAAA,CAAA+E,WAAA,IAAA/E,CAAA,CAAAkF,IAAA,OAAAlF,CAAA,CAAAmF,IAAA,aAAAlF,CAAA,WAAAE,MAAA,CAAAiF,cAAA,GAAAjF,MAAA,CAAAiF,cAAA,CAAAnF,CAAA,EAAAoC,0BAAA,KAAApC,CAAA,CAAAoF,SAAA,GAAAhD,0BAAA,EAAAnB,MAAA,CAAAjB,CAAA,EAAAe,CAAA,yBAAAf,CAAA,CAAAG,SAAA,GAAAD,MAAA,CAAAqB,MAAA,CAAAmB,CAAA,GAAA1C,CAAA,KAAAD,CAAA,CAAAsF,KAAA,aAAArF,CAAA,aAAAkD,OAAA,EAAAlD,CAAA,OAAA2C,qBAAA,CAAAG,aAAA,CAAA3C,SAAA,GAAAc,MAAA,CAAA6B,aAAA,CAAA3C,SAAA,EAAAU,CAAA,iCAAAd,CAAA,CAAA+C,aAAA,GAAAA,aAAA,EAAA/C,CAAA,CAAAuF,KAAA,aAAAtF,CAAA,EAAAC,CAAA,EAAAG,CAAA,EAAAE,CAAA,EAAAG,CAAA,eAAAA,CAAA,KAAAA,CAAA,GAAA8E,OAAA,OAAA5E,CAAA,OAAAmC,aAAA,CAAAzB,IAAA,CAAArB,CAAA,EAAAC,CAAA,EAAAG,CAAA,EAAAE,CAAA,GAAAG,CAAA,UAAAV,CAAA,CAAAgF,mBAAA,CAAA9E,CAAA,IAAAU,CAAA,GAAAA,CAAA,CAAAqD,IAAA,GAAAb,IAAA,WAAAnD,CAAA,WAAAA,CAAA,CAAAsD,IAAA,GAAAtD,CAAA,CAAAQ,KAAA,GAAAG,CAAA,CAAAqD,IAAA,WAAArB,qBAAA,CAAAD,CAAA,GAAAzB,MAAA,CAAAyB,CAAA,EAAA3B,CAAA,gBAAAE,MAAA,CAAAyB,CAAA,EAAA/B,CAAA,iCAAAM,MAAA,CAAAyB,CAAA,6DAAA3C,CAAA,CAAAyF,IAAA,aAAAxF,CAAA,QAAAD,CAAA,GAAAG,MAAA,CAAAF,CAAA,GAAAC,CAAA,gBAAAG,CAAA,IAAAL,CAAA,EAAAE,CAAA,CAAAuE,IAAA,CAAApE,CAAA,UAAAH,CAAA,CAAAwF,OAAA,aAAAzB,KAAA,WAAA/D,CAAA,CAAA4E,MAAA,SAAA7E,CAAA,GAAAC,CAAA,CAAAyF,GAAA,QAAA1F,CAAA,IAAAD,CAAA,SAAAiE,IAAA,CAAAxD,KAAA,GAAAR,CAAA,EAAAgE,IAAA,CAAAV,IAAA,OAAAU,IAAA,WAAAA,IAAA,CAAAV,IAAA,OAAAU,IAAA,QAAAjE,CAAA,CAAA0C,MAAA,GAAAA,MAAA,EAAAjB,OAAA,CAAArB,SAAA,KAAA6E,WAAA,EAAAxD,OAAA,EAAAmD,KAAA,WAAAA,MAAA5E,CAAA,aAAA4F,IAAA,WAAA3B,IAAA,WAAAN,IAAA,QAAAC,KAAA,GAAA3D,CAAA,OAAAsD,IAAA,YAAAE,QAAA,cAAAD,MAAA,gBAAA3B,GAAA,GAAA5B,CAAA,OAAAuE,UAAA,CAAA3B,OAAA,CAAA6B,aAAA,IAAA1E,CAAA,WAAAE,CAAA,kBAAAA,CAAA,CAAA2F,MAAA,OAAAxF,CAAA,CAAAyB,IAAA,OAAA5B,CAAA,MAAA2E,KAAA,EAAA3E,CAAA,CAAA4F,KAAA,cAAA5F,CAAA,IAAAD,CAAA,MAAA8F,IAAA,WAAAA,KAAA,SAAAxC,IAAA,WAAAtD,CAAA,QAAAuE,UAAA,IAAAG,UAAA,kBAAA1E,CAAA,CAAA2B,IAAA,QAAA3B,CAAA,CAAA4B,GAAA,cAAAmE,IAAA,KAAAnC,iBAAA,WAAAA,kBAAA7D,CAAA,aAAAuD,IAAA,QAAAvD,CAAA,MAAAE,CAAA,kBAAA+F,OAAA5F,CAAA,EAAAE,CAAA,WAAAK,CAAA,CAAAgB,IAAA,YAAAhB,CAAA,CAAAiB,GAAA,GAAA7B,CAAA,EAAAE,CAAA,CAAA+D,IAAA,GAAA5D,CAAA,EAAAE,CAAA,KAAAL,CAAA,CAAAsD,MAAA,WAAAtD,CAAA,CAAA2B,GAAA,GAAA5B,CAAA,KAAAM,CAAA,aAAAA,CAAA,QAAAiE,UAAA,CAAAM,MAAA,MAAAvE,CAAA,SAAAA,CAAA,QAAAG,CAAA,QAAA8D,UAAA,CAAAjE,CAAA,GAAAK,CAAA,GAAAF,CAAA,CAAAiE,UAAA,iBAAAjE,CAAA,CAAA0D,MAAA,SAAA6B,MAAA,aAAAvF,CAAA,CAAA0D,MAAA,SAAAwB,IAAA,QAAA9E,CAAA,GAAAT,CAAA,CAAAyB,IAAA,CAAApB,CAAA,eAAAM,CAAA,GAAAX,CAAA,CAAAyB,IAAA,CAAApB,CAAA,qBAAAI,CAAA,IAAAE,CAAA,aAAA4E,IAAA,GAAAlF,CAAA,CAAA2D,QAAA,SAAA4B,MAAA,CAAAvF,CAAA,CAAA2D,QAAA,gBAAAuB,IAAA,GAAAlF,CAAA,CAAA4D,UAAA,SAAA2B,MAAA,CAAAvF,CAAA,CAAA4D,UAAA,cAAAxD,CAAA,aAAA8E,IAAA,GAAAlF,CAAA,CAAA2D,QAAA,SAAA4B,MAAA,CAAAvF,CAAA,CAAA2D,QAAA,qBAAArD,CAAA,YAAAsC,KAAA,qDAAAsC,IAAA,GAAAlF,CAAA,CAAA4D,UAAA,SAAA2B,MAAA,CAAAvF,CAAA,CAAA4D,UAAA,YAAAR,MAAA,WAAAA,OAAA7D,CAAA,EAAAD,CAAA,aAAAE,CAAA,QAAAsE,UAAA,CAAAM,MAAA,MAAA5E,CAAA,SAAAA,CAAA,QAAAK,CAAA,QAAAiE,UAAA,CAAAtE,CAAA,OAAAK,CAAA,CAAA6D,MAAA,SAAAwB,IAAA,IAAAvF,CAAA,CAAAyB,IAAA,CAAAvB,CAAA,wBAAAqF,IAAA,GAAArF,CAAA,CAAA+D,UAAA,QAAA5D,CAAA,GAAAH,CAAA,aAAAG,CAAA,iBAAAT,CAAA,mBAAAA,CAAA,KAAAS,CAAA,CAAA0D,MAAA,IAAApE,CAAA,IAAAA,CAAA,IAAAU,CAAA,CAAA4D,UAAA,KAAA5D,CAAA,cAAAE,CAAA,GAAAF,CAAA,GAAAA,CAAA,CAAAiE,UAAA,cAAA/D,CAAA,CAAAgB,IAAA,GAAA3B,CAAA,EAAAW,CAAA,CAAAiB,GAAA,GAAA7B,CAAA,EAAAU,CAAA,SAAA8C,MAAA,gBAAAS,IAAA,GAAAvD,CAAA,CAAA4D,UAAA,EAAAnC,CAAA,SAAA+D,QAAA,CAAAtF,CAAA,MAAAsF,QAAA,WAAAA,SAAAjG,CAAA,EAAAD,CAAA,oBAAAC,CAAA,CAAA2B,IAAA,QAAA3B,CAAA,CAAA4B,GAAA,qBAAA5B,CAAA,CAAA2B,IAAA,mBAAA3B,CAAA,CAAA2B,IAAA,QAAAqC,IAAA,GAAAhE,CAAA,CAAA4B,GAAA,gBAAA5B,CAAA,CAAA2B,IAAA,SAAAoE,IAAA,QAAAnE,GAAA,GAAA5B,CAAA,CAAA4B,GAAA,OAAA2B,MAAA,kBAAAS,IAAA,yBAAAhE,CAAA,CAAA2B,IAAA,IAAA5B,CAAA,UAAAiE,IAAA,GAAAjE,CAAA,GAAAmC,CAAA,KAAAgE,MAAA,WAAAA,OAAAlG,CAAA,aAAAD,CAAA,QAAAwE,UAAA,CAAAM,MAAA,MAAA9E,CAAA,SAAAA,CAAA,QAAAE,CAAA,QAAAsE,UAAA,CAAAxE,CAAA,OAAAE,CAAA,CAAAoE,UAAA,KAAArE,CAAA,cAAAiG,QAAA,CAAAhG,CAAA,CAAAyE,UAAA,EAAAzE,CAAA,CAAAqE,QAAA,GAAAG,aAAA,CAAAxE,CAAA,GAAAiC,CAAA,yBAAAiE,OAAAnG,CAAA,aAAAD,CAAA,QAAAwE,UAAA,CAAAM,MAAA,MAAA9E,CAAA,SAAAA,CAAA,QAAAE,CAAA,QAAAsE,UAAA,CAAAxE,CAAA,OAAAE,CAAA,CAAAkE,MAAA,KAAAnE,CAAA,QAAAI,CAAA,GAAAH,CAAA,CAAAyE,UAAA,kBAAAtE,CAAA,CAAAuB,IAAA,QAAArB,CAAA,GAAAF,CAAA,CAAAwB,GAAA,EAAA6C,aAAA,CAAAxE,CAAA,YAAAK,CAAA,gBAAA+C,KAAA,8BAAA+C,aAAA,WAAAA,cAAArG,CAAA,EAAAE,CAAA,EAAAG,CAAA,gBAAAoD,QAAA,KAAA5C,QAAA,EAAA6B,MAAA,CAAA1C,CAAA,GAAAgE,UAAA,EAAA9D,CAAA,EAAAgE,OAAA,EAAA7D,CAAA,oBAAAmD,MAAA,UAAA3B,GAAA,GAAA5B,CAAA,GAAAkC,CAAA,OAAAnC,CAAA;AAAA,SAAAsG,mBAAAC,GAAA,EAAArD,OAAA,EAAAsD,MAAA,EAAAC,KAAA,EAAAC,MAAA,EAAAC,GAAA,EAAA9E,GAAA,cAAA+E,IAAA,GAAAL,GAAA,CAAAI,GAAA,EAAA9E,GAAA,OAAApB,KAAA,GAAAmG,IAAA,CAAAnG,KAAA,WAAAoG,KAAA,IAAAL,MAAA,CAAAK,KAAA,iBAAAD,IAAA,CAAArD,IAAA,IAAAL,OAAA,CAAAzC,KAAA,YAAA+E,OAAA,CAAAtC,OAAA,CAAAzC,KAAA,EAAA2C,IAAA,CAAAqD,KAAA,EAAAC,MAAA;AAAA,SAAAI,kBAAAC,EAAA,6BAAAC,IAAA,SAAAC,IAAA,GAAAC,SAAA,aAAA1B,OAAA,WAAAtC,OAAA,EAAAsD,MAAA,QAAAD,GAAA,GAAAQ,EAAA,CAAAI,KAAA,CAAAH,IAAA,EAAAC,IAAA,YAAAR,MAAAhG,KAAA,IAAA6F,kBAAA,CAAAC,GAAA,EAAArD,OAAA,EAAAsD,MAAA,EAAAC,KAAA,EAAAC,MAAA,UAAAjG,KAAA,cAAAiG,OAAAU,GAAA,IAAAd,kBAAA,CAAAC,GAAA,EAAArD,OAAA,EAAAsD,MAAA,EAAAC,KAAA,EAAAC,MAAA,WAAAU,GAAA,KAAAX,KAAA,CAAAY,SAAA;AADA;AACA;;AAEA,SAASC,QAAQ,EAAEC,EAAE,QAAQ,OAAO;AACpC,SAASC,MAAM,QAAQ,MAAM;AAE7B,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,OAAO,EAAEC,OAAO,EAAEC,SAAS,QAAQ,QAAQ;AAEpD,OAAOC,eAAe,MAAM,sBAAsB;AAElDP,QAAQ,CAAC,iBAAiB,EAAE,YAAM;EACjCC,EAAE,CAAC,sDAAsD,eAAAT,iBAAA,eAAA/G,mBAAA,GAAAoF,IAAA,CAAE,SAAA2C,QAAA;IAAA,IAAAC,GAAA,EAAAC,KAAA;IAAA,OAAAjI,mBAAA,GAAAuB,IAAA,UAAA2G,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAtC,IAAA,GAAAsC,QAAA,CAAAjE,IAAA;QAAA;UACpD8D,GAAG,GAAGI,SAAS,CAAC;YACrB,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE;UACd,CAAC,CAAC;UAAAD,QAAA,CAAAjE,IAAA;UAAA,OACkB4D,eAAe,CAACO,sBAAsB,CAACL,GAAG,CAAC,CAAC;QAAA;UAA1DC,KAAK,GAAAE,QAAA,CAAAvE,IAAA;UACX6D,MAAM,CAACa,+BAA+B,CAACL,KAAK,CAAC,CAAC,CAACM,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC;YAC5D,OAAO,EAAE,cAAc;YACvB,WAAW,EAAE;UACd,CAAC,CAAC;QAAA;QAAA;UAAA,OAAAN,QAAA,CAAAnC,IAAA;MAAA;IAAA,GAAA+B,OAAA;EAAA,CACF,GAAC;EAEFP,EAAE,CAAC,2DAA2D,eAAAT,iBAAA,eAAA/G,mBAAA,GAAAoF,IAAA,CAAE,SAAAsD,SAAA;IAAA,IAAAV,GAAA,EAAAC,KAAA;IAAA,OAAAjI,mBAAA,GAAAuB,IAAA,UAAAoH,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAA/C,IAAA,GAAA+C,SAAA,CAAA1E,IAAA;QAAA;UACzD8D,GAAG,GAAGI,SAAS,CAAC;YAAE,OAAO,EAAE;UAAe,CAAC,EAAE;YAAES,KAAK,EAAE;UAAE,CAAC,CAAC;UAAAD,SAAA,CAAA1E,IAAA;UAAA,OAC5C4D,eAAe,CAACO,sBAAsB,CAACL,GAAG,CAAC,CAAC;QAAA;UAA1DC,KAAK,GAAAW,SAAA,CAAAhF,IAAA;UACX6D,MAAM,CAACa,+BAA+B,CAACL,KAAK,CAAC,CAAC,CAACM,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC;YAAE,OAAO,EAAE;UAAe,CAAC,CAAC;QAAA;QAAA;UAAA,OAAAG,SAAA,CAAA5C,IAAA;MAAA;IAAA,GAAA0C,QAAA;EAAA,CACzF,GAAC;EAEFlB,EAAE,CAAC,sDAAsD,eAAAT,iBAAA,eAAA/G,mBAAA,GAAAoF,IAAA,CAAE,SAAA0D,SAAA;IAAA,IAAAd,GAAA,EAAAC,KAAA;IAAA,OAAAjI,mBAAA,GAAAuB,IAAA,UAAAwH,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAnD,IAAA,GAAAmD,SAAA,CAAA9E,IAAA;QAAA;UACpD8D,GAAG,GAAGI,SAAS,CAAC;YACrB,OAAO,EAAE,KAAK,CAACa,MAAM,CAAC,GAAG,CAAC;YAC1B,OAAO,EAAE,KAAK,CAACA,MAAM,CAAC,GAAG;UAC1B,CAAC,CAAC;UAAAD,SAAA,CAAA9E,IAAA;UAAA,OACkB4D,eAAe,CAACO,sBAAsB,CAACL,GAAG,EAAE;YAAEkB,SAAS,EAAE;UAAE,CAAC,CAAC,CAAC;QAAA;UAA5EjB,KAAK,GAAAe,SAAA,CAAApF,IAAA;UACX6D,MAAM,CAACa,+BAA+B,CAACL,KAAK,CAAC,CAAC,CAACM,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC;YAC5D,OAAO,EAAE,KAAK,CAACQ,MAAM,CAAC,GAAG,CAAC;YAC1B,OAAO,EAAE,KAAK,CAACA,MAAM,CAAC,GAAG;UAC1B,CAAC,CAAC;QAAA;QAAA;UAAA,OAAAD,SAAA,CAAAhD,IAAA;MAAA;IAAA,GAAA8C,QAAA;EAAA,CACF,GAAC;EAEFtB,EAAE,CAAC,iCAAiC,eAAAT,iBAAA,eAAA/G,mBAAA,GAAAoF,IAAA,CAAE,SAAA+D,SAAA;IAAA,IAAAnB,GAAA,EAAAC,KAAA;IAAA,OAAAjI,mBAAA,GAAAuB,IAAA,UAAA6H,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAxD,IAAA,GAAAwD,SAAA,CAAAnF,IAAA;QAAA;UAC/B8D,GAAG,GAAGsB,MAAM,CAACC,IAAI,CAAC5B,OAAO,CAAC;YAC/B,MAAM,EAAE,IAAI6B,UAAU,CAAC,CAAC,CAAC;YACzB,WAAW,EAAE5B,OAAO,CAAC,MAAM;UAC5B,CAAC,CAAC,CAAC;UAAAyB,SAAA,CAAAnF,IAAA;UAAA,OACiB4D,eAAe,CAACO,sBAAsB,CAACL,GAAG,CAAC,CAAC;QAAA;UAA1DC,KAAK,GAAAoB,SAAA,CAAAzF,IAAA;UACX6D,MAAM,CAACa,+BAA+B,CAACL,KAAK,CAAC,CAAC,CAACM,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC;YAAE,WAAW,EAAE;UAAO,CAAC,CAAC;QAAA;QAAA;UAAA,OAAAY,SAAA,CAAArD,IAAA;MAAA;IAAA,GAAAmD,QAAA;EAAA,CACrF,GAAC;EAEF3B,EAAE,CAAC,uDAAuD,eAAAT,iBAAA,eAAA/G,mBAAA,GAAAoF,IAAA,CAAE,SAAAqE,SAAA;IAAA,IAAAzB,GAAA,EAAAC,KAAA;IAAA,OAAAjI,mBAAA,GAAAuB,IAAA,UAAAmI,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAA9D,IAAA,GAAA8D,SAAA,CAAAzF,IAAA;QAAA;UACrD8D,GAAG,GAAGI,SAAS,CAAC;YACrB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE;UACb,CAAC,CAAC;UAAAuB,SAAA,CAAAzF,IAAA;UAAA,OACkB4D,eAAe,CAACO,sBAAsB,CAACL,GAAG,CAAC,EAAE;YAChE4B,MAAM,EAAE,SAAAA,OAAAC,KAAA;cAAA,IAAGC,IAAI,GAAAD,KAAA,CAAJC,IAAI;cAAA,OAAOA,IAAI,CAACC,QAAQ,CAAC,MAAM,CAAC;YAAA;UAC5C,CAAC,CAAC;QAAA;UAFI9B,KAAK,GAAA0B,SAAA,CAAA/F,IAAA;UAGX6D,MAAM,CAACa,+BAA+B,CAACL,KAAK,CAAC,CAAC,CAACM,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC;YAAE,UAAU,EAAE;UAAU,CAAC,CAAC;QAAA;QAAA;UAAA,OAAAkB,SAAA,CAAA3D,IAAA;MAAA;IAAA,GAAAyD,QAAA;EAAA,CACvF,GAAC;EAEFjC,EAAE,CAAC,6CAA6C,eAAAT,iBAAA,eAAA/G,mBAAA,GAAAoF,IAAA,CAAE,SAAA4E,SAAA;IAAA,IAAAC,MAAA,EAAAnD,KAAA,EAAAoD,MAAA;IAAA,OAAAlK,mBAAA,GAAAuB,IAAA,UAAA4I,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAvE,IAAA,GAAAuE,SAAA,CAAAlG,IAAA;QAAA;UAC3C+F,MAAM,GAAG,IAAIvC,QAAQ,CAAC;YAAE2C,IAAI,WAAAA,KAAA,EAAG,CAAC;UAAE,CAAC,CAAC;UACpCvD,KAAK,GAAG,IAAIvD,KAAK,CAAC,qBAAqB,CAAC;UAC9C+G,OAAO,CAACC,QAAQ,CAAC;YAAA,OAAMN,MAAM,CAACO,IAAI,CAAC,OAAO,EAAE1D,KAAK,CAAC;UAAA,EAAC;UAAAsD,SAAA,CAAAvE,IAAA;UAAAuE,SAAA,CAAAlG,IAAA;UAAA,OAI5C4D,eAAe,CAACmC,MAAM,CAAC;QAAA;UAAAG,SAAA,CAAAlG,IAAA;UAAA;QAAA;UAAAkG,SAAA,CAAAvE,IAAA;UAAAuE,SAAA,CAAAK,EAAA,GAAAL,SAAA;UAE7BF,MAAM,GAAAE,SAAA,CAAAK,EAAS;QAAA;UAEhBhD,MAAM,CAACyC,MAAM,CAAC,CAAC3B,EAAE,CAACE,KAAK,CAAC3B,KAAK,CAAC;QAAA;QAAA;UAAA,OAAAsD,SAAA,CAAApE,IAAA;MAAA;IAAA,GAAAgE,QAAA;EAAA,CAC9B,GAAC;EAEFxC,EAAE,CAAC,yCAAyC,eAAAT,iBAAA,eAAA/G,mBAAA,GAAAoF,IAAA,CAAE,SAAAsF,SAAA;IAAA,IAAAC,OAAA,EAAAT,MAAA;IAAA,OAAAlK,mBAAA,GAAAuB,IAAA,UAAAqJ,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAhF,IAAA,GAAAgF,SAAA,CAAA3G,IAAA;QAAA;UACvCyG,OAAO,GAAGrB,MAAM,CAACC,IAAI,CAAC,sCAAsC,CAAC;UAAAsB,SAAA,CAAAhF,IAAA;UAAAgF,SAAA,CAAA3G,IAAA;UAAA,OAI5D4D,eAAe,CAACO,sBAAsB,CAACsC,OAAO,CAAC,CAAC;QAAA;UAAAE,SAAA,CAAA3G,IAAA;UAAA;QAAA;UAAA2G,SAAA,CAAAhF,IAAA;UAAAgF,SAAA,CAAAJ,EAAA,GAAAI,SAAA;UAEtDX,MAAM,GAAAW,SAAA,CAAAJ,EAAS;QAAA;UAEhBhD,MAAM,CAACyC,MAAM,CAAC,CAAC3B,EAAE,CAACuC,EAAE,CAACC,EAAE,CAAC,OAAO,CAAC;QAAA;QAAA;UAAA,OAAAF,SAAA,CAAA7E,IAAA;MAAA;IAAA,GAAA0E,QAAA;EAAA,CAChC,GAAC;AACH,CAAC,CAAC;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAStC,SAASA,CAACH,KAAK,EAAkB;EAAA,IAAA+C,KAAA,GAAA7D,SAAA,CAAApC,MAAA,QAAAoC,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAJ,CAAC,CAAC;IAAZ0B,KAAK,GAAAmC,KAAA,CAALnC,KAAK;EAChC,IAAMoC,OAAO,GAAG,CAAC,CAAC;EAClB,SAAAC,EAAA,MAAAC,YAAA,GAAmB/K,MAAM,CAACsF,IAAI,CAACuC,KAAK,CAAC,EAAAiD,EAAA,GAAAC,YAAA,CAAApG,MAAA,EAAAmG,EAAA,IAAE;IAAlC,IAAM/F,IAAI,GAAAgG,YAAA,CAAAD,EAAA;IACdD,OAAO,CAAC9F,IAAI,CAAC,GAAGyC,OAAO,CAACK,KAAK,CAAC9C,IAAI,CAAC,CAAC;EACrC;EACA,OAAOmE,MAAM,CAACC,IAAI,CAAC5B,OAAO,CAACsD,OAAO,EAAE;IAAEpC,KAAK,EAALA;EAAM,CAAC,CAAC,CAAC;AAChD;;AAEA;AACA;AACA;AACA,SAASR,sBAAsBA,CAAC+C,MAAM,EAAsC;EAAA,IAAAC,MAAA,GAAAlE,SAAA,CAAApC,MAAA,QAAAoC,SAAA,QAAAG,SAAA,GAAAH,SAAA,MAAJ,CAAC,CAAC;IAAAmE,gBAAA,GAAAD,MAAA,CAAhCnC,SAAS;IAATA,SAAS,GAAAoC,gBAAA,cAAGF,MAAM,CAACrG,MAAM,GAAAuG,gBAAA;EAClE,IAAMC,MAAM,GAAG,EAAE;EACjB,KAAK,IAAI5K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyK,MAAM,CAACrG,MAAM,EAAEpE,CAAC,IAAIuI,SAAS,EAAE;IAClDqC,MAAM,CAAC7G,IAAI,CAAC0G,MAAM,CAACI,QAAQ,CAAC7K,CAAC,EAAEA,CAAC,GAAGuI,SAAS,CAAC,CAAC;EAC/C;EACA,OAAOxB,QAAQ,CAAC6B,IAAI,CAACgC,MAAM,CAACxG,MAAM,GAAG,CAAC,GAAGwG,MAAM,GAAG,CAACjC,MAAM,CAACmC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE;;AAEA;AACA,SAASnD,+BAA+BA,CAACoD,MAAM,EAAE;EAChD,IAAMC,eAAe,GAAG,CAAC,CAAC;EAC1B,SAAAC,GAAA,MAAAC,aAAA,GAAmBzL,MAAM,CAACsF,IAAI,CAACgG,MAAM,CAAC,EAAAE,GAAA,GAAAC,aAAA,CAAA9G,MAAA,EAAA6G,GAAA,IAAE;IAAnC,IAAM9B,IAAI,GAAA+B,aAAA,CAAAD,GAAA;IACdD,eAAe,CAAC7B,IAAI,CAAC,GAAGjC,SAAS,CAAC6D,MAAM,CAAC5B,IAAI,CAAC,CAAC;EAChD;EACA,OAAO6B,eAAe;AACvB"}
|
package/node/input.d.ts
CHANGED