read-excel-file 9.3.3 → 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 (255) hide show
  1. package/CHANGELOG.md +9 -0
  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/saxen/parser.js +1 -1
  40. package/commonjs/saxen/parser.js.map +1 -1
  41. package/commonjs/utility/convertValuesFromUint8ArraysToStrings.js +100 -0
  42. package/commonjs/utility/convertValuesFromUint8ArraysToStrings.js.map +1 -0
  43. package/commonjs/xlsx/InvalidSpreadsheetError.js +55 -0
  44. package/commonjs/xlsx/InvalidSpreadsheetError.js.map +1 -0
  45. package/commonjs/xlsx/SheetNotFoundError.js +55 -0
  46. package/commonjs/xlsx/SheetNotFoundError.js.map +1 -0
  47. package/commonjs/xlsx/file/InputValidationStream.js +101 -0
  48. package/commonjs/xlsx/file/InputValidationStream.js.map +1 -0
  49. package/commonjs/xlsx/file/InputValidationStream.test.js.map +1 -0
  50. package/commonjs/xlsx/file/InvalidInputError.js +105 -0
  51. package/commonjs/xlsx/file/InvalidInputError.js.map +1 -0
  52. package/commonjs/xlsx/file/createFileTypeDetector.js +70 -0
  53. package/commonjs/xlsx/file/createFileTypeDetector.js.map +1 -0
  54. package/commonjs/xlsx/file/createFileTypeDetector.test.js.map +1 -0
  55. package/commonjs/xlsx/file/validateLeadingBytes.js +47 -0
  56. package/commonjs/xlsx/file/validateLeadingBytes.js.map +1 -0
  57. package/commonjs/xlsx/file/validateLeadingBytes.test.js.map +1 -0
  58. package/commonjs/xlsx/isDateFormat.js +32 -27
  59. package/commonjs/xlsx/isDateFormat.js.map +1 -1
  60. package/commonjs/xlsx/isDateFormatStyle.js +19 -21
  61. package/commonjs/xlsx/isDateFormatStyle.js.map +1 -1
  62. package/commonjs/xlsx/parseCell.js +252 -115
  63. package/commonjs/xlsx/parseCell.js.map +1 -1
  64. package/commonjs/xlsx/parseCellAddress.js +22 -18
  65. package/commonjs/xlsx/parseCellAddress.js.map +1 -1
  66. package/commonjs/xlsx/parseExcelDate.js +4 -124
  67. package/commonjs/xlsx/parseExcelDate.js.map +1 -1
  68. package/commonjs/xlsx/parseExcelDate.test.js.map +1 -1
  69. package/commonjs/xlsx/parseExcelTimestamp.js +139 -0
  70. package/commonjs/xlsx/parseExcelTimestamp.js.map +1 -0
  71. package/commonjs/xlsx/parseFilePaths.js +48 -47
  72. package/commonjs/xlsx/parseFilePaths.js.map +1 -1
  73. package/commonjs/xlsx/parseSharedStrings.js +91 -36
  74. package/commonjs/xlsx/parseSharedStrings.js.map +1 -1
  75. package/commonjs/xlsx/parseSheet.js +527 -69
  76. package/commonjs/xlsx/parseSheet.js.map +1 -1
  77. package/commonjs/xlsx/parseSpreadsheetContents.js +154 -83
  78. package/commonjs/xlsx/parseSpreadsheetContents.js.map +1 -1
  79. package/commonjs/xlsx/parseSpreadsheetInfo.js +60 -59
  80. package/commonjs/xlsx/parseSpreadsheetInfo.js.map +1 -1
  81. package/commonjs/xlsx/parseStyles.js +75 -75
  82. package/commonjs/xlsx/parseStyles.js.map +1 -1
  83. package/commonjs/xml/parseXml.js +112 -0
  84. package/commonjs/xml/parseXml.js.map +1 -0
  85. package/commonjs/xml/parseXml.test.js.map +1 -0
  86. package/commonjs/xml/parseXmlStream.js.map +1 -1
  87. package/commonjs/xml/parseXmlStream.sax.js +69 -28
  88. package/commonjs/xml/parseXmlStream.sax.js.map +1 -1
  89. package/commonjs/xml/parseXmlStream.saxen.js +66 -40
  90. package/commonjs/xml/parseXmlStream.saxen.js.map +1 -1
  91. package/commonjs/zip/UnzipError.js +55 -0
  92. package/commonjs/zip/UnzipError.js.map +1 -0
  93. package/commonjs/zip/unzipFromArrayBuffer.js +21 -1
  94. package/commonjs/zip/unzipFromArrayBuffer.js.map +1 -1
  95. package/commonjs/zip/unzipFromArrayBuffer.test.js.map +1 -0
  96. package/commonjs/zip/unzipFromStream.fflate.js +43 -35
  97. package/commonjs/zip/unzipFromStream.fflate.js.map +1 -1
  98. package/commonjs/zip/unzipFromStream.js +188 -6
  99. package/commonjs/zip/unzipFromStream.js.map +1 -1
  100. package/commonjs/zip/unzipFromStream.unzipper.js +19 -34
  101. package/commonjs/zip/unzipFromStream.unzipper.js.map +1 -1
  102. package/modules/export/convertInputToNodeStream.js +0 -12
  103. package/modules/export/convertInputToNodeStream.js.map +1 -1
  104. package/modules/export/parseSheet.js +13 -6
  105. package/modules/export/parseSheet.js.map +1 -1
  106. package/modules/export/readSheetBrowser.js +3 -5
  107. package/modules/export/readSheetBrowser.js.map +1 -1
  108. package/modules/export/readSheetNode.js +3 -5
  109. package/modules/export/readSheetNode.js.map +1 -1
  110. package/modules/export/readSheetUniversal.js +2 -2
  111. package/modules/export/readSheetUniversal.js.map +1 -1
  112. package/modules/export/readSheetWebWorker.js +7 -8
  113. package/modules/export/readSheetWebWorker.js.map +1 -1
  114. package/modules/export/readXlsxFileBrowser.js +3 -5
  115. package/modules/export/readXlsxFileBrowser.js.map +1 -1
  116. package/modules/export/readXlsxFileNode.js +3 -5
  117. package/modules/export/readXlsxFileNode.js.map +1 -1
  118. package/modules/export/readXlsxFileUniversal.js +2 -2
  119. package/modules/export/readXlsxFileUniversal.js.map +1 -1
  120. package/modules/export/readXlsxFileWebWorker.js +7 -8
  121. package/modules/export/readXlsxFileWebWorker.js.map +1 -1
  122. package/modules/export/unpackXlsxFileBrowser.js +15 -4
  123. package/modules/export/unpackXlsxFileBrowser.js.map +1 -1
  124. package/modules/export/unpackXlsxFileBrowser.test.js.map +1 -0
  125. package/modules/export/unpackXlsxFileNode.js +32 -5
  126. package/modules/export/unpackXlsxFileNode.js.map +1 -1
  127. package/modules/export/unpackXlsxFileNode.test.js.map +1 -0
  128. package/modules/export/unpackXlsxFileUniversal.js +14 -3
  129. package/modules/export/unpackXlsxFileUniversal.js.map +1 -1
  130. package/modules/export/unpackXlsxFileUniversal.test.js.map +1 -0
  131. package/modules/parseSheetData/parseSheetData.js +9 -6
  132. package/modules/parseSheetData/parseSheetData.js.map +1 -1
  133. package/modules/saxen/parser.js +1 -1
  134. package/modules/saxen/parser.js.map +1 -1
  135. package/modules/utility/convertValuesFromUint8ArraysToStrings.js +92 -0
  136. package/modules/utility/convertValuesFromUint8ArraysToStrings.js.map +1 -0
  137. package/modules/xlsx/InvalidSpreadsheetError.js +50 -0
  138. package/modules/xlsx/InvalidSpreadsheetError.js.map +1 -0
  139. package/modules/xlsx/SheetNotFoundError.js +50 -0
  140. package/modules/xlsx/SheetNotFoundError.js.map +1 -0
  141. package/modules/xlsx/file/InputValidationStream.js +96 -0
  142. package/modules/xlsx/file/InputValidationStream.js.map +1 -0
  143. package/modules/xlsx/file/InputValidationStream.test.js.map +1 -0
  144. package/modules/xlsx/file/InvalidInputError.js +100 -0
  145. package/modules/xlsx/file/InvalidInputError.js.map +1 -0
  146. package/modules/xlsx/file/createFileTypeDetector.js +63 -0
  147. package/modules/xlsx/file/createFileTypeDetector.js.map +1 -0
  148. package/modules/xlsx/file/createFileTypeDetector.test.js.map +1 -0
  149. package/modules/xlsx/file/validateLeadingBytes.js +37 -0
  150. package/modules/xlsx/file/validateLeadingBytes.js.map +1 -0
  151. package/modules/xlsx/file/validateLeadingBytes.test.js.map +1 -0
  152. package/modules/xlsx/isDateFormat.js +31 -27
  153. package/modules/xlsx/isDateFormat.js.map +1 -1
  154. package/modules/xlsx/isDateFormatStyle.js +18 -21
  155. package/modules/xlsx/isDateFormatStyle.js.map +1 -1
  156. package/modules/xlsx/parseCell.js +251 -111
  157. package/modules/xlsx/parseCell.js.map +1 -1
  158. package/modules/xlsx/parseCellAddress.js +21 -18
  159. package/modules/xlsx/parseCellAddress.js.map +1 -1
  160. package/modules/xlsx/parseExcelDate.js +4 -124
  161. package/modules/xlsx/parseExcelDate.js.map +1 -1
  162. package/modules/xlsx/parseExcelDate.test.js.map +1 -1
  163. package/modules/xlsx/parseExcelTimestamp.js +133 -0
  164. package/modules/xlsx/parseExcelTimestamp.js.map +1 -0
  165. package/modules/xlsx/parseFilePaths.js +48 -47
  166. package/modules/xlsx/parseFilePaths.js.map +1 -1
  167. package/modules/xlsx/parseSharedStrings.js +91 -37
  168. package/modules/xlsx/parseSharedStrings.js.map +1 -1
  169. package/modules/xlsx/parseSheet.js +526 -68
  170. package/modules/xlsx/parseSheet.js.map +1 -1
  171. package/modules/xlsx/parseSpreadsheetContents.js +153 -81
  172. package/modules/xlsx/parseSpreadsheetContents.js.map +1 -1
  173. package/modules/xlsx/parseSpreadsheetInfo.js +60 -59
  174. package/modules/xlsx/parseSpreadsheetInfo.js.map +1 -1
  175. package/modules/xlsx/parseStyles.js +75 -75
  176. package/modules/xlsx/parseStyles.js.map +1 -1
  177. package/modules/xml/parseXml.js +106 -0
  178. package/modules/xml/parseXml.js.map +1 -0
  179. package/modules/xml/parseXml.test.js.map +1 -0
  180. package/modules/xml/parseXmlStream.js +2 -0
  181. package/modules/xml/parseXmlStream.js.map +1 -1
  182. package/modules/xml/parseXmlStream.sax.js +69 -28
  183. package/modules/xml/parseXmlStream.sax.js.map +1 -1
  184. package/modules/xml/parseXmlStream.saxen.js +67 -40
  185. package/modules/xml/parseXmlStream.saxen.js.map +1 -1
  186. package/modules/zip/UnzipError.js +49 -0
  187. package/modules/zip/UnzipError.js.map +1 -0
  188. package/modules/zip/unzipFromArrayBuffer.js +21 -1
  189. package/modules/zip/unzipFromArrayBuffer.js.map +1 -1
  190. package/modules/zip/unzipFromArrayBuffer.test.js.map +1 -0
  191. package/modules/zip/unzipFromStream.fflate.js +41 -35
  192. package/modules/zip/unzipFromStream.fflate.js.map +1 -1
  193. package/modules/zip/unzipFromStream.js +124 -1
  194. package/modules/zip/unzipFromStream.js.map +1 -1
  195. package/modules/zip/unzipFromStream.unzipper.js +19 -35
  196. package/modules/zip/unzipFromStream.unzipper.js.map +1 -1
  197. package/node/index.cjs +3 -0
  198. package/node/index.d.ts +16 -0
  199. package/node/index.js +3 -0
  200. package/package.json +5 -3
  201. package/types/InvalidInputError.d.ts +16 -0
  202. package/types/InvalidSpreadsheetError.d.ts +4 -0
  203. package/types/SheetNotFoundError.d.ts +4 -0
  204. package/universal/index.cjs +3 -0
  205. package/universal/index.d.ts +16 -0
  206. package/universal/index.js +3 -0
  207. package/web-worker/index.cjs +3 -0
  208. package/web-worker/index.d.ts +16 -0
  209. package/web-worker/index.js +3 -0
  210. package/commonjs/export/convertValuesFromUint8ArraysToStrings.js +0 -23
  211. package/commonjs/export/convertValuesFromUint8ArraysToStrings.js.map +0 -1
  212. package/commonjs/xlsx/convertCellsToData2dArray.js +0 -84
  213. package/commonjs/xlsx/convertCellsToData2dArray.js.map +0 -1
  214. package/commonjs/xlsx/dropEmptyColumns.js +0 -40
  215. package/commonjs/xlsx/dropEmptyColumns.js.map +0 -1
  216. package/commonjs/xlsx/dropEmptyColumns.test.js.map +0 -1
  217. package/commonjs/xlsx/dropEmptyRows.js +0 -43
  218. package/commonjs/xlsx/dropEmptyRows.js.map +0 -1
  219. package/commonjs/xlsx/dropEmptyRows.test.js.map +0 -1
  220. package/commonjs/xlsx/parseCellValue.js +0 -186
  221. package/commonjs/xlsx/parseCellValue.js.map +0 -1
  222. package/commonjs/xlsx/parseNumber.js +0 -20
  223. package/commonjs/xlsx/parseNumber.js.map +0 -1
  224. package/commonjs/xlsx/parseSharedString.js +0 -64
  225. package/commonjs/xlsx/parseSharedString.js.map +0 -1
  226. package/commonjs/xlsx/parseSheetData.js +0 -68
  227. package/commonjs/xlsx/parseSheetData.js.map +0 -1
  228. package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js +0 -29
  229. package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +0 -1
  230. package/commonjs/xml/parseXmlStream.saxen.code.js +0 -953
  231. package/commonjs/xml/parseXmlStream.saxen.code.js.map +0 -1
  232. package/commonjs/xml/parseXmlStream.test.js.map +0 -1
  233. package/modules/export/convertValuesFromUint8ArraysToStrings.js +0 -17
  234. package/modules/export/convertValuesFromUint8ArraysToStrings.js.map +0 -1
  235. package/modules/xlsx/convertCellsToData2dArray.js +0 -77
  236. package/modules/xlsx/convertCellsToData2dArray.js.map +0 -1
  237. package/modules/xlsx/dropEmptyColumns.js +0 -34
  238. package/modules/xlsx/dropEmptyColumns.js.map +0 -1
  239. package/modules/xlsx/dropEmptyColumns.test.js.map +0 -1
  240. package/modules/xlsx/dropEmptyRows.js +0 -37
  241. package/modules/xlsx/dropEmptyRows.js.map +0 -1
  242. package/modules/xlsx/dropEmptyRows.test.js.map +0 -1
  243. package/modules/xlsx/parseCellValue.js +0 -180
  244. package/modules/xlsx/parseCellValue.js.map +0 -1
  245. package/modules/xlsx/parseNumber.js +0 -14
  246. package/modules/xlsx/parseNumber.js.map +0 -1
  247. package/modules/xlsx/parseSharedString.js +0 -55
  248. package/modules/xlsx/parseSharedString.js.map +0 -1
  249. package/modules/xlsx/parseSheetData.js +0 -55
  250. package/modules/xlsx/parseSheetData.js.map +0 -1
  251. package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js +0 -23
  252. package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +0 -1
  253. package/modules/xml/parseXmlStream.saxen.code.js +0 -947
  254. package/modules/xml/parseXmlStream.saxen.code.js.map +0 -1
  255. package/modules/xml/parseXmlStream.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"parseSheet.js","names":["_parseSheetData","_interopRequireWildcard","require","_parseCellAddress","_interopRequireDefault","_reconstructSheetDimensionsFromSheetCells","_convertCellsToData2dArray","obj","__esModule","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","o","minLen","_arrayLikeToArray","n","toString","slice","constructor","name","Array","from","test","len","length","arr2","r","l","t","Symbol","iterator","e","u","a","f","next","done","push","value","isArray","parseSheet","content","parseXmlStream","_ref","sharedStrings","styles","epoch1904","options","getSheetData","state","cells","parseSheetData","sheetData","dimensions","dimension","parseSheetDimensionRef","reconstructSheetDimensionsFromSheetCells","convertSheetToData2dArray","createInitialState","createInitialStateInSheet","onOpenTag","onOpenTagInSheet","onCloseTag","onCloseTagInSheet","onText","onTextInSheet","then","undefined","tagName","attributes","ref","createInitialStateInSheetData","onOpenTagInSheetData","onCloseTagInSheetData","text","onTextInSheetData","split","map","parseCellAddress","_ref2","_ref3","row","column"],"sources":["../../source/xlsx/parseSheet.js"],"sourcesContent":["import parseSheetData, {\r\n createInitialStateInSheetData,\r\n onOpenTagInSheetData,\r\n onCloseTagInSheetData,\r\n onTextInSheetData\r\n} from './parseSheetData.js'\r\n\r\nimport parseCellAddress from './parseCellAddress.js'\r\n\r\nimport reconstructSheetDimensionsFromSheetCells from './reconstructSheetDimensionsFromSheetCells.js'\r\nimport convertSheetToData2dArray from './convertCellsToData2dArray.js'\r\n\r\n/**\r\n * Parses a `sheet.xml` file.\r\n * @param {string} content\r\n * @param {function} parseXmlStream — SAX XML parser.\r\n * @param {object} options\r\n * @returns {Promise<SheetData>}\r\n */\r\nexport default function parseSheet(content, parseXmlStream, { sharedStrings, styles, epoch1904, options }) {\r\n // When XML parser is finished, it returns a `state`\r\n // where it has accumulated the cells it encountered during parsing.\r\n // `getSheetData()` function reads the parser `state` and transforms it to `SheetData`.\r\n const getSheetData = (state) => {\r\n const cells = parseSheetData(state.sheetData, sharedStrings, styles, epoch1904, options)\r\n const dimensions = state.dimension\r\n ? parseSheetDimensionRef(state.dimension)\r\n : reconstructSheetDimensionsFromSheetCells(cells)\r\n return convertSheetToData2dArray(cells, dimensions)\r\n }\r\n\r\n return parseXmlStream(content, {\r\n createInitialState: createInitialStateInSheet,\r\n onOpenTag: onOpenTagInSheet,\r\n onCloseTag: onCloseTagInSheet,\r\n onText: onTextInSheet\r\n }).then((state) => {\r\n return getSheetData(state)\r\n })\r\n}\r\n\r\nfunction createInitialStateInSheet() {\r\n return {\r\n dimension: undefined,\r\n sheetData: undefined\r\n }\r\n}\r\n\r\nfunction onOpenTagInSheet(tagName, attributes, state) {\r\n if (tagName === 'dimension') {\r\n state.dimension = attributes.ref\r\n } else if (tagName === 'sheetData') {\r\n state.sheetData = createInitialStateInSheetData()\r\n } else if (state.sheetData) {\r\n onOpenTagInSheetData(tagName, attributes, state.sheetData)\r\n }\r\n}\r\n\r\nfunction onCloseTagInSheet(tagName, state) {\r\n if (state.sheetData) {\r\n onCloseTagInSheetData(tagName, state.sheetData)\r\n }\r\n}\r\n\r\nfunction onTextInSheet(text, state) {\r\n if (state.sheetData) {\r\n onTextInSheetData(text, state.sheetData)\r\n }\r\n}\r\n\r\n/**\r\n * Sheet \"dimension\" defines the spreadsheet area containing all non-empty cells.\r\n * Any cells outside the \"dimension\" are considered empty and should be ignored.\r\n * https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1\r\n * @param {string} `ref` — The value of `<dimension ref/>` attribute.\r\n * @returns {object[]} `undefined` or `[{ row, column }, { row, column }]` — \"From row number and column number to row number and column number\".\r\n */\r\nfunction parseSheetDimensionRef(ref) {\r\n let dimensions = ref.split(':').map(parseCellAddress).map(\r\n ([row, column]) => ({ row, column })\r\n )\r\n // Sometimes there can be just a single cell as a spreadsheet's \"dimensions\".\r\n // For example, the default \"dimensions\" in Apache POI library is \"A1\",\r\n // meaning that only the first cell in the spreadsheet is used.\r\n //\r\n // A quote from Apache POI library:\r\n // \"Single cell ranges are formatted like single cell references (e.g. 'A1' instead of 'A1:A1').\"\r\n //\r\n if (dimensions.length === 1) {\r\n dimensions = [dimensions[0], dimensions[0]]\r\n }\r\n return dimensions\r\n}"],"mappings":"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"}
