read-excel-file 9.0.2 → 9.0.4

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 (90) hide show
  1. package/CHANGELOG.md +64 -41
  2. package/README.md +98 -69
  3. package/browser/index.cjs +5 -5
  4. package/browser/index.d.ts +20 -20
  5. package/browser/index.js +5 -5
  6. package/commonjs/parseSheetData/InvalidError.js.map +1 -0
  7. package/commonjs/{parseData/parseData.js → parseSheetData/parseSheetData.js} +6 -6
  8. package/commonjs/parseSheetData/parseSheetData.js.map +1 -0
  9. package/commonjs/parseSheetData/parseSheetData.test.js.map +1 -0
  10. package/commonjs/parseSheetData/types/Boolean.js.map +1 -0
  11. package/commonjs/parseSheetData/types/Date.js.map +1 -0
  12. package/commonjs/parseSheetData/types/Number.js.map +1 -0
  13. package/commonjs/parseSheetData/types/String.js.map +1 -0
  14. package/commonjs/parseSheetData/types/additional/Email.js.map +1 -0
  15. package/commonjs/parseSheetData/types/additional/Email.test.js.map +1 -0
  16. package/commonjs/parseSheetData/types/additional/Integer.js.map +1 -0
  17. package/commonjs/parseSheetData/types/additional/Integer.test.js.map +1 -0
  18. package/commonjs/parseSheetData/types/additional/URL.js.map +1 -0
  19. package/commonjs/parseSheetData/types/additional/URL.test.js.map +1 -0
  20. package/modules/parseSheetData/InvalidError.js.map +1 -0
  21. package/modules/{parseData/parseData.js → parseSheetData/parseSheetData.js} +4 -4
  22. package/modules/parseSheetData/parseSheetData.js.map +1 -0
  23. package/modules/parseSheetData/parseSheetData.test.js.map +1 -0
  24. package/modules/parseSheetData/types/Boolean.js.map +1 -0
  25. package/modules/parseSheetData/types/Date.js.map +1 -0
  26. package/modules/parseSheetData/types/Number.js.map +1 -0
  27. package/modules/parseSheetData/types/String.js.map +1 -0
  28. package/modules/parseSheetData/types/additional/Email.js.map +1 -0
  29. package/modules/parseSheetData/types/additional/Email.test.js.map +1 -0
  30. package/modules/parseSheetData/types/additional/Integer.js.map +1 -0
  31. package/modules/parseSheetData/types/additional/Integer.test.js.map +1 -0
  32. package/modules/parseSheetData/types/additional/URL.js.map +1 -0
  33. package/modules/parseSheetData/types/additional/URL.test.js.map +1 -0
  34. package/node/index.cjs +5 -5
  35. package/node/index.d.ts +20 -20
  36. package/node/index.js +5 -5
  37. package/package.json +1 -1
  38. package/types/{parseData/parseData.d.ts → parseSheetData/parseSheetData.d.ts} +9 -9
  39. package/types/parseSheetData/parseSheetDataError.d.ts +292 -0
  40. package/types/{parseData/parseDataSchema.d.ts → parseSheetData/parseSheetDataSchema.d.ts} +2 -2
  41. package/types/{parseData/parseDataValueType.d.ts → parseSheetData/parseSheetDataValueType.d.ts} +7 -7
  42. package/universal/index.cjs +5 -5
  43. package/universal/index.d.ts +20 -20
  44. package/universal/index.js +5 -5
  45. package/web-worker/index.cjs +5 -5
  46. package/web-worker/index.d.ts +20 -20
  47. package/web-worker/index.js +5 -5
  48. package/commonjs/parseData/InvalidError.js.map +0 -1
  49. package/commonjs/parseData/parseData.js.map +0 -1
  50. package/commonjs/parseData/parseData.test.js.map +0 -1
  51. package/commonjs/parseData/types/Boolean.js.map +0 -1
  52. package/commonjs/parseData/types/Date.js.map +0 -1
  53. package/commonjs/parseData/types/Number.js.map +0 -1
  54. package/commonjs/parseData/types/String.js.map +0 -1
  55. package/commonjs/parseData/types/additional/Email.js.map +0 -1
  56. package/commonjs/parseData/types/additional/Email.test.js.map +0 -1
  57. package/commonjs/parseData/types/additional/Integer.js.map +0 -1
  58. package/commonjs/parseData/types/additional/Integer.test.js.map +0 -1
  59. package/commonjs/parseData/types/additional/URL.js.map +0 -1
  60. package/commonjs/parseData/types/additional/URL.test.js.map +0 -1
  61. package/modules/parseData/InvalidError.js.map +0 -1
  62. package/modules/parseData/parseData.js.map +0 -1
  63. package/modules/parseData/parseData.test.js.map +0 -1
  64. package/modules/parseData/types/Boolean.js.map +0 -1
  65. package/modules/parseData/types/Date.js.map +0 -1
  66. package/modules/parseData/types/Number.js.map +0 -1
  67. package/modules/parseData/types/String.js.map +0 -1
  68. package/modules/parseData/types/additional/Email.js.map +0 -1
  69. package/modules/parseData/types/additional/Email.test.js.map +0 -1
  70. package/modules/parseData/types/additional/Integer.js.map +0 -1
  71. package/modules/parseData/types/additional/Integer.test.js.map +0 -1
  72. package/modules/parseData/types/additional/URL.js.map +0 -1
  73. package/modules/parseData/types/additional/URL.test.js.map +0 -1
  74. package/types/parseData/parseDataError.d.ts +0 -292
  75. /package/commonjs/{parseData → parseSheetData}/InvalidError.js +0 -0
  76. /package/commonjs/{parseData → parseSheetData}/types/Boolean.js +0 -0
  77. /package/commonjs/{parseData → parseSheetData}/types/Date.js +0 -0
  78. /package/commonjs/{parseData → parseSheetData}/types/Number.js +0 -0
  79. /package/commonjs/{parseData → parseSheetData}/types/String.js +0 -0
  80. /package/commonjs/{parseData → parseSheetData}/types/additional/Email.js +0 -0
  81. /package/commonjs/{parseData → parseSheetData}/types/additional/Integer.js +0 -0
  82. /package/commonjs/{parseData → parseSheetData}/types/additional/URL.js +0 -0
  83. /package/modules/{parseData → parseSheetData}/InvalidError.js +0 -0
  84. /package/modules/{parseData → parseSheetData}/types/Boolean.js +0 -0
  85. /package/modules/{parseData → parseSheetData}/types/Date.js +0 -0
  86. /package/modules/{parseData → parseSheetData}/types/Number.js +0 -0
  87. /package/modules/{parseData → parseSheetData}/types/String.js +0 -0
  88. /package/modules/{parseData → parseSheetData}/types/additional/Email.js +0 -0
  89. /package/modules/{parseData → parseSheetData}/types/additional/Integer.js +0 -0
  90. /package/modules/{parseData → parseSheetData}/types/additional/URL.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseData.test.js","names":["describe","it","expect","parseData","parseDataWithPerRowErrors","parseSeparatedSubstrings","getNextSubstring","Integer","URL","Email","date","Date","UTC","_parseData","number","column","type","Number","required","errors","objects","to","be","undefined","not","deep","equal","error","row","value","results","parse","getTimezoneOffset","Boolean","string","String","phone","phoneType","length","object","exist","name","schema","courseTitle","notExists","parsedObject","data","names","reason","validate","Error","invalid","status","oneOf","a","b","c","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, { parseDataWithPerRowErrors, 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 include data row number in error objects', () => {\r\n\t\tconst { errors, objects } = parseData([\r\n\t\t\t['NUMBER'],\r\n\t\t\t[null]\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(objects).to.be.undefined\r\n\t\texpect(errors).to.not.be.undefined\r\n\r\n\t\texpect(errors).to.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\trow: 1,\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\r\ndescribe('parseDataWithPerRowErrors', () => {\r\n\tit('should parse object from sheet data', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\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 = parseDataWithPerRowErrors([\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 return an error when a propertry is required and the cell value is empty', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\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: 1,\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\tit('should not skip empty rows', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t['NAME'],\r\n\t\t\t// Non-empty row\r\n\t\t\t['Barack Obama'],\r\n\t\t\t// Empty row\r\n\t\t\t[null]\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}\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\tname: 'Barack Obama'\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.equal(null)\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\t})\r\n\r\n\tit('should support `required` function', () => {\r\n\t\tconst schema = {\r\n\t\t\tcourseTitle: {\r\n\t\t\t\tcolumn: 'COURSE TITLE',\r\n\t\t\t\ttype: String\r\n\t\t\t},\r\n\t\t\tnotExists: {\r\n\t\t\t\tcolumn: 'NOT EXISTS',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: (parsedObject) => parsedObject.courseTitle === 'Chemistry'\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst data = [\r\n\t\t\t['COURSE TITLE'],\r\n\t\t\t// `required: true`.\r\n\t\t\t['Chemistry'],\r\n\t\t\t// `required: false`.\r\n\t\t\t['Math']\r\n\t\t]\r\n\r\n\t\tconst results = parseDataWithPerRowErrors(data, schema)\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.not.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: 1,\r\n\t\t\tcolumn: 'NOT EXISTS',\r\n\t\t\tvalue: undefined,\r\n\t\t\t// value: null,\r\n\t\t\ttype: Number\r\n\t\t}])\r\n\r\n\t\texpect(results[1].object).to.not.be.undefined\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\tcourseTitle: 'Math',\r\n\t\t\tnotExists: undefined\r\n\t\t})\r\n\t})\r\n\r\n\tit('should parse arrays', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t['NAMES'],\r\n\t\t\t// 'Barack Obama, \"String, with, colons\", Donald Trump'\r\n\t\t\t['Barack Obama, String, Donald Trump'],\r\n\t\t\t// Invalid syntax\r\n\t\t\t[', String'],\r\n\t\t\t// Empty row\r\n\t\t\t[null]\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(3)\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.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\terror: 'invalid',\r\n\t\t\treason: 'syntax',\r\n\t\t\tcolumn: 'NAMES',\r\n\t\t\tvalue: ', String',\r\n\t\t\ttype: [String]\r\n\t\t}])\r\n\r\n\t\texpect(results[2].object).to.deep.equal(null)\r\n\t\texpect(results[2].errors).to.be.undefined\r\n\t})\r\n\r\n\tit('should parse integers', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\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: 2,\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 = parseDataWithPerRowErrors([\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: 2,\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 = parseDataWithPerRowErrors([\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: 2,\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 = parseDataWithPerRowErrors([\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: 1,\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 = parseDataWithPerRowErrors([\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: 1,\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 = parseDataWithPerRowErrors([\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: 1,\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 = parseDataWithPerRowErrors([\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: 1,\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 = parseDataWithPerRowErrors([\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: 1,\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: 1,\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 = parseDataWithPerRowErrors([\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: 1,\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 = parseDataWithPerRowErrors([\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 = parseDataWithPerRowErrors([\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: 1,\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 support `required: undefined` on nested objects (nested object properties are not required)', function() {\r\n\t\tconst results = parseDataWithPerRowErrors(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', null, 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\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(1)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.not.exist\r\n\r\n\t\texpect(results[0].object).to.deep.equal(\r\n\t\t\t{ a: 'a', b: 'b', c: null }\r\n\t\t)\r\n\t})\r\n\r\n\tit('should support `required: undefined` on nested objects (some of nested object properties are required)', function() {\r\n\t\tconst results = parseDataWithPerRowErrors(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', null, 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\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\trequired: true\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(1)\r\n\r\n\t\texpect(results[0].object).to.not.exist\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: 'required',\r\n\t\t\tcolumn: 'CB',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should support `required: false` on nested objects (nested object is completely absent)', function() {\r\n\t\tconst results = parseDataWithPerRowErrors(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', null, 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\trequired: false,\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\trequired: true\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(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\t{ a: 'a', b: 'b', c: null }\r\n\t\t)\r\n\t})\r\n\r\n\tit('should support `required: false` on nested objects (nested object is not absent)', function() {\r\n\t\tconst results = parseDataWithPerRowErrors(\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],\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\trequired: false,\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\trequired: true\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(1)\r\n\r\n\t\texpect(results[0].object).to.not.exist\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: 'required',\r\n\t\t\tcolumn: 'CB',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should reduce empty nested objects to `null` by default', function() {\r\n\t\tconst results = parseDataWithPerRowErrors(\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\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 = parseDataWithPerRowErrors([\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 = parseDataWithPerRowErrors([\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 = parseDataWithPerRowErrors([\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 = parseDataWithPerRowErrors([\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 = parseDataWithPerRowErrors([\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: 1,\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: 2,\r\n\t\t\ttype: String,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\t})\r\n})\r\n\r\ndescribe('getNextSubstring', () => {\r\n\tit('should parse substrings from a string with a given separator character', () => {\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})"],"mappings":"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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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 +0,0 @@
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 +0,0 @@
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 +0,0 @@
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"}
@@ -1 +0,0 @@
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 +0,0 @@
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"}
@@ -1 +0,0 @@
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 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1,292 +0,0 @@
1
- import { CellValue } from '../types.d.js'
2
-
3
- import {
4
- StringType,
5
- DateType,
6
- NumberType,
7
- BooleanType,
8
- Integer,
9
- Email,
10
- URL,
11
- ParseDataCustomType,
12
- ParseDataValueType
13
- } from './parseDataValueType.d.js'
14
-
15
- export interface ParseDataValueRequiredError<
16
- ColumnTitle extends string = string,
17
- CustomType extends ParseDataCustomType<unknown> = never
18
- > {
19
- row: number;
20
- column: ColumnTitle;
21
- // `type: undefined` is treated as `type: String`.
22
- type?: ParseDataValueType<CustomType>;
23
- error: 'required';
24
- reason: undefined;
25
- // When `error` is `"required"`, `value` could only be `null` or `undefined`.
26
- // * `null` means "cell is empty"
27
- // * `undefined` means "column is missing"
28
- value: null | undefined;
29
- }
30
-
31
- interface ParseDataError_<
32
- ColumnTitle extends string,
33
- // ` | undefined` is added to support `parseData()` errors that originate
34
- // on properties that have no `type` property specified. In such cases,
35
- // `type` defaults to `String`.
36
- //
37
- // One could ask: "Why is then the `type` not simply marked as optional?".
38
- // The answer is that `type` could only be `undefined` in case of `parseData()` errors
39
- // that originate from `type: String` parser while other type parsers can't have `type` be `undefined`.
40
- //
41
- Type extends ParseDataValueType<unknown> | undefined,
42
- ErrorMessage extends string,
43
- ErrorReason extends string | undefined
44
- > {
45
- row: number;
46
- column: ColumnTitle;
47
- type: Type;
48
- error: ErrorMessage;
49
- reason: ErrorReason;
50
- // When `error` is not `"required"`, `value` is known to not be `null` or `undefined`
51
- // because when `value` is `null` or `undefined`, it won't be parsed at all,
52
- // so there can't be any error thrown during parsing phase.
53
- value: CellValue;
54
- }
55
-
56
- export type ParseDataCustomTypeErrorMessage<
57
- CustomType extends ParseDataCustomType<unknown>
58
- > = string
59
-
60
- export type ParseDataCustomTypeErrorReason<
61
- CustomType extends ParseDataCustomType<unknown>,
62
- ErrorMessage extends ParseDataCustomTypeErrorMessage<CustomType>
63
- > = string | undefined
64
-
65
- // This is just a public export. It's not used internally.
66
- interface ParseDataErrorCustomType<
67
- ColumnTitle extends string = string,
68
- CustomType extends ParseDataCustomType<unknown> = never,
69
- ErrorMessage extends ParseDataCustomTypeErrorMessage<CustomType> = string,
70
- ErrorReason extends ParseDataCustomTypeErrorReason<CustomType, ErrorMessage> = string | undefined
71
- > extends ParseDataError_<
72
- ColumnTitle,
73
- CustomType,
74
- ErrorMessage,
75
- ErrorReason
76
- > {}
77
-
78
- interface ParseDataErrorNotABoolean<ColumnTitle extends string = string> extends ParseDataError_<
79
- ColumnTitle,
80
- BooleanType,
81
- 'not_a_boolean',
82
- undefined
83
- > {
84
- value: Exclude<CellValue, boolean>;
85
- }
86
-
87
- interface ParseDataErrorNotADate<ColumnTitle extends string = string> extends ParseDataError_<
88
- ColumnTitle,
89
- DateType,
90
- 'not_a_date',
91
- undefined
92
- > {
93
- value: Exclude<CellValue, typeof Date | number>;
94
- }
95
-
96
- interface ParseDataErrorDateOutOfBounds<ColumnTitle extends string = string> extends ParseDataError_<
97
- ColumnTitle,
98
- DateType,
99
- 'out_of_bounds',
100
- undefined
101
- > {
102
- value: typeof Date;
103
- }
104
-
105
- interface ParseDataErrorNotAString<ColumnTitle extends string = string> extends ParseDataError_<
106
- ColumnTitle,
107
- StringType | undefined,
108
- 'not_a_string',
109
- undefined
110
- > {
111
- value: Exclude<CellValue, string | number>;
112
- }
113
-
114
- interface ParseDataErrorStringInvalidNumber<ColumnTitle extends string = string> extends ParseDataError_<
115
- ColumnTitle,
116
- StringType | undefined,
117
- 'invalid_number',
118
- undefined
119
- > {
120
- value: number;
121
- }
122
-
123
- interface ParseDataErrorStringNumberOutOfBounds<ColumnTitle extends string = string> extends ParseDataError_<
124
- ColumnTitle,
125
- StringType | undefined,
126
- 'out_of_bounds',
127
- undefined
128
- > {
129
- value: number;
130
- }
131
-
132
- interface ParseDataErrorNotANumber<
133
- ColumnTitle extends string = string,
134
- Type extends ParseDataCustomType<unknown> | undefined = NumberType
135
- > extends ParseDataError_<
136
- ColumnTitle,
137
- Type,
138
- 'not_a_number',
139
- undefined
140
- > {
141
- value: Exclude<CellValue, number | string>;
142
- }
143
-
144
- interface ParseDataErrorNotANumberString<
145
- ColumnTitle extends string = string,
146
- Type extends ParseDataCustomType<unknown> | undefined = NumberType
147
- > extends ParseDataError_<
148
- ColumnTitle,
149
- Type,
150
- 'not_a_number',
151
- undefined
152
- > {
153
- value: string;
154
- }
155
-
156
- interface ParseDataErrorNumberInvalid<
157
- ColumnTitle extends string = string,
158
- Type extends ParseDataCustomType<unknown> | undefined = NumberType
159
- > extends ParseDataError_<
160
- ColumnTitle,
161
- Type,
162
- 'invalid_number',
163
- undefined
164
- > {
165
- value: number | string;
166
- }
167
-
168
- interface ParseDataErrorNumberOutOfBounds<
169
- ColumnTitle extends string = string,
170
- Type extends ParseDataCustomType<unknown> | undefined = NumberType
171
- > extends ParseDataError_<
172
- ColumnTitle,
173
- Type,
174
- 'out_of_bounds',
175
- undefined
176
- > {
177
- value: number | string;
178
- }
179
-
180
- type ParseDataBaseValueTypeError<ColumnTitle extends string = string> =
181
- | ParseDataErrorNotABoolean<ColumnTitle>
182
- | ParseDataErrorNotADate<ColumnTitle>
183
- | ParseDataErrorDateOutOfBounds<ColumnTitle>
184
- | ParseDataErrorNotAString<ColumnTitle>
185
- | ParseDataErrorStringInvalidNumber<ColumnTitle>
186
- | ParseDataErrorStringNumberOutOfBounds<ColumnTitle>
187
- | ParseDataErrorNotANumber<ColumnTitle, NumberType>
188
- | ParseDataErrorNotANumberString<ColumnTitle, NumberType>
189
- | ParseDataErrorNumberInvalid<ColumnTitle, NumberType>
190
- | ParseDataErrorNumberOutOfBounds<ColumnTitle, NumberType>;
191
-
192
- interface ParseDataErrorNotAnInteger<ColumnTitle extends string = string> extends ParseDataError_<
193
- ColumnTitle,
194
- typeof Integer,
195
- 'not_an_integer',
196
- undefined
197
- > {
198
- value: number | string;
199
- }
200
-
201
- interface ParseDataErrorIntegerNotANumber<ColumnTitle extends string = string> extends ParseDataErrorNotANumber<ColumnTitle, typeof Integer> {}
202
- interface ParseDataErrorIntegerNotANumberString<ColumnTitle extends string = string> extends ParseDataErrorNotANumberString<ColumnTitle, typeof Integer> {}
203
- interface ParseDataErrorIntegerNumberInvalid<ColumnTitle extends string = string> extends ParseDataErrorNumberInvalid<ColumnTitle, typeof Integer> {}
204
- interface ParseDataErrorIntegerNumberOutOfBounds<ColumnTitle extends string = string> extends ParseDataErrorNumberOutOfBounds<ColumnTitle, typeof Integer> {}
205
-
206
- interface ParseDataErrorNotAUrl<ColumnTitle extends string = string> extends ParseDataError_<
207
- ColumnTitle,
208
- typeof URL,
209
- 'not_a_url',
210
- undefined
211
- > {
212
- value: string;
213
- }
214
-
215
- interface ParseDataErrorUrlNotAString<ColumnTitle extends string = string> extends ParseDataError_<
216
- ColumnTitle,
217
- typeof URL,
218
- 'not_a_string',
219
- undefined
220
- > {
221
- value: Exclude<CellValue, string>;
222
- }
223
-
224
- interface ParseDataErrorNotAnEmail<ColumnTitle extends string = string> extends ParseDataError_<
225
- ColumnTitle,
226
- typeof Email,
227
- 'not_an_email',
228
- undefined
229
- > {
230
- value: string;
231
- }
232
-
233
- interface ParseDataErrorEmailNotAString<ColumnTitle extends string = string> extends ParseDataError_<
234
- ColumnTitle,
235
- typeof Email,
236
- 'not_a_string',
237
- undefined
238
- > {
239
- value: Exclude<CellValue, string>;
240
- }
241
-
242
- type ParseDataAdditionalValueTypeError<ColumnTitle extends string = string> =
243
- | ParseDataErrorNotAnInteger<ColumnTitle>
244
- | ParseDataErrorIntegerNotANumber<ColumnTitle>
245
- | ParseDataErrorIntegerNotANumberString<ColumnTitle>
246
- | ParseDataErrorIntegerNumberInvalid<ColumnTitle>
247
- | ParseDataErrorIntegerNumberOutOfBounds<ColumnTitle>
248
- | ParseDataErrorNotAUrl<ColumnTitle>
249
- | ParseDataErrorUrlNotAString<ColumnTitle>
250
- | ParseDataErrorNotAnEmail<ColumnTitle>
251
- | ParseDataErrorEmailNotAString<ColumnTitle>;
252
-
253
- type ParseDataBuiltInValueTypeError<ColumnTitle extends string = string> =
254
- | ParseDataBaseValueTypeError<ColumnTitle>
255
- | ParseDataAdditionalValueTypeError<ColumnTitle>;
256
-
257
- interface ParseDataArrayValueNotAStringError<
258
- ColumnTitle extends string = string,
259
- ParseDataCustomType_ extends ParseDataCustomType<unknown> = ParseDataCustomType<unknown>
260
- > extends ParseDataError_<
261
- ColumnTitle,
262
- ParseDataValueType<ParseDataCustomType_>,
263
- 'not_a_string',
264
- undefined
265
- > {}
266
-
267
- interface ParseDataArrayValueSyntaxError<
268
- ColumnTitle extends string = string,
269
- ParseDataCustomType_ extends ParseDataCustomType<unknown> = ParseDataCustomType<unknown>
270
- > extends ParseDataError_<
271
- ColumnTitle,
272
- ParseDataValueType<ParseDataCustomType_>,
273
- 'invalid',
274
- 'syntax'
275
- > {}
276
-
277
- export type ParseDataError<
278
- ColumnTitle extends string = string,
279
- CustomType extends ParseDataCustomType<unknown> = never,
280
- ErrorMessage extends ParseDataCustomTypeErrorMessage<CustomType> = string,
281
- ErrorReason extends ParseDataCustomTypeErrorReason<CustomType, ErrorMessage> = string | undefined
282
- > =
283
- | ParseDataBuiltInValueTypeError<ColumnTitle>
284
- | ParseDataValueRequiredError<ColumnTitle, ParseDataValueType<CustomType>>
285
- | ParseDataArrayValueNotAStringError<ColumnTitle, ParseDataValueType<CustomType>>
286
- | ParseDataArrayValueSyntaxError<ColumnTitle, ParseDataValueType<CustomType>>
287
- | ParseDataErrorCustomType<
288
- ColumnTitle,
289
- ParseDataValueType<CustomType>,
290
- ErrorMessage,
291
- ErrorReason
292
- >;