read-excel-file 5.8.7 → 5.8.8

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.
@@ -34,15 +34,15 @@ function unpackXlsxFile(input) {
34
34
  // The `entries` object stores the files
35
35
  // and their contents from this XLSX zip archive.
36
36
  var entries = {};
37
- var stream = input instanceof _stream["default"] ? input : input instanceof Buffer ? _stream.Readable.from(input) : _fs["default"].createReadStream(input);
37
+ var stream = input instanceof _stream["default"] ? input : input instanceof Buffer ? createReadableStreamFromBuffer(input) : _fs["default"].createReadStream(input);
38
38
  return new Promise(function (resolve, reject) {
39
39
  var entryPromises = [];
40
40
  stream
41
41
  // This first "error" listener is for the original stream errors.
42
42
  .on('error', reject).pipe(_unzipper["default"].Parse())
43
43
  // This second "error" listener is for the unzip stream errors.
44
- .on('error', reject).on('close', function () {
45
- return Promise.all(entryPromises).then(function () {
44
+ .on('error', reject).on('finish', function () {}).on('close', function () {
45
+ Promise.all(entryPromises).then(function () {
46
46
  return resolve(entries);
47
47
  });
48
48
  }).on('entry', function (entry) {
@@ -72,4 +72,15 @@ function unpackXlsxFile(input) {
72
72
  });
73
73
  });
74
74
  }
75
+
76
+ // Creates a readable stream from a `Buffer`.
77
+ function createReadableStreamFromBuffer(buffer) {
78
+ // Node.js seems to have a bug in `Readable.from()` function:
79
+ // it doesn't correctly handle empty buffers, i.e. it doesn't return a correct stream.
80
+ // https://gitlab.com/catamphetamine/read-excel-file/-/issues/106
81
+ if (buffer.length === 0) {
82
+ throw new Error('No data');
83
+ }
84
+ return _stream.Readable.from(buffer);
85
+ }
75
86
  //# sourceMappingURL=unpackXlsxFileNode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unpackXlsxFileNode.js","names":["_fs","_interopRequireDefault","require","_stream","_interopRequireWildcard","_unzipper","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","unpackXlsxFile","input","entries","stream","Stream","Buffer","Readable","from","fs","createReadStream","Promise","resolve","reject","entryPromises","on","pipe","unzip","Parse","all","then","entry","contents","push","setEncoding","data","toString","path"],"sources":["../../source/read/unpackXlsxFileNode.js"],"sourcesContent":["import fs from 'fs'\r\nimport Stream, { Readable } from 'stream'\r\n\r\n// `unzipper` has a bug when it doesn't include \"@aws-sdk/client-s3\" package in the `dependencies`\r\n// which causes some \"bundlers\" throw an error.\r\n// https://github.com/ZJONSSON/node-unzipper/issues/330\r\n//\r\n// One workaround is to install \"@aws-sdk/client-s3\" package manually, which would still lead to increased bundle size.\r\n// If the code is bundled for server-side-use only, that is will not be used in a web browser,\r\n// then the increased bundle size would not be an issue.\r\n//\r\n// Another workaround could be to \"alias\" \"@aws-sdk/client-s3\" package in a \"bundler\" configuration file\r\n// with a path to a `*.js` file containing just \"export default null\". But that kind of a workaround would also\r\n// result in errors when using other packages that `import` anything from \"@aws-sdk/client-s3\" package,\r\n// so it's not really a workaround but more of a ticking bomb.\r\n//\r\nimport unzip from 'unzipper'\r\n\r\n/**\r\n * Reads XLSX file in Node.js.\r\n * @param {(string|Stream)} input - A Node.js readable stream or a path to a file.\r\n * @return {Promise} Resolves to an object holding XLSX file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n // XLSX file is a zip archive.\r\n // The `entries` object stores the files\r\n // and their contents from this XLSX zip archive.\r\n const entries = {}\r\n\r\n const stream = input instanceof Stream\r\n ? input\r\n : (\r\n input instanceof Buffer\r\n ? Readable.from(input)\r\n : fs.createReadStream(input)\r\n )\r\n\r\n return new Promise((resolve, reject) => {\r\n const entryPromises = []\r\n\r\n stream\r\n // This first \"error\" listener is for the original stream errors.\r\n .on('error', reject)\r\n .pipe(unzip.Parse())\r\n // This second \"error\" listener is for the unzip stream errors.\r\n .on('error', reject)\r\n .on('close', () => Promise.all(entryPromises).then(() => resolve(entries)))\r\n .on('entry', (entry) => {\r\n let contents = ''\r\n // To ignore an entry: `entry.autodrain()`.\r\n entryPromises.push(new Promise((resolve) => {\r\n // It's not clear what encoding are the files inside XLSX in.\r\n // https://stackoverflow.com/questions/45194771/are-xlsx-files-utf-8-encoded-by-definition\r\n // For example, for XML files, encoding is specified at the top node:\r\n // `<?xml version=\"1.0\" encoding=\"UTF-8\"/>`.\r\n //\r\n // `unzipper` supports setting encoding when reading an `entry`.\r\n // https://github.com/ZJONSSON/node-unzipper/issues/35\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/54\r\n //\r\n // If the `entry.setEncoding('utf8')` line would be commented out,\r\n // there's a `nonAsciiCharacterEncoding` test that wouldn't pass.\r\n //\r\n entry.setEncoding('utf8')\r\n //\r\n entry\r\n .on('data', data => contents += data.toString())\r\n .on('end', () => resolve(entries[entry.path] = contents))\r\n }))\r\n })\r\n })\r\n}\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"unpackXlsxFileNode.js","names":["_fs","_interopRequireDefault","require","_stream","_interopRequireWildcard","_unzipper","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","unpackXlsxFile","input","entries","stream","Stream","Buffer","createReadableStreamFromBuffer","fs","createReadStream","Promise","resolve","reject","entryPromises","on","pipe","unzip","Parse","all","then","entry","contents","push","setEncoding","data","toString","path","buffer","length","Error","Readable","from"],"sources":["../../source/read/unpackXlsxFileNode.js"],"sourcesContent":["import fs from 'fs'\r\nimport Stream, { Readable } from 'stream'\r\n\r\n// `unzipper` has a bug when it doesn't include \"@aws-sdk/client-s3\" package in the `dependencies`\r\n// which causes some \"bundlers\" throw an error.\r\n// https://github.com/ZJONSSON/node-unzipper/issues/330\r\n//\r\n// One workaround is to install \"@aws-sdk/client-s3\" package manually, which would still lead to increased bundle size.\r\n// If the code is bundled for server-side-use only, that is will not be used in a web browser,\r\n// then the increased bundle size would not be an issue.\r\n//\r\n// Another workaround could be to \"alias\" \"@aws-sdk/client-s3\" package in a \"bundler\" configuration file\r\n// with a path to a `*.js` file containing just \"export default null\". But that kind of a workaround would also\r\n// result in errors when using other packages that `import` anything from \"@aws-sdk/client-s3\" package,\r\n// so it's not really a workaround but more of a ticking bomb.\r\n//\r\nimport unzip from 'unzipper'\r\n\r\n/**\r\n * Reads XLSX file in Node.js.\r\n * @param {(string|Stream)} input - A Node.js readable stream or a path to a file.\r\n * @return {Promise} Resolves to an object holding XLSX file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n // XLSX file is a zip archive.\r\n // The `entries` object stores the files\r\n // and their contents from this XLSX zip archive.\r\n const entries = {}\r\n\r\n const stream = input instanceof Stream\r\n ? input\r\n : (\r\n input instanceof Buffer\r\n ? createReadableStreamFromBuffer(input)\r\n : fs.createReadStream(input)\r\n )\r\n\r\n return new Promise((resolve, reject) => {\r\n const entryPromises = []\r\n\r\n stream\r\n // This first \"error\" listener is for the original stream errors.\r\n .on('error', reject)\r\n .pipe(unzip.Parse())\r\n // This second \"error\" listener is for the unzip stream errors.\r\n .on('error', reject)\r\n .on('finish', () => {\r\n })\r\n .on('close', () => {\r\n Promise.all(entryPromises).then(() => resolve(entries))\r\n })\r\n .on('entry', (entry) => {\r\n let contents = ''\r\n // To ignore an entry: `entry.autodrain()`.\r\n entryPromises.push(new Promise((resolve) => {\r\n // It's not clear what encoding are the files inside XLSX in.\r\n // https://stackoverflow.com/questions/45194771/are-xlsx-files-utf-8-encoded-by-definition\r\n // For example, for XML files, encoding is specified at the top node:\r\n // `<?xml version=\"1.0\" encoding=\"UTF-8\"/>`.\r\n //\r\n // `unzipper` supports setting encoding when reading an `entry`.\r\n // https://github.com/ZJONSSON/node-unzipper/issues/35\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/54\r\n //\r\n // If the `entry.setEncoding('utf8')` line would be commented out,\r\n // there's a `nonAsciiCharacterEncoding` test that wouldn't pass.\r\n //\r\n entry.setEncoding('utf8')\r\n //\r\n entry\r\n .on('data', data => contents += data.toString())\r\n .on('end', () => resolve(entries[entry.path] = contents))\r\n }))\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}"],"mappings":"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"}
@@ -26,15 +26,15 @@ export default function unpackXlsxFile(input) {
26
26
  // The `entries` object stores the files
27
27
  // and their contents from this XLSX zip archive.
28
28
  var entries = {};
29
- var stream = input instanceof Stream ? input : input instanceof Buffer ? Readable.from(input) : fs.createReadStream(input);
29
+ var stream = input instanceof Stream ? input : input instanceof Buffer ? createReadableStreamFromBuffer(input) : fs.createReadStream(input);
30
30
  return new Promise(function (resolve, reject) {
31
31
  var entryPromises = [];
32
32
  stream
33
33
  // This first "error" listener is for the original stream errors.
34
34
  .on('error', reject).pipe(unzip.Parse())
35
35
  // This second "error" listener is for the unzip stream errors.
36
- .on('error', reject).on('close', function () {
37
- return Promise.all(entryPromises).then(function () {
36
+ .on('error', reject).on('finish', function () {}).on('close', function () {
37
+ Promise.all(entryPromises).then(function () {
38
38
  return resolve(entries);
39
39
  });
40
40
  }).on('entry', function (entry) {
@@ -64,4 +64,15 @@ export default function unpackXlsxFile(input) {
64
64
  });
65
65
  });
66
66
  }
67
+
68
+ // Creates a readable stream from a `Buffer`.
69
+ function createReadableStreamFromBuffer(buffer) {
70
+ // Node.js seems to have a bug in `Readable.from()` function:
71
+ // it doesn't correctly handle empty buffers, i.e. it doesn't return a correct stream.
72
+ // https://gitlab.com/catamphetamine/read-excel-file/-/issues/106
73
+ if (buffer.length === 0) {
74
+ throw new Error('No data');
75
+ }
76
+ return Readable.from(buffer);
77
+ }
67
78
  //# sourceMappingURL=unpackXlsxFileNode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unpackXlsxFileNode.js","names":["fs","Stream","Readable","unzip","unpackXlsxFile","input","entries","stream","Buffer","from","createReadStream","Promise","resolve","reject","entryPromises","on","pipe","Parse","all","then","entry","contents","push","setEncoding","data","toString","path"],"sources":["../../source/read/unpackXlsxFileNode.js"],"sourcesContent":["import fs from 'fs'\r\nimport Stream, { Readable } from 'stream'\r\n\r\n// `unzipper` has a bug when it doesn't include \"@aws-sdk/client-s3\" package in the `dependencies`\r\n// which causes some \"bundlers\" throw an error.\r\n// https://github.com/ZJONSSON/node-unzipper/issues/330\r\n//\r\n// One workaround is to install \"@aws-sdk/client-s3\" package manually, which would still lead to increased bundle size.\r\n// If the code is bundled for server-side-use only, that is will not be used in a web browser,\r\n// then the increased bundle size would not be an issue.\r\n//\r\n// Another workaround could be to \"alias\" \"@aws-sdk/client-s3\" package in a \"bundler\" configuration file\r\n// with a path to a `*.js` file containing just \"export default null\". But that kind of a workaround would also\r\n// result in errors when using other packages that `import` anything from \"@aws-sdk/client-s3\" package,\r\n// so it's not really a workaround but more of a ticking bomb.\r\n//\r\nimport unzip from 'unzipper'\r\n\r\n/**\r\n * Reads XLSX file in Node.js.\r\n * @param {(string|Stream)} input - A Node.js readable stream or a path to a file.\r\n * @return {Promise} Resolves to an object holding XLSX file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n // XLSX file is a zip archive.\r\n // The `entries` object stores the files\r\n // and their contents from this XLSX zip archive.\r\n const entries = {}\r\n\r\n const stream = input instanceof Stream\r\n ? input\r\n : (\r\n input instanceof Buffer\r\n ? Readable.from(input)\r\n : fs.createReadStream(input)\r\n )\r\n\r\n return new Promise((resolve, reject) => {\r\n const entryPromises = []\r\n\r\n stream\r\n // This first \"error\" listener is for the original stream errors.\r\n .on('error', reject)\r\n .pipe(unzip.Parse())\r\n // This second \"error\" listener is for the unzip stream errors.\r\n .on('error', reject)\r\n .on('close', () => Promise.all(entryPromises).then(() => resolve(entries)))\r\n .on('entry', (entry) => {\r\n let contents = ''\r\n // To ignore an entry: `entry.autodrain()`.\r\n entryPromises.push(new Promise((resolve) => {\r\n // It's not clear what encoding are the files inside XLSX in.\r\n // https://stackoverflow.com/questions/45194771/are-xlsx-files-utf-8-encoded-by-definition\r\n // For example, for XML files, encoding is specified at the top node:\r\n // `<?xml version=\"1.0\" encoding=\"UTF-8\"/>`.\r\n //\r\n // `unzipper` supports setting encoding when reading an `entry`.\r\n // https://github.com/ZJONSSON/node-unzipper/issues/35\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/54\r\n //\r\n // If the `entry.setEncoding('utf8')` line would be commented out,\r\n // there's a `nonAsciiCharacterEncoding` test that wouldn't pass.\r\n //\r\n entry.setEncoding('utf8')\r\n //\r\n entry\r\n .on('data', data => contents += data.toString())\r\n .on('end', () => resolve(entries[entry.path] = contents))\r\n }))\r\n })\r\n })\r\n}\r\n"],"mappings":"AAAA,OAAOA,EAAE,MAAM,IAAI;AACnB,OAAOC,MAAM,IAAIC,QAAQ,QAAQ,QAAQ;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOC,KAAK,MAAM,UAAU;;AAE5B;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC5C;EACA;EACA;EACA,IAAMC,OAAO,GAAG,CAAC,CAAC;EAElB,IAAMC,MAAM,GAAGF,KAAK,YAAYJ,MAAM,GAClCI,KAAK,GAELA,KAAK,YAAYG,MAAM,GACnBN,QAAQ,CAACO,IAAI,CAACJ,KAAK,CAAC,GACpBL,EAAE,CAACU,gBAAgB,CAACL,KAAK,CAC9B;EAEH,OAAO,IAAIM,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IACtC,IAAMC,aAAa,GAAG,EAAE;IAExBP;IACE;IAAA,CACCQ,EAAE,CAAC,OAAO,EAAEF,MAAM,CAAC,CACnBG,IAAI,CAACb,KAAK,CAACc,KAAK,CAAC,CAAC;IACnB;IAAA,CACCF,EAAE,CAAC,OAAO,EAAEF,MAAM,CAAC,CACnBE,EAAE,CAAC,OAAO,EAAE;MAAA,OAAOJ,OAAO,CAACO,GAAG,CAACJ,aAAa,CAAC,CAACK,IAAI,CAAC;QAAA,OAAMP,OAAO,CAACN,OAAO,CAAC;MAAA,EAAC;IAAA,EAAC,CAC3ES,EAAE,CAAC,OAAO,EAAE,UAACK,KAAK,EAAK;MACtB,IAAIC,QAAQ,GAAG,EAAE;MACjB;MACAP,aAAa,CAACQ,IAAI,CAAC,IAAIX,OAAO,CAAC,UAACC,OAAO,EAAK;QAC1C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACAQ,KAAK,CAACG,WAAW,CAAC,MAAM,CAAC;QACzB;QACAH,KAAK,CACFL,EAAE,CAAC,MAAM,EAAE,UAAAS,IAAI;UAAA,OAAIH,QAAQ,IAAIG,IAAI,CAACC,QAAQ,CAAC,CAAC;QAAA,EAAC,CAC/CV,EAAE,CAAC,KAAK,EAAE;UAAA,OAAMH,OAAO,CAACN,OAAO,CAACc,KAAK,CAACM,IAAI,CAAC,GAAGL,QAAQ,CAAC;QAAA,EAAC;MAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACN,CAAC,CAAC;AACJ"}
1
+ {"version":3,"file":"unpackXlsxFileNode.js","names":["fs","Stream","Readable","unzip","unpackXlsxFile","input","entries","stream","Buffer","createReadableStreamFromBuffer","createReadStream","Promise","resolve","reject","entryPromises","on","pipe","Parse","all","then","entry","contents","push","setEncoding","data","toString","path","buffer","length","Error","from"],"sources":["../../source/read/unpackXlsxFileNode.js"],"sourcesContent":["import fs from 'fs'\r\nimport Stream, { Readable } from 'stream'\r\n\r\n// `unzipper` has a bug when it doesn't include \"@aws-sdk/client-s3\" package in the `dependencies`\r\n// which causes some \"bundlers\" throw an error.\r\n// https://github.com/ZJONSSON/node-unzipper/issues/330\r\n//\r\n// One workaround is to install \"@aws-sdk/client-s3\" package manually, which would still lead to increased bundle size.\r\n// If the code is bundled for server-side-use only, that is will not be used in a web browser,\r\n// then the increased bundle size would not be an issue.\r\n//\r\n// Another workaround could be to \"alias\" \"@aws-sdk/client-s3\" package in a \"bundler\" configuration file\r\n// with a path to a `*.js` file containing just \"export default null\". But that kind of a workaround would also\r\n// result in errors when using other packages that `import` anything from \"@aws-sdk/client-s3\" package,\r\n// so it's not really a workaround but more of a ticking bomb.\r\n//\r\nimport unzip from 'unzipper'\r\n\r\n/**\r\n * Reads XLSX file in Node.js.\r\n * @param {(string|Stream)} input - A Node.js readable stream or a path to a file.\r\n * @return {Promise} Resolves to an object holding XLSX file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n // XLSX file is a zip archive.\r\n // The `entries` object stores the files\r\n // and their contents from this XLSX zip archive.\r\n const entries = {}\r\n\r\n const stream = input instanceof Stream\r\n ? input\r\n : (\r\n input instanceof Buffer\r\n ? createReadableStreamFromBuffer(input)\r\n : fs.createReadStream(input)\r\n )\r\n\r\n return new Promise((resolve, reject) => {\r\n const entryPromises = []\r\n\r\n stream\r\n // This first \"error\" listener is for the original stream errors.\r\n .on('error', reject)\r\n .pipe(unzip.Parse())\r\n // This second \"error\" listener is for the unzip stream errors.\r\n .on('error', reject)\r\n .on('finish', () => {\r\n })\r\n .on('close', () => {\r\n Promise.all(entryPromises).then(() => resolve(entries))\r\n })\r\n .on('entry', (entry) => {\r\n let contents = ''\r\n // To ignore an entry: `entry.autodrain()`.\r\n entryPromises.push(new Promise((resolve) => {\r\n // It's not clear what encoding are the files inside XLSX in.\r\n // https://stackoverflow.com/questions/45194771/are-xlsx-files-utf-8-encoded-by-definition\r\n // For example, for XML files, encoding is specified at the top node:\r\n // `<?xml version=\"1.0\" encoding=\"UTF-8\"/>`.\r\n //\r\n // `unzipper` supports setting encoding when reading an `entry`.\r\n // https://github.com/ZJONSSON/node-unzipper/issues/35\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/54\r\n //\r\n // If the `entry.setEncoding('utf8')` line would be commented out,\r\n // there's a `nonAsciiCharacterEncoding` test that wouldn't pass.\r\n //\r\n entry.setEncoding('utf8')\r\n //\r\n entry\r\n .on('data', data => contents += data.toString())\r\n .on('end', () => resolve(entries[entry.path] = contents))\r\n }))\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}"],"mappings":"AAAA,OAAOA,EAAE,MAAM,IAAI;AACnB,OAAOC,MAAM,IAAIC,QAAQ,QAAQ,QAAQ;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOC,KAAK,MAAM,UAAU;;AAE5B;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC5C;EACA;EACA;EACA,IAAMC,OAAO,GAAG,CAAC,CAAC;EAElB,IAAMC,MAAM,GAAGF,KAAK,YAAYJ,MAAM,GAClCI,KAAK,GAELA,KAAK,YAAYG,MAAM,GACnBC,8BAA8B,CAACJ,KAAK,CAAC,GACrCL,EAAE,CAACU,gBAAgB,CAACL,KAAK,CAC9B;EAEH,OAAO,IAAIM,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IACtC,IAAMC,aAAa,GAAG,EAAE;IAExBP;IACE;IAAA,CACCQ,EAAE,CAAC,OAAO,EAAEF,MAAM,CAAC,CACnBG,IAAI,CAACb,KAAK,CAACc,KAAK,CAAC,CAAC;IACnB;IAAA,CACCF,EAAE,CAAC,OAAO,EAAEF,MAAM,CAAC,CACnBE,EAAE,CAAC,QAAQ,EAAE,YAAM,CACpB,CAAC,CAAC,CACDA,EAAE,CAAC,OAAO,EAAE,YAAM;MACjBJ,OAAO,CAACO,GAAG,CAACJ,aAAa,CAAC,CAACK,IAAI,CAAC;QAAA,OAAMP,OAAO,CAACN,OAAO,CAAC;MAAA,EAAC;IACzD,CAAC,CAAC,CACDS,EAAE,CAAC,OAAO,EAAE,UAACK,KAAK,EAAK;MACtB,IAAIC,QAAQ,GAAG,EAAE;MACjB;MACAP,aAAa,CAACQ,IAAI,CAAC,IAAIX,OAAO,CAAC,UAACC,OAAO,EAAK;QAC1C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACAQ,KAAK,CAACG,WAAW,CAAC,MAAM,CAAC;QACzB;QACAH,KAAK,CACFL,EAAE,CAAC,MAAM,EAAE,UAAAS,IAAI;UAAA,OAAIH,QAAQ,IAAIG,IAAI,CAACC,QAAQ,CAAC,CAAC;QAAA,EAAC,CAC/CV,EAAE,CAAC,KAAK,EAAE;UAAA,OAAMH,OAAO,CAACN,OAAO,CAACc,KAAK,CAACM,IAAI,CAAC,GAAGL,QAAQ,CAAC;QAAA,EAAC;MAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACN,CAAC,CAAC;AACJ;;AAEA;AACA,SAASZ,8BAA8BA,CAACkB,MAAM,EAAE;EAC9C;EACA;EACA;EACA,IAAIA,MAAM,CAACC,MAAM,KAAK,CAAC,EAAE;IACvB,MAAM,IAAIC,KAAK,CAAC,SAAS,CAAC;EAC5B;EACA,OAAO3B,QAAQ,CAAC4B,IAAI,CAACH,MAAM,CAAC;AAC9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "read-excel-file",
3
- "version": "5.8.7",
3
+ "version": "5.8.8",
4
4
  "description": "Read small to medium `*.xlsx` files in a browser or Node.js. Parse to JSON with a strict schema.",
5
5
  "module": "index.js",
6
6
  "main": "index.cjs",