1
+ {"version":3,"file":"parseSheet.js","names":["_parseCell","_interopRequireWildcard","require","_parseCellAddress3","_interopRequireDefault","_InvalidSpreadsheetError","obj","__esModule","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","r","l","t","Symbol","iterator","e","n","u","a","f","o","next","done","push","value","length","Array","isArray","_createForOfIteratorHelperLoose","allowArrayLike","it","bind","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","len","arr2","EMPTY_CELL_VALUE","parseSheet","content","parseXml","_ref","sharedStrings","styles","epoch1904","options","parseCellParameters","dateFormat","smartDateParser","parseNumber","rows","errors","state","createInitialState","onOpenTag","onCloseTag","onText","onProgress","then","_state$sheetData","sheetData","rowCount","columnCount","dataRowCount","dataColumnCount","startedAt","Date","now","_iterator","_step","row","dimension","undefined","getRowsFromState","setRowsInState","rowIndexShift","getErrorsFromState","setErrorsInState","THROW_ON_FIRST_CELL_ERROR","throwInvalidCellError","_ref2","column","error","InvalidSpreadsheetError","concat","end","rowsRead","errorsEncountered","finalizedRows","tagName","attributes","parseSheetDimensionRef","ref","createInitialStateInSheetData","onOpenTagInSheetData","onCloseTagInSheetData","text","onTextInSheetData","dimensions","split","map","parseCellAddress","c","rowNumber","cursor","Number","createInitialStateInCell","onOpenTagInCell","previousRowNumber","cell","parseCellFromXmlData","onCloseTagInCell","onTextInCell","_ref3","inlineString","vText","_parseCellAddress","_parseCellAddress2","errorOrTypeAndValue","parseCellAndTrimValue","s","trim","parseCellValue","v","parameters","trimStrings","parseCellWithRepairAbility","EMPTY_CELL","parseCell","type","is","rPh","getSheetDimensions","cells","minRow","minCol","maxRow","maxCol","_iterator2","_step2"],"sources":["../../source/xlsx/parseSheet.js"],"sourcesContent":["import parseCell, { EMPTY_CELL } from './parseCell.js'\r\nimport parseCellAddress from './parseCellAddress.js'\r\nimport InvalidSpreadsheetError from './InvalidSpreadsheetError.js'\r\n\r\n// An empty cell has `null` value.\r\nconst EMPTY_CELL_VALUE = null\r\n\r\n/**\r\n * Parses a `sheet.xml` file.\r\n * @param {string} content\r\n * @param {function} parseXml — SAX XML parser.\r\n * @param {object} options\r\n * @returns {Promise<SheetData>}\r\n */\r\nexport default function parseSheet(content, parseXml, { sharedStrings, styles, epoch1904, options }) {\r\n const parseCellParameters = [\r\n sharedStrings,\r\n styles,\r\n epoch1904,\r\n options.dateFormat, // defaultDateFormat\r\n options.smartDateParser !== false, // dateTemplateParser\r\n options.parseNumber // parseNumberCustom\r\n ]\r\n\r\n let rows = []\r\n let errors = []\r\n\r\n const state = createInitialState()\r\n\r\n return parseXml(\r\n content,\r\n state,\r\n onOpenTag,\r\n onCloseTag,\r\n onText,\r\n onProgress\r\n ).then(() => {\r\n const { rowCount, columnCount, dataRowCount, dataColumnCount } = state.sheetData\r\n // Drop (discard) empty rows at the bottom.\r\n if (dataRowCount < rowCount) {\r\n rows = rows.slice(0, dataRowCount)\r\n }\r\n // Drop (discard) empty columns at the right side.\r\n if (dataColumnCount < columnCount) {\r\n let i = 0\r\n while (i < rows.length) {\r\n if (rows[i].length > dataColumnCount) {\r\n rows[i] = rows[i].slice(0, dataColumnCount)\r\n }\r\n i++\r\n }\r\n }\r\n const startedAt = Date.now()\r\n // Add `null` values where there're \"gaps\" at the right side of rows.\r\n for (const row of rows) {\r\n while (row.length < dataColumnCount) {\r\n row.push(EMPTY_CELL_VALUE)\r\n }\r\n }\r\n return rows\r\n })\r\n\r\n function createInitialState() {\r\n return {\r\n dimension: undefined,\r\n sheetData: undefined\r\n }\r\n }\r\n\r\n function getRowsFromState(state) {\r\n return state.sheetData.rows\r\n }\r\n\r\n function setRowsInState(state, rows) {\r\n state.sheetData.rowIndexShift += state.sheetData.rows.length - rows.length\r\n state.sheetData.rows = rows\r\n }\r\n\r\n function getErrorsFromState(state) {\r\n return state.sheetData.errors\r\n }\r\n\r\n function setErrorsInState(state, errors) {\r\n state.sheetData.errors = errors\r\n }\r\n\r\n // Throw an error as soon as a non-recoverable error is encountered when parsing a cell.\r\n const THROW_ON_FIRST_CELL_ERROR = true\r\n\r\n function throwInvalidCellError({ row, column, error }) {\r\n // The sheet name or index is unknown, so it's not reported here.\r\n throw new InvalidSpreadsheetError(`<c/> at row ${row}, col ${column}: ${error}`)\r\n }\r\n\r\n function onProgress(end) {\r\n // Here, it could look at `state.dimension?` in order to avoid reading unused cells.\r\n // For example, there could be a sheet with a million rows and a million columns\r\n // but only the top-left cell in that sheet would be not an empty cell.\r\n // The rest of the cells could be empty, but it would be valid for such sheet to exist.\r\n // So there would be empty `<row/>` or `<c/>` elements all around, and those could be skipped\r\n // if `<dimension/>` element is present in the `sheet.xml` file.\r\n // The `<dimension/>` element tells which area of the sheet really contains non-empty data.\r\n // But it's an optional element, and also there's an additional question of:\r\n // \"What should happen if an .xlsx writer sets it erroneously? Should it auto-repair such sheet?\".\r\n // I imagine, such situations aren't really possible in real life but still mathematically it's possible,\r\n // because the `<dimension/>` element is more of a \"supplementary\" or \"advisory\" one\r\n // and it's not supposed to \"break\" anything in case its value is incorrect.\r\n // So that's why `read-excel-file` just simply ignores the `<dimension/>` element\r\n // even though it can read and \"understand\" it.\r\n // console.log(state.dimension)\r\n const rowsRead = getRowsFromState(state)\r\n const errorsEncountered = getErrorsFromState(state)\r\n if (end) {\r\n rows = rows.concat(rowsRead)\r\n errors = errors.concat(errorsEncountered)\r\n if (errors.length > 0) {\r\n throwInvalidCellError(errors[0])\r\n }\r\n } else {\r\n if (rowsRead.length > 1) {\r\n // The rows except for the last one have already been \"finalized\",\r\n // i.e. it can be said that those rows don't have any more cells yet to be parsed.\r\n // The last row is still being read so it's not \"finalized\" yet,\r\n // i.e. it's unknown at this point whether there will be more cells of it.\r\n const finalizedRows = rowsRead.slice(0, -1)\r\n // Move the finalized rows from the \"in-progress\" rows to the \"result\" rows.\r\n rows = rows.concat(finalizedRows)\r\n // Add any errors that have been encountered while parsing this chunk of rows.\r\n errors = errors.concat(errorsEncountered)\r\n // Proceeed with just the last row and the next chunk.\r\n setRowsInState(state, rowsRead.slice(-1))\r\n // Proceeed with clean errors list.\r\n setErrorsInState(state, [])\r\n }\r\n }\r\n }\r\n\r\n function onOpenTag(tagName, attributes, state) {\r\n if (tagName === 'dimension') {\r\n state.dimension = parseSheetDimensionRef(attributes.ref)\r\n } else if (tagName === 'sheetData') {\r\n state.sheetData = createInitialStateInSheetData()\r\n } else if (state.sheetData) {\r\n onOpenTagInSheetData(tagName, attributes, state.sheetData)\r\n }\r\n }\r\n\r\n function onCloseTag(tagName, state) {\r\n if (state.sheetData) {\r\n onCloseTagInSheetData(tagName, state.sheetData)\r\n }\r\n }\r\n\r\n function onText(text, state) {\r\n if (state.sheetData) {\r\n onTextInSheetData(text, state.sheetData)\r\n }\r\n }\r\n\r\n /**\r\n * Sheet \"dimension\" defines the spreadsheet area containing all non-empty cells.\r\n * Any cells outside the \"dimension\" are considered empty and should be ignored.\r\n * https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sheetdimension?view=openxml-2.8.1\r\n * @param {string} `ref` — The value of `<dimension ref/>` attribute.\r\n * @returns {[[number,number],[number,number]]} `undefined` or `[{ row, column }, { row, column }]` — \"From row number and column number to row number and column number\".\r\n */\r\n function parseSheetDimensionRef(ref) {\r\n let dimensions = ref.split(':').map(parseCellAddress)\r\n // Sometimes there can be just a single cell as a spreadsheet's \"dimensions\".\r\n // For example, the default \"dimensions\" in Apache POI library is \"A1\",\r\n // meaning that only the first cell in the spreadsheet is used.\r\n //\r\n // A quote from Apache POI library:\r\n // \"Single cell ranges are formatted like single cell references (e.g. 'A1' instead of 'A1:A1').\"\r\n //\r\n if (dimensions.length === 1) {\r\n dimensions = [dimensions[0], dimensions[0]]\r\n }\r\n return dimensions\r\n }\r\n\r\n // Sheet Data\r\n\r\n function createInitialStateInSheetData() {\r\n return {\r\n c: undefined,\r\n rows: [],\r\n row: undefined,\r\n rowNumber: undefined,\r\n // How many rows have been removed from the start of `state.rows`\r\n // as part of `onProgress()` handler calls.\r\n rowIndexShift: 0,\r\n // Current position in the sheet.\r\n cursor: [0, 0],\r\n // Total row count.\r\n rowCount: 0,\r\n // Total column count.\r\n columnCount: 0,\r\n // Non-empty row count.\r\n dataRowCount: 0,\r\n // Non-empty column count.\r\n dataColumnCount: 0,\r\n // Cell with errors.\r\n errors: []\r\n }\r\n }\r\n\r\n function onOpenTagInSheetData(tagName, attributes, state) {\r\n if (tagName === 'row') {\r\n // Read an optional `r` attribute, which represents a 1-based row number.\r\n // If the `r` attribute is not present on a `<row>` then the row number is either defined by\r\n // `<c>` elements in it, or just assumed to be \"previous row number + 1\".\r\n if (attributes.r) {\r\n state.rowNumber = Number(attributes.r)\r\n }\r\n state.row = []\r\n } else if (tagName === 'c') {\r\n state.c = createInitialStateInCell()\r\n state.c.attributes = attributes\r\n } else if (state.c) {\r\n onOpenTagInCell(tagName, attributes, state.c)\r\n }\r\n }\r\n\r\n function onCloseTagInSheetData(tagName, state) {\r\n if (tagName === 'row') {\r\n // If the row number is known, check for any inter-row gaps that it might introduce.\r\n if (state.rowNumber) {\r\n // Google AI says that `<row>` elements must be ordered by row number ascending,\r\n // so the code assumes that there can't be an out-of-order `<row>`.\r\n const previousRowNumber = state.rowIndexShift + state.rows.length\r\n if (state.rowNumber <= previousRowNumber) {\r\n throw new InvalidSpreadsheetError(`Out-of-place <row/> number ${state.rowNumber} follows <row/> number ${previousRowNumber}`)\r\n }\r\n // Insert empty rows where there're gaps between the rows.\r\n while (state.rowNumber > state.rowIndexShift + state.rows.length + 1) {\r\n state.rows.push([])\r\n }\r\n }\r\n // Add the parsed row to the list of rows.\r\n state.rows.push(state.row)\r\n // Update the total non-empty row count.\r\n if (state.row.length > 0) {\r\n state.dataRowCount = state.rowNumber\r\n }\r\n // Update the total row count.\r\n if (state.rowNumber > state.rowCount) {\r\n state.rowCount = state.rowNumber\r\n }\r\n // Reset state.\r\n state.row = undefined\r\n state.rowNumber = undefined\r\n } else if (tagName === 'c') {\r\n const cell = parseCellFromXmlData(state.c)\r\n // Google AI says that the Open XML specification (ISO/IEC 29500) strictly dictates\r\n // that `<c>` elements within `sheet.xml` (or specifically `<sheetData>`)\r\n // must be written in ascending order of their `r` attributes (e.g., \"A1\", \"B1\", \"C1\").\r\n if (cell.row < state.cursor[0] || (cell.row === state.cursor[0] && cell.column <= state.cursor[1])) {\r\n throw new InvalidSpreadsheetError(`Out-of-place <c/> at row ${cell.row} col ${cell.column} follows <c/> at row ${state.cursor[0]} col ${state.cursor[1]}`)\r\n }\r\n // Update the cursor.\r\n state.cursor[0] = cell.row\r\n state.cursor[1] = cell.column\r\n // If the `r` attribute is not present on a `<row>` then the row number is either defined by\r\n // `<c>` elements in it, or just assumed to be \"previous row number + 1\".\r\n if (!state.rowNumber) {\r\n state.rowNumber = cell.row\r\n }\r\n // If the cell has an error.\r\n if (cell.error) {\r\n if (THROW_ON_FIRST_CELL_ERROR) {\r\n throwInvalidCellError(cell)\r\n }\r\n state.errors.push(cell)\r\n }\r\n // If the cell is not empty.\r\n else if (cell.value !== EMPTY_CELL_VALUE) {\r\n // Insert empty cells where there're gaps between the columns.\r\n while (cell.column > state.row.length + 1) {\r\n state.row.push(EMPTY_CELL_VALUE)\r\n }\r\n // Add the parsed cell value to the list of cell values in the current row.\r\n state.row.push(cell.value)\r\n // Update the total non-empty column count.\r\n if (cell.column > state.dataColumnCount) {\r\n state.dataColumnCount = cell.column\r\n }\r\n }\r\n // Update the total column count.\r\n if (cell.column > state.columnCount) {\r\n state.columnCount = cell.column\r\n }\r\n // Reset state.\r\n state.c = undefined\r\n } else if (state.c) {\r\n onCloseTagInCell(tagName, state.c)\r\n }\r\n }\r\n\r\n function onTextInSheetData(text, state) {\r\n if (state.c) {\r\n onTextInCell(text, state.c)\r\n }\r\n }\r\n\r\n /**\r\n * Parses the XML values of a `<c/>` element into an object representing a cell value.\r\n * @param {object} — `{ attributes: Record<string,string>, inlineString?: string, vText?: string }`. If `<v/>` element is present but is empty, `vText` will be an empty string. If `<v/>` element is absent, `vText` will be `undefined`.\r\n * @returns {object} Either `{ row: number, column: number, error: string }` or `{ row: number, column: number, value: string|number|boolean|null }`\r\n */\r\n function parseCellFromXmlData({\r\n attributes,\r\n inlineString,\r\n vText\r\n }) {\r\n const [row, column] = parseCellAddress(attributes.r)\r\n const errorOrTypeAndValue = parseCellAndTrimValue(\r\n attributes.t,\r\n attributes.s,\r\n vText,\r\n inlineString,\r\n parseCellParameters,\r\n options.trim !== false\r\n )\r\n if (typeof errorOrTypeAndValue === 'string') {\r\n return {\r\n row,\r\n column,\r\n error: errorOrTypeAndValue\r\n // // Report the \"raw\" unparsed value of the cell for potential debugging.\r\n // // Also report the cell type and the format in case of a numeric value.\r\n // //\r\n // // For \"inline string\" cells, the value should actually be the `inlineString` argument\r\n // // rather than `vText` argument, but the only case when it could throw an error\r\n // // when parsing an \"inline string\" cell is `VALUE_MISSING` which means that\r\n // // `inlineString` argument is `undefined`, same as `vText` argument in this case,\r\n // // so the resulting `value` property is correct anyway.\r\n // //\r\n // value: vText,\r\n // type: attributes.t,\r\n // formatId: attributes.s\r\n }\r\n }\r\n return {\r\n row,\r\n column,\r\n value: parseCellValue(errorOrTypeAndValue[1], errorOrTypeAndValue[0])\r\n }\r\n }\r\n\r\n // Here, it could also parse \"merged cells\" and then return them in some special way.\r\n // But then it's not clear what should be the way to return such merged cells.\r\n // I.e. should it just return it as a duplicate value in each one of the merged cells?\r\n // Or should it keep the current behavior of only returning the value of the top-most left-most cell\r\n // and then just return `null` for the rest of the cells in a \"merged cells\" group?\r\n // Perhaps the latter (current) approach is the most sensible one, so there's no need\r\n // to change anything.\r\n //\r\n // const mergedCells = getMergedCellCoordinates(sheetDocument)\r\n // for (const mergedCell of mergedCells) {\r\n // const [from, to] = mergedCell.split(':').map(parseCellAddress)\r\n // console.log('Merged Cell.', 'From:', from, 'To:', to)\r\n // }\r\n\r\n // Cell\r\n\r\n/**\r\n * Parses a cell from the info extracted from the cell XML.\r\n * If the cell is of type string, it trims the value (by default).\r\n *\r\n * Receives same arguments as `parseCell()` function, with an additional argument\r\n * `trimStrings: boolean` which tells if it should trim any string values.\r\n *\r\n * Produces same result as `parseCell()` function, except for cells of type \"e\".\r\n */\r\n function parseCellAndTrimValue(\r\n t,\r\n s,\r\n v,\r\n inlineString,\r\n parameters,\r\n trimStrings\r\n ) {\r\n // Parse cell value from cell XML.\r\n const errorOrTypeAndValue = parseCellWithRepairAbility(\r\n t,\r\n s,\r\n v,\r\n inlineString,\r\n parameters\r\n )\r\n // Trim any text cell values (by default)\r\n if (Array.isArray(errorOrTypeAndValue) && errorOrTypeAndValue[0] === 's') {\r\n // A developer could optionally disable the automatic trimming of all strings.\r\n // For example, leading spaces might express a tree-like hierarchy, in which case they should be preserved.\r\n // https://github.com/catamphetamine/read-excel-file/pull/106#issuecomment-1136062917\r\n if (trimStrings) {\r\n errorOrTypeAndValue[1] = errorOrTypeAndValue[1].trim()\r\n }\r\n // Convert empty strings to `null`\r\n if (errorOrTypeAndValue[1] === '') {\r\n return EMPTY_CELL\r\n }\r\n }\r\n // Return the cell's type and value.\r\n return errorOrTypeAndValue\r\n }\r\n\r\n /**\r\n * Parses cell value and optionally repairs any repairable errors.\r\n * Receives same arguments as `parseCell()` function.\r\n * Produces same result as `parseCell()` function, except for cells of type \"e\".\r\n */\r\n function parseCellWithRepairAbility(t, s, v, inlineString, parameters) {\r\n // Parse cell value from cell XML.\r\n const errorOrTypeAndValue = parseCell(\r\n t,\r\n s,\r\n v,\r\n inlineString,\r\n parameters\r\n )\r\n // If the cell value was expected but is missing,\r\n // it is considered a repairable situation.\r\n if (errorOrTypeAndValue === 'VALUE_MISSING') {\r\n // The default cell type is \"n\" (numeric), according to XLSX specification.\r\n switch (t || 'n') {\r\n // * If the cell is defined by a formula.\r\n // * Or contains an inline string.\r\n // * Or contains a shared string.\r\n // * Or contains a boolean value.\r\n case 'str':\r\n case 'inlineStr':\r\n case 's':\r\n case 'b':\r\n // * If the formula result is not pre-computed (which is allowed by the spec)\r\n // then just ignore this cell.\r\n // * If the inline string value is not specified then just ignore this cell.\r\n // * If the shared string index is not specified then just ignore this cell.\r\n // * If the boolean value is not specified then just ignore this cell.\r\n return EMPTY_CELL\r\n }\r\n }\r\n // If the cell contains a formula that couldn't be calculated due to an error,\r\n // simply ignore such cell and assume it to be empty.\r\n if (t === 'e') {\r\n return EMPTY_CELL\r\n }\r\n // Return either the error code or the cell's type and value.\r\n return errorOrTypeAndValue\r\n }\r\n\r\n /**\r\n * For certain types of cell, it transforms the value.\r\n * Specifically, for cells of type \"n\" or \"d\", it transforms the value to `Number` or `Date` respectively.\r\n *\r\n * The reason it is done separately is because before this function is called,\r\n * the cells are easily \"serializable\". And after this function is called,\r\n * some of the cells' `value` properties become instances of `Date` class or any other class,\r\n * such as `BigInt`, serializing which would require additional manual steps to be performed.\r\n * Serializing cells could be utilized in case of \"transferring\" data between workers\r\n * with a `transferList`, argument which could hypothetically result in better performance\r\n * and less time being blocked by the \"synchronous\" JSON serialization.\r\n *\r\n * @param {string|number|boolean|null} value\r\n * @param {string} type — One of: \"s\", \"n\", \"d\", \"b\", \"-\"\r\n * @return {string|ParsedNumber|Date|boolean|null}\r\n */\r\n function parseCellValue(value, type) {\r\n if (type === 'n') {\r\n // Parse number from string.\r\n // Supports custom parsing function to work around the javascript number precision limitation.\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/85\r\n if (options.parseNumber) {\r\n return options.parseNumber(value)\r\n }\r\n return value\r\n } else if (type === 'd') {\r\n return new Date(value)\r\n } else {\r\n return value\r\n }\r\n }\r\n\r\n function createInitialStateInCell() {\r\n return {\r\n v: false,\r\n is: false,\r\n t: false,\r\n r: false,\r\n rPh: false,\r\n vText: undefined,\r\n inlineString: undefined,\r\n attributes: undefined\r\n }\r\n }\r\n\r\n function onOpenTagInCell(tagName, attributes, state) {\r\n if (tagName === 'v') {\r\n state.v = true\r\n } else if (tagName === 'is') {\r\n // The possible children of <is> are:\r\n // * <t> (Text): The standard child to hold plain, simple text.\r\n // * <r> (Rich Text Run): Used for applying different formatting styles (like bold or italic) to specific segments of text within a single cell.\r\n // * <rPh> (Phonetic Run): Used primarily for East Asian languages to provide phonetic reading/pronunciation data (e.g., furigana in Japanese). It associates a phonetic pronunciation run right alongside the base string text tag <t>.\r\n // * <phoneticPr> (Phonetic Properties): Defines formatting and settings for the phonetic text.\r\n state.is = true\r\n state.inlineString = ''\r\n } else if (tagName === 't') {\r\n state.t = true\r\n } else if (tagName === 'r') {\r\n // The possible children of <r/> are:\r\n // * <rPr> (Run Properties): The formatting properties for the text (font, size, color, bold, italic, etc.).\r\n // * <t> (Text): The actual text payload.\r\n // * <rPh> (Phonetic Run): Phonetic pronunciation guidance (used for East Asian languages like Japanese). It associates a phonetic pronunciation run right alongside the base string text tag <t>.\r\n state.r = true\r\n } else if (tagName === 'rPh') {\r\n // The possible children of <rPh/> are:\r\n // * <t> (Text): Contains the actual phonetic text or reading (usually in Katakana for Japanese) that corresponds to the associated character string.\r\n state.rPh = true\r\n }\r\n }\r\n\r\n function onCloseTagInCell(tagName, state) {\r\n if (tagName === 'v') {\r\n state.v = false\r\n // If the `<v/>` element is present but is empty,\r\n // reassign `vText` property from `undefined` to an empty string `\"\"`.\r\n // This is to differentiate between two separate cases:\r\n // * When `<f/>` formula is present but its result is not pre-computed (`<v/>` is absent)\r\n // * When `<f/>` formula is present and its result is an empty string (`<v/>` is present but empty)\r\n state.vText ||= ''\r\n } else if (tagName === 'is') {\r\n state.is = false\r\n } else if (tagName === 't') {\r\n state.t = false\r\n } else if (tagName === 'r') {\r\n state.r = false\r\n } else if (tagName === 'rPh') {\r\n state.rPh = false\r\n }\r\n }\r\n\r\n function onTextInCell(text, state) {\r\n if (state.v) {\r\n state.vText = text\r\n } else if (state.is) {\r\n if (state.rPh) {\r\n // Ignore anything inside `<rPh/>` tags\r\n } else if (state.t) {\r\n if (state.r) {\r\n // An `<r/>` element could contain multiple `<t/>` elements,\r\n // the text content from all of which should be concatenated.\r\n state.inlineString += text\r\n } else {\r\n state.inlineString = text\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Dimensions\r\n\r\n function getSheetDimensions(cells) {\r\n // The left-top boundary is ignored and is always assumed to be `0, 0`.\r\n // It used to be not ignored in the past but that produced confusing behavior\r\n // when empty rows or columns at the start of a sheet were discarded,\r\n // and that was not something that users of this package expected.\r\n // https://github.com/catamphetamine/read-excel-file/issues/102#issuecomment-973238655\r\n let minRow = cells.length === 0 ? 0 : 1\r\n let minCol = cells.length === 0 ? 0 : 1\r\n\r\n let maxRow = 0\r\n let maxCol = 0\r\n\r\n for (const cell of cells) {\r\n if (maxRow < cell.row) {\r\n maxRow = cell.row\r\n }\r\n if (maxCol < cell.column) {\r\n maxCol = cell.column\r\n }\r\n }\r\n\r\n return [\r\n [minRow, minCol],\r\n [maxRow, maxCol]\r\n ]\r\n }\r\n}\r\n"],"mappings":"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"}
@@ -9,35 +9,89 @@ var _parseFilePaths = _interopRequireDefault(require("./parseFilePaths.js"));
9
9
  var _parseStyles = _interopRequireDefault(require("./parseStyles.js"));
