read-excel-file 7.0.2 → 8.0.0

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 (266) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +212 -205
  3. package/browser/index.cjs +8 -5
  4. package/browser/index.d.ts +58 -16
  5. package/browser/index.js +7 -5
  6. package/browser/input.d.ts +1 -0
  7. package/bundle/read-excel-file.min.js +1 -1
  8. package/bundle/read-excel-file.min.js.map +1 -1
  9. package/commonjs/export/parseSheet.js +20 -0
  10. package/commonjs/export/parseSheet.js.map +1 -0
  11. package/commonjs/export/readSheetBrowser.js +29 -0
  12. package/commonjs/export/readSheetBrowser.js.map +1 -0
  13. package/commonjs/export/readSheetNode.js +29 -0
  14. package/commonjs/export/readSheetNode.js.map +1 -0
  15. package/commonjs/export/readSheetUniversal.js +29 -0
  16. package/commonjs/export/readSheetUniversal.js.map +1 -0
  17. package/commonjs/export/readSheetWebWorker.js +29 -0
  18. package/commonjs/export/readSheetWebWorker.js.map +1 -0
  19. package/commonjs/export/readXlsxFileBrowser.js +6 -8
  20. package/commonjs/export/readXlsxFileBrowser.js.map +1 -1
  21. package/commonjs/export/readXlsxFileNode.js +7 -9
  22. package/commonjs/export/readXlsxFileNode.js.map +1 -1
  23. package/commonjs/export/readXlsxFileUniversal.js +7 -9
  24. package/commonjs/export/readXlsxFileUniversal.js.map +1 -1
  25. package/commonjs/export/readXlsxFileWebWorker.js +6 -8
  26. package/commonjs/export/readXlsxFileWebWorker.js.map +1 -1
  27. package/commonjs/export/unpackXlsxFileBrowser.js +2 -1
  28. package/commonjs/export/unpackXlsxFileBrowser.js.map +1 -1
  29. package/commonjs/export/unpackXlsxFileNode.js +4 -3
  30. package/commonjs/export/unpackXlsxFileNode.js.map +1 -1
  31. package/commonjs/export/unpackXlsxFileUniversal.js +13 -3
  32. package/commonjs/export/unpackXlsxFileUniversal.js.map +1 -1
  33. package/commonjs/parseData/InvalidError.js.map +1 -0
  34. package/commonjs/parseData/parseData.js +503 -0
  35. package/commonjs/parseData/parseData.js.map +1 -0
  36. package/commonjs/parseData/parseData.test.js.map +1 -0
  37. package/commonjs/{types → parseData/types}/Boolean.js +1 -1
  38. package/commonjs/parseData/types/Boolean.js.map +1 -0
  39. package/commonjs/parseData/types/Date.js +21 -0
  40. package/commonjs/parseData/types/Date.js.map +1 -0
  41. package/commonjs/{types → parseData/types}/Number.js +1 -1
  42. package/commonjs/parseData/types/Number.js.map +1 -0
  43. package/commonjs/{types → parseData/types}/String.js +1 -1
  44. package/commonjs/parseData/types/String.js.map +1 -0
  45. package/commonjs/{types → parseData/types/additional}/Email.js +3 -3
  46. package/commonjs/parseData/types/additional/Email.js.map +1 -0
  47. package/commonjs/parseData/types/additional/Email.test.js.map +1 -0
  48. package/commonjs/{types → parseData/types/additional}/Integer.js +2 -2
  49. package/commonjs/parseData/types/additional/Integer.js.map +1 -0
  50. package/commonjs/parseData/types/additional/Integer.test.js.map +1 -0
  51. package/commonjs/{types → parseData/types/additional}/URL.js +3 -3
  52. package/commonjs/parseData/types/additional/URL.js.map +1 -0
  53. package/commonjs/parseData/types/additional/URL.test.js.map +1 -0
  54. package/commonjs/xlsx/{getData.js → convertCellsToData2dArray.js} +16 -37
  55. package/commonjs/xlsx/convertCellsToData2dArray.js.map +1 -0
  56. package/commonjs/xlsx/{isDateTimestamp.js → isDateFormat.js} +58 -56
  57. package/commonjs/xlsx/isDateFormat.js.map +1 -0
  58. package/commonjs/xlsx/isDateFormat.test.js.map +1 -0
  59. package/commonjs/xlsx/isDateFormatStyle.js +193 -0
  60. package/commonjs/xlsx/isDateFormatStyle.js.map +1 -0
  61. package/commonjs/xlsx/parseCell.js +16 -18
  62. package/commonjs/xlsx/parseCell.js.map +1 -1
  63. package/commonjs/xlsx/parseCellCoordinates.js +44 -0
  64. package/commonjs/xlsx/parseCellCoordinates.js.map +1 -0
  65. package/commonjs/xlsx/parseCellValue.js +14 -11
  66. package/commonjs/xlsx/parseCellValue.js.map +1 -1
  67. package/commonjs/xlsx/parseCells.js +14 -6
  68. package/commonjs/xlsx/parseCells.js.map +1 -1
  69. package/commonjs/xlsx/parseExcelDate.js +139 -0
  70. package/commonjs/xlsx/parseExcelDate.js.map +1 -0
  71. package/commonjs/xlsx/parseExcelDate.test.js.map +1 -0
  72. package/commonjs/xlsx/parseSheet.js +9 -11
  73. package/commonjs/xlsx/parseSheet.js.map +1 -1
  74. package/commonjs/xlsx/{parseDimensions.js → parseSheetDimensions.js} +7 -6
  75. package/commonjs/xlsx/parseSheetDimensions.js.map +1 -0
  76. package/commonjs/xlsx/parseSpreadsheetContents.js +96 -0
  77. package/commonjs/xlsx/parseSpreadsheetContents.js.map +1 -0
  78. package/commonjs/xlsx/parseSpreadsheetInfo.js +47 -0
  79. package/commonjs/xlsx/parseSpreadsheetInfo.js.map +1 -0
  80. package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js +29 -0
  81. package/commonjs/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +1 -0
  82. package/commonjs/xml/xlsx.js +9 -9
  83. package/commonjs/xml/xlsx.js.map +1 -1
  84. package/commonjs/xml/xpath/xlsx-xpath.js +8 -8
  85. package/commonjs/xml/xpath/xlsx-xpath.js.map +1 -1
  86. package/commonjs/xml/xpath/xpathBrowser.js +4 -4
  87. package/commonjs/xml/xpath/xpathBrowser.js.map +1 -1
  88. package/commonjs/xml/xpath/xpathNode.js +2 -2
  89. package/commonjs/xml/xpath/xpathNode.js.map +1 -1
  90. package/modules/export/parseSheet.js +13 -0
  91. package/modules/export/parseSheet.js.map +1 -0
  92. package/modules/export/readSheetBrowser.js +23 -0
  93. package/modules/export/readSheetBrowser.js.map +1 -0
  94. package/modules/export/readSheetNode.js +23 -0
  95. package/modules/export/readSheetNode.js.map +1 -0
  96. package/modules/export/readSheetUniversal.js +23 -0
  97. package/modules/export/readSheetUniversal.js.map +1 -0
  98. package/modules/export/readSheetWebWorker.js +23 -0
  99. package/modules/export/readSheetWebWorker.js.map +1 -0
  100. package/modules/export/readXlsxFileBrowser.js +6 -8
  101. package/modules/export/readXlsxFileBrowser.js.map +1 -1
  102. package/modules/export/readXlsxFileNode.js +7 -9
  103. package/modules/export/readXlsxFileNode.js.map +1 -1
  104. package/modules/export/readXlsxFileUniversal.js +7 -9
  105. package/modules/export/readXlsxFileUniversal.js.map +1 -1
  106. package/modules/export/readXlsxFileWebWorker.js +6 -8
  107. package/modules/export/readXlsxFileWebWorker.js.map +1 -1
  108. package/modules/export/unpackXlsxFileBrowser.js +3 -1
  109. package/modules/export/unpackXlsxFileBrowser.js.map +1 -1
  110. package/modules/export/unpackXlsxFileNode.js +4 -3
  111. package/modules/export/unpackXlsxFileNode.js.map +1 -1
  112. package/modules/export/unpackXlsxFileUniversal.js +13 -3
  113. package/modules/export/unpackXlsxFileUniversal.js.map +1 -1
  114. package/modules/parseData/InvalidError.js.map +1 -0
  115. package/modules/parseData/parseData.js +494 -0
  116. package/modules/parseData/parseData.js.map +1 -0
  117. package/modules/parseData/parseData.test.js.map +1 -0
  118. package/modules/{types → parseData/types}/Boolean.js +1 -1
  119. package/modules/parseData/types/Boolean.js.map +1 -0
  120. package/modules/parseData/types/Date.js +14 -0
  121. package/modules/parseData/types/Date.js.map +1 -0
  122. package/modules/{types → parseData/types}/Number.js +1 -1
  123. package/modules/parseData/types/Number.js.map +1 -0
  124. package/modules/{types → parseData/types}/String.js +1 -1
  125. package/modules/parseData/types/String.js.map +1 -0
  126. package/modules/{types → parseData/types/additional}/Email.js +3 -3
  127. package/modules/parseData/types/additional/Email.js.map +1 -0
  128. package/modules/parseData/types/additional/Email.test.js.map +1 -0
  129. package/modules/{types → parseData/types/additional}/Integer.js +2 -2
  130. package/modules/parseData/types/additional/Integer.js.map +1 -0
  131. package/modules/parseData/types/additional/Integer.test.js.map +1 -0
  132. package/modules/{types → parseData/types/additional}/URL.js +3 -3
  133. package/modules/parseData/types/additional/URL.js.map +1 -0
  134. package/modules/parseData/types/additional/URL.test.js.map +1 -0
  135. package/modules/xlsx/{getData.js → convertCellsToData2dArray.js} +15 -36
  136. package/modules/xlsx/convertCellsToData2dArray.js.map +1 -0
  137. package/modules/xlsx/{isDateTimestamp.js → isDateFormat.js} +57 -55
  138. package/modules/xlsx/isDateFormat.js.map +1 -0
  139. package/modules/xlsx/isDateFormat.test.js.map +1 -0
  140. package/modules/xlsx/isDateFormatStyle.js +186 -0
  141. package/modules/xlsx/isDateFormatStyle.js.map +1 -0
  142. package/modules/xlsx/parseCell.js +17 -19
  143. package/modules/xlsx/parseCell.js.map +1 -1
  144. package/modules/xlsx/parseCellCoordinates.js +38 -0
  145. package/modules/xlsx/parseCellCoordinates.js.map +1 -0
  146. package/modules/xlsx/parseCellValue.js +14 -11
  147. package/modules/xlsx/parseCellValue.js.map +1 -1
  148. package/modules/xlsx/parseCells.js +14 -6
  149. package/modules/xlsx/parseCells.js.map +1 -1
  150. package/modules/xlsx/parseExcelDate.js +133 -0
  151. package/modules/xlsx/parseExcelDate.js.map +1 -0
  152. package/modules/xlsx/parseExcelDate.test.js.map +1 -0
  153. package/modules/xlsx/parseSheet.js +9 -11
  154. package/modules/xlsx/parseSheet.js.map +1 -1
  155. package/modules/xlsx/{parseDimensions.js → parseSheetDimensions.js} +4 -4
  156. package/modules/xlsx/parseSheetDimensions.js.map +1 -0
  157. package/modules/xlsx/parseSpreadsheetContents.js +91 -0
  158. package/modules/xlsx/parseSpreadsheetContents.js.map +1 -0
  159. package/modules/xlsx/parseSpreadsheetInfo.js +42 -0
  160. package/modules/xlsx/parseSpreadsheetInfo.js.map +1 -0
  161. package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js +23 -0
  162. package/modules/xlsx/reconstructSheetDimensionsFromSheetCells.js.map +1 -0
  163. package/modules/xml/xlsx.js +6 -6
  164. package/modules/xml/xlsx.js.map +1 -1
  165. package/modules/xml/xpath/xlsx-xpath.js +6 -6
  166. package/modules/xml/xpath/xlsx-xpath.js.map +1 -1
  167. package/modules/xml/xpath/xpathBrowser.js +4 -4
  168. package/modules/xml/xpath/xpathBrowser.js.map +1 -1
  169. package/modules/xml/xpath/xpathNode.js +2 -2
  170. package/modules/xml/xpath/xpathNode.js.map +1 -1
  171. package/node/index.cjs +8 -5
  172. package/node/index.d.ts +56 -21
  173. package/node/index.js +7 -5
  174. package/node/input.d.ts +5 -0
  175. package/package.json +1 -1
  176. package/rollup.config.mjs +1 -1
  177. package/types/parseData/parseData.d.ts +38 -0
  178. package/types/parseData/parseDataError.d.ts +239 -0
  179. package/types/parseData/parseDataSchema.d.ts +48 -0
  180. package/types/parseData/parseDataValueType.d.ts +45 -0
  181. package/types/types.d.ts +20 -0
  182. package/universal/index.cjs +8 -5
  183. package/universal/index.d.ts +58 -16
  184. package/universal/index.js +7 -5
  185. package/universal/input.d.ts +1 -0
  186. package/web-worker/index.cjs +8 -5
  187. package/web-worker/index.d.ts +58 -16
  188. package/web-worker/index.js +7 -5
  189. package/web-worker/input.d.ts +1 -0
  190. package/commonjs/export/readSheetNamesBrowser.js +0 -23
  191. package/commonjs/export/readSheetNamesBrowser.js.map +0 -1
  192. package/commonjs/export/readSheetNamesNode.js +0 -23
  193. package/commonjs/export/readSheetNamesNode.js.map +0 -1
  194. package/commonjs/export/readSheetNamesUniversal.js +0 -23
  195. package/commonjs/export/readSheetNamesUniversal.js.map +0 -1
  196. package/commonjs/export/readSheetNamesWebWorker.js +0 -23
  197. package/commonjs/export/readSheetNamesWebWorker.js.map +0 -1
  198. package/commonjs/types/Boolean.js.map +0 -1
  199. package/commonjs/types/Date.js +0 -36
  200. package/commonjs/types/Date.js.map +0 -1
  201. package/commonjs/types/Email.js.map +0 -1
  202. package/commonjs/types/Email.test.js.map +0 -1
  203. package/commonjs/types/Integer.js.map +0 -1
  204. package/commonjs/types/Integer.test.js.map +0 -1
  205. package/commonjs/types/InvalidError.js.map +0 -1
  206. package/commonjs/types/Number.js.map +0 -1
  207. package/commonjs/types/String.js.map +0 -1
  208. package/commonjs/types/URL.js.map +0 -1
  209. package/commonjs/types/URL.test.js.map +0 -1
  210. package/commonjs/xlsx/coordinates.js +0 -55
  211. package/commonjs/xlsx/coordinates.js.map +0 -1
  212. package/commonjs/xlsx/getData.js.map +0 -1
  213. package/commonjs/xlsx/isDateTimestamp.js.map +0 -1
  214. package/commonjs/xlsx/parseDate.js +0 -73
  215. package/commonjs/xlsx/parseDate.js.map +0 -1
  216. package/commonjs/xlsx/parseDate.test.js.map +0 -1
  217. package/commonjs/xlsx/parseDimensions.js.map +0 -1
  218. package/commonjs/xlsx/parseProperties.js +0 -46
  219. package/commonjs/xlsx/parseProperties.js.map +0 -1
  220. package/commonjs/xlsx/parseXlsxFileContents.js +0 -119
  221. package/commonjs/xlsx/parseXlsxFileContents.js.map +0 -1
  222. package/commonjs/xlsx/parseXlsxFileContentsWithOptionalSchema.js +0 -45
  223. package/commonjs/xlsx/parseXlsxFileContentsWithOptionalSchema.js.map +0 -1
  224. package/commonjs/xlsx/schema/mapToObjects.js +0 -482
  225. package/commonjs/xlsx/schema/mapToObjects.js.map +0 -1
  226. package/commonjs/xlsx/schema/mapToObjects.test.js.map +0 -1
  227. package/modules/export/readSheetNamesBrowser.js +0 -17
  228. package/modules/export/readSheetNamesBrowser.js.map +0 -1
  229. package/modules/export/readSheetNamesNode.js +0 -17
  230. package/modules/export/readSheetNamesNode.js.map +0 -1
  231. package/modules/export/readSheetNamesUniversal.js +0 -17
  232. package/modules/export/readSheetNamesUniversal.js.map +0 -1
  233. package/modules/export/readSheetNamesWebWorker.js +0 -17
  234. package/modules/export/readSheetNamesWebWorker.js.map +0 -1
  235. package/modules/types/Boolean.js.map +0 -1
  236. package/modules/types/Date.js +0 -29
  237. package/modules/types/Date.js.map +0 -1
  238. package/modules/types/Email.js.map +0 -1
  239. package/modules/types/Email.test.js.map +0 -1
  240. package/modules/types/Integer.js.map +0 -1
  241. package/modules/types/Integer.test.js.map +0 -1
  242. package/modules/types/InvalidError.js.map +0 -1
  243. package/modules/types/Number.js.map +0 -1
  244. package/modules/types/String.js.map +0 -1
  245. package/modules/types/URL.js.map +0 -1
  246. package/modules/types/URL.test.js.map +0 -1
  247. package/modules/xlsx/coordinates.js +0 -48
  248. package/modules/xlsx/coordinates.js.map +0 -1
  249. package/modules/xlsx/getData.js.map +0 -1
  250. package/modules/xlsx/isDateTimestamp.js.map +0 -1
  251. package/modules/xlsx/parseDate.js +0 -67
  252. package/modules/xlsx/parseDate.js.map +0 -1
  253. package/modules/xlsx/parseDate.test.js.map +0 -1
  254. package/modules/xlsx/parseDimensions.js.map +0 -1
  255. package/modules/xlsx/parseProperties.js +0 -41
  256. package/modules/xlsx/parseProperties.js.map +0 -1
  257. package/modules/xlsx/parseXlsxFileContents.js +0 -114
  258. package/modules/xlsx/parseXlsxFileContents.js.map +0 -1
  259. package/modules/xlsx/parseXlsxFileContentsWithOptionalSchema.js +0 -39
  260. package/modules/xlsx/parseXlsxFileContentsWithOptionalSchema.js.map +0 -1
  261. package/modules/xlsx/schema/mapToObjects.js +0 -472
  262. package/modules/xlsx/schema/mapToObjects.js.map +0 -1
  263. package/modules/xlsx/schema/mapToObjects.test.js.map +0 -1
  264. package/types.d.ts +0 -121
  265. /package/commonjs/{types → parseData}/InvalidError.js +0 -0
  266. /package/modules/{types → parseData}/InvalidError.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseData.test.js","names":["describe","it","expect","parseData","parseSeparatedSubstrings","getNextSubstring","Integer","URL","Email","date","Date","UTC","to","deep","equal","results","parse","getTimezoneOffset","column","type","number","Number","Boolean","string","String","phone","value","phoneType","length","object","exist","errors","be","undefined","required","error","names","reason","name","validate","Error","invalid","status","oneOf","a","b","c","schema","column1","column2","column4","column5","propertyValueWhenColumnIsMissing","propertyValueWhenCellIsEmpty"],"sources":["../../source/parseData/parseData.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport parseData, { parseSeparatedSubstrings, getNextSubstring } from './parseData.js'\r\n\r\n// Additional included types.\r\nimport Integer from './types/additional/Integer.js'\r\nimport URL from './types/additional/URL.js'\r\nimport Email from './types/additional/Email.js'\r\n\r\nconst date = new Date(Date.UTC(2018, 3 - 1, 24))\r\n\r\ndescribe('parseData', () => {\r\n\tit('should parse arrays', () => {\r\n\t\texpect(getNextSubstring('abcde,fg,h', ',', 0)).to.deep.equal(['abcde', 5])\r\n\r\n\t\t// Custom separator and trimming.\r\n\t\texpect(parseSeparatedSubstrings(' abcde,fg , h ', ',')).to.deep.equal(['abcde', 'fg', 'h'])\r\n\r\n\t\t// Should ignore commas inside quotes.\r\n\t\t// expect(getNextSubstring('abc\"de,f\"g,h', ',', 0)).to.deep.equal(['abcde,fg', 10])\r\n\r\n\t\t// Custom separator and trimming.\r\n\t\t// Should ignore commas inside quotes.\r\n\t\t// expect(parseSeparatedSubstrings(' abc\"de,f\"g , h ', ',')).to.deep.equal(['abcde,fg', 'h'])\r\n\t})\r\n\r\n\tit('should convert to json', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING',\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t'123',\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc',\r\n\t\t\t\t'(123) 456-7890',\r\n\t\t\t\t'(123) 456-7890'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tdate: {\r\n\t\t\t\tcolumn: 'DATE',\r\n\t\t\t\ttype: Date\r\n\t\t\t},\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number\r\n\t\t\t},\r\n\t\t\tboolean: {\r\n\t\t\t\tcolumn: 'BOOLEAN',\r\n\t\t\t\ttype: Boolean\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING',\r\n\t\t\t\ttype: String\r\n\t\t\t},\r\n\t\t\tphone: {\r\n\t\t\t\tcolumn: 'PHONE',\r\n\t\t\t\ttype(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tphoneType: {\r\n\t\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\t\ttype(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tdate: date,\r\n\t\t\tnumber: 123,\r\n\t\t\tphone: '+11234567890',\r\n\t\t\tphoneType: '+11234567890',\r\n\t\t\tboolean: true,\r\n\t\t\tstring: 'abc'\r\n\t\t})\r\n\t})\r\n\r\n\tit('should support schema entries with no `type`s', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t123,\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tdate: {\r\n\t\t\t\tcolumn: 'DATE'\r\n\t\t\t},\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER'\r\n\t\t\t},\r\n\t\t\tboolean: {\r\n\t\t\t\tcolumn: 'BOOLEAN'\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING'\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tdate: date,\r\n\t\t\tnumber: 123,\r\n\t\t\tboolean: true,\r\n\t\t\tstring: 'abc'\r\n\t\t})\r\n\t})\r\n\r\n\tit('should require fields when cell value is empty', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'STRING'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\tnull,\r\n\t\t\t\t'abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\t})\r\n\r\n\t// it('shouldn\\'t require fields when cell value is empty and object is empty too (`ignoreEmptyRows: false`', () => {\r\n\t// \tconst results = parseData([\r\n\t// \t\t[\r\n\t// \t\t\t'NUMBER'\r\n\t// \t\t],\r\n\t// \t\t[\r\n\t// \t\t\tnull\r\n\t// \t\t]\r\n\t// \t], {\r\n\t// \t\tnumber: {\r\n\t// \t\t\tcolumn: 'NUMBER',\r\n\t// \t\t\ttype: Number,\r\n\t// \t\t\trequired: true\r\n\t// \t\t}\r\n\t// \t}, {\r\n\t// \t\tignoreEmptyRows: false\r\n\t// \t})\r\n\t//\r\n\t// \texpect(results.length).to.equal(1)\r\n\t//\r\n\t// \texpect(results[0].object).to.exist\r\n\t// \texpect(results[0].errors).to.be.undefined\r\n\t//\r\n\t// \texpect(results[0].object).to.deep.equal(null)\r\n\t// })\r\n\r\n\t// it('shouldn\\'t require fields when cell value is empty but the top-level object itself is empty too', () => {\r\n\t// \tconst results = parseData([\r\n\t// \t\t[\r\n\t// \t\t\t'NUMBER'\r\n\t// \t\t],\r\n\t// \t\t[\r\n\t// \t\t\tnull\r\n\t// \t\t]\r\n\t// \t], {\r\n\t// \t\tnumber: {\r\n\t// \t\t\tcolumn: 'NUMBER',\r\n\t// \t\t\ttype: Number,\r\n\t// \t\t\trequired: true\r\n\t// \t\t}\r\n\t// \t})\r\n\t//\r\n\t// \texpect(results.length).to.equal(1)\r\n\t//\r\n\t// \tconsole.log(results[0])\r\n\t//\r\n\t// \texpect(results[0].object).to.exist\r\n\t// \texpect(results[0].errors).to.be.undefined\r\n\t//\r\n\t// \texpect(results[0].object).to.deep.equal(null)\r\n\t// })\r\n\r\n\t// it('should parse arrays (`ignoreEmptyRows: false`)', () => {\r\n\t// \tconst { rows, errors } = parseData([\r\n\t// \t\t[\r\n\t// \t\t\t'NAMES'\r\n\t// \t\t], [\r\n\t// \t\t\t'Barack Obama, \"String, with, colons\", Donald Trump'\r\n\t// \t\t], [\r\n\t// \t\t\tnull\r\n\t// \t\t]\r\n\t// \t], {\r\n\t// \t\tnames: {\r\n\t// \t\t\tcolumn: 'NAMES',\r\n\t// \t\t\ttype: [String]\r\n\t// \t\t}\r\n\t// \t}, {\r\n\t// \t\tignoreEmptyRows: false\r\n\t// \t})\r\n\t//\r\n\t// \texpect(errors).to.deep.equal([])\r\n\t//\r\n\t// \texpect(rows).to.deep.equal([{\r\n\t// \t\tnames: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n\t// \t}, null])\r\n\t// })\r\n\r\n\tit('should parse arrays', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'NAMES'\r\n\t\t\t], [\r\n\t\t\t\t// 'Barack Obama, \"String, with, colons\", Donald Trump'\r\n\t\t\t\t'Barack Obama, String, Donald Trump'\r\n\t\t\t], [\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnames: {\r\n\t\t\t\tcolumn: 'NAMES',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\t// names: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n\t\t\tnames: ['Barack Obama', 'String', 'Donald Trump']\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.deep.equal(null)\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\t})\r\n\r\n\tit('should parse integers', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'INTEGER'\r\n\t\t\t], [\r\n\t\t\t\t'1'\r\n\t\t\t], [\r\n\t\t\t\t'1.2'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'INTEGER',\r\n\t\t\t\ttype: Integer\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tvalue: 1\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.be.undefined\r\n\t\texpect(results[1].errors).to.exist\r\n\t\texpect(results[1].errors.length).to.equal(1)\r\n\r\n\t\texpect(results[1].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_an_integer',\r\n\t\t\t// row: 3,\r\n\t\t\tcolumn: 'INTEGER',\r\n\t\t\ttype: Integer,\r\n\t\t\tvalue: '1.2'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse URLs', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'URL'\r\n\t\t\t], [\r\n\t\t\t\t'https://kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'kremlin.ru'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'URL',\r\n\t\t\t\ttype: URL\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tvalue: 'https://kremlin.ru'\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.be.undefined\r\n\t\texpect(results[1].errors).to.exist\r\n\t\texpect(results[1].errors.length).to.equal(1)\r\n\r\n\t\texpect(results[1].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_url',\r\n\t\t\t// row: 3,\r\n\t\t\tcolumn: 'URL',\r\n\t\t\ttype: URL,\r\n\t\t\tvalue: 'kremlin.ru'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse Emails', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'EMAIL'\r\n\t\t\t], [\r\n\t\t\t\t'vladimir.putin@kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'EMAIL',\r\n\t\t\t\ttype: Email\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tvalue: 'vladimir.putin@kremlin.ru'\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.be.undefined\r\n\t\texpect(results[1].errors).to.exist\r\n\t\texpect(results[1].errors.length).to.equal(1)\r\n\r\n\t\texpect(results[1].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_an_email',\r\n\t\t\t// row: 3,\r\n\t\t\tcolumn: 'EMAIL',\r\n\t\t\ttype: Email,\r\n\t\t\tvalue: '123'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should call .validate()', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'NAME'\r\n\t\t\t], [\r\n\t\t\t\t'George Bush'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tname: {\r\n\t\t\t\tcolumn: 'NAME',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true,\r\n\t\t\t\tvalidate: (value) => {\r\n\t\t\t\t\tif (value === 'George Bush') {\r\n\t\t\t\t\t\tthrow new Error('custom-error')\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'custom-error',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'NAME',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: 'George Bush'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate numbers', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: '123abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate booleans', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'TRUE',\r\n\t\t\t\t'FALSE',\r\n\t\t\t\t'INVALID'\r\n\t\t\t], [\r\n\t\t\t\ttrue,\r\n\t\t\t\tfalse,\r\n\t\t\t\t'TRUE'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\ttrue: {\r\n\t\t\t\tcolumn: 'TRUE',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tfalse: {\r\n\t\t\t\tcolumn: 'FALSE',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tinvalid: {\r\n\t\t\t\tcolumn: 'INVALID',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_boolean',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'INVALID',\r\n\t\t\ttype: Boolean,\r\n\t\t\tvalue: 'TRUE'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate dates', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'INVALID'\r\n\t\t\t], [\r\n\t\t\t\tdate, // 03/24/2018',,\r\n\t\t\t\t'-'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tdate: {\r\n\t\t\t\tcolumn: 'DATE',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tinvalid: {\r\n\t\t\t\tcolumn: 'INVALID',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_date',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'INVALID',\r\n\t\t\ttype: Date,\r\n\t\t\tvalue: '-'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should throw parse() errors', () => {\r\n\t\tconst type = () => {\r\n\t\t\tthrow new Error('invalid')\r\n\t\t}\r\n\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\t'123',\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tphone: {\r\n\t\t\t\tcolumn: 'PHONE',\r\n\t\t\t\ttype\r\n\t\t\t},\r\n\t\t\tphoneType: {\r\n\t\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\t\ttype\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'PHONE',\r\n\t\t\tvalue: '123',\r\n\t\t\ttype\r\n\t\t}, {\r\n\t\t\terror: 'invalid',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\tvalue: '123',\r\n\t\t\ttype\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should map row numbers', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\t// , { rowIndexSourceMap: [2, 5] })\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number',\r\n\t\t\t// row: 6,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: '123abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (valid)', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'STARTED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tstatus: {\r\n\t\t\t\tcolumn: 'STATUS',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tstatus: 'STARTED'\r\n\t\t})\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (not valid)', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'SCHEDULED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tstatus: {\r\n\t\t\t\tcolumn: 'STATUS',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'unknown',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'STATUS',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: 'SCHEDULED'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should reduce empty objects to `null` by default', function() {\r\n\t\tconst results = parseData(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', 'ca', null],\r\n\t\t\t\t['a', null]\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\ta: {\r\n\t\t\t\t\tcolumn: 'A',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tb: {\r\n\t\t\t\t\tcolumn: 'B',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tc: {\r\n\t\t\t\t\tcolumn: 'C',\r\n \t\t\tschema: {\r\n\t\t\t\t\t\ta: {\r\n\t\t\t\t\t\t\tcolumn: 'CA',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tb: {\r\n\t\t\t\t\t\t\tcolumn: 'CB',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal(\r\n\t\t\t{ a: 'a', b: 'b', c: { a: 'ca', b: null } }\r\n\t\t)\r\n\r\n\t\texpect(results[1].object).to.exist\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal(\r\n\t\t\t{ a: 'a', b: null, c: null }\r\n\t\t)\r\n\t})\r\n\r\n\tit('should parse missing columns (`undefined` by default) and empty cells (`null` by default) (`required: false`)', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tcolumn1: undefined,\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14',\r\n\t\t\tcolumn5: undefined\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.exist\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal({\r\n\t\t\tcolumn1: undefined,\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: null,\r\n\t\t\tcolumn5: undefined\r\n\t\t})\r\n\t})\r\n\r\n\tit('should parse missing columns (`undefined` by default) and empty cells (`null` by default) (`propertyValueWhenColumnIsMissing: null`) (`required: false`)', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tpropertyValueWhenColumnIsMissing: null\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tcolumn1: null,\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14',\r\n\t\t\tcolumn5: null\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.exist\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal({\r\n\t\t\tcolumn1: null,\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: null,\r\n\t\t\tcolumn5: null\r\n\t\t})\r\n\t})\r\n\r\n\tit('should parse missing columns (`undefined` by default) and empty cells (`null` by default) (`propertyValueWhenCellIsEmpty: undefined`) (`required: false`)', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tpropertyValueWhenCellIsEmpty: undefined\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tcolumn1: undefined,\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14',\r\n\t\t\tcolumn5: undefined\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.exist\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal({\r\n\t\t\tcolumn1: undefined,\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: undefined,\r\n\t\t\tcolumn5: undefined\r\n\t\t})\r\n\t})\r\n\r\n\tit('should parse missing columns (`undefined` by default) and empty cells (`null` by default) (`propertyValueWhenColumnIsMissing: null` and `propertyValueWhenCellIsEmpty: null`) (`required: false`)', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tpropertyValueWhenColumnIsMissing: null,\r\n\t\t\tpropertyValueWhenCellIsEmpty: null\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tcolumn1: null,\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14',\r\n\t\t\tcolumn5: null\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.exist\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal({\r\n\t\t\tcolumn1: null,\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: null,\r\n\t\t\tcolumn5: null\r\n\t\t})\r\n\t})\r\n\r\n\tit('should parse missing columns (`undefined` by default) and empty cells (`null` by default) (`propertyValueWhenColumnIsMissing: null` and `propertyValueWhenCellIsEmpty: null`) (`required: true`)', () => {\r\n\t\tconst results = parseData([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tpropertyValueWhenColumnIsMissing: null,\r\n\t\t\tpropertyValueWhenCellIsEmpty: null\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\terror: 'required',\r\n\t\t\t// row: 2,\r\n\t\t\ttype: String,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\r\n\t\texpect(results[1].object).to.be.undefined\r\n\t\texpect(results[1].errors).to.exist\r\n\r\n\t\texpect(results[1].errors).to.deep.equal([{\r\n\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\terror: 'required',\r\n\t\t\t// row: 3,\r\n\t\t\ttype: String,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\t})\r\n\r\n\t// it('should handle missing columns / empty cells (`propertyValueWhenColumnIsMissing: null` and `propertyValueWhenCellIsEmpty: null` and `shouldSkipRequiredValidationWhenColumnIsMissing: () => false`) (`required: true`)', () => {\r\n\t// \tconst { rows, errors } = parseData([\r\n\t// \t\t[\r\n\t// \t\t\t'COLUMN_2',\r\n\t// \t\t\t'COLUMN_3',\r\n\t// \t\t\t'COLUMN_4'\r\n\t// \t\t], [\r\n\t// \t\t\t'12',\r\n\t// \t\t\t'13',\r\n\t// \t\t\t'14'\r\n\t// \t\t], [\r\n\t// \t\t\t'22',\r\n\t// \t\t\t'23',\r\n\t// \t\t\tnull\r\n\t// \t\t]\r\n\t// \t], {\r\n\t// \t\tcolumn1: {\r\n\t// \t\t\tcolumn: 'COLUMN_1',\r\n\t// \t\t\ttype: String,\r\n\t// \t\t\trequired: false\r\n\t// \t\t},\r\n\t// \t\tcolumn2: {\r\n\t// \t\t\tcolumn: 'COLUMN_2',\r\n\t// \t\t\ttype: String,\r\n\t// \t\t\trequired: false\r\n\t// \t\t},\r\n\t// \t\tcolumn4: {\r\n\t// \t\t\tcolumn: 'COLUMN_4',\r\n\t// \t\t\ttype: String,\r\n\t// \t\t\trequired: false\r\n\t// \t\t},\r\n\t// \t\tcolumn5: {\r\n\t// \t\t\tcolumn: 'COLUMN_5',\r\n\t// \t\t\ttype: String,\r\n\t// \t\t\trequired: true\r\n\t// \t\t}\r\n\t// \t}, {\r\n\t// \t\tpropertyValueWhenColumnIsMissing: null,\r\n\t// \t\tpropertyValueWhenCellIsEmpty: null,\r\n\t// \t\tshouldSkipRequiredValidationWhenColumnIsMissing: () => false\r\n\t// \t})\r\n\t//\r\n\t// \texpect(errors).to.deep.equal([{\r\n\t// \t\tcolumn: 'COLUMN_5',\r\n\t// \t\terror: 'required',\r\n\t// \t\trow: 2,\r\n\t// \t\ttype: String,\r\n\t// \t\tvalue: null\r\n\t// \t}, {\r\n\t// \t\tcolumn: 'COLUMN_5',\r\n\t// \t\terror: 'required',\r\n\t// \t\trow: 3,\r\n\t// \t\ttype: String,\r\n\t// \t\tvalue: null\r\n\t// \t}])\r\n\t//\r\n\t// \texpect(rows).to.deep.equal([{\r\n\t// \t\tcolumn1: null,\r\n\t// \t\tcolumn2: '12',\r\n\t// \t\tcolumn4: '14',\r\n\t// \t\tcolumn5: null\r\n\t// \t}, {\r\n\t// \t\tcolumn1: null,\r\n\t// \t\tcolumn2: '22',\r\n\t// \t\tcolumn4: null,\r\n\t// \t\tcolumn5: null\r\n\t// \t}])\r\n\t// })\r\n\r\n\t// it('should handle missing columns / empty cells (`propertyValueWhenColumnIsMissing: null` and `propertyValueWhenCellIsEmpty: null` and `shouldSkipRequiredValidationWhenColumnIsMissing: () => true`) (`required: true`)', () => {\r\n\t// \tconst { rows, errors } = parseData([\r\n\t// \t\t[\r\n\t// \t\t\t'COLUMN_2',\r\n\t// \t\t\t'COLUMN_3',\r\n\t// \t\t\t'COLUMN_4'\r\n\t// \t\t], [\r\n\t// \t\t\t'12',\r\n\t// \t\t\t'13',\r\n\t// \t\t\t'14'\r\n\t// \t\t], [\r\n\t// \t\t\t'22',\r\n\t// \t\t\t'23',\r\n\t// \t\t\tnull\r\n\t// \t\t]\r\n\t// \t], {\r\n\t// \t\tcolumn1: {\r\n\t// \t\t\tcolumn: 'COLUMN_1',\r\n\t// \t\t\ttype: String,\r\n\t// \t\t\trequired: false\r\n\t// \t\t},\r\n\t// \t\tcolumn2: {\r\n\t// \t\t\tcolumn: 'COLUMN_2',\r\n\t// \t\t\ttype: String,\r\n\t// \t\t\trequired: false\r\n\t// \t\t},\r\n\t// \t\tcolumn4: {\r\n\t// \t\t\tcolumn: 'COLUMN_4',\r\n\t// \t\t\ttype: String,\r\n\t// \t\t\trequired: false\r\n\t// \t\t},\r\n\t// \t\tcolumn5: {\r\n\t// \t\t\tcolumn: 'COLUMN_5',\r\n\t// \t\t\ttype: String,\r\n\t// \t\t\trequired: true\r\n\t// \t\t}\r\n\t// \t}, {\r\n\t// \t\tpropertyValueWhenColumnIsMissing: null,\r\n\t// \t\tpropertyValueWhenCellIsEmpty: null,\r\n\t// \t\tshouldSkipRequiredValidationWhenColumnIsMissing: () => true\r\n\t// \t})\r\n\t//\r\n\t// \texpect(errors).to.deep.equal([])\r\n\t//\r\n\t// \texpect(rows).to.deep.equal([{\r\n\t// \t\tcolumn1: null,\r\n\t// \t\tcolumn2: '12',\r\n\t// \t\tcolumn4: '14',\r\n\t// \t\tcolumn5: null\r\n\t// \t}, {\r\n\t// \t\tcolumn1: null,\r\n\t// \t\tcolumn2: '22',\r\n\t// \t\tcolumn4: null,\r\n\t// \t\tcolumn5: null\r\n\t// \t}])\r\n\t// })\r\n})"],"mappings":"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R,CAAC,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEAzB,EAAE,CAAC,qBAAqB,EAAE,YAAM;IAC/B,IAAMc,OAAO,GAAGZ,SAAS,CAAC,CACzB,CACC,OAAO,CACP,EAAE;IACF;IACA,oCAAoC,CACpC,EAAE,CACF,IAAI,CACJ,CACD,EAAE;MACFiC,KAAK,EAAE;QACNlB,MAAM,EAAE,OAAO;QACfC,IAAI,EAAE,CAACK,MAAM;MACd;IACD,CAAC,CAAC;IAEFtB,MAAM,CAACa,OAAO,CAACa,MAAM,CAAC,CAAChB,EAAE,CAACE,KAAK,CAAC,CAAC,CAAC;IAElCZ,MAAM,CAACa,OAAO,CAAC,CAAC,CAAC,CAACc,MAAM,CAAC,CAACjB,EAAE,CAACkB,KAAK;IAClC5B,MAAM,CAACa,OAAO,CAAC,CAAC,CAAC,CAACgB,MAAM,CAAC,CAACnB,EAAE,CAACoB,EAAE,CAACC,SAAS;IAEzC/B,MAAM,CAACa,OAAO,CAAC,CAAC,CAAC,CAACc,MAAM,CAAC,CAACjB,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC;MACvC;MACAsB,KAAK,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc;IACjD,CAAC,CAAC;IAEFlC,MAAM,CAACa,OAAO,CAAC,CAAC,CAAC,CAACc,MAAM,CAAC,CAACjB,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC;IAC7CZ,MAAM,CAACa,OAAO,CAAC,CAAC,CAAC,CAACgB,MAAM,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CjB;MACAhB,IAAI,EAAEK,MAAM;MACZE,KAAK,EAAE;IACR,CAAC,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACD,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import InvalidError from './InvalidError.js';
