read-excel-file 9.3.3 → 9.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +32 -2
  3. package/browser/index.cjs +3 -0
  4. package/browser/index.d.ts +16 -0
  5. package/browser/index.js +4 -1
  6. package/bundle/read-excel-file.min.js +1 -1
  7. package/bundle/read-excel-file.min.js.map +1 -1
  8. package/commonjs/export/convertInputToNodeStream.js +0 -12
  9. package/commonjs/export/convertInputToNodeStream.js.map +1 -1
  10. package/commonjs/export/parseSheet.js +14 -7
  11. package/commonjs/export/parseSheet.js.map +1 -1
  12. package/commonjs/export/readSheetBrowser.js +3 -6
  13. package/commonjs/export/readSheetBrowser.js.map +1 -1
  14. package/commonjs/export/readSheetNode.js +3 -6
  15. package/commonjs/export/readSheetNode.js.map +1 -1
  16. package/commonjs/export/readSheetUniversal.js +2 -2
  17. package/commonjs/export/readSheetUniversal.js.map +1 -1
  18. package/commonjs/export/readSheetWebWorker.js +5 -5
  19. package/commonjs/export/readSheetWebWorker.js.map +1 -1
  20. package/commonjs/export/readXlsxFileBrowser.js +3 -6
  21. package/commonjs/export/readXlsxFileBrowser.js.map +1 -1
  22. package/commonjs/export/readXlsxFileNode.js +3 -6
  23. package/commonjs/export/readXlsxFileNode.js.map +1 -1
  24. package/commonjs/export/readXlsxFileUniversal.js +2 -2
  25. package/commonjs/export/readXlsxFileUniversal.js.map +1 -1
  26. package/commonjs/export/readXlsxFileWebWorker.js +5 -5
  27. package/commonjs/export/readXlsxFileWebWorker.js.map +1 -1
  28. package/commonjs/export/unpackXlsxFileBrowser.js +15 -4
  29. package/commonjs/export/unpackXlsxFileBrowser.js.map +1 -1
  30. package/commonjs/export/unpackXlsxFileBrowser.test.js.map +1 -0
  31. package/commonjs/export/unpackXlsxFileNode.js +32 -5
  32. package/commonjs/export/unpackXlsxFileNode.js.map +1 -1
  33. package/commonjs/export/unpackXlsxFileNode.test.js.map +1 -0
  34. package/commonjs/export/unpackXlsxFileUniversal.js +14 -3
  35. package/commonjs/export/unpackXlsxFileUniversal.js.map +1 -1
  36. package/commonjs/export/unpackXlsxFileUniversal.test.js.map +1 -0
  37. package/commonjs/parseSheetData/parseSheetData.js +9 -6
  38. package/commonjs/parseSheetData/parseSheetData.js.map +1 -1
  39. package/commonjs/saxen/parser.js +1 -1
  40. package/commonjs/saxen/parser.js.map +1 -1
  41. package/commonjs/utility/convertValuesFromUint8ArraysToStrings.js +100 -0
  42. package/commonjs/utility/convertValuesFromUint8ArraysToStrings.js.map +1 -0
  43. package/commonjs/xlsx/InvalidSpreadsheetError.js +55 -0
  44. package/commonjs/xlsx/InvalidSpreadsheetError.js.map +1 -0
  45. package/commonjs/xlsx/SheetNotFoundError.js +55 -0
  46. package/commonjs/xlsx/SheetNotFoundError.js.map +1 -0
  47. package/commonjs/xlsx/file/InputValidationStream.js +101 -0
  48. package/commonjs/xlsx/file/InputValidationStream.js.map +1 -0
  49. package/commonjs/xlsx/file/InputValidationStream.test.js.map +1 -0
  50. package/commonjs/xlsx/file/InvalidInputError.js +105 -0
  51. package/commonjs/xlsx/file/InvalidInputError.js.map +1 -0
  52. package/commonjs/xlsx/file/createFileTypeDetector.js +70 -0
  53. package/commonjs/xlsx/file/createFileTypeDetector.js.map +1 -0
  54. package/commonjs/xlsx/file/createFileTypeDetector.test.js.map +1 -0
  55. package/commonjs/xlsx/file/validateLeadingBytes.js +47 -0
  56. package/commonjs/xlsx/file/validateLeadingBytes.js.map +1 -0
  57. package/commonjs/xlsx/file/validateLeadingBytes.test.js.map +1 -0
  58. package/commonjs/xlsx/isDateFormat.js +32 -27
  59. package/commonjs/xlsx/isDateFormat.js.map +1 -1
  60. package/commonjs/xlsx/isDateFormatStyle.js +19 -21
  61. package/commonjs/xlsx/isDateFormatStyle.js.map +1 -1
  62. package/commonjs/xlsx/parseCell.js +252 -115
  63. package/commonjs/xlsx/parseCell.js.map +1 -1
  64. package/commonjs/xlsx/parseCellAddress.js +22 -18
  65. package/commonjs/xlsx/parseCellAddress.js.map +1 -1
  66. package/commonjs/xlsx/parseExcelDate.js +4 -124
  67. package/commonjs/xlsx/parseExcelDate.js.map +1 -1
  68. package/commonjs/xlsx/parseExcelDate.test.js.map +1 -1
  69. package/commonjs/xlsx/parseExcelTimestamp.js +139 -0
  70. package/commonjs/xlsx/parseExcelTimestamp.js.map +1 -0
  71. package/commonjs/xlsx/parseFilePaths.js +48 -47
  72. package/commonjs/xlsx/parseFilePaths.js.map +1 -1
  73. package/commonjs/xlsx/parseSharedStrings.js +91 -36
  74. package/commonjs/xlsx/parseSharedStrings.js.map +1 -1
  75. package/commonjs/xlsx/parseSheet.js +527 -69
  76. package/commonjs/xlsx/parseSheet.js.map +1 -1
  77. package/commonjs/xlsx/parseSpreadsheetContents.js +154 -83
  78. package/commonjs/xlsx/parseSpreadsheetContents.js.map +1 -1
  79. package/commonjs/xlsx/parseSpreadsheetInfo.js +60 -59
  80. package/commonjs/xlsx/parseSpreadsheetInfo.js.map +1 -1
  81. package/commonjs/xlsx/parseStyles.js +75 -75
  82. package/commonjs/xlsx/parseStyles.js.map +1 -1
  83. package/commonjs/xml/parseXml.js +112 -0
  84. package/commonjs/xml/parseXml.js.map +1 -0
  85. package/commonjs/xml/parseXml.test.js.map +1 -0
  86. package/commonjs/xml/parseXmlStream.js.map +1 -1
  87. package/commonjs/xml/parseXmlStream.sax.js +69 -28
  88. package/commonjs/xml/parseXmlStream.sax.js.map +1 -1
  89. package/commonjs/xml/parseXmlStream.saxen.js +66 -40
  90. package/commonjs/xml/parseXmlStream.saxen.js.map +1 -1
  91. package/commonjs/zip/UnzipError.js +55 -0
  92. package/commonjs/zip/UnzipError.js.map +1 -0
  93. package/commonjs/zip/unzipFromArrayBuffer.js +21 -1
  94. package/commonjs/zip/unzipFromArrayBuffer.js.map +1 -1
  95. package/commonjs/zip/unzipFromArrayBuffer.test.js.map +1 -0
  96. package/commonjs/zip/unzipFromStream.fflate.js +43 -35
  97. package/commonjs/zip/unzipFromStream.fflate.js.map +1 -1
  98. package/commonjs/zip/unzipFromStream.js +188 -6
  99. package/commonjs/zip/unzipFromStream.js.map +1 -1
  100. package/commonjs/zip/unzipFromStream.unzipper.js +19 -34
  101. package/commonjs/zip/unzipFromStream.unzipper.js.map +1 -1
  102. package/modules/export/convertInputToNodeStream.js +0 -12
  103. package/modules/export/convertInputToNodeStream.js.map +1 -1
  104. package/modules/export/parseSheet.js +13 -6
  105. package/modules/export/parseSheet.js.map +1 -1
  106. package/modules/export/readSheetBrowser.js +3 -5
  107. package/modules/export/readSheetBrowser.js.map +1 -1
  108. package/modules/export/readSheetNode.js +3 -5
  109. package/modules/export/readSheetNode.js.map +1 -1
  110. package/modules/export/readSheetUniversal.js +2 -2
  111. package/modules/export/readSheetUniversal.js.map +1 -1
  112. package/modules/export/readSheetWebWorker.js +7 -8
  113. package/modules/export/readSheetWebWorker.js.map +1 -1
  114. package/modules/export/readXlsxFileBrowser.js +3 -5
  115. package/modules/export/readXlsxFileBrowser.js.map +1 -1
  116. package/modules/export/readXlsxFileNode.js +3 -5
  117. package/modules/export/readXlsxFileNode.js.map +1 -1
  118. package/modules/export/readXlsxFileUniversal.js +2 -2
  119. package/modules/export/readXlsxFileUniversal.js.map +1 -1
  120. package/modules/export/readXlsxFileWebWorker.js +7 -8
  121. package/modules/export/readXlsxFileWebWorker.js.map +1 -1
  122. package/modules/export/unpackXlsxFileBrowser.js +15 -4
  123. package/modules/export/unpackXlsxFileBrowser.js.map +1 -1
  124. package/modules/export/unpackXlsxFileBrowser.test.js.map +1 -0
  125. package/modules/export/unpackXlsxFileNode.js +32 -5
  126. package/modules/export/unpackXlsxFileNode.js.map +1 -1
  127. package/modules/export/unpackXlsxFileNode.test.js.map +1 -0
  128. package/modules/export/unpackXlsxFileUniversal.js +14 -3
  129. package/modules/export/unpackXlsxFileUniversal.js.map +1 -1
  130. package/modules/export/unpackXlsxFileUniversal.test.js.map +1 -0
  131. package/modules/parseSheetData/parseSheetData.js +9 -6
  132. package/modules/parseSheetData/parseSheetData.js.map +1 -1
  133. package/modules/saxen/parser.js +1 -1
  134. package/modules/saxen/parser.js.map +1 -1
  135. package/modules/utility/convertValuesFromUint8ArraysToStrings.js +92 -0
  136. package/modules/utility/convertValuesFromUint8ArraysToStrings.js.map +1 -0
  137. package/modules/xlsx/InvalidSpreadsheetError.js +50 -0
  138. package/modules/xlsx/InvalidSpreadsheetError.js.map +1 -0
  139. package/modules/xlsx/SheetNotFoundError.js +50 -0
  140. package/modules/xlsx/SheetNotFoundError.js.map +1 -0
  141. package/modules/xlsx/file/InputValidationStream.js +96 -0
  142. package/modules/xlsx/file/InputValidationStream.js.map +1 -0
  143. package/modules/xlsx/file/InputValidationStream.test.js.map +1 -0
  144. package/modules/xlsx/file/InvalidInputError.js +100 -0
  145. package/modules/xlsx/file/InvalidInputError.js.map +1 -0
  146. package/modules/xlsx/file/createFileTypeDetector.js +63 -0
  147. package/modules/xlsx/file/createFileTypeDetector.js.map +1 -0
  148. package/modules/xlsx/file/createFileTypeDetector.test.js.map +1 -0
  149. package/modules/xlsx/file/validateLeadingBytes.js +37 -0
  150. package/modules/xlsx/file/validateLeadingBytes.js.map +1 -0
  151. package/modules/xlsx/file/validateLeadingBytes.test.js.map +1 -0
  152. package/modules/xlsx/isDateFormat.js +31 -27
  153. package/modules/xlsx/isDateFormat.js.map +1 -1
  154. package/modules/xlsx/isDateFormatStyle.js +18 -21
  155. package/modules/xlsx/isDateFormatStyle.js.map +1 -1
  156. package/modules/xlsx/parseCell.js +251 -111
  157. package/modules/xlsx/parseCell.js.map +1 -1
  158. package/modules/xlsx/parseCellAddress.js +21 -18
  159. package/modules/xlsx/parseCellAddress.js.map +1 -1
  160. package/modules/xlsx/parseExcelDate.js +4 -124
  161. package/modules/xlsx/parseExcelDate.js.map +1 -1
  162. package/modules/xlsx/parseExcelDate.test.js.map +1 -1
  163. package/modules/xlsx/parseExcelTimestamp.js +133 -0
  164. package/modules/xlsx/parseExcelTimestamp.js.map +1 -0
  165. package/modules/xlsx/parseFilePaths.js +48 -47
  166. package/modules/xlsx/parseFilePaths.js.map +1 -1
  167. package/modules/xlsx/parseSharedStrings.js +91 -37
  168. package/modules/xlsx/parseSharedStrings.js.map +1 -1
  169. package/modules/xlsx/parseSheet.js +526 -68
  170. package/modules/xlsx/parseSheet.js.map +1 -1
  171. package/modules/xlsx/parseSpreadsheetContents.js +153 -81
  172. package/modules/xlsx/parseSpreadsheetContents.js.map +1 -1
  173. package/modules/xlsx/parseSpreadsheetInfo.js +60 -59
  174. package/modules/xlsx/parseSpreadsheetInfo.js.map +1 -1
  175. package/modules/xlsx/parseStyles.js +75 -75
  176. package/modules/xlsx/parseStyles.js.map +1 -1
  177. package/modules/xml/parseXml.js +106 -0
  178. package/modules/xml/parseXml.js.map +1 -0
  179. package/modules/xml/parseXml.test.js.map +1 -0
  180. package/modules/xml/parseXmlStream.js +2 -0
  181. package/modules/xml/parseXmlStream.js.map +1 -1
  182. package/modules/xml/parseXmlStream.sax.js +69 -28
  183. package/modules/xml/parseXmlStream.sax.js.map +1 -1
  184. package/modules/xml/parseXmlStream.saxen.js +67 -40
  185. package/modules/xml/parseXmlStream.saxen.js.map +1 -1
  186. package/modules/zip/UnzipError.js +49 -0
  187. package/modules/zip/UnzipError.js.map +1 -0
  188. package/modules/zip/unzipFromArrayBuffer.js +21 -1
  189. package/modules/zip/unzipFromArrayBuffer.js.map +1 -1
  190. package/modules/zip/unzipFromArrayBuffer.test.js.map +1 -0
  191. package/modules/zip/unzipFromStream.fflate.js +41 -35
  192. package/modules/zip/unzipFromStream.fflate.js.map +1 -1
  193. package/modules/zip/unzipFromStream.js +124 -1
  194. package/modules/zip/unzipFromStream.js.map +1 -1
  195. package/modules/zip/unzipFromStream.unzipper.js +19 -35
  196. package/modules/zip/unzipFromStream.unzipper.js.map +1 -1
  197. package/node/index.cjs +3 -0
  198. package/node/index.d.ts +16 -0
  199. package/node/index.js +3 -0
  200. package/package.json +5 -3
  201. package/types/InvalidInputError.d.ts +16 -0
  202. package/types/InvalidSpreadsheetError.d.ts +4 -0
  203. package/types/SheetNotFoundError.d.ts +4 -0
  204. package/universal/index.cjs +3 -0
  205. package/universal/index.d.ts +16 -0
  206. package/universal/index.js +3 -0
  207. package/web-worker/index.cjs +3 -0
  208. package/web-worker/index.d.ts +16 -0
  209. package/web-worker/index.js +3 -0
  210. package/commonjs/export/convertValuesFromUint8ArraysToStrings.js +0 -23
  211. package/commonjs/export/convertValuesFromUint8ArraysToStrings.js.map +0 -1
  212. package/commonjs/xlsx/convertCellsToData2dArray.js +0 -84
  213. package/commonjs/xlsx/convertCellsToData2dArray.js.map +0 -1
  214. package/commonjs/xlsx/dropEmptyColumns.js +0 -40
  215. package/commonjs/xlsx/dropEmptyColumns.js.map +0 -1
  216. package/commonjs/xlsx/dropEmptyColumns.test.js.map +0 -1
  217. package/commonjs/xlsx/dropEmptyRows.js +0 -43
  218. package/commonjs/xlsx/dropEmptyRows.js.map +0 -1
  219. package/commonjs/xlsx/dropEmptyRows.test.js.map +0 -1
  220. package/commonjs/xlsx/parseCellValue.js +0 -186
  221. package/commonjs/xlsx/parseCellValue.js.map +0 -1
  222. package/commonjs/xlsx/parseNumber.js +0 -20
  223. package/commonjs/xlsx/parseNumber.js.map +0 -1
  224. package/commonjs/xlsx/parseSharedString.js +0 -64
  225. package/commonjs/xlsx/parseSharedString.js.map +0 -1
  226. package/commonjs/xlsx/parseSheetData.js +0 -68
  227. package/commonjs/xlsx/parseSheetData.js.map +0 -1
  228. package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js +0 -29
  229. package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +0 -1
  230. package/commonjs/xml/parseXmlStream.saxen.code.js +0 -953
  231. package/commonjs/xml/parseXmlStream.saxen.code.js.map +0 -1
  232. package/commonjs/xml/parseXmlStream.test.js.map +0 -1
  233. package/modules/export/convertValuesFromUint8ArraysToStrings.js +0 -17
  234. package/modules/export/convertValuesFromUint8ArraysToStrings.js.map +0 -1
  235. package/modules/xlsx/convertCellsToData2dArray.js +0 -77
  236. package/modules/xlsx/convertCellsToData2dArray.js.map +0 -1
  237. package/modules/xlsx/dropEmptyColumns.js +0 -34
  238. package/modules/xlsx/dropEmptyColumns.js.map +0 -1
  239. package/modules/xlsx/dropEmptyColumns.test.js.map +0 -1
  240. package/modules/xlsx/dropEmptyRows.js +0 -37
  241. package/modules/xlsx/dropEmptyRows.js.map +0 -1
  242. package/modules/xlsx/dropEmptyRows.test.js.map +0 -1
  243. package/modules/xlsx/parseCellValue.js +0 -180
  244. package/modules/xlsx/parseCellValue.js.map +0 -1
  245. package/modules/xlsx/parseNumber.js +0 -14
  246. package/modules/xlsx/parseNumber.js.map +0 -1
  247. package/modules/xlsx/parseSharedString.js +0 -55
  248. package/modules/xlsx/parseSharedString.js.map +0 -1
  249. package/modules/xlsx/parseSheetData.js +0 -55
  250. package/modules/xlsx/parseSheetData.js.map +0 -1
  251. package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js +0 -23
  252. package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +0 -1
  253. package/modules/xml/parseXmlStream.saxen.code.js +0 -947
  254. package/modules/xml/parseXmlStream.saxen.code.js.map +0 -1
  255. package/modules/xml/parseXmlStream.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"parseSheetData.js","names":["_Number","_interopRequireDefault","require","_String","_Boolean","_Date","_isObject","_checkpoint","obj","__esModule","_typeof","o","Symbol","iterator","constructor","prototype","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","r","l","t","e","n","u","a","f","call","next","Object","done","push","value","length","_toArray","_iterableToArray","TypeError","iter","Array","from","isArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","toPrimitive","undefined","res","Number","_createForOfIteratorHelperLoose","allowArrayLike","it","bind","minLen","_arrayLikeToArray","toString","slice","name","test","len","arr2","parseSheetData","data","schema","optionsCustom","checkpoint","objects","errors","parsedRows","parseSheetDataWithPerRowErrors","parsedRowIndex","_iterator","_step","_step$value","object","rowErrors","concat","map","rowError","row","validateSchema","options","applyDefaultOptions","_data","columns","dataRows","parseDataRow","dataRow","schemaEntry","_parseProperty","parseProperty","isEmptyValue","children","dummyParentObject","PARSED_OBJECT_TREE_START","isRequired","requiredErrors","runPendingRequiredValidations","transformValue","parseObject","path","isEmptyObject","_i","_Object$keys","child","getPropertyPath","columnIndex","column","indexOf","isMissingColumn","_ref","propertyValueWhenColumnIsMissing","parseCellValueWithPossibleErrors","cellValue","_parseCellValue","parseCellValue","errorMessage","error","errorReason","reason","createError","valueType","type","propertyValueWhenCellIsEmpty","parseArrayValue","parseValue","isEmptyArray","reasons","values","parseSeparatedSubstrings","separatorCharacter","substring","_parseValue","result","parseValueOfType","oneOf","errorAndReason","validateOneOf","validate","message","parseValueUsingTypeParser","StringType","NumberType","Date","DateType","Boolean","BooleanType","Error","parsedValue","getNextSubstring","string","startIndex","character","elements","index","_getNextSubstring","_getNextSubstring2","trim","isObject","transformEmptyObject","transformEmptyArray","propertyName","parentObjectPath","parentObjectIsRequired","parentObjectValue","parentObjectValueIsEmpty","parentObjectErrors","isPropertyRequired","_iterator2","_step2","requiredErrorsOfChild","required","_ref2","_i2","_Object$keys2","validateObjectSchemaRequiredProperty","_i3","_Object$keys3","JSON","stringify","DEFAULT_OPTIONS"],"sources":["../../source/parseSheetData/parseSheetData.js"],"sourcesContent":["import NumberType from './types/Number.js'\r\nimport StringType from './types/String.js'\r\nimport BooleanType from './types/Boolean.js'\r\nimport DateType from './types/Date.js'\r\n\r\nimport isObject from '../utility/isObject.js'\r\nimport checkpoint from '../utility/checkpoint.js'\r\n\r\n/**\r\n * Converts spreadsheet-alike data structure into an array of JSON objects.\r\n *\r\n * Parameters:\r\n *\r\n * * `data` — An array of rows, each row being an array of cells. The first row should be the list of column headers and the rest of the rows should be the data.\r\n * * `schema` — A \"to JSON\" convertion schema (see above).\r\n * * `options` — (optional) Schema conversion parameters of `read-excel-file`:\r\n * * `propertyValueWhenColumnIsMissing` — By default, when some of the `schema` columns are missing in the input `data`, those properties are set to `undefined` in the output objects. Pass `propertyValueWhenColumnIsMissing: null` to set such \"missing column\" properties to `null` in the output objects.\r\n * * `propertyValueWhenCellIsEmpty` — By default, when it encounters a `null` value in a cell in input `data`, it sets it to `undefined` in the output object. Pass `propertyValueWhenCellIsEmpty: null` to make it set such values as `null`s in output objects.\r\n * // * `shouldSkipRequiredValidationWhenColumnIsMissing: (column: string, { object }) => boolean` — By default, it does apply `required` validation to `schema` properties for which columns are missing in the input `data`. One could pass a custom `shouldSkipRequiredValidationWhenColumnIsMissing(column, { object })` to disable `required` validation for missing columns in some or all cases.\r\n * * `transformEmptyObject(object, { path? })` — By default, it returns `null` for \"empty\" objects. One could override that value using `transformEmptyObject(object, { path })` parameter. The value applies to both top-level object and any nested sub-objects in case of a nested schema, hence the additional (optional) `path?: string` parameter.\r\n * * `transformEmptyArray(array, { path })` — By default, it returns `null` for an \"empty\" array value. One could override that value using `transformEmptyArray(array, { path })` parameter.\r\n * * `separatorCharacter` — By default, it splits array-type cell values by a comma character.\r\n *\r\n * When parsing a property value, in case of an error, the value of that property is gonna be `undefined`.\r\n *\r\n * @param {SheetData} data - An array of rows, each row being an array of cells.\r\n * @param {object} schema\r\n * @param {object} [options]\r\n * @param {any} [options.propertyValueWhenColumnIsMissing] — By default, when some of the `schema` columns are missing in the input `data`, those properties are set to `undefined` in the output objects. Pass `propertyValueWhenColumnIsMissing: null` to set such \"missing column\" properties to `null` in the output objects.\r\n * @param {any} [options.propertyValueWhenCellIsEmpty] — By default, when it encounters a `null` value in a cell in input `data`, it leaves the value as is. Pass a custom `propertyValueWhenCellIsEmpty` to make it set such values to that value.\r\n * // @param {boolean} [options.shouldSkipRequiredValidationWhenColumnIsMissing(column: string, { object })] — By default, it does apply `required` validation to `schema` properties for which columns are missing in the input `data`. One could pass a custom `shouldSkipRequiredValidationWhenColumnIsMissing(column, { object })` to disable `required` validation for missing columns in some or all cases.\r\n * @param {function} [options.transformEmptyObject(object, { path })] — By default, it returns `null` for an \"empty\" resulting object. One could override that value using `transformEmptyObject(object, { path })` parameter. The value applies to both top-level object and any nested sub-objects in case of a nested schema, hence the additional `path?: string` parameter.\r\n * @param {function} [options.transformEmptyArray(array, { path })] — By default, it returns `null` for an \"empty\" array value. One could override that value using `transformEmptyArray(array, { path })` parameter.\r\n * @param {string} [options.separatorCharacter] — When specified, string values will be split by this separator to get the array.\r\n * @return {object} — An object of shape `{ objects, errors }`. Either `objects` or `errors` is going to be `undefined`.\r\n */\r\nexport default function parseSheetData(data, schema, optionsCustom) {\r\n checkpoint('parse sheet data using schema')\r\n\r\n const objects = []\r\n let errors = []\r\n\r\n const parsedRows = parseSheetDataWithPerRowErrors(data, schema, optionsCustom)\r\n let parsedRowIndex = 0\r\n for (const { object, errors: rowErrors } of parsedRows) {\r\n if (rowErrors) {\r\n errors = errors.concat(\r\n rowErrors.map(\r\n // Add row number property to each row error.\r\n rowError => ({ ...rowError, row: parsedRowIndex + 1 })\r\n )\r\n )\r\n } else {\r\n objects.push(object)\r\n }\r\n parsedRowIndex++\r\n }\r\n\r\n checkpoint('end')\r\n\r\n if (errors.length > 0) {\r\n return { errors }\r\n }\r\n\r\n return { objects }\r\n}\r\n\r\n// This one is only used in tests.\r\nexport function parseSheetDataWithPerRowErrors(data, schema, optionsCustom) {\r\n validateSchema(schema)\r\n\r\n const options = applyDefaultOptions(optionsCustom)\r\n\r\n const [columns, ...dataRows] = data\r\n\r\n return dataRows.map(row => parseDataRow(row, schema, columns, options))\r\n}\r\n\r\nfunction parseDataRow(dataRow, schema, columns, options) {\r\n // Create a `schemaEntry` for the top-level object.\r\n const schemaEntry = {\r\n schema\r\n }\r\n\r\n // Parse the values in the given data row into an object.\r\n const {\r\n value,\r\n isEmptyValue,\r\n errors,\r\n children\r\n } = parseProperty(dataRow, schemaEntry, undefined, columns, options)\r\n\r\n // Simulate a \"dummy\" parent object for the top-level object.\r\n // It will be used when running `required` validations.\r\n const dummyParentObject = {\r\n // The \"dummy\" parent object has a \"dummy\" value.\r\n // This value is irrelevant because it won't be read anywhere.\r\n value: PARSED_OBJECT_TREE_START,\r\n // The \"dummy\" parent object is empty if the parsed row is empty.\r\n isEmptyValue,\r\n // The \"dummy\" object has the same errors as the parsed row.\r\n errors,\r\n // The parsed object by default is not required to have any data\r\n // so the \"dummy\" object is not required.\r\n isRequired: undefined\r\n }\r\n\r\n // Run any `required` validations.\r\n //\r\n // `required` validations should be run after the entire data row has been parsed,\r\n // i.e. when the entire object structure has been parsed.\r\n // The reason is that a `required` validation could be either a simple boolean or a \"complex\" function.\r\n // In the latter case, the result of a `required()` function may depend on any other property of the object,\r\n // hence the actual `required` flag value could only be obtained after the entire data row has been parsed.\r\n //\r\n // For example, consider a top-level object:\r\n //\r\n // {\r\n // firstName: string,\r\n // lastName: string,\r\n // pet?: { name: string }\r\n // }\r\n //\r\n // A corresponding schema would be:\r\n //\r\n // {\r\n // firstName: {\r\n // required: true\r\n // },\r\n // lastName: {\r\n // required: true\r\n // },\r\n // pet: {\r\n // required: false,\r\n // schema: {\r\n // name: {\r\n // required: true\r\n // }\r\n // }\r\n // }\r\n // }\r\n //\r\n // I.e. when a `pet` exists, it must have a `name`.\r\n //\r\n // In such case, the `required: true` check of the `pet`'s `name` property\r\n // should not be performed if the `pet` is not present, because the `pet` nested object\r\n // is marked as `required: false`, meaning that `pet` data is not required to be present.\r\n //\r\n const requiredErrors = runPendingRequiredValidations(\r\n schemaEntry,\r\n value,\r\n isEmptyValue,\r\n errors,\r\n children,\r\n // Simulate a \"dummy\" parent object for the top-level object.\r\n dummyParentObject.isRequired,\r\n dummyParentObject.value,\r\n dummyParentObject.isEmptyValue,\r\n dummyParentObject.errors,\r\n columns\r\n )\r\n\r\n // If there were any errors, whether caused by `required`\r\n // or occured while parsing the values, return those errors.\r\n if (errors || requiredErrors) {\r\n return {\r\n errors: (errors || []).concat(requiredErrors || [])\r\n }\r\n }\r\n\r\n // Return the parsed object.\r\n return {\r\n object: transformValue(value, isEmptyValue, undefined, options)\r\n }\r\n}\r\n\r\nfunction parseObject(row, schema, path, columns, options) {\r\n const object = {}\r\n let isEmptyObject = true\r\n\r\n let errors = []\r\n\r\n const children = []\r\n\r\n // For each property of the object.\r\n for (const key of Object.keys(schema)) {\r\n const child = parseProperty(row, schema[key], getPropertyPath(key, path), columns, options)\r\n\r\n if (child.errors) {\r\n errors = errors.concat(child.errors)\r\n } else {\r\n object[key] = transformValue(child.value, child.isEmptyValue, getPropertyPath(key, path), options)\r\n // Potentially unmark the object as \"empty\".\r\n if (isEmptyObject && !child.isEmptyValue) {\r\n isEmptyObject = false\r\n }\r\n }\r\n\r\n children.push({\r\n ...child,\r\n // `schemaEntry` will be used when running `required` validation of this property (later),\r\n schemaEntry: schema[key]\r\n })\r\n }\r\n\r\n // If there were any errors, return them.\r\n if (errors.length > 0) {\r\n return {\r\n // Return the errors.\r\n errors,\r\n // Return the `children` because `required` validations still have to be run (later).\r\n children\r\n }\r\n }\r\n\r\n return {\r\n value: object,\r\n isEmptyValue: isEmptyObject,\r\n // Return the `children` because `required` validations still have to be run (later).\r\n children\r\n }\r\n}\r\n\r\nfunction parseProperty(row, schemaEntry, path, columns, options) {\r\n const columnIndex = schemaEntry.column ? columns.indexOf(schemaEntry.column) : undefined\r\n const isMissingColumn = schemaEntry.column ? columnIndex < 0 : undefined\r\n\r\n const {\r\n value,\r\n isEmptyValue,\r\n errors,\r\n children\r\n } = schemaEntry.column\r\n ? (\r\n isMissingColumn\r\n ? { value: options.propertyValueWhenColumnIsMissing, isEmptyValue: true }\r\n : parseCellValueWithPossibleErrors(row[columnIndex], schemaEntry, columnIndex, options)\r\n )\r\n : parseObject(\r\n row,\r\n schemaEntry.schema,\r\n path,\r\n columns,\r\n options\r\n )\r\n\r\n // If there were any errors, return them.\r\n if (errors) {\r\n return {\r\n // Return the errors.\r\n errors,\r\n // Return the `children` because `required` validations still have to be run (later).\r\n children\r\n }\r\n }\r\n\r\n return {\r\n value,\r\n isEmptyValue,\r\n // Return the `children` because `required` validations still have to be run (later).\r\n children\r\n }\r\n}\r\n\r\nfunction parseCellValueWithPossibleErrors(cellValue, schemaEntry, columnIndex, options) {\r\n const {\r\n value,\r\n isEmptyValue,\r\n error: errorMessage,\r\n reason: errorReason\r\n } = parseCellValue(cellValue, schemaEntry, options)\r\n\r\n if (errorMessage) {\r\n const error = createError({\r\n error: errorMessage,\r\n reason: errorReason,\r\n column: schemaEntry.column,\r\n columnIndex,\r\n valueType: schemaEntry.type,\r\n value: cellValue\r\n })\r\n return {\r\n errors: [error]\r\n }\r\n }\r\n\r\n return {\r\n value,\r\n isEmptyValue\r\n }\r\n}\r\n\r\n/**\r\n * Converts a cell value value to a javascript typed value.\r\n * @param {any} cellValue\r\n * @param {object} schemaEntry\r\n * @param {string} propertyPath\r\n * @param {object} options\r\n * @return {{ value?: any, isEmptyValue: boolean } | { error: string, reason?: string }}\r\n */\r\nfunction parseCellValue(cellValue, schemaEntry, options) {\r\n if (cellValue === undefined) {\r\n // This isn't supposed to be possible when reading spreadsheet data:\r\n // cell values are always read as `null` when those cells are empty.\r\n // It's currently impossible for `read-excel-file` to return `undefined` cell value.\r\n // Here it uses some \"sensible default\" fallback by treating `undefined` as \"column missing\".\r\n return {\r\n value: options.propertyValueWhenColumnIsMissing,\r\n isEmptyValue: true\r\n }\r\n }\r\n\r\n if (cellValue === null) {\r\n return {\r\n value: options.propertyValueWhenCellIsEmpty,\r\n isEmptyValue: true\r\n }\r\n }\r\n\r\n // Parse comma-separated cell value.\r\n if (Array.isArray(schemaEntry.type)) {\r\n return parseArrayValue(cellValue, schemaEntry, options)\r\n }\r\n\r\n return parseValue(cellValue, schemaEntry, options)\r\n}\r\n\r\n/**\r\n * Converts textual value to a javascript typed array value.\r\n * @param {any} value\r\n * @param {object} schemaEntry\r\n * @param {object} options\r\n * @return {{ value?: any, isEmptyValue: boolean } | { error: string, reason?: string }}\r\n */\r\nfunction parseArrayValue(value, schemaEntry, options) {\r\n // If the cell value is not a string — i.e. a number, a boolean, a Date —\r\n // then throw an error.\r\n if (typeof value !== 'string') {\r\n return {\r\n error: 'not_a_string'\r\n }\r\n }\r\n\r\n let isEmptyArray = true\r\n\r\n const errors = []\r\n const reasons = []\r\n\r\n const values = parseSeparatedSubstrings(value, options.separatorCharacter).map((substring) => {\r\n // If any substring was already detected to be invalid\r\n // don't attempt to parse any other substrings.\r\n if (errors.length > 0) {\r\n return\r\n }\r\n\r\n // If an empty substring was extracted, it means that there was an out-of-place separator.\r\n if (!substring) {\r\n errors.push('invalid')\r\n reasons.push('syntax')\r\n return\r\n }\r\n\r\n const {\r\n value,\r\n isEmptyValue,\r\n error,\r\n reason\r\n } = parseValue(substring, schemaEntry, options)\r\n\r\n if (error) {\r\n errors.push(error)\r\n reasons.push(reason)\r\n return\r\n }\r\n\r\n if (isEmptyArray && !isEmptyValue) {\r\n isEmptyArray = false\r\n }\r\n\r\n return value\r\n })\r\n\r\n if (errors.length > 0) {\r\n return {\r\n error: errors[0],\r\n reason: reasons[0]\r\n }\r\n }\r\n\r\n return {\r\n value: values,\r\n isEmptyValue: isEmptyArray\r\n }\r\n}\r\n\r\n/**\r\n * Converts textual value to a javascript typed value.\r\n * @param {any} value\r\n * @param {object} schemaEntry\r\n * @param {object} options\r\n * @return {{ value?: any, isEmptyValue: boolean } | { error: string }}\r\n */\r\nexport function parseValue(value, schemaEntry, options) {\r\n // `null` values (i.e. empty cells) don't get parsed.\r\n if (value === null) {\r\n return {\r\n value: null,\r\n isEmptyValue: true\r\n }\r\n }\r\n\r\n // Parse the value according to the `type` that is specified in the schema entry.\r\n let result\r\n if (schemaEntry.type) {\r\n result = parseValueOfType(\r\n value,\r\n // Get the type of the value.\r\n //\r\n // Handle the case if it's a comma-separated value.\r\n // Example `type`: String[]\r\n // Example Input Value: 'Barack Obama, \"String, with, colons\", Donald Trump'\r\n // Example Parsed Value: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n //\r\n Array.isArray(schemaEntry.type) ? schemaEntry.type[0] : schemaEntry.type,\r\n options\r\n )\r\n } else {\r\n // If the `type` is not specified for a given schema entry, the `value` will be returned as is.\r\n result = { value }\r\n // throw new Error('Invalid schema entry: no `type` specified:\\n\\n' + JSON.stringify(schemaEntry, null, 2))\r\n }\r\n\r\n // If there was an error when parsing the value then return the error.\r\n if (result.error) {\r\n return result\r\n }\r\n\r\n // If the parsed value is empty, return it.\r\n if (value === null) {\r\n return {\r\n value: null,\r\n isEmptyValue: true\r\n }\r\n }\r\n\r\n // Value is not empty.\r\n // Validate it and return.\r\n\r\n // Perform `oneOf` validation.\r\n if (schemaEntry.oneOf) {\r\n const errorAndReason = validateOneOf(result.value, schemaEntry.oneOf)\r\n if (errorAndReason) {\r\n return errorAndReason\r\n }\r\n }\r\n\r\n // Perform `validate()` validation.\r\n if (schemaEntry.validate) {\r\n try {\r\n schemaEntry.validate(result.value)\r\n } catch (error) {\r\n return { error: error.message }\r\n }\r\n }\r\n\r\n // Return the value.\r\n return {\r\n value: result.value,\r\n isEmptyValue: isEmptyValue(result.value)\r\n }\r\n}\r\n\r\nfunction validateOneOf(value, oneOf) {\r\n if (oneOf.indexOf(value) < 0) {\r\n return { error: 'invalid', reason: 'unknown' }\r\n }\r\n}\r\n\r\n/**\r\n * Converts cell value to a javascript typed value.\r\n * @param {(string|number|boolean|Date)} value\r\n * @param {function} type\r\n * @return {object} Either `{ value: (string|number|Date|boolean) }` or `{ error: string, reason?: string }`\r\n */\r\nfunction parseValueOfType(value, type) {\r\n switch (type) {\r\n case String:\r\n return parseValueUsingTypeParser(value, StringType)\r\n\r\n case Number:\r\n return parseValueUsingTypeParser(value, NumberType)\r\n\r\n case Date:\r\n return parseValueUsingTypeParser(value, DateType)\r\n\r\n case Boolean:\r\n return parseValueUsingTypeParser(value, BooleanType)\r\n\r\n default:\r\n // Validate `type`\r\n if (typeof type !== 'function') {\r\n throw new Error(`Unsupported schema \\`type\\`: ${type && type.name || type}`)\r\n }\r\n return parseValueUsingTypeParser(value, type)\r\n }\r\n}\r\n\r\n/**\r\n * Converts textual value to a custom value using supplied `type`.\r\n * @param {any} value\r\n * @param {function} type\r\n * @return {{ value: any, error: string }}\r\n */\r\nfunction parseValueUsingTypeParser(value, type) {\r\n try {\r\n const parsedValue = type(value)\r\n // Returning `undefined` from a `type` parser is treated as returning `null`.\r\n if (parsedValue === undefined) {\r\n return { value: null }\r\n }\r\n return { value: parsedValue }\r\n } catch (error) {\r\n const result = { error: error.message }\r\n // Built-in types such as `Number` or `Date` may also report\r\n // a specific `reason` of the error.\r\n if (error.reason) {\r\n result.reason = error.reason;\r\n }\r\n return result\r\n }\r\n}\r\n\r\n// Extracts a substring from a string.\r\nexport function getNextSubstring(string, separatorCharacter, startIndex) {\r\n let i = 0\r\n let substring = ''\r\n while (startIndex + i < string.length) {\r\n const character = string[startIndex + i]\r\n if (character === separatorCharacter) {\r\n return [substring, i]\r\n }\r\n // Previously, it used to treat `\"` character similar to how it's treated in `.csv` files:\r\n // any commas inside quotes are ignored. But then I thought that it could introduce more\r\n // issues than it was originally intending to fix, and it also didn't provide an \"escape\" mechanism.\r\n // Overall, a decision was made to simplify the whole thing and drop the concept of quotes as special characters.\r\n //\r\n // else if (character === '\"') {\r\n // const quotedSubstring = getNextSubstring(string, '\"', startIndex + i + 1)\r\n // substring += quotedSubstring[0]\r\n // i += '\"'.length + quotedSubstring[1] + '\"'.length\r\n // }\r\n else {\r\n substring += character\r\n i++\r\n }\r\n }\r\n return [substring, i]\r\n}\r\n\r\n/**\r\n * Parses a string of comma-separated substrings into an array of substrings.\r\n * (the `export` is just for tests)\r\n * @param {string} string — A string of comma-separated substrings.\r\n * @return {string[]} An array of substrings.\r\n */\r\nexport function parseSeparatedSubstrings(string, separatorCharacter) {\r\n const elements = []\r\n let index = 0\r\n while (index < string.length) {\r\n const [substring, length] = getNextSubstring(string, separatorCharacter, index)\r\n index += length + separatorCharacter.length\r\n elements.push(substring.trim())\r\n }\r\n return elements\r\n}\r\n\r\nfunction transformValue(value, isEmptyValue, path, options) {\r\n if (isEmptyValue) {\r\n if (isObject(value)) {\r\n return options.transformEmptyObject(value, { path })\r\n } else if (Array.isArray(value)) {\r\n return options.transformEmptyArray(value, { path })\r\n }\r\n }\r\n return value\r\n}\r\n\r\nfunction getPropertyPath(propertyName, parentObjectPath) {\r\n return `${parentObjectPath ? parentObjectPath + '.' : ''}${propertyName}`\r\n}\r\n\r\n// Recursively runs `required` validations for the parsed data row tree.\r\nfunction runPendingRequiredValidations(\r\n schemaEntry,\r\n value,\r\n isEmptyValue,\r\n errors,\r\n children,\r\n parentObjectIsRequired,\r\n parentObjectValue,\r\n parentObjectValueIsEmpty,\r\n parentObjectErrors,\r\n columns\r\n) {\r\n let requiredErrors = []\r\n\r\n // See if this property is required.\r\n const isRequired = isPropertyRequired(\r\n schemaEntry,\r\n parentObjectIsRequired,\r\n parentObjectValue,\r\n parentObjectValueIsEmpty,\r\n parentObjectErrors\r\n )\r\n\r\n // If this property is required and empty, create a \"required\" error.\r\n if (isRequired && isEmptyValue) {\r\n requiredErrors.push(createError({\r\n error: 'required',\r\n column: schemaEntry.column,\r\n columnIndex: columns.indexOf(schemaEntry.column),\r\n valueType: schemaEntry.type,\r\n value\r\n }))\r\n }\r\n\r\n // Run `required` validations of the children.\r\n if (children) {\r\n for (const child of children) {\r\n const requiredErrorsOfChild = runPendingRequiredValidations(\r\n child.schemaEntry,\r\n child.value,\r\n child.isEmptyValue,\r\n child.errors,\r\n child.children,\r\n // The following properties describe the parent object of the `child`,\r\n // i.e. the current (iterated) object.\r\n isRequired,\r\n value,\r\n isEmptyValue,\r\n errors,\r\n columns\r\n )\r\n if (requiredErrorsOfChild) {\r\n requiredErrors = requiredErrors.concat(requiredErrorsOfChild)\r\n }\r\n }\r\n }\r\n if (requiredErrors.length > 0) {\r\n return requiredErrors\r\n }\r\n}\r\n\r\nfunction isPropertyRequired(\r\n schemaEntry,\r\n parentObjectIsRequired,\r\n parentObjectValue,\r\n parentObjectValueIsEmpty,\r\n parentObjectErrors\r\n) {\r\n // If the parent object is marked as `required: false` then it's allowed\r\n // to be absent entirely from the input data. If that's the case,\r\n // i.e. if the parent object is absent entirely from the input data,\r\n // then any descendant properties of such object are allowed to be absent too,\r\n // which means that they should also be considered being `required: false`.\r\n //\r\n // Also, if the parent object couldn't be parsed due to some non-`required` errors,\r\n // it can't be known whether it's actually empty or not. In case of such uncertainty,\r\n // the code shouldn't attempt to be overly smart and do things that might not be necessary,\r\n // so such parent object is just assumed to be empty in order to not falsly trigger\r\n // any `required` validations that otherwise wouldn't have been run.\r\n // In other words, skipping some `required` validations is better than\r\n // running `required` validations that shouldn't have been run.\r\n //\r\n if (parentObjectIsRequired === false && (parentObjectValueIsEmpty || parentObjectErrors)) {\r\n return false\r\n }\r\n\r\n return schemaEntry.required && (\r\n typeof schemaEntry.required === 'boolean'\r\n ? schemaEntry.required\r\n : (\r\n // If there were any non-`required` errors when parsing the parent object,\r\n // the `parentObject` will be `undefined`. In that case, \"complex\" `required()`\r\n // validations — the ones where `required` is a function — can't really be run\r\n // because those validations assume a fully and correctly parsed parent object\r\n // be passed as an argument, and the thing is that the `parentObject` is unknown.\r\n // As a result, only \"basic\" `required` validations could be run,\r\n // i.e. the ones where `required` is just a boolean, and \"complex\" `required`\r\n // validations, i.e. the ones where `required` is a functions, should be skipped,\r\n // because it's better to skip some `required` errors than to trigger falsy ones.\r\n parentObjectErrors ? false : schemaEntry.required(parentObjectValue)\r\n )\r\n )\r\n}\r\n\r\nfunction createError({\r\n column,\r\n columnIndex,\r\n valueType,\r\n value,\r\n error: errorMessage,\r\n reason\r\n}) {\r\n const error = {\r\n error: errorMessage,\r\n column,\r\n columnIndex,\r\n value\r\n }\r\n if (reason) {\r\n error.reason = reason\r\n }\r\n // * Regular values specify a `type?` property, which is included in the `error` object.\r\n // * Nested objects specify a `schema` property, which is not included in the `error` object.\r\n if (valueType) {\r\n error.type = valueType\r\n }\r\n return error\r\n}\r\n\r\nfunction validateSchema(schema) {\r\n for (const key of Object.keys(schema)) {\r\n const schemaEntry = schema[key]\r\n // Validate that the `schema` is not using a deprecated `type: nestedSchema` format.\r\n if (typeof schemaEntry.type === 'object' && !Array.isArray(schemaEntry.type)) {\r\n throw new Error('When defining a nested schema, use a `schema` property instead of a `type` property')\r\n }\r\n // Validate that every property has a source `column` title specified for it.\r\n if (!schemaEntry.schema) {\r\n if (!schemaEntry.column) {\r\n throw new Error(`\"column\" not defined for schema entry \"${key}\".`)\r\n }\r\n }\r\n }\r\n\r\n // A nested object could have a `required` property but the only allowed value is `false`.\r\n // The reason why `true` value is not allowed is because in case of a \"required\" error\r\n // there's no single column title corresponding to such nested object, and column title\r\n // is required to create a \"required\" error.\r\n validateObjectSchemaRequiredProperty(schema, undefined)\r\n}\r\n\r\nfunction validateObjectSchemaRequiredProperty(schema, required) {\r\n if (required !== undefined && required !== false) {\r\n throw new Error(`In a schema, a nested object can have a \\`required\\` property but the only allowed value is \\`undefined\\` or \\`false\\`. Otherwise, a \"required\" error for a nested object would have to include a specific \\`column\\` title and a nested object doesn't have one. You've specified the following \\`required\\`: ${required}`)\r\n }\r\n // For each property of the described object.\r\n for (const key of Object.keys(schema)) {\r\n // If this property is itself an object.\r\n if (isObject(schema[key].schema)) {\r\n // Validate that a `column` property can't coexist with a `schema` property.\r\n if (schema[key].column) {\r\n throw new Error(`In a schema, \\`column\\` property is only allowed when describing a property value rather than a nested object. Key: ${key}. Schema:\\n${JSON.stringify(schema[key], null, 2)}`)\r\n }\r\n // Recurse into the child object.\r\n validateObjectSchemaRequiredProperty(schema[key].schema, schema[key].required)\r\n }\r\n }\r\n}\r\n\r\nfunction isEmptyValue(value) {\r\n return value === undefined || value === null\r\n}\r\n\r\nconst DEFAULT_OPTIONS = {\r\n propertyValueWhenColumnIsMissing: undefined,\r\n propertyValueWhenCellIsEmpty: null,\r\n // shouldSkipRequiredValidationWhenColumnIsMissing: () => false,\r\n // `transformEmptyObject(object, { path })` applies to both the top-level object\r\n // and any of its nested objects.\r\n transformEmptyObject: () => null,\r\n transformEmptyArray: () => null,\r\n separatorCharacter: ','\r\n}\r\n\r\nfunction applyDefaultOptions(options) {\r\n if (options) {\r\n return {\r\n ...DEFAULT_OPTIONS,\r\n ...options\r\n }\r\n } else {\r\n return DEFAULT_OPTIONS\r\n }\r\n}\r\n\r\n// This `value` marks the start of a tree structure that is parsed from a given data row.\r\nconst PARSED_OBJECT_TREE_START = {}"],"mappings":"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"}