10
10
  var _parseSharedStrings = _interopRequireDefault(require("./parseSharedStrings.js"));
11
11
  var _parseSheet = _interopRequireDefault(require("./parseSheet.js"));
12
- var _parseNumber = _interopRequireDefault(require("./parseNumber.js"));
13
- var _checkpoint = _interopRequireWildcard(require("../utility/checkpoint.js"));
12
+ var _convertValuesFromUint8ArraysToStrings = _interopRequireDefault(require("../utility/convertValuesFromUint8ArraysToStrings.js"));
13
+ var _checkpoint = _interopRequireDefault(require("../utility/checkpoint.js"));
14
14
  var _isPromise = _interopRequireDefault(require("../utility/isPromise.js"));
15
- var _excluded = ["parseNumber"];
16
- 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); }
17
- 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; }
15
+ var _InvalidSpreadsheetError = _interopRequireDefault(require("./InvalidSpreadsheetError.js"));
16
+ var _SheetNotFoundError = _interopRequireDefault(require("./SheetNotFoundError.js"));
18
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
19
18
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
20
19
  function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
21
20
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
22
21
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
23
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
24
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
25
22
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
26
23
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27
24
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
28
25
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
29
26
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
30
- // For an introduction in reading `.xlsx` files see "The minimum viable XLSX reader":
31
- // https://www.brendanlong.com/the-minimum-viable-xlsx-reader.html
27
+ // These exports are only used in `worker-f` dependencies:
28
+ // import parseXmlStream '../xml/parseXmlStream.js'
29
+ // import { decodeUtf8String, strFromU8 } from '../utility/convertValuesFromUint8ArraysToStrings.js'
30
+ // import parseExcelDate from './parseExcelDate.js'
31
+ // import parseExcelTimestamp from './parseExcelTimestamp.js'
32
+ // import isDateFormat, { DATE_FORMAT_SPECIFIC_LOCALE_PREFIX, DATE_FORMAT_ALLOW_ANY_OTHER_TEXT_SUFFIX, IS_DATE_FORMAT_CACHE, DATE_TEMPLATE_TOKENS } from './isDateFormat.js'
33
+ // import isDateFormatStyle, { BUILT_IN_DATE_FORMAT_IDS } from './isDateFormatStyle.js'
34
+ // import parseCell, { EMPTY_CELL } from './parseCell.js'
35
+ // import parseCellAddress, { LETTERS } from './parseCellAddress.js'
36
+ // import convertArrayOfCellsTo2dArrayOfValues from './convertArrayOfCellsTo2dArrayOfValues.js'
37
+ // import dropEmptyTrailingRows from './dropEmptyTrailingRows.js'
38
+ // import dropEmptyTrailingColumns from './dropEmptyTrailingColumns.js'
39
+ // import { latestCheckpointTimestamp } from '../utility/checkpoint.js'
40
+
41
+ // `worker-f` is not used because passing cells data from the worker thread
42
+ // to the main thread was a lengthy-enough operation. For example, when running
43
+ // the benchmark, the output latency was: `10` ms on "1mb.xlsx", `70` ms on "10mb.xlsx"
44
+ // and `500` ms on "50mb.xlsx", meaning that it would still have issues with
45
+ // blocking the main thread when passing the result back to it from the worker thread,
46
+ // negating the effect of using `worker-f` in the first place.
47
+ //
48
+ // As a way to work around the slow "structured clone" algorithm for input/output data,
49
+ // I played around with implementing a `serializeCells()` function that would serialize
50
+ // sheet data into an `ArrayBuffer` in order for it to be "transferred" instantly
51
+ // to the main thread, but this serialization itself was even slower, meaning that it would
52
+ // still block the main thread when deserializing that `ArrayBuffer` back to sheet data,
53
+ // so the entire idea of using `worker-f` was eventually dismissed.
54
+ //
55
+ // Instead of that, I submitted a PR in `saxen` repo that added "streaming mode" to the XML parser.
56
+ // https://github.com/nikku/saxen/pull/27
57
+ // That PR got merged, so a simple alternative now is to parse sheet data chunk-by-chunk,
58
+ // spacing it out with `setTimeout(0)` interrupts.
59
+ //
60
+ // In case of re-enabling `worker-f`, uncomment the relevant code above and below,
61
+ // and also replace `import { Parser } from 'saxen'` with an copy-paste of `saxen`'s code
62
+ // in `parseXmlStream.saxen.js`, otherwise it'll throw: "Parser is not defined".
63
+ // Also, in `convertValuesFromUint8ArraysToStrings.js`, replace `import { strFromU8 } from 'fflate'`
64
+ // with a copy-paste of the `strFromU8()` function code from `fflate`'s repo,
65
+ // because otherwise it'd throw: "td is not defined".
66
+ //
67
+ var CAN_USE_WORKER = false;
68
+
32
69
  /**
33
70
  * Reads data from an `.xlsx` file.
34
- * @param {function} parseXmlStream — SAX XML parser.
35
- * @param {Record<string,string>} contents - A map of `.xml` files inside the `.xlsx` file (which itself is just a zipped directory).
71
+ * @param {function} parseXml — SAX XML parser.
72
+ * @param {Record<string,Uint8Array>} contents - A map of `.xml` files inside the `.xlsx` file (which itself is just a zipped directory).
36
73
  * @param {object} [options]
37
74
  * @return {Promise<Sheet[]>}
38
75
  */
