read-excel-file 9.3.4 → 9.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/CHANGELOG.md +6 -2
  2. package/README.md +32 -2
  3. package/browser/index.cjs +3 -0
  4. package/browser/index.d.ts +16 -0
  5. package/browser/index.js +4 -1
  6. package/bundle/read-excel-file.min.js +1 -1
  7. package/bundle/read-excel-file.min.js.map +1 -1
  8. package/commonjs/export/convertInputToNodeStream.js +0 -12
  9. package/commonjs/export/convertInputToNodeStream.js.map +1 -1
  10. package/commonjs/export/parseSheet.js +14 -7
  11. package/commonjs/export/parseSheet.js.map +1 -1
  12. package/commonjs/export/readSheetBrowser.js +3 -6
  13. package/commonjs/export/readSheetBrowser.js.map +1 -1
  14. package/commonjs/export/readSheetNode.js +3 -6
  15. package/commonjs/export/readSheetNode.js.map +1 -1
  16. package/commonjs/export/readSheetUniversal.js +2 -2
  17. package/commonjs/export/readSheetUniversal.js.map +1 -1
  18. package/commonjs/export/readSheetWebWorker.js +5 -5
  19. package/commonjs/export/readSheetWebWorker.js.map +1 -1
  20. package/commonjs/export/readXlsxFileBrowser.js +3 -6
  21. package/commonjs/export/readXlsxFileBrowser.js.map +1 -1
  22. package/commonjs/export/readXlsxFileNode.js +3 -6
  23. package/commonjs/export/readXlsxFileNode.js.map +1 -1
  24. package/commonjs/export/readXlsxFileUniversal.js +2 -2
  25. package/commonjs/export/readXlsxFileUniversal.js.map +1 -1
  26. package/commonjs/export/readXlsxFileWebWorker.js +5 -5
  27. package/commonjs/export/readXlsxFileWebWorker.js.map +1 -1
  28. package/commonjs/export/unpackXlsxFileBrowser.js +15 -4
  29. package/commonjs/export/unpackXlsxFileBrowser.js.map +1 -1
  30. package/commonjs/export/unpackXlsxFileBrowser.test.js.map +1 -0
  31. package/commonjs/export/unpackXlsxFileNode.js +32 -5
  32. package/commonjs/export/unpackXlsxFileNode.js.map +1 -1
  33. package/commonjs/export/unpackXlsxFileNode.test.js.map +1 -0
  34. package/commonjs/export/unpackXlsxFileUniversal.js +14 -3
  35. package/commonjs/export/unpackXlsxFileUniversal.js.map +1 -1
  36. package/commonjs/export/unpackXlsxFileUniversal.test.js.map +1 -0
  37. package/commonjs/parseSheetData/parseSheetData.js +9 -6
  38. package/commonjs/parseSheetData/parseSheetData.js.map +1 -1
  39. package/commonjs/utility/convertValuesFromUint8ArraysToStrings.js +100 -0
  40. package/commonjs/utility/convertValuesFromUint8ArraysToStrings.js.map +1 -0
  41. package/commonjs/xlsx/InvalidSpreadsheetError.js +55 -0
  42. package/commonjs/xlsx/InvalidSpreadsheetError.js.map +1 -0
  43. package/commonjs/xlsx/SheetNotFoundError.js +55 -0
  44. package/commonjs/xlsx/SheetNotFoundError.js.map +1 -0
  45. package/commonjs/xlsx/file/InputValidationStream.js +101 -0
  46. package/commonjs/xlsx/file/InputValidationStream.js.map +1 -0
  47. package/commonjs/xlsx/file/InputValidationStream.test.js.map +1 -0
  48. package/commonjs/xlsx/file/InvalidInputError.js +105 -0
  49. package/commonjs/xlsx/file/InvalidInputError.js.map +1 -0
  50. package/commonjs/xlsx/file/createFileTypeDetector.js +70 -0
  51. package/commonjs/xlsx/file/createFileTypeDetector.js.map +1 -0
  52. package/commonjs/xlsx/file/createFileTypeDetector.test.js.map +1 -0
  53. package/commonjs/xlsx/file/validateLeadingBytes.js +47 -0
  54. package/commonjs/xlsx/file/validateLeadingBytes.js.map +1 -0
  55. package/commonjs/xlsx/file/validateLeadingBytes.test.js.map +1 -0
  56. package/commonjs/xlsx/isDateFormat.js +32 -27
  57. package/commonjs/xlsx/isDateFormat.js.map +1 -1
  58. package/commonjs/xlsx/isDateFormatStyle.js +19 -21
  59. package/commonjs/xlsx/isDateFormatStyle.js.map +1 -1
  60. package/commonjs/xlsx/parseCell.js +252 -115
  61. package/commonjs/xlsx/parseCell.js.map +1 -1
  62. package/commonjs/xlsx/parseCellAddress.js +22 -18
  63. package/commonjs/xlsx/parseCellAddress.js.map +1 -1
  64. package/commonjs/xlsx/parseExcelDate.js +4 -124
  65. package/commonjs/xlsx/parseExcelDate.js.map +1 -1
  66. package/commonjs/xlsx/parseExcelDate.test.js.map +1 -1
  67. package/commonjs/xlsx/parseExcelTimestamp.js +139 -0
  68. package/commonjs/xlsx/parseExcelTimestamp.js.map +1 -0
  69. package/commonjs/xlsx/parseFilePaths.js +48 -47
  70. package/commonjs/xlsx/parseFilePaths.js.map +1 -1
  71. package/commonjs/xlsx/parseSharedStrings.js +91 -36
  72. package/commonjs/xlsx/parseSharedStrings.js.map +1 -1
  73. package/commonjs/xlsx/parseSheet.js +527 -69
  74. package/commonjs/xlsx/parseSheet.js.map +1 -1
  75. package/commonjs/xlsx/parseSpreadsheetContents.js +154 -83
  76. package/commonjs/xlsx/parseSpreadsheetContents.js.map +1 -1
  77. package/commonjs/xlsx/parseSpreadsheetInfo.js +60 -59
  78. package/commonjs/xlsx/parseSpreadsheetInfo.js.map +1 -1
  79. package/commonjs/xlsx/parseStyles.js +75 -75
  80. package/commonjs/xlsx/parseStyles.js.map +1 -1
  81. package/commonjs/xml/parseXml.js +112 -0
  82. package/commonjs/xml/parseXml.js.map +1 -0
  83. package/commonjs/xml/parseXml.test.js.map +1 -0
  84. package/commonjs/xml/parseXmlStream.js.map +1 -1
  85. package/commonjs/xml/parseXmlStream.sax.js +69 -28
  86. package/commonjs/xml/parseXmlStream.sax.js.map +1 -1
  87. package/commonjs/xml/parseXmlStream.saxen.js +66 -40
  88. package/commonjs/xml/parseXmlStream.saxen.js.map +1 -1
  89. package/commonjs/zip/UnzipError.js +55 -0
  90. package/commonjs/zip/UnzipError.js.map +1 -0
  91. package/commonjs/zip/unzipFromArrayBuffer.js +21 -1
  92. package/commonjs/zip/unzipFromArrayBuffer.js.map +1 -1
  93. package/commonjs/zip/unzipFromArrayBuffer.test.js.map +1 -0
  94. package/commonjs/zip/unzipFromStream.fflate.js +43 -35
  95. package/commonjs/zip/unzipFromStream.fflate.js.map +1 -1
  96. package/commonjs/zip/unzipFromStream.js +188 -6
  97. package/commonjs/zip/unzipFromStream.js.map +1 -1
  98. package/commonjs/zip/unzipFromStream.unzipper.js +19 -34
  99. package/commonjs/zip/unzipFromStream.unzipper.js.map +1 -1
  100. package/modules/export/convertInputToNodeStream.js +0 -12
  101. package/modules/export/convertInputToNodeStream.js.map +1 -1
  102. package/modules/export/parseSheet.js +13 -6
  103. package/modules/export/parseSheet.js.map +1 -1
  104. package/modules/export/readSheetBrowser.js +3 -5
  105. package/modules/export/readSheetBrowser.js.map +1 -1
  106. package/modules/export/readSheetNode.js +3 -5
  107. package/modules/export/readSheetNode.js.map +1 -1
  108. package/modules/export/readSheetUniversal.js +2 -2
  109. package/modules/export/readSheetUniversal.js.map +1 -1
  110. package/modules/export/readSheetWebWorker.js +7 -8
  111. package/modules/export/readSheetWebWorker.js.map +1 -1
  112. package/modules/export/readXlsxFileBrowser.js +3 -5
  113. package/modules/export/readXlsxFileBrowser.js.map +1 -1
  114. package/modules/export/readXlsxFileNode.js +3 -5
  115. package/modules/export/readXlsxFileNode.js.map +1 -1
  116. package/modules/export/readXlsxFileUniversal.js +2 -2
  117. package/modules/export/readXlsxFileUniversal.js.map +1 -1
  118. package/modules/export/readXlsxFileWebWorker.js +7 -8
  119. package/modules/export/readXlsxFileWebWorker.js.map +1 -1
  120. package/modules/export/unpackXlsxFileBrowser.js +15 -4
  121. package/modules/export/unpackXlsxFileBrowser.js.map +1 -1
  122. package/modules/export/unpackXlsxFileBrowser.test.js.map +1 -0
  123. package/modules/export/unpackXlsxFileNode.js +32 -5
  124. package/modules/export/unpackXlsxFileNode.js.map +1 -1
  125. package/modules/export/unpackXlsxFileNode.test.js.map +1 -0
  126. package/modules/export/unpackXlsxFileUniversal.js +14 -3
  127. package/modules/export/unpackXlsxFileUniversal.js.map +1 -1
  128. package/modules/export/unpackXlsxFileUniversal.test.js.map +1 -0
  129. package/modules/parseSheetData/parseSheetData.js +9 -6
  130. package/modules/parseSheetData/parseSheetData.js.map +1 -1
  131. package/modules/utility/convertValuesFromUint8ArraysToStrings.js +92 -0
  132. package/modules/utility/convertValuesFromUint8ArraysToStrings.js.map +1 -0
  133. package/modules/xlsx/InvalidSpreadsheetError.js +50 -0
  134. package/modules/xlsx/InvalidSpreadsheetError.js.map +1 -0
  135. package/modules/xlsx/SheetNotFoundError.js +50 -0
  136. package/modules/xlsx/SheetNotFoundError.js.map +1 -0
  137. package/modules/xlsx/file/InputValidationStream.js +96 -0
  138. package/modules/xlsx/file/InputValidationStream.js.map +1 -0
  139. package/modules/xlsx/file/InputValidationStream.test.js.map +1 -0
  140. package/modules/xlsx/file/InvalidInputError.js +100 -0
  141. package/modules/xlsx/file/InvalidInputError.js.map +1 -0
  142. package/modules/xlsx/file/createFileTypeDetector.js +63 -0
  143. package/modules/xlsx/file/createFileTypeDetector.js.map +1 -0
  144. package/modules/xlsx/file/createFileTypeDetector.test.js.map +1 -0
  145. package/modules/xlsx/file/validateLeadingBytes.js +37 -0
  146. package/modules/xlsx/file/validateLeadingBytes.js.map +1 -0
  147. package/modules/xlsx/file/validateLeadingBytes.test.js.map +1 -0
  148. package/modules/xlsx/isDateFormat.js +31 -27
  149. package/modules/xlsx/isDateFormat.js.map +1 -1
  150. package/modules/xlsx/isDateFormatStyle.js +18 -21
  151. package/modules/xlsx/isDateFormatStyle.js.map +1 -1
  152. package/modules/xlsx/parseCell.js +251 -111
  153. package/modules/xlsx/parseCell.js.map +1 -1
  154. package/modules/xlsx/parseCellAddress.js +21 -18
  155. package/modules/xlsx/parseCellAddress.js.map +1 -1
  156. package/modules/xlsx/parseExcelDate.js +4 -124
  157. package/modules/xlsx/parseExcelDate.js.map +1 -1
  158. package/modules/xlsx/parseExcelDate.test.js.map +1 -1
  159. package/modules/xlsx/parseExcelTimestamp.js +133 -0
  160. package/modules/xlsx/parseExcelTimestamp.js.map +1 -0
  161. package/modules/xlsx/parseFilePaths.js +48 -47
  162. package/modules/xlsx/parseFilePaths.js.map +1 -1
  163. package/modules/xlsx/parseSharedStrings.js +91 -37
  164. package/modules/xlsx/parseSharedStrings.js.map +1 -1
  165. package/modules/xlsx/parseSheet.js +526 -68
  166. package/modules/xlsx/parseSheet.js.map +1 -1
  167. package/modules/xlsx/parseSpreadsheetContents.js +153 -81
  168. package/modules/xlsx/parseSpreadsheetContents.js.map +1 -1
  169. package/modules/xlsx/parseSpreadsheetInfo.js +60 -59
  170. package/modules/xlsx/parseSpreadsheetInfo.js.map +1 -1
  171. package/modules/xlsx/parseStyles.js +75 -75
  172. package/modules/xlsx/parseStyles.js.map +1 -1
  173. package/modules/xml/parseXml.js +106 -0
  174. package/modules/xml/parseXml.js.map +1 -0
  175. package/modules/xml/parseXml.test.js.map +1 -0
  176. package/modules/xml/parseXmlStream.js +2 -0
  177. package/modules/xml/parseXmlStream.js.map +1 -1
  178. package/modules/xml/parseXmlStream.sax.js +69 -28
  179. package/modules/xml/parseXmlStream.sax.js.map +1 -1
  180. package/modules/xml/parseXmlStream.saxen.js +67 -40
  181. package/modules/xml/parseXmlStream.saxen.js.map +1 -1
  182. package/modules/zip/UnzipError.js +49 -0
  183. package/modules/zip/UnzipError.js.map +1 -0
  184. package/modules/zip/unzipFromArrayBuffer.js +21 -1
  185. package/modules/zip/unzipFromArrayBuffer.js.map +1 -1
  186. package/modules/zip/unzipFromArrayBuffer.test.js.map +1 -0
  187. package/modules/zip/unzipFromStream.fflate.js +41 -35
  188. package/modules/zip/unzipFromStream.fflate.js.map +1 -1
  189. package/modules/zip/unzipFromStream.js +124 -1
  190. package/modules/zip/unzipFromStream.js.map +1 -1
  191. package/modules/zip/unzipFromStream.unzipper.js +19 -35
  192. package/modules/zip/unzipFromStream.unzipper.js.map +1 -1
  193. package/node/index.cjs +3 -0
  194. package/node/index.d.ts +16 -0
  195. package/node/index.js +3 -0
  196. package/package.json +5 -3
  197. package/types/InvalidInputError.d.ts +16 -0
  198. package/types/InvalidSpreadsheetError.d.ts +4 -0
  199. package/types/SheetNotFoundError.d.ts +4 -0
  200. package/universal/index.cjs +3 -0
  201. package/universal/index.d.ts +16 -0
  202. package/universal/index.js +3 -0
  203. package/web-worker/index.cjs +3 -0
  204. package/web-worker/index.d.ts +16 -0
  205. package/web-worker/index.js +3 -0
  206. package/commonjs/export/convertValuesFromUint8ArraysToStrings.js +0 -23
  207. package/commonjs/export/convertValuesFromUint8ArraysToStrings.js.map +0 -1
  208. package/commonjs/xlsx/convertCellsToData2dArray.js +0 -84
  209. package/commonjs/xlsx/convertCellsToData2dArray.js.map +0 -1
  210. package/commonjs/xlsx/dropEmptyColumns.js +0 -40
  211. package/commonjs/xlsx/dropEmptyColumns.js.map +0 -1
  212. package/commonjs/xlsx/dropEmptyColumns.test.js.map +0 -1
  213. package/commonjs/xlsx/dropEmptyRows.js +0 -43
  214. package/commonjs/xlsx/dropEmptyRows.js.map +0 -1
  215. package/commonjs/xlsx/dropEmptyRows.test.js.map +0 -1
  216. package/commonjs/xlsx/parseCellValue.js +0 -189
  217. package/commonjs/xlsx/parseCellValue.js.map +0 -1
  218. package/commonjs/xlsx/parseNumber.js +0 -20
  219. package/commonjs/xlsx/parseNumber.js.map +0 -1
  220. package/commonjs/xlsx/parseSharedString.js +0 -64
  221. package/commonjs/xlsx/parseSharedString.js.map +0 -1
  222. package/commonjs/xlsx/parseSheetData.js +0 -68
  223. package/commonjs/xlsx/parseSheetData.js.map +0 -1
  224. package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js +0 -29
  225. package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +0 -1
  226. package/commonjs/xml/parseXmlStream.saxen.code.js +0 -953
  227. package/commonjs/xml/parseXmlStream.saxen.code.js.map +0 -1
  228. package/commonjs/xml/parseXmlStream.test.js.map +0 -1
  229. package/modules/export/convertValuesFromUint8ArraysToStrings.js +0 -17
  230. package/modules/export/convertValuesFromUint8ArraysToStrings.js.map +0 -1
  231. package/modules/xlsx/convertCellsToData2dArray.js +0 -77
  232. package/modules/xlsx/convertCellsToData2dArray.js.map +0 -1
  233. package/modules/xlsx/dropEmptyColumns.js +0 -34
  234. package/modules/xlsx/dropEmptyColumns.js.map +0 -1
  235. package/modules/xlsx/dropEmptyColumns.test.js.map +0 -1
  236. package/modules/xlsx/dropEmptyRows.js +0 -37
  237. package/modules/xlsx/dropEmptyRows.js.map +0 -1
  238. package/modules/xlsx/dropEmptyRows.test.js.map +0 -1
  239. package/modules/xlsx/parseCellValue.js +0 -183
  240. package/modules/xlsx/parseCellValue.js.map +0 -1
  241. package/modules/xlsx/parseNumber.js +0 -14
  242. package/modules/xlsx/parseNumber.js.map +0 -1
  243. package/modules/xlsx/parseSharedString.js +0 -55
  244. package/modules/xlsx/parseSharedString.js.map +0 -1
  245. package/modules/xlsx/parseSheetData.js +0 -55
  246. package/modules/xlsx/parseSheetData.js.map +0 -1
  247. package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js +0 -23
  248. package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +0 -1
  249. package/modules/xml/parseXmlStream.saxen.code.js +0 -947
  250. package/modules/xml/parseXmlStream.saxen.code.js.map +0 -1
  251. package/modules/xml/parseXmlStream.test.js.map +0 -1