1
+ {"version":3,"file":"parseSheetData.js","names":["_Number","_interopRequireDefault","require","_String","_Boolean","_Date","_isObject","_checkpoint","obj","__esModule","_typeof","o","Symbol","iterator","constructor","prototype","_slicedToArray","arr","i","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","r","l","t","e","n","u","a","f","call","next","Object","done","push","value","length","_toArray","_iterableToArray","TypeError","iter","Array","from","isArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","_toPropertyKey","configurable","writable","arg","_toPrimitive","String","input","hint","prim","toPrimitive","undefined","res","Number","_createForOfIteratorHelperLoose","allowArrayLike","it","bind","minLen","_arrayLikeToArray","toString","slice","name","test","len","arr2","EMPTY_CELL_VALUE","parseSheetData","data","schema","optionsCustom","checkpoint","objects","errors","parsedRows","parseSheetDataWithPerRowErrors","parsedRowIndex","_iterator","_step","_step$value","object","rowErrors","concat","map","rowError","row","validateSchema","options","applyDefaultOptions","_data","columns","dataRows","parseDataRow","dataRow","schemaEntry","_parseProperty","parseProperty","isEmptyValue","children","dummyParentObject","PARSED_OBJECT_TREE_START","isRequired","requiredErrors","runPendingRequiredValidations","transformValue","parseObject","path","isEmptyObject","_i","_Object$keys","child","getPropertyPath","columnIndex","column","indexOf","isMissingColumn","_ref","propertyValueWhenColumnIsMissing","parseCellValueWithPossibleErrors","cellValue","_parseCellValue","parseCellValue","errorMessage","error","errorReason","reason","createError","valueType","type","propertyValueWhenCellIsEmpty","parseArrayValue","parseValue","isEmptyArray","reasons","values","parseSeparatedSubstrings","separatorCharacter","substring","_parseValue","result","parseValueOfType","oneOf","errorAndReason","validateOneOf","validate","message","parseValueUsingTypeParser","StringType","NumberType","Date","DateType","Boolean","BooleanType","Error","parsedValue","getNextSubstring","string","startIndex","character","elements","index","_getNextSubstring","_getNextSubstring2","trim","isObject","transformEmptyObject","transformEmptyArray","propertyName","parentObjectPath","parentObjectIsRequired","parentObjectValue","parentObjectValueIsEmpty","parentObjectErrors","isPropertyRequired","_iterator2","_step2","requiredErrorsOfChild","required","_ref2","_i2","_Object$keys2","validateObjectSchemaRequiredProperty","_i3","_Object$keys3","JSON","stringify","DEFAULT_OPTIONS"],"sources":["../../source/parseSheetData/parseSheetData.js"],"sourcesContent":["import NumberType from './types/Number.js'\r\nimport StringType from './types/String.js'\r\nimport BooleanType from './types/Boolean.js'\r\nimport DateType from './types/Date.js'\r\n\r\nimport isObject from '../utility/isObject.js'\r\nimport checkpoint from '../utility/checkpoint.js'\r\n\r\n// An empty cell has `null` value.\r\nconst EMPTY_CELL_VALUE = null\r\n\r\n/**\r\n * Converts spreadsheet-alike data structure into an array of JSON objects.\r\n *\r\n * Parameters:\r\n *\r\n * * `data` — An array of rows, each row being an array of cells. The first row should be the list of column headers and the rest of the rows should be the data.\r\n * * `schema` — A \"to JSON\" convertion schema (see above).\r\n * * `options` — (optional) Schema conversion parameters of `read-excel-file`:\r\n * * `propertyValueWhenColumnIsMissing` — By default, when some of the `schema` columns are missing in the input `data`, those properties are set to `undefined` in the output objects. Pass `propertyValueWhenColumnIsMissing: null` to set such \"missing column\" properties to `null` in the output objects.\r\n * * `propertyValueWhenCellIsEmpty` — By default, when it encounters a `null` value in a cell in input `data`, it sets it to `undefined` in the output object. Pass `propertyValueWhenCellIsEmpty: null` to make it set such values as `null`s in output objects.\r\n * // * `shouldSkipRequiredValidationWhenColumnIsMissing: (column: string, { object }) => boolean` — By default, it does apply `required` validation to `schema` properties for which columns are missing in the input `data`. One could pass a custom `shouldSkipRequiredValidationWhenColumnIsMissing(column, { object })` to disable `required` validation for missing columns in some or all cases.\r\n * * `transformEmptyObject(object, { path? })` — By default, it returns `null` for \"empty\" objects. One could override that value using `transformEmptyObject(object, { path })` parameter. The value applies to both top-level object and any nested sub-objects in case of a nested schema, hence the additional (optional) `path?: string` parameter.\r\n * * `transformEmptyArray(array, { path })` — By default, it returns `null` for an \"empty\" array value. One could override that value using `transformEmptyArray(array, { path })` parameter.\r\n * * `separatorCharacter` — By default, it splits array-type cell values by a comma character.\r\n *\r\n * When parsing a property value, in case of an error, the value of that property is gonna be `undefined`.\r\n *\r\n * @param {SheetData} data - An array of rows, each row being an array of cells.\r\n * @param {object} schema\r\n * @param {object} [options]\r\n * @param {any} [options.propertyValueWhenColumnIsMissing] — By default, when some of the `schema` columns are missing in the input `data`, those properties are set to `undefined` in the output objects. Pass `propertyValueWhenColumnIsMissing: null` to set such \"missing column\" properties to `null` in the output objects.\r\n * @param {any} [options.propertyValueWhenCellIsEmpty] — By default, when it encounters a `null` value in a cell in input `data`, it leaves the value as is. Pass a custom `propertyValueWhenCellIsEmpty` to make it set such values to that value.\r\n * // @param {boolean} [options.shouldSkipRequiredValidationWhenColumnIsMissing(column: string, { object })] — By default, it does apply `required` validation to `schema` properties for which columns are missing in the input `data`. One could pass a custom `shouldSkipRequiredValidationWhenColumnIsMissing(column, { object })` to disable `required` validation for missing columns in some or all cases.\r\n * @param {function} [options.transformEmptyObject(object, { path })] — By default, it returns `null` for an \"empty\" resulting object. One could override that value using `transformEmptyObject(object, { path })` parameter. The value applies to both top-level object and any nested sub-objects in case of a nested schema, hence the additional `path?: string` parameter.\r\n * @param {function} [options.transformEmptyArray(array, { path })] — By default, it returns `null` for an \"empty\" array value. One could override that value using `transformEmptyArray(array, { path })` parameter.\r\n * @param {string} [options.separatorCharacter] — When specified, string values will be split by this separator to get the array.\r\n * @return {object} — An object of shape `{ objects, errors }`. Either `objects` or `errors` is going to be `undefined`.\r\n */\r\nexport default function parseSheetData(data, schema, optionsCustom) {\r\n checkpoint('parse sheet data using schema')\r\n\r\n const objects = []\r\n let errors = []\r\n\r\n const parsedRows = parseSheetDataWithPerRowErrors(data, schema, optionsCustom)\r\n let parsedRowIndex = 0\r\n for (const { object, errors: rowErrors } of parsedRows) {\r\n if (rowErrors) {\r\n errors = errors.concat(\r\n rowErrors.map(\r\n // Add row number property to each row error.\r\n rowError => ({ ...rowError, row: parsedRowIndex + 1 })\r\n )\r\n )\r\n } else {\r\n objects.push(object)\r\n }\r\n parsedRowIndex++\r\n }\r\n\r\n checkpoint('end')\r\n\r\n if (errors.length > 0) {\r\n return { errors }\r\n }\r\n\r\n return { objects }\r\n}\r\n\r\n// This one is only used in tests.\r\nexport function parseSheetDataWithPerRowErrors(data, schema, optionsCustom) {\r\n validateSchema(schema)\r\n\r\n const options = applyDefaultOptions(optionsCustom)\r\n\r\n const [columns, ...dataRows] = data\r\n\r\n return dataRows.map(row => parseDataRow(row, schema, columns, options))\r\n}\r\n\r\nfunction parseDataRow(dataRow, schema, columns, options) {\r\n // Create a `schemaEntry` for the top-level object.\r\n const schemaEntry = {\r\n schema\r\n }\r\n\r\n // Parse the values in the given data row into an object.\r\n const {\r\n value,\r\n isEmptyValue,\r\n errors,\r\n children\r\n } = parseProperty(dataRow, schemaEntry, undefined, columns, options)\r\n\r\n // Simulate a \"dummy\" parent object for the top-level object.\r\n // It will be used when running `required` validations.\r\n const dummyParentObject = {\r\n // The \"dummy\" parent object has a \"dummy\" value.\r\n // This value is irrelevant because it won't be read anywhere.\r\n value: PARSED_OBJECT_TREE_START,\r\n // The \"dummy\" parent object is empty if the parsed row is empty.\r\n isEmptyValue,\r\n // The \"dummy\" object has the same errors as the parsed row.\r\n errors,\r\n // The parsed object by default is not required to have any data\r\n // so the \"dummy\" object is not required.\r\n isRequired: undefined\r\n }\r\n\r\n // Run any `required` validations.\r\n //\r\n // `required` validations should be run after the entire data row has been parsed,\r\n // i.e. when the entire object structure has been parsed.\r\n // The reason is that a `required` validation could be either a simple boolean or a \"complex\" function.\r\n // In the latter case, the result of a `required()` function may depend on any other property of the object,\r\n // hence the actual `required` flag value could only be obtained after the entire data row has been parsed.\r\n //\r\n // For example, consider a top-level object:\r\n //\r\n // {\r\n // firstName: string,\r\n // lastName: string,\r\n // pet?: { name: string }\r\n // }\r\n //\r\n // A corresponding schema would be:\r\n //\r\n // {\r\n // firstName: {\r\n // required: true\r\n // },\r\n // lastName: {\r\n // required: true\r\n // },\r\n // pet: {\r\n // required: false,\r\n // schema: {\r\n // name: {\r\n // required: true\r\n // }\r\n // }\r\n // }\r\n // }\r\n //\r\n // I.e. when a `pet` exists, it must have a `name`.\r\n //\r\n // In such case, the `required: true` check of the `pet`'s `name` property\r\n // should not be performed if the `pet` is not present, because the `pet` nested object\r\n // is marked as `required: false`, meaning that `pet` data is not required to be present.\r\n //\r\n const requiredErrors = runPendingRequiredValidations(\r\n schemaEntry,\r\n value,\r\n isEmptyValue,\r\n errors,\r\n children,\r\n // Simulate a \"dummy\" parent object for the top-level object.\r\n dummyParentObject.isRequired,\r\n dummyParentObject.value,\r\n dummyParentObject.isEmptyValue,\r\n dummyParentObject.errors,\r\n columns\r\n )\r\n\r\n // If there were any errors, whether caused by `required`\r\n // or occured while parsing the values, return those errors.\r\n if (errors || requiredErrors) {\r\n return {\r\n errors: (errors || []).concat(requiredErrors || [])\r\n }\r\n }\r\n\r\n // Return the parsed object.\r\n return {\r\n object: transformValue(value, isEmptyValue, undefined, options)\r\n }\r\n}\r\n\r\nfunction parseObject(row, schema, path, columns, options) {\r\n const object = {}\r\n let isEmptyObject = true\r\n\r\n let errors = []\r\n\r\n const children = []\r\n\r\n // For each property of the object.\r\n for (const key of Object.keys(schema)) {\r\n const child = parseProperty(row, schema[key], getPropertyPath(key, path), columns, options)\r\n\r\n if (child.errors) {\r\n errors = errors.concat(child.errors)\r\n } else {\r\n object[key] = transformValue(child.value, child.isEmptyValue, getPropertyPath(key, path), options)\r\n // Potentially unmark the object as \"empty\".\r\n if (isEmptyObject && !child.isEmptyValue) {\r\n isEmptyObject = false\r\n }\r\n }\r\n\r\n children.push({\r\n ...child,\r\n // `schemaEntry` will be used when running `required` validation of this property (later),\r\n schemaEntry: schema[key]\r\n })\r\n }\r\n\r\n // If there were any errors, return them.\r\n if (errors.length > 0) {\r\n return {\r\n // Return the errors.\r\n errors,\r\n // Return the `children` because `required` validations still have to be run (later).\r\n children\r\n }\r\n }\r\n\r\n return {\r\n value: object,\r\n isEmptyValue: isEmptyObject,\r\n // Return the `children` because `required` validations still have to be run (later).\r\n children\r\n }\r\n}\r\n\r\nfunction parseProperty(row, schemaEntry, path, columns, options) {\r\n const columnIndex = schemaEntry.column ? columns.indexOf(schemaEntry.column) : undefined\r\n const isMissingColumn = schemaEntry.column ? columnIndex < 0 : undefined\r\n\r\n const {\r\n value,\r\n isEmptyValue,\r\n errors,\r\n children\r\n } = schemaEntry.column\r\n ? (\r\n isMissingColumn\r\n ? { value: options.propertyValueWhenColumnIsMissing, isEmptyValue: true }\r\n : parseCellValueWithPossibleErrors(row[columnIndex], schemaEntry, columnIndex, options)\r\n )\r\n : parseObject(\r\n row,\r\n schemaEntry.schema,\r\n path,\r\n columns,\r\n options\r\n )\r\n\r\n // If there were any errors, return them.\r\n if (errors) {\r\n return {\r\n // Return the errors.\r\n errors,\r\n // Return the `children` because `required` validations still have to be run (later).\r\n children\r\n }\r\n }\r\n\r\n return {\r\n value,\r\n isEmptyValue,\r\n // Return the `children` because `required` validations still have to be run (later).\r\n children\r\n }\r\n}\r\n\r\nfunction parseCellValueWithPossibleErrors(cellValue, schemaEntry, columnIndex, options) {\r\n const {\r\n value,\r\n isEmptyValue,\r\n error: errorMessage,\r\n reason: errorReason\r\n } = parseCellValue(cellValue, schemaEntry, options)\r\n\r\n if (errorMessage) {\r\n const error = createError({\r\n error: errorMessage,\r\n reason: errorReason,\r\n column: schemaEntry.column,\r\n columnIndex,\r\n valueType: schemaEntry.type,\r\n value: cellValue\r\n })\r\n return {\r\n errors: [error]\r\n }\r\n }\r\n\r\n return {\r\n value,\r\n isEmptyValue\r\n }\r\n}\r\n\r\n/**\r\n * Converts a cell value value to a javascript typed value.\r\n * @param {any} cellValue\r\n * @param {object} schemaEntry\r\n * @param {string} propertyPath\r\n * @param {object} options\r\n * @return {{ value?: any, isEmptyValue: boolean } | { error: string, reason?: string }}\r\n */\r\nfunction parseCellValue(cellValue, schemaEntry, options) {\r\n if (cellValue === undefined) {\r\n // This isn't supposed to be possible when reading spreadsheet data:\r\n // cell values are always read as `null` when those cells are empty.\r\n // It's currently impossible for `read-excel-file` to return `undefined` cell value.\r\n // Here it uses some \"sensible default\" fallback by treating `undefined` as \"column missing\".\r\n return {\r\n value: options.propertyValueWhenColumnIsMissing,\r\n isEmptyValue: true\r\n }\r\n }\r\n\r\n if (cellValue === EMPTY_CELL_VALUE) {\r\n return {\r\n value: options.propertyValueWhenCellIsEmpty,\r\n isEmptyValue: true\r\n }\r\n }\r\n\r\n // Parse comma-separated cell value.\r\n if (Array.isArray(schemaEntry.type)) {\r\n return parseArrayValue(cellValue, schemaEntry, options)\r\n }\r\n\r\n return parseValue(cellValue, schemaEntry, options)\r\n}\r\n\r\n/**\r\n * Converts textual value to a javascript typed array value.\r\n * @param {any} value\r\n * @param {object} schemaEntry\r\n * @param {object} options\r\n * @return {{ value?: any, isEmptyValue: boolean } | { error: string, reason?: string }}\r\n */\r\nfunction parseArrayValue(value, schemaEntry, options) {\r\n // If the cell value is not a string — i.e. a number, a boolean, a Date —\r\n // then throw an error.\r\n if (typeof value !== 'string') {\r\n return {\r\n error: 'not_a_string'\r\n }\r\n }\r\n\r\n let isEmptyArray = true\r\n\r\n const errors = []\r\n const reasons = []\r\n\r\n const values = parseSeparatedSubstrings(value, options.separatorCharacter).map((substring) => {\r\n // If any substring was already detected to be invalid\r\n // don't attempt to parse any other substrings.\r\n if (errors.length > 0) {\r\n return\r\n }\r\n\r\n // If an empty substring was extracted, it means that there was an out-of-place separator.\r\n if (!substring) {\r\n errors.push('invalid')\r\n reasons.push('syntax')\r\n return\r\n }\r\n\r\n const {\r\n value,\r\n isEmptyValue,\r\n error,\r\n reason\r\n } = parseValue(substring, schemaEntry, options)\r\n\r\n if (error) {\r\n errors.push(error)\r\n reasons.push(reason)\r\n return\r\n }\r\n\r\n if (isEmptyArray && !isEmptyValue) {\r\n isEmptyArray = false\r\n }\r\n\r\n return value\r\n })\r\n\r\n if (errors.length > 0) {\r\n return {\r\n error: errors[0],\r\n reason: reasons[0]\r\n }\r\n }\r\n\r\n return {\r\n value: values,\r\n isEmptyValue: isEmptyArray\r\n }\r\n}\r\n\r\n/**\r\n * Converts textual value to a javascript typed value.\r\n * @param {any} value\r\n * @param {object} schemaEntry\r\n * @param {object} options\r\n * @return {{ value?: any, isEmptyValue: boolean } | { error: string }}\r\n */\r\nexport function parseValue(value, schemaEntry, options) {\r\n // `null` values (i.e. empty cells) don't get parsed.\r\n if (value === EMPTY_CELL_VALUE) {\r\n return {\r\n value,\r\n isEmptyValue: true\r\n }\r\n }\r\n\r\n // Parse the value according to the `type` that is specified in the schema entry.\r\n let result\r\n if (schemaEntry.type) {\r\n result = parseValueOfType(\r\n value,\r\n // Get the type of the value.\r\n //\r\n // Handle the case if it's a comma-separated value.\r\n // Example `type`: String[]\r\n // Example Input Value: 'Barack Obama, \"String, with, colons\", Donald Trump'\r\n // Example Parsed Value: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n //\r\n Array.isArray(schemaEntry.type) ? schemaEntry.type[0] : schemaEntry.type,\r\n options\r\n )\r\n } else {\r\n // If the `type` is not specified for a given schema entry, the `value` will be returned as is.\r\n result = { value }\r\n // throw new Error('Invalid schema entry: no `type` specified:\\n\\n' + JSON.stringify(schemaEntry, null, 2))\r\n }\r\n\r\n // If there was an error when parsing the value then return the error.\r\n if (result.error) {\r\n return result\r\n }\r\n\r\n // If the parsed value is empty, return it.\r\n if (value === EMPTY_CELL_VALUE) {\r\n return {\r\n value,\r\n isEmptyValue: true\r\n }\r\n }\r\n\r\n // Value is not empty.\r\n // Validate it and return.\r\n\r\n // Perform `oneOf` validation.\r\n if (schemaEntry.oneOf) {\r\n const errorAndReason = validateOneOf(result.value, schemaEntry.oneOf)\r\n if (errorAndReason) {\r\n return errorAndReason\r\n }\r\n }\r\n\r\n // Perform `validate()` validation.\r\n if (schemaEntry.validate) {\r\n try {\r\n schemaEntry.validate(result.value)\r\n } catch (error) {\r\n return { error: error.message }\r\n }\r\n }\r\n\r\n // Return the value.\r\n return {\r\n value: result.value,\r\n isEmptyValue: isEmptyValue(result.value)\r\n }\r\n}\r\n\r\nfunction validateOneOf(value, oneOf) {\r\n if (oneOf.indexOf(value) < 0) {\r\n return { error: 'invalid', reason: 'unknown' }\r\n }\r\n}\r\n\r\n/**\r\n * Converts cell value to a javascript typed value.\r\n * @param {(string|number|boolean|Date)} value\r\n * @param {function} type\r\n * @return {object} Either `{ value: (string|number|Date|boolean) }` or `{ error: string, reason?: string }`\r\n */\r\nfunction parseValueOfType(value, type) {\r\n switch (type) {\r\n case String:\r\n return parseValueUsingTypeParser(value, StringType)\r\n\r\n case Number:\r\n return parseValueUsingTypeParser(value, NumberType)\r\n\r\n case Date:\r\n return parseValueUsingTypeParser(value, DateType)\r\n\r\n case Boolean:\r\n return parseValueUsingTypeParser(value, BooleanType)\r\n\r\n default:\r\n // Validate `type`\r\n if (typeof type !== 'function') {\r\n throw new Error(`Unsupported schema \\`type\\`: ${type && type.name || type}`)\r\n }\r\n return parseValueUsingTypeParser(value, type)\r\n }\r\n}\r\n\r\n/**\r\n * Converts textual value to a custom value using supplied `type`.\r\n * @param {any} value\r\n * @param {function} type\r\n * @return {{ value: any, error: string }}\r\n */\r\nfunction parseValueUsingTypeParser(value, type) {\r\n try {\r\n const parsedValue = type(value)\r\n // Returning `undefined` from a `type` parser is treated as returning `null`.\r\n if (parsedValue === undefined) {\r\n return { value: EMPTY_CELL_VALUE }\r\n }\r\n return { value: parsedValue }\r\n } catch (error) {\r\n const result = { error: error.message }\r\n // Built-in types such as `Number` or `Date` may also report\r\n // a specific `reason` of the error.\r\n if (error.reason) {\r\n result.reason = error.reason;\r\n }\r\n return result\r\n }\r\n}\r\n\r\n// Extracts a substring from a string.\r\nexport function getNextSubstring(string, separatorCharacter, startIndex) {\r\n let i = 0\r\n let substring = ''\r\n while (startIndex + i < string.length) {\r\n const character = string[startIndex + i]\r\n if (character === separatorCharacter) {\r\n return [substring, i]\r\n }\r\n // Previously, it used to treat `\"` character similar to how it's treated in `.csv` files:\r\n // any commas inside quotes are ignored. But then I thought that it could introduce more\r\n // issues than it was originally intending to fix, and it also didn't provide an \"escape\" mechanism.\r\n // Overall, a decision was made to simplify the whole thing and drop the concept of quotes as special characters.\r\n //\r\n // else if (character === '\"') {\r\n // const quotedSubstring = getNextSubstring(string, '\"', startIndex + i + 1)\r\n // substring += quotedSubstring[0]\r\n // i += '\"'.length + quotedSubstring[1] + '\"'.length\r\n // }\r\n else {\r\n substring += character\r\n i++\r\n }\r\n }\r\n return [substring, i]\r\n}\r\n\r\n/**\r\n * Parses a string of comma-separated substrings into an array of substrings.\r\n * (the `export` is just for tests)\r\n * @param {string} string — A string of comma-separated substrings.\r\n * @return {string[]} An array of substrings.\r\n */\r\nexport function parseSeparatedSubstrings(string, separatorCharacter) {\r\n const elements = []\r\n let index = 0\r\n while (index < string.length) {\r\n const [substring, length] = getNextSubstring(string, separatorCharacter, index)\r\n index += length + separatorCharacter.length\r\n elements.push(substring.trim())\r\n }\r\n return elements\r\n}\r\n\r\nfunction transformValue(value, isEmptyValue, path, options) {\r\n if (isEmptyValue) {\r\n if (isObject(value)) {\r\n return options.transformEmptyObject(value, { path })\r\n } else if (Array.isArray(value)) {\r\n return options.transformEmptyArray(value, { path })\r\n }\r\n }\r\n return value\r\n}\r\n\r\nfunction getPropertyPath(propertyName, parentObjectPath) {\r\n return `${parentObjectPath ? parentObjectPath + '.' : ''}${propertyName}`\r\n}\r\n\r\n// Recursively runs `required` validations for the parsed data row tree.\r\nfunction runPendingRequiredValidations(\r\n schemaEntry,\r\n value,\r\n isEmptyValue,\r\n errors,\r\n children,\r\n parentObjectIsRequired,\r\n parentObjectValue,\r\n parentObjectValueIsEmpty,\r\n parentObjectErrors,\r\n columns\r\n) {\r\n let requiredErrors = []\r\n\r\n // See if this property is required.\r\n const isRequired = isPropertyRequired(\r\n schemaEntry,\r\n parentObjectIsRequired,\r\n parentObjectValue,\r\n parentObjectValueIsEmpty,\r\n parentObjectErrors\r\n )\r\n\r\n // If this property is required and empty, create a \"required\" error.\r\n if (isRequired && isEmptyValue) {\r\n requiredErrors.push(createError({\r\n error: 'required',\r\n column: schemaEntry.column,\r\n columnIndex: columns.indexOf(schemaEntry.column),\r\n valueType: schemaEntry.type,\r\n value\r\n }))\r\n }\r\n\r\n // Run `required` validations of the children.\r\n if (children) {\r\n for (const child of children) {\r\n const requiredErrorsOfChild = runPendingRequiredValidations(\r\n child.schemaEntry,\r\n child.value,\r\n child.isEmptyValue,\r\n child.errors,\r\n child.children,\r\n // The following properties describe the parent object of the `child`,\r\n // i.e. the current (iterated) object.\r\n isRequired,\r\n value,\r\n isEmptyValue,\r\n errors,\r\n columns\r\n )\r\n if (requiredErrorsOfChild) {\r\n requiredErrors = requiredErrors.concat(requiredErrorsOfChild)\r\n }\r\n }\r\n }\r\n if (requiredErrors.length > 0) {\r\n return requiredErrors\r\n }\r\n}\r\n\r\nfunction isPropertyRequired(\r\n schemaEntry,\r\n parentObjectIsRequired,\r\n parentObjectValue,\r\n parentObjectValueIsEmpty,\r\n parentObjectErrors\r\n) {\r\n // If the parent object is marked as `required: false` then it's allowed\r\n // to be absent entirely from the input data. If that's the case,\r\n // i.e. if the parent object is absent entirely from the input data,\r\n // then any descendant properties of such object are allowed to be absent too,\r\n // which means that they should also be considered being `required: false`.\r\n //\r\n // Also, if the parent object couldn't be parsed due to some non-`required` errors,\r\n // it can't be known whether it's actually empty or not. In case of such uncertainty,\r\n // the code shouldn't attempt to be overly smart and do things that might not be necessary,\r\n // so such parent object is just assumed to be empty in order to not falsly trigger\r\n // any `required` validations that otherwise wouldn't have been run.\r\n // In other words, skipping some `required` validations is better than\r\n // running `required` validations that shouldn't have been run.\r\n //\r\n if (parentObjectIsRequired === false && (parentObjectValueIsEmpty || parentObjectErrors)) {\r\n return false\r\n }\r\n\r\n return schemaEntry.required && (\r\n typeof schemaEntry.required === 'boolean'\r\n ? schemaEntry.required\r\n : (\r\n // If there were any non-`required` errors when parsing the parent object,\r\n // the `parentObject` will be `undefined`. In that case, \"complex\" `required()`\r\n // validations — the ones where `required` is a function — can't really be run\r\n // because those validations assume a fully and correctly parsed parent object\r\n // be passed as an argument, and the thing is that the `parentObject` is unknown.\r\n // As a result, only \"basic\" `required` validations could be run,\r\n // i.e. the ones where `required` is just a boolean, and \"complex\" `required`\r\n // validations, i.e. the ones where `required` is a functions, should be skipped,\r\n // because it's better to skip some `required` errors than to trigger falsy ones.\r\n parentObjectErrors ? false : schemaEntry.required(parentObjectValue)\r\n )\r\n )\r\n}\r\n\r\nfunction createError({\r\n column,\r\n columnIndex,\r\n valueType,\r\n value,\r\n error: errorMessage,\r\n reason\r\n}) {\r\n const error = {\r\n error: errorMessage,\r\n column,\r\n columnIndex,\r\n value\r\n }\r\n if (reason) {\r\n error.reason = reason\r\n }\r\n // * Regular values specify a `type?` property, which is included in the `error` object.\r\n // * Nested objects specify a `schema` property, which is not included in the `error` object.\r\n if (valueType) {\r\n error.type = valueType\r\n }\r\n return error\r\n}\r\n\r\nfunction validateSchema(schema) {\r\n for (const key of Object.keys(schema)) {\r\n const schemaEntry = schema[key]\r\n // Validate that the `schema` is not using a deprecated `type: nestedSchema` format.\r\n if (typeof schemaEntry.type === 'object' && !Array.isArray(schemaEntry.type)) {\r\n throw new Error('When defining a nested schema, use a `schema` property instead of a `type` property')\r\n }\r\n // Validate that every property has a source `column` title specified for it.\r\n if (!schemaEntry.schema) {\r\n if (!schemaEntry.column) {\r\n throw new Error(`\"column\" not defined for schema entry \"${key}\".`)\r\n }\r\n }\r\n }\r\n\r\n // A nested object could have a `required` property but the only allowed value is `false`.\r\n // The reason why `true` value is not allowed is because in case of a \"required\" error\r\n // there's no single column title corresponding to such nested object, and column title\r\n // is required to create a \"required\" error.\r\n validateObjectSchemaRequiredProperty(schema, undefined)\r\n}\r\n\r\nfunction validateObjectSchemaRequiredProperty(schema, required) {\r\n if (required !== undefined && required !== false) {\r\n throw new Error(`In a schema, a nested object can have a \\`required\\` property but the only allowed value is \\`undefined\\` or \\`false\\`. Otherwise, a \"required\" error for a nested object would have to include a specific \\`column\\` title and a nested object doesn't have one. You've specified the following \\`required\\`: ${required}`)\r\n }\r\n // For each property of the described object.\r\n for (const key of Object.keys(schema)) {\r\n // If this property is itself an object.\r\n if (isObject(schema[key].schema)) {\r\n // Validate that a `column` property can't coexist with a `schema` property.\r\n if (schema[key].column) {\r\n throw new Error(`In a schema, \\`column\\` property is only allowed when describing a property value rather than a nested object. Key: ${key}. Schema:\\n${JSON.stringify(schema[key], null, 2)}`)\r\n }\r\n // Recurse into the child object.\r\n validateObjectSchemaRequiredProperty(schema[key].schema, schema[key].required)\r\n }\r\n }\r\n}\r\n\r\nfunction isEmptyValue(value) {\r\n return value === undefined || value === null\r\n}\r\n\r\nconst DEFAULT_OPTIONS = {\r\n propertyValueWhenColumnIsMissing: undefined,\r\n propertyValueWhenCellIsEmpty: null,\r\n // shouldSkipRequiredValidationWhenColumnIsMissing: () => false,\r\n // `transformEmptyObject(object, { path })` applies to both the top-level object\r\n // and any of its nested objects.\r\n transformEmptyObject: () => null,\r\n transformEmptyArray: () => null,\r\n separatorCharacter: ','\r\n}\r\n\r\nfunction applyDefaultOptions(options) {\r\n if (options) {\r\n return {\r\n ...DEFAULT_OPTIONS,\r\n ...options\r\n }\r\n } else {\r\n return DEFAULT_OPTIONS\r\n }\r\n}\r\n\r\n// This `value` marks the start of a tree structure that is parsed from a given data row.\r\nconst PARSED_OBJECT_TREE_START = {}"],"mappings":"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"}
@@ -1094,6 +1094,6 @@ function Parser_(options) {
1094
1094
  } /** end parse */