39
- function parseSpreadsheetContents(parseXmlStream, contents) {
76
+ function parseSpreadsheetContents(parseXml, contents_) {
40
77
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
78
+ // For an introduction in reading `.xlsx` files see "The minimum viable XLSX reader":
79
+ // https://www.brendanlong.com/the-minimum-viable-xlsx-reader.html
80
+
81
+ // Convert the values in `contents_` from `Uint8Array`s to `string`s.
82
+ //
83
+ // This function is a bit of a bottleneck on large `.xlsx` files.
84
+ // For example, when running the benchmark, the time of calling this function is:
85
+ //
86
+ // * "1mb.xlsx" — 2
87
+ // * "10mb.xlsx" — 7
88
+ // * "50mb.xlsx" — 35
89
+ //
90
+ // When running this code in a worker, it's no longer a "bottleneck"
91
+ // because in that case it doesn't block the main thread.
92
+ //
93
+ var contents = (0, _convertValuesFromUint8ArraysToStrings["default"])(contents_);
94
+
41
95
  // Because of how `.xlsx` file contents are defined in the specification,
42
96
  // it will have to be read in 3 passes:
43
97
  // * First pass — read the actual file paths
@@ -47,13 +101,13 @@ function parseSpreadsheetContents(parseXmlStream, contents) {
47
101
  (0, _checkpoint["default"])('parse spreadsheet info and file paths');
48
102
 
49
103
  // Get spreadsheet info and the paths to files.
50
- return readFiles(getXmlFilesAtFixedPaths(), contents, parseXmlStream).then(function (_ref) {
104
+ return readFiles(getXmlFilesAtFixedPaths(), contents, parseXml).then(function (_ref) {
51
105
  var spreadsheetInfo = _ref.spreadsheetInfo,
52
106
  filePaths = _ref.filePaths;
53
107
  (0, _checkpoint["default"])('parse "shared strings" and "styles"');
54
108
 
55
109
  // Parse "shared strings" and "styles".
56
- return readFiles(getXmlFilesAtNonFixedPaths(filePaths), contents, parseXmlStream).then(function (_ref2) {
110
+ return readFiles(getXmlFilesAtNonFixedPaths(filePaths), contents, parseXml).then(function (_ref2) {
57
111
  var sharedStrings = _ref2.sharedStrings,
58
112
  styles = _ref2.styles;
59
113
  var sheetRelationIdsToRead = options.sheets ? options.sheets.map(function (sheet) {
@@ -69,7 +123,7 @@ function parseSpreadsheetContents(parseXmlStream, contents) {
69
123
  styles: styles,
70
124
  epoch1904: spreadsheetInfo.epoch1904,
71
125
  options: options
72
- }), contents, parseXmlStream).then(function (sheetsData) {
126
+ }), contents, parseXml).then(function (sheetsData) {
73
127
  (0, _checkpoint["default"])('end');
74
128
  // Return sheets data.
75
129
  return sheetRelationIdsToRead.map(function (sheetRelationId) {
@@ -86,81 +140,94 @@ function parseSpreadsheetContents(parseXmlStream, contents) {
86
140
  /**
87
141
  * Reads data from an `.xlsx` file in a worker.
88
142
  * @param {function} [createWorkerFunction] — Creates a worker function.
89
- * @param {function} parseXmlStream — SAX XML parser.
90
- * @param {Record<string,string>} contents - A map of `.xml` files inside the `.xlsx` file (which itself is just a zipped directory).
143
+ * @param {function} parseXml — SAX XML parser.
144
+ * @param {Record<string,Uint8Array>} contents - A map of `.xml` files inside the `.xlsx` file (which itself is just a zipped directory).
91
145
  * @param {object} [options]
92
146
  * @return {Promise<Sheet[]>}
93
147
  */
94
- function parseSpreadsheetContentsInWorker(createWorkerFunction, parseXmlStream, contents, options) {
95
- // Assign the default `parseNumber()` function in the `options`.
148
+ function parseSpreadsheetContentsInWorker(createWorkerFunction, parseXml, contents, options) {
149
+ // Assign a default value of `null` to `parseNumber()` function in the `options`.
96
150
  // The reason is that the worker code requires it to be non-`undefined`.
97
151
  // Otherwise, it would throw "parseNumber is not defined".
98
152
  if (!(options && options.parseNumber)) {
99
153
  options = _objectSpread(_objectSpread({}, options), {}, {
100
- parseNumber: _parseNumber["default"]
154
+ parseNumber: null
101
155
  });
102
156
  }
103
157
 
104
- // Using a worker requires specifying all the top-level variables or functions that it uses.
105
- // Currently, that list looks a little bit too long so for now workers aren't used for parsing sheet data.
106
- // See the comment in `createWorkerFunction()` call for more details.
107
- // createWorkerFunction = undefined
108
-
109
158
  // If the environment doesn't support "workers", parse spreadsheet contents "synchronously".
110
159
  // This will "block" the main thread while parsing.
111
- if (!createWorkerFunction) {
112
- return parseSpreadsheetContents(parseXmlStream, contents, options);
160
+ if (!createWorkerFunction || !CAN_USE_WORKER) {
161
+ return parseSpreadsheetContents(parseXml, contents, options);
113
162
  }
114
163
 
115
- // Any functions have to be removed from the `options` in order for them to be "serializable"
116
- // before sending them to the worker thread.
117
- var _options = options,
118
- parseNumber = _options.parseNumber,
119
- optionsJson = _objectWithoutProperties(_options, _excluded);
120
-
121
- // Create a worker.
122
- var workerFn = createWorkerFunction(function (data) {
123
- // Reconstruct the `options`.
124
- var options = _objectSpread(_objectSpread({}, data.optionsJson), {}, {
125
- parseNumber: parseNumber
126
- });
127
- // Parse sheet data from the `.xml` files.
128
- return parseSpreadsheetContents(parseXmlStream, data.contents, options);
129
- });
130
- workerFn.addDependencies(
131
- // Any "outside" dependencies that're referenced in the function (below).
132
- function () {
133
- return [parseXmlStream, parseNumber, parseSpreadsheetContents, getSheetRelationId, getSheetNameByRelationId, getXmlFilesAtFixedPaths, getXmlFilesAtNonFixedPaths, getSheetDataXmlFiles, readFiles, _checkpoint["default"], _checkpoint.latestCheckpointTimestamp, _isPromise["default"]
134
- // parseSheet,
135
- //
136
- // This is not the full list by any means. There's more. Quite a lot more of them.
137
- // It started looking a bit too much so I stopped adding the dependencies here.
138
- // Now I understand why `fflate`'s source code is all written in a single
139
- // multi-thousand-line `index.ts` file. The thing is, once one starts splitting
140
- // the code into modules, they'd have to manually export any top-level variables
141
- // or functions from those modules and import them here in order to specify them
142
- // in the list of dependencies. And even if doing so for every top-level variable
143
- // or function in every imported module doesn't seem like an impossible task,
144
- // imagine someone refactoring the code later and extracting new top-level
145
- // variables or functions. Without 100% code coverage requirement, it won't be caught
146
- // at build time and can only be caught in production, which isn't ideal to say the least.
147
- // So it seems like users of this package will have to just deal with the "blocking"
148
- // nature of the sheet data parser, because I won't follow into `fflate`'s steps
149
- // and rewrite this package as a single `index.js` file.
150
- // Users of this package will have to manually put their code in a worker
151
- // in case they'd prefer it to run in a separate thread to prevent "blocking"
152
- // the main thread when parsing sheet data.
153
- ];
154
- });
155
-
156
- // Post a message with some data to the worker
157
- // so that it starts processing the data
158
- // and later posts a message back to the main thread
159
- // with the result of the calculation.
160
- return workerFn.callOnce({
161
- optionsJson: optionsJson,
162
- contents: contents
163
- }); // (optional) add `transferList` argument.
164
+ // // Any functions have to be removed from the `options` in order for them to be "serializable"
165
+ // // before sending them to the worker thread.
166
+ // const { parseNumber: parseNumber_, ...optionsJson } = options
167
+ //
168
+ // // Create a worker from a function.
169
+ // const workerFn = createWorkerFunction(
170
+ // (data) => {
171
+ // // Reconstruct the `options`.
172
+ // const options = {
173
+ // ...data.optionsJson,
174
+ // parseNumber: parseNumber_
175
+ // }
176
+ // // Parse sheet data from the `.xml` files.
177
+ // return parseSpreadsheetContents(parseXml, data.contents, options)
178
+ // }
179
+ // )
180
+ //
181
+ // workerFn.addDependencies(
182
+ // // Any "outside" dependencies that're referenced from the function body.
183
+ // () => [
184
+ // parseXml,
185
+ // parseXmlStream,
186
+ // parseNumber,
187
+ // parseNumber_,
188
+ // parseExcelDate,
189
+ // parseExcelTimestamp,
190
+ // parseCell,
191
+ // EMPTY_CELL,
192
+ // parseCellAddress,
193
+ // LETTERS,
194
+ // convertArrayOfCellsTo2dArrayOfValues,
195
+ // convertValuesFromUint8ArraysToStrings,
196
+ // strFromU8,
197
+ // decodeUtf8String,
198
+ // dropEmptyTrailingRows,
199
+ // dropEmptyTrailingColumns,
200
+ // isDateFormat,
201
+ // DATE_FORMAT_SPECIFIC_LOCALE_PREFIX,
202
+ // DATE_FORMAT_ALLOW_ANY_OTHER_TEXT_SUFFIX,
203
+ // IS_DATE_FORMAT_CACHE, DATE_TEMPLATE_TOKENS,
204
+ // isDateFormatStyle,
205
+ // BUILT_IN_DATE_FORMAT_IDS,
206
+ // parseSpreadsheetContents,
207
+ // parseFilePaths,
208
+ // parseSpreadsheetInfo,
209
+ // parseSharedStrings,
210
+ // parseStyles,
211
+ // parseSheet,
212
+ // getSheetRelationId,
213
+ // getSheetNameByRelationId,
214
+ // getXmlFilesAtFixedPaths,
215
+ // getXmlFilesAtNonFixedPaths,
216
+ // getSheetDataXmlFiles,
217
+ // readFiles,
218
+ // checkpoint,
219
+ // latestCheckpointTimestamp,
220
+ // isPromise
221
+ // ]
222
+ // )
223
+ //
224
+ // workerFn.inputTransferList(({ optionsJson, contents }) => Object.keys(contents).map(key => contents[key].buffer))
225
+ //
226
+ // return workerFn.callOnce({ optionsJson, contents }).then((result) => {
227
+ // console.log('~ Input latency', workerFn.inputLatency)
228
+ // console.log('~ Output latency', workerFn.outputLatency)
229
+ // return result
230
+ // })
164
231
  }
165
232
 
166
233
  function getSheetRelationId(sheet, sheets) {
@@ -171,7 +238,7 @@ function getSheetRelationId(sheet, sheets) {
171
238
  return _sheet.relationId;
172
239
  }
173
240
  }
174
- throw new Error("Sheet \"".concat(sheet, "\" not found. Available sheets: ").concat(sheets.map(function (_ref3) {
241
+ throw new _SheetNotFoundError["default"]("Sheet \"".concat(sheet, "\" not found. Available sheets: ").concat(sheets.map(function (_ref3) {
175
242
  var name = _ref3.name;
176
243
  return "\"".concat(name, "\"");
177
244
  }).join(', ')));
@@ -179,7 +246,7 @@ function getSheetRelationId(sheet, sheets) {
179
246
  if (sheet <= sheets.length) {
180
247
  return sheets[sheet - 1].relationId;
181
248
  }
182
- throw new Error("Sheet number out of bounds: ".concat(sheet, ". Available sheets count: ").concat(sheets.length));
249
+ throw new _SheetNotFoundError["default"]("Sheet number out of bounds: ".concat(sheet, ". Available sheets count: ").concat(sheets.length));
183
250
  }
184
251
  }
185
252
  function getSheetNameByRelationId(sheetRelationId, sheets) {
@@ -189,6 +256,10 @@ function getSheetNameByRelationId(sheetRelationId, sheets) {
189
256
  return sheet.name;
190
257
  }
191
258
  }
259
+ // The only way of getting `sheetRelationId` here is from the `sheets`,
260
+ // so this error is not technically possible. And if it is thrown
261
+ // then it means that there's a bug in the code because it's not
262
+ // supposed to get `sheetRelationId` from anywhere other than the `sheets`.
192
263
  throw new Error("Sheet relation ID not found: ".concat(sheetRelationId));
193
264
  }
194
265
  function getXmlFilesAtFixedPaths() {
@@ -232,8 +303,8 @@ function getSheetDataXmlFiles(filePaths, sheetRelationIdsToRead, sheetDataParser
232
303
  return _objectSpread(_objectSpread({}, filesInfo), {}, _defineProperty({}, filePaths.sheets[sheetRelationId], {
233
304
  name: sheetRelationId,
234
305
  // `parseSheet()` returns a `Promise`.
235
- parse: function parse(content, parseXmlStream) {
236
- return (0, _parseSheet["default"])(content, parseXmlStream, sheetDataParserParameters);
306
+ parse: function parse(content, parseXml) {
307
+ return (0, _parseSheet["default"])(content, parseXml, sheetDataParserParameters);
237
308
  }
238
309
  }));
239
310
  }, {});
@@ -261,15 +332,15 @@ function getSheetDataXmlFiles(filePaths, sheetRelationIdsToRead, sheetDataParser
261
332
  // * If none of the `parse()` functions returned a `Promise`, it returns a map of files' contents.
262
333
  // * If any of the `parse()` functions returned a `Promise`, it returns a `Promise` that resolves to a map of files' contents.
263
334
  //
264
- function readFiles(filesInfo, contents, parseXmlStream) {
335
+ function readFiles(filesInfo, contents, parseXml) {
265
336
  // Get files' contents.
266
337
  var results = {};
267
338
  var _loop = function _loop() {
268
339
  var filePath = _Object$keys[_i];
269
340
  var fileInfo = filesInfo[filePath];
270
341
  results[fileInfo.name] = contents[filePath] === undefined ? fileInfo.fallback === undefined ? function () {
271
- throw new Error("\"".concat(filePath, "\" file not found inside the `.xlsx` file"));
272
- }() : fileInfo.fallback : fileInfo.parse(contents[filePath], parseXmlStream);
342
+ throw new _InvalidSpreadsheetError["default"]("\"".concat(filePath, "\" file not found inside the `.xlsx` file"));
343
+ }() : fileInfo.fallback : fileInfo.parse(contents[filePath], parseXml);
273
344
  };
274
345
  for (var _i = 0, _Object$keys = Object.keys(filesInfo); _i < _Object$keys.length; _i++) {
275
346
  _loop();