@@ -21,15 +21,17 @@
21
21
  //
22
22
  // import unzipFromArrayBufferSync from '../zip/unzipFromArrayBufferSync.js'
23
23
  import unzipFromArrayBuffer from '../zip/unzipFromArrayBuffer.js';
24
- import convertValuesFromUint8ArraysToStrings from './convertValuesFromUint8ArraysToStrings.js';
24
+ import UnzipError from '../zip/UnzipError.js';
25
+ import InvalidInputError from '../xlsx/file/InvalidInputError.js';
25
26
  import filterZipArchiveEntry from './filterZipArchiveEntry.js';
27
+ import validateLeadingBytes from '../xlsx/file/validateLeadingBytes.js';
26
28
  import checkpoint, { resetCheckpoint } from '../utility/checkpoint.js';
27
29
 
28
30
  /**
29
31
  * Unpacks `*.xlsx` file contents.
30
32
  * An `.xlsx` file is really just a `.zip` archive with `.xml` files inside.
31
33
  * @param {(File|Blob|ArrayBuffer)} input
32
- * @return {Promise<Record<string,string>} Resolves to an object holding `*.xlsx` file entries.
34
+ * @return {Promise<Record<string,Uint8Array>} Resolves to an object holding `*.xlsx` file entries.
33
35
  */