1095
1095
  }
1096
1096
 
1097
- return Parser(options);
1097
+ return new Parser(options);
1098
1098
  }
1099
1099
  //# sourceMappingURL=parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","names":["Parser_","options","fromCharCode","String","hasOwnProperty","Object","prototype","ENTITY_PATTERN","ENTITY_MAPPING","keys","forEach","k","toUpperCase","replaceEntities","_","d","x","z","call","parseInt","decodeEntities","s","length","indexOf","replace","NON_WHITESPACE_OUTSIDE_ROOT_NODE","error","msg","Error","missingNamespaceForPrefix","prefix","getter","getFn","cloneNsMatrix","nsMatrix","clone","key","NAME_CACHE","Symbol","uriPrefix","buildNsMatrix","nsUriToPrefix","uri","noopGetContext","line","column","throwFunc","err","Parser","proxy","onText","onOpenTag","onCloseTag","onCDATA","onError","onWarning","onComment","onQuestion","onAttention","getContext","streaming","rootTagFound","leftoverXml","maybeNS","isNamespace","returnError","parseStop","nsMatrixStack","nodeStack","handleError","handleWarning","name","cb","nsMap","_typeof","_nsUriToPrefix","resetState","xml","parse","arguments","undefined","elNameCache","elNameCacheMatrix","_nsMatrix","anonymousNsCount","tagStart","tagEnd","i","j","y","q","w","v","xmlns","elementName","_elementName","elementProxy","attrsString","attrsStart","cachedAttrs","normalizeAttrName","defaultAlias","nsName","substring","substr","getAttrs","nsUri","nsUriPrefix","attrList","l","hasNewMatrix","newalias","value","alias","attrs","seenAttrs","Set","skipAttr","parseAttr","charCodeAt","has","add","push","getParseContext","splitsRe","startOfLine","endOfLine","match","data","exec","index","create","trim","isNaN","pop","_cachedName"],"sources":["../../source/saxen/parser.js"],"sourcesContent":["// See `README.md` for more info\r\n\r\nexport default function Parser_(options) {\r\n\r\n// `decode.js` file contents\r\n\r\nvar fromCharCode = String.fromCharCode;\r\n\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nvar ENTITY_PATTERN = /&#(\\d+);|&#x([0-9a-f]+);|&(\\w+);/ig;\r\n\r\nvar ENTITY_MAPPING = {\r\n 'amp': '&',\r\n 'apos': '\\'',\r\n 'gt': '>',\r\n 'lt': '<',\r\n 'quot': '\"'\r\n};\r\n\r\n// map UPPERCASE variants of supported special chars\r\nObject.keys(ENTITY_MAPPING).forEach(function(k) {\r\n ENTITY_MAPPING[k.toUpperCase()] = ENTITY_MAPPING[k];\r\n});\r\n\r\n\r\nfunction replaceEntities(_, d, x, z) {\r\n\r\n // reserved names, i.e. &nbsp;\r\n if (z) {\r\n if (hasOwnProperty.call(ENTITY_MAPPING, z)) {\r\n return ENTITY_MAPPING[z];\r\n } else {\r\n\r\n // fall back to original value\r\n return '&' + z + ';';\r\n }\r\n }\r\n\r\n // decimal encoded char\r\n if (d) {\r\n return fromCharCode(d);\r\n }\r\n\r\n // hex encoded char\r\n return fromCharCode(parseInt(x, 16));\r\n}\r\n\r\n\r\n/**\r\n * A basic entity decoder that can decode a minimal\r\n * sub-set of reserved names (&amp;) as well as\r\n * hex (&#xaaf;) and decimal (&#1231;) encoded characters.\r\n *\r\n * @param {string} s\r\n *\r\n * @return {string} decoded string\r\n */\r\nfunction decodeEntities(s) {\r\n if (s.length > 3 && s.indexOf('&') !== -1) {\r\n return s.replace(ENTITY_PATTERN, replaceEntities);\r\n }\r\n\r\n return s;\r\n}\r\n\r\n// `parser.js` file contents\r\n\r\nvar NON_WHITESPACE_OUTSIDE_ROOT_NODE = 'non-whitespace outside of root node';\r\n\r\nfunction error(msg) {\r\n return new Error(msg);\r\n}\r\n\r\nfunction missingNamespaceForPrefix(prefix) {\r\n return 'missing namespace for prefix <' + prefix + '>';\r\n}\r\n\r\nfunction getter(getFn) {\r\n return {\r\n 'get': getFn,\r\n 'enumerable': true\r\n };\r\n}\r\n\r\nfunction cloneNsMatrix(nsMatrix) {\r\n var clone = {}, key;\r\n for (key in nsMatrix) {\r\n clone[key] = nsMatrix[key];\r\n }\r\n return clone;\r\n}\r\n\r\n// per-matrix element name cache; stored under a symbol so it is\r\n// invisible to the `for (key in nsMatrix)` clone above and gets\r\n// collected together with the matrix it belongs to\r\nvar NAME_CACHE = Symbol('nameCache');\r\n\r\nfunction uriPrefix(prefix) {\r\n return prefix + '$uri';\r\n}\r\n\r\nfunction buildNsMatrix(nsUriToPrefix) {\r\n var nsMatrix = {},\r\n uri,\r\n prefix;\r\n\r\n for (uri in nsUriToPrefix) {\r\n prefix = nsUriToPrefix[uri];\r\n nsMatrix[prefix] = prefix;\r\n nsMatrix[uriPrefix(prefix)] = uri;\r\n }\r\n\r\n return nsMatrix;\r\n}\r\n\r\nfunction noopGetContext() {\r\n return { line: 0, column: 0 };\r\n}\r\n\r\nfunction throwFunc(err) {\r\n throw err;\r\n}\r\n\r\n/**\r\n * Creates a new parser with the given options.\r\n *\r\n * @constructor\r\n *\r\n * @param {!Object<string, ?>=} options\r\n */\r\nfunction Parser(options) {\r\n\r\n if (!this) {\r\n return new Parser(options);\r\n }\r\n\r\n var proxy = options && options['proxy'];\r\n\r\n var onText,\r\n onOpenTag,\r\n onCloseTag,\r\n onCDATA,\r\n onError = throwFunc,\r\n onWarning,\r\n onComment,\r\n onQuestion,\r\n onAttention;\r\n\r\n var getContext = noopGetContext;\r\n\r\n /**\r\n * Are we currently consuming a chunked stream of XML,\r\n * i.e. is a `write` call in progress that may be followed\r\n * by more chunks?\r\n *\r\n * @type {boolean}\r\n */\r\n var streaming = false;\r\n\r\n /**\r\n * Did we already encounter the root tag?\r\n *\r\n * Persisted across `write` calls so we can detect a missing\r\n * start tag once the stream ends.\r\n *\r\n * @type {boolean}\r\n */\r\n var rootTagFound = false;\r\n\r\n /**\r\n * Not yet parsed remainder of the previously written chunk,\r\n * i.e. an incomplete token that awaits more input.\r\n *\r\n * @type {string}\r\n */\r\n var leftoverXml = '';\r\n\r\n /**\r\n * Do we need to parse the current elements attributes for namespaces?\r\n *\r\n * @type {boolean}\r\n */\r\n var maybeNS = false;\r\n\r\n /**\r\n * Do we process namespaces at all?\r\n *\r\n * @type {boolean}\r\n */\r\n var isNamespace = false;\r\n\r\n /**\r\n * The caught error returned on parse end\r\n *\r\n * @type {Error}\r\n */\r\n var returnError = null;\r\n\r\n /**\r\n * Should we stop parsing?\r\n *\r\n * @type {boolean}\r\n */\r\n var parseStop = false;\r\n\r\n /**\r\n * Namespace + node state shared across (streamed) parse runs.\r\n */\r\n var nsMatrixStack,\r\n nsMatrix,\r\n nodeStack;\r\n\r\n /**\r\n * A map of { uri: prefix } used by the parser.\r\n *\r\n * This map will ensure we can normalize prefixes during processing;\r\n * for each uri, only one prefix will be exposed to the handlers.\r\n *\r\n * @type {!Object<string, string>}}\r\n */\r\n var nsUriToPrefix;\r\n\r\n /**\r\n * Handle parse error.\r\n *\r\n * @param {string|Error} err\r\n */\r\n function handleError(err) {\r\n if (!(err instanceof Error)) {\r\n err = error(err);\r\n }\r\n\r\n returnError = err;\r\n\r\n onError(err, getContext);\r\n }\r\n\r\n /**\r\n * Handle parse error.\r\n *\r\n * @param {string|Error} err\r\n */\r\n function handleWarning(err) {\r\n\r\n if (!onWarning) {\r\n return;\r\n }\r\n\r\n if (!(err instanceof Error)) {\r\n err = error(err);\r\n }\r\n\r\n onWarning(err, getContext);\r\n }\r\n\r\n /**\r\n * Register parse listener.\r\n *\r\n * @param {string} name\r\n * @param {Function} cb\r\n *\r\n * @return {Parser}\r\n */\r\n this['on'] = function(name, cb) {\r\n\r\n if (typeof cb !== 'function') {\r\n throw error('required args <name, cb>');\r\n }\r\n\r\n switch (name) {\r\n case 'openTag': onOpenTag = cb; break;\r\n case 'text': onText = cb; break;\r\n case 'closeTag': onCloseTag = cb; break;\r\n case 'error': onError = cb; break;\r\n case 'warn': onWarning = cb; break;\r\n case 'cdata': onCDATA = cb; break;\r\n case 'attention': onAttention = cb; break; // <!XXXXX zzzz=\"eeee\">\r\n case 'question': onQuestion = cb; break; // <? .... ?>\r\n case 'comment': onComment = cb; break;\r\n default:\r\n throw error('unsupported event: ' + name);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Set the namespace to prefix mapping.\r\n *\r\n * @example\r\n *\r\n * parser.ns({\r\n * 'http://foo': 'foo',\r\n * 'http://bar': 'bar'\r\n * });\r\n *\r\n * @param {!Object<string, string>} nsMap\r\n *\r\n * @return {Parser}\r\n */\r\n this['ns'] = function(nsMap) {\r\n\r\n if (typeof nsMap === 'undefined') {\r\n nsMap = {};\r\n }\r\n\r\n if (typeof nsMap !== 'object') {\r\n throw error('required args <nsMap={}>');\r\n }\r\n\r\n var _nsUriToPrefix = {}, k;\r\n\r\n for (k in nsMap) {\r\n _nsUriToPrefix[k] = nsMap[k];\r\n }\r\n\r\n isNamespace = true;\r\n nsUriToPrefix = _nsUriToPrefix;\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Reset the parser state before a (streamed) parse run.\r\n */\r\n function resetState() {\r\n nsMatrixStack = isNamespace ? [] : null;\r\n nsMatrix = isNamespace ? buildNsMatrix(nsUriToPrefix) : null;\r\n nodeStack = [];\r\n\r\n getContext = noopGetContext;\r\n parseStop = false;\r\n returnError = null;\r\n rootTagFound = false;\r\n leftoverXml = '';\r\n }\r\n\r\n /**\r\n * Parse a complete xml string.\r\n *\r\n * @param {string} xml\r\n *\r\n * @return {Error} returnError, if not thrown\r\n */\r\n this['parse'] = function(xml) {\r\n if (typeof xml !== 'string') {\r\n throw error('required args <xml=string>');\r\n }\r\n\r\n if (streaming) {\r\n throw error('parse during stream; call end() first');\r\n }\r\n\r\n resetState();\r\n\r\n parse(xml);\r\n\r\n getContext = noopGetContext;\r\n parseStop = false;\r\n\r\n return returnError;\r\n };\r\n\r\n /**\r\n * Write the next chunk of a streamed xml string.\r\n *\r\n * Parse events are emitted for all complete tokens; an\r\n * incomplete trailing token is buffered until the next\r\n * `write` or, ultimately, reported as an error on `end`.\r\n *\r\n * @param {string} xml\r\n *\r\n * @return {Parser} self\r\n */\r\n this['write'] = function(xml) {\r\n if (typeof xml !== 'string') {\r\n throw error('required args <xml=string>');\r\n }\r\n\r\n if (!streaming) {\r\n resetState();\r\n streaming = true;\r\n }\r\n\r\n if (!returnError) {\r\n leftoverXml = parse(leftoverXml + xml, true) || '';\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Finish parsing a streamed xml string, i.e. signal that\r\n * no more chunks will be written.\r\n *\r\n * @return {Error} returnError, if not thrown\r\n */\r\n this['end'] = function() {\r\n if (!streaming) {\r\n resetState();\r\n }\r\n\r\n // flush the buffered remainder, now treating an incomplete\r\n // trailing token as a hard error\r\n streaming = false;\r\n\r\n if (!returnError) {\r\n parse(leftoverXml);\r\n }\r\n\r\n leftoverXml = '';\r\n getContext = noopGetContext;\r\n parseStop = false;\r\n\r\n return returnError;\r\n };\r\n\r\n /**\r\n * Stop parsing.\r\n */\r\n this['stop'] = function() {\r\n parseStop = true;\r\n };\r\n\r\n /**\r\n * Parse string, invoking configured listeners on element.\r\n *\r\n * Namespace and node stack state is shared across (streamed)\r\n * invocations via the enclosing parser scope.\r\n *\r\n * Internal note: while `streaming`, an incomplete trailing token\r\n * is not treated as an error but returned so `write` can buffer it\r\n * and prepend it to the next chunk. This buffered remainder is an\r\n * implementation detail of the streaming buffer, not a public API;\r\n * outside of that case the return value is `undefined`.\r\n *\r\n * @param {string} xml\r\n * @param {boolean} streaming\r\n *\r\n * @return {string|undefined} buffered remainder, streaming internal use only\r\n */\r\n function parse(xml, streaming = false) {\r\n\r\n var elNameCache = null,\r\n elNameCacheMatrix = null;\r\n\r\n var _nsMatrix,\r\n anonymousNsCount = 0,\r\n tagStart = false,\r\n tagEnd = false,\r\n i = 0, j = 0,\r\n x, y, q, w, v,\r\n xmlns,\r\n elementName,\r\n _elementName,\r\n elementProxy\r\n ;\r\n\r\n var attrsString = '',\r\n attrsStart = 0,\r\n cachedAttrs // false = parsed with errors, null = needs parsing\r\n ;\r\n\r\n /**\r\n * Normalize a namespaced attribute name against the current\r\n * namespace matrix.\r\n *\r\n * @param {string} name\r\n * @param {string|boolean} defaultAlias\r\n *\r\n * @return {string|null} normalized name, or `null` when the prefix\r\n * has no namespace (a warning is emitted)\r\n */\r\n function normalizeAttrName(name, defaultAlias) {\r\n var w = name.indexOf(':');\r\n\r\n if (w === -1) {\r\n return name;\r\n }\r\n\r\n // normalize ns attribute name\r\n var nsName = nsMatrix[name.substring(0, w)];\r\n\r\n if (!nsName) {\r\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\r\n return null;\r\n }\r\n\r\n return defaultAlias === nsName\r\n ? name.substr(w + 1)\r\n : nsName + name.substr(w);\r\n }\r\n\r\n /**\r\n * Parse attributes on demand and returns the parsed attributes.\r\n *\r\n * Return semantics: (1) `false` on attribute parse error,\r\n * (2) object hash on extracted attrs.\r\n *\r\n * @return {boolean|Object}\r\n */\r\n function getAttrs() {\r\n if (cachedAttrs !== null) {\r\n return cachedAttrs;\r\n }\r\n\r\n var nsUri,\r\n nsUriPrefix,\r\n defaultAlias = isNamespace && nsMatrix['xmlns'],\r\n attrList = isNamespace && maybeNS ? [] : null,\r\n i = attrsStart,\r\n s = attrsString,\r\n l = s.length,\r\n hasNewMatrix,\r\n newalias,\r\n value,\r\n alias,\r\n name,\r\n attrs = {},\r\n seenAttrs = new Set(),\r\n skipAttr,\r\n w,\r\n j;\r\n\r\n parseAttr:\r\n for (; i < l; i++) {\r\n skipAttr = false;\r\n w = s.charCodeAt(i);\r\n\r\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE={ \\f\\n\\r\\t\\v}\r\n continue;\r\n }\r\n\r\n // wait for non whitespace character\r\n if (w < 65 || w > 122 || (w > 90 && w < 97)) {\r\n if (w !== 95 && w !== 58) { // char 95\"_\" 58\":\"\r\n handleWarning('illegal first char attribute name');\r\n skipAttr = true;\r\n }\r\n }\r\n\r\n // parse attribute name\r\n for (j = i + 1; j < l; j++) {\r\n w = s.charCodeAt(j);\r\n\r\n if (\r\n w > 96 && w < 123 ||\r\n w > 64 && w < 91 ||\r\n w > 47 && w < 59 ||\r\n w === 46 || // '.'\r\n w === 45 || // '-'\r\n w === 95 // '_'\r\n ) {\r\n continue;\r\n }\r\n\r\n // unexpected whitespace\r\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\r\n handleWarning('missing attribute value');\r\n i = j;\r\n\r\n continue parseAttr;\r\n }\r\n\r\n // expected \"=\"\r\n if (w === 61) { // \"=\" == 61\r\n break;\r\n }\r\n\r\n handleWarning('illegal attribute name char');\r\n skipAttr = true;\r\n }\r\n\r\n name = s.substring(i, j);\r\n\r\n if (name === 'xmlns:xmlns') {\r\n handleWarning('illegal declaration of xmlns');\r\n skipAttr = true;\r\n }\r\n\r\n w = s.charCodeAt(j + 1);\r\n\r\n if (w === 34) { // '\"'\r\n j = s.indexOf('\"', i = j + 2);\r\n\r\n if (j === -1) {\r\n j = s.indexOf('\\'', i);\r\n\r\n if (j !== -1) {\r\n handleWarning('attribute value quote missmatch');\r\n skipAttr = true;\r\n }\r\n }\r\n\r\n } else if (w === 39) { // \"'\"\r\n j = s.indexOf('\\'', i = j + 2);\r\n\r\n if (j === -1) {\r\n j = s.indexOf('\"', i);\r\n\r\n if (j !== -1) {\r\n handleWarning('attribute value quote missmatch');\r\n skipAttr = true;\r\n }\r\n }\r\n\r\n } else {\r\n handleWarning('missing attribute value quotes');\r\n skipAttr = true;\r\n\r\n // skip to next space\r\n for (j = j + 1; j < l; j++) {\r\n w = s.charCodeAt(j + 1);\r\n\r\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\r\n break;\r\n }\r\n }\r\n\r\n }\r\n\r\n if (j === -1) {\r\n handleWarning('missing closing quotes');\r\n\r\n j = l;\r\n skipAttr = true;\r\n }\r\n\r\n if (!skipAttr) {\r\n value = s.substring(i, j);\r\n }\r\n\r\n i = j;\r\n\r\n // ensure SPACE follows attribute\r\n // skip illegal content otherwise\r\n // example a=\"b\"c\r\n for (; j + 1 < l; j++) {\r\n w = s.charCodeAt(j + 1);\r\n\r\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\r\n break;\r\n }\r\n\r\n // FIRST ILLEGAL CHAR\r\n if (i === j) {\r\n handleWarning('illegal character after attribute end');\r\n skipAttr = true;\r\n }\r\n }\r\n\r\n // advance cursor to next attribute\r\n i = j + 1;\r\n\r\n if (skipAttr) {\r\n continue parseAttr;\r\n }\r\n\r\n // check attribute re-declaration\r\n if (seenAttrs.has(name)) {\r\n handleWarning('attribute <' + name + '> already defined');\r\n continue;\r\n }\r\n\r\n seenAttrs.add(name);\r\n\r\n if (!isNamespace) {\r\n attrs[name] = value;\r\n continue;\r\n }\r\n\r\n // try to extract namespace information\r\n if (maybeNS) {\r\n newalias = (\r\n name === 'xmlns'\r\n ? 'xmlns'\r\n : (name.charCodeAt(0) === 120 && name.substr(0, 6) === 'xmlns:')\r\n ? name.substr(6)\r\n : null\r\n );\r\n\r\n // handle xmlns(:alias) assignment\r\n if (newalias !== null) {\r\n nsUri = decodeEntities(value);\r\n nsUriPrefix = uriPrefix(newalias);\r\n\r\n alias = nsUriToPrefix[nsUri];\r\n\r\n if (!alias) {\r\n\r\n // no prefix defined or prefix collision\r\n if (\r\n (newalias === 'xmlns') ||\r\n (nsUriPrefix in nsMatrix && nsMatrix[nsUriPrefix] !== nsUri)\r\n ) {\r\n\r\n // alocate free ns prefix\r\n do {\r\n alias = 'ns' + (anonymousNsCount++);\r\n } while (typeof nsMatrix[alias] !== 'undefined');\r\n } else {\r\n alias = newalias;\r\n }\r\n\r\n nsUriToPrefix[nsUri] = alias;\r\n }\r\n\r\n if (nsMatrix[newalias] !== alias) {\r\n if (!hasNewMatrix) {\r\n nsMatrix = cloneNsMatrix(nsMatrix);\r\n hasNewMatrix = true;\r\n }\r\n\r\n nsMatrix[newalias] = alias;\r\n if (newalias === 'xmlns') {\r\n nsMatrix[uriPrefix(alias)] = nsUri;\r\n defaultAlias = alias;\r\n }\r\n\r\n nsMatrix[nsUriPrefix] = nsUri;\r\n }\r\n\r\n // expose xmlns(:asd)=\"...\" in attributes\r\n attrs[name] = value;\r\n continue;\r\n }\r\n\r\n // collect attributes until all namespace\r\n // declarations are processed\r\n attrList.push(name, value);\r\n continue;\r\n\r\n } /** end if (maybeNs) */\r\n\r\n // handle attributes on element without\r\n // namespace declarations\r\n name = normalizeAttrName(name, defaultAlias);\r\n\r\n if (name === null) {\r\n continue;\r\n }\r\n\r\n attrs[name] = value;\r\n }\r\n\r\n\r\n // handle deferred, possibly namespaced attributes\r\n if (maybeNS) {\r\n\r\n // normalize captured attributes\r\n for (i = 0, l = attrList.length; i < l; i++) {\r\n\r\n name = normalizeAttrName(attrList[i++], defaultAlias);\r\n value = attrList[i];\r\n\r\n if (name === null) {\r\n continue;\r\n }\r\n\r\n attrs[name] = value;\r\n }\r\n\r\n // end: normalize captured attributes\r\n }\r\n\r\n return cachedAttrs = attrs;\r\n }\r\n\r\n /**\r\n * Extract the parse context { line, column, part }\r\n * from the current parser position.\r\n *\r\n * @return {Object} parse context\r\n */\r\n function getParseContext() {\r\n var splitsRe = /(\\r\\n|\\r|\\n)/g;\r\n\r\n var line = 0;\r\n var column = 0;\r\n var startOfLine = 0;\r\n var endOfLine = j;\r\n var match;\r\n var data;\r\n\r\n while (i >= startOfLine) {\r\n\r\n match = splitsRe.exec(xml);\r\n\r\n if (!match) {\r\n break;\r\n }\r\n\r\n // end of line = (break idx + break chars)\r\n endOfLine = match[0].length + match.index;\r\n\r\n if (endOfLine > i) {\r\n break;\r\n }\r\n\r\n // advance to next line\r\n line += 1;\r\n\r\n startOfLine = endOfLine;\r\n }\r\n\r\n // EOF errors\r\n if (i == -1) {\r\n column = endOfLine;\r\n data = xml.substring(j);\r\n } else\r\n\r\n // start errors\r\n if (j === 0) {\r\n data = xml.substring(j, i);\r\n }\r\n\r\n // other errors\r\n else {\r\n column = i - startOfLine;\r\n data = (j == -1 ? xml.substring(i) : xml.substring(i, j + 1));\r\n }\r\n\r\n return {\r\n 'data': data,\r\n 'line': line,\r\n 'column': column\r\n };\r\n }\r\n\r\n getContext = getParseContext;\r\n\r\n\r\n if (proxy) {\r\n elementProxy = Object.create({}, {\r\n 'name': getter(function() {\r\n return elementName;\r\n }),\r\n 'originalName': getter(function() {\r\n return _elementName;\r\n }),\r\n 'attrs': getter(getAttrs),\r\n 'ns': getter(function() {\r\n return nsMatrix;\r\n })\r\n });\r\n }\r\n\r\n // actual parse logic\r\n while (j !== -1) {\r\n\r\n if (xml.charCodeAt(j) === 60) { // \"<\"\r\n i = j;\r\n } else {\r\n i = xml.indexOf('<', j);\r\n }\r\n\r\n // no (more) tags found\r\n if (i === -1) {\r\n\r\n // buffer the remainder for the next chunk\r\n if (streaming) {\r\n return xml.substring(j);\r\n }\r\n\r\n if (nodeStack.length) {\r\n return handleError('unexpected end of file');\r\n }\r\n\r\n if (!rootTagFound) {\r\n return handleError('missing start tag');\r\n }\r\n\r\n if (j < xml.length) {\r\n if (xml.substring(j).trim()) {\r\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n // remember that we saw the root tag\r\n if (!rootTagFound) {\r\n rootTagFound = true;\r\n }\r\n\r\n // parse text\r\n if (j !== i) {\r\n\r\n if (nodeStack.length) {\r\n if (onText) {\r\n onText(xml.substring(j, i), decodeEntities, getContext);\r\n\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n } else {\r\n if (xml.substring(j, i).trim()) {\r\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\r\n\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n w = xml.charCodeAt(i + 1);\r\n\r\n // parse comments + CDATA\r\n if (w === 33) { // \"!\"\r\n q = xml.charCodeAt(i + 2);\r\n\r\n // CDATA section\r\n if (q === 91 && xml.substr(i + 3, 6) === 'CDATA[') { // 91 == \"[\"\r\n j = xml.indexOf(']]>', i);\r\n if (j === -1) {\r\n if (streaming) {\r\n return xml.substring(i);\r\n }\r\n return handleError('unclosed cdata');\r\n }\r\n\r\n if (onCDATA) {\r\n onCDATA(xml.substring(i + 9, j), getContext);\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n j += 3;\r\n continue;\r\n }\r\n\r\n // comment\r\n if (q === 45 && xml.charCodeAt(i + 3) === 45) { // 45 == \"-\"\r\n j = xml.indexOf('-->', i);\r\n if (j === -1) {\r\n if (streaming) {\r\n return xml.substring(i);\r\n }\r\n return handleError('unclosed comment');\r\n }\r\n\r\n\r\n if (onComment) {\r\n onComment(xml.substring(i + 4, j), decodeEntities, getContext);\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n j += 3;\r\n continue;\r\n }\r\n }\r\n\r\n // parse question <? ... ?>\r\n if (w === 63) { // \"?\"\r\n j = xml.indexOf('?>', i);\r\n if (j === -1) {\r\n if (streaming) {\r\n return xml.substring(i);\r\n }\r\n return handleError('unclosed question');\r\n }\r\n\r\n if (onQuestion) {\r\n onQuestion(xml.substring(i, j + 2), getContext);\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n j += 2;\r\n continue;\r\n }\r\n\r\n // find matching closing tag for attention or standard tags\r\n // for that we must skip through attribute values\r\n // (enclosed in single or double quotes)\r\n for (x = i + 1; ; x++) {\r\n v = xml.charCodeAt(x);\r\n if (isNaN(v)) {\r\n if (streaming) {\r\n return xml.substring(i);\r\n }\r\n j = -1;\r\n return handleError('unclosed tag');\r\n }\r\n\r\n // [10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"\r\n // skips the quoted string\r\n // (double quotes) does not appear in a literal enclosed by (double quotes)\r\n // (single quote) does not appear in a literal enclosed by (single quote)\r\n if (v === 34) { // '\"'\r\n q = xml.indexOf('\"', x + 1);\r\n x = q !== -1 ? q : x;\r\n } else if (v === 39) { // \"'\"\r\n q = xml.indexOf(\"'\", x + 1);\r\n x = q !== -1 ? q : x;\r\n } else if (v === 62) { // '>'\r\n j = x;\r\n break;\r\n }\r\n }\r\n\r\n\r\n // parse attention <! ...>\r\n // previously comment and CDATA have already been parsed\r\n if (w === 33) { // \"!\"\r\n\r\n if (onAttention) {\r\n onAttention(xml.substring(i, j + 1), decodeEntities, getContext);\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n j += 1;\r\n continue;\r\n }\r\n\r\n // don't process attributes;\r\n // there are none\r\n cachedAttrs = {};\r\n\r\n // if (xml.charCodeAt(i+1) === 47) { // </...\r\n if (w === 47) { // </...\r\n tagStart = false;\r\n tagEnd = true;\r\n\r\n if (!nodeStack.length) {\r\n return handleError('missing open tag');\r\n }\r\n\r\n // verify open <-> close tag match\r\n x = elementName = nodeStack.pop();\r\n q = i + 2 + x.length;\r\n\r\n if (xml.substring(i + 2, q) !== x) {\r\n return handleError('closing tag mismatch');\r\n }\r\n\r\n // verify chars in close tag\r\n for (; q < j; q++) {\r\n w = xml.charCodeAt(q);\r\n\r\n if (w === 32 || (w > 8 && w < 14)) { // \\f\\n\\r\\t\\v space\r\n continue;\r\n }\r\n\r\n return handleError('close tag');\r\n }\r\n\r\n } else {\r\n if (xml.charCodeAt(j - 1) === 47) { // .../>\r\n x = elementName = xml.substring(i + 1, j - 1);\r\n\r\n tagStart = true;\r\n tagEnd = true;\r\n\r\n } else {\r\n x = elementName = xml.substring(i + 1, j);\r\n\r\n tagStart = true;\r\n tagEnd = false;\r\n }\r\n\r\n if (!(w > 96 && w < 123 || w > 64 && w < 91 || w === 95 || w === 58)) { // char 95\"_\" 58\":\"\r\n return handleError('illegal first char nodeName');\r\n }\r\n\r\n for (q = 1, y = x.length; q < y; q++) {\r\n w = x.charCodeAt(q);\r\n\r\n if (w > 96 && w < 123 || w > 64 && w < 91 || w > 47 && w < 59 || w === 45 || w === 95 || w == 46) {\r\n continue;\r\n }\r\n\r\n if (w === 32 || (w < 14 && w > 8)) { // \\f\\n\\r\\t\\v space\r\n elementName = x.substring(0, q);\r\n\r\n // maybe there are attributes\r\n cachedAttrs = null;\r\n break;\r\n }\r\n\r\n return handleError('invalid nodeName');\r\n }\r\n\r\n if (!tagEnd) {\r\n nodeStack.push(elementName);\r\n }\r\n }\r\n\r\n if (isNamespace) {\r\n\r\n _nsMatrix = nsMatrix;\r\n\r\n if (tagStart) {\r\n\r\n // remember old namespace\r\n // unless we're self-closing\r\n if (!tagEnd) {\r\n nsMatrixStack.push(_nsMatrix);\r\n }\r\n\r\n if (cachedAttrs === null) {\r\n\r\n // quick check, whether there may be namespace\r\n // declarations on the node; if that is the case\r\n // we need to eagerly parse the node attributes\r\n if ((maybeNS = x.indexOf('xmlns', q) !== -1)) {\r\n attrsStart = q;\r\n attrsString = x;\r\n\r\n getAttrs();\r\n\r\n maybeNS = false;\r\n }\r\n }\r\n }\r\n\r\n _elementName = elementName;\r\n\r\n // memoize normalized names per namespace matrix; tag names\r\n // typically repeat heavily and the matrix rarely changes.\r\n if (elNameCacheMatrix !== nsMatrix) {\r\n elNameCache = nsMatrix[NAME_CACHE];\r\n if (elNameCache === undefined) {\r\n elNameCache = nsMatrix[NAME_CACHE] = {};\r\n }\r\n elNameCacheMatrix = nsMatrix;\r\n }\r\n\r\n var _cachedName = elNameCache[elementName];\r\n\r\n if (_cachedName !== undefined) {\r\n elementName = _cachedName;\r\n } else {\r\n\r\n w = elementName.indexOf(':');\r\n if (w !== -1) {\r\n xmlns = nsMatrix[elementName.substring(0, w)];\r\n\r\n // prefix given; namespace must exist\r\n if (!xmlns) {\r\n return handleError('missing namespace on <' + _elementName + '>');\r\n }\r\n\r\n elementName = elementName.substr(w + 1);\r\n } else {\r\n xmlns = nsMatrix['xmlns'];\r\n\r\n // if no default namespace is defined,\r\n // we'll import the element as anonymous.\r\n //\r\n // it is up to users to correct that to the document defined\r\n // targetNamespace, or whatever their undersanding of the\r\n // XML spec mandates.\r\n }\r\n\r\n // adjust namespace prefixs as configured\r\n if (xmlns) {\r\n elementName = xmlns + ':' + elementName;\r\n }\r\n\r\n elNameCache[_elementName] = elementName;\r\n }\r\n\r\n }\r\n\r\n if (tagStart) {\r\n attrsStart = q;\r\n attrsString = x;\r\n\r\n if (onOpenTag) {\r\n if (proxy) {\r\n onOpenTag(elementProxy, decodeEntities, tagEnd, getContext);\r\n } else {\r\n onOpenTag(elementName, getAttrs, decodeEntities, tagEnd, getContext);\r\n }\r\n\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n }\r\n\r\n if (tagEnd) {\r\n\r\n if (onCloseTag) {\r\n onCloseTag(proxy ? elementProxy : elementName, decodeEntities, tagStart, getContext);\r\n\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n // restore old namespace\r\n if (isNamespace) {\r\n if (!tagStart) {\r\n nsMatrix = nsMatrixStack.pop();\r\n } else {\r\n nsMatrix = _nsMatrix;\r\n }\r\n }\r\n }\r\n\r\n j += 1;\r\n }\r\n } /** end parse */\r\n\r\n}\r\n\r\nreturn Parser(options);\r\n\r\n}"],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","names":["Parser_","options","fromCharCode","String","hasOwnProperty","Object","prototype","ENTITY_PATTERN","ENTITY_MAPPING","keys","forEach","k","toUpperCase","replaceEntities","_","d","x","z","call","parseInt","decodeEntities","s","length","indexOf","replace","NON_WHITESPACE_OUTSIDE_ROOT_NODE","error","msg","Error","missingNamespaceForPrefix","prefix","getter","getFn","cloneNsMatrix","nsMatrix","clone","key","NAME_CACHE","Symbol","uriPrefix","buildNsMatrix","nsUriToPrefix","uri","noopGetContext","line","column","throwFunc","err","Parser","proxy","onText","onOpenTag","onCloseTag","onCDATA","onError","onWarning","onComment","onQuestion","onAttention","getContext","streaming","rootTagFound","leftoverXml","maybeNS","isNamespace","returnError","parseStop","nsMatrixStack","nodeStack","handleError","handleWarning","name","cb","nsMap","_typeof","_nsUriToPrefix","resetState","xml","parse","arguments","undefined","elNameCache","elNameCacheMatrix","_nsMatrix","anonymousNsCount","tagStart","tagEnd","i","j","y","q","w","v","xmlns","elementName","_elementName","elementProxy","attrsString","attrsStart","cachedAttrs","normalizeAttrName","defaultAlias","nsName","substring","substr","getAttrs","nsUri","nsUriPrefix","attrList","l","hasNewMatrix","newalias","value","alias","attrs","seenAttrs","Set","skipAttr","parseAttr","charCodeAt","has","add","push","getParseContext","splitsRe","startOfLine","endOfLine","match","data","exec","index","create","trim","isNaN","pop","_cachedName"],"sources":["../../source/saxen/parser.js"],"sourcesContent":["// See `README.md` for more info\r\n\r\nexport default function Parser_(options) {\r\n\r\n// `decode.js` file contents\r\n\r\nvar fromCharCode = String.fromCharCode;\r\n\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nvar ENTITY_PATTERN = /&#(\\d+);|&#x([0-9a-f]+);|&(\\w+);/ig;\r\n\r\nvar ENTITY_MAPPING = {\r\n 'amp': '&',\r\n 'apos': '\\'',\r\n 'gt': '>',\r\n 'lt': '<',\r\n 'quot': '\"'\r\n};\r\n\r\n// map UPPERCASE variants of supported special chars\r\nObject.keys(ENTITY_MAPPING).forEach(function(k) {\r\n ENTITY_MAPPING[k.toUpperCase()] = ENTITY_MAPPING[k];\r\n});\r\n\r\n\r\nfunction replaceEntities(_, d, x, z) {\r\n\r\n // reserved names, i.e. &nbsp;\r\n if (z) {\r\n if (hasOwnProperty.call(ENTITY_MAPPING, z)) {\r\n return ENTITY_MAPPING[z];\r\n } else {\r\n\r\n // fall back to original value\r\n return '&' + z + ';';\r\n }\r\n }\r\n\r\n // decimal encoded char\r\n if (d) {\r\n return fromCharCode(d);\r\n }\r\n\r\n // hex encoded char\r\n return fromCharCode(parseInt(x, 16));\r\n}\r\n\r\n\r\n/**\r\n * A basic entity decoder that can decode a minimal\r\n * sub-set of reserved names (&amp;) as well as\r\n * hex (&#xaaf;) and decimal (&#1231;) encoded characters.\r\n *\r\n * @param {string} s\r\n *\r\n * @return {string} decoded string\r\n */\r\nfunction decodeEntities(s) {\r\n if (s.length > 3 && s.indexOf('&') !== -1) {\r\n return s.replace(ENTITY_PATTERN, replaceEntities);\r\n }\r\n\r\n return s;\r\n}\r\n\r\n// `parser.js` file contents\r\n\r\nvar NON_WHITESPACE_OUTSIDE_ROOT_NODE = 'non-whitespace outside of root node';\r\n\r\nfunction error(msg) {\r\n return new Error(msg);\r\n}\r\n\r\nfunction missingNamespaceForPrefix(prefix) {\r\n return 'missing namespace for prefix <' + prefix + '>';\r\n}\r\n\r\nfunction getter(getFn) {\r\n return {\r\n 'get': getFn,\r\n 'enumerable': true\r\n };\r\n}\r\n\r\nfunction cloneNsMatrix(nsMatrix) {\r\n var clone = {}, key;\r\n for (key in nsMatrix) {\r\n clone[key] = nsMatrix[key];\r\n }\r\n return clone;\r\n}\r\n\r\n// per-matrix element name cache; stored under a symbol so it is\r\n// invisible to the `for (key in nsMatrix)` clone above and gets\r\n// collected together with the matrix it belongs to\r\nvar NAME_CACHE = Symbol('nameCache');\r\n\r\nfunction uriPrefix(prefix) {\r\n return prefix + '$uri';\r\n}\r\n\r\nfunction buildNsMatrix(nsUriToPrefix) {\r\n var nsMatrix = {},\r\n uri,\r\n prefix;\r\n\r\n for (uri in nsUriToPrefix) {\r\n prefix = nsUriToPrefix[uri];\r\n nsMatrix[prefix] = prefix;\r\n nsMatrix[uriPrefix(prefix)] = uri;\r\n }\r\n\r\n return nsMatrix;\r\n}\r\n\r\nfunction noopGetContext() {\r\n return { line: 0, column: 0 };\r\n}\r\n\r\nfunction throwFunc(err) {\r\n throw err;\r\n}\r\n\r\n/**\r\n * Creates a new parser with the given options.\r\n *\r\n * @constructor\r\n *\r\n * @param {!Object<string, ?>=} options\r\n */\r\nfunction Parser(options) {\r\n\r\n if (!this) {\r\n return new Parser(options);\r\n }\r\n\r\n var proxy = options && options['proxy'];\r\n\r\n var onText,\r\n onOpenTag,\r\n onCloseTag,\r\n onCDATA,\r\n onError = throwFunc,\r\n onWarning,\r\n onComment,\r\n onQuestion,\r\n onAttention;\r\n\r\n var getContext = noopGetContext;\r\n\r\n /**\r\n * Are we currently consuming a chunked stream of XML,\r\n * i.e. is a `write` call in progress that may be followed\r\n * by more chunks?\r\n *\r\n * @type {boolean}\r\n */\r\n var streaming = false;\r\n\r\n /**\r\n * Did we already encounter the root tag?\r\n *\r\n * Persisted across `write` calls so we can detect a missing\r\n * start tag once the stream ends.\r\n *\r\n * @type {boolean}\r\n */\r\n var rootTagFound = false;\r\n\r\n /**\r\n * Not yet parsed remainder of the previously written chunk,\r\n * i.e. an incomplete token that awaits more input.\r\n *\r\n * @type {string}\r\n */\r\n var leftoverXml = '';\r\n\r\n /**\r\n * Do we need to parse the current elements attributes for namespaces?\r\n *\r\n * @type {boolean}\r\n */\r\n var maybeNS = false;\r\n\r\n /**\r\n * Do we process namespaces at all?\r\n *\r\n * @type {boolean}\r\n */\r\n var isNamespace = false;\r\n\r\n /**\r\n * The caught error returned on parse end\r\n *\r\n * @type {Error}\r\n */\r\n var returnError = null;\r\n\r\n /**\r\n * Should we stop parsing?\r\n *\r\n * @type {boolean}\r\n */\r\n var parseStop = false;\r\n\r\n /**\r\n * Namespace + node state shared across (streamed) parse runs.\r\n */\r\n var nsMatrixStack,\r\n nsMatrix,\r\n nodeStack;\r\n\r\n /**\r\n * A map of { uri: prefix } used by the parser.\r\n *\r\n * This map will ensure we can normalize prefixes during processing;\r\n * for each uri, only one prefix will be exposed to the handlers.\r\n *\r\n * @type {!Object<string, string>}}\r\n */\r\n var nsUriToPrefix;\r\n\r\n /**\r\n * Handle parse error.\r\n *\r\n * @param {string|Error} err\r\n */\r\n function handleError(err) {\r\n if (!(err instanceof Error)) {\r\n err = error(err);\r\n }\r\n\r\n returnError = err;\r\n\r\n onError(err, getContext);\r\n }\r\n\r\n /**\r\n * Handle parse error.\r\n *\r\n * @param {string|Error} err\r\n */\r\n function handleWarning(err) {\r\n\r\n if (!onWarning) {\r\n return;\r\n }\r\n\r\n if (!(err instanceof Error)) {\r\n err = error(err);\r\n }\r\n\r\n onWarning(err, getContext);\r\n }\r\n\r\n /**\r\n * Register parse listener.\r\n *\r\n * @param {string} name\r\n * @param {Function} cb\r\n *\r\n * @return {Parser}\r\n */\r\n this['on'] = function(name, cb) {\r\n\r\n if (typeof cb !== 'function') {\r\n throw error('required args <name, cb>');\r\n }\r\n\r\n switch (name) {\r\n case 'openTag': onOpenTag = cb; break;\r\n case 'text': onText = cb; break;\r\n case 'closeTag': onCloseTag = cb; break;\r\n case 'error': onError = cb; break;\r\n case 'warn': onWarning = cb; break;\r\n case 'cdata': onCDATA = cb; break;\r\n case 'attention': onAttention = cb; break; // <!XXXXX zzzz=\"eeee\">\r\n case 'question': onQuestion = cb; break; // <? .... ?>\r\n case 'comment': onComment = cb; break;\r\n default:\r\n throw error('unsupported event: ' + name);\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Set the namespace to prefix mapping.\r\n *\r\n * @example\r\n *\r\n * parser.ns({\r\n * 'http://foo': 'foo',\r\n * 'http://bar': 'bar'\r\n * });\r\n *\r\n * @param {!Object<string, string>} nsMap\r\n *\r\n * @return {Parser}\r\n */\r\n this['ns'] = function(nsMap) {\r\n\r\n if (typeof nsMap === 'undefined') {\r\n nsMap = {};\r\n }\r\n\r\n if (typeof nsMap !== 'object') {\r\n throw error('required args <nsMap={}>');\r\n }\r\n\r\n var _nsUriToPrefix = {}, k;\r\n\r\n for (k in nsMap) {\r\n _nsUriToPrefix[k] = nsMap[k];\r\n }\r\n\r\n isNamespace = true;\r\n nsUriToPrefix = _nsUriToPrefix;\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Reset the parser state before a (streamed) parse run.\r\n */\r\n function resetState() {\r\n nsMatrixStack = isNamespace ? [] : null;\r\n nsMatrix = isNamespace ? buildNsMatrix(nsUriToPrefix) : null;\r\n nodeStack = [];\r\n\r\n getContext = noopGetContext;\r\n parseStop = false;\r\n returnError = null;\r\n rootTagFound = false;\r\n leftoverXml = '';\r\n }\r\n\r\n /**\r\n * Parse a complete xml string.\r\n *\r\n * @param {string} xml\r\n *\r\n * @return {Error} returnError, if not thrown\r\n */\r\n this['parse'] = function(xml) {\r\n if (typeof xml !== 'string') {\r\n throw error('required args <xml=string>');\r\n }\r\n\r\n if (streaming) {\r\n throw error('parse during stream; call end() first');\r\n }\r\n\r\n resetState();\r\n\r\n parse(xml);\r\n\r\n getContext = noopGetContext;\r\n parseStop = false;\r\n\r\n return returnError;\r\n };\r\n\r\n /**\r\n * Write the next chunk of a streamed xml string.\r\n *\r\n * Parse events are emitted for all complete tokens; an\r\n * incomplete trailing token is buffered until the next\r\n * `write` or, ultimately, reported as an error on `end`.\r\n *\r\n * @param {string} xml\r\n *\r\n * @return {Parser} self\r\n */\r\n this['write'] = function(xml) {\r\n if (typeof xml !== 'string') {\r\n throw error('required args <xml=string>');\r\n }\r\n\r\n if (!streaming) {\r\n resetState();\r\n streaming = true;\r\n }\r\n\r\n if (!returnError) {\r\n leftoverXml = parse(leftoverXml + xml, true) || '';\r\n }\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Finish parsing a streamed xml string, i.e. signal that\r\n * no more chunks will be written.\r\n *\r\n * @return {Error} returnError, if not thrown\r\n */\r\n this['end'] = function() {\r\n if (!streaming) {\r\n resetState();\r\n }\r\n\r\n // flush the buffered remainder, now treating an incomplete\r\n // trailing token as a hard error\r\n streaming = false;\r\n\r\n if (!returnError) {\r\n parse(leftoverXml);\r\n }\r\n\r\n leftoverXml = '';\r\n getContext = noopGetContext;\r\n parseStop = false;\r\n\r\n return returnError;\r\n };\r\n\r\n /**\r\n * Stop parsing.\r\n */\r\n this['stop'] = function() {\r\n parseStop = true;\r\n };\r\n\r\n /**\r\n * Parse string, invoking configured listeners on element.\r\n *\r\n * Namespace and node stack state is shared across (streamed)\r\n * invocations via the enclosing parser scope.\r\n *\r\n * Internal note: while `streaming`, an incomplete trailing token\r\n * is not treated as an error but returned so `write` can buffer it\r\n * and prepend it to the next chunk. This buffered remainder is an\r\n * implementation detail of the streaming buffer, not a public API;\r\n * outside of that case the return value is `undefined`.\r\n *\r\n * @param {string} xml\r\n * @param {boolean} streaming\r\n *\r\n * @return {string|undefined} buffered remainder, streaming internal use only\r\n */\r\n function parse(xml, streaming = false) {\r\n\r\n var elNameCache = null,\r\n elNameCacheMatrix = null;\r\n\r\n var _nsMatrix,\r\n anonymousNsCount = 0,\r\n tagStart = false,\r\n tagEnd = false,\r\n i = 0, j = 0,\r\n x, y, q, w, v,\r\n xmlns,\r\n elementName,\r\n _elementName,\r\n elementProxy\r\n ;\r\n\r\n var attrsString = '',\r\n attrsStart = 0,\r\n cachedAttrs // false = parsed with errors, null = needs parsing\r\n ;\r\n\r\n /**\r\n * Normalize a namespaced attribute name against the current\r\n * namespace matrix.\r\n *\r\n * @param {string} name\r\n * @param {string|boolean} defaultAlias\r\n *\r\n * @return {string|null} normalized name, or `null` when the prefix\r\n * has no namespace (a warning is emitted)\r\n */\r\n function normalizeAttrName(name, defaultAlias) {\r\n var w = name.indexOf(':');\r\n\r\n if (w === -1) {\r\n return name;\r\n }\r\n\r\n // normalize ns attribute name\r\n var nsName = nsMatrix[name.substring(0, w)];\r\n\r\n if (!nsName) {\r\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\r\n return null;\r\n }\r\n\r\n return defaultAlias === nsName\r\n ? name.substr(w + 1)\r\n : nsName + name.substr(w);\r\n }\r\n\r\n /**\r\n * Parse attributes on demand and returns the parsed attributes.\r\n *\r\n * Return semantics: (1) `false` on attribute parse error,\r\n * (2) object hash on extracted attrs.\r\n *\r\n * @return {boolean|Object}\r\n */\r\n function getAttrs() {\r\n if (cachedAttrs !== null) {\r\n return cachedAttrs;\r\n }\r\n\r\n var nsUri,\r\n nsUriPrefix,\r\n defaultAlias = isNamespace && nsMatrix['xmlns'],\r\n attrList = isNamespace && maybeNS ? [] : null,\r\n i = attrsStart,\r\n s = attrsString,\r\n l = s.length,\r\n hasNewMatrix,\r\n newalias,\r\n value,\r\n alias,\r\n name,\r\n attrs = {},\r\n seenAttrs = new Set(),\r\n skipAttr,\r\n w,\r\n j;\r\n\r\n parseAttr:\r\n for (; i < l; i++) {\r\n skipAttr = false;\r\n w = s.charCodeAt(i);\r\n\r\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE={ \\f\\n\\r\\t\\v}\r\n continue;\r\n }\r\n\r\n // wait for non whitespace character\r\n if (w < 65 || w > 122 || (w > 90 && w < 97)) {\r\n if (w !== 95 && w !== 58) { // char 95\"_\" 58\":\"\r\n handleWarning('illegal first char attribute name');\r\n skipAttr = true;\r\n }\r\n }\r\n\r\n // parse attribute name\r\n for (j = i + 1; j < l; j++) {\r\n w = s.charCodeAt(j);\r\n\r\n if (\r\n w > 96 && w < 123 ||\r\n w > 64 && w < 91 ||\r\n w > 47 && w < 59 ||\r\n w === 46 || // '.'\r\n w === 45 || // '-'\r\n w === 95 // '_'\r\n ) {\r\n continue;\r\n }\r\n\r\n // unexpected whitespace\r\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\r\n handleWarning('missing attribute value');\r\n i = j;\r\n\r\n continue parseAttr;\r\n }\r\n\r\n // expected \"=\"\r\n if (w === 61) { // \"=\" == 61\r\n break;\r\n }\r\n\r\n handleWarning('illegal attribute name char');\r\n skipAttr = true;\r\n }\r\n\r\n name = s.substring(i, j);\r\n\r\n if (name === 'xmlns:xmlns') {\r\n handleWarning('illegal declaration of xmlns');\r\n skipAttr = true;\r\n }\r\n\r\n w = s.charCodeAt(j + 1);\r\n\r\n if (w === 34) { // '\"'\r\n j = s.indexOf('\"', i = j + 2);\r\n\r\n if (j === -1) {\r\n j = s.indexOf('\\'', i);\r\n\r\n if (j !== -1) {\r\n handleWarning('attribute value quote missmatch');\r\n skipAttr = true;\r\n }\r\n }\r\n\r\n } else if (w === 39) { // \"'\"\r\n j = s.indexOf('\\'', i = j + 2);\r\n\r\n if (j === -1) {\r\n j = s.indexOf('\"', i);\r\n\r\n if (j !== -1) {\r\n handleWarning('attribute value quote missmatch');\r\n skipAttr = true;\r\n }\r\n }\r\n\r\n } else {\r\n handleWarning('missing attribute value quotes');\r\n skipAttr = true;\r\n\r\n // skip to next space\r\n for (j = j + 1; j < l; j++) {\r\n w = s.charCodeAt(j + 1);\r\n\r\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\r\n break;\r\n }\r\n }\r\n\r\n }\r\n\r\n if (j === -1) {\r\n handleWarning('missing closing quotes');\r\n\r\n j = l;\r\n skipAttr = true;\r\n }\r\n\r\n if (!skipAttr) {\r\n value = s.substring(i, j);\r\n }\r\n\r\n i = j;\r\n\r\n // ensure SPACE follows attribute\r\n // skip illegal content otherwise\r\n // example a=\"b\"c\r\n for (; j + 1 < l; j++) {\r\n w = s.charCodeAt(j + 1);\r\n\r\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\r\n break;\r\n }\r\n\r\n // FIRST ILLEGAL CHAR\r\n if (i === j) {\r\n handleWarning('illegal character after attribute end');\r\n skipAttr = true;\r\n }\r\n }\r\n\r\n // advance cursor to next attribute\r\n i = j + 1;\r\n\r\n if (skipAttr) {\r\n continue parseAttr;\r\n }\r\n\r\n // check attribute re-declaration\r\n if (seenAttrs.has(name)) {\r\n handleWarning('attribute <' + name + '> already defined');\r\n continue;\r\n }\r\n\r\n seenAttrs.add(name);\r\n\r\n if (!isNamespace) {\r\n attrs[name] = value;\r\n continue;\r\n }\r\n\r\n // try to extract namespace information\r\n if (maybeNS) {\r\n newalias = (\r\n name === 'xmlns'\r\n ? 'xmlns'\r\n : (name.charCodeAt(0) === 120 && name.substr(0, 6) === 'xmlns:')\r\n ? name.substr(6)\r\n : null\r\n );\r\n\r\n // handle xmlns(:alias) assignment\r\n if (newalias !== null) {\r\n nsUri = decodeEntities(value);\r\n nsUriPrefix = uriPrefix(newalias);\r\n\r\n alias = nsUriToPrefix[nsUri];\r\n\r\n if (!alias) {\r\n\r\n // no prefix defined or prefix collision\r\n if (\r\n (newalias === 'xmlns') ||\r\n (nsUriPrefix in nsMatrix && nsMatrix[nsUriPrefix] !== nsUri)\r\n ) {\r\n\r\n // alocate free ns prefix\r\n do {\r\n alias = 'ns' + (anonymousNsCount++);\r\n } while (typeof nsMatrix[alias] !== 'undefined');\r\n } else {\r\n alias = newalias;\r\n }\r\n\r\n nsUriToPrefix[nsUri] = alias;\r\n }\r\n\r\n if (nsMatrix[newalias] !== alias) {\r\n if (!hasNewMatrix) {\r\n nsMatrix = cloneNsMatrix(nsMatrix);\r\n hasNewMatrix = true;\r\n }\r\n\r\n nsMatrix[newalias] = alias;\r\n if (newalias === 'xmlns') {\r\n nsMatrix[uriPrefix(alias)] = nsUri;\r\n defaultAlias = alias;\r\n }\r\n\r\n nsMatrix[nsUriPrefix] = nsUri;\r\n }\r\n\r\n // expose xmlns(:asd)=\"...\" in attributes\r\n attrs[name] = value;\r\n continue;\r\n }\r\n\r\n // collect attributes until all namespace\r\n // declarations are processed\r\n attrList.push(name, value);\r\n continue;\r\n\r\n } /** end if (maybeNs) */\r\n\r\n // handle attributes on element without\r\n // namespace declarations\r\n name = normalizeAttrName(name, defaultAlias);\r\n\r\n if (name === null) {\r\n continue;\r\n }\r\n\r\n attrs[name] = value;\r\n }\r\n\r\n\r\n // handle deferred, possibly namespaced attributes\r\n if (maybeNS) {\r\n\r\n // normalize captured attributes\r\n for (i = 0, l = attrList.length; i < l; i++) {\r\n\r\n name = normalizeAttrName(attrList[i++], defaultAlias);\r\n value = attrList[i];\r\n\r\n if (name === null) {\r\n continue;\r\n }\r\n\r\n attrs[name] = value;\r\n }\r\n\r\n // end: normalize captured attributes\r\n }\r\n\r\n return cachedAttrs = attrs;\r\n }\r\n\r\n /**\r\n * Extract the parse context { line, column, part }\r\n * from the current parser position.\r\n *\r\n * @return {Object} parse context\r\n */\r\n function getParseContext() {\r\n var splitsRe = /(\\r\\n|\\r|\\n)/g;\r\n\r\n var line = 0;\r\n var column = 0;\r\n var startOfLine = 0;\r\n var endOfLine = j;\r\n var match;\r\n var data;\r\n\r\n while (i >= startOfLine) {\r\n\r\n match = splitsRe.exec(xml);\r\n\r\n if (!match) {\r\n break;\r\n }\r\n\r\n // end of line = (break idx + break chars)\r\n endOfLine = match[0].length + match.index;\r\n\r\n if (endOfLine > i) {\r\n break;\r\n }\r\n\r\n // advance to next line\r\n line += 1;\r\n\r\n startOfLine = endOfLine;\r\n }\r\n\r\n // EOF errors\r\n if (i == -1) {\r\n column = endOfLine;\r\n data = xml.substring(j);\r\n } else\r\n\r\n // start errors\r\n if (j === 0) {\r\n data = xml.substring(j, i);\r\n }\r\n\r\n // other errors\r\n else {\r\n column = i - startOfLine;\r\n data = (j == -1 ? xml.substring(i) : xml.substring(i, j + 1));\r\n }\r\n\r\n return {\r\n 'data': data,\r\n 'line': line,\r\n 'column': column\r\n };\r\n }\r\n\r\n getContext = getParseContext;\r\n\r\n\r\n if (proxy) {\r\n elementProxy = Object.create({}, {\r\n 'name': getter(function() {\r\n return elementName;\r\n }),\r\n 'originalName': getter(function() {\r\n return _elementName;\r\n }),\r\n 'attrs': getter(getAttrs),\r\n 'ns': getter(function() {\r\n return nsMatrix;\r\n })\r\n });\r\n }\r\n\r\n // actual parse logic\r\n while (j !== -1) {\r\n\r\n if (xml.charCodeAt(j) === 60) { // \"<\"\r\n i = j;\r\n } else {\r\n i = xml.indexOf('<', j);\r\n }\r\n\r\n // no (more) tags found\r\n if (i === -1) {\r\n\r\n // buffer the remainder for the next chunk\r\n if (streaming) {\r\n return xml.substring(j);\r\n }\r\n\r\n if (nodeStack.length) {\r\n return handleError('unexpected end of file');\r\n }\r\n\r\n if (!rootTagFound) {\r\n return handleError('missing start tag');\r\n }\r\n\r\n if (j < xml.length) {\r\n if (xml.substring(j).trim()) {\r\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n // remember that we saw the root tag\r\n if (!rootTagFound) {\r\n rootTagFound = true;\r\n }\r\n\r\n // parse text\r\n if (j !== i) {\r\n\r\n if (nodeStack.length) {\r\n if (onText) {\r\n onText(xml.substring(j, i), decodeEntities, getContext);\r\n\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n } else {\r\n if (xml.substring(j, i).trim()) {\r\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\r\n\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n w = xml.charCodeAt(i + 1);\r\n\r\n // parse comments + CDATA\r\n if (w === 33) { // \"!\"\r\n q = xml.charCodeAt(i + 2);\r\n\r\n // CDATA section\r\n if (q === 91 && xml.substr(i + 3, 6) === 'CDATA[') { // 91 == \"[\"\r\n j = xml.indexOf(']]>', i);\r\n if (j === -1) {\r\n if (streaming) {\r\n return xml.substring(i);\r\n }\r\n return handleError('unclosed cdata');\r\n }\r\n\r\n if (onCDATA) {\r\n onCDATA(xml.substring(i + 9, j), getContext);\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n j += 3;\r\n continue;\r\n }\r\n\r\n // comment\r\n if (q === 45 && xml.charCodeAt(i + 3) === 45) { // 45 == \"-\"\r\n j = xml.indexOf('-->', i);\r\n if (j === -1) {\r\n if (streaming) {\r\n return xml.substring(i);\r\n }\r\n return handleError('unclosed comment');\r\n }\r\n\r\n\r\n if (onComment) {\r\n onComment(xml.substring(i + 4, j), decodeEntities, getContext);\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n j += 3;\r\n continue;\r\n }\r\n }\r\n\r\n // parse question <? ... ?>\r\n if (w === 63) { // \"?\"\r\n j = xml.indexOf('?>', i);\r\n if (j === -1) {\r\n if (streaming) {\r\n return xml.substring(i);\r\n }\r\n return handleError('unclosed question');\r\n }\r\n\r\n if (onQuestion) {\r\n onQuestion(xml.substring(i, j + 2), getContext);\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n j += 2;\r\n continue;\r\n }\r\n\r\n // find matching closing tag for attention or standard tags\r\n // for that we must skip through attribute values\r\n // (enclosed in single or double quotes)\r\n for (x = i + 1; ; x++) {\r\n v = xml.charCodeAt(x);\r\n if (isNaN(v)) {\r\n if (streaming) {\r\n return xml.substring(i);\r\n }\r\n j = -1;\r\n return handleError('unclosed tag');\r\n }\r\n\r\n // [10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"\r\n // skips the quoted string\r\n // (double quotes) does not appear in a literal enclosed by (double quotes)\r\n // (single quote) does not appear in a literal enclosed by (single quote)\r\n if (v === 34) { // '\"'\r\n q = xml.indexOf('\"', x + 1);\r\n x = q !== -1 ? q : x;\r\n } else if (v === 39) { // \"'\"\r\n q = xml.indexOf(\"'\", x + 1);\r\n x = q !== -1 ? q : x;\r\n } else if (v === 62) { // '>'\r\n j = x;\r\n break;\r\n }\r\n }\r\n\r\n\r\n // parse attention <! ...>\r\n // previously comment and CDATA have already been parsed\r\n if (w === 33) { // \"!\"\r\n\r\n if (onAttention) {\r\n onAttention(xml.substring(i, j + 1), decodeEntities, getContext);\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n j += 1;\r\n continue;\r\n }\r\n\r\n // don't process attributes;\r\n // there are none\r\n cachedAttrs = {};\r\n\r\n // if (xml.charCodeAt(i+1) === 47) { // </...\r\n if (w === 47) { // </...\r\n tagStart = false;\r\n tagEnd = true;\r\n\r\n if (!nodeStack.length) {\r\n return handleError('missing open tag');\r\n }\r\n\r\n // verify open <-> close tag match\r\n x = elementName = nodeStack.pop();\r\n q = i + 2 + x.length;\r\n\r\n if (xml.substring(i + 2, q) !== x) {\r\n return handleError('closing tag mismatch');\r\n }\r\n\r\n // verify chars in close tag\r\n for (; q < j; q++) {\r\n w = xml.charCodeAt(q);\r\n\r\n if (w === 32 || (w > 8 && w < 14)) { // \\f\\n\\r\\t\\v space\r\n continue;\r\n }\r\n\r\n return handleError('close tag');\r\n }\r\n\r\n } else {\r\n if (xml.charCodeAt(j - 1) === 47) { // .../>\r\n x = elementName = xml.substring(i + 1, j - 1);\r\n\r\n tagStart = true;\r\n tagEnd = true;\r\n\r\n } else {\r\n x = elementName = xml.substring(i + 1, j);\r\n\r\n tagStart = true;\r\n tagEnd = false;\r\n }\r\n\r\n if (!(w > 96 && w < 123 || w > 64 && w < 91 || w === 95 || w === 58)) { // char 95\"_\" 58\":\"\r\n return handleError('illegal first char nodeName');\r\n }\r\n\r\n for (q = 1, y = x.length; q < y; q++) {\r\n w = x.charCodeAt(q);\r\n\r\n if (w > 96 && w < 123 || w > 64 && w < 91 || w > 47 && w < 59 || w === 45 || w === 95 || w == 46) {\r\n continue;\r\n }\r\n\r\n if (w === 32 || (w < 14 && w > 8)) { // \\f\\n\\r\\t\\v space\r\n elementName = x.substring(0, q);\r\n\r\n // maybe there are attributes\r\n cachedAttrs = null;\r\n break;\r\n }\r\n\r\n return handleError('invalid nodeName');\r\n }\r\n\r\n if (!tagEnd) {\r\n nodeStack.push(elementName);\r\n }\r\n }\r\n\r\n if (isNamespace) {\r\n\r\n _nsMatrix = nsMatrix;\r\n\r\n if (tagStart) {\r\n\r\n // remember old namespace\r\n // unless we're self-closing\r\n if (!tagEnd) {\r\n nsMatrixStack.push(_nsMatrix);\r\n }\r\n\r\n if (cachedAttrs === null) {\r\n\r\n // quick check, whether there may be namespace\r\n // declarations on the node; if that is the case\r\n // we need to eagerly parse the node attributes\r\n if ((maybeNS = x.indexOf('xmlns', q) !== -1)) {\r\n attrsStart = q;\r\n attrsString = x;\r\n\r\n getAttrs();\r\n\r\n maybeNS = false;\r\n }\r\n }\r\n }\r\n\r\n _elementName = elementName;\r\n\r\n // memoize normalized names per namespace matrix; tag names\r\n // typically repeat heavily and the matrix rarely changes.\r\n if (elNameCacheMatrix !== nsMatrix) {\r\n elNameCache = nsMatrix[NAME_CACHE];\r\n if (elNameCache === undefined) {\r\n elNameCache = nsMatrix[NAME_CACHE] = {};\r\n }\r\n elNameCacheMatrix = nsMatrix;\r\n }\r\n\r\n var _cachedName = elNameCache[elementName];\r\n\r\n if (_cachedName !== undefined) {\r\n elementName = _cachedName;\r\n } else {\r\n\r\n w = elementName.indexOf(':');\r\n if (w !== -1) {\r\n xmlns = nsMatrix[elementName.substring(0, w)];\r\n\r\n // prefix given; namespace must exist\r\n if (!xmlns) {\r\n return handleError('missing namespace on <' + _elementName + '>');\r\n }\r\n\r\n elementName = elementName.substr(w + 1);\r\n } else {\r\n xmlns = nsMatrix['xmlns'];\r\n\r\n // if no default namespace is defined,\r\n // we'll import the element as anonymous.\r\n //\r\n // it is up to users to correct that to the document defined\r\n // targetNamespace, or whatever their undersanding of the\r\n // XML spec mandates.\r\n }\r\n\r\n // adjust namespace prefixs as configured\r\n if (xmlns) {\r\n elementName = xmlns + ':' + elementName;\r\n }\r\n\r\n elNameCache[_elementName] = elementName;\r\n }\r\n\r\n }\r\n\r\n if (tagStart) {\r\n attrsStart = q;\r\n attrsString = x;\r\n\r\n if (onOpenTag) {\r\n if (proxy) {\r\n onOpenTag(elementProxy, decodeEntities, tagEnd, getContext);\r\n } else {\r\n onOpenTag(elementName, getAttrs, decodeEntities, tagEnd, getContext);\r\n }\r\n\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n }\r\n\r\n if (tagEnd) {\r\n\r\n if (onCloseTag) {\r\n onCloseTag(proxy ? elementProxy : elementName, decodeEntities, tagStart, getContext);\r\n\r\n if (parseStop) {\r\n return;\r\n }\r\n }\r\n\r\n // restore old namespace\r\n if (isNamespace) {\r\n if (!tagStart) {\r\n nsMatrix = nsMatrixStack.pop();\r\n } else {\r\n nsMatrix = _nsMatrix;\r\n }\r\n }\r\n }\r\n\r\n j += 1;\r\n }\r\n } /** end parse */\r\n\r\n}\r\n\r\nreturn new Parser(options);\r\n\r\n}"],"mappings":";;;;;;;AAAA;;AAEe,SAASA,OAAOA,CAACC,OAAO,EAAE;EAEzC;;EAEA,IAAIC,YAAY,GAAGC,MAAM,CAACD,YAAY;EAEtC,IAAIE,cAAc,GAAGC,MAAM,CAACC,SAAS,CAACF,cAAc;EAEpD,IAAIG,cAAc,GAAG,oCAAoC;EAEzD,IAAIC,cAAc,GAAG;IACnB,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,MAAM,EAAE;EACV,CAAC;;EAED;EACAH,MAAM,CAACI,IAAI,CAACD,cAAc,CAAC,CAACE,OAAO,CAAC,UAASC,CAAC,EAAE;IAC9CH,cAAc,CAACG,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC,GAAGJ,cAAc,CAACG,CAAC,CAAC;EACrD,CAAC,CAAC;EAGF,SAASE,eAAeA,CAACC,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAE;IAEnC;IACA,IAAIA,CAAC,EAAE;MACL,IAAIb,cAAc,CAACc,IAAI,CAACV,cAAc,EAAES,CAAC,CAAC,EAAE;QAC1C,OAAOT,cAAc,CAACS,CAAC,CAAC;MAC1B,CAAC,MAAM;QAEL;QACA,OAAO,GAAG,GAAGA,CAAC,GAAG,GAAG;MACtB;IACF;;IAEA;IACA,IAAIF,CAAC,EAAE;MACL,OAAOb,YAAY,CAACa,CAAC,CAAC;IACxB;;IAEA;IACA,OAAOb,YAAY,CAACiB,QAAQ,CAACH,CAAC,EAAE,EAAE,CAAC,CAAC;EACtC;;EAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACA,SAASI,cAAcA,CAACC,CAAC,EAAE;IACzB,IAAIA,CAAC,CAACC,MAAM,GAAG,CAAC,IAAID,CAAC,CAACE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;MACzC,OAAOF,CAAC,CAACG,OAAO,CAACjB,cAAc,EAAEM,eAAe,CAAC;IACnD;IAEA,OAAOQ,CAAC;EACV;;EAEA;;EAEA,IAAII,gCAAgC,GAAG,qCAAqC;EAE5E,SAASC,KAAKA,CAACC,GAAG,EAAE;IAClB,OAAO,IAAIC,KAAK,CAACD,GAAG,CAAC;EACvB;EAEA,SAASE,yBAAyBA,CAACC,MAAM,EAAE;IACzC,OAAO,gCAAgC,GAAGA,MAAM,GAAG,GAAG;EACxD;EAEA,SAASC,MAAMA,CAACC,KAAK,EAAE;IACrB,OAAO;MACL,KAAK,EAAEA,KAAK;MACZ,YAAY,EAAE;IAChB,CAAC;EACH;EAEA,SAASC,aAAaA,CAACC,QAAQ,EAAE;IAC/B,IAAIC,KAAK,GAAG,CAAC,CAAC;MAAEC,GAAG;IACnB,KAAKA,GAAG,IAAIF,QAAQ,EAAE;MACpBC,KAAK,CAACC,GAAG,CAAC,GAAGF,QAAQ,CAACE,GAAG,CAAC;IAC5B;IACA,OAAOD,KAAK;EACd;;EAEA;EACA;EACA;EACA,IAAIE,UAAU,GAAGC,MAAM,CAAC,WAAW,CAAC;EAEpC,SAASC,SAASA,CAACT,MAAM,EAAE;IACzB,OAAOA,MAAM,GAAG,MAAM;EACxB;EAEA,SAASU,aAAaA,CAACC,aAAa,EAAE;IACpC,IAAIP,QAAQ,GAAG,CAAC,CAAC;MACbQ,GAAG;MACHZ,MAAM;IAEV,KAAKY,GAAG,IAAID,aAAa,EAAE;MACzBX,MAAM,GAAGW,aAAa,CAACC,GAAG,CAAC;MAC3BR,QAAQ,CAACJ,MAAM,CAAC,GAAGA,MAAM;MACzBI,QAAQ,CAACK,SAAS,CAACT,MAAM,CAAC,CAAC,GAAGY,GAAG;IACnC;IAEA,OAAOR,QAAQ;EACjB;EAEA,SAASS,cAAcA,CAAA,EAAG;IACxB,OAAO;MAAEC,IAAI,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAE,CAAC;EAC/B;EAEA,SAASC,SAASA,CAACC,GAAG,EAAE;IACtB,MAAMA,GAAG;EACX;;EAEA;AACA;AACA;AACA;AACA;AACA;AACA;EACA,SAASC,MAAMA,CAAC/C,OAAO,EAAE;IAEvB,IAAI,CAAC,IAAI,EAAE;MACT,OAAO,IAAI+C,MAAM,CAAC/C,OAAO,CAAC;IAC5B;IAEA,IAAIgD,KAAK,GAAGhD,OAAO,IAAIA,OAAO,CAAC,OAAO,CAAC;IAEvC,IAAIiD,MAAM;MACNC,SAAS;MACTC,UAAU;MACVC,OAAO;MACPC,OAAO,GAAGR,SAAS;MACnBS,SAAS;MACTC,SAAS;MACTC,UAAU;MACVC,WAAW;IAEf,IAAIC,UAAU,GAAGhB,cAAc;;IAE/B;AACF;AACA;AACA;AACA;AACA;AACA;IACE,IAAIiB,SAAS,GAAG,KAAK;;IAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACE,IAAIC,YAAY,GAAG,KAAK;;IAExB;AACF;AACA;AACA;AACA;AACA;IACE,IAAIC,WAAW,GAAG,EAAE;;IAEpB;AACF;AACA;AACA;AACA;IACE,IAAIC,OAAO,GAAG,KAAK;;IAEnB;AACF;AACA;AACA;AACA;IACE,IAAIC,WAAW,GAAG,KAAK;;IAEvB;AACF;AACA;AACA;AACA;IACE,IAAIC,WAAW,GAAG,IAAI;;IAEtB;AACF;AACA;AACA;AACA;IACE,IAAIC,SAAS,GAAG,KAAK;;IAErB;AACF;AACA;IACE,IAAIC,aAAa,EACbjC,QAAQ,EACRkC,SAAS;;IAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACE,IAAI3B,aAAa;;IAEjB;AACF;AACA;AACA;AACA;IACE,SAAS4B,WAAWA,CAACtB,GAAG,EAAE;MACxB,IAAI,EAAEA,GAAG,YAAYnB,KAAK,CAAC,EAAE;QAC3BmB,GAAG,GAAGrB,KAAK,CAACqB,GAAG,CAAC;MAClB;MAEAkB,WAAW,GAAGlB,GAAG;MAEjBO,OAAO,CAACP,GAAG,EAAEY,UAAU,CAAC;IAC1B;;IAEA;AACF;AACA;AACA;AACA;IACE,SAASW,aAAaA,CAACvB,GAAG,EAAE;MAE1B,IAAI,CAACQ,SAAS,EAAE;QACd;MACF;MAEA,IAAI,EAAER,GAAG,YAAYnB,KAAK,CAAC,EAAE;QAC3BmB,GAAG,GAAGrB,KAAK,CAACqB,GAAG,CAAC;MAClB;MAEAQ,SAAS,CAACR,GAAG,EAAEY,UAAU,CAAC;IAC5B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACE,IAAI,CAAC,IAAI,CAAC,GAAG,UAASY,IAAI,EAAEC,EAAE,EAAE;MAE9B,IAAI,OAAOA,EAAE,KAAK,UAAU,EAAE;QAC5B,MAAM9C,KAAK,CAAC,0BAA0B,CAAC;MACzC;MAEA,QAAQ6C,IAAI;QACZ,KAAK,SAAS;UAAEpB,SAAS,GAAGqB,EAAE;UAAE;QAChC,KAAK,MAAM;UAAEtB,MAAM,GAAGsB,EAAE;UAAE;QAC1B,KAAK,UAAU;UAAEpB,UAAU,GAAGoB,EAAE;UAAE;QAClC,KAAK,OAAO;UAAElB,OAAO,GAAGkB,EAAE;UAAE;QAC5B,KAAK,MAAM;UAAEjB,SAAS,GAAGiB,EAAE;UAAE;QAC7B,KAAK,OAAO;UAAEnB,OAAO,GAAGmB,EAAE;UAAE;QAC5B,KAAK,WAAW;UAAEd,WAAW,GAAGc,EAAE;UAAE;QAAO;QAC3C,KAAK,UAAU;UAAEf,UAAU,GAAGe,EAAE;UAAE;QAAO;QACzC,KAAK,SAAS;UAAEhB,SAAS,GAAGgB,EAAE;UAAE;QAChC;UACE,MAAM9C,KAAK,CAAC,qBAAqB,GAAG6C,IAAI,CAAC;MAC3C;MAEA,OAAO,IAAI;IACb,CAAC;;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACE,IAAI,CAAC,IAAI,CAAC,GAAG,UAASE,KAAK,EAAE;MAE3B,IAAI,OAAOA,KAAK,KAAK,WAAW,EAAE;QAChCA,KAAK,GAAG,CAAC,CAAC;MACZ;MAEA,IAAIC,OAAA,CAAOD,KAAK,MAAK,QAAQ,EAAE;QAC7B,MAAM/C,KAAK,CAAC,0BAA0B,CAAC;MACzC;MAEA,IAAIiD,cAAc,GAAG,CAAC,CAAC;QAAEhE,CAAC;MAE1B,KAAKA,CAAC,IAAI8D,KAAK,EAAE;QACfE,cAAc,CAAChE,CAAC,CAAC,GAAG8D,KAAK,CAAC9D,CAAC,CAAC;MAC9B;MAEAqD,WAAW,GAAG,IAAI;MAClBvB,aAAa,GAAGkC,cAAc;MAE9B,OAAO,IAAI;IACb,CAAC;;IAED;AACF;AACA;IACE,SAASC,UAAUA,CAAA,EAAG;MACpBT,aAAa,GAAGH,WAAW,GAAG,EAAE,GAAG,IAAI;MACvC9B,QAAQ,GAAG8B,WAAW,GAAGxB,aAAa,CAACC,aAAa,CAAC,GAAG,IAAI;MAC5D2B,SAAS,GAAG,EAAE;MAEdT,UAAU,GAAGhB,cAAc;MAC3BuB,SAAS,GAAG,KAAK;MACjBD,WAAW,GAAG,IAAI;MAClBJ,YAAY,GAAG,KAAK;MACpBC,WAAW,GAAG,EAAE;IAClB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;IACE,IAAI,CAAC,OAAO,CAAC,GAAG,UAASe,GAAG,EAAE;MAC5B,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;QAC3B,MAAMnD,KAAK,CAAC,4BAA4B,CAAC;MAC3C;MAEA,IAAIkC,SAAS,EAAE;QACb,MAAMlC,KAAK,CAAC,uCAAuC,CAAC;MACtD;MAEAkD,UAAU,CAAC,CAAC;MAEZE,KAAK,CAACD,GAAG,CAAC;MAEVlB,UAAU,GAAGhB,cAAc;MAC3BuB,SAAS,GAAG,KAAK;MAEjB,OAAOD,WAAW;IACpB,CAAC;;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACE,IAAI,CAAC,OAAO,CAAC,GAAG,UAASY,GAAG,EAAE;MAC5B,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;QAC3B,MAAMnD,KAAK,CAAC,4BAA4B,CAAC;MAC3C;MAEA,IAAI,CAACkC,SAAS,EAAE;QACdgB,UAAU,CAAC,CAAC;QACZhB,SAAS,GAAG,IAAI;MAClB;MAEA,IAAI,CAACK,WAAW,EAAE;QAChBH,WAAW,GAAGgB,KAAK,CAAChB,WAAW,GAAGe,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE;MACpD;MAEA,OAAO,IAAI;IACb,CAAC;;IAED;AACF;AACA;AACA;AACA;AACA;IACE,IAAI,CAAC,KAAK,CAAC,GAAG,YAAW;MACvB,IAAI,CAACjB,SAAS,EAAE;QACdgB,UAAU,CAAC,CAAC;MACd;;MAEA;MACA;MACAhB,SAAS,GAAG,KAAK;MAEjB,IAAI,CAACK,WAAW,EAAE;QAChBa,KAAK,CAAChB,WAAW,CAAC;MACpB;MAEAA,WAAW,GAAG,EAAE;MAChBH,UAAU,GAAGhB,cAAc;MAC3BuB,SAAS,GAAG,KAAK;MAEjB,OAAOD,WAAW;IACpB,CAAC;;IAED;AACF;AACA;IACE,IAAI,CAAC,MAAM,CAAC,GAAG,YAAW;MACxBC,SAAS,GAAG,IAAI;IAClB,CAAC;;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACE,SAASY,KAAKA,CAACD,GAAG,EAAqB;MAAA,IAAnBjB,SAAS,GAAAmB,SAAA,CAAAzD,MAAA,QAAAyD,SAAA,QAAAC,SAAA,GAAAD,SAAA,MAAG,KAAK;MAEnC,IAAIE,WAAW,GAAG,IAAI;QAClBC,iBAAiB,GAAG,IAAI;MAE5B,IAAIC,SAAS;QACTC,gBAAgB,GAAG,CAAC;QACpBC,QAAQ,GAAG,KAAK;QAChBC,MAAM,GAAG,KAAK;QACdC,CAAC,GAAG,CAAC;QAAEC,CAAC,GAAG,CAAC;QACZxE,CAAC;QAAEyE,CAAC;QAAEC,CAAC;QAAEC,CAAC;QAAEC,CAAC;QACbC,KAAK;QACLC,WAAW;QACXC,YAAY;QACZC,YAAY;MAGhB,IAAIC,WAAW,GAAG,EAAE;QAChBC,UAAU,GAAG,CAAC;QACdC,WAAW,CAAC;MAAA;;MAGhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACI,SAASC,iBAAiBA,CAAC7B,IAAI,EAAE8B,YAAY,EAAE;QAC7C,IAAIV,CAAC,GAAGpB,IAAI,CAAChD,OAAO,CAAC,GAAG,CAAC;QAEzB,IAAIoE,CAAC,KAAK,CAAC,CAAC,EAAE;UACZ,OAAOpB,IAAI;QACb;;QAEA;QACA,IAAI+B,MAAM,GAAGpE,QAAQ,CAACqC,IAAI,CAACgC,SAAS,CAAC,CAAC,EAAEZ,CAAC,CAAC,CAAC;QAE3C,IAAI,CAACW,MAAM,EAAE;UACXhC,aAAa,CAACzC,yBAAyB,CAAC0C,IAAI,CAACgC,SAAS,CAAC,CAAC,EAAEZ,CAAC,CAAC,CAAC,CAAC;UAC9D,OAAO,IAAI;QACb;QAEA,OAAOU,YAAY,KAAKC,MAAM,GAC1B/B,IAAI,CAACiC,MAAM,CAACb,CAAC,GAAG,CAAC,CAAC,GAClBW,MAAM,GAAG/B,IAAI,CAACiC,MAAM,CAACb,CAAC,CAAC;MAC7B;;MAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;MACI,SAASc,QAAQA,CAAA,EAAG;QAClB,IAAIN,WAAW,KAAK,IAAI,EAAE;UACxB,OAAOA,WAAW;QACpB;QAEA,IAAIO,KAAK;UACLC,WAAW;UACXN,YAAY,GAAGrC,WAAW,IAAI9B,QAAQ,CAAC,OAAO,CAAC;UAC/C0E,QAAQ,GAAG5C,WAAW,IAAID,OAAO,GAAG,EAAE,GAAG,IAAI;UAC7CwB,CAAC,GAAGW,UAAU;UACd7E,CAAC,GAAG4E,WAAW;UACfY,CAAC,GAAGxF,CAAC,CAACC,MAAM;UACZwF,YAAY;UACZC,QAAQ;UACRC,KAAK;UACLC,KAAK;UACL1C,IAAI;UACJ2C,KAAK,GAAG,CAAC,CAAC;UACVC,SAAS,GAAG,IAAIC,GAAG,CAAC,CAAC;UACrBC,QAAQ;UACR1B,CAAC;UACDH,CAAC;QAEL8B,SAAS,EACT,OAAO/B,CAAC,GAAGsB,CAAC,EAAEtB,CAAC,EAAE,EAAE;UACjB8B,QAAQ,GAAG,KAAK;UAChB1B,CAAC,GAAGtE,CAAC,CAACkG,UAAU,CAAChC,CAAC,CAAC;UAEnB,IAAII,CAAC,KAAK,EAAE,IAAKA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,CAAE,EAAE;YAAE;YACnC;UACF;;UAEA;UACA,IAAIA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,GAAG,IAAKA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,EAAG,EAAE;YAC3C,IAAIA,CAAC,KAAK,EAAE,IAAIA,CAAC,KAAK,EAAE,EAAE;cAAE;cAC1BrB,aAAa,CAAC,mCAAmC,CAAC;cAClD+C,QAAQ,GAAG,IAAI;YACjB;UACF;;UAEA;UACA,KAAK7B,CAAC,GAAGD,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAGqB,CAAC,EAAErB,CAAC,EAAE,EAAE;YAC1BG,CAAC,GAAGtE,CAAC,CAACkG,UAAU,CAAC/B,CAAC,CAAC;YAEnB,IACEG,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,GAAG,IACjBA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,EAAE,IAChBA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,EAAE,IAChBA,CAAC,KAAK,EAAE;YAAI;YACZA,CAAC,KAAK,EAAE;YAAI;YACZA,CAAC,KAAK,EAAE,CAAC;YAAA,EACT;cACA;YACF;;YAEA;YACA,IAAIA,CAAC,KAAK,EAAE,IAAKA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,CAAE,EAAE;cAAE;cACnCrB,aAAa,CAAC,yBAAyB,CAAC;cACxCiB,CAAC,GAAGC,CAAC;cAEL,SAAS8B,SAAS;YACpB;;YAEA;YACA,IAAI3B,CAAC,KAAK,EAAE,EAAE;cAAE;cACd;YACF;YAEArB,aAAa,CAAC,6BAA6B,CAAC;YAC5C+C,QAAQ,GAAG,IAAI;UACjB;UAEA9C,IAAI,GAAGlD,CAAC,CAACkF,SAAS,CAAChB,CAAC,EAAEC,CAAC,CAAC;UAExB,IAAIjB,IAAI,KAAK,aAAa,EAAE;YAC1BD,aAAa,CAAC,8BAA8B,CAAC;YAC7C+C,QAAQ,GAAG,IAAI;UACjB;UAEA1B,CAAC,GAAGtE,CAAC,CAACkG,UAAU,CAAC/B,CAAC,GAAG,CAAC,CAAC;UAEvB,IAAIG,CAAC,KAAK,EAAE,EAAE;YAAE;YACdH,CAAC,GAAGnE,CAAC,CAACE,OAAO,CAAC,GAAG,EAAEgE,CAAC,GAAGC,CAAC,GAAG,CAAC,CAAC;YAE7B,IAAIA,CAAC,KAAK,CAAC,CAAC,EAAE;cACZA,CAAC,GAAGnE,CAAC,CAACE,OAAO,CAAC,IAAI,EAAEgE,CAAC,CAAC;cAEtB,IAAIC,CAAC,KAAK,CAAC,CAAC,EAAE;gBACZlB,aAAa,CAAC,iCAAiC,CAAC;gBAChD+C,QAAQ,GAAG,IAAI;cACjB;YACF;UAEF,CAAC,MAAM,IAAI1B,CAAC,KAAK,EAAE,EAAE;YAAE;YACrBH,CAAC,GAAGnE,CAAC,CAACE,OAAO,CAAC,IAAI,EAAEgE,CAAC,GAAGC,CAAC,GAAG,CAAC,CAAC;YAE9B,IAAIA,CAAC,KAAK,CAAC,CAAC,EAAE;cACZA,CAAC,GAAGnE,CAAC,CAACE,OAAO,CAAC,GAAG,EAAEgE,CAAC,CAAC;cAErB,IAAIC,CAAC,KAAK,CAAC,CAAC,EAAE;gBACZlB,aAAa,CAAC,iCAAiC,CAAC;gBAChD+C,QAAQ,GAAG,IAAI;cACjB;YACF;UAEF,CAAC,MAAM;YACL/C,aAAa,CAAC,gCAAgC,CAAC;YAC/C+C,QAAQ,GAAG,IAAI;;YAEf;YACA,KAAK7B,CAAC,GAAGA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGqB,CAAC,EAAErB,CAAC,EAAE,EAAE;cAC1BG,CAAC,GAAGtE,CAAC,CAACkG,UAAU,CAAC/B,CAAC,GAAG,CAAC,CAAC;cAEvB,IAAIG,CAAC,KAAK,EAAE,IAAKA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,CAAE,EAAE;gBAAE;gBACnC;cACF;YACF;UAEF;UAEA,IAAIH,CAAC,KAAK,CAAC,CAAC,EAAE;YACZlB,aAAa,CAAC,wBAAwB,CAAC;YAEvCkB,CAAC,GAAGqB,CAAC;YACLQ,QAAQ,GAAG,IAAI;UACjB;UAEA,IAAI,CAACA,QAAQ,EAAE;YACbL,KAAK,GAAG3F,CAAC,CAACkF,SAAS,CAAChB,CAAC,EAAEC,CAAC,CAAC;UAC3B;UAEAD,CAAC,GAAGC,CAAC;;UAEL;UACA;UACA;UACA,OAAOA,CAAC,GAAG,CAAC,GAAGqB,CAAC,EAAErB,CAAC,EAAE,EAAE;YACrBG,CAAC,GAAGtE,CAAC,CAACkG,UAAU,CAAC/B,CAAC,GAAG,CAAC,CAAC;YAEvB,IAAIG,CAAC,KAAK,EAAE,IAAKA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,CAAE,EAAE;cAAE;cACnC;YACF;;YAEA;YACA,IAAIJ,CAAC,KAAKC,CAAC,EAAE;cACXlB,aAAa,CAAC,uCAAuC,CAAC;cACtD+C,QAAQ,GAAG,IAAI;YACjB;UACF;;UAEA;UACA9B,CAAC,GAAGC,CAAC,GAAG,CAAC;UAET,IAAI6B,QAAQ,EAAE;YACZ,SAASC,SAAS;UACpB;;UAEA;UACA,IAAIH,SAAS,CAACK,GAAG,CAACjD,IAAI,CAAC,EAAE;YACvBD,aAAa,CAAC,aAAa,GAAGC,IAAI,GAAG,mBAAmB,CAAC;YACzD;UACF;UAEA4C,SAAS,CAACM,GAAG,CAAClD,IAAI,CAAC;UAEnB,IAAI,CAACP,WAAW,EAAE;YAChBkD,KAAK,CAAC3C,IAAI,CAAC,GAAGyC,KAAK;YACnB;UACF;;UAEA;UACA,IAAIjD,OAAO,EAAE;YACXgD,QAAQ,GACNxC,IAAI,KAAK,OAAO,GACZ,OAAO,GACNA,IAAI,CAACgD,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,IAAIhD,IAAI,CAACiC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,GAC3DjC,IAAI,CAACiC,MAAM,CAAC,CAAC,CAAC,GACd,IACP;;YAED;YACA,IAAIO,QAAQ,KAAK,IAAI,EAAE;cACrBL,KAAK,GAAGtF,cAAc,CAAC4F,KAAK,CAAC;cAC7BL,WAAW,GAAGpE,SAAS,CAACwE,QAAQ,CAAC;cAEjCE,KAAK,GAAGxE,aAAa,CAACiE,KAAK,CAAC;cAE5B,IAAI,CAACO,KAAK,EAAE;gBAEV;gBACA,IACGF,QAAQ,KAAK,OAAO,IACpBJ,WAAW,IAAIzE,QAAQ,IAAIA,QAAQ,CAACyE,WAAW,CAAC,KAAKD,KAAM,EAC5D;kBAEA;kBACA,GAAG;oBACDO,KAAK,GAAG,IAAI,GAAI7B,gBAAgB,EAAG;kBACrC,CAAC,QAAQ,OAAOlD,QAAQ,CAAC+E,KAAK,CAAC,KAAK,WAAW;gBACjD,CAAC,MAAM;kBACLA,KAAK,GAAGF,QAAQ;gBAClB;gBAEAtE,aAAa,CAACiE,KAAK,CAAC,GAAGO,KAAK;cAC9B;cAEA,IAAI/E,QAAQ,CAAC6E,QAAQ,CAAC,KAAKE,KAAK,EAAE;gBAChC,IAAI,CAACH,YAAY,EAAE;kBACjB5E,QAAQ,GAAGD,aAAa,CAACC,QAAQ,CAAC;kBAClC4E,YAAY,GAAG,IAAI;gBACrB;gBAEA5E,QAAQ,CAAC6E,QAAQ,CAAC,GAAGE,KAAK;gBAC1B,IAAIF,QAAQ,KAAK,OAAO,EAAE;kBACxB7E,QAAQ,CAACK,SAAS,CAAC0E,KAAK,CAAC,CAAC,GAAGP,KAAK;kBAClCL,YAAY,GAAGY,KAAK;gBACtB;gBAEA/E,QAAQ,CAACyE,WAAW,CAAC,GAAGD,KAAK;cAC/B;;cAEA;cACAQ,KAAK,CAAC3C,IAAI,CAAC,GAAGyC,KAAK;cACnB;YACF;;YAEA;YACA;YACAJ,QAAQ,CAACc,IAAI,CAACnD,IAAI,EAAEyC,KAAK,CAAC;YAC1B;UAEF,CAAC,CAAC;;UAEF;UACA;UACAzC,IAAI,GAAG6B,iBAAiB,CAAC7B,IAAI,EAAE8B,YAAY,CAAC;UAE5C,IAAI9B,IAAI,KAAK,IAAI,EAAE;YACjB;UACF;UAEA2C,KAAK,CAAC3C,IAAI,CAAC,GAAGyC,KAAK;QACrB;;QAGA;QACA,IAAIjD,OAAO,EAAE;UAEX;UACA,KAAKwB,CAAC,GAAG,CAAC,EAAEsB,CAAC,GAAGD,QAAQ,CAACtF,MAAM,EAAEiE,CAAC,GAAGsB,CAAC,EAAEtB,CAAC,EAAE,EAAE;YAE3ChB,IAAI,GAAG6B,iBAAiB,CAACQ,QAAQ,CAACrB,CAAC,EAAE,CAAC,EAAEc,YAAY,CAAC;YACrDW,KAAK,GAAGJ,QAAQ,CAACrB,CAAC,CAAC;YAEnB,IAAIhB,IAAI,KAAK,IAAI,EAAE;cACjB;YACF;YAEA2C,KAAK,CAAC3C,IAAI,CAAC,GAAGyC,KAAK;UACrB;;UAEA;QACF;;QAEA,OAAOb,WAAW,GAAGe,KAAK;MAC5B;;MAEA;AACJ;AACA;AACA;AACA;AACA;MACI,SAASS,eAAeA,CAAA,EAAG;QACzB,IAAIC,QAAQ,GAAG,eAAe;QAE9B,IAAIhF,IAAI,GAAG,CAAC;QACZ,IAAIC,MAAM,GAAG,CAAC;QACd,IAAIgF,WAAW,GAAG,CAAC;QACnB,IAAIC,SAAS,GAAGtC,CAAC;QACjB,IAAIuC,KAAK;QACT,IAAIC,IAAI;QAER,OAAOzC,CAAC,IAAIsC,WAAW,EAAE;UAEvBE,KAAK,GAAGH,QAAQ,CAACK,IAAI,CAACpD,GAAG,CAAC;UAE1B,IAAI,CAACkD,KAAK,EAAE;YACV;UACF;;UAEA;UACAD,SAAS,GAAGC,KAAK,CAAC,CAAC,CAAC,CAACzG,MAAM,GAAGyG,KAAK,CAACG,KAAK;UAEzC,IAAIJ,SAAS,GAAGvC,CAAC,EAAE;YACjB;UACF;;UAEA;UACA3C,IAAI,IAAI,CAAC;UAETiF,WAAW,GAAGC,SAAS;QACzB;;QAEA;QACA,IAAIvC,CAAC,IAAI,CAAC,CAAC,EAAE;UACX1C,MAAM,GAAGiF,SAAS;UAClBE,IAAI,GAAGnD,GAAG,CAAC0B,SAAS,CAACf,CAAC,CAAC;QACzB,CAAC;UAEC;UACA,IAAIA,CAAC,KAAK,CAAC,EAAE;YACXwC,IAAI,GAAGnD,GAAG,CAAC0B,SAAS,CAACf,CAAC,EAAED,CAAC,CAAC;UAC5B;;UAEA;UAAA,KACK;YACH1C,MAAM,GAAG0C,CAAC,GAAGsC,WAAW;YACxBG,IAAI,GAAIxC,CAAC,IAAI,CAAC,CAAC,GAAGX,GAAG,CAAC0B,SAAS,CAAChB,CAAC,CAAC,GAAGV,GAAG,CAAC0B,SAAS,CAAChB,CAAC,EAAEC,CAAC,GAAG,CAAC,CAAE;UAC/D;QAEF,OAAO;UACL,MAAM,EAAEwC,IAAI;UACZ,MAAM,EAAEpF,IAAI;UACZ,QAAQ,EAAEC;QACZ,CAAC;MACH;MAEAc,UAAU,GAAGgE,eAAe;MAG5B,IAAI1E,KAAK,EAAE;QACT+C,YAAY,GAAG3F,MAAM,CAAC8H,MAAM,CAAC,CAAC,CAAC,EAAE;UAC/B,MAAM,EAAEpG,MAAM,CAAC,YAAW;YACxB,OAAO+D,WAAW;UACpB,CAAC,CAAC;UACF,cAAc,EAAE/D,MAAM,CAAC,YAAW;YAChC,OAAOgE,YAAY;UACrB,CAAC,CAAC;UACF,OAAO,EAAEhE,MAAM,CAAC0E,QAAQ,CAAC;UACzB,IAAI,EAAE1E,MAAM,CAAC,YAAW;YACtB,OAAOG,QAAQ;UACjB,CAAC;QACH,CAAC,CAAC;MACJ;;MAEA;MACA,OAAOsD,CAAC,KAAK,CAAC,CAAC,EAAE;QAEf,IAAIX,GAAG,CAAC0C,UAAU,CAAC/B,CAAC,CAAC,KAAK,EAAE,EAAE;UAAE;UAC9BD,CAAC,GAAGC,CAAC;QACP,CAAC,MAAM;UACLD,CAAC,GAAGV,GAAG,CAACtD,OAAO,CAAC,GAAG,EAAEiE,CAAC,CAAC;QACzB;;QAEA;QACA,IAAID,CAAC,KAAK,CAAC,CAAC,EAAE;UAEZ;UACA,IAAI3B,SAAS,EAAE;YACb,OAAOiB,GAAG,CAAC0B,SAAS,CAACf,CAAC,CAAC;UACzB;UAEA,IAAIpB,SAAS,CAAC9C,MAAM,EAAE;YACpB,OAAO+C,WAAW,CAAC,wBAAwB,CAAC;UAC9C;UAEA,IAAI,CAACR,YAAY,EAAE;YACjB,OAAOQ,WAAW,CAAC,mBAAmB,CAAC;UACzC;UAEA,IAAImB,CAAC,GAAGX,GAAG,CAACvD,MAAM,EAAE;YAClB,IAAIuD,GAAG,CAAC0B,SAAS,CAACf,CAAC,CAAC,CAAC4C,IAAI,CAAC,CAAC,EAAE;cAC3B9D,aAAa,CAAC7C,gCAAgC,CAAC;YACjD;UACF;UAEA;QACF;;QAEA;QACA,IAAI,CAACoC,YAAY,EAAE;UACjBA,YAAY,GAAG,IAAI;QACrB;;QAEA;QACA,IAAI2B,CAAC,KAAKD,CAAC,EAAE;UAEX,IAAInB,SAAS,CAAC9C,MAAM,EAAE;YACpB,IAAI4B,MAAM,EAAE;cACVA,MAAM,CAAC2B,GAAG,CAAC0B,SAAS,CAACf,CAAC,EAAED,CAAC,CAAC,EAAEnE,cAAc,EAAEuC,UAAU,CAAC;cAEvD,IAAIO,SAAS,EAAE;gBACb;cACF;YACF;UACF,CAAC,MAAM;YACL,IAAIW,GAAG,CAAC0B,SAAS,CAACf,CAAC,EAAED,CAAC,CAAC,CAAC6C,IAAI,CAAC,CAAC,EAAE;cAC9B9D,aAAa,CAAC7C,gCAAgC,CAAC;cAE/C,IAAIyC,SAAS,EAAE;gBACb;cACF;YACF;UACF;QACF;QAEAyB,CAAC,GAAGd,GAAG,CAAC0C,UAAU,CAAChC,CAAC,GAAG,CAAC,CAAC;;QAEzB;QACA,IAAII,CAAC,KAAK,EAAE,EAAE;UAAE;UACdD,CAAC,GAAGb,GAAG,CAAC0C,UAAU,CAAChC,CAAC,GAAG,CAAC,CAAC;;UAEzB;UACA,IAAIG,CAAC,KAAK,EAAE,IAAIb,GAAG,CAAC2B,MAAM,CAACjB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,EAAE;YAAE;YACnDC,CAAC,GAAGX,GAAG,CAACtD,OAAO,CAAC,KAAK,EAAEgE,CAAC,CAAC;YACzB,IAAIC,CAAC,KAAK,CAAC,CAAC,EAAE;cACZ,IAAI5B,SAAS,EAAE;gBACb,OAAOiB,GAAG,CAAC0B,SAAS,CAAChB,CAAC,CAAC;cACzB;cACA,OAAOlB,WAAW,CAAC,gBAAgB,CAAC;YACtC;YAEA,IAAIhB,OAAO,EAAE;cACXA,OAAO,CAACwB,GAAG,CAAC0B,SAAS,CAAChB,CAAC,GAAG,CAAC,EAAEC,CAAC,CAAC,EAAE7B,UAAU,CAAC;cAC5C,IAAIO,SAAS,EAAE;gBACb;cACF;YACF;YAEAsB,CAAC,IAAI,CAAC;YACN;UACF;;UAEA;UACA,IAAIE,CAAC,KAAK,EAAE,IAAIb,GAAG,CAAC0C,UAAU,CAAChC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAAE;YAC9CC,CAAC,GAAGX,GAAG,CAACtD,OAAO,CAAC,KAAK,EAAEgE,CAAC,CAAC;YACzB,IAAIC,CAAC,KAAK,CAAC,CAAC,EAAE;cACZ,IAAI5B,SAAS,EAAE;gBACb,OAAOiB,GAAG,CAAC0B,SAAS,CAAChB,CAAC,CAAC;cACzB;cACA,OAAOlB,WAAW,CAAC,kBAAkB,CAAC;YACxC;YAGA,IAAIb,SAAS,EAAE;cACbA,SAAS,CAACqB,GAAG,CAAC0B,SAAS,CAAChB,CAAC,GAAG,CAAC,EAAEC,CAAC,CAAC,EAAEpE,cAAc,EAAEuC,UAAU,CAAC;cAC9D,IAAIO,SAAS,EAAE;gBACb;cACF;YACF;YAEAsB,CAAC,IAAI,CAAC;YACN;UACF;QACF;;QAEA;QACA,IAAIG,CAAC,KAAK,EAAE,EAAE;UAAE;UACdH,CAAC,GAAGX,GAAG,CAACtD,OAAO,CAAC,IAAI,EAAEgE,CAAC,CAAC;UACxB,IAAIC,CAAC,KAAK,CAAC,CAAC,EAAE;YACZ,IAAI5B,SAAS,EAAE;cACb,OAAOiB,GAAG,CAAC0B,SAAS,CAAChB,CAAC,CAAC;YACzB;YACA,OAAOlB,WAAW,CAAC,mBAAmB,CAAC;UACzC;UAEA,IAAIZ,UAAU,EAAE;YACdA,UAAU,CAACoB,GAAG,CAAC0B,SAAS,CAAChB,CAAC,EAAEC,CAAC,GAAG,CAAC,CAAC,EAAE7B,UAAU,CAAC;YAC/C,IAAIO,SAAS,EAAE;cACb;YACF;UACF;UAEAsB,CAAC,IAAI,CAAC;UACN;QACF;;QAEA;QACA;QACA;QACA,KAAKxE,CAAC,GAAGuE,CAAC,GAAG,CAAC,GAAIvE,CAAC,EAAE,EAAE;UACrB4E,CAAC,GAAGf,GAAG,CAAC0C,UAAU,CAACvG,CAAC,CAAC;UACrB,IAAIqH,KAAK,CAACzC,CAAC,CAAC,EAAE;YACZ,IAAIhC,SAAS,EAAE;cACb,OAAOiB,GAAG,CAAC0B,SAAS,CAAChB,CAAC,CAAC;YACzB;YACAC,CAAC,GAAG,CAAC,CAAC;YACN,OAAOnB,WAAW,CAAC,cAAc,CAAC;UACpC;;UAEA;UACA;UACA;UACA;UACA,IAAIuB,CAAC,KAAK,EAAE,EAAE;YAAE;YACdF,CAAC,GAAGb,GAAG,CAACtD,OAAO,CAAC,GAAG,EAAEP,CAAC,GAAG,CAAC,CAAC;YAC3BA,CAAC,GAAG0E,CAAC,KAAK,CAAC,CAAC,GAAGA,CAAC,GAAG1E,CAAC;UACtB,CAAC,MAAM,IAAI4E,CAAC,KAAK,EAAE,EAAE;YAAE;YACrBF,CAAC,GAAGb,GAAG,CAACtD,OAAO,CAAC,GAAG,EAAEP,CAAC,GAAG,CAAC,CAAC;YAC3BA,CAAC,GAAG0E,CAAC,KAAK,CAAC,CAAC,GAAGA,CAAC,GAAG1E,CAAC;UACtB,CAAC,MAAM,IAAI4E,CAAC,KAAK,EAAE,EAAE;YAAE;YACrBJ,CAAC,GAAGxE,CAAC;YACL;UACF;QACF;;QAGA;QACA;QACA,IAAI2E,CAAC,KAAK,EAAE,EAAE;UAAE;;UAEd,IAAIjC,WAAW,EAAE;YACfA,WAAW,CAACmB,GAAG,CAAC0B,SAAS,CAAChB,CAAC,EAAEC,CAAC,GAAG,CAAC,CAAC,EAAEpE,cAAc,EAAEuC,UAAU,CAAC;YAChE,IAAIO,SAAS,EAAE;cACb;YACF;UACF;UAEAsB,CAAC,IAAI,CAAC;UACN;QACF;;QAEA;QACA;QACAW,WAAW,GAAG,CAAC,CAAC;;QAEhB;QACA,IAAIR,CAAC,KAAK,EAAE,EAAE;UAAE;UACdN,QAAQ,GAAG,KAAK;UAChBC,MAAM,GAAG,IAAI;UAEb,IAAI,CAAClB,SAAS,CAAC9C,MAAM,EAAE;YACrB,OAAO+C,WAAW,CAAC,kBAAkB,CAAC;UACxC;;UAEA;UACArD,CAAC,GAAG8E,WAAW,GAAG1B,SAAS,CAACkE,GAAG,CAAC,CAAC;UACjC5C,CAAC,GAAGH,CAAC,GAAG,CAAC,GAAGvE,CAAC,CAACM,MAAM;UAEpB,IAAIuD,GAAG,CAAC0B,SAAS,CAAChB,CAAC,GAAG,CAAC,EAAEG,CAAC,CAAC,KAAK1E,CAAC,EAAE;YACjC,OAAOqD,WAAW,CAAC,sBAAsB,CAAC;UAC5C;;UAEA;UACA,OAAOqB,CAAC,GAAGF,CAAC,EAAEE,CAAC,EAAE,EAAE;YACjBC,CAAC,GAAGd,GAAG,CAAC0C,UAAU,CAAC7B,CAAC,CAAC;YAErB,IAAIC,CAAC,KAAK,EAAE,IAAKA,CAAC,GAAG,CAAC,IAAIA,CAAC,GAAG,EAAG,EAAE;cAAE;cACnC;YACF;YAEA,OAAOtB,WAAW,CAAC,WAAW,CAAC;UACjC;QAEF,CAAC,MAAM;UACL,IAAIQ,GAAG,CAAC0C,UAAU,CAAC/B,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAAE;YAClCxE,CAAC,GAAG8E,WAAW,GAAGjB,GAAG,CAAC0B,SAAS,CAAChB,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG,CAAC,CAAC;YAE7CH,QAAQ,GAAG,IAAI;YACfC,MAAM,GAAG,IAAI;UAEf,CAAC,MAAM;YACLtE,CAAC,GAAG8E,WAAW,GAAGjB,GAAG,CAAC0B,SAAS,CAAChB,CAAC,GAAG,CAAC,EAAEC,CAAC,CAAC;YAEzCH,QAAQ,GAAG,IAAI;YACfC,MAAM,GAAG,KAAK;UAChB;UAEA,IAAI,EAAEK,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,GAAG,IAAIA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,EAAE,IAAIA,CAAC,KAAK,EAAE,IAAIA,CAAC,KAAK,EAAE,CAAC,EAAE;YAAE;YACtE,OAAOtB,WAAW,CAAC,6BAA6B,CAAC;UACnD;UAEA,KAAKqB,CAAC,GAAG,CAAC,EAAED,CAAC,GAAGzE,CAAC,CAACM,MAAM,EAAEoE,CAAC,GAAGD,CAAC,EAAEC,CAAC,EAAE,EAAE;YACpCC,CAAC,GAAG3E,CAAC,CAACuG,UAAU,CAAC7B,CAAC,CAAC;YAEnB,IAAIC,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,GAAG,IAAIA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,EAAE,IAAIA,CAAC,KAAK,EAAE,IAAIA,CAAC,KAAK,EAAE,IAAIA,CAAC,IAAI,EAAE,EAAE;cAChG;YACF;YAEA,IAAIA,CAAC,KAAK,EAAE,IAAKA,CAAC,GAAG,EAAE,IAAIA,CAAC,GAAG,CAAE,EAAE;cAAE;cACnCG,WAAW,GAAG9E,CAAC,CAACuF,SAAS,CAAC,CAAC,EAAEb,CAAC,CAAC;;cAE/B;cACAS,WAAW,GAAG,IAAI;cAClB;YACF;YAEA,OAAO9B,WAAW,CAAC,kBAAkB,CAAC;UACxC;UAEA,IAAI,CAACiB,MAAM,EAAE;YACXlB,SAAS,CAACsD,IAAI,CAAC5B,WAAW,CAAC;UAC7B;QACF;QAEA,IAAI9B,WAAW,EAAE;UAEfmB,SAAS,GAAGjD,QAAQ;UAEpB,IAAImD,QAAQ,EAAE;YAEZ;YACA;YACA,IAAI,CAACC,MAAM,EAAE;cACXnB,aAAa,CAACuD,IAAI,CAACvC,SAAS,CAAC;YAC/B;YAEA,IAAIgB,WAAW,KAAK,IAAI,EAAE;cAExB;cACA;cACA;cACA,IAAKpC,OAAO,GAAG/C,CAAC,CAACO,OAAO,CAAC,OAAO,EAAEmE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAG;gBAC5CQ,UAAU,GAAGR,CAAC;gBACdO,WAAW,GAAGjF,CAAC;gBAEfyF,QAAQ,CAAC,CAAC;gBAEV1C,OAAO,GAAG,KAAK;cACjB;YACF;UACF;UAEAgC,YAAY,GAAGD,WAAW;;UAE1B;UACA;UACA,IAAIZ,iBAAiB,KAAKhD,QAAQ,EAAE;YAClC+C,WAAW,GAAG/C,QAAQ,CAACG,UAAU,CAAC;YAClC,IAAI4C,WAAW,KAAKD,SAAS,EAAE;cAC7BC,WAAW,GAAG/C,QAAQ,CAACG,UAAU,CAAC,GAAG,CAAC,CAAC;YACzC;YACA6C,iBAAiB,GAAGhD,QAAQ;UAC9B;UAEA,IAAIqG,WAAW,GAAGtD,WAAW,CAACa,WAAW,CAAC;UAE1C,IAAIyC,WAAW,KAAKvD,SAAS,EAAE;YAC7Bc,WAAW,GAAGyC,WAAW;UAC3B,CAAC,MAAM;YAEL5C,CAAC,GAAGG,WAAW,CAACvE,OAAO,CAAC,GAAG,CAAC;YAC5B,IAAIoE,CAAC,KAAK,CAAC,CAAC,EAAE;cACZE,KAAK,GAAG3D,QAAQ,CAAC4D,WAAW,CAACS,SAAS,CAAC,CAAC,EAAEZ,CAAC,CAAC,CAAC;;cAE7C;cACA,IAAI,CAACE,KAAK,EAAE;gBACV,OAAOxB,WAAW,CAAC,wBAAwB,GAAG0B,YAAY,GAAG,GAAG,CAAC;cACnE;cAEAD,WAAW,GAAGA,WAAW,CAACU,MAAM,CAACb,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC,MAAM;cACLE,KAAK,GAAG3D,QAAQ,CAAC,OAAO,CAAC;;cAEzB;cACA;cACA;cACA;cACA;cACA;YACF;;YAEA;YACA,IAAI2D,KAAK,EAAE;cACTC,WAAW,GAAGD,KAAK,GAAG,GAAG,GAAGC,WAAW;YACzC;YAEAb,WAAW,CAACc,YAAY,CAAC,GAAGD,WAAW;UACzC;QAEF;QAEA,IAAIT,QAAQ,EAAE;UACZa,UAAU,GAAGR,CAAC;UACdO,WAAW,GAAGjF,CAAC;UAEf,IAAImC,SAAS,EAAE;YACb,IAAIF,KAAK,EAAE;cACTE,SAAS,CAAC6C,YAAY,EAAE5E,cAAc,EAAEkE,MAAM,EAAE3B,UAAU,CAAC;YAC7D,CAAC,MAAM;cACLR,SAAS,CAAC2C,WAAW,EAAEW,QAAQ,EAAErF,cAAc,EAAEkE,MAAM,EAAE3B,UAAU,CAAC;YACtE;YAEA,IAAIO,SAAS,EAAE;cACb;YACF;UACF;QAEF;QAEA,IAAIoB,MAAM,EAAE;UAEV,IAAIlC,UAAU,EAAE;YACdA,UAAU,CAACH,KAAK,GAAG+C,YAAY,GAAGF,WAAW,EAAE1E,cAAc,EAAEiE,QAAQ,EAAE1B,UAAU,CAAC;YAEpF,IAAIO,SAAS,EAAE;cACb;YACF;UACF;;UAEA;UACA,IAAIF,WAAW,EAAE;YACf,IAAI,CAACqB,QAAQ,EAAE;cACbnD,QAAQ,GAAGiC,aAAa,CAACmE,GAAG,CAAC,CAAC;YAChC,CAAC,MAAM;cACLpG,QAAQ,GAAGiD,SAAS;YACtB;UACF;QACF;QAEAK,CAAC,IAAI,CAAC;MACR;IACF,CAAC,CAAC;EAEJ;;EAEA,OAAO,IAAIxC,MAAM,CAAC/C,OAAO,CAAC;AAE1B"}