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.
- package/CHANGELOG.md +2 -1
- package/README.md +190 -67
- package/browser/index.d.ts +15 -3
- package/commonjs/parseData/parseData.js +6 -0
- package/commonjs/parseData/parseData.js.map +1 -1
- package/commonjs/parseData/parseData.test.js.map +1 -1
- package/modules/parseData/parseData.js +6 -0
- package/modules/parseData/parseData.js.map +1 -1
- package/modules/parseData/parseData.test.js.map +1 -1
- package/node/index.d.ts +15 -3
- package/package.json +1 -1
- package/types/parseData/parseData.d.ts +7 -8
- package/types/parseData/parseDataError.d.ts +115 -73
- package/types/parseData/parseDataSchema.d.ts +2 -2
- package/types/parseData/parseDataValueType.d.ts +17 -12
- package/universal/index.d.ts +15 -3
- package/web-worker/index.d.ts +15 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseData.test.js","names":["_mocha","require","_chai","_parseData","_interopRequireWildcard","_Integer","_interopRequireDefault","_URL","_Email","obj","__esModule","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","date","Date","UTC","describe","it","expect","getNextSubstring","to","deep","equal","parseSeparatedSubstrings","results","parseData","parse","getTimezoneOffset","column","type","number","Number","Boolean","string","String","phone","value","phoneType","length","object","exist","errors","be","undefined","required","error","names","Integer","reason","URL","Email","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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S;IACzC,IAAAzB,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACiB,MAAM,CAAC,CAACrB,EAAE,CAACoB,KAAK;IAElC,IAAAtB,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACiB,MAAM,CAAC,CAACrB,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC,CAAC;MACxCM,MAAM,EAAE,UAAU;MAClBiB,KAAK,EAAE,UAAU;MACjB;MACAhB,IAAI,EAAEK,MAAM;MACZE,KAAK,EAAE;IACR,CAAC,CAAC,CAAC;IAEH,IAAAlB,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACe,MAAM,CAAC,CAACnB,EAAE,CAACsB,EAAE,CAACC,SAAS;IACzC,IAAAzB,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACiB,MAAM,CAAC,CAACrB,EAAE,CAACoB,KAAK;IAElC,IAAAtB,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACiB,MAAM,CAAC,CAACrB,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC,CAAC;MACxCM,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"}
|
|
1
|
+
{"version":3,"file":"parseData.test.js","names":["_mocha","require","_chai","_parseData","_interopRequireWildcard","_Integer","_interopRequireDefault","_URL","_Email","obj","__esModule","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","date","Date","UTC","describe","it","expect","getNextSubstring","to","deep","equal","parseSeparatedSubstrings","results","parseData","parse","getTimezoneOffset","column","type","number","Number","Boolean","string","String","phone","value","phoneType","length","object","exist","errors","be","undefined","required","error","names","reason","Integer","URL","Email","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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U,QAAQ,EAAE;MACX,CAAC;MACDmB,OAAO,EAAE;QACRnC,MAAM,EAAE,UAAU;QAClBC,IAAI,EAAEK,MAAM;QACZU,QAAQ,EAAE;MACX,CAAC;MACDoB,OAAO,EAAE;QACRpC,MAAM,EAAE,UAAU;QAClBC,IAAI,EAAEK,MAAM;QACZU,QAAQ,EAAE;MACX;IACD,CAAC,EAAE;MACFqB,gCAAgC,EAAE,IAAI;MACtCC,4BAA4B,EAAE;IAC/B,CAAC,CAAC;IAEF,IAAAhD,YAAM,EAACM,OAAO,CAACc,MAAM,CAAC,CAAClB,EAAE,CAACE,KAAK,CAAC,CAAC,CAAC;IAElC,IAAAJ,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACe,MAAM,CAAC,CAACnB,EAAE,CAACsB,EAAE,CAACC,SAAS;IACzC,IAAAzB,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACiB,MAAM,CAAC,CAACrB,EAAE,CAACoB,KAAK;IAElC,IAAAtB,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACiB,MAAM,CAAC,CAACrB,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC,CAAC;MACxCM,MAAM,EAAE,UAAU;MAClBiB,KAAK,EAAE,UAAU;MACjB;MACAhB,IAAI,EAAEK,MAAM;MACZE,KAAK,EAAE;IACR,CAAC,CAAC,CAAC;IAEH,IAAAlB,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACe,MAAM,CAAC,CAACnB,EAAE,CAACsB,EAAE,CAACC,SAAS;IACzC,IAAAzB,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACiB,MAAM,CAAC,CAACrB,EAAE,CAACoB,KAAK;IAElC,IAAAtB,YAAM,EAACM,OAAO,CAAC,CAAC,CAAC,CAACiB,MAAM,CAAC,CAACrB,EAAE,CAACC,IAAI,CAACC,KAAK,CAAC,CAAC;MACxCM,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"}
|
|
@@ -244,6 +244,12 @@ function parseDataCellValue_(cellValue, schemaEntry, propertyPath, options) {
|
|
|
244
244
|
if (errors.length > 0) {
|
|
245
245
|
return;
|
|
246
246
|
}
|
|
247
|
+
// If an empty substring was extracted, it means that there was an out-of-place separator.
|
|
248
|
+
if (!substring) {
|
|
249
|
+
errors.push('invalid');
|
|
250
|
+
reasons.push('syntax');
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
247
253
|
var _parseValue = parseValue(substring, schemaEntry, options),
|
|
248
254
|
value = _parseValue.value,
|
|
249
255
|
error = _parseValue.error,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseData.js","names":["NumberType","StringType","BooleanType","DateType","parseData","data","schema","optionsCustom","validateSchema","options","applyDefaultOptions","_data","_toArray","columns","dataRows","slice","map","dataRow","parseDataRow","undefined","row","path","object","errors","isEmptyObject","pendingRequiredValidations","_i","_Object$keys","Object","keys","length","key","_parseProperty","parseProperty","propertyErrors","pendingRequiredValidation","value","concat","push","isEmptyValue","_i2","_pendingRequiredValid","_pendingRequiredValid2","required","schemaEntry","createError","error","_i3","_pendingRequiredValid3","_pendingRequiredValid4","transformEmptyObject","columnIndex","column","indexOf","isMissingColumn","propertyPath","_ref","parseNestedObject","propertyValueWhenColumnIsMissing","parseDataCellValue","_parseDataRow","cellValue","_parseDataCellValue_","parseDataCellValue_","propertyValue","errorMessage","reason","propertyValueWhenCellIsEmpty","Array","isArray","type","reasons","values","parseSeparatedSubstrings","arrayValueSeparator","substring","_parseValue","parseValue","isEmpty","every","transformEmptyArray","result","parseValueOfType","oneOf","validate","message","String","parseValueUsingTypeParser","Number","Date","Boolean","Error","name","parsedValue","getNextSubstring","string","endCharacter","startIndex","i","character","elements","index","_getNextSubstring","_getNextSubstring2","_slicedToArray","trim","_ref2","_i4","_Object$keys2","_typeof","DEFAULT_OPTIONS","_objectSpread"],"sources":["../../source/parseData/parseData.js"],"sourcesContent":["import NumberType from './types/Number.js'\r\nimport StringType from './types/String.js'\r\nimport BooleanType from './types/Boolean.js'\r\nimport DateType from './types/Date.js'\r\n\r\n/**\r\n * Converts spreadsheet-alike data structure into an array of JSON objects.\r\n *\r\n * Parameters:\r\n *\r\n * * `data` — An array of rows, each row being an array of cells. The first row should be the list of column headers and the rest of the rows should be the data.\r\n * * `schema` — A \"to JSON\" convertion schema (see above).\r\n * * `options` — (optional) Schema conversion parameters of `read-excel-file`:\r\n * * `propertyValueWhenColumnIsMissing` — By default, when some of the `schema` columns are missing in the input `data`, those properties are set to `undefined` in the output objects. Pass `propertyValueWhenColumnIsMissing: null` to set such \"missing column\" properties to `null` in the output objects.\r\n * * `propertyValueWhenCellIsEmpty` — By default, when it encounters a `null` value in a cell in input `data`, it sets it to `undefined` in the output object. Pass `propertyValueWhenCellIsEmpty: null` to make it set such values as `null`s in output objects.\r\n * // * `shouldSkipRequiredValidationWhenColumnIsMissing: (column: string, { object }) => boolean` — By default, it does apply `required` validation to `schema` properties for which columns are missing in the input `data`. One could pass a custom `shouldSkipRequiredValidationWhenColumnIsMissing(column, { object })` to disable `required` validation for missing columns in some or all cases.\r\n * * `transformEmptyObject(object, { path? })` — By default, it returns `null` for \"empty\" objects. One could override that value using `transformEmptyObject(object, { path })` parameter. The value applies to both top-level object and any nested sub-objects in case of a nested schema, hence the additional (optional) `path?: string` parameter.\r\n * * `transformEmptyArray(array, { path })` — By default, it returns `null` for an \"empty\" array value. One could override that value using `transformEmptyArray(array, { path })` parameter.\r\n * * `arrayValueSeparator` — By default, it splits array-type cell values by a comma character.\r\n *\r\n * When parsing a property value, in case of an error, the value of that property is gonna be `undefined`.\r\n *\r\n * @param {SheetData} data - An array of rows, each row being an array of cells.\r\n * @param {object} schema\r\n * @param {object} [options]\r\n * @param {any} [options.propertyValueWhenColumnIsMissing] — By default, when some of the `schema` columns are missing in the input `data`, those properties are set to `undefined` in the output objects. Pass `propertyValueWhenColumnIsMissing: null` to set such \"missing column\" properties to `null` in the output objects.\r\n * @param {any} [options.propertyValueWhenCellIsEmpty] — By default, when it encounters a `null` value in a cell in input `data`, it leaves the value as is. Pass a custom `propertyValueWhenCellIsEmpty` to make it set such values to that value.\r\n * // @param {boolean} [options.shouldSkipRequiredValidationWhenColumnIsMissing(column: string, { object })] — By default, it does apply `required` validation to `schema` properties for which columns are missing in the input `data`. One could pass a custom `shouldSkipRequiredValidationWhenColumnIsMissing(column, { object })` to disable `required` validation for missing columns in some or all cases.\r\n * @param {function} [options.transformEmptyObject(object, { path })] — By default, it returns `null` for an \"empty\" resulting object. One could override that value using `transformEmptyObject(object, { path })` parameter. The value applies to both top-level object and any nested sub-objects in case of a nested schema, hence the additional `path?: string` parameter.\r\n * @param {function} [options.transformEmptyArray(array, { path })] — By default, it returns `null` for an \"empty\" array value. One could override that value using `transformEmptyArray(array, { path })` parameter.\r\n * @param {string} [options.arrayValueSeparator] — When specified, string values will be split by this separator to get the array.\r\n * @return {object[]} — An array of objects of shape `{ object, errors }`. Either `object` or `errors` is going to be `undefined`.\r\n */\r\nexport default function parseData(data, schema, optionsCustom) {\r\n validateSchema(schema)\r\n const options = applyDefaultOptions(optionsCustom)\r\n const [columns, ...dataRows] = data\r\n return dataRows.map((dataRow) => {\r\n return parseDataRow(dataRow, schema, undefined, columns, options)\r\n })\r\n}\r\n\r\nfunction parseDataRow(row, schema, path, columns, options) {\r\n const object = {}\r\n let errors = []\r\n\r\n let isEmptyObject = true\r\n\r\n const pendingRequiredValidations = []\r\n\r\n // For each property of the object.\r\n for (const key of Object.keys(schema)) {\r\n const {\r\n errors: propertyErrors,\r\n pendingRequiredValidation,\r\n value\r\n } = parseProperty(key, row, path, schema, columns, options)\r\n\r\n if (propertyErrors) {\r\n errors = errors.concat(propertyErrors)\r\n } else {\r\n object[key] = value\r\n // Will perform `required` validation later, when all properties have been parsed.\r\n if (pendingRequiredValidation) {\r\n pendingRequiredValidations.push(pendingRequiredValidation)\r\n }\r\n // Potentially unmark the object as \"empty\".\r\n if (isEmptyObject && !isEmptyValue(value)) {\r\n isEmptyObject = false\r\n }\r\n }\r\n }\r\n\r\n // Perform basic `required` validations (i.e. when `required` property is a boolean).\r\n for (const { required, schemaEntry, value } of pendingRequiredValidations) {\r\n if (required === true) {\r\n errors.push(createError({\r\n error: 'required',\r\n schemaEntry,\r\n value\r\n }))\r\n }\r\n }\r\n\r\n // If there were any errors, return them.\r\n if (errors.length > 0) {\r\n return { errors }\r\n }\r\n\r\n // Perform \"complex\" `required` validations (i.e. when `required` property is a function).\r\n // These \"complex\" `required` validations should only be performed when all properties\r\n // of an object have been parsed correctly because these validations rely on the values\r\n // of other properties.\r\n for (const { required, schemaEntry, value } of pendingRequiredValidations) {\r\n if (typeof required !== 'boolean' && required(object)) {\r\n errors.push(createError({\r\n error: 'required',\r\n schemaEntry,\r\n value\r\n }))\r\n }\r\n }\r\n\r\n // If there were any \"complex\" `required` errors, return them.\r\n if (errors.length > 0) {\r\n return { errors }\r\n }\r\n\r\n // Return `null` for an \"empty\" mapped object.\r\n if (isEmptyObject) {\r\n return {\r\n object: options.transformEmptyObject(object, { path })\r\n }\r\n }\r\n\r\n return { object }\r\n}\r\n\r\nfunction parseProperty(key, row, path, schema, columns, options) {\r\n const schemaEntry = schema[key]\r\n\r\n const columnIndex = schemaEntry.column ? columns.indexOf(schemaEntry.column) : undefined\r\n const isMissingColumn = columnIndex < 0\r\n\r\n // The path of this property inside the top-level object.\r\n const propertyPath = `${path ? path + '.' : ''}${key}`\r\n\r\n const {\r\n errors,\r\n value\r\n } = schemaEntry.schema\r\n ? parseNestedObject(row, schemaEntry.schema, propertyPath, columns, options)\r\n : (\r\n isMissingColumn\r\n ? { value: options.propertyValueWhenColumnIsMissing }\r\n : parseDataCellValue(row[columnIndex], schemaEntry, propertyPath, options)\r\n )\r\n\r\n if (errors) {\r\n return { errors }\r\n }\r\n\r\n // Should apply `required` validation if the value is \"empty\".\r\n let pendingRequiredValidation\r\n if (schemaEntry.required && isEmptyValue(value)) {\r\n // // Can optionally skip `required` validation for certain missing columns.\r\n // const skipRequiredValidation = isMissingColumn && options.shouldSkipRequiredValidationWhenColumnIsMissing(schemaEntry.column, { object: ... })\r\n // if (!skipRequiredValidation) { ... }\r\n\r\n // Will perform `required` validation in the end,\r\n // when all properties of the object have been parsed.\r\n // This is because `required` could also be a function of `object`.\r\n pendingRequiredValidation = {\r\n required: schemaEntry.required,\r\n schemaEntry,\r\n value\r\n }\r\n }\r\n\r\n return { value, pendingRequiredValidation }\r\n}\r\n\r\nfunction parseNestedObject(row, schema, propertyPath, columns, options) {\r\n const {\r\n object,\r\n errors\r\n } = parseDataRow(row, schema, propertyPath, columns, options)\r\n return {\r\n value: object,\r\n errors\r\n }\r\n}\r\n\r\nfunction parseDataCellValue(cellValue, schemaEntry, propertyPath, options) {\r\n const {\r\n value: propertyValue,\r\n error: errorMessage,\r\n reason\r\n } = parseDataCellValue_(cellValue, schemaEntry, propertyPath, options)\r\n\r\n if (errorMessage) {\r\n const error = createError({\r\n schemaEntry,\r\n value: cellValue,\r\n error: errorMessage,\r\n reason\r\n })\r\n return { errors: [error] }\r\n } else {\r\n return { value: propertyValue }\r\n }\r\n}\r\n\r\n/**\r\n * Converts a cell value value to a javascript typed value.\r\n * @param {any} value\r\n * @param {object} schemaEntry\r\n * @param {string} propertyPath\r\n * @param {object} options\r\n * @return {{ value?: any, error?: string, reason?: string }}\r\n */\r\nfunction parseDataCellValue_(cellValue, schemaEntry, propertyPath, options) {\r\n if (cellValue === undefined) {\r\n // This isn't supposed to be possible when reading spreadsheet data:\r\n // cell values are always read as `null` when those cells are empty.\r\n // It's currently impossible for `read-excel-file` to return `undefined` cell value.\r\n // Here it uses some \"sensible default\" fallback by treating `undefined` as \"column missing\".\r\n return {\r\n value: options.propertyValueWhenColumnIsMissing\r\n }\r\n }\r\n\r\n if (cellValue === null) {\r\n return {\r\n value: options.propertyValueWhenCellIsEmpty\r\n }\r\n }\r\n\r\n if (Array.isArray(schemaEntry.type)) {\r\n const errors = []\r\n const reasons = []\r\n const values = parseSeparatedSubstrings(cellValue, options.arrayValueSeparator).map((substring) => {\r\n // If any substring was already detected to be invalid\r\n // don't attempt to parse any other substrings.\r\n if (errors.length > 0) {\r\n return\r\n }\r\n const { value, error, reason } = parseValue(substring, schemaEntry, options)\r\n if (error) {\r\n errors.push(error)\r\n reasons.push(reason)\r\n return\r\n }\r\n return value\r\n })\r\n if (errors.length > 0) {\r\n return {\r\n error: errors[0],\r\n reason: reasons[0]\r\n }\r\n }\r\n const isEmpty = values.every(isEmptyValue)\r\n if (isEmpty) {\r\n return {\r\n value: options.transformEmptyArray(values, { path: propertyPath })\r\n }\r\n }\r\n return {\r\n value: values\r\n }\r\n }\r\n\r\n return parseValue(cellValue, schemaEntry, options)\r\n}\r\n\r\n/**\r\n * Converts textual value to a javascript typed value.\r\n * @param {any} value\r\n * @param {object} schemaEntry\r\n * @return {{ value: any, error: string }}\r\n */\r\nexport function parseValue(value, schemaEntry, options) {\r\n if (value === null) {\r\n return { value: null }\r\n }\r\n\r\n let result\r\n if (schemaEntry.type) {\r\n result = parseValueOfType(\r\n value,\r\n // Supports parsing array types.\r\n // See `parseSeparatedSubstrings()` function for more details.\r\n // Example `type`: String[]\r\n // Input: 'Barack Obama, \"String, with, colons\", Donald Trump'\r\n // Output: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n Array.isArray(schemaEntry.type) ? schemaEntry.type[0] : schemaEntry.type,\r\n options\r\n )\r\n } else {\r\n // The default `type` is `String`.\r\n result = { value: value }\r\n // throw new Error('Invalid schema entry: no `type` specified:\\n\\n' + JSON.stringify(schemaEntry, null, 2))\r\n }\r\n\r\n // If errored then return the error.\r\n if (result.error) {\r\n return result\r\n }\r\n\r\n // Validate the value.\r\n if (result.value !== null) {\r\n // Perform `oneOf` validation.\r\n if (schemaEntry.oneOf && schemaEntry.oneOf.indexOf(result.value) < 0) {\r\n return { error: 'invalid', reason: 'unknown' }\r\n }\r\n // Perform `validate()` validation.\r\n if (schemaEntry.validate) {\r\n try {\r\n schemaEntry.validate(result.value)\r\n } catch (error) {\r\n return { error: error.message }\r\n }\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Converts cell value to a javascript typed value.\r\n * @param {(string|number|boolean|Date)} value\r\n * @param {function} type\r\n * @return {object} Either `{ value: (string|number|Date|boolean) }` or `{ error: string, reason?: string }`\r\n */\r\nfunction parseValueOfType(value, type) {\r\n switch (type) {\r\n case String:\r\n return parseValueUsingTypeParser(value, StringType)\r\n\r\n case Number:\r\n return parseValueUsingTypeParser(value, NumberType)\r\n\r\n case Date:\r\n return parseValueUsingTypeParser(value, DateType)\r\n\r\n case Boolean:\r\n return parseValueUsingTypeParser(value, BooleanType)\r\n\r\n default:\r\n // Validate `type`\r\n if (typeof type !== 'function') {\r\n throw new Error(`Unsupported schema \\`type\\`: ${type && type.name || type}`)\r\n }\r\n return parseValueUsingTypeParser(value, type)\r\n }\r\n}\r\n\r\n/**\r\n * Converts textual value to a custom value using supplied `type`.\r\n * @param {any} value\r\n * @param {function} type\r\n * @return {{ value: any, error: string }}\r\n */\r\nfunction parseValueUsingTypeParser(value, type) {\r\n try {\r\n const parsedValue = type(value)\r\n // Returning `undefined` from a `type` parser is treated as returning `null`.\r\n if (parsedValue === undefined) {\r\n return { value: null }\r\n }\r\n return { value: parsedValue }\r\n } catch (error) {\r\n const result = { error: error.message }\r\n if (error.reason) {\r\n result.reason = error.reason;\r\n }\r\n return result\r\n }\r\n}\r\n\r\nexport function getNextSubstring(string, endCharacter, startIndex) {\r\n let i = 0\r\n let substring = ''\r\n while (startIndex + i < string.length) {\r\n const character = string[startIndex + i]\r\n if (character === endCharacter) {\r\n return [substring, i]\r\n }\r\n // Previously, it used to treat `\"` character similar to how it's treated in `.csv` files:\r\n // any commas inside quotes are ignored. But then I thought that it could introduce more\r\n // issues than it was originally intending to fix, and it also didn't provide an \"escape\" mechanism.\r\n // Overall, a decision was made to simplify the whole thing and drop the concept of quotes as special characters.\r\n //\r\n // else if (character === '\"') {\r\n // const quotedSubstring = getNextSubstring(string, '\"', startIndex + i + 1)\r\n // substring += quotedSubstring[0]\r\n // i += '\"'.length + quotedSubstring[1] + '\"'.length\r\n // }\r\n else {\r\n substring += character\r\n i++\r\n }\r\n }\r\n return [substring, i]\r\n}\r\n\r\n/**\r\n * Parses a string of comma-separated substrings into an array of substrings.\r\n * (the `export` is just for tests)\r\n * @param {string} string — A string of comma-separated substrings.\r\n * @return {string[]} An array of substrings.\r\n */\r\nexport function parseSeparatedSubstrings(string, arrayValueSeparator) {\r\n const elements = []\r\n let index = 0\r\n while (index < string.length) {\r\n const [substring, length] = getNextSubstring(string, arrayValueSeparator, index)\r\n index += length + arrayValueSeparator.length\r\n elements.push(substring.trim())\r\n }\r\n return elements\r\n}\r\n\r\nfunction createError({\r\n schemaEntry,\r\n value,\r\n error: errorMessage,\r\n reason\r\n}) {\r\n const error = {\r\n error: errorMessage,\r\n column: schemaEntry.column,\r\n value\r\n }\r\n if (reason) {\r\n error.reason = reason\r\n }\r\n // * Regular values specify a `type?` property, which is included in the `error` object.\r\n // * Nested objects specify a `schema` property, which is not included in the `error` object.\r\n if (schemaEntry.type) {\r\n error.type = schemaEntry.type\r\n }\r\n return error\r\n}\r\n\r\nfunction validateSchema(schema) {\r\n for (const key of Object.keys(schema)) {\r\n const schemaEntry = schema[key]\r\n // Validate that the `schema` is not using a deprecated `type: nestedSchema` format.\r\n if (typeof schemaEntry.type === 'object' && !Array.isArray(schemaEntry.type)) {\r\n throw new Error('When defining a nested schema, use a `schema` property instead of a `type` property')\r\n }\r\n // Validate that every property has a source `column` title specified for it.\r\n if (!schemaEntry.schema) {\r\n if (!schemaEntry.column) {\r\n throw new Error(`\"column\" not defined for schema entry \"${key}\".`)\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction isEmptyValue(value) {\r\n return value === undefined || value === null\r\n}\r\n\r\nconst DEFAULT_OPTIONS = {\r\n propertyValueWhenColumnIsMissing: undefined,\r\n propertyValueWhenCellIsEmpty: null,\r\n // shouldSkipRequiredValidationWhenColumnIsMissing: () => false,\r\n // `transformEmptyObject(object, { path })` applies to both the top-level object\r\n // and any of its nested objects.\r\n transformEmptyObject: () => null,\r\n transformEmptyArray: () => null,\r\n arrayValueSeparator: ','\r\n}\r\n\r\nfunction applyDefaultOptions(options) {\r\n if (options) {\r\n return {\r\n ...DEFAULT_OPTIONS,\r\n ...options\r\n }\r\n } else {\r\n return DEFAULT_OPTIONS\r\n }\r\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parseData.js","names":["NumberType","StringType","BooleanType","DateType","parseData","data","schema","optionsCustom","validateSchema","options","applyDefaultOptions","_data","_toArray","columns","dataRows","slice","map","dataRow","parseDataRow","undefined","row","path","object","errors","isEmptyObject","pendingRequiredValidations","_i","_Object$keys","Object","keys","length","key","_parseProperty","parseProperty","propertyErrors","pendingRequiredValidation","value","concat","push","isEmptyValue","_i2","_pendingRequiredValid","_pendingRequiredValid2","required","schemaEntry","createError","error","_i3","_pendingRequiredValid3","_pendingRequiredValid4","transformEmptyObject","columnIndex","column","indexOf","isMissingColumn","propertyPath","_ref","parseNestedObject","propertyValueWhenColumnIsMissing","parseDataCellValue","_parseDataRow","cellValue","_parseDataCellValue_","parseDataCellValue_","propertyValue","errorMessage","reason","propertyValueWhenCellIsEmpty","Array","isArray","type","reasons","values","parseSeparatedSubstrings","arrayValueSeparator","substring","_parseValue","parseValue","isEmpty","every","transformEmptyArray","result","parseValueOfType","oneOf","validate","message","String","parseValueUsingTypeParser","Number","Date","Boolean","Error","name","parsedValue","getNextSubstring","string","endCharacter","startIndex","i","character","elements","index","_getNextSubstring","_getNextSubstring2","_slicedToArray","trim","_ref2","_i4","_Object$keys2","_typeof","DEFAULT_OPTIONS","_objectSpread"],"sources":["../../source/parseData/parseData.js"],"sourcesContent":["import NumberType from './types/Number.js'\r\nimport StringType from './types/String.js'\r\nimport BooleanType from './types/Boolean.js'\r\nimport DateType from './types/Date.js'\r\n\r\n/**\r\n * Converts spreadsheet-alike data structure into an array of JSON objects.\r\n *\r\n * Parameters:\r\n *\r\n * * `data` — An array of rows, each row being an array of cells. The first row should be the list of column headers and the rest of the rows should be the data.\r\n * * `schema` — A \"to JSON\" convertion schema (see above).\r\n * * `options` — (optional) Schema conversion parameters of `read-excel-file`:\r\n * * `propertyValueWhenColumnIsMissing` — By default, when some of the `schema` columns are missing in the input `data`, those properties are set to `undefined` in the output objects. Pass `propertyValueWhenColumnIsMissing: null` to set such \"missing column\" properties to `null` in the output objects.\r\n * * `propertyValueWhenCellIsEmpty` — By default, when it encounters a `null` value in a cell in input `data`, it sets it to `undefined` in the output object. Pass `propertyValueWhenCellIsEmpty: null` to make it set such values as `null`s in output objects.\r\n * // * `shouldSkipRequiredValidationWhenColumnIsMissing: (column: string, { object }) => boolean` — By default, it does apply `required` validation to `schema` properties for which columns are missing in the input `data`. One could pass a custom `shouldSkipRequiredValidationWhenColumnIsMissing(column, { object })` to disable `required` validation for missing columns in some or all cases.\r\n * * `transformEmptyObject(object, { path? })` — By default, it returns `null` for \"empty\" objects. One could override that value using `transformEmptyObject(object, { path })` parameter. The value applies to both top-level object and any nested sub-objects in case of a nested schema, hence the additional (optional) `path?: string` parameter.\r\n * * `transformEmptyArray(array, { path })` — By default, it returns `null` for an \"empty\" array value. One could override that value using `transformEmptyArray(array, { path })` parameter.\r\n * * `arrayValueSeparator` — By default, it splits array-type cell values by a comma character.\r\n *\r\n * When parsing a property value, in case of an error, the value of that property is gonna be `undefined`.\r\n *\r\n * @param {SheetData} data - An array of rows, each row being an array of cells.\r\n * @param {object} schema\r\n * @param {object} [options]\r\n * @param {any} [options.propertyValueWhenColumnIsMissing] — By default, when some of the `schema` columns are missing in the input `data`, those properties are set to `undefined` in the output objects. Pass `propertyValueWhenColumnIsMissing: null` to set such \"missing column\" properties to `null` in the output objects.\r\n * @param {any} [options.propertyValueWhenCellIsEmpty] — By default, when it encounters a `null` value in a cell in input `data`, it leaves the value as is. Pass a custom `propertyValueWhenCellIsEmpty` to make it set such values to that value.\r\n * // @param {boolean} [options.shouldSkipRequiredValidationWhenColumnIsMissing(column: string, { object })] — By default, it does apply `required` validation to `schema` properties for which columns are missing in the input `data`. One could pass a custom `shouldSkipRequiredValidationWhenColumnIsMissing(column, { object })` to disable `required` validation for missing columns in some or all cases.\r\n * @param {function} [options.transformEmptyObject(object, { path })] — By default, it returns `null` for an \"empty\" resulting object. One could override that value using `transformEmptyObject(object, { path })` parameter. The value applies to both top-level object and any nested sub-objects in case of a nested schema, hence the additional `path?: string` parameter.\r\n * @param {function} [options.transformEmptyArray(array, { path })] — By default, it returns `null` for an \"empty\" array value. One could override that value using `transformEmptyArray(array, { path })` parameter.\r\n * @param {string} [options.arrayValueSeparator] — When specified, string values will be split by this separator to get the array.\r\n * @return {object[]} — An array of objects of shape `{ object, errors }`. Either `object` or `errors` is going to be `undefined`.\r\n */\r\nexport default function parseData(data, schema, optionsCustom) {\r\n validateSchema(schema)\r\n const options = applyDefaultOptions(optionsCustom)\r\n const [columns, ...dataRows] = data\r\n return dataRows.map((dataRow) => {\r\n return parseDataRow(dataRow, schema, undefined, columns, options)\r\n })\r\n}\r\n\r\nfunction parseDataRow(row, schema, path, columns, options) {\r\n const object = {}\r\n let errors = []\r\n\r\n let isEmptyObject = true\r\n\r\n const pendingRequiredValidations = []\r\n\r\n // For each property of the object.\r\n for (const key of Object.keys(schema)) {\r\n const {\r\n errors: propertyErrors,\r\n pendingRequiredValidation,\r\n value\r\n } = parseProperty(key, row, path, schema, columns, options)\r\n\r\n if (propertyErrors) {\r\n errors = errors.concat(propertyErrors)\r\n } else {\r\n object[key] = value\r\n // Will perform `required` validation later, when all properties have been parsed.\r\n if (pendingRequiredValidation) {\r\n pendingRequiredValidations.push(pendingRequiredValidation)\r\n }\r\n // Potentially unmark the object as \"empty\".\r\n if (isEmptyObject && !isEmptyValue(value)) {\r\n isEmptyObject = false\r\n }\r\n }\r\n }\r\n\r\n // Perform basic `required` validations (i.e. when `required` property is a boolean).\r\n for (const { required, schemaEntry, value } of pendingRequiredValidations) {\r\n if (required === true) {\r\n errors.push(createError({\r\n error: 'required',\r\n schemaEntry,\r\n value\r\n }))\r\n }\r\n }\r\n\r\n // If there were any errors, return them.\r\n if (errors.length > 0) {\r\n return { errors }\r\n }\r\n\r\n // Perform \"complex\" `required` validations (i.e. when `required` property is a function).\r\n // These \"complex\" `required` validations should only be performed when all properties\r\n // of an object have been parsed correctly because these validations rely on the values\r\n // of other properties.\r\n for (const { required, schemaEntry, value } of pendingRequiredValidations) {\r\n if (typeof required !== 'boolean' && required(object)) {\r\n errors.push(createError({\r\n error: 'required',\r\n schemaEntry,\r\n value\r\n }))\r\n }\r\n }\r\n\r\n // If there were any \"complex\" `required` errors, return them.\r\n if (errors.length > 0) {\r\n return { errors }\r\n }\r\n\r\n // Return `null` for an \"empty\" mapped object.\r\n if (isEmptyObject) {\r\n return {\r\n object: options.transformEmptyObject(object, { path })\r\n }\r\n }\r\n\r\n return { object }\r\n}\r\n\r\nfunction parseProperty(key, row, path, schema, columns, options) {\r\n const schemaEntry = schema[key]\r\n\r\n const columnIndex = schemaEntry.column ? columns.indexOf(schemaEntry.column) : undefined\r\n const isMissingColumn = columnIndex < 0\r\n\r\n // The path of this property inside the top-level object.\r\n const propertyPath = `${path ? path + '.' : ''}${key}`\r\n\r\n const {\r\n errors,\r\n value\r\n } = schemaEntry.schema\r\n ? parseNestedObject(row, schemaEntry.schema, propertyPath, columns, options)\r\n : (\r\n isMissingColumn\r\n ? { value: options.propertyValueWhenColumnIsMissing }\r\n : parseDataCellValue(row[columnIndex], schemaEntry, propertyPath, options)\r\n )\r\n\r\n if (errors) {\r\n return { errors }\r\n }\r\n\r\n // Should apply `required` validation if the value is \"empty\".\r\n let pendingRequiredValidation\r\n if (schemaEntry.required && isEmptyValue(value)) {\r\n // // Can optionally skip `required` validation for certain missing columns.\r\n // const skipRequiredValidation = isMissingColumn && options.shouldSkipRequiredValidationWhenColumnIsMissing(schemaEntry.column, { object: ... })\r\n // if (!skipRequiredValidation) { ... }\r\n\r\n // Will perform `required` validation in the end,\r\n // when all properties of the object have been parsed.\r\n // This is because `required` could also be a function of `object`.\r\n pendingRequiredValidation = {\r\n required: schemaEntry.required,\r\n schemaEntry,\r\n value\r\n }\r\n }\r\n\r\n return { value, pendingRequiredValidation }\r\n}\r\n\r\nfunction parseNestedObject(row, schema, propertyPath, columns, options) {\r\n const {\r\n object,\r\n errors\r\n } = parseDataRow(row, schema, propertyPath, columns, options)\r\n return {\r\n value: object,\r\n errors\r\n }\r\n}\r\n\r\nfunction parseDataCellValue(cellValue, schemaEntry, propertyPath, options) {\r\n const {\r\n value: propertyValue,\r\n error: errorMessage,\r\n reason\r\n } = parseDataCellValue_(cellValue, schemaEntry, propertyPath, options)\r\n\r\n if (errorMessage) {\r\n const error = createError({\r\n schemaEntry,\r\n value: cellValue,\r\n error: errorMessage,\r\n reason\r\n })\r\n return { errors: [error] }\r\n } else {\r\n return { value: propertyValue }\r\n }\r\n}\r\n\r\n/**\r\n * Converts a cell value value to a javascript typed value.\r\n * @param {any} value\r\n * @param {object} schemaEntry\r\n * @param {string} propertyPath\r\n * @param {object} options\r\n * @return {{ value?: any, error?: string, reason?: string }}\r\n */\r\nfunction parseDataCellValue_(cellValue, schemaEntry, propertyPath, options) {\r\n if (cellValue === undefined) {\r\n // This isn't supposed to be possible when reading spreadsheet data:\r\n // cell values are always read as `null` when those cells are empty.\r\n // It's currently impossible for `read-excel-file` to return `undefined` cell value.\r\n // Here it uses some \"sensible default\" fallback by treating `undefined` as \"column missing\".\r\n return {\r\n value: options.propertyValueWhenColumnIsMissing\r\n }\r\n }\r\n\r\n if (cellValue === null) {\r\n return {\r\n value: options.propertyValueWhenCellIsEmpty\r\n }\r\n }\r\n\r\n if (Array.isArray(schemaEntry.type)) {\r\n const errors = []\r\n const reasons = []\r\n const values = parseSeparatedSubstrings(cellValue, options.arrayValueSeparator).map((substring) => {\r\n // If any substring was already detected to be invalid\r\n // don't attempt to parse any other substrings.\r\n if (errors.length > 0) {\r\n return\r\n }\r\n // If an empty substring was extracted, it means that there was an out-of-place separator.\r\n if (!substring) {\r\n errors.push('invalid')\r\n reasons.push('syntax')\r\n return\r\n }\r\n const { value, error, reason } = parseValue(substring, schemaEntry, options)\r\n if (error) {\r\n errors.push(error)\r\n reasons.push(reason)\r\n return\r\n }\r\n return value\r\n })\r\n if (errors.length > 0) {\r\n return {\r\n error: errors[0],\r\n reason: reasons[0]\r\n }\r\n }\r\n const isEmpty = values.every(isEmptyValue)\r\n if (isEmpty) {\r\n return {\r\n value: options.transformEmptyArray(values, { path: propertyPath })\r\n }\r\n }\r\n return {\r\n value: values\r\n }\r\n }\r\n\r\n return parseValue(cellValue, schemaEntry, options)\r\n}\r\n\r\n/**\r\n * Converts textual value to a javascript typed value.\r\n * @param {any} value\r\n * @param {object} schemaEntry\r\n * @return {{ value: any, error: string }}\r\n */\r\nexport function parseValue(value, schemaEntry, options) {\r\n if (value === null) {\r\n return { value: null }\r\n }\r\n\r\n let result\r\n if (schemaEntry.type) {\r\n result = parseValueOfType(\r\n value,\r\n // Supports parsing array types.\r\n // See `parseSeparatedSubstrings()` function for more details.\r\n // Example `type`: String[]\r\n // Input: 'Barack Obama, \"String, with, colons\", Donald Trump'\r\n // Output: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n Array.isArray(schemaEntry.type) ? schemaEntry.type[0] : schemaEntry.type,\r\n options\r\n )\r\n } else {\r\n // The default `type` is `String`.\r\n result = { value: value }\r\n // throw new Error('Invalid schema entry: no `type` specified:\\n\\n' + JSON.stringify(schemaEntry, null, 2))\r\n }\r\n\r\n // If errored then return the error.\r\n if (result.error) {\r\n return result\r\n }\r\n\r\n // Validate the value.\r\n if (result.value !== null) {\r\n // Perform `oneOf` validation.\r\n if (schemaEntry.oneOf && schemaEntry.oneOf.indexOf(result.value) < 0) {\r\n return { error: 'invalid', reason: 'unknown' }\r\n }\r\n // Perform `validate()` validation.\r\n if (schemaEntry.validate) {\r\n try {\r\n schemaEntry.validate(result.value)\r\n } catch (error) {\r\n return { error: error.message }\r\n }\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Converts cell value to a javascript typed value.\r\n * @param {(string|number|boolean|Date)} value\r\n * @param {function} type\r\n * @return {object} Either `{ value: (string|number|Date|boolean) }` or `{ error: string, reason?: string }`\r\n */\r\nfunction parseValueOfType(value, type) {\r\n switch (type) {\r\n case String:\r\n return parseValueUsingTypeParser(value, StringType)\r\n\r\n case Number:\r\n return parseValueUsingTypeParser(value, NumberType)\r\n\r\n case Date:\r\n return parseValueUsingTypeParser(value, DateType)\r\n\r\n case Boolean:\r\n return parseValueUsingTypeParser(value, BooleanType)\r\n\r\n default:\r\n // Validate `type`\r\n if (typeof type !== 'function') {\r\n throw new Error(`Unsupported schema \\`type\\`: ${type && type.name || type}`)\r\n }\r\n return parseValueUsingTypeParser(value, type)\r\n }\r\n}\r\n\r\n/**\r\n * Converts textual value to a custom value using supplied `type`.\r\n * @param {any} value\r\n * @param {function} type\r\n * @return {{ value: any, error: string }}\r\n */\r\nfunction parseValueUsingTypeParser(value, type) {\r\n try {\r\n const parsedValue = type(value)\r\n // Returning `undefined` from a `type` parser is treated as returning `null`.\r\n if (parsedValue === undefined) {\r\n return { value: null }\r\n }\r\n return { value: parsedValue }\r\n } catch (error) {\r\n const result = { error: error.message }\r\n if (error.reason) {\r\n result.reason = error.reason;\r\n }\r\n return result\r\n }\r\n}\r\n\r\nexport function getNextSubstring(string, endCharacter, startIndex) {\r\n let i = 0\r\n let substring = ''\r\n while (startIndex + i < string.length) {\r\n const character = string[startIndex + i]\r\n if (character === endCharacter) {\r\n return [substring, i]\r\n }\r\n // Previously, it used to treat `\"` character similar to how it's treated in `.csv` files:\r\n // any commas inside quotes are ignored. But then I thought that it could introduce more\r\n // issues than it was originally intending to fix, and it also didn't provide an \"escape\" mechanism.\r\n // Overall, a decision was made to simplify the whole thing and drop the concept of quotes as special characters.\r\n //\r\n // else if (character === '\"') {\r\n // const quotedSubstring = getNextSubstring(string, '\"', startIndex + i + 1)\r\n // substring += quotedSubstring[0]\r\n // i += '\"'.length + quotedSubstring[1] + '\"'.length\r\n // }\r\n else {\r\n substring += character\r\n i++\r\n }\r\n }\r\n return [substring, i]\r\n}\r\n\r\n/**\r\n * Parses a string of comma-separated substrings into an array of substrings.\r\n * (the `export` is just for tests)\r\n * @param {string} string — A string of comma-separated substrings.\r\n * @return {string[]} An array of substrings.\r\n */\r\nexport function parseSeparatedSubstrings(string, arrayValueSeparator) {\r\n const elements = []\r\n let index = 0\r\n while (index < string.length) {\r\n const [substring, length] = getNextSubstring(string, arrayValueSeparator, index)\r\n index += length + arrayValueSeparator.length\r\n elements.push(substring.trim())\r\n }\r\n return elements\r\n}\r\n\r\nfunction createError({\r\n schemaEntry,\r\n value,\r\n error: errorMessage,\r\n reason\r\n}) {\r\n const error = {\r\n error: errorMessage,\r\n column: schemaEntry.column,\r\n value\r\n }\r\n if (reason) {\r\n error.reason = reason\r\n }\r\n // * Regular values specify a `type?` property, which is included in the `error` object.\r\n // * Nested objects specify a `schema` property, which is not included in the `error` object.\r\n if (schemaEntry.type) {\r\n error.type = schemaEntry.type\r\n }\r\n return error\r\n}\r\n\r\nfunction validateSchema(schema) {\r\n for (const key of Object.keys(schema)) {\r\n const schemaEntry = schema[key]\r\n // Validate that the `schema` is not using a deprecated `type: nestedSchema` format.\r\n if (typeof schemaEntry.type === 'object' && !Array.isArray(schemaEntry.type)) {\r\n throw new Error('When defining a nested schema, use a `schema` property instead of a `type` property')\r\n }\r\n // Validate that every property has a source `column` title specified for it.\r\n if (!schemaEntry.schema) {\r\n if (!schemaEntry.column) {\r\n throw new Error(`\"column\" not defined for schema entry \"${key}\".`)\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction isEmptyValue(value) {\r\n return value === undefined || value === null\r\n}\r\n\r\nconst DEFAULT_OPTIONS = {\r\n propertyValueWhenColumnIsMissing: undefined,\r\n propertyValueWhenCellIsEmpty: null,\r\n // shouldSkipRequiredValidationWhenColumnIsMissing: () => false,\r\n // `transformEmptyObject(object, { path })` applies to both the top-level object\r\n // and any of its nested objects.\r\n transformEmptyObject: () => null,\r\n transformEmptyArray: () => null,\r\n arrayValueSeparator: ','\r\n}\r\n\r\nfunction applyDefaultOptions(options) {\r\n if (options) {\r\n return {\r\n ...DEFAULT_OPTIONS,\r\n ...options\r\n }\r\n } else {\r\n return DEFAULT_OPTIONS\r\n }\r\n}"],"mappings":"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"}
|