34
36
  export default function unpackXlsxFile(input) {
35
37
  resetCheckpoint();
@@ -40,13 +42,22 @@ export default function unpackXlsxFile(input) {
40
42
  return Promise.resolve(input).then(getResultFromArrayBuffer);
41
43
  }
42
44
  function getResultFromArrayBuffer(arrayBuffer) {
45
+ validateLeadingBytes(new Uint8Array(arrayBuffer));
43
46
  return unzipFromArrayBuffer(arrayBuffer, {
44
47
  filter: filterZipArchiveEntry
45
- }).then(convertValuesFromUint8ArraysToStrings);
48
+ }).then(function (result) {
49
+ return result;
50
+ }, function (error) {
51
+ if (error instanceof UnzipError) {
52
+ throw new InvalidInputError('INVALID_ZIP', error.cause);
53
+ } else {
54
+ throw error;
55
+ }
56
+ });
46
57
  }
47
58
 
48
59
  // function getResultFromArrayBuffer(arrayBuffer) {
49
60
  // const result = unzipFromArrayBufferSync(arrayBuffer, { filter: filterZipArchiveEntry })
50
- // return Promise.resolve(convertValuesFromUint8ArraysToStrings(result))
61
+ // return Promise.resolve(result)
51
62
  // }
52
63
  //# sourceMappingURL=unpackXlsxFileBrowser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unpackXlsxFileBrowser.js","names":["unzipFromArrayBuffer","convertValuesFromUint8ArraysToStrings","filterZipArchiveEntry","checkpoint","resetCheckpoint","unpackXlsxFile","input","File","Blob","arrayBuffer","then","getResultFromArrayBuffer","Promise","resolve","filter"],"sources":["../../source/export/unpackXlsxFileBrowser.js"],"sourcesContent":["// Here it uses the \"async\" version of the unzipper function\r\n// just because it unzips the files inside an archive in parallel\r\n// rather than sequentially. It uses web workers for that.\r\n// Smaller files are still handled synchronously under the hood.\r\n//\r\n// It did condict a couple of basic manual tests in a web browser\r\n// and the results showed that a `1 MB` `.xlsx` file is read in `100 ms`\r\n// both using \"sync\" and \"async\" versions of the unzipper function,\r\n// and reading a `200 KB` `.xlsx` file is done in `70 ms` when using\r\n// the \"sync\" version and in `80 ms\" when using the \"async\" verison.\r\n//\r\n// So the \"sync\" version of the unzipper function is faster on smaller file sizes\r\n// of about < 1 MB. Still, the rest of the parsing code smoothes out this difference,\r\n// and the end result is not much different. Does the difference of `10 ms` justify\r\n// the mental overhead of choosing the right variant for a file of a given size?\r\n// I'd say \"not really\". Sure, performance fans wouldn't scuff on those `10 ms`\r\n// but it's literally \"a blink of an eye\" and about a duration of a single frame\r\n// on a 120 FPS screen.\r\n//\r\n// Hence, it simply uses the \"async\" variant of the unzipper function in any case.\r\n//\r\n// import unzipFromArrayBufferSync from '../zip/unzipFromArrayBufferSync.js'\r\nimport unzipFromArrayBuffer from '../zip/unzipFromArrayBuffer.js'\r\n\r\nimport convertValuesFromUint8ArraysToStrings from './convertValuesFromUint8ArraysToStrings.js'\r\nimport filterZipArchiveEntry from './filterZipArchiveEntry.js'\r\n\r\nimport checkpoint, { resetCheckpoint } from '../utility/checkpoint.js'\r\n\r\n/**\r\n * Unpacks `*.xlsx` file contents.\r\n * An `.xlsx` file is really just a `.zip` archive with `.xml` files inside.\r\n * @param {(File|Blob|ArrayBuffer)} input\r\n * @return {Promise<Record<string,string>} Resolves to an object holding `*.xlsx` file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n\tresetCheckpoint()\r\n\tcheckpoint('unpack files')\r\n\tif (input instanceof File || input instanceof Blob) {\r\n\t\treturn input.arrayBuffer().then(getResultFromArrayBuffer)\r\n\t}\r\n\treturn Promise.resolve(input).then(getResultFromArrayBuffer)\r\n}\r\n\r\nfunction getResultFromArrayBuffer(arrayBuffer) {\r\n\treturn unzipFromArrayBuffer(arrayBuffer, { filter: filterZipArchiveEntry }).then(\r\n\t\tconvertValuesFromUint8ArraysToStrings\r\n\t)\r\n}\r\n\r\n// function getResultFromArrayBuffer(arrayBuffer) {\r\n// \tconst result = unzipFromArrayBufferSync(arrayBuffer, { filter: filterZipArchiveEntry })\r\n// \treturn Promise.resolve(convertValuesFromUint8ArraysToStrings(result))\r\n// }"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,oBAAoB,MAAM,gCAAgC;AAEjE,OAAOC,qCAAqC,MAAM,4CAA4C;AAC9F,OAAOC,qBAAqB,MAAM,4BAA4B;AAE9D,OAAOC,UAAU,IAAIC,eAAe,QAAQ,0BAA0B;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC7CF,eAAe,CAAC,CAAC;EACjBD,UAAU,CAAC,cAAc,CAAC;EAC1B,IAAIG,KAAK,YAAYC,IAAI,IAAID,KAAK,YAAYE,IAAI,EAAE;IACnD,OAAOF,KAAK,CAACG,WAAW,CAAC,CAAC,CAACC,IAAI,CAACC,wBAAwB,CAAC;EAC1D;EACA,OAAOC,OAAO,CAACC,OAAO,CAACP,KAAK,CAAC,CAACI,IAAI,CAACC,wBAAwB,CAAC;AAC7D;AAEA,SAASA,wBAAwBA,CAACF,WAAW,EAAE;EAC9C,OAAOT,oBAAoB,CAACS,WAAW,EAAE;IAAEK,MAAM,EAAEZ;EAAsB,CAAC,CAAC,CAACQ,IAAI,CAC/ET,qCACD,CAAC;AACF;;AAEA;AACA;AACA;AACA"}
