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.
- package/CHANGELOG.md +9 -0
- package/README.md +32 -2
- package/browser/index.cjs +3 -0
- package/browser/index.d.ts +16 -0
- package/browser/index.js +4 -1
- package/bundle/read-excel-file.min.js +1 -1
- package/bundle/read-excel-file.min.js.map +1 -1
- package/commonjs/export/convertInputToNodeStream.js +0 -12
- package/commonjs/export/convertInputToNodeStream.js.map +1 -1
- package/commonjs/export/parseSheet.js +14 -7
- package/commonjs/export/parseSheet.js.map +1 -1
- package/commonjs/export/readSheetBrowser.js +3 -6
- package/commonjs/export/readSheetBrowser.js.map +1 -1
- package/commonjs/export/readSheetNode.js +3 -6
- package/commonjs/export/readSheetNode.js.map +1 -1
- package/commonjs/export/readSheetUniversal.js +2 -2
- package/commonjs/export/readSheetUniversal.js.map +1 -1
- package/commonjs/export/readSheetWebWorker.js +5 -5
- package/commonjs/export/readSheetWebWorker.js.map +1 -1
- package/commonjs/export/readXlsxFileBrowser.js +3 -6
- package/commonjs/export/readXlsxFileBrowser.js.map +1 -1
- package/commonjs/export/readXlsxFileNode.js +3 -6
- package/commonjs/export/readXlsxFileNode.js.map +1 -1
- package/commonjs/export/readXlsxFileUniversal.js +2 -2
- package/commonjs/export/readXlsxFileUniversal.js.map +1 -1
- package/commonjs/export/readXlsxFileWebWorker.js +5 -5
- package/commonjs/export/readXlsxFileWebWorker.js.map +1 -1
- package/commonjs/export/unpackXlsxFileBrowser.js +15 -4
- package/commonjs/export/unpackXlsxFileBrowser.js.map +1 -1
- package/commonjs/export/unpackXlsxFileBrowser.test.js.map +1 -0
- package/commonjs/export/unpackXlsxFileNode.js +32 -5
- package/commonjs/export/unpackXlsxFileNode.js.map +1 -1
- package/commonjs/export/unpackXlsxFileNode.test.js.map +1 -0
- package/commonjs/export/unpackXlsxFileUniversal.js +14 -3
- package/commonjs/export/unpackXlsxFileUniversal.js.map +1 -1
- package/commonjs/export/unpackXlsxFileUniversal.test.js.map +1 -0
- package/commonjs/parseSheetData/parseSheetData.js +9 -6
- package/commonjs/parseSheetData/parseSheetData.js.map +1 -1
- package/commonjs/saxen/parser.js +1 -1
- package/commonjs/saxen/parser.js.map +1 -1
- package/commonjs/utility/convertValuesFromUint8ArraysToStrings.js +100 -0
- package/commonjs/utility/convertValuesFromUint8ArraysToStrings.js.map +1 -0
- package/commonjs/xlsx/InvalidSpreadsheetError.js +55 -0
- package/commonjs/xlsx/InvalidSpreadsheetError.js.map +1 -0
- package/commonjs/xlsx/SheetNotFoundError.js +55 -0
- package/commonjs/xlsx/SheetNotFoundError.js.map +1 -0
- package/commonjs/xlsx/file/InputValidationStream.js +101 -0
- package/commonjs/xlsx/file/InputValidationStream.js.map +1 -0
- package/commonjs/xlsx/file/InputValidationStream.test.js.map +1 -0
- package/commonjs/xlsx/file/InvalidInputError.js +105 -0
- package/commonjs/xlsx/file/InvalidInputError.js.map +1 -0
- package/commonjs/xlsx/file/createFileTypeDetector.js +70 -0
- package/commonjs/xlsx/file/createFileTypeDetector.js.map +1 -0
- package/commonjs/xlsx/file/createFileTypeDetector.test.js.map +1 -0
- package/commonjs/xlsx/file/validateLeadingBytes.js +47 -0
- package/commonjs/xlsx/file/validateLeadingBytes.js.map +1 -0
- package/commonjs/xlsx/file/validateLeadingBytes.test.js.map +1 -0
- package/commonjs/xlsx/isDateFormat.js +32 -27
- package/commonjs/xlsx/isDateFormat.js.map +1 -1
- package/commonjs/xlsx/isDateFormatStyle.js +19 -21
- package/commonjs/xlsx/isDateFormatStyle.js.map +1 -1
- package/commonjs/xlsx/parseCell.js +252 -115
- package/commonjs/xlsx/parseCell.js.map +1 -1
- package/commonjs/xlsx/parseCellAddress.js +22 -18
- package/commonjs/xlsx/parseCellAddress.js.map +1 -1
- package/commonjs/xlsx/parseExcelDate.js +4 -124
- package/commonjs/xlsx/parseExcelDate.js.map +1 -1
- package/commonjs/xlsx/parseExcelDate.test.js.map +1 -1
- package/commonjs/xlsx/parseExcelTimestamp.js +139 -0
- package/commonjs/xlsx/parseExcelTimestamp.js.map +1 -0
- package/commonjs/xlsx/parseFilePaths.js +48 -47
- package/commonjs/xlsx/parseFilePaths.js.map +1 -1
- package/commonjs/xlsx/parseSharedStrings.js +91 -36
- package/commonjs/xlsx/parseSharedStrings.js.map +1 -1
- package/commonjs/xlsx/parseSheet.js +527 -69
- package/commonjs/xlsx/parseSheet.js.map +1 -1
- package/commonjs/xlsx/parseSpreadsheetContents.js +154 -83
- package/commonjs/xlsx/parseSpreadsheetContents.js.map +1 -1
- package/commonjs/xlsx/parseSpreadsheetInfo.js +60 -59
- package/commonjs/xlsx/parseSpreadsheetInfo.js.map +1 -1
- package/commonjs/xlsx/parseStyles.js +75 -75
- package/commonjs/xlsx/parseStyles.js.map +1 -1
- package/commonjs/xml/parseXml.js +112 -0
- package/commonjs/xml/parseXml.js.map +1 -0
- package/commonjs/xml/parseXml.test.js.map +1 -0
- package/commonjs/xml/parseXmlStream.js.map +1 -1
- package/commonjs/xml/parseXmlStream.sax.js +69 -28
- package/commonjs/xml/parseXmlStream.sax.js.map +1 -1
- package/commonjs/xml/parseXmlStream.saxen.js +66 -40
- package/commonjs/xml/parseXmlStream.saxen.js.map +1 -1
- package/commonjs/zip/UnzipError.js +55 -0
- package/commonjs/zip/UnzipError.js.map +1 -0
- package/commonjs/zip/unzipFromArrayBuffer.js +21 -1
- package/commonjs/zip/unzipFromArrayBuffer.js.map +1 -1
- package/commonjs/zip/unzipFromArrayBuffer.test.js.map +1 -0
- package/commonjs/zip/unzipFromStream.fflate.js +43 -35
- package/commonjs/zip/unzipFromStream.fflate.js.map +1 -1
- package/commonjs/zip/unzipFromStream.js +188 -6
- package/commonjs/zip/unzipFromStream.js.map +1 -1
- package/commonjs/zip/unzipFromStream.unzipper.js +19 -34
- package/commonjs/zip/unzipFromStream.unzipper.js.map +1 -1
- package/modules/export/convertInputToNodeStream.js +0 -12
- package/modules/export/convertInputToNodeStream.js.map +1 -1
- package/modules/export/parseSheet.js +13 -6
- package/modules/export/parseSheet.js.map +1 -1
- package/modules/export/readSheetBrowser.js +3 -5
- package/modules/export/readSheetBrowser.js.map +1 -1
- package/modules/export/readSheetNode.js +3 -5
- package/modules/export/readSheetNode.js.map +1 -1
- package/modules/export/readSheetUniversal.js +2 -2
- package/modules/export/readSheetUniversal.js.map +1 -1
- package/modules/export/readSheetWebWorker.js +7 -8
- package/modules/export/readSheetWebWorker.js.map +1 -1
- package/modules/export/readXlsxFileBrowser.js +3 -5
- package/modules/export/readXlsxFileBrowser.js.map +1 -1
- package/modules/export/readXlsxFileNode.js +3 -5
- package/modules/export/readXlsxFileNode.js.map +1 -1
- package/modules/export/readXlsxFileUniversal.js +2 -2
- package/modules/export/readXlsxFileUniversal.js.map +1 -1
- package/modules/export/readXlsxFileWebWorker.js +7 -8
- package/modules/export/readXlsxFileWebWorker.js.map +1 -1
- package/modules/export/unpackXlsxFileBrowser.js +15 -4
- package/modules/export/unpackXlsxFileBrowser.js.map +1 -1
- package/modules/export/unpackXlsxFileBrowser.test.js.map +1 -0
- package/modules/export/unpackXlsxFileNode.js +32 -5
- package/modules/export/unpackXlsxFileNode.js.map +1 -1
- package/modules/export/unpackXlsxFileNode.test.js.map +1 -0
- package/modules/export/unpackXlsxFileUniversal.js +14 -3
- package/modules/export/unpackXlsxFileUniversal.js.map +1 -1
- package/modules/export/unpackXlsxFileUniversal.test.js.map +1 -0
- package/modules/parseSheetData/parseSheetData.js +9 -6
- package/modules/parseSheetData/parseSheetData.js.map +1 -1
- package/modules/saxen/parser.js +1 -1
- package/modules/saxen/parser.js.map +1 -1
- package/modules/utility/convertValuesFromUint8ArraysToStrings.js +92 -0
- package/modules/utility/convertValuesFromUint8ArraysToStrings.js.map +1 -0
- package/modules/xlsx/InvalidSpreadsheetError.js +50 -0
- package/modules/xlsx/InvalidSpreadsheetError.js.map +1 -0
- package/modules/xlsx/SheetNotFoundError.js +50 -0
- package/modules/xlsx/SheetNotFoundError.js.map +1 -0
- package/modules/xlsx/file/InputValidationStream.js +96 -0
- package/modules/xlsx/file/InputValidationStream.js.map +1 -0
- package/modules/xlsx/file/InputValidationStream.test.js.map +1 -0
- package/modules/xlsx/file/InvalidInputError.js +100 -0
- package/modules/xlsx/file/InvalidInputError.js.map +1 -0
- package/modules/xlsx/file/createFileTypeDetector.js +63 -0
- package/modules/xlsx/file/createFileTypeDetector.js.map +1 -0
- package/modules/xlsx/file/createFileTypeDetector.test.js.map +1 -0
- package/modules/xlsx/file/validateLeadingBytes.js +37 -0
- package/modules/xlsx/file/validateLeadingBytes.js.map +1 -0
- package/modules/xlsx/file/validateLeadingBytes.test.js.map +1 -0
- package/modules/xlsx/isDateFormat.js +31 -27
- package/modules/xlsx/isDateFormat.js.map +1 -1
- package/modules/xlsx/isDateFormatStyle.js +18 -21
- package/modules/xlsx/isDateFormatStyle.js.map +1 -1
- package/modules/xlsx/parseCell.js +251 -111
- package/modules/xlsx/parseCell.js.map +1 -1
- package/modules/xlsx/parseCellAddress.js +21 -18
- package/modules/xlsx/parseCellAddress.js.map +1 -1
- package/modules/xlsx/parseExcelDate.js +4 -124
- package/modules/xlsx/parseExcelDate.js.map +1 -1
- package/modules/xlsx/parseExcelDate.test.js.map +1 -1
- package/modules/xlsx/parseExcelTimestamp.js +133 -0
- package/modules/xlsx/parseExcelTimestamp.js.map +1 -0
- package/modules/xlsx/parseFilePaths.js +48 -47
- package/modules/xlsx/parseFilePaths.js.map +1 -1
- package/modules/xlsx/parseSharedStrings.js +91 -37
- package/modules/xlsx/parseSharedStrings.js.map +1 -1
- package/modules/xlsx/parseSheet.js +526 -68
- package/modules/xlsx/parseSheet.js.map +1 -1
- package/modules/xlsx/parseSpreadsheetContents.js +153 -81
- package/modules/xlsx/parseSpreadsheetContents.js.map +1 -1
- package/modules/xlsx/parseSpreadsheetInfo.js +60 -59
- package/modules/xlsx/parseSpreadsheetInfo.js.map +1 -1
- package/modules/xlsx/parseStyles.js +75 -75
- package/modules/xlsx/parseStyles.js.map +1 -1
- package/modules/xml/parseXml.js +106 -0
- package/modules/xml/parseXml.js.map +1 -0
- package/modules/xml/parseXml.test.js.map +1 -0
- package/modules/xml/parseXmlStream.js +2 -0
- package/modules/xml/parseXmlStream.js.map +1 -1
- package/modules/xml/parseXmlStream.sax.js +69 -28
- package/modules/xml/parseXmlStream.sax.js.map +1 -1
- package/modules/xml/parseXmlStream.saxen.js +67 -40
- package/modules/xml/parseXmlStream.saxen.js.map +1 -1
- package/modules/zip/UnzipError.js +49 -0
- package/modules/zip/UnzipError.js.map +1 -0
- package/modules/zip/unzipFromArrayBuffer.js +21 -1
- package/modules/zip/unzipFromArrayBuffer.js.map +1 -1
- package/modules/zip/unzipFromArrayBuffer.test.js.map +1 -0
- package/modules/zip/unzipFromStream.fflate.js +41 -35
- package/modules/zip/unzipFromStream.fflate.js.map +1 -1
- package/modules/zip/unzipFromStream.js +124 -1
- package/modules/zip/unzipFromStream.js.map +1 -1
- package/modules/zip/unzipFromStream.unzipper.js +19 -35
- package/modules/zip/unzipFromStream.unzipper.js.map +1 -1
- package/node/index.cjs +3 -0
- package/node/index.d.ts +16 -0
- package/node/index.js +3 -0
- package/package.json +5 -3
- package/types/InvalidInputError.d.ts +16 -0
- package/types/InvalidSpreadsheetError.d.ts +4 -0
- package/types/SheetNotFoundError.d.ts +4 -0
- package/universal/index.cjs +3 -0
- package/universal/index.d.ts +16 -0
- package/universal/index.js +3 -0
- package/web-worker/index.cjs +3 -0
- package/web-worker/index.d.ts +16 -0
- package/web-worker/index.js +3 -0
- package/commonjs/export/convertValuesFromUint8ArraysToStrings.js +0 -23
- package/commonjs/export/convertValuesFromUint8ArraysToStrings.js.map +0 -1
- package/commonjs/xlsx/convertCellsToData2dArray.js +0 -84
- package/commonjs/xlsx/convertCellsToData2dArray.js.map +0 -1
- package/commonjs/xlsx/dropEmptyColumns.js +0 -40
- package/commonjs/xlsx/dropEmptyColumns.js.map +0 -1
- package/commonjs/xlsx/dropEmptyColumns.test.js.map +0 -1
- package/commonjs/xlsx/dropEmptyRows.js +0 -43
- package/commonjs/xlsx/dropEmptyRows.js.map +0 -1
- package/commonjs/xlsx/dropEmptyRows.test.js.map +0 -1
- package/commonjs/xlsx/parseCellValue.js +0 -186
- package/commonjs/xlsx/parseCellValue.js.map +0 -1
- package/commonjs/xlsx/parseNumber.js +0 -20
- package/commonjs/xlsx/parseNumber.js.map +0 -1
- package/commonjs/xlsx/parseSharedString.js +0 -64
- package/commonjs/xlsx/parseSharedString.js.map +0 -1
- package/commonjs/xlsx/parseSheetData.js +0 -68
- package/commonjs/xlsx/parseSheetData.js.map +0 -1
- package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js +0 -29
- package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +0 -1
- package/commonjs/xml/parseXmlStream.saxen.code.js +0 -953
- package/commonjs/xml/parseXmlStream.saxen.code.js.map +0 -1
- package/commonjs/xml/parseXmlStream.test.js.map +0 -1
- package/modules/export/convertValuesFromUint8ArraysToStrings.js +0 -17
- package/modules/export/convertValuesFromUint8ArraysToStrings.js.map +0 -1
- package/modules/xlsx/convertCellsToData2dArray.js +0 -77
- package/modules/xlsx/convertCellsToData2dArray.js.map +0 -1
- package/modules/xlsx/dropEmptyColumns.js +0 -34
- package/modules/xlsx/dropEmptyColumns.js.map +0 -1
- package/modules/xlsx/dropEmptyColumns.test.js.map +0 -1
- package/modules/xlsx/dropEmptyRows.js +0 -37
- package/modules/xlsx/dropEmptyRows.js.map +0 -1
- package/modules/xlsx/dropEmptyRows.test.js.map +0 -1
- package/modules/xlsx/parseCellValue.js +0 -180
- package/modules/xlsx/parseCellValue.js.map +0 -1
- package/modules/xlsx/parseNumber.js +0 -14
- package/modules/xlsx/parseNumber.js.map +0 -1
- package/modules/xlsx/parseSharedString.js +0 -55
- package/modules/xlsx/parseSharedString.js.map +0 -1
- package/modules/xlsx/parseSheetData.js +0 -55
- package/modules/xlsx/parseSheetData.js.map +0 -1
- package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js +0 -23
- package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +0 -1
- package/modules/xml/parseXmlStream.saxen.code.js +0 -947
- package/modules/xml/parseXmlStream.saxen.code.js.map +0 -1
- 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
|
|
13
|
-
var _checkpoint =
|
|
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
|
|
16
|
-
|
|
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
|
-
//
|
|
31
|
-
//
|
|
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}
|
|
35
|
-
* @param {Record<string,
|
|
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(
|
|
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,
|
|
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,
|
|
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,
|
|
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}
|
|
90
|
-
* @param {Record<string,
|
|
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,
|
|
95
|
-
// Assign
|
|
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:
|
|
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(
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
//
|
|
159
|
-
//
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
|
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
|
|
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,
|
|
236
|
-
return (0, _parseSheet["default"])(content,
|
|
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,
|
|
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
|
|
272
|
-
}() : fileInfo.fallback : fileInfo.parse(contents[filePath],
|
|
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();
|