read-excel-file 8.0.2 → 8.0.3

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.
@@ -1 +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
+ {"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\t', String'\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(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 = 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,UAAU,CACV,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,CAACoB,EAAE,CAACC,SAAS;IACzC/B,MAAM,CAACa,OAAO,CAAC,CAAC,CAAC,CAACg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MACxCI,MAAM,EAAE,UAAU;MAClBiB,KAAK,EAAE,UAAU;MACjB;MACAhB,IAAI,EAAEK,MAAM;MACZE,KAAK,EAAE;IACR,CAAC,CAAC,CAAC;IAEHxB,MAAM,CAACa,OAAO,CAAC,CAAC,CAAC,CAACc,MAAM,CAAC,CAACjB,EAAE,CAACoB,EAAE,CAACC,SAAS;IACzC/B,MAAM,CAACa,OAAO,CAAC,CAAC,CAAC,CAACgB,MAAM,CAAC,CAACnB,EAAE,CAACkB,KAAK;IAElC5B,MAAM,CAACa,OAAO,CAAC,CAAC,CAAC,CAACgB,MAAM,CAAC,CAACnB,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC,CAAC;MACxCI,MAAM,EAAE,UAAU;MAClBiB,KAAK,EAAE,UAAU;MACjB;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"}
package/node/index.d.ts CHANGED
@@ -18,6 +18,10 @@ import {
18
18
  Schema
19
19
  } from '../types/parseData/parseDataSchema.d.js';
20
20
 
21
+ import {
22
+ ParseDataError
23
+ } from '../types/parseData/parseDataError.d.js';
24
+
21
25
  export {
22
26
  CellValue,
23
27
  Row,
@@ -25,7 +29,12 @@ export {
25
29
  } from '../types/types.d.js';
26
30
 
27
31
  export {
28
- ParseDataValueCustomType as ParseDataValueType,
32
+ ParseDataCustomType,
33
+ // Base `type`s when parsing data.
34
+ StringType as String,
35
+ DateType as Date,
36
+ NumberType as Number,
37
+ BooleanType as Boolean,
29
38
  // Additional built-in `type`s when parsing data.
30
39
  Integer,
31
40
  Email,
@@ -33,6 +42,8 @@ export {
33
42
  } from '../types/parseData/parseDataValueType.d.js';
34
43
 
35
44
  export {
45
+ ParseDataCustomTypeErrorMessage,
46
+ ParseDataCustomTypeErrorReason,
36
47
  ParseDataError,
37
48
  ParseDataValueRequiredError
38
49
  } from '../types/parseData/parseDataError.d.js';
@@ -63,9 +74,10 @@ export function readSheet<ParsedNumber = number>(
63
74
 
64
75
  export function parseData<
65
76
  Object extends object,
66
- ColumnTitle extends string
77
+ ColumnTitle extends string,
78
+ Error extends ParseDataError
67
79
  >(
68
80
  data: SheetData,
69
81
  schema: Schema<Object, ColumnTitle>,
70
82
  options?: ParseDataOptions
71
- ): ParseDataResult<Object>;
83
+ ): ParseDataResult<Object, Error>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "read-excel-file",
3
- "version": "8.0.2",
3
+ "version": "8.0.3",
4
4
  "description": "Read `.xlsx` files in a web browser or in Node.js",
5
5
  "type": "module",
6
6
  "exports": {
@@ -1,20 +1,19 @@
1
- import { ParseDataPossibleError } from './parseDataError.d.js'
2
- import { ParseDataValueCustomType } from './parseDataValueType.d.js'
1
+ import { ParseDataError } from './parseDataError.d.js'
3
2
 
4
3
  export type ParseDataResult<
5
4
  Object,
6
- ParseDataValueCustomType_ extends ParseDataValueCustomType<unknown> = never
5
+ Error extends ParseDataError = ParseDataError
7
6
  > = ParseDataResultItem<
8
7
  Object,
9
- ParseDataValueCustomType_
8
+ Error
10
9
  >[]
11
10
 
12
11
  type ParseDataResultItem<
13
12
  Object,
14
- ParseDataValueCustomType_ extends ParseDataValueCustomType<unknown> = never
13
+ Error extends ParseDataError
15
14
  > =
16
15
  | ParseDataResultItemSuccess<Object>
17
- | ParseDataResultItemError<ParseDataValueCustomType_>
16
+ | ParseDataResultItemError<Error>
18
17
 
19
18
  interface ParseDataResultItemSuccess<Object> {
20
19
  object: Object;
@@ -22,10 +21,10 @@ interface ParseDataResultItemSuccess<Object> {
22
21
  }
23
22
 
24
23
  interface ParseDataResultItemError<
25
- ParseDataValueCustomType_ extends ParseDataValueCustomType<unknown> = never
24
+ Error extends ParseDataError
26
25
  > {
27
26
  object: undefined;
28
- errors: ParseDataPossibleError<ParseDataValueCustomType_>[];
27
+ errors: Error[];
29
28
  }
30
29
 
31
30
  export interface ParseDataOptions {