1
+ {"version":3,"file":"unpackXlsxFileBrowser.js","names":["unzipFromArrayBuffer","UnzipError","InvalidInputError","filterZipArchiveEntry","validateLeadingBytes","checkpoint","resetCheckpoint","unpackXlsxFile","input","File","Blob","arrayBuffer","then","getResultFromArrayBuffer","Promise","resolve","Uint8Array","filter","result","error","cause"],"sources":["../../source/export/unpackXlsxFileBrowser.js"],"sourcesContent":["// Here it uses the \"async\" version of the unzipper function\r\n// just because it unzips the files inside an archive in parallel\r\n// rather than sequentially. It uses web workers for that.\r\n// Smaller files are still handled synchronously under the hood.\r\n//\r\n// It did condict a couple of basic manual tests in a web browser\r\n// and the results showed that a `1 MB` `.xlsx` file is read in `100 ms`\r\n// both using \"sync\" and \"async\" versions of the unzipper function,\r\n// and reading a `200 KB` `.xlsx` file is done in `70 ms` when using\r\n// the \"sync\" version and in `80 ms\" when using the \"async\" verison.\r\n//\r\n// So the \"sync\" version of the unzipper function is faster on smaller file sizes\r\n// of about < 1 MB. Still, the rest of the parsing code smoothes out this difference,\r\n// and the end result is not much different. Does the difference of `10 ms` justify\r\n// the mental overhead of choosing the right variant for a file of a given size?\r\n// I'd say \"not really\". Sure, performance fans wouldn't scuff on those `10 ms`\r\n// but it's literally \"a blink of an eye\" and about a duration of a single frame\r\n// on a 120 FPS screen.\r\n//\r\n// Hence, it simply uses the \"async\" variant of the unzipper function in any case.\r\n//\r\n// import unzipFromArrayBufferSync from '../zip/unzipFromArrayBufferSync.js'\r\nimport unzipFromArrayBuffer from '../zip/unzipFromArrayBuffer.js'\r\nimport UnzipError from '../zip/UnzipError.js'\r\nimport InvalidInputError from '../xlsx/file/InvalidInputError.js'\r\nimport filterZipArchiveEntry from './filterZipArchiveEntry.js'\r\nimport validateLeadingBytes from '../xlsx/file/validateLeadingBytes.js'\r\n\r\nimport checkpoint, { resetCheckpoint } from '../utility/checkpoint.js'\r\n\r\n/**\r\n * Unpacks `*.xlsx` file contents.\r\n * An `.xlsx` file is really just a `.zip` archive with `.xml` files inside.\r\n * @param {(File|Blob|ArrayBuffer)} input\r\n * @return {Promise<Record<string,Uint8Array>} Resolves to an object holding `*.xlsx` file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n\tresetCheckpoint()\r\n\tcheckpoint('unpack files')\r\n\tif (input instanceof File || input instanceof Blob) {\r\n\t\treturn input.arrayBuffer().then(getResultFromArrayBuffer)\r\n\t}\r\n\treturn Promise.resolve(input).then(getResultFromArrayBuffer)\r\n}\r\n\r\nfunction getResultFromArrayBuffer(arrayBuffer) {\r\n\tvalidateLeadingBytes(new Uint8Array(arrayBuffer))\r\n\treturn unzipFromArrayBuffer(arrayBuffer, { filter: filterZipArchiveEntry })\r\n\t\t.then(\r\n\t\t\tresult => result,\r\n\t\t\t(error) => {\r\n\t\t\t\tif (error instanceof UnzipError) {\r\n\t\t\t\t\tthrow new InvalidInputError('INVALID_ZIP', error.cause)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow error\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n}\r\n\r\n// function getResultFromArrayBuffer(arrayBuffer) {\r\n// \tconst result = unzipFromArrayBufferSync(arrayBuffer, { filter: filterZipArchiveEntry })\r\n// \treturn Promise.resolve(result)\r\n// }"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,oBAAoB,MAAM,gCAAgC;AACjE,OAAOC,UAAU,MAAM,sBAAsB;AAC7C,OAAOC,iBAAiB,MAAM,mCAAmC;AACjE,OAAOC,qBAAqB,MAAM,4BAA4B;AAC9D,OAAOC,oBAAoB,MAAM,sCAAsC;AAEvE,OAAOC,UAAU,IAAIC,eAAe,QAAQ,0BAA0B;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC7CF,eAAe,CAAC,CAAC;EACjBD,UAAU,CAAC,cAAc,CAAC;EAC1B,IAAIG,KAAK,YAAYC,IAAI,IAAID,KAAK,YAAYE,IAAI,EAAE;IACnD,OAAOF,KAAK,CAACG,WAAW,CAAC,CAAC,CAACC,IAAI,CAACC,wBAAwB,CAAC;EAC1D;EACA,OAAOC,OAAO,CAACC,OAAO,CAACP,KAAK,CAAC,CAACI,IAAI,CAACC,wBAAwB,CAAC;AAC7D;AAEA,SAASA,wBAAwBA,CAACF,WAAW,EAAE;EAC9CP,oBAAoB,CAAC,IAAIY,UAAU,CAACL,WAAW,CAAC,CAAC;EACjD,OAAOX,oBAAoB,CAACW,WAAW,EAAE;IAAEM,MAAM,EAAEd;EAAsB,CAAC,CAAC,CACzES,IAAI,CACJ,UAAAM,MAAM;IAAA,OAAIA,MAAM;EAAA,GAChB,UAACC,KAAK,EAAK;IACV,IAAIA,KAAK,YAAYlB,UAAU,EAAE;MAChC,MAAM,IAAIC,iBAAiB,CAAC,aAAa,EAAEiB,KAAK,CAACC,KAAK,CAAC;IACxD,CAAC,MAAM;MACN,MAAMD,KAAK;IACZ;EACD,CACD,CAAC;AACH;;AAEA;AACA;AACA;AACA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpackXlsxFileBrowser.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","InvalidInputError","unpackXlsxFileBrowser","_callee","garbage","thrown","_callee$","_context","Buffer","from","getArrayBuffer","t0","to","be","an","code","equal","_callee2","fileData","_callee2$","_context2","_callee3","invalidZip","_callee3$","_context3","_callee4","empty","_callee4$","_context4","_callee5","xls","_callee5$","_context5","buffer","byteOffset","byteLength"],"sources":["../../source/export/unpackXlsxFileBrowser.test.js"],"sourcesContent":["// This code was originally submitted by Etienne Prothon.\r\n// https://gitlab.com/catamphetamine/read-excel-file/-/merge_requests/11\r\n\r\nimport { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport InvalidInputError from '../xlsx/file/InvalidInputError.js'\r\n\r\nimport unpackXlsxFileBrowser from './unpackXlsxFileBrowser.js'\r\n\r\ndescribe('unpackXlsxFileBrowser', () => {\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 unpackXlsxFileBrowser(getArrayBuffer(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.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('FILE_NOT_SUPPORTED')\r\n\t})\r\n\r\n\tit('should not reject on valid (zip) data', async () => {\r\n\t\tconst fileData = Buffer.from([0x50, 0x4B, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileBrowser(getArrayBuffer(fileData))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.undefined\r\n\t})\r\n\r\n\tit('should reject invalid ZIP input', async () => {\r\n\t\tconst invalidZip = Buffer.from([0x50, 0x4B, 0x99, 0x99])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileBrowser(getArrayBuffer(invalidZip))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('INVALID_ZIP')\r\n\t})\r\n\r\n\tit('should reject empty input', async () => {\r\n\t\tconst empty = Buffer.from([])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileBrowser(getArrayBuffer(empty))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('NO_DATA')\r\n\t})\r\n\r\n\tit('should reject a legacy binary `.xls` file', async () => {\r\n\t\t// The first bytes of an OLE2 Compound File — the container of a binary `.xls` file.\r\n\t\tconst xls = Buffer.from([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileBrowser(getArrayBuffer(xls))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('XLS_FILE_NOT_SUPPORTED')\r\n\t})\r\n})\r\n\r\n// Returns an exact `ArrayBuffer` from a possibly-\"pooled\" `Buffer`.\r\nfunction getArrayBuffer(buffer) {\r\n\treturn buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength)\r\n}"],"mappings":"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"}
@@ -1,21 +1,48 @@
1
1
  import unzipFromStream from '../zip/unzipFromStream.js';
2
+ import UnzipError from '../zip/UnzipError.js';
3
+ import InvalidInputError from '../xlsx/file/InvalidInputError.js';
2
4
  import convertInputToNodeStream from './convertInputToNodeStream.js';
3
- import convertValuesFromUint8ArraysToStrings from './convertValuesFromUint8ArraysToStrings.js';
4
5
  import filterZipArchiveEntry from './filterZipArchiveEntry.js';
6
+ import InputValidationStream from '../xlsx/file/InputValidationStream.js';
5
7
  import checkpoint, { resetCheckpoint } from '../utility/checkpoint.js';
6
8
 
7
9
  /**
8
10
  * Unpacks `*.xlsx` file contents.
9
11
  * An `.xlsx` file is really just a `.zip` archive with `.xml` files inside.
10
12
  * @param {(string|Stream|Buffer|Blob)} input
11
- * @return {Promise<Record<string,string>} Resolves to an object holding `*.xlsx` file entries.
13
+ * @return {Promise<Record<string,Uint8Array>} Resolves to an object holding `*.xlsx` file entries.
12
14
  */
13
15
  export default function unpackXlsxFile(input) {
14
16
  resetCheckpoint();
15
17
  checkpoint('unpack files');
16
18
  var stream = convertInputToNodeStream(input);
17
- return unzipFromStream(stream, {
18
- filter: filterZipArchiveEntry
19
- }).then(convertValuesFromUint8ArraysToStrings);
19
+ return new Promise(function (resolve, reject) {
20
+ var streamWithInputValidation = stream
21
+ // Because the original `stream` reference is going to be replaced,
22
+ // while it still has that reference here, it should set up a listener
23
+ // to catch errors emitted from the input stream (for example, a file read error).
24
+ //
25
+ // That's because the .pipe() method does not automatically propagate errors
26
+ // from a source (input) stream to the destination stream or the end of the pipeline.
27
+ // You would need to attach an 'error' event handler to each stream in the chain.
28
+ //
29
+ // A more convenient alternative would be to use `stream.pipeline()` function:
30
+ // `pipeline(stream1, stream2, (error) => { ... })`
31
+ //
32
+ .on('error', reject)
33
+ // Pipe the input through file type validation stream.
34
+ // If the file type is invalid, the updated `stream` reference will emit
35
+ // an "error" event, which is going to be caught inside `unzipFromStream_()` function.
36
+ .pipe(new InputValidationStream());
37
+ unzipFromStream(streamWithInputValidation, {
38
+ filter: filterZipArchiveEntry
39
+ }).then(resolve, function (error) {
40
+ if (error instanceof UnzipError) {
41
+ reject(new InvalidInputError('INVALID_ZIP', error.cause));
42
+ } else {
43
+ reject(error);
44
+ }
45
+ });
46
+ });
20
47
  }
21
48
  //# sourceMappingURL=unpackXlsxFileNode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unpackXlsxFileNode.js","names":["unzipFromStream","convertInputToNodeStream","convertValuesFromUint8ArraysToStrings","filterZipArchiveEntry","checkpoint","resetCheckpoint","unpackXlsxFile","input","stream","filter","then"],"sources":["../../source/export/unpackXlsxFileNode.js"],"sourcesContent":["import unzipFromStream from '../zip/unzipFromStream.js'\r\nimport convertInputToNodeStream from './convertInputToNodeStream.js'\r\nimport convertValuesFromUint8ArraysToStrings from './convertValuesFromUint8ArraysToStrings.js'\r\nimport filterZipArchiveEntry from './filterZipArchiveEntry.js'\r\n\r\nimport checkpoint, { resetCheckpoint } from '../utility/checkpoint.js'\r\n\r\n/**\r\n * Unpacks `*.xlsx` file contents.\r\n * An `.xlsx` file is really just a `.zip` archive with `.xml` files inside.\r\n * @param {(string|Stream|Buffer|Blob)} input\r\n * @return {Promise<Record<string,string>} Resolves to an object holding `*.xlsx` file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n resetCheckpoint()\r\n checkpoint('unpack files')\r\n const stream = convertInputToNodeStream(input)\r\n return unzipFromStream(stream, { filter: filterZipArchiveEntry })\r\n .then(convertValuesFromUint8ArraysToStrings)\r\n}"],"mappings":"AAAA,OAAOA,eAAe,MAAM,2BAA2B;AACvD,OAAOC,wBAAwB,MAAM,+BAA+B;AACpE,OAAOC,qCAAqC,MAAM,4CAA4C;AAC9F,OAAOC,qBAAqB,MAAM,4BAA4B;AAE9D,OAAOC,UAAU,IAAIC,eAAe,QAAQ,0BAA0B;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC5CF,eAAe,CAAC,CAAC;EACjBD,UAAU,CAAC,cAAc,CAAC;EAC1B,IAAMI,MAAM,GAAGP,wBAAwB,CAACM,KAAK,CAAC;EAC9C,OAAOP,eAAe,CAACQ,MAAM,EAAE;IAAEC,MAAM,EAAEN;EAAsB,CAAC,CAAC,CAC5DO,IAAI,CAACR,qCAAqC,CAAC;AAClD"}
1
+ {"version":3,"file":"unpackXlsxFileNode.js","names":["unzipFromStream","UnzipError","InvalidInputError","convertInputToNodeStream","filterZipArchiveEntry","InputValidationStream","checkpoint","resetCheckpoint","unpackXlsxFile","input","stream","Promise","resolve","reject","streamWithInputValidation","on","pipe","filter","then","error","cause"],"sources":["../../source/export/unpackXlsxFileNode.js"],"sourcesContent":["import unzipFromStream from '../zip/unzipFromStream.js'\r\nimport UnzipError from '../zip/UnzipError.js'\r\nimport InvalidInputError from '../xlsx/file/InvalidInputError.js'\r\nimport convertInputToNodeStream from './convertInputToNodeStream.js'\r\nimport filterZipArchiveEntry from './filterZipArchiveEntry.js'\r\nimport InputValidationStream from '../xlsx/file/InputValidationStream.js'\r\n\r\nimport checkpoint, { resetCheckpoint } from '../utility/checkpoint.js'\r\n\r\n/**\r\n * Unpacks `*.xlsx` file contents.\r\n * An `.xlsx` file is really just a `.zip` archive with `.xml` files inside.\r\n * @param {(string|Stream|Buffer|Blob)} input\r\n * @return {Promise<Record<string,Uint8Array>} Resolves to an object holding `*.xlsx` file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n resetCheckpoint()\r\n checkpoint('unpack files')\r\n const stream = convertInputToNodeStream(input)\r\n return new Promise((resolve, reject) => {\r\n const streamWithInputValidation = stream\r\n // Because the original `stream` reference is going to be replaced,\r\n // while it still has that reference here, it should set up a listener\r\n // to catch errors emitted from the input stream (for example, a file read error).\r\n //\r\n // That's because the .pipe() method does not automatically propagate errors\r\n // from a source (input) stream to the destination stream or the end of the pipeline.\r\n // You would need to attach an 'error' event handler to each stream in the chain.\r\n //\r\n // A more convenient alternative would be to use `stream.pipeline()` function:\r\n // `pipeline(stream1, stream2, (error) => { ... })`\r\n //\r\n .on('error', reject)\r\n // Pipe the input through file type validation stream.\r\n // If the file type is invalid, the updated `stream` reference will emit\r\n // an \"error\" event, which is going to be caught inside `unzipFromStream_()` function.\r\n .pipe(new InputValidationStream())\r\n\r\n unzipFromStream(streamWithInputValidation, { filter: filterZipArchiveEntry })\r\n .then(\r\n resolve,\r\n (error) => {\r\n if (error instanceof UnzipError) {\r\n reject(new InvalidInputError('INVALID_ZIP', error.cause))\r\n } else {\r\n reject(error)\r\n }\r\n }\r\n )\r\n })\r\n}"],"mappings":"AAAA,OAAOA,eAAe,MAAM,2BAA2B;AACvD,OAAOC,UAAU,MAAM,sBAAsB;AAC7C,OAAOC,iBAAiB,MAAM,mCAAmC;AACjE,OAAOC,wBAAwB,MAAM,+BAA+B;AACpE,OAAOC,qBAAqB,MAAM,4BAA4B;AAC9D,OAAOC,qBAAqB,MAAM,uCAAuC;AAEzE,OAAOC,UAAU,IAAIC,eAAe,QAAQ,0BAA0B;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC5CF,eAAe,CAAC,CAAC;EACjBD,UAAU,CAAC,cAAc,CAAC;EAC1B,IAAMI,MAAM,GAAGP,wBAAwB,CAACM,KAAK,CAAC;EAC9C,OAAO,IAAIE,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IACtC,IAAMC,yBAAyB,GAAGJ;IAChC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAAA,CACCK,EAAE,CAAC,OAAO,EAAEF,MAAM;IACnB;IACA;IACA;IAAA,CACCG,IAAI,CAAC,IAAIX,qBAAqB,CAAC,CAAC,CAAC;IAEpCL,eAAe,CAACc,yBAAyB,EAAE;MAAEG,MAAM,EAAEb;IAAsB,CAAC,CAAC,CAC1Ec,IAAI,CACHN,OAAO,EACP,UAACO,KAAK,EAAK;MACT,IAAIA,KAAK,YAAYlB,UAAU,EAAE;QAC/BY,MAAM,CAAC,IAAIX,iBAAiB,CAAC,aAAa,EAAEiB,KAAK,CAACC,KAAK,CAAC,CAAC;MAC3D,CAAC,MAAM;QACLP,MAAM,CAACM,KAAK,CAAC;MACf;IACF,CACF,CAAC;EACL,CAAC,CAAC;AACJ"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpackXlsxFileNode.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","InvalidInputError","unpackXlsxFileNode","_callee","garbage","thrown","_callee$","_context","Buffer","from","createStreamFromBuffer","t0","to","be","an","code","equal","_callee2","_callee2$","_context2","chunkSize","_callee3","fileData","_callee3$","_context3","_callee4","_callee4$","_context4","_callee5","invalidZip","_callee5$","_context5","_callee6","empty","_callee6$","_context6","_callee7","xls","_callee7$","_context7","_callee8","_callee8$","_context8","buffer","_ref9","_ref9$chunkSize","chunks","subarray","alloc"],"sources":["../../source/export/unpackXlsxFileNode.test.js"],"sourcesContent":["// This code was originally submitted by Etienne Prothon.\r\n// https://gitlab.com/catamphetamine/read-excel-file/-/merge_requests/11\r\n\r\nimport { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { Readable } from 'node:stream'\r\n\r\nimport InvalidInputError from '../xlsx/file/InvalidInputError.js'\r\n\r\nimport unpackXlsxFileNode from './unpackXlsxFileNode.js'\r\n\r\ndescribe('unpackXlsxFileNode', () => {\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 unpackXlsxFileNode(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.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('FILE_NOT_SUPPORTED')\r\n\t})\r\n\r\n\tit('should reject on invalid (non-zip) data (when the input is split across one-byte chunks)', 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 unpackXlsxFileNode(createStreamFromBuffer(garbage, { chunkSize: 1 }))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('FILE_NOT_SUPPORTED')\r\n\t})\r\n\r\n\tit('should not reject on valid (zip) data', async () => {\r\n\t\tconst fileData = Buffer.from([0x50, 0x4B, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileNode(createStreamFromBuffer(fileData))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.undefined\r\n\t})\r\n\r\n\tit('should not reject on valid (zip) data (when the input is split across one-byte chunks)', async () => {\r\n\t\tconst fileData = Buffer.from([0x50, 0x4B, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileNode(createStreamFromBuffer(fileData, { chunkSize: 1 }))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.undefined\r\n\t})\r\n\r\n\tit('should reject invalid ZIP input', async () => {\r\n\t\t// Breakdown of the Structure\r\n\t\t// * Signature (50 4B 03 04): The correct first 4 bytes for a local ZIP file header (\"PK\\x03\\x04\").\r\n\t\t// * Version & Flags (14 00 00 00): Minimum version needed to extract and general purpose flags.\r\n\t\t// * Compression Method (08 00): Set to 8 (deflated).\r\n\t\t// * CRC-32 & Sizes (00 00 00 00 ...): Placeholders for data sizes and checksum.\r\n\t\t// * File Name Length (05 00): Name length set to 5 bytes.\r\n\t\t// * Extra Field Length (00 00): No extra fields.\r\n\t\t// * File Name (61 2E 74 78 75): Encodes the filename \"a.txu\".\r\n\t\t// * Corrupt Data Body (6E 6D 61 74): Invalid or truncated compressed stream payload that fails decompression and triggers an extraction error.\r\n\t\tconst invalidZip = Buffer.from([0x50, 0x4B, 0x03, 0x04, 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x61, 0x2E, 0x74, 0x78, 0x75, 0x6E, 0x6D, 0x61, 0x74])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileNode(createStreamFromBuffer(invalidZip))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\r\n\t\t// It looks like `fflate`'s `Unzip` doesn't ever complain about whatever data is thrown at it.\r\n\t\t// Due to how `.zip` file format is defined, \"garbage\" data could be placed at various\r\n\t\t// places in it and it'd still be a valid `.zip` archive. It's likely that for this reason\r\n\t\t// `fflate` doesn't ever complain and simply emits no entries when fed any kind of invalid data.\r\n\t\t//\r\n\t\t// So in case of using `unzipFromStream.fflate.js`, `thrown` will be `undefined`.\r\n\t\t// But it won't be `undefined` in case of using `unzipFromStream.unzipper.js`.\r\n\t\t//\r\n\t\tif (thrown) {\r\n\t\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\t\texpect(thrown.code).to.equal('INVALID_ZIP')\r\n\t\t}\r\n\t})\r\n\r\n\tit('should reject empty input', async () => {\r\n\t\tconst empty = Buffer.from([])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileNode(createStreamFromBuffer(empty))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('NO_DATA')\r\n\t})\r\n\r\n\tit('should reject a legacy binary `.xls` file', async () => {\r\n\t\t// The first bytes of an OLE2 Compound File — the container of a binary `.xls` file.\r\n\t\tconst xls = Buffer.from([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileNode(createStreamFromBuffer(xls))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('XLS_FILE_NOT_SUPPORTED')\r\n\t})\r\n\r\n\tit('should reject a legacy binary `.xls` file (when the input is split across one-byte chunks)', async () => {\r\n\t\tconst xls = Buffer.from([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileNode(createStreamFromBuffer(xls, { chunkSize: 1 }))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('XLS_FILE_NOT_SUPPORTED')\r\n\t})\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"],"mappings":"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"}
@@ -1,22 +1,33 @@
1
1
  import unzipFromArrayBuffer from '../zip/unzipFromArrayBuffer.js';
2
- import convertValuesFromUint8ArraysToStrings from './convertValuesFromUint8ArraysToStrings.js';
2
+ import UnzipError from '../zip/UnzipError.js';
3
+ import InvalidInputError from '../xlsx/file/InvalidInputError.js';
3
4
  import filterZipArchiveEntry from './filterZipArchiveEntry.js';
5
+ import validateLeadingBytes from '../xlsx/file/validateLeadingBytes.js';
4
6
  import checkpoint, { resetCheckpoint } from '../utility/checkpoint.js';
5
7
 
6
8
  /**
7
9
  * Unpacks `*.xlsx` file contents.
8
10
  * An `.xlsx` file is really just a `.zip` archive with `.xml` files inside.
9
11
  * @param {(Blob|ArrayBuffer)} input
10
- * @return {Promise<Record<string,string>} Resolves to an object holding `*.xlsx` file entries.
12
+ * @return {Promise<Record<string,Uint8Array>} Resolves to an object holding `*.xlsx` file entries.
11
13
  */
12
14
  export default function unpackXlsxFile(input) {
13
15
  resetCheckpoint();
14
16
  checkpoint('unpack files');
15
17
  return getArrayBuffer(input).then(function (arrayBuffer) {
18
+ validateLeadingBytes(new Uint8Array(arrayBuffer));
16
19
  return unzipFromArrayBuffer(arrayBuffer, {
17
20
  filter: filterZipArchiveEntry
21
+ }).then(function (result) {
22
+ return result;
23
+ }, function (error) {
24
+ if (error instanceof UnzipError) {
25
+ throw new InvalidInputError('INVALID_ZIP', error.cause);
26
+ } else {
27
+ throw error;
28
+ }
18
29
  });
19
- }).then(convertValuesFromUint8ArraysToStrings);
30
+ });
20
31
  }
21
32
  function getArrayBuffer(input) {
22
33
  if (input instanceof Blob) {
@@ -1 +1 @@
1
- {"version":3,"file":"unpackXlsxFileUniversal.js","names":["unzipFromArrayBuffer","convertValuesFromUint8ArraysToStrings","filterZipArchiveEntry","checkpoint","resetCheckpoint","unpackXlsxFile","input","getArrayBuffer","then","arrayBuffer","filter","Blob","ArrayBuffer","Promise","resolve","TypeError"],"sources":["../../source/export/unpackXlsxFileUniversal.js"],"sourcesContent":["import unzipFromArrayBuffer from '../zip/unzipFromArrayBuffer.js'\r\nimport convertValuesFromUint8ArraysToStrings from './convertValuesFromUint8ArraysToStrings.js'\r\nimport filterZipArchiveEntry from './filterZipArchiveEntry.js'\r\n\r\nimport checkpoint, { resetCheckpoint } from '../utility/checkpoint.js'\r\n\r\n/**\r\n * Unpacks `*.xlsx` file contents.\r\n * An `.xlsx` file is really just a `.zip` archive with `.xml` files inside.\r\n * @param {(Blob|ArrayBuffer)} input\r\n * @return {Promise<Record<string,string>} Resolves to an object holding `*.xlsx` file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n\tresetCheckpoint()\r\n\tcheckpoint('unpack files')\r\n\treturn getArrayBuffer(input)\r\n\t\t.then(arrayBuffer => unzipFromArrayBuffer(arrayBuffer, { filter: filterZipArchiveEntry }))\r\n\t\t.then(convertValuesFromUint8ArraysToStrings)\r\n}\r\n\r\nfunction getArrayBuffer(input) {\r\n\tif (input instanceof Blob) {\r\n\t\treturn input.arrayBuffer()\r\n\t}\r\n\tif (input instanceof ArrayBuffer) {\r\n\t\treturn Promise.resolve(input)\r\n\t}\r\n\tthrow new TypeError('Unuspported input. Expected a `Blob` or an `ArrayBuffer`')\r\n}"],"mappings":"AAAA,OAAOA,oBAAoB,MAAM,gCAAgC;AACjE,OAAOC,qCAAqC,MAAM,4CAA4C;AAC9F,OAAOC,qBAAqB,MAAM,4BAA4B;AAE9D,OAAOC,UAAU,IAAIC,eAAe,QAAQ,0BAA0B;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC7CF,eAAe,CAAC,CAAC;EACjBD,UAAU,CAAC,cAAc,CAAC;EAC1B,OAAOI,cAAc,CAACD,KAAK,CAAC,CAC1BE,IAAI,CAAC,UAAAC,WAAW;IAAA,OAAIT,oBAAoB,CAACS,WAAW,EAAE;MAAEC,MAAM,EAAER;IAAsB,CAAC,CAAC;EAAA,EAAC,CACzFM,IAAI,CAACP,qCAAqC,CAAC;AAC9C;AAEA,SAASM,cAAcA,CAACD,KAAK,EAAE;EAC9B,IAAIA,KAAK,YAAYK,IAAI,EAAE;IAC1B,OAAOL,KAAK,CAACG,WAAW,CAAC,CAAC;EAC3B;EACA,IAAIH,KAAK,YAAYM,WAAW,EAAE;IACjC,OAAOC,OAAO,CAACC,OAAO,CAACR,KAAK,CAAC;EAC9B;EACA,MAAM,IAAIS,SAAS,CAAC,0DAA0D,CAAC;AAChF"}
1
+ {"version":3,"file":"unpackXlsxFileUniversal.js","names":["unzipFromArrayBuffer","UnzipError","InvalidInputError","filterZipArchiveEntry","validateLeadingBytes","checkpoint","resetCheckpoint","unpackXlsxFile","input","getArrayBuffer","then","arrayBuffer","Uint8Array","filter","result","error","cause","Blob","ArrayBuffer","Promise","resolve","TypeError"],"sources":["../../source/export/unpackXlsxFileUniversal.js"],"sourcesContent":["import unzipFromArrayBuffer from '../zip/unzipFromArrayBuffer.js'\r\nimport UnzipError from '../zip/UnzipError.js'\r\nimport InvalidInputError from '../xlsx/file/InvalidInputError.js'\r\nimport filterZipArchiveEntry from './filterZipArchiveEntry.js'\r\nimport validateLeadingBytes from '../xlsx/file/validateLeadingBytes.js'\r\n\r\nimport checkpoint, { resetCheckpoint } from '../utility/checkpoint.js'\r\n\r\n/**\r\n * Unpacks `*.xlsx` file contents.\r\n * An `.xlsx` file is really just a `.zip` archive with `.xml` files inside.\r\n * @param {(Blob|ArrayBuffer)} input\r\n * @return {Promise<Record<string,Uint8Array>} Resolves to an object holding `*.xlsx` file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n\tresetCheckpoint()\r\n\tcheckpoint('unpack files')\r\n\treturn getArrayBuffer(input).then((arrayBuffer) => {\r\n\t\tvalidateLeadingBytes(new Uint8Array(arrayBuffer))\r\n\t\treturn unzipFromArrayBuffer(arrayBuffer, { filter: filterZipArchiveEntry })\r\n\t\t\t.then(\r\n\t\t\t\tresult => result,\r\n\t\t\t\t(error) => {\r\n\t\t\t\t\tif (error instanceof UnzipError) {\r\n\t\t\t\t\t\tthrow new InvalidInputError('INVALID_ZIP', error.cause)\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthrow error\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t)\r\n\t})\r\n}\r\n\r\nfunction getArrayBuffer(input) {\r\n\tif (input instanceof Blob) {\r\n\t\treturn input.arrayBuffer()\r\n\t}\r\n\tif (input instanceof ArrayBuffer) {\r\n\t\treturn Promise.resolve(input)\r\n\t}\r\n\tthrow new TypeError('Unuspported input. Expected a `Blob` or an `ArrayBuffer`')\r\n}"],"mappings":"AAAA,OAAOA,oBAAoB,MAAM,gCAAgC;AACjE,OAAOC,UAAU,MAAM,sBAAsB;AAC7C,OAAOC,iBAAiB,MAAM,mCAAmC;AACjE,OAAOC,qBAAqB,MAAM,4BAA4B;AAC9D,OAAOC,oBAAoB,MAAM,sCAAsC;AAEvE,OAAOC,UAAU,IAAIC,eAAe,QAAQ,0BAA0B;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC7CF,eAAe,CAAC,CAAC;EACjBD,UAAU,CAAC,cAAc,CAAC;EAC1B,OAAOI,cAAc,CAACD,KAAK,CAAC,CAACE,IAAI,CAAC,UAACC,WAAW,EAAK;IAClDP,oBAAoB,CAAC,IAAIQ,UAAU,CAACD,WAAW,CAAC,CAAC;IACjD,OAAOX,oBAAoB,CAACW,WAAW,EAAE;MAAEE,MAAM,EAAEV;IAAsB,CAAC,CAAC,CACzEO,IAAI,CACJ,UAAAI,MAAM;MAAA,OAAIA,MAAM;IAAA,GAChB,UAACC,KAAK,EAAK;MACV,IAAIA,KAAK,YAAYd,UAAU,EAAE;QAChC,MAAM,IAAIC,iBAAiB,CAAC,aAAa,EAAEa,KAAK,CAACC,KAAK,CAAC;MACxD,CAAC,MAAM;QACN,MAAMD,KAAK;MACZ;IACD,CACD,CAAC;EACH,CAAC,CAAC;AACH;AAEA,SAASN,cAAcA,CAACD,KAAK,EAAE;EAC9B,IAAIA,KAAK,YAAYS,IAAI,EAAE;IAC1B,OAAOT,KAAK,CAACG,WAAW,CAAC,CAAC;EAC3B;EACA,IAAIH,KAAK,YAAYU,WAAW,EAAE;IACjC,OAAOC,OAAO,CAACC,OAAO,CAACZ,KAAK,CAAC;EAC9B;EACA,MAAM,IAAIa,SAAS,CAAC,0DAA0D,CAAC;AAChF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpackXlsxFileUniversal.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","InvalidInputError","unpackXlsxFileUniversal","_callee","garbage","thrown","_callee$","_context","Buffer","from","getArrayBuffer","t0","to","be","an","code","equal","_callee2","fileData","_callee2$","_context2","_callee3","invalidZip","_callee3$","_context3","_callee4","empty","_callee4$","_context4","_callee5","xls","_callee5$","_context5","buffer","byteOffset","byteLength"],"sources":["../../source/export/unpackXlsxFileUniversal.test.js"],"sourcesContent":["// This code was originally submitted by Etienne Prothon.\r\n// https://gitlab.com/catamphetamine/read-excel-file/-/merge_requests/11\r\n\r\nimport { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport InvalidInputError from '../xlsx/file/InvalidInputError.js'\r\n\r\nimport unpackXlsxFileUniversal from './unpackXlsxFileUniversal.js'\r\n\r\ndescribe('unpackXlsxFileUniversal', () => {\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 unpackXlsxFileUniversal(getArrayBuffer(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.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('FILE_NOT_SUPPORTED')\r\n\t})\r\n\r\n\tit('should not reject on valid (zip) data', async () => {\r\n\t\tconst fileData = Buffer.from([0x50, 0x4B, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileUniversal(getArrayBuffer(fileData))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.undefined\r\n\t})\r\n\r\n\r\n\tit('should reject invalid ZIP input', async () => {\r\n\t\tconst invalidZip = Buffer.from([0x50, 0x4B, 0x99, 0x99])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileUniversal(getArrayBuffer(invalidZip))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('INVALID_ZIP')\r\n\t})\r\n\r\n\tit('should reject empty input', async () => {\r\n\t\tconst empty = Buffer.from([])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileUniversal(getArrayBuffer(empty))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('NO_DATA')\r\n\t})\r\n\r\n\tit('should reject a legacy binary `.xls` file', async () => {\r\n\t\t// The first bytes of an OLE2 Compound File — the container of a binary `.xls` file.\r\n\t\tconst xls = Buffer.from([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])\r\n\r\n\t\tlet thrown\r\n\t\ttry {\r\n\t\t\tawait unpackXlsxFileUniversal(getArrayBuffer(xls))\r\n\t\t} catch (caught) {\r\n\t\t\tthrown = caught\r\n\t\t}\r\n\t\texpect(thrown).to.be.an.instanceof(InvalidInputError)\r\n\t\texpect(thrown.code).to.equal('XLS_FILE_NOT_SUPPORTED')\r\n\t})\r\n})\r\n\r\n// Returns an exact `ArrayBuffer` from a possibly-\"pooled\" `Buffer`.\r\nfunction getArrayBuffer(buffer) {\r\n\treturn buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength)\r\n}"],"mappings":"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"}
@@ -20,6 +20,9 @@ import DateType from './types/Date.js';
20
20
  import isObject from '../utility/isObject.js';
21
21
  import checkpoint from '../utility/checkpoint.js';
22
22
 
23
+ // An empty cell has `null` value.
24
+ var EMPTY_CELL_VALUE = null;
25
+
23
26
  /**
24
27
  * Converts spreadsheet-alike data structure into an array of JSON objects.
25
28
  *
@@ -292,7 +295,7 @@ function parseCellValue(cellValue, schemaEntry, options) {
292
295
  isEmptyValue: true
293
296
  };
294
297
  }
295
- if (cellValue === null) {
298
+ if (cellValue === EMPTY_CELL_VALUE) {
296
299
  return {
297
300
  value: options.propertyValueWhenCellIsEmpty,
298
301
  isEmptyValue: true
@@ -373,9 +376,9 @@ function parseArrayValue(value, schemaEntry, options) {
373
376
  */
374
377
  export function parseValue(value, schemaEntry, options) {
375
378
  // `null` values (i.e. empty cells) don't get parsed.
376
- if (value === null) {
379
+ if (value === EMPTY_CELL_VALUE) {
377
380
  return {
378
- value: null,
381
+ value: value,
379
382
  isEmptyValue: true
380
383
  };
381
384
  }
@@ -406,9 +409,9 @@ export function parseValue(value, schemaEntry, options) {
406
409
  }
407
410
 
408
411
  // If the parsed value is empty, return it.
409
- if (value === null) {
412
+ if (value === EMPTY_CELL_VALUE) {
410
413
  return {
411
- value: null,
414
+ value: value,
412
415
  isEmptyValue: true
413
416
  };
414
417
  }
@@ -487,7 +490,7 @@ function parseValueUsingTypeParser(value, type) {
487
490
  // Returning `undefined` from a `type` parser is treated as returning `null`.
488
491
  if (parsedValue === undefined) {
489
492
  return {
490
- value: null
493
+ value: EMPTY_CELL_VALUE
491
494
  };
492
495
  }
493
496
  return {