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
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = parseXml;
|
|
7
|
+
var _parseXmlStream = _interopRequireDefault(require("./parseXmlStream.js"));
|
|
8
|
+
var _InvalidSpreadsheetError = _interopRequireDefault(require("../xlsx/InvalidSpreadsheetError.js"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
10
|
+
/**
|
|
11
|
+
* Parses XML markup by calling the supplied callback functions.
|
|
12
|
+
* @param {string} xml
|
|
13
|
+
* @param {any} state — The initial `state`. This `state` will supposedly be modified by the callback functions as the XML is being parsed.
|
|
14
|
+
* @param {function} [onOpenTag]
|
|
15
|
+
* @param {function} [onCloseTag]
|
|
16
|
+
* @param {function} [onText]
|
|
17
|
+
* @param {function} [onProgress] — If defined, will be called every time it finishes parsing yet another chunk of XML.
|
|
18
|
+
* @returns {Promise<void>} Returns a `Promise` that resolves to nothing. Inspect the passed `state` argument for changes.
|
|
19
|
+
*/
|
|
20
|
+
function parseXml(xml, state, onOpenTag, onCloseTag, onText, onProgress) {
|
|
21
|
+
var parser = (0, _parseXmlStream["default"])(state, onOpenTag, onCloseTag, onText);
|
|
22
|
+
if (onProgress) {
|
|
23
|
+
parseXmlInChunks(parser, xml, onProgress);
|
|
24
|
+
} else {
|
|
25
|
+
// Parse XML "all at once"
|
|
26
|
+
parser.write(xml);
|
|
27
|
+
parser.end();
|
|
28
|
+
}
|
|
29
|
+
return parser.promise.then(function (result) {
|
|
30
|
+
return result;
|
|
31
|
+
}, function (error) {
|
|
32
|
+
// If the error is not re-thrown here, the parser will simply keep parsing,
|
|
33
|
+
// i.e. it doesn't halt after encountering an error and doesn't require manual resuming.
|
|
34
|
+
// So it must re-throw the error here in order for the parser to stop.
|
|
35
|
+
// Because the error is thrown inside a `new Promise()` constructor,
|
|
36
|
+
// the promise will reject automatically.
|
|
37
|
+
var spreadsheetError = new _InvalidSpreadsheetError["default"](error.message);
|
|
38
|
+
spreadsheetError.stack = error.stack;
|
|
39
|
+
spreadsheetError.cause = error;
|
|
40
|
+
throw spreadsheetError;
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// This function is placed here inside the wrapper function body
|
|
44
|
+
// in order to not to hav `worker-f`
|
|
45
|
+
/**
|
|
46
|
+
* Parses XML in chunks.
|
|
47
|
+
* @param {object} parser — An object returned from `parseXmlStream()` function.
|
|
48
|
+
* @param {string} xml
|
|
49
|
+
* @param {function} [onProgress] — Will be called after yet another chunk of XML has been parsed.
|
|
50
|
+
* @param {boolean} [nonBlocking] — If `true` is passed then it won't block the current thread while parsing. Otherwise, it will block the current thread until all the XML is parsed.
|
|
51
|
+
*/
|
|
52
|
+
function parseXmlInChunks(parser, xml, onProgress, nonBlocking) {
|
|
53
|
+
var MAX_CHUNK_PROCESSING_TIME = 7; // 16 ms — 60 fps, 7 ms — 144 fps
|
|
54
|
+
var INITIAL_CHUNK_SIZE = 64 * 1024; // 64 KB
|
|
55
|
+
|
|
56
|
+
var chunksCount = 0;
|
|
57
|
+
var chunkSize = INITIAL_CHUNK_SIZE;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Parses next chunk of XML.
|
|
61
|
+
* @returns {boolean} Returns `true` if there're more chunks to write.
|
|
62
|
+
*/
|
|
63
|
+
var parseNextChunk = function parseNextChunk() {
|
|
64
|
+
chunksCount++;
|
|
65
|
+
var startedAt = Date.now();
|
|
66
|
+
if (xml.length > chunkSize) {
|
|
67
|
+
parser.write(xml.slice(0, chunkSize));
|
|
68
|
+
if (onProgress) {
|
|
69
|
+
onProgress(false);
|
|
70
|
+
}
|
|
71
|
+
xml = xml.slice(chunkSize);
|
|
72
|
+
var chunkProcessingTime = Date.now() - startedAt;
|
|
73
|
+
if (chunkProcessingTime < MAX_CHUNK_PROCESSING_TIME * 0.5) {
|
|
74
|
+
chunkSize *= 2;
|
|
75
|
+
} else if (chunkProcessingTime > MAX_CHUNK_PROCESSING_TIME) {
|
|
76
|
+
chunkSize /= 2;
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
} else {
|
|
80
|
+
parser.write(xml);
|
|
81
|
+
parser.end();
|
|
82
|
+
if (onProgress) {
|
|
83
|
+
onProgress(true);
|
|
84
|
+
}
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Parses next chunk of XML and then repeats.
|
|
91
|
+
*/
|
|
92
|
+
var loop = function loop() {
|
|
93
|
+
if (parseNextChunk()) {
|
|
94
|
+
if (nonBlocking) {
|
|
95
|
+
if (typeof setImmediate !== 'undefined') {
|
|
96
|
+
setImmediate(loop);
|
|
97
|
+
} else {
|
|
98
|
+
setTimeout(loop, 0);
|
|
99
|
+
}
|
|
100
|
+
} else {
|
|
101
|
+
loop();
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
// Finished
|
|
105
|
+
// console.log('* chunk size', chunkSize)
|
|
106
|
+
// console.log('* chunks count', chunksCount)
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
loop();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=parseXml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseXml.js","names":["_parseXmlStream","_interopRequireDefault","require","_InvalidSpreadsheetError","obj","__esModule","parseXml","xml","state","onOpenTag","onCloseTag","onText","onProgress","parser","parseXmlStream","parseXmlInChunks","write","end","promise","then","result","error","spreadsheetError","InvalidSpreadsheetError","message","stack","cause","nonBlocking","MAX_CHUNK_PROCESSING_TIME","INITIAL_CHUNK_SIZE","chunksCount","chunkSize","parseNextChunk","startedAt","Date","now","length","slice","chunkProcessingTime","loop","setImmediate","setTimeout"],"sources":["../../source/xml/parseXml.js"],"sourcesContent":["import parseXmlStream from './parseXmlStream.js'\r\n\r\nimport InvalidSpreadsheetError from '../xlsx/InvalidSpreadsheetError.js'\r\n\r\n/**\r\n * Parses XML markup by calling the supplied callback functions.\r\n * @param {string} xml\r\n * @param {any} state — The initial `state`. This `state` will supposedly be modified by the callback functions as the XML is being parsed.\r\n * @param {function} [onOpenTag]\r\n * @param {function} [onCloseTag]\r\n * @param {function} [onText]\r\n * @param {function} [onProgress] — If defined, will be called every time it finishes parsing yet another chunk of XML.\r\n * @returns {Promise<void>} Returns a `Promise` that resolves to nothing. Inspect the passed `state` argument for changes.\r\n */\r\nexport default function parseXml(xml, state, onOpenTag, onCloseTag, onText, onProgress) {\r\n\tconst parser = parseXmlStream(state, onOpenTag, onCloseTag, onText)\r\n\r\n\tif (onProgress) {\r\n\t\tparseXmlInChunks(parser, xml, onProgress)\r\n\t} else {\r\n\t\t// Parse XML \"all at once\"\r\n\t\tparser.write(xml)\r\n\t\tparser.end()\r\n\t}\r\n\r\n\treturn parser.promise.then(\r\n\t\tresult => result,\r\n\t\t(error) => {\r\n\t\t\t// If the error is not re-thrown here, the parser will simply keep parsing,\r\n\t\t\t// i.e. it doesn't halt after encountering an error and doesn't require manual resuming.\r\n\t\t\t// So it must re-throw the error here in order for the parser to stop.\r\n\t\t\t// Because the error is thrown inside a `new Promise()` constructor,\r\n\t\t\t// the promise will reject automatically.\r\n\t\t\tconst spreadsheetError = new InvalidSpreadsheetError(error.message)\r\n\t\t\tspreadsheetError.stack = error.stack\r\n\t\t\tspreadsheetError.cause = error\r\n\t\t\tthrow spreadsheetError\r\n\t\t}\r\n\t)\r\n\r\n\t// This function is placed here inside the wrapper function body\r\n\t// in order to not to hav `worker-f`\r\n\t/**\r\n\t * Parses XML in chunks.\r\n\t * @param {object} parser — An object returned from `parseXmlStream()` function.\r\n\t * @param {string} xml\r\n\t * @param {function} [onProgress] — Will be called after yet another chunk of XML has been parsed.\r\n\t * @param {boolean} [nonBlocking] — If `true` is passed then it won't block the current thread while parsing. Otherwise, it will block the current thread until all the XML is parsed.\r\n\t */\r\n\tfunction parseXmlInChunks(parser, xml, onProgress, nonBlocking) {\r\n\t\tconst MAX_CHUNK_PROCESSING_TIME = 7 // 16 ms — 60 fps, 7 ms — 144 fps\r\n\t\tconst INITIAL_CHUNK_SIZE = 64 * 1024 // 64 KB\r\n\r\n\t\tlet chunksCount = 0\r\n\t\tlet chunkSize = INITIAL_CHUNK_SIZE\r\n\r\n\t\t/**\r\n\t\t * Parses next chunk of XML.\r\n\t\t * @returns {boolean} Returns `true` if there're more chunks to write.\r\n\t\t */\r\n\t\tconst parseNextChunk = () => {\r\n\t\t\tchunksCount++\r\n\t\t\tconst startedAt = Date.now()\r\n\t\t\tif (xml.length > chunkSize) {\r\n\t\t\t\tparser.write(xml.slice(0, chunkSize))\r\n\t\t\t\tif (onProgress) {\r\n\t\t\t\t\tonProgress(false)\r\n\t\t\t\t}\r\n\t\t\t\txml = xml.slice(chunkSize)\r\n\t\t\t\tconst chunkProcessingTime = Date.now() - startedAt\r\n\t\t\t\tif (chunkProcessingTime < MAX_CHUNK_PROCESSING_TIME * 0.5) {\r\n\t\t\t\t\tchunkSize *= 2\r\n\t\t\t\t} else if (chunkProcessingTime > MAX_CHUNK_PROCESSING_TIME) {\r\n\t\t\t\t\tchunkSize /= 2\r\n\t\t\t\t}\r\n\t\t\t\treturn true\r\n\t\t\t} else {\r\n\t\t\t\tparser.write(xml)\r\n\t\t\t\tparser.end()\r\n\t\t\t\tif (onProgress) {\r\n\t\t\t\t\tonProgress(true)\r\n\t\t\t\t}\r\n\t\t\t\treturn false\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Parses next chunk of XML and then repeats.\r\n\t\t */\r\n\t\tconst loop = () => {\r\n\t\t\tif (parseNextChunk()) {\r\n\t\t\t\tif (nonBlocking) {\r\n\t\t\t\t\tif (typeof setImmediate !== 'undefined') {\r\n\t\t\t\t\t\tsetImmediate(loop)\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsetTimeout(loop, 0)\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tloop()\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// Finished\r\n\t\t\t\t// console.log('* chunk size', chunkSize)\r\n\t\t\t\t// console.log('* chunks count', chunksCount)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tloop()\r\n\t}\r\n}"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseXml.test.js","names":["_mocha","require","_chai","_parseXml","_interopRequireDefault","obj","__esModule","_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","asyncGeneratorStep","gen","reject","_next","_throw","key","info","error","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","describe","it","_callee","_callee$","_context","t0","expect","parseXmlTextContent","t1","to","equal","_callee2","_callee2$","_context2","_callee3","_callee3$","_context3","_callee4","state","onOpenTag","_callee4$","_context4","names","tagName","attributes","parseXml","deep","xml","text","onText"],"sources":["../../source/xml/parseXml.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport parseXml from './parseXml.js'\r\n\r\ndescribe('parseXmlStream', () => {\r\n\tit('should decode numeric character references in text', async () => {\r\n\t\t// Some tools (e.g. `openpyxl`) escape non-ASCII characters when writing XML.\r\n\t\texpect(await parseXmlTextContent('<r><t>Café été</t></r>')).to.equal('Café été')\r\n\t})\r\n\r\n\tit('should decode predefined XML entities in text', async () => {\r\n\t\texpect(await parseXmlTextContent('<r><t><a> & "b" 'c'</t></r>')).to.equal('<a> & \"b\" \\'c\\'')\r\n\t})\r\n\r\n\tit('should pass text without character references through unchanged', async () => {\r\n\t\texpect(await parseXmlTextContent('<r><t>abc</t></r>')).to.equal('abc')\r\n\t})\r\n\r\n\tit('should decode character references in attribute values', async () => {\r\n\t\t// Sheet names are read from the `name` attribute\r\n\t\t// in `xl/workbook.xml` file: `<sheet name=\"P&L\"/>`.\r\n\t\tconst state = { names: [] }\r\n\t\tconst onOpenTag = (tagName, attributes, state) => {\r\n\t\t\tif (tagName === 'sheet') {\r\n\t\t\t\tstate.names.push(attributes.name)\r\n\t\t\t}\r\n\t\t}\r\n\t\tawait parseXml(\r\n\t\t\t'<sheets><sheet name=\"P&L été\"/></sheets>',\r\n\t\t\tstate,\r\n\t\t\tonOpenTag,\r\n\t\t\tnull,\r\n\t\t\tnull\r\n\t\t)\r\n\t\texpect(state.names).to.deep.equal(['P&L été'])\r\n\t})\r\n})\r\n\r\nfunction parseXmlTextContent(xml) {\r\n\tconst state = { text: '' }\r\n\tconst onText = (text, state) => {\r\n\t\tstate.text += text\r\n\t}\r\n\treturn parseXml(\r\n\t\txml,\r\n\t\tstate,\r\n\t\tnull,\r\n\t\tnull,\r\n\t\tonText\r\n\t).then(() => state.text)\r\n}\r\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseXmlStream.js","names":["_parseXmlStreamSaxen","_interopRequireDefault","require","obj","__esModule"],"sources":["../../source/xml/parseXmlStream.js"],"sourcesContent":["// Currently there're 2 XML stream parser implementations:\r\n// * `sax` — The \"classic\" one. Supports Node.js streams.\r\n// * `saxen` — The small and fast one.\r\n//\r\n// `sax` has been around for a long time, and is written by a well-known developer,\r\n// but it performance is very subpar compared to `saxen`: reading a `10 MB` `.xlsx` file\r\n// with `sax` is about `1.4` secs while with `saxen` it's about `0.3` secs,\r\n// meaning that `saxen` is light-years ahead of `sax` in terms of performance.\r\n//\r\n// `sax` has an advantage of parsing XML from a Node.js stream rather than from just a `string`,\r\n// but the weird part is that when enabled, \"streaming\" mode results in significantly slower parsing:\r\n// about `3.1` secs. in \"streaming\" mode vs about `1.4` secs. in non-\"streaming\" mode.\r\n//\r\n// `sax` \"bundled\" size is `22.5 kB` (`8.1 kB` gzipped).\r\n// `saxen` \"bundled\" size is `6.15 kB` (`2.7 kB` gzipped).\r\n//\r\nexport { default as default } from './parseXmlStream.saxen.js'"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"parseXmlStream.js","names":["_parseXmlStreamSaxen","_interopRequireDefault","require","obj","__esModule"],"sources":["../../source/xml/parseXmlStream.js"],"sourcesContent":["// Currently there're 2 XML stream parser implementations:\r\n// * `sax` — The \"classic\" one. Supports Node.js streams.\r\n// * `saxen` — The small and fast one.\r\n//\r\n// `sax` has been around for a long time, and is written by a well-known developer,\r\n// but it performance is very subpar compared to `saxen`: reading a `10 MB` `.xlsx` file\r\n// with `sax` is about `1.4` secs while with `saxen` it's about `0.3` secs,\r\n// meaning that `saxen` is light-years ahead of `sax` in terms of performance.\r\n//\r\n// `sax` has an advantage of parsing XML from a Node.js stream rather than from just a `string`,\r\n// but the weird part is that when enabled, \"streaming\" mode results in significantly slower parsing:\r\n// about `3.1` secs. in \"streaming\" mode vs about `1.4` secs. in non-\"streaming\" mode.\r\n//\r\n// `saxen` has a PR open that adds \"streaming\" functionality: https://github.com/nikku/saxen/pull/27\r\n//\r\n// `sax` \"bundled\" size is `22.5 kB` (`8.1 kB` gzipped).\r\n// `saxen` \"bundled\" size is `6.15 kB` (`2.7 kB` gzipped).\r\n//\r\nexport { default as default } from './parseXmlStream.saxen.js'"],"mappings":";;;;;;;;;;;AAkBA,IAAAA,oBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8D,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,gBAAAA,GAAA"}
|
|
@@ -7,34 +7,69 @@ exports["default"] = parseXmlStream;
|
|
|
7
7
|
var _nodeStream = require("node:stream");
|
|
8
8
|
var _sax = _interopRequireDefault(require("sax"));
|
|
9
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
10
|
-
// For some strange reason,
|
|
10
|
+
// For some strange reason, enabling "streaming" mode results in
|
|
11
11
|
// quite a dramatic drop in performance.
|
|
12
12
|
// For example, reading a `10 MB` `.xlsx` file in "streaming" mode is about `3.1` secs.
|
|
13
13
|
// while in non-"streaming" mode it's about `1.4` secs.
|
|
14
14
|
// Because of such strange performance issue, "streaming" mode is turned off.
|
|
15
15
|
var STREAMING_MODE = false;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Parses XML markup in a streaming fashion by calling the supplied callback functions as the XML markup is being input.
|
|
19
|
+
* @param {any} state — The initial `state`. This `state` will supposedly be modified by the callback functions as the XML is being parsed.
|
|
20
|
+
* @param {function} [onOpenTag]
|
|
21
|
+
* @param {function} [onCloseTag]
|
|
22
|
+
* @param {function} [onText]
|
|
23
|
+
* @returns {object} An object with properties: `promise`, `write(string)`, `end()`. The `promise` resolves with nothing.
|
|
24
|
+
*/
|
|
25
|
+
function parseXmlStream(createInitialState, onOpenTag, onCloseTag, onText) {
|
|
26
|
+
// This `state` will be modified by the callback functions as the XML is being parsed.
|
|
27
|
+
var state = createInitialState();
|
|
28
|
+
var errored = false;
|
|
29
|
+
var mustNotHaveErrored = function mustNotHaveErrored() {
|
|
30
|
+
if (errored) {
|
|
31
|
+
// If this error is thrown then it means that there's a bug in the code
|
|
32
|
+
// because the code should not have got here if the XML parsing process
|
|
33
|
+
// has already errored.
|
|
34
|
+
throw new Error('Errored');
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var strict = true;
|
|
38
|
+
var xmlns = true;
|
|
39
|
+
var parser = STREAMING_MODE ? undefined : _sax["default"].parser(strict, parserOptions);
|
|
40
|
+
|
|
41
|
+
// This `stream` could be `.pipe()`d to:
|
|
42
|
+
// `Readable.from(xml).pipe(parserStream)`
|
|
43
|
+
var parserStream = STREAMING_MODE ? _sax["default"].createStream(strict, parserOptions) : undefined;
|
|
44
|
+
|
|
45
|
+
// Inputs a chunk of XML.
|
|
46
|
+
var write = function write(xml) {
|
|
47
|
+
mustNotHaveErrored();
|
|
48
|
+
parser.write(xml);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// No more chunks of XMl will be input.
|
|
52
|
+
var end = function end() {
|
|
53
|
+
mustNotHaveErrored();
|
|
54
|
+
parser.close();
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// This `promise` resolves with the final `state` when finished parsing.
|
|
58
|
+
var promise = new Promise(function (resolve, reject) {
|
|
25
59
|
var parserOptions = {
|
|
26
60
|
lowercase: true,
|
|
27
61
|
xmlns: xmlns
|
|
28
62
|
};
|
|
29
63
|
var prefixedTagNameToUnprefixedTagName = {};
|
|
30
|
-
var state = createInitialState();
|
|
31
64
|
|
|
32
|
-
//
|
|
65
|
+
// on XML parsing error
|
|
33
66
|
var onerror = function onerror(error) {
|
|
34
67
|
if (errored) {
|
|
35
68
|
return;
|
|
36
69
|
}
|
|
37
70
|
errored = true;
|
|
71
|
+
// P.S. When the parser encounters an error, it halts until manually resumed.
|
|
72
|
+
// I.e. at this stage the parser is in halted state until manually resumed.
|
|
38
73
|
reject(error);
|
|
39
74
|
};
|
|
40
75
|
|
|
@@ -60,6 +95,11 @@ function parseXmlStream(xml, _ref) {
|
|
|
60
95
|
if (onCloseTag) {
|
|
61
96
|
var tagName = xmlns ? prefixedTagNameToUnprefixedTagName[name] : name;
|
|
62
97
|
if (xmlns && !tagName) {
|
|
98
|
+
// I think that `sax` already validates closing tags internally,
|
|
99
|
+
// i.e. it's likely that it already emits an "error" event
|
|
100
|
+
// when it encounters an unclosed tag, in which case this error
|
|
101
|
+
// is not technically possible. And if it ever gets thrown
|
|
102
|
+
// then that would mean that there's a bug in the code.
|
|
63
103
|
throw new Error("Unknown closing tag: ".concat(name));
|
|
64
104
|
}
|
|
65
105
|
onCloseTag(tagName, state);
|
|
@@ -80,25 +120,26 @@ function parseXmlStream(xml, _ref) {
|
|
|
80
120
|
resolve(state);
|
|
81
121
|
};
|
|
82
122
|
if (STREAMING_MODE) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
parser.on('end', onend);
|
|
90
|
-
_nodeStream.Readable.from(xml).pipe(parser);
|
|
123
|
+
parserStream.on('error', onerror);
|
|
124
|
+
parserStream.on('text', ontext);
|
|
125
|
+
parserStream.on('opentag', onopentag);
|
|
126
|
+
parserStream.on('closetag', onclosetag);
|
|
127
|
+
parserStream.on('attribute', onattribute);
|
|
128
|
+
parserStream.on('end', onend);
|
|
91
129
|
} else {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
_parser.onend = onend;
|
|
99
|
-
_parser.write(xml).end();
|
|
130
|
+
parser.onerror = onerror;
|
|
131
|
+
parser.ontext = ontext;
|
|
132
|
+
parser.onopentag = onopentag;
|
|
133
|
+
parser.onclosetag = onclosetag;
|
|
134
|
+
parser.onattribute = onattribute;
|
|
135
|
+
parser.onend = onend;
|
|
100
136
|
}
|
|
101
137
|
});
|
|
138
|
+
return {
|
|
139
|
+
promise: promise,
|
|
140
|
+
write: write,
|
|
141
|
+
end: end
|
|
142
|
+
};
|
|
102
143
|
}
|
|
103
144
|
function getAttributesWithoutXmlnsPrefixes(attributes) {
|
|
104
145
|
return Object.keys(attributes).reduce(function (attributesWithoutPrefixes, nameWithPrefix) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseXmlStream.sax.js","names":["_nodeStream","require","_sax","_interopRequireDefault","obj","__esModule","STREAMING_MODE","parseXmlStream","
|
|
1
|
+
{"version":3,"file":"parseXmlStream.sax.js","names":["_nodeStream","require","_sax","_interopRequireDefault","obj","__esModule","STREAMING_MODE","parseXmlStream","createInitialState","onOpenTag","onCloseTag","onText","state","errored","mustNotHaveErrored","Error","strict","xmlns","parser","undefined","sax","parserOptions","parserStream","createStream","write","xml","end","close","promise","Promise","resolve","reject","lowercase","prefixedTagNameToUnprefixedTagName","onerror","error","ontext","text","onopentag","node","name","local","getAttributesWithoutXmlnsPrefixes","attributes","onclosetag","tagName","concat","onattribute","attribute","onend","on","Object","keys","reduce","attributesWithoutPrefixes","nameWithPrefix","value"],"sources":["../../source/xml/parseXmlStream.sax.js"],"sourcesContent":["import { Readable } from 'node:stream'\r\n\r\nimport sax from 'sax'\r\n\r\n// For some strange reason, enabling \"streaming\" mode results in\r\n// quite a dramatic drop in performance.\r\n// For example, reading a `10 MB` `.xlsx` file in \"streaming\" mode is about `3.1` secs.\r\n// while in non-\"streaming\" mode it's about `1.4` secs.\r\n// Because of such strange performance issue, \"streaming\" mode is turned off.\r\nconst STREAMING_MODE = false\r\n\r\n/**\r\n * Parses XML markup in a streaming fashion by calling the supplied callback functions as the XML markup is being input.\r\n * @param {any} state — The initial `state`. This `state` will supposedly be modified by the callback functions as the XML is being parsed.\r\n * @param {function} [onOpenTag]\r\n * @param {function} [onCloseTag]\r\n * @param {function} [onText]\r\n * @returns {object} An object with properties: `promise`, `write(string)`, `end()`. The `promise` resolves with nothing.\r\n */\r\nexport default function parseXmlStream(\r\n\tcreateInitialState,\r\n\tonOpenTag,\r\n\tonCloseTag,\r\n\tonText\r\n) {\r\n\t// This `state` will be modified by the callback functions as the XML is being parsed.\r\n\tconst state = createInitialState()\r\n\r\n let errored = false\r\n\r\n const mustNotHaveErrored = () => {\r\n if (errored) {\r\n // If this error is thrown then it means that there's a bug in the code\r\n // because the code should not have got here if the XML parsing process\r\n // has already errored.\r\n throw new Error('Errored')\r\n }\r\n }\r\n\r\n\tconst strict = true\r\n\tconst xmlns = true\r\n\r\n\tconst parser = STREAMING_MODE ? undefined : sax.parser(strict, parserOptions)\r\n\r\n\t// This `stream` could be `.pipe()`d to:\r\n\t// `Readable.from(xml).pipe(parserStream)`\r\n\tconst parserStream = STREAMING_MODE ? sax.createStream(strict, parserOptions) : undefined\r\n\r\n\t// Inputs a chunk of XML.\r\n\tconst write = (xml) => {\r\n\t\tmustNotHaveErrored()\r\n\t\tparser.write(xml)\r\n\t}\r\n\r\n\t// No more chunks of XMl will be input.\r\n\tconst end = () => {\r\n\t\tmustNotHaveErrored()\r\n\t\tparser.close()\r\n\t}\r\n\r\n\t// This `promise` resolves with the final `state` when finished parsing.\r\n\tconst promise = new Promise((resolve, reject) => {\r\n\t\tconst parserOptions = { lowercase: true, xmlns }\r\n\r\n\t\tconst prefixedTagNameToUnprefixedTagName = {}\r\n\r\n\t\t// on XML parsing error\r\n\t\tconst onerror = (error) => {\r\n\t\t\tif (errored) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\terrored = true\r\n\t\t\t// P.S. When the parser encounters an error, it halts until manually resumed.\r\n\t\t\t// I.e. at this stage the parser is in halted state until manually resumed.\r\n\t\t\treject(error)\r\n\t\t}\r\n\r\n\t\t// got some text. `text` is the string of text.\r\n\t\tconst ontext = (text) => {\r\n\t\t\tif (onText) {\r\n\t\t\t\tonText(text, state)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// opened a tag. `node` has \"name\" and \"attributes\"\r\n\t\tconst onopentag = (node) => {\r\n\t\t\tif (onOpenTag) {\r\n\t\t\t\tif (xmlns) {\r\n\t\t\t\t\tprefixedTagNameToUnprefixedTagName[node.name] = node.local\r\n\t\t\t\t}\r\n\t\t\t\tonOpenTag(\r\n\t\t\t\t\txmlns ? node.local : node.name,\r\n\t\t\t\t\txmlns ? getAttributesWithoutXmlnsPrefixes(node.attributes) : node.attributes,\r\n\t\t\t\t\tstate\r\n\t\t\t\t)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// closed a tag.\r\n\t\tconst onclosetag = (name) => {\r\n\t\t\tif (onCloseTag) {\r\n\t\t\t\tconst tagName = xmlns ? prefixedTagNameToUnprefixedTagName[name] : name\r\n\t\t\t\tif (xmlns && !tagName) {\r\n\t\t\t\t\t// I think that `sax` already validates closing tags internally,\r\n\t\t\t\t\t// i.e. it's likely that it already emits an \"error\" event\r\n\t\t\t\t\t// when it encounters an unclosed tag, in which case this error\r\n\t\t\t\t\t// is not technically possible. And if it ever gets thrown\r\n\t\t\t\t\t// then that would mean that there's a bug in the code.\r\n\t\t\t\t\tthrow new Error(`Unknown closing tag: ${name}`)\r\n\t\t\t\t}\r\n\t\t\t\tonCloseTag(tagName, state)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// an attribute. `attribute` has \"name\" and \"value\"\r\n\t\tconst onattribute = (attribute) => {\r\n\t\t\t// const name = xmlns ? attribute.local : attribute.name\r\n\t\t\t// const value = attribute.value\r\n\t\t}\r\n\r\n\t\t// parser stream is done, and ready to have more stuff written to it.\r\n\t\tconst onend = () => {\r\n\t\t\tif (errored) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\tresolve(state)\r\n\t\t}\r\n\r\n\t\tif (STREAMING_MODE) {\r\n\t\t\tparserStream.on('error', onerror)\r\n\t\t\tparserStream.on('text', ontext)\r\n\t\t\tparserStream.on('opentag', onopentag)\r\n\t\t\tparserStream.on('closetag', onclosetag)\r\n\t\t\tparserStream.on('attribute', onattribute)\r\n\t\t\tparserStream.on('end', onend)\r\n\t\t} else {\r\n\t\t\tparser.onerror = onerror\r\n\t\t\tparser.ontext = ontext\r\n\t\t\tparser.onopentag = onopentag\r\n\t\t\tparser.onclosetag = onclosetag\r\n\t\t\tparser.onattribute = onattribute\r\n\t\t\tparser.onend = onend\r\n\t\t}\r\n\t})\r\n\r\n\treturn {\r\n\t\tpromise,\r\n\t\twrite,\r\n\t\tend\r\n\t}\r\n}\r\n\r\nfunction getAttributesWithoutXmlnsPrefixes(attributes) {\r\n return Object.keys(attributes).reduce((attributesWithoutPrefixes, nameWithPrefix) => {\r\n attributesWithoutPrefixes[attributes[nameWithPrefix].local] = attributes[nameWithPrefix].value\r\n return attributesWithoutPrefixes\r\n }, {})\r\n}"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAEA,IAAAC,IAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAqB,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,gBAAAA,GAAA;AAErB;AACA;AACA;AACA;AACA;AACA,IAAME,cAAc,GAAG,KAAK;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASC,cAAcA,CACrCC,kBAAkB,EAClBC,SAAS,EACTC,UAAU,EACVC,MAAM,EACL;EACD;EACA,IAAMC,KAAK,GAAGJ,kBAAkB,CAAC,CAAC;EAEjC,IAAIK,OAAO,GAAG,KAAK;EAEnB,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAA,EAAS;IAC/B,IAAID,OAAO,EAAE;MACX;MACA;MACA;MACA,MAAM,IAAIE,KAAK,CAAC,SAAS,CAAC;IAC5B;EACF,CAAC;EAEF,IAAMC,MAAM,GAAG,IAAI;EACnB,IAAMC,KAAK,GAAG,IAAI;EAElB,IAAMC,MAAM,GAAGZ,cAAc,GAAGa,SAAS,GAAGC,eAAG,CAACF,MAAM,CAACF,MAAM,EAAEK,aAAa,CAAC;;EAE7E;EACA;EACA,IAAMC,YAAY,GAAGhB,cAAc,GAAGc,eAAG,CAACG,YAAY,CAACP,MAAM,EAAEK,aAAa,CAAC,GAAGF,SAAS;;EAEzF;EACA,IAAMK,KAAK,GAAG,SAARA,KAAKA,CAAIC,GAAG,EAAK;IACtBX,kBAAkB,CAAC,CAAC;IACpBI,MAAM,CAACM,KAAK,CAACC,GAAG,CAAC;EAClB,CAAC;;EAED;EACA,IAAMC,GAAG,GAAG,SAANA,GAAGA,CAAA,EAAS;IACjBZ,kBAAkB,CAAC,CAAC;IACpBI,MAAM,CAACS,KAAK,CAAC,CAAC;EACf,CAAC;;EAED;EACA,IAAMC,OAAO,GAAG,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IAChD,IAAMV,aAAa,GAAG;MAAEW,SAAS,EAAE,IAAI;MAAEf,KAAK,EAALA;IAAM,CAAC;IAEhD,IAAMgB,kCAAkC,GAAG,CAAC,CAAC;;IAE7C;IACA,IAAMC,OAAO,GAAG,SAAVA,OAAOA,CAAIC,KAAK,EAAK;MAC1B,IAAItB,OAAO,EAAE;QACZ;MACD;MACAA,OAAO,GAAG,IAAI;MACd;MACA;MACAkB,MAAM,CAACI,KAAK,CAAC;IACd,CAAC;;IAED;IACA,IAAMC,MAAM,GAAG,SAATA,MAAMA,CAAIC,IAAI,EAAK;MACxB,IAAI1B,MAAM,EAAE;QACXA,MAAM,CAAC0B,IAAI,EAAEzB,KAAK,CAAC;MACpB;IACD,CAAC;;IAED;IACA,IAAM0B,SAAS,GAAG,SAAZA,SAASA,CAAIC,IAAI,EAAK;MAC3B,IAAI9B,SAAS,EAAE;QACd,IAAIQ,KAAK,EAAE;UACVgB,kCAAkC,CAACM,IAAI,CAACC,IAAI,CAAC,GAAGD,IAAI,CAACE,KAAK;QAC3D;QACAhC,SAAS,CACRQ,KAAK,GAAGsB,IAAI,CAACE,KAAK,GAAGF,IAAI,CAACC,IAAI,EAC9BvB,KAAK,GAAGyB,iCAAiC,CAACH,IAAI,CAACI,UAAU,CAAC,GAAGJ,IAAI,CAACI,UAAU,EAC5E/B,KACD,CAAC;MACF;IACD,CAAC;;IAED;IACA,IAAMgC,UAAU,GAAG,SAAbA,UAAUA,CAAIJ,IAAI,EAAK;MAC5B,IAAI9B,UAAU,EAAE;QACf,IAAMmC,OAAO,GAAG5B,KAAK,GAAGgB,kCAAkC,CAACO,IAAI,CAAC,GAAGA,IAAI;QACvE,IAAIvB,KAAK,IAAI,CAAC4B,OAAO,EAAE;UACtB;UACA;UACA;UACA;UACA;UACA,MAAM,IAAI9B,KAAK,yBAAA+B,MAAA,CAAyBN,IAAI,CAAE,CAAC;QAChD;QACA9B,UAAU,CAACmC,OAAO,EAAEjC,KAAK,CAAC;MAC3B;IACD,CAAC;;IAED;IACA,IAAMmC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,SAAS,EAAK;MAClC;MACA;IAAA,CACA;;IAED;IACA,IAAMC,KAAK,GAAG,SAARA,KAAKA,CAAA,EAAS;MACnB,IAAIpC,OAAO,EAAE;QACZ;MACD;MACAiB,OAAO,CAAClB,KAAK,CAAC;IACf,CAAC;IAED,IAAIN,cAAc,EAAE;MACnBgB,YAAY,CAAC4B,EAAE,CAAC,OAAO,EAAEhB,OAAO,CAAC;MACjCZ,YAAY,CAAC4B,EAAE,CAAC,MAAM,EAAEd,MAAM,CAAC;MAC/Bd,YAAY,CAAC4B,EAAE,CAAC,SAAS,EAAEZ,SAAS,CAAC;MACrChB,YAAY,CAAC4B,EAAE,CAAC,UAAU,EAAEN,UAAU,CAAC;MACvCtB,YAAY,CAAC4B,EAAE,CAAC,WAAW,EAAEH,WAAW,CAAC;MACzCzB,YAAY,CAAC4B,EAAE,CAAC,KAAK,EAAED,KAAK,CAAC;IAC9B,CAAC,MAAM;MACN/B,MAAM,CAACgB,OAAO,GAAGA,OAAO;MACxBhB,MAAM,CAACkB,MAAM,GAAGA,MAAM;MACtBlB,MAAM,CAACoB,SAAS,GAAGA,SAAS;MAC5BpB,MAAM,CAAC0B,UAAU,GAAGA,UAAU;MAC9B1B,MAAM,CAAC6B,WAAW,GAAGA,WAAW;MAChC7B,MAAM,CAAC+B,KAAK,GAAGA,KAAK;IACrB;EACD,CAAC,CAAC;EAEF,OAAO;IACNrB,OAAO,EAAPA,OAAO;IACPJ,KAAK,EAALA,KAAK;IACLE,GAAG,EAAHA;EACD,CAAC;AACF;AAEA,SAASgB,iCAAiCA,CAACC,UAAU,EAAE;EACrD,OAAOQ,MAAM,CAACC,IAAI,CAACT,UAAU,CAAC,CAACU,MAAM,CAAC,UAACC,yBAAyB,EAAEC,cAAc,EAAK;IACnFD,yBAAyB,CAACX,UAAU,CAACY,cAAc,CAAC,CAACd,KAAK,CAAC,GAAGE,UAAU,CAACY,cAAc,CAAC,CAACC,KAAK;IAC9F,OAAOF,yBAAyB;EAClC,CAAC,EAAE,CAAC,CAAC,CAAC;AACR"}
|
|
@@ -11,32 +11,69 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
11
11
|
// https://gitlab.com/catamphetamine/read-excel-file/-/work_items/115
|
|
12
12
|
// Because of that, `saxen` source code had to be copy-pasted.
|
|
13
13
|
//
|
|
14
|
+
// Not to mention that it would have to be copy-pasted anyway for compatiblity with `worker-f`
|
|
15
|
+
// because `Parser` is not a "self-contained" function.
|
|
16
|
+
//
|
|
14
17
|
// import { Parser } from 'saxen'
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Parses XML markup in a streaming fashion by calling the supplied callback functions as the XML markup is being input.
|
|
21
|
+
* @param {any} state — The initial `state`. This `state` will supposedly be modified by the callback functions as the XML is being parsed.
|
|
22
|
+
* @param {function} [onOpenTag]
|
|
23
|
+
* @param {function} [onCloseTag]
|
|
24
|
+
* @param {function} [onText]
|
|
25
|
+
* @returns {object} An object with properties: `promise`, `write(string)`, `end()`. The `promise` resolves with nothing.
|
|
26
|
+
*/
|
|
27
|
+
function parseXmlStream(state, onOpenTag, onCloseTag, onText) {
|
|
28
|
+
var errored = false;
|
|
29
|
+
var mustNotHaveErrored = function mustNotHaveErrored() {
|
|
30
|
+
if (errored) {
|
|
31
|
+
// If this error is thrown then it means that there's a bug in the code
|
|
32
|
+
// because the code should not have got here if the XML parsing process
|
|
33
|
+
// has already errored.
|
|
34
|
+
throw new Error('Errored');
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var resolvePromise;
|
|
38
|
+
var xmlns = true;
|
|
39
|
+
|
|
40
|
+
// `proxy: true` option enables "proxy" mode.
|
|
41
|
+
//
|
|
42
|
+
// In "proxy" mode, `onopentag` and `onclosetag` receive slightly different arguments:
|
|
43
|
+
// * element name is replaced with element object
|
|
44
|
+
// * getAttribute() function is not passed
|
|
45
|
+
//
|
|
46
|
+
var parser = new _parser["default"]({
|
|
47
|
+
proxy: true
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// Parse XML "namespaces" (`xmlns` stuff).
|
|
51
|
+
if (xmlns) {
|
|
52
|
+
parser.ns();
|
|
27
53
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
54
|
+
var write = function write(xml) {
|
|
55
|
+
mustNotHaveErrored();
|
|
56
|
+
parser.write(xml);
|
|
57
|
+
};
|
|
58
|
+
var end = function end() {
|
|
59
|
+
mustNotHaveErrored();
|
|
60
|
+
parser.end();
|
|
61
|
+
resolvePromise();
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// This `promise` resolves with the final `state` when finished parsing.
|
|
65
|
+
var promise = new Promise(function (resolve, reject) {
|
|
66
|
+
resolvePromise = resolve;
|
|
32
67
|
|
|
33
|
-
//
|
|
68
|
+
// on XML parsing error
|
|
34
69
|
var onerror = function onerror(error) {
|
|
35
|
-
if (errored) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
70
|
errored = true;
|
|
39
|
-
|
|
71
|
+
// If the error is not re-thrown here, the parser will simply keep parsing,
|
|
72
|
+
// i.e. it doesn't halt after encountering an error and doesn't require manual resuming.
|
|
73
|
+
// So it must re-throw the error here in order for the parser to stop.
|
|
74
|
+
// Because the error is thrown inside a `new Promise()` constructor,
|
|
75
|
+
// the promise will reject automatically.
|
|
76
|
+
throw error;
|
|
40
77
|
};
|
|
41
78
|
|
|
42
79
|
// got some text. `text` is the string of text.
|
|
@@ -72,30 +109,19 @@ function parseXmlStream(xml, _ref) {
|
|
|
72
109
|
onCloseTag(tagName, state);
|
|
73
110
|
}
|
|
74
111
|
};
|
|
75
|
-
|
|
76
|
-
// `proxy: true` option enables "proxy" mode.
|
|
77
|
-
//
|
|
78
|
-
// In "proxy" mode, `onopentag` and `onclosetag` receive slightly different arguments:
|
|
79
|
-
// * element name is replaced with element object
|
|
80
|
-
// * getAttribute() function is not passed
|
|
81
|
-
//
|
|
82
|
-
var parser = new _parser["default"]({
|
|
83
|
-
proxy: true
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
// Parse XML "namespaces" (`xmlns` stuff).
|
|
87
|
-
if (xmlns) {
|
|
88
|
-
parser.ns();
|
|
89
|
-
}
|
|
90
112
|
parser.on('error', onerror);
|
|
91
113
|
parser.on('text', ontext);
|
|
92
114
|
parser.on('openTag', onopentag);
|
|
93
115
|
parser.on('closeTag', onclosetag);
|
|
94
|
-
parser.parse(xml);
|
|
95
|
-
if (errored) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
resolve(state);
|
|
99
116
|
});
|
|
117
|
+
return {
|
|
118
|
+
promise: promise,
|
|
119
|
+
write: write,
|
|
120
|
+
end: end
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
var TAG_NAME_PREFIX = /.+:/;
|
|
124
|
+
function trimXmlnsPrefix(tagName) {
|
|
125
|
+
return tagName.replace(TAG_NAME_PREFIX, '');
|
|
100
126
|
}
|
|
101
127
|
//# sourceMappingURL=parseXmlStream.saxen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseXmlStream.saxen.js","names":["_parser","_interopRequireDefault","require","obj","__esModule","parseXmlStream","
|
|
1
|
+
{"version":3,"file":"parseXmlStream.saxen.js","names":["_parser","_interopRequireDefault","require","obj","__esModule","parseXmlStream","state","onOpenTag","onCloseTag","onText","errored","mustNotHaveErrored","Error","resolvePromise","xmlns","parser","Parser","proxy","ns","write","xml","end","promise","Promise","resolve","reject","onerror","error","ontext","text","decodeEntities","onopentag","element","selfClosing","getContext","attributes","attrs","name","trimXmlnsPrefix","originalName","onclosetag","tagName","on","TAG_NAME_PREFIX","replace"],"sources":["../../source/xml/parseXmlStream.saxen.js"],"sourcesContent":["// Starting from version `11.x`, `saxen` dropped CommonJS export.\r\n// CommonJS compatibility was requested by one of the users of this package:\r\n// https://gitlab.com/catamphetamine/read-excel-file/-/work_items/115\r\n// Because of that, `saxen` source code had to be copy-pasted.\r\n//\r\n// Not to mention that it would have to be copy-pasted anyway for compatiblity with `worker-f`\r\n// because `Parser` is not a \"self-contained\" function.\r\n//\r\n// import { Parser } from 'saxen'\r\nimport Parser from '../saxen/parser.js'\r\n\r\n/**\r\n * Parses XML markup in a streaming fashion by calling the supplied callback functions as the XML markup is being input.\r\n * @param {any} state — The initial `state`. This `state` will supposedly be modified by the callback functions as the XML is being parsed.\r\n * @param {function} [onOpenTag]\r\n * @param {function} [onCloseTag]\r\n * @param {function} [onText]\r\n * @returns {object} An object with properties: `promise`, `write(string)`, `end()`. The `promise` resolves with nothing.\r\n */\r\nexport default function parseXmlStream(\r\n state,\r\n onOpenTag,\r\n onCloseTag,\r\n onText\r\n) {\r\n let errored = false\r\n\r\n const mustNotHaveErrored = () => {\r\n if (errored) {\r\n // If this error is thrown then it means that there's a bug in the code\r\n // because the code should not have got here if the XML parsing process\r\n // has already errored.\r\n throw new Error('Errored')\r\n }\r\n }\r\n\r\n let resolvePromise\r\n\r\n const xmlns = true\r\n\r\n // `proxy: true` option enables \"proxy\" mode.\r\n //\r\n // In \"proxy\" mode, `onopentag` and `onclosetag` receive slightly different arguments:\r\n // * element name is replaced with element object\r\n // * getAttribute() function is not passed\r\n //\r\n const parser = new Parser({ proxy: true })\r\n\r\n // Parse XML \"namespaces\" (`xmlns` stuff).\r\n if (xmlns) {\r\n parser.ns()\r\n }\r\n\r\n const write = (xml) => {\r\n mustNotHaveErrored()\r\n parser.write(xml)\r\n }\r\n\r\n const end = () => {\r\n mustNotHaveErrored()\r\n parser.end()\r\n\t\tresolvePromise()\r\n }\r\n\r\n\t// This `promise` resolves with the final `state` when finished parsing.\r\n\tconst promise = new Promise((resolve, reject) => {\r\n resolvePromise = resolve\r\n\r\n // on XML parsing error\r\n const onerror = (error) => {\r\n errored = true\r\n // If the error is not re-thrown here, the parser will simply keep parsing,\r\n // i.e. it doesn't halt after encountering an error and doesn't require manual resuming.\r\n // So it must re-throw the error here in order for the parser to stop.\r\n // Because the error is thrown inside a `new Promise()` constructor,\r\n // the promise will reject automatically.\r\n throw error\r\n }\r\n\r\n // got some text. `text` is the string of text.\r\n const ontext = (text, decodeEntities) => {\r\n if (onText) {\r\n\t\t\t\t// `saxen` doesn't decode character references (`é`, `&`, etc) in text:\r\n\t\t\t\t// instead, it provides a `decodeEntities()` function for the consumer to call.\r\n\t\t\t\tonText(decodeEntities(text), state)\r\n }\r\n }\r\n\r\n // opened a tag. `node` has \"name\" and \"attributes\"\r\n const onopentag = (element, decodeEntities, selfClosing, getContext) => {\r\n if (onOpenTag) {\r\n\t\t\t\t// `saxen` doesn't decode character references (`é`, `&`, etc)\r\n\t\t\t\t// in attribute values either, so decode them here.\r\n\t\t\t\tconst attributes = element.attrs\r\n\t\t\t\tfor (const name in attributes) {\r\n\t\t\t\t\tattributes[name] = decodeEntities(attributes[name])\r\n\t\t\t\t}\r\n // * `element.originalName` — The tag name as written in the XML string, retaining the original prefix regardless of the list of pre-configured namespace mappings.\r\n // * `element.name` — The tag name with the namespace prefix resolved against the list of pre-configured namespace mappings. I.e. the namespace prefix will potentially be replaced with one from the pre-configured namespace map.\r\n onOpenTag(\r\n xmlns ? trimXmlnsPrefix(element.originalName) : element.name,\r\n\t\t\t\t\tattributes,\r\n state\r\n )\r\n }\r\n }\r\n\r\n // closed a tag.\r\n const onclosetag = (element) => {\r\n if (onCloseTag) {\r\n // * `element.originalName` — The tag name as written in the XML string, retaining the original prefix regardless of the list of pre-configured namespace mappings.\r\n // * `element.name` — The tag name with the namespace prefix resolved against the list of pre-configured namespace mappings. I.e. the namespace prefix will potentially be replaced with one from the pre-configured namespace map.\r\n const tagName = xmlns ? trimXmlnsPrefix(element.originalName) : element.name\r\n onCloseTag(tagName, state)\r\n }\r\n }\r\n\r\n parser.on('error', onerror)\r\n parser.on('text', ontext)\r\n parser.on('openTag', onopentag)\r\n parser.on('closeTag', onclosetag)\r\n })\r\n\r\n return { promise, write, end }\r\n}\r\n\r\nconst TAG_NAME_PREFIX = /.+:/\r\nfunction trimXmlnsPrefix(tagName) {\r\n return tagName.replace(TAG_NAME_PREFIX, '')\r\n}"],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
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); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createUnzipError = createUnzipError;
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
10
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
11
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
12
|
+
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); }
|
|
13
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
14
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
15
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
16
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
|
17
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
18
|
+
function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
|
|
19
|
+
function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
|
|
20
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
21
|
+
function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
|
|
22
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
23
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
24
|
+
var UnzipError = exports["default"] = /*#__PURE__*/function (_Error) {
|
|
25
|
+
_inherits(UnzipError, _Error);
|
|
26
|
+
var _super = _createSuper(UnzipError);
|
|
27
|
+
function UnzipError() {
|
|
28
|
+
_classCallCheck(this, UnzipError);
|
|
29
|
+
return _super.apply(this, arguments);
|
|
30
|
+
}
|
|
31
|
+
return _createClass(UnzipError);
|
|
32
|
+
}( /*#__PURE__*/_wrapNativeSuper(Error));
|
|
33
|
+
function createUnzipError(error) {
|
|
34
|
+
var unzipError = new UnzipError(error.message);
|
|
35
|
+
// Keep original stack if it exists
|
|
36
|
+
if (error.stack) {
|
|
37
|
+
unzipError.stack = error.stack;
|
|
38
|
+
}
|
|
39
|
+
// Clean up stack trace a bit in Node.js/V8 environments
|
|
40
|
+
if (Error.captureStackTrace) {
|
|
41
|
+
Error.captureStackTrace(unzipError, createUnzipError);
|
|
42
|
+
}
|
|
43
|
+
// `Error.prototype.cause` property indicates the specific, original reason
|
|
44
|
+
// a given error occurred. Standardized in ES2022, it allows you to chain errors
|
|
45
|
+
// by catching a low-level exception and re-throwing a meaningful, high-level error
|
|
46
|
+
// without wiping out the diagnostic context or stack trace of the original failure.
|
|
47
|
+
//
|
|
48
|
+
// Adding a `.cause` property mimics modern error chaining for environments that support it
|
|
49
|
+
// while remaining completely harmless in older systems.
|
|
50
|
+
//
|
|
51
|
+
unzipError.cause = error;
|
|
52
|
+
// Return the error.
|
|
53
|
+
return unzipError;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=UnzipError.js.map
|