1
+ import InvalidError from '../InvalidError.js';
2
2
  export default function BooleanType(value) {
3
3
  if (typeof value === 'boolean') {
4
4
  return value;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Boolean.js","names":["InvalidError","BooleanType","value"],"sources":["../../../source/parseData/types/Boolean.js"],"sourcesContent":["import InvalidError from '../InvalidError.js'\r\n\r\nexport default function BooleanType(value) {\r\n\tif (typeof value === 'boolean') {\r\n return value\r\n }\r\n throw new InvalidError('not_a_boolean')\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,oBAAoB;AAE7C,eAAe,SAASC,WAAWA,CAACC,KAAK,EAAE;EAC1C,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAE;IAC7B,OAAOA,KAAK;EACd;EACA,MAAM,IAAIF,YAAY,CAAC,eAAe,CAAC;AACzC"}
@@ -0,0 +1,14 @@
1
+ import InvalidError from '../InvalidError.js';
2
+ export default function DateType(value) {
3
+ // XLSX has no specific format for dates.
4
+ // Sometimes a date can be heuristically detected.
5
+ // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777
6
+ if (value instanceof Date) {
7
+ if (isNaN(value.valueOf())) {
8
+ throw new InvalidError('out_of_bounds');
9
+ }
10
+ return value;
11
+ }
12
+ throw new InvalidError('not_a_date');
13
+ }
14
+ //# sourceMappingURL=Date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Date.js","names":["InvalidError","DateType","value","Date","isNaN","valueOf"],"sources":["../../../source/parseData/types/Date.js"],"sourcesContent":["import InvalidError from '../InvalidError.js'\r\n\r\nexport default function DateType(value) {\r\n\t// XLSX has no specific format for dates.\r\n // Sometimes a date can be heuristically detected.\r\n // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777\r\n if (value instanceof Date) {\r\n if (isNaN(value.valueOf())) {\r\n throw new InvalidError('out_of_bounds')\r\n }\r\n return value\r\n }\r\n throw new InvalidError('not_a_date')\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,oBAAoB;AAE7C,eAAe,SAASC,QAAQA,CAACC,KAAK,EAAE;EACvC;EACC;EACA;EACA,IAAIA,KAAK,YAAYC,IAAI,EAAE;IACzB,IAAIC,KAAK,CAACF,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC,EAAE;MAC1B,MAAM,IAAIL,YAAY,CAAC,eAAe,CAAC;IACzC;IACA,OAAOE,KAAK;EACd;EACA,MAAM,IAAIF,YAAY,CAAC,YAAY,CAAC;AACtC"}
@@ -1,4 +1,4 @@
1
- import InvalidError from './InvalidError.js';
1
+ import InvalidError from '../InvalidError.js';
2
2
  export default function NumberType(value) {
3
3
  // An XLSX file editing software might not always correctly
4
4
  // detect numeric values in string-type cells. Users won't bother
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Number.js","names":["InvalidError","NumberType","value","stringifiedValue","Number","String","isNaN","isFinite"],"sources":["../../../source/parseData/types/Number.js"],"sourcesContent":["import InvalidError from '../InvalidError.js'\r\n\r\nexport default function NumberType(value) {\r\n // An XLSX file editing software might not always correctly\r\n // detect numeric values in string-type cells. Users won't bother\r\n // manually selecting a cell type, so the editing software has to guess\r\n // based on the user's input. One can assume that such auto-detection\r\n // might not always work.\r\n //\r\n // So, if a cell is supposed to be a numeric one, convert a string value to a number.\r\n //\r\n if (typeof value === 'string') {\r\n const stringifiedValue = value\r\n value = Number(value)\r\n if (String(value) !== stringifiedValue) {\r\n throw new InvalidError('not_a_number')\r\n }\r\n }\r\n if (typeof value !== 'number') {\r\n throw new InvalidError('not_a_number')\r\n }\r\n if (isNaN(value)) {\r\n throw new InvalidError('invalid_number')\r\n }\r\n // At this point, `value` can only be a number.\r\n //\r\n // The global `isFinite()` function filters out:\r\n // * NaN\r\n // * -Infinity\r\n // * Infinity\r\n //\r\n // All other values pass (including non-numbers).\r\n //\r\n if (!isFinite(value)) {\r\n throw new InvalidError('out_of_bounds')\r\n }\r\n return value\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,oBAAoB;AAE7C,eAAe,SAASC,UAAUA,CAACC,KAAK,EAAE;EACxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,IAAMC,gBAAgB,GAAGD,KAAK;IAC9BA,KAAK,GAAGE,MAAM,CAACF,KAAK,CAAC;IACrB,IAAIG,MAAM,CAACH,KAAK,CAAC,KAAKC,gBAAgB,EAAE;MACtC,MAAM,IAAIH,YAAY,CAAC,cAAc,CAAC;IACxC;EACF;EACA,IAAI,OAAOE,KAAK,KAAK,QAAQ,EAAE;IAC7B,MAAM,IAAIF,YAAY,CAAC,cAAc,CAAC;EACxC;EACA,IAAIM,KAAK,CAACJ,KAAK,CAAC,EAAE;IAChB,MAAM,IAAIF,YAAY,CAAC,gBAAgB,CAAC;EAC1C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,CAACO,QAAQ,CAACL,KAAK,CAAC,EAAE;IACpB,MAAM,IAAIF,YAAY,CAAC,eAAe,CAAC;EACzC;EACA,OAAOE,KAAK;AACd"}
@@ -1,4 +1,4 @@
1
- import InvalidError from './InvalidError.js';
1
+ import InvalidError from '../InvalidError.js';
2
2
  export default function StringType(value) {
3
3
  if (typeof value === 'string') {
4
4
  return value;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"String.js","names":["InvalidError","StringType","value","isNaN","isFinite","String"],"sources":["../../../source/parseData/types/String.js"],"sourcesContent":["import InvalidError from '../InvalidError.js'\r\n\r\nexport default function StringType(value) {\r\n if (typeof value === 'string') {\r\n return value\r\n }\r\n // Excel tends to perform a forced automatic convertion of string-type values\r\n // to number-type ones when the user has input them. Otherwise, users wouldn't\r\n // be able to perform formula calculations on those cell values because users\r\n // won't bother manually choosing a \"numeric\" cell type for each cell, and\r\n // even if they did, choosing a \"numeric\" cell type every time wouldn't be an\r\n // acceptable \"user experience\".\r\n //\r\n // So, if a cell value is supposed to be a string and Excel has automatically\r\n // converted it to a number, perform a backwards conversion.\r\n //\r\n if (typeof value === 'number') {\r\n if (isNaN(value)) {\r\n throw new InvalidError('invalid_number')\r\n }\r\n // The global `isFinite()` function filters out:\r\n // * NaN\r\n // * -Infinity\r\n // * Infinity\r\n //\r\n // All other values pass (including non-numbers).\r\n //\r\n if (!isFinite(value)) {\r\n throw new InvalidError('out_of_bounds')\r\n }\r\n return String(value)\r\n }\r\n throw new InvalidError('not_a_string')\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,oBAAoB;AAE7C,eAAe,SAASC,UAAUA,CAACC,KAAK,EAAE;EACxC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAOA,KAAK;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,IAAIC,KAAK,CAACD,KAAK,CAAC,EAAE;MAChB,MAAM,IAAIF,YAAY,CAAC,gBAAgB,CAAC;IAC1C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,CAACI,QAAQ,CAACF,KAAK,CAAC,EAAE;MACpB,MAAM,IAAIF,YAAY,CAAC,eAAe,CAAC;IACzC;IACA,OAAOK,MAAM,CAACH,KAAK,CAAC;EACtB;EACA,MAAM,IAAIF,YAAY,CAAC,cAAc,CAAC;AACxC"}
@@ -1,4 +1,4 @@
1
- import InvalidError from './InvalidError.js';
1
+ import InvalidError from '../../InvalidError.js';
2
2
  export default function Email(value) {
3
3
  if (typeof value === 'string') {
4
4
  if (isEmail(value)) {
@@ -8,8 +8,8 @@ export default function Email(value) {
8
8
  }
9
9
  throw new InvalidError('not_a_string');
10
10
  }
11
- var regexp = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i;
11
+ var EMAIL_REGEXP = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i;
12
12
  export function isEmail(value) {
13
- return regexp.test(value);
13
+ return EMAIL_REGEXP.test(value);
14
14
  }
15
15
  //# sourceMappingURL=Email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Email.js","names":["InvalidError","Email","value","isEmail","EMAIL_REGEXP","test"],"sources":["../../../../source/parseData/types/additional/Email.js"],"sourcesContent":["import InvalidError from '../../InvalidError.js'\r\n\r\nexport default function Email(value) {\r\n if (typeof value === 'string') {\r\n if (isEmail(value)) {\r\n return value\r\n }\r\n throw new InvalidError('not_an_email')\r\n }\r\n throw new InvalidError('not_a_string')\r\n}\r\n\r\nconst EMAIL_REGEXP = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i\r\n\r\nexport function isEmail(value) {\r\n\treturn EMAIL_REGEXP.test(value)\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,uBAAuB;AAEhD,eAAe,SAASC,KAAKA,CAACC,KAAK,EAAE;EACnC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,IAAIC,OAAO,CAACD,KAAK,CAAC,EAAE;MAClB,OAAOA,KAAK;IACd;IACA,MAAM,IAAIF,YAAY,CAAC,cAAc,CAAC;EACxC;EACA,MAAM,IAAIA,YAAY,CAAC,cAAc,CAAC;AACxC;AAEA,IAAMI,YAAY,GAAG,0CAA0C;AAE/D,OAAO,SAASD,OAAOA,CAACD,KAAK,EAAE;EAC9B,OAAOE,YAAY,CAACC,IAAI,CAACH,KAAK,CAAC;AAChC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Email.test.js","names":["describe","it","expect","isEmail","to","equal"],"sources":["../../../../source/parseData/types/additional/Email.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { isEmail } from './Email.js'\r\n\r\ndescribe('Email', () => {\r\n\tit('should validate an Email', () => {\r\n\t\texpect(isEmail('123')).to.equal(false)\r\n\t\texpect(isEmail('vladimir.putin@kremlin.ru')).to.equal(true)\r\n\t})\r\n})"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,OAAO;AACpC,SAASC,MAAM,QAAQ,MAAM;AAE7B,SAASC,OAAO,QAAQ,YAAY;AAEpCH,QAAQ,CAAC,OAAO,EAAE,YAAM;EACvBC,EAAE,CAAC,0BAA0B,EAAE,YAAM;IACpCC,MAAM,CAACC,OAAO,CAAC,KAAK,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,KAAK,CAAC;IACtCH,MAAM,CAACC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;EAC5D,CAAC,CAAC;AACH,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
- import InvalidError from './InvalidError.js';
2
- import NumberType from './Number.js';
1
+ import InvalidError from '../../InvalidError.js';
2
+ import NumberType from '../Number.js';
3
3
  export default function Integer(value) {
4
4
  value = NumberType(value);
5
5
  if (!isInteger(value)) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Integer.js","names":["InvalidError","NumberType","Integer","value","isInteger","x"],"sources":["../../../../source/parseData/types/additional/Integer.js"],"sourcesContent":["import InvalidError from '../../InvalidError.js'\r\nimport NumberType from '../Number.js'\r\n\r\nexport default function Integer(value) {\r\n\tvalue = NumberType(value)\r\n if (!isInteger(value)) {\r\n throw new InvalidError('not_an_integer')\r\n }\r\n return value\r\n}\r\n\r\nexport function isInteger(x) {\r\n\t// https://stackoverflow.com/questions/14636536/how-to-check-if-a-variable-is-an-integer-in-javascript\r\n\treturn (x | 0) === x\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,uBAAuB;AAChD,OAAOC,UAAU,MAAM,cAAc;AAErC,eAAe,SAASC,OAAOA,CAACC,KAAK,EAAE;EACtCA,KAAK,GAAGF,UAAU,CAACE,KAAK,CAAC;EACxB,IAAI,CAACC,SAAS,CAACD,KAAK,CAAC,EAAE;IACrB,MAAM,IAAIH,YAAY,CAAC,gBAAgB,CAAC;EAC1C;EACA,OAAOG,KAAK;AACd;AAEA,OAAO,SAASC,SAASA,CAACC,CAAC,EAAE;EAC5B;EACA,OAAO,CAACA,CAAC,GAAG,CAAC,MAAMA,CAAC;AACrB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Integer.test.js","names":["describe","it","expect","isInteger","to","equal"],"sources":["../../../../source/parseData/types/additional/Integer.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { isInteger } from './Integer.js'\r\n\r\ndescribe('Integer', () => {\r\n\tit('should validate an Integer', () => {\r\n\t\texpect(isInteger(1.2)).to.equal(false)\r\n\t\texpect(isInteger(1)).to.equal(true)\r\n\t})\r\n})"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,OAAO;AACpC,SAASC,MAAM,QAAQ,MAAM;AAE7B,SAASC,SAAS,QAAQ,cAAc;AAExCH,QAAQ,CAAC,SAAS,EAAE,YAAM;EACzBC,EAAE,CAAC,4BAA4B,EAAE,YAAM;IACtCC,MAAM,CAACC,SAAS,CAAC,GAAG,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,KAAK,CAAC;IACtCH,MAAM,CAACC,SAAS,CAAC,CAAC,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;EACpC,CAAC,CAAC;AACH,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import InvalidError from './InvalidError.js';
1
+ import InvalidError from '../../InvalidError.js';
2
2
  export default function URL(value) {
3
3
  if (typeof value === 'string') {
4
4
  if (isURL(value)) {
@@ -64,10 +64,10 @@ export default function URL(value) {
64
64
  //
65
65
  // $/i
66
66
 
67
- var regexp = /^(?:(?:(?:https?|ftp):)?\/\/)(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)*(?:[a-z\u00a1-\uffff]{2,}))(?::\d{2,5})?(?:[/?#]\S*)?$/i;
67
+ var URL_REGEXP = /^(?:(?:(?:https?|ftp):)?\/\/)(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)*(?:[a-z\u00a1-\uffff]{2,}))(?::\d{2,5})?(?:[/?#]\S*)?$/i;
68
68
 
69
69
  // https://stackoverflow.com/questions/8667070/javascript-regular-expression-to-validate-url
70
70
  export function isURL(value) {
71
- return regexp.test(value);
71
+ return URL_REGEXP.test(value);
72
72
  }
73
73
  //# sourceMappingURL=URL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"URL.js","names":["InvalidError","URL","value","isURL","URL_REGEXP","test"],"sources":["../../../../source/parseData/types/additional/URL.js"],"sourcesContent":["import InvalidError from '../../InvalidError.js'\r\n\r\nexport default function URL(value) {\r\n if (typeof value === 'string') {\r\n if (isURL(value)) {\r\n return value\r\n }\r\n throw new InvalidError('not_a_url')\r\n }\r\n throw new InvalidError('not_a_string')\r\n}\r\n\r\n// URL regexp explanation:\r\n//\r\n// /^\r\n//\r\n// \t(?:\r\n// \t // Matches optional \"http(s):\" or \"ftp:\":\r\n// \t\t(?:\r\n// \t\t\t(?:https?|ftp):\r\n// \t\t)?\r\n//\r\n// \t // Matches \"//\" (required):\r\n// \t\t\\/\\/\r\n// \t)\r\n//\r\n// \t// Matches a valid non-local IP address:\r\n// \t(?:\r\n// \t\t(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])\r\n// \t\t(?:\r\n// \t\t\t\\.\r\n// \t\t\t(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])\r\n// \t\t){2}\r\n// \t\t(?:\r\n// \t\t\t\\.\r\n// \t\t\t(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4])\r\n// \t\t)\r\n//\r\n// \t // Or,\r\n// \t\t|\r\n//\r\n// \t // Matches an alpha-numeric domain name.\r\n// \t\t(?:\r\n// \t\t\t(?:\r\n// \t\t\t\t[a-z0-9\\u00a1-\\uffff]\r\n// \t\t\t\t[a-z0-9\\u00a1-\\uffff_-]{0,62}\r\n// \t\t\t)?\r\n// \t\t\t[a-z0-9\\u00a1-\\uffff]\r\n// \t\t\t\\.\r\n// \t\t)*\r\n// \t\t(?:\r\n// \t // Domain zone: \"com\", \"net\", etc (required):\r\n// \t\t\t[a-z\\u00a1-\\uffff]{2,}\r\n// \t\t)\r\n// \t)\r\n//\r\n// \t// Matches a colon and a port number:\r\n// \t(?::\\d{2,5})?\r\n//\r\n// \t// Matches everything after the \"origin\":\r\n// \t// * pathname\r\n// \t// * query\r\n// \t// * hash\r\n// \t(?:[/?#]\\S*)?\r\n//\r\n// $/i\r\n\r\nconst URL_REGEXP = /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)*(?:[a-z\\u00a1-\\uffff]{2,}))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i;\r\n\r\n// https://stackoverflow.com/questions/8667070/javascript-regular-expression-to-validate-url\r\nexport function isURL(value) {\r\n\treturn URL_REGEXP.test(value)\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,uBAAuB;AAEhD,eAAe,SAASC,GAAGA,CAACC,KAAK,EAAE;EACjC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,IAAIC,KAAK,CAACD,KAAK,CAAC,EAAE;MAChB,OAAOA,KAAK;IACd;IACA,MAAM,IAAIF,YAAY,CAAC,WAAW,CAAC;EACrC;EACA,MAAM,IAAIA,YAAY,CAAC,cAAc,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMI,UAAU,GAAG,+RAA+R;;AAElT;AACA,OAAO,SAASD,KAAKA,CAACD,KAAK,EAAE;EAC5B,OAAOE,UAAU,CAACC,IAAI,CAACH,KAAK,CAAC;AAC9B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"URL.test.js","names":["describe","it","expect","isURL","to","equal"],"sources":["../../../../source/parseData/types/additional/URL.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { isURL } from './URL.js'\r\n\r\ndescribe('URL', () => {\r\n\tit('should validate a URL', () => {\r\n\t\texpect(isURL('123')).to.equal(false)\r\n\t\texpect(isURL('https://stackoverflow.com/questions/8667070/javascript-regular-expression-to-validate-url')).to.equal(true)\r\n\t})\r\n})"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,OAAO;AACpC,SAASC,MAAM,QAAQ,MAAM;AAE7B,SAASC,KAAK,QAAQ,UAAU;AAEhCH,QAAQ,CAAC,KAAK,EAAE,YAAM;EACrBC,EAAE,CAAC,uBAAuB,EAAE,YAAM;IACjCC,MAAM,CAACC,KAAK,CAAC,KAAK,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,KAAK,CAAC;IACpCH,MAAM,CAACC,KAAK,CAAC,2FAA2F,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;EAC1H,CAAC,CAAC;AACH,CAAC,CAAC"}
@@ -7,10 +7,7 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
7
7
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
8
  import dropEmptyRows from './dropEmptyRows.js';
9
9
  import dropEmptyColumns from './dropEmptyColumns.js';
10
- export default function getData(sheet, options) {
11
- var dimensions = sheet.dimensions,
12
- cells = sheet.cells;
13
-
10
+ export default function convertCellsToData2dArray(cells, dimensions) {
14
11
  // If the sheet is empty.
15
12
  if (cells.length === 0) {
16
13
  return [];
@@ -60,42 +57,24 @@ export default function getData(sheet, options) {
60
57
  }
61
58
  }
62
59
 
63
- // Fill in the row map.
64
- var rowIndexSourceMap = options.rowIndexSourceMap;
65
- if (rowIndexSourceMap) {
66
- var _i = 0;
67
- while (_i < data.length) {
68
- rowIndexSourceMap[_i] = _i;
69
- _i++;
70
- }
71
- }
60
+ // // Fill in the row map, if the row map was passed.
61
+ // if (options.rowIndexSourceMap) {
62
+ // let i = 0
63
+ // while (i < data.length) {
64
+ // options.rowIndexSourceMap[i] = i
65
+ // i++
66
+ // }
67
+ // }
72
68
 
73
- // Drop (discard) empty columns or rows.
74
- //
75
- // Don't discard empty rows or columns at the start or in the middle.
76
- // Only discard empty rows at the bottom or empty columns on the right side.
77
- // The rationale is that the data should be output in the same shape or form
78
- // as it can be seen in the actual spreadsheet.
79
- // If the user decides to discard empty rows or columns, they could do it manually
80
- // by passing `transformData()` function as an option.
81
- //
69
+ // Drop (discard) empty columns at the right side.
70
+ // Drop (discard) empty rows at the bottom.
82
71
  data = dropEmptyRows(dropEmptyColumns(data, {
83
72
  onlyTrimAtTheEnd: true
84
73
  }), {
85
- onlyTrimAtTheEnd: true,
86
- rowIndexSourceMap: rowIndexSourceMap
87
- });
88
-
89
- // Optionally transform data before applying `schema`.
90
- if (options.transformData) {
91
- data = options.transformData(data);
92
- // data = options.transformData(data, {
93
- // dropEmptyRowsAndColumns(data) {
94
- // return dropEmptyRows(dropEmptyColumns(data), { rowIndexSourceMap })
95
- // }
96
- // })
97
- }
74
+ onlyTrimAtTheEnd: true
75
+ } // { onlyTrimAtTheEnd: true, rowIndexSourceMap: options.rowIndexSourceMap }
76
+ );
98
77
 
99
78
  return data;
100
79
  }
101
- //# sourceMappingURL=getData.js.map
80
+ //# sourceMappingURL=convertCellsToData2dArray.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertCellsToData2dArray.js","names":["dropEmptyRows","dropEmptyColumns","convertCellsToData2dArray","cells","dimensions","length","_dimensions","_slicedToArray","leftTop","rightBottom","colsCount","column","rowsCount","row","data","Array","i","j","_iterator","_createForOfIteratorHelperLoose","_step","done","cell","value","rowIndex","columnIndex","onlyTrimAtTheEnd"],"sources":["../../source/xlsx/convertCellsToData2dArray.js"],"sourcesContent":["import dropEmptyRows from './dropEmptyRows.js'\r\nimport dropEmptyColumns from './dropEmptyColumns.js'\r\n\r\nexport default function convertCellsToData2dArray(cells, dimensions) {\r\n // If the sheet is empty.\r\n if (cells.length === 0) {\r\n return []\r\n }\r\n\r\n const [leftTop, rightBottom] = dimensions\r\n\r\n // Don't discard empty rows or columns at the start of the spreadsheet,\r\n // even when the `*.xlsx` file itself tells that the content starts at an offset.\r\n // https://github.com/catamphetamine/read-excel-file/issues/102\r\n // const colsCount = (rightBottom.column - leftTop.column) + 1\r\n // const rowsCount = (rightBottom.row - leftTop.row) + 1\r\n\r\n const colsCount = rightBottom.column\r\n const rowsCount = rightBottom.row\r\n\r\n // Initialize spreadsheet data structure.\r\n let data = new Array(rowsCount)\r\n let i = 0\r\n while (i < rowsCount) {\r\n data[i] = new Array(colsCount)\r\n let j = 0\r\n while (j < colsCount) {\r\n data[i][j] = null\r\n j++\r\n }\r\n i++\r\n }\r\n\r\n // Fill in spreadsheet `data`.\r\n // (this code implies that `cells` aren't necessarily sorted by row and column:\r\n // maybe that's not correct, this piece code was initially copy-pasted\r\n // from some other library that used `XPath`)\r\n for (const cell of cells) {\r\n // Don't discard empty rows or columns at the start of the spreadsheet,\r\n // even when the `*.xlsx` file itself tells that the content starts at an offset.\r\n // https://github.com/catamphetamine/read-excel-file/issues/102\r\n // const rowIndex = cell.row - leftTop.row\r\n // const columnIndex = cell.column - leftTop.column\r\n const rowIndex = cell.row - 1\r\n const columnIndex = cell.column - 1\r\n // Ignore the data in the cell if it's outside of the spreadsheet's \"dimensions\".\r\n if (columnIndex < colsCount && rowIndex < rowsCount) {\r\n data[rowIndex][columnIndex] = cell.value\r\n }\r\n }\r\n\r\n // // Fill in the row map, if the row map was passed.\r\n // if (options.rowIndexSourceMap) {\r\n // let i = 0\r\n // while (i < data.length) {\r\n // options.rowIndexSourceMap[i] = i\r\n // i++\r\n // }\r\n // }\r\n\r\n // Drop (discard) empty columns at the right side.\r\n // Drop (discard) empty rows at the bottom.\r\n data = dropEmptyRows(\r\n dropEmptyColumns(data, { onlyTrimAtTheEnd: true }),\r\n { onlyTrimAtTheEnd: true } // { onlyTrimAtTheEnd: true, rowIndexSourceMap: options.rowIndexSourceMap }\r\n )\r\n\r\n return data\r\n}"],"mappings":";;;;;;;AAAA,OAAOA,aAAa,MAAM,oBAAoB;AAC9C,OAAOC,gBAAgB,MAAM,uBAAuB;AAEpD,eAAe,SAASC,yBAAyBA,CAACC,KAAK,EAAEC,UAAU,EAAE;EACnE;EACA,IAAID,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;IACtB,OAAO,EAAE;EACX;EAEA,IAAAC,WAAA,GAAAC,cAAA,CAA+BH,UAAU;IAAlCI,OAAO,GAAAF,WAAA;IAAEG,WAAW,GAAAH,WAAA;;EAE3B;EACA;EACA;EACA;EACA;;EAEA,IAAMI,SAAS,GAAGD,WAAW,CAACE,MAAM;EACpC,IAAMC,SAAS,GAAGH,WAAW,CAACI,GAAG;;EAEjC;EACA,IAAIC,IAAI,GAAG,IAAIC,KAAK,CAACH,SAAS,CAAC;EAC/B,IAAII,CAAC,GAAG,CAAC;EACT,OAAOA,CAAC,GAAGJ,SAAS,EAAE;IACpBE,IAAI,CAACE,CAAC,CAAC,GAAG,IAAID,KAAK,CAACL,SAAS,CAAC;IAC9B,IAAIO,CAAC,GAAG,CAAC;IACT,OAAOA,CAAC,GAAGP,SAAS,EAAE;MACpBI,IAAI,CAACE,CAAC,CAAC,CAACC,CAAC,CAAC,GAAG,IAAI;MACjBA,CAAC,EAAE;IACL;IACAD,CAAC,EAAE;EACL;;EAEA;EACA;EACA;EACA;EACA,SAAAE,SAAA,GAAAC,+BAAA,CAAmBhB,KAAK,GAAAiB,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;IAAA,IAAfC,IAAI,GAAAF,KAAA,CAAAG,KAAA;IACb;IACA;IACA;IACA;IACA;IACA,IAAMC,QAAQ,GAAGF,IAAI,CAACT,GAAG,GAAG,CAAC;IAC7B,IAAMY,WAAW,GAAGH,IAAI,CAACX,MAAM,GAAG,CAAC;IACnC;IACA,IAAIc,WAAW,GAAGf,SAAS,IAAIc,QAAQ,GAAGZ,SAAS,EAAE;MACnDE,IAAI,CAACU,QAAQ,CAAC,CAACC,WAAW,CAAC,GAAGH,IAAI,CAACC,KAAK;IAC1C;EACF;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACAT,IAAI,GAAGd,aAAa,CAClBC,gBAAgB,CAACa,IAAI,EAAE;IAAEY,gBAAgB,EAAE;EAAK,CAAC,CAAC,EAClD;IAAEA,gBAAgB,EAAE;EAAK,CAAC,CAAC;EAC7B,CAAC;;EAED,OAAOZ,IAAI;AACb"}
@@ -1,78 +1,80 @@
1
1
  function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
2
2
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3
3
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
4
- // XLSX does have "d" type for dates, but it's not commonly used.
5
- // Instead, it prefers using "n" type for storing dates as timestamps.
4
+ // On some date formats, there's a "[$-...]" prefix that locks the locale
5
+ // to be a specific one when formatting a date using this format.
6
6
  //
7
- // Whether a numeric value is a number or a date timestamp, it sometimes could be
8
- // detected by looking at the value "format" and seeing if it's a date-specific one.
9
- // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777
7
+ // https://stackoverflow.com/questions/4730152/what-indicates-an-office-open-xml-cell-contains-a-date-time-value
10
8
  //
11
- // The list of generic numeric value "formats":
12
- // https://xlsxwriter.readthedocs.io/format.html#format-set-num-format
9
+ // Format examples:
13
10
  //
14
- export default function isDateTimestamp(styleId, styles, options) {
15
- if (styleId) {
16
- var style = styles[styleId];
17
- if (!style) {
18
- throw new Error("Cell style not found: ".concat(styleId));
19
- }
20
- if (!style.numberFormat) {
21
- return false;
22
- }
23
- if (
24
- // Whether it's a "number format" that's conventionally used for storing date timestamps.
25
- BUILT_IN_DATE_NUMBER_FORMAT_IDS.indexOf(Number(style.numberFormat.id)) >= 0 ||
26
- // Whether it's a "number format" that uses a "formatting template"
27
- // that the developer is certain is a date formatting template.
28
- options.dateFormat && style.numberFormat.template === options.dateFormat ||
29
- // Whether the "smart formatting template" feature is not disabled
30
- // and it has detected that it's a date formatting template by looking at it.
31
- options.smartDateParser !== false && style.numberFormat.template && isDateTemplate(style.numberFormat.template)) {
32
- return true;
33
- }
34
- }
35
- }
36
-
37
- // https://hexdocs.pm/xlsxir/number_styles.html
38
- var BUILT_IN_DATE_NUMBER_FORMAT_IDS = [14, 15, 16, 17, 18, 19, 20, 21, 22, 27, 30, 36, 45, 46, 47, 50, 57];
11
+ // * "[$-404]e/m/d"
12
+ // * "[$-414]mmmm\ yyyy;@"
13
+ // * "[$-ru-RU]dd.mm.yyyy;@"
14
+ // * "[$-x-sysdate]dddd, mmmm dd, yyyy"
15
+ //
16
+ var DATE_FORMAT_SPECIFIC_LOCALE_PREFIX = /^\[\$-[^\]]+\]/;
39
17
 
40
- // On some date formats, there's an "[$-414]" prefix.
41
- // I don't have any idea what that is.
18
+ // On some date formats, there's a ";@" suffix.
19
+ // It instructs the spreadsheet editor application to display any non-numeric
20
+ // value as is instead of hiding it or something like that.
42
21
  //
43
- // https://stackoverflow.com/questions/4730152/what-indicates-an-office-open-xml-cell-contains-a-date-time-value
22
+ // For example, if one inputs "Some text" instead of a date in such cell,
23
+ // it will still show "Some text" instead of an empty cell, even though
24
+ // the value is strictly-speaking invalid.
44
25
  //
45
- // Examples:
26
+ // Specifically, ";" means "anything before this applies only to a numeric value,
27
+ // while anything after it applies to a text value". And a follow-up "@" means
28
+ // "for a text value, just output it as is".
46
29
  //
47
- // * 27 (built-in format) "[$-404]e/m/d"
48
- // * 164 (custom format) "[$-414]mmmm\ yyyy;@"
30
+ // It's not really clear why would anyone add such a feature to a format.
31
+ // Perhaps it feels more "user-friendly" towards a non-"tech-savvy" user
32
+ // of a spreadsheet editor application.
49
33
  //
50
- var DATE_FORMAT_WEIRD_PREFIX = /^\[\$-414\]/;
51
-
52
- // On some date formats, there's an ";@" postfix.
53
- // I don't have any idea what that is.
54
- // Examples:
34
+ // Format examples:
55
35
  //
56
- // * 164 (custom format) "m/d/yyyy;@"
57
- // * 164 (custom format) "[$-414]mmmm\ yyyy;@"
36
+ // * "m/d/yyyy;@"
37
+ // * "[$-414]mmmm\ yyyy;@"
58
38
  //
59
- var DATE_FORMAT_WEIRD_POSTFIX = /;@$/;
60
- function isDateTemplate(template) {
39
+ var DATE_FORMAT_ALLOW_ANY_OTHER_TEXT_SUFFIX = /;@$/;
40
+ var CACHE = {};
41
+ export default function isDateFormatCached(template) {
42
+ if (template in CACHE) {
43
+ return CACHE[template];
44
+ }
45
+ var result = isDateFormat(template);
46
+ CACHE[template] = result;
47
+ return result;
48
+ }
49
+ function isDateFormat(template) {
61
50
  // Date format tokens could be in upper case or in lower case.
62
51
  // There seems to be no single standard.
63
- // So lowercase the template first.
52
+ // So the template is lowercased first.
64
53
  template = template.toLowerCase();
65
54
 
66
- // On some date formats, there's an "[$-414]" prefix.
67
- // I don't have any idea what that is. Trim it.
68
- template = template.replace(DATE_FORMAT_WEIRD_PREFIX, '');
55
+ // On some date formats, there's an "[$-...]" prefix.
56
+ // It forces a specific locale to be used when formatting a date.
57
+ template = template.replace(DATE_FORMAT_SPECIFIC_LOCALE_PREFIX, '');
58
+
59
+ // On some date formats, there's an ";@" suffix.
60
+ // It's not clear why would anyone need it in a date format template.
61
+ // Still, because it occurs there, it should be stripped.
62
+ template = template.replace(DATE_FORMAT_ALLOW_ANY_OTHER_TEXT_SUFFIX, '');
69
63
 
70
- // On some date formats, there's an ";@" postfix.
71
- // I don't have any idea what that is. Trim it.
72
- template = template.replace(DATE_FORMAT_WEIRD_POSTFIX, '');
64
+ // Extract all alphabetic parts from what's left from the template string.
65
+ // Example: "mm/dd/yyyy" ["mm", "dd", "yyyy"]
73
66
  var tokens = template.split(/\W+/);
67
+
68
+ // If no alphabetic parts are present in what's left from the template string
69
+ // then it could be any kind of template such as a generic numeric template
70
+ // such as "$#,##0.00" currency template or "0.0%" percentage template.
71
+ if (tokens.length < 0) {
72
+ return false;
73
+ }
74
74
  for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
75
75
  var token = _step.value;
76
+ // If a non-date-format-specific alphabetic substring is found,
77
+ // this might not necessarily be a date format.
76
78
  if (DATE_TEMPLATE_TOKENS.indexOf(token) < 0) {
77
79
  return false;
78
80
  }
@@ -118,4 +120,4 @@ var DATE_TEMPLATE_TOKENS = [
118
120
  // * 50 '[$-404]e/m/d';
119
121
  // * 57 '[$-404]e/m/d';
120
122
  'e'];
121
- //# sourceMappingURL=isDateTimestamp.js.map
123
+ //# sourceMappingURL=isDateFormat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isDateFormat.js","names":["DATE_FORMAT_SPECIFIC_LOCALE_PREFIX","DATE_FORMAT_ALLOW_ANY_OTHER_TEXT_SUFFIX","CACHE","isDateFormatCached","template","result","isDateFormat","toLowerCase","replace","tokens","split","length","_iterator","_createForOfIteratorHelperLoose","_step","done","token","value","DATE_TEMPLATE_TOKENS","indexOf"],"sources":["../../source/xlsx/isDateFormat.js"],"sourcesContent":["// On some date formats, there's a \"[$-...]\" prefix that locks the locale\r\n// to be a specific one when formatting a date using this format.\r\n//\r\n// https://stackoverflow.com/questions/4730152/what-indicates-an-office-open-xml-cell-contains-a-date-time-value\r\n//\r\n// Format examples:\r\n//\r\n// * \"[$-404]e/m/d\"\r\n// * \"[$-414]mmmm\\ yyyy;@\"\r\n// * \"[$-ru-RU]dd.mm.yyyy;@\"\r\n// * \"[$-x-sysdate]dddd, mmmm dd, yyyy\"\r\n//\r\nconst DATE_FORMAT_SPECIFIC_LOCALE_PREFIX = /^\\[\\$-[^\\]]+\\]/\r\n\r\n// On some date formats, there's a \";@\" suffix.\r\n// It instructs the spreadsheet editor application to display any non-numeric\r\n// value as is instead of hiding it or something like that.\r\n//\r\n// For example, if one inputs \"Some text\" instead of a date in such cell,\r\n// it will still show \"Some text\" instead of an empty cell, even though\r\n// the value is strictly-speaking invalid.\r\n//\r\n// Specifically, \";\" means \"anything before this applies only to a numeric value,\r\n// while anything after it applies to a text value\". And a follow-up \"@\" means\r\n// \"for a text value, just output it as is\".\r\n//\r\n// It's not really clear why would anyone add such a feature to a format.\r\n// Perhaps it feels more \"user-friendly\" towards a non-\"tech-savvy\" user\r\n// of a spreadsheet editor application.\r\n//\r\n// Format examples:\r\n//\r\n// * \"m/d/yyyy;@\"\r\n// * \"[$-414]mmmm\\ yyyy;@\"\r\n//\r\nconst DATE_FORMAT_ALLOW_ANY_OTHER_TEXT_SUFFIX = /;@$/\r\n\r\nconst CACHE = {}\r\n\r\nexport default function isDateFormatCached(template) {\r\n\tif (template in CACHE) {\r\n\t\treturn CACHE[template]\r\n\t}\r\n\tconst result = isDateFormat(template)\r\n\tCACHE[template] = result\r\n\treturn result\r\n}\r\n\r\nfunction isDateFormat(template) {\r\n // Date format tokens could be in upper case or in lower case.\r\n // There seems to be no single standard.\r\n // So the template is lowercased first.\r\n template = template.toLowerCase()\r\n\r\n // On some date formats, there's an \"[$-...]\" prefix.\r\n // It forces a specific locale to be used when formatting a date.\r\n template = template.replace(DATE_FORMAT_SPECIFIC_LOCALE_PREFIX, '')\r\n\r\n // On some date formats, there's an \";@\" suffix.\r\n // It's not clear why would anyone need it in a date format template.\r\n\t// Still, because it occurs there, it should be stripped.\r\n template = template.replace(DATE_FORMAT_ALLOW_ANY_OTHER_TEXT_SUFFIX, '')\r\n\r\n // Extract all alphabetic parts from what's left from the template string.\r\n // Example: \"mm/dd/yyyy\" → [\"mm\", \"dd\", \"yyyy\"]\r\n const tokens = template.split(/\\W+/)\r\n\r\n // If no alphabetic parts are present in what's left from the template string\r\n // then it could be any kind of template such as a generic numeric template\r\n // such as \"$#,##0.00\" currency template or \"0.0%\" percentage template.\r\n if (tokens.length < 0) {\r\n return false\r\n }\r\n\r\n for (const token of tokens) {\r\n // If a non-date-format-specific alphabetic substring is found,\r\n // this might not necessarily be a date format.\r\n if (DATE_TEMPLATE_TOKENS.indexOf(token) < 0) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}\r\n\r\n// These tokens could be in upper case or in lower case.\r\n// There seems to be no single standard, so using lower case.\r\nconst DATE_TEMPLATE_TOKENS = [\r\n // Seconds (min two digits). Example: \"05\".\r\n 'ss',\r\n // Minutes (min two digits). Example: \"05\". Could also be \"Months\". Weird.\r\n 'mm',\r\n // Hours. Example: \"1\".\r\n 'h',\r\n // Hours (min two digits). Example: \"01\".\r\n 'hh',\r\n // \"AM\" part of \"AM/PM\". Lowercased just in case.\r\n 'am',\r\n // \"PM\" part of \"AM/PM\". Lowercased just in case.\r\n 'pm',\r\n // Day. Example: \"1\"\r\n 'd',\r\n // Day (min two digits). Example: \"01\"\r\n 'dd',\r\n // Month (numeric). Example: \"1\".\r\n 'm',\r\n // Month (numeric, min two digits). Example: \"01\". Could also be \"Minutes\". Weird.\r\n 'mm',\r\n // Month (shortened month name). Example: \"Jan\".\r\n 'mmm',\r\n // Month (full month name). Example: \"January\".\r\n 'mmmm',\r\n // Two-digit year. Example: \"20\".\r\n 'yy',\r\n // Full year. Example: \"2020\".\r\n 'yyyy',\r\n\r\n // I don't have any idea what \"e\" means.\r\n // It's used in \"built-in\" XLSX formats:\r\n // * 27 '[$-404]e/m/d';\r\n // * 36 '[$-404]e/m/d';\r\n // * 50 '[$-404]e/m/d';\r\n // * 57 '[$-404]e/m/d';\r\n 'e'\r\n];"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMA,kCAAkC,GAAG,gBAAgB;;AAE3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,uCAAuC,GAAG,KAAK;AAErD,IAAMC,KAAK,GAAG,CAAC,CAAC;AAEhB,eAAe,SAASC,kBAAkBA,CAACC,QAAQ,EAAE;EACpD,IAAIA,QAAQ,IAAIF,KAAK,EAAE;IACtB,OAAOA,KAAK,CAACE,QAAQ,CAAC;EACvB;EACA,IAAMC,MAAM,GAAGC,YAAY,CAACF,QAAQ,CAAC;EACrCF,KAAK,CAACE,QAAQ,CAAC,GAAGC,MAAM;EACxB,OAAOA,MAAM;AACd;AAEA,SAASC,YAAYA,CAACF,QAAQ,EAAE;EAC9B;EACA;EACA;EACAA,QAAQ,GAAGA,QAAQ,CAACG,WAAW,CAAC,CAAC;;EAEjC;EACA;EACAH,QAAQ,GAAGA,QAAQ,CAACI,OAAO,CAACR,kCAAkC,EAAE,EAAE,CAAC;;EAEnE;EACA;EACD;EACCI,QAAQ,GAAGA,QAAQ,CAACI,OAAO,CAACP,uCAAuC,EAAE,EAAE,CAAC;;EAExE;EACA;EACA,IAAMQ,MAAM,GAAGL,QAAQ,CAACM,KAAK,CAAC,KAAK,CAAC;;EAEpC;EACA;EACA;EACA,IAAID,MAAM,CAACE,MAAM,GAAG,CAAC,EAAE;IACrB,OAAO,KAAK;EACd;EAEA,SAAAC,SAAA,GAAAC,+BAAA,CAAoBJ,MAAM,GAAAK,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;IAAA,IAAjBC,KAAK,GAAAF,KAAA,CAAAG,KAAA;IACd;IACA;IACA,IAAIC,oBAAoB,CAACC,OAAO,CAACH,KAAK,CAAC,GAAG,CAAC,EAAE;MAC3C,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb;;AAEA;AACA;AACA,IAAME,oBAAoB,GAAG;AAC3B;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA,IAAI;AACJ;AACA,GAAG;AACH;AACA,IAAI;AACJ;AACA,KAAK;AACL;AACA,MAAM;AACN;AACA,IAAI;AACJ;AACA,MAAM;AAEN;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CACJ"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isDateFormat.test.js","names":["describe","it","expect","isDateFormat","to","equal"],"sources":["../../source/xlsx/isDateFormat.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport isDateFormat from './isDateFormat.js'\r\n\r\ndescribe('xlsx/isDateFormat', () => {\r\n\tit('should detect date format', () => {\r\n\t\texpect(isDateFormat('dd/mm/yyyy')).to.equal(true)\r\n\t\texpect(isDateFormat('dd/mm/yy;@')).to.equal(true)\r\n\t\texpect(isDateFormat('d/m/yyyy;@')).to.equal(true)\r\n\t\texpect(isDateFormat('d/m/yy;@')).to.equal(true)\r\n\t\texpect(isDateFormat('[$-419]d-mmm-yyyy;@')).to.equal(true)\r\n\t\texpect(isDateFormat('[$-419]mmmm yyyy;@')).to.equal(true)\r\n\t\texpect(isDateFormat('[$-419]d mmm;@')).to.equal(true)\r\n\t\texpect(isDateFormat('[$-419]d mmm yy;@')).to.equal(true)\r\n\t\texpect(isDateFormat('[$-419]d mmm yyyy;@')).to.equal(true)\r\n\t\texpect(isDateFormat('[$-FC19]dd mmmm yyyy;@')).to.equal(true)\r\n\t\texpect(isDateFormat('[$-FC19]dd mmmm yyyy г.;@')).to.equal(false)\r\n\t\texpect(isDateFormat('[$-419]dddd d mmmm yyyy г.;@')).to.equal(false)\r\n\t})\r\n\r\n\tit('should detect non-date format', () => {\r\n\t\texpect(isDateFormat('$#,##0.00')).to.equal(false)\r\n\t\texpect(isDateFormat('0.0%')).to.equal(false)\r\n\t})\r\n})"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,OAAO;AACpC,SAASC,MAAM,QAAQ,MAAM;AAE7B,OAAOC,YAAY,MAAM,mBAAmB;AAE5CH,QAAQ,CAAC,mBAAmB,EAAE,YAAM;EACnCC,EAAE,CAAC,2BAA2B,EAAE,YAAM;IACrCC,MAAM,CAACC,YAAY,CAAC,YAAY,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;IACjDH,MAAM,CAACC,YAAY,CAAC,YAAY,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;IACjDH,MAAM,CAACC,YAAY,CAAC,YAAY,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;IACjDH,MAAM,CAACC,YAAY,CAAC,UAAU,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;IAC/CH,MAAM,CAACC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;IAC1DH,MAAM,CAACC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;IACzDH,MAAM,CAACC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;IACrDH,MAAM,CAACC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;IACxDH,MAAM,CAACC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;IAC1DH,MAAM,CAACC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;IAC7DH,MAAM,CAACC,YAAY,CAAC,2BAA2B,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,KAAK,CAAC;IACjEH,MAAM,CAACC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,KAAK,CAAC;EACrE,CAAC,CAAC;EAEFJ,EAAE,CAAC,+BAA+B,EAAE,YAAM;IACzCC,MAAM,CAACC,YAAY,CAAC,WAAW,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,KAAK,CAAC;IACjDH,MAAM,CAACC,YAAY,CAAC,MAAM,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,KAAK,CAAC;EAC7C,CAAC,CAAC;AACH,CAAC,CAAC"}