read-excel-file 9.0.2 → 9.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -41
- package/README.md +98 -69
- package/browser/index.cjs +5 -5
- package/browser/index.d.ts +20 -20
- package/browser/index.js +5 -5
- package/commonjs/parseSheetData/InvalidError.js.map +1 -0
- package/commonjs/{parseData/parseData.js → parseSheetData/parseSheetData.js} +6 -6
- package/commonjs/parseSheetData/parseSheetData.js.map +1 -0
- package/commonjs/parseSheetData/parseSheetData.test.js.map +1 -0
- package/commonjs/parseSheetData/types/Boolean.js.map +1 -0
- package/commonjs/parseSheetData/types/Date.js.map +1 -0
- package/commonjs/parseSheetData/types/Number.js.map +1 -0
- package/commonjs/parseSheetData/types/String.js.map +1 -0
- package/commonjs/parseSheetData/types/additional/Email.js.map +1 -0
- package/commonjs/parseSheetData/types/additional/Email.test.js.map +1 -0
- package/commonjs/parseSheetData/types/additional/Integer.js.map +1 -0
- package/commonjs/parseSheetData/types/additional/Integer.test.js.map +1 -0
- package/commonjs/parseSheetData/types/additional/URL.js.map +1 -0
- package/commonjs/parseSheetData/types/additional/URL.test.js.map +1 -0
- package/modules/parseSheetData/InvalidError.js.map +1 -0
- package/modules/{parseData/parseData.js → parseSheetData/parseSheetData.js} +4 -4
- package/modules/parseSheetData/parseSheetData.js.map +1 -0
- package/modules/parseSheetData/parseSheetData.test.js.map +1 -0
- package/modules/parseSheetData/types/Boolean.js.map +1 -0
- package/modules/parseSheetData/types/Date.js.map +1 -0
- package/modules/parseSheetData/types/Number.js.map +1 -0
- package/modules/parseSheetData/types/String.js.map +1 -0
- package/modules/parseSheetData/types/additional/Email.js.map +1 -0
- package/modules/parseSheetData/types/additional/Email.test.js.map +1 -0
- package/modules/parseSheetData/types/additional/Integer.js.map +1 -0
- package/modules/parseSheetData/types/additional/Integer.test.js.map +1 -0
- package/modules/parseSheetData/types/additional/URL.js.map +1 -0
- package/modules/parseSheetData/types/additional/URL.test.js.map +1 -0
- package/node/index.cjs +5 -5
- package/node/index.d.ts +20 -20
- package/node/index.js +5 -5
- package/package.json +1 -1
- package/types/{parseData/parseData.d.ts → parseSheetData/parseSheetData.d.ts} +9 -9
- package/types/parseSheetData/parseSheetDataError.d.ts +292 -0
- package/types/{parseData/parseDataSchema.d.ts → parseSheetData/parseSheetDataSchema.d.ts} +2 -2
- package/types/{parseData/parseDataValueType.d.ts → parseSheetData/parseSheetDataValueType.d.ts} +7 -7
- package/universal/index.cjs +5 -5
- package/universal/index.d.ts +20 -20
- package/universal/index.js +5 -5
- package/web-worker/index.cjs +5 -5
- package/web-worker/index.d.ts +20 -20
- package/web-worker/index.js +5 -5
- package/commonjs/parseData/InvalidError.js.map +0 -1
- package/commonjs/parseData/parseData.js.map +0 -1
- package/commonjs/parseData/parseData.test.js.map +0 -1
- package/commonjs/parseData/types/Boolean.js.map +0 -1
- package/commonjs/parseData/types/Date.js.map +0 -1
- package/commonjs/parseData/types/Number.js.map +0 -1
- package/commonjs/parseData/types/String.js.map +0 -1
- package/commonjs/parseData/types/additional/Email.js.map +0 -1
- package/commonjs/parseData/types/additional/Email.test.js.map +0 -1
- package/commonjs/parseData/types/additional/Integer.js.map +0 -1
- package/commonjs/parseData/types/additional/Integer.test.js.map +0 -1
- package/commonjs/parseData/types/additional/URL.js.map +0 -1
- package/commonjs/parseData/types/additional/URL.test.js.map +0 -1
- package/modules/parseData/InvalidError.js.map +0 -1
- package/modules/parseData/parseData.js.map +0 -1
- package/modules/parseData/parseData.test.js.map +0 -1
- package/modules/parseData/types/Boolean.js.map +0 -1
- package/modules/parseData/types/Date.js.map +0 -1
- package/modules/parseData/types/Number.js.map +0 -1
- package/modules/parseData/types/String.js.map +0 -1
- package/modules/parseData/types/additional/Email.js.map +0 -1
- package/modules/parseData/types/additional/Email.test.js.map +0 -1
- package/modules/parseData/types/additional/Integer.js.map +0 -1
- package/modules/parseData/types/additional/Integer.test.js.map +0 -1
- package/modules/parseData/types/additional/URL.js.map +0 -1
- package/modules/parseData/types/additional/URL.test.js.map +0 -1
- package/types/parseData/parseDataError.d.ts +0 -292
- /package/commonjs/{parseData → parseSheetData}/InvalidError.js +0 -0
- /package/commonjs/{parseData → parseSheetData}/types/Boolean.js +0 -0
- /package/commonjs/{parseData → parseSheetData}/types/Date.js +0 -0
- /package/commonjs/{parseData → parseSheetData}/types/Number.js +0 -0
- /package/commonjs/{parseData → parseSheetData}/types/String.js +0 -0
- /package/commonjs/{parseData → parseSheetData}/types/additional/Email.js +0 -0
- /package/commonjs/{parseData → parseSheetData}/types/additional/Integer.js +0 -0
- /package/commonjs/{parseData → parseSheetData}/types/additional/URL.js +0 -0
- /package/modules/{parseData → parseSheetData}/InvalidError.js +0 -0
- /package/modules/{parseData → parseSheetData}/types/Boolean.js +0 -0
- /package/modules/{parseData → parseSheetData}/types/Date.js +0 -0
- /package/modules/{parseData → parseSheetData}/types/Number.js +0 -0
- /package/modules/{parseData → parseSheetData}/types/String.js +0 -0
- /package/modules/{parseData → parseSheetData}/types/additional/Email.js +0 -0
- /package/modules/{parseData → parseSheetData}/types/additional/Integer.js +0 -0
- /package/modules/{parseData → parseSheetData}/types/additional/URL.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseData.test.js","names":["describe","it","expect","parseData","parseDataWithPerRowErrors","parseSeparatedSubstrings","getNextSubstring","Integer","URL","Email","date","Date","UTC","_parseData","number","column","type","Number","required","errors","objects","to","be","undefined","not","deep","equal","error","row","value","results","parse","getTimezoneOffset","Boolean","string","String","phone","phoneType","length","object","exist","name","schema","courseTitle","notExists","parsedObject","data","names","reason","validate","Error","invalid","status","oneOf","a","b","c","column1","column2","column4","column5","propertyValueWhenColumnIsMissing","propertyValueWhenCellIsEmpty"],"sources":["../../source/parseData/parseData.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport parseData, { parseDataWithPerRowErrors, parseSeparatedSubstrings, getNextSubstring } from './parseData.js'\r\n\r\n// Additional included types.\r\nimport Integer from './types/additional/Integer.js'\r\nimport URL from './types/additional/URL.js'\r\nimport Email from './types/additional/Email.js'\r\n\r\nconst date = new Date(Date.UTC(2018, 3 - 1, 24))\r\n\r\ndescribe('parseData', () => {\r\n\tit('should include data row number in error objects', () => {\r\n\t\tconst { errors, objects } = parseData([\r\n\t\t\t['NUMBER'],\r\n\t\t\t[null]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(objects).to.be.undefined\r\n\t\texpect(errors).to.not.be.undefined\r\n\r\n\t\texpect(errors).to.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\t})\r\n})\r\n\r\ndescribe('parseDataWithPerRowErrors', () => {\r\n\tit('should parse object from sheet data', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING',\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t'123',\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc',\r\n\t\t\t\t'(123) 456-7890',\r\n\t\t\t\t'(123) 456-7890'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tdate: {\r\n\t\t\t\tcolumn: 'DATE',\r\n\t\t\t\ttype: Date\r\n\t\t\t},\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number\r\n\t\t\t},\r\n\t\t\tboolean: {\r\n\t\t\t\tcolumn: 'BOOLEAN',\r\n\t\t\t\ttype: Boolean\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING',\r\n\t\t\t\ttype: String\r\n\t\t\t},\r\n\t\t\tphone: {\r\n\t\t\t\tcolumn: 'PHONE',\r\n\t\t\t\ttype(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tphoneType: {\r\n\t\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\t\ttype(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tdate: date,\r\n\t\t\tnumber: 123,\r\n\t\t\tphone: '+11234567890',\r\n\t\t\tphoneType: '+11234567890',\r\n\t\t\tboolean: true,\r\n\t\t\tstring: 'abc'\r\n\t\t})\r\n\t})\r\n\r\n\tit('should support schema entries with no `type`s', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t123,\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tdate: {\r\n\t\t\t\tcolumn: 'DATE'\r\n\t\t\t},\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER'\r\n\t\t\t},\r\n\t\t\tboolean: {\r\n\t\t\t\tcolumn: 'BOOLEAN'\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING'\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tdate: date,\r\n\t\t\tnumber: 123,\r\n\t\t\tboolean: true,\r\n\t\t\tstring: 'abc'\r\n\t\t})\r\n\t})\r\n\r\n\tit('should return an error when a propertry is required and the cell value is empty', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'STRING'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\tnull,\r\n\t\t\t\t'abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\t// row: 1,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should not skip empty rows', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t['NAME'],\r\n\t\t\t// Non-empty row\r\n\t\t\t['Barack Obama'],\r\n\t\t\t// Empty row\r\n\t\t\t[null]\r\n\t\t], {\r\n\t\t\tname: {\r\n\t\t\t\tcolumn: 'NAME',\r\n\t\t\t\ttype: String\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tname: 'Barack Obama'\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.equal(null)\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\t})\r\n\r\n\tit('should support `required` function', () => {\r\n\t\tconst schema = {\r\n\t\t\tcourseTitle: {\r\n\t\t\t\tcolumn: 'COURSE TITLE',\r\n\t\t\t\ttype: String\r\n\t\t\t},\r\n\t\t\tnotExists: {\r\n\t\t\t\tcolumn: 'NOT EXISTS',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: (parsedObject) => parsedObject.courseTitle === 'Chemistry'\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst data = [\r\n\t\t\t['COURSE TITLE'],\r\n\t\t\t// `required: true`.\r\n\t\t\t['Chemistry'],\r\n\t\t\t// `required: false`.\r\n\t\t\t['Math']\r\n\t\t]\r\n\r\n\t\tconst results = parseDataWithPerRowErrors(data, schema)\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.not.be.undefined\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\t// row: 1,\r\n\t\t\tcolumn: 'NOT EXISTS',\r\n\t\t\tvalue: undefined,\r\n\t\t\t// value: null,\r\n\t\t\ttype: Number\r\n\t\t}])\r\n\r\n\t\texpect(results[1].object).to.not.be.undefined\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal({\r\n\t\t\tcourseTitle: 'Math',\r\n\t\t\tnotExists: undefined\r\n\t\t})\r\n\t})\r\n\r\n\tit('should parse arrays', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t['NAMES'],\r\n\t\t\t// 'Barack Obama, \"String, with, colons\", Donald Trump'\r\n\t\t\t['Barack Obama, String, Donald Trump'],\r\n\t\t\t// Invalid syntax\r\n\t\t\t[', String'],\r\n\t\t\t// Empty row\r\n\t\t\t[null]\r\n\t\t], {\r\n\t\t\tnames: {\r\n\t\t\t\tcolumn: 'NAMES',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(3)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\t// names: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n\t\t\tnames: ['Barack Obama', 'String', 'Donald Trump']\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.be.undefined\r\n\t\texpect(results[1].errors).to.exist\r\n\r\n\t\texpect(results[1].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'syntax',\r\n\t\t\tcolumn: 'NAMES',\r\n\t\t\tvalue: ', String',\r\n\t\t\ttype: [String]\r\n\t\t}])\r\n\r\n\t\texpect(results[2].object).to.deep.equal(null)\r\n\t\texpect(results[2].errors).to.be.undefined\r\n\t})\r\n\r\n\tit('should parse integers', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'INTEGER'\r\n\t\t\t], [\r\n\t\t\t\t'1'\r\n\t\t\t], [\r\n\t\t\t\t'1.2'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'INTEGER',\r\n\t\t\t\ttype: Integer\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tvalue: 1\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.be.undefined\r\n\t\texpect(results[1].errors).to.exist\r\n\t\texpect(results[1].errors.length).to.equal(1)\r\n\r\n\t\texpect(results[1].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_an_integer',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'INTEGER',\r\n\t\t\ttype: Integer,\r\n\t\t\tvalue: '1.2'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse URLs', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'URL'\r\n\t\t\t], [\r\n\t\t\t\t'https://kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'kremlin.ru'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'URL',\r\n\t\t\t\ttype: URL\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tvalue: 'https://kremlin.ru'\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.be.undefined\r\n\t\texpect(results[1].errors).to.exist\r\n\t\texpect(results[1].errors.length).to.equal(1)\r\n\r\n\t\texpect(results[1].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_url',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'URL',\r\n\t\t\ttype: URL,\r\n\t\t\tvalue: 'kremlin.ru'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse Emails', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'EMAIL'\r\n\t\t\t], [\r\n\t\t\t\t'vladimir.putin@kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'EMAIL',\r\n\t\t\t\ttype: Email\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tvalue: 'vladimir.putin@kremlin.ru'\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.be.undefined\r\n\t\texpect(results[1].errors).to.exist\r\n\t\texpect(results[1].errors.length).to.equal(1)\r\n\r\n\t\texpect(results[1].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_an_email',\r\n\t\t\t// row: 2,\r\n\t\t\tcolumn: 'EMAIL',\r\n\t\t\ttype: Email,\r\n\t\t\tvalue: '123'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should call .validate()', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'NAME'\r\n\t\t\t], [\r\n\t\t\t\t'George Bush'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tname: {\r\n\t\t\t\tcolumn: 'NAME',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true,\r\n\t\t\t\tvalidate: (value) => {\r\n\t\t\t\t\tif (value === 'George Bush') {\r\n\t\t\t\t\t\tthrow new Error('custom-error')\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'custom-error',\r\n\t\t\t// row: 1,\r\n\t\t\tcolumn: 'NAME',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: 'George Bush'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate numbers', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number',\r\n\t\t\t// row: 1,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: '123abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate booleans', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'TRUE',\r\n\t\t\t\t'FALSE',\r\n\t\t\t\t'INVALID'\r\n\t\t\t], [\r\n\t\t\t\ttrue,\r\n\t\t\t\tfalse,\r\n\t\t\t\t'TRUE'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\ttrue: {\r\n\t\t\t\tcolumn: 'TRUE',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tfalse: {\r\n\t\t\t\tcolumn: 'FALSE',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tinvalid: {\r\n\t\t\t\tcolumn: 'INVALID',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_boolean',\r\n\t\t\t// row: 1,\r\n\t\t\tcolumn: 'INVALID',\r\n\t\t\ttype: Boolean,\r\n\t\t\tvalue: 'TRUE'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate dates', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'INVALID'\r\n\t\t\t], [\r\n\t\t\t\tdate, // 03/24/2018',,\r\n\t\t\t\t'-'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tdate: {\r\n\t\t\t\tcolumn: 'DATE',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tinvalid: {\r\n\t\t\t\tcolumn: 'INVALID',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_date',\r\n\t\t\t// row: 1,\r\n\t\t\tcolumn: 'INVALID',\r\n\t\t\ttype: Date,\r\n\t\t\tvalue: '-'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should throw parse() errors', () => {\r\n\t\tconst type = () => {\r\n\t\t\tthrow new Error('invalid')\r\n\t\t}\r\n\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\t'123',\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tphone: {\r\n\t\t\t\tcolumn: 'PHONE',\r\n\t\t\t\ttype\r\n\t\t\t},\r\n\t\t\tphoneType: {\r\n\t\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\t\ttype\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\t// row: 1,\r\n\t\t\tcolumn: 'PHONE',\r\n\t\t\tvalue: '123',\r\n\t\t\ttype\r\n\t\t}, {\r\n\t\t\terror: 'invalid',\r\n\t\t\t// row: 1,\r\n\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\tvalue: '123',\r\n\t\t\ttype\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should map row numbers', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\t// , { rowIndexSourceMap: [2, 5] })\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number',\r\n\t\t\t// row: 1,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: '123abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (valid)', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'STARTED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tstatus: {\r\n\t\t\t\tcolumn: 'STATUS',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tstatus: 'STARTED'\r\n\t\t})\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (not valid)', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'SCHEDULED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tstatus: {\r\n\t\t\t\tcolumn: 'STATUS',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'unknown',\r\n\t\t\t// row: 1,\r\n\t\t\tcolumn: 'STATUS',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: 'SCHEDULED'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should support `required: undefined` on nested objects (nested object properties are not required)', function() {\r\n\t\tconst results = parseDataWithPerRowErrors(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', null, null]\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\ta: {\r\n\t\t\t\t\tcolumn: 'A',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tb: {\r\n\t\t\t\t\tcolumn: 'B',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tc: {\r\n \t\t\tschema: {\r\n\t\t\t\t\t\ta: {\r\n\t\t\t\t\t\t\tcolumn: 'CA',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tb: {\r\n\t\t\t\t\t\t\tcolumn: 'CB',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.not.exist\r\n\r\n\t\texpect(results[0].object).to.deep.equal(\r\n\t\t\t{ a: 'a', b: 'b', c: null }\r\n\t\t)\r\n\t})\r\n\r\n\tit('should support `required: undefined` on nested objects (some of nested object properties are required)', function() {\r\n\t\tconst results = parseDataWithPerRowErrors(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', null, null]\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\ta: {\r\n\t\t\t\t\tcolumn: 'A',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tb: {\r\n\t\t\t\t\tcolumn: 'B',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tc: {\r\n \t\t\tschema: {\r\n\t\t\t\t\t\ta: {\r\n\t\t\t\t\t\t\tcolumn: 'CA',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tb: {\r\n\t\t\t\t\t\t\tcolumn: 'CB',\r\n\t\t\t\t\t\t\ttype: String,\r\n\t\t\t\t\t\t\trequired: true\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.not.exist\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\tcolumn: 'CB',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should support `required: false` on nested objects (nested object is completely absent)', function() {\r\n\t\tconst results = parseDataWithPerRowErrors(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', null, null]\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\ta: {\r\n\t\t\t\t\tcolumn: 'A',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tb: {\r\n\t\t\t\t\tcolumn: 'B',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tc: {\r\n\t\t\t\t\trequired: false,\r\n \t\t\tschema: {\r\n\t\t\t\t\t\ta: {\r\n\t\t\t\t\t\t\tcolumn: 'CA',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tb: {\r\n\t\t\t\t\t\t\tcolumn: 'CB',\r\n\t\t\t\t\t\t\ttype: String,\r\n\t\t\t\t\t\t\trequired: true\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal(\r\n\t\t\t{ a: 'a', b: 'b', c: null }\r\n\t\t)\r\n\t})\r\n\r\n\tit('should support `required: false` on nested objects (nested object is not absent)', function() {\r\n\t\tconst results = parseDataWithPerRowErrors(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', 'ca', null]\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\ta: {\r\n\t\t\t\t\tcolumn: 'A',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tb: {\r\n\t\t\t\t\tcolumn: 'B',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tc: {\r\n\t\t\t\t\trequired: false,\r\n \t\t\tschema: {\r\n\t\t\t\t\t\ta: {\r\n\t\t\t\t\t\t\tcolumn: 'CA',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tb: {\r\n\t\t\t\t\t\t\tcolumn: 'CB',\r\n\t\t\t\t\t\t\ttype: String,\r\n\t\t\t\t\t\t\trequired: true\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\texpect(results.length).to.equal(1)\r\n\r\n\t\texpect(results[0].object).to.not.exist\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\tcolumn: 'CB',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should reduce empty nested objects to `null` by default', function() {\r\n\t\tconst results = parseDataWithPerRowErrors(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', 'ca', null],\r\n\t\t\t\t['a', null]\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\ta: {\r\n\t\t\t\t\tcolumn: 'A',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tb: {\r\n\t\t\t\t\tcolumn: 'B',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tc: {\r\n \t\t\tschema: {\r\n\t\t\t\t\t\ta: {\r\n\t\t\t\t\t\t\tcolumn: 'CA',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tb: {\r\n\t\t\t\t\t\t\tcolumn: 'CB',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal(\r\n\t\t\t{ a: 'a', b: 'b', c: { a: 'ca', b: null } }\r\n\t\t)\r\n\r\n\t\texpect(results[1].object).to.exist\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal(\r\n\t\t\t{ a: 'a', b: null, c: null }\r\n\t\t)\r\n\t})\r\n\r\n\tit('should parse missing columns (`undefined` by default) and empty cells (`null` by default) (`required: false`)', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tcolumn1: undefined,\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14',\r\n\t\t\tcolumn5: undefined\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.exist\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal({\r\n\t\t\tcolumn1: undefined,\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: null,\r\n\t\t\tcolumn5: undefined\r\n\t\t})\r\n\t})\r\n\r\n\tit('should parse missing columns (`undefined` by default) and empty cells (`null` by default) (`propertyValueWhenColumnIsMissing: null`) (`required: false`)', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tpropertyValueWhenColumnIsMissing: null\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tcolumn1: null,\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14',\r\n\t\t\tcolumn5: null\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.exist\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal({\r\n\t\t\tcolumn1: null,\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: null,\r\n\t\t\tcolumn5: null\r\n\t\t})\r\n\t})\r\n\r\n\tit('should parse missing columns (`undefined` by default) and empty cells (`null` by default) (`propertyValueWhenCellIsEmpty: undefined`) (`required: false`)', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tpropertyValueWhenCellIsEmpty: undefined\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tcolumn1: undefined,\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14',\r\n\t\t\tcolumn5: undefined\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.exist\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal({\r\n\t\t\tcolumn1: undefined,\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: undefined,\r\n\t\t\tcolumn5: undefined\r\n\t\t})\r\n\t})\r\n\r\n\tit('should parse missing columns (`undefined` by default) and empty cells (`null` by default) (`propertyValueWhenColumnIsMissing: null` and `propertyValueWhenCellIsEmpty: null`) (`required: false`)', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tpropertyValueWhenColumnIsMissing: null,\r\n\t\t\tpropertyValueWhenCellIsEmpty: null\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.exist\r\n\t\texpect(results[0].errors).to.be.undefined\r\n\r\n\t\texpect(results[0].object).to.deep.equal({\r\n\t\t\tcolumn1: null,\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14',\r\n\t\t\tcolumn5: null\r\n\t\t})\r\n\r\n\t\texpect(results[1].object).to.exist\r\n\t\texpect(results[1].errors).to.be.undefined\r\n\r\n\t\texpect(results[1].object).to.deep.equal({\r\n\t\t\tcolumn1: null,\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: null,\r\n\t\t\tcolumn5: null\r\n\t\t})\r\n\t})\r\n\r\n\tit('should parse missing columns (`undefined` by default) and empty cells (`null` by default) (`propertyValueWhenColumnIsMissing: null` and `propertyValueWhenCellIsEmpty: null`) (`required: true`)', () => {\r\n\t\tconst results = parseDataWithPerRowErrors([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tpropertyValueWhenColumnIsMissing: null,\r\n\t\t\tpropertyValueWhenCellIsEmpty: null\r\n\t\t})\r\n\r\n\t\texpect(results.length).to.equal(2)\r\n\r\n\t\texpect(results[0].object).to.be.undefined\r\n\t\texpect(results[0].errors).to.exist\r\n\r\n\t\texpect(results[0].errors).to.deep.equal([{\r\n\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\terror: 'required',\r\n\t\t\t// row: 1,\r\n\t\t\ttype: String,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\r\n\t\texpect(results[1].object).to.be.undefined\r\n\t\texpect(results[1].errors).to.exist\r\n\r\n\t\texpect(results[1].errors).to.deep.equal([{\r\n\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\terror: 'required',\r\n\t\t\t// row: 2,\r\n\t\t\ttype: String,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\t})\r\n})\r\n\r\ndescribe('getNextSubstring', () => {\r\n\tit('should parse substrings from a string with a given separator character', () => {\r\n\t\texpect(getNextSubstring('abcde,fg,h', ',', 0)).to.deep.equal(['abcde', 5])\r\n\r\n\t\t// Custom separator and trimming.\r\n\t\texpect(parseSeparatedSubstrings(' abcde,fg , h ', ',')).to.deep.equal(['abcde', 'fg', 'h'])\r\n\r\n\t\t// Should ignore commas inside quotes.\r\n\t\t// expect(getNextSubstring('abc\"de,f\"g,h', ',', 0)).to.deep.equal(['abcde,fg', 10])\r\n\r\n\t\t// Custom separator and trimming.\r\n\t\t// Should ignore commas inside quotes.\r\n\t\t// expect(parseSeparatedSubstrings(' abc\"de,f\"g , h ', ',')).to.deep.equal(['abcde,fg', 'h'])\r\n\t})\r\n})"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Boolean.js","names":["InvalidError","BooleanType","value"],"sources":["../../../source/parseData/types/Boolean.js"],"sourcesContent":["import InvalidError from '../InvalidError.js'\r\n\r\nexport default function BooleanType(value) {\r\n\tif (typeof value === 'boolean') {\r\n return value\r\n }\r\n throw new InvalidError('not_a_boolean')\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,oBAAoB;AAE7C,eAAe,SAASC,WAAWA,CAACC,KAAK,EAAE;EAC1C,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAE;IAC7B,OAAOA,KAAK;EACd;EACA,MAAM,IAAIF,YAAY,CAAC,eAAe,CAAC;AACzC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Date.js","names":["InvalidError","DateType","value","Date","isNaN","valueOf"],"sources":["../../../source/parseData/types/Date.js"],"sourcesContent":["import InvalidError from '../InvalidError.js'\r\n\r\nexport default function DateType(value) {\r\n\t// XLSX has no specific format for dates.\r\n // Sometimes a date can be heuristically detected.\r\n // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777\r\n if (value instanceof Date) {\r\n if (isNaN(value.valueOf())) {\r\n throw new InvalidError('out_of_bounds')\r\n }\r\n return value\r\n }\r\n throw new InvalidError('not_a_date')\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,oBAAoB;AAE7C,eAAe,SAASC,QAAQA,CAACC,KAAK,EAAE;EACvC;EACC;EACA;EACA,IAAIA,KAAK,YAAYC,IAAI,EAAE;IACzB,IAAIC,KAAK,CAACF,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC,EAAE;MAC1B,MAAM,IAAIL,YAAY,CAAC,eAAe,CAAC;IACzC;IACA,OAAOE,KAAK;EACd;EACA,MAAM,IAAIF,YAAY,CAAC,YAAY,CAAC;AACtC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Number.js","names":["InvalidError","NumberType","value","stringifiedValue","Number","String","isNaN","isFinite"],"sources":["../../../source/parseData/types/Number.js"],"sourcesContent":["import InvalidError from '../InvalidError.js'\r\n\r\nexport default function NumberType(value) {\r\n // An XLSX file editing software might not always correctly\r\n // detect numeric values in string-type cells. Users won't bother\r\n // manually selecting a cell type, so the editing software has to guess\r\n // based on the user's input. One can assume that such auto-detection\r\n // might not always work.\r\n //\r\n // So, if a cell is supposed to be a numeric one, convert a string value to a number.\r\n //\r\n if (typeof value === 'string') {\r\n const stringifiedValue = value\r\n value = Number(value)\r\n if (String(value) !== stringifiedValue) {\r\n throw new InvalidError('not_a_number')\r\n }\r\n }\r\n if (typeof value !== 'number') {\r\n throw new InvalidError('not_a_number')\r\n }\r\n if (isNaN(value)) {\r\n throw new InvalidError('invalid_number')\r\n }\r\n // At this point, `value` can only be a number.\r\n //\r\n // The global `isFinite()` function filters out:\r\n // * NaN\r\n // * -Infinity\r\n // * Infinity\r\n //\r\n // All other values pass (including non-numbers).\r\n //\r\n if (!isFinite(value)) {\r\n throw new InvalidError('out_of_bounds')\r\n }\r\n return value\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,oBAAoB;AAE7C,eAAe,SAASC,UAAUA,CAACC,KAAK,EAAE;EACxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,IAAMC,gBAAgB,GAAGD,KAAK;IAC9BA,KAAK,GAAGE,MAAM,CAACF,KAAK,CAAC;IACrB,IAAIG,MAAM,CAACH,KAAK,CAAC,KAAKC,gBAAgB,EAAE;MACtC,MAAM,IAAIH,YAAY,CAAC,cAAc,CAAC;IACxC;EACF;EACA,IAAI,OAAOE,KAAK,KAAK,QAAQ,EAAE;IAC7B,MAAM,IAAIF,YAAY,CAAC,cAAc,CAAC;EACxC;EACA,IAAIM,KAAK,CAACJ,KAAK,CAAC,EAAE;IAChB,MAAM,IAAIF,YAAY,CAAC,gBAAgB,CAAC;EAC1C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,CAACO,QAAQ,CAACL,KAAK,CAAC,EAAE;IACpB,MAAM,IAAIF,YAAY,CAAC,eAAe,CAAC;EACzC;EACA,OAAOE,KAAK;AACd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"String.js","names":["InvalidError","StringType","value","isNaN","isFinite","String"],"sources":["../../../source/parseData/types/String.js"],"sourcesContent":["import InvalidError from '../InvalidError.js'\r\n\r\nexport default function StringType(value) {\r\n if (typeof value === 'string') {\r\n return value\r\n }\r\n // Excel tends to perform a forced automatic convertion of string-type values\r\n // to number-type ones when the user has input them. Otherwise, users wouldn't\r\n // be able to perform formula calculations on those cell values because users\r\n // won't bother manually choosing a \"numeric\" cell type for each cell, and\r\n // even if they did, choosing a \"numeric\" cell type every time wouldn't be an\r\n // acceptable \"user experience\".\r\n //\r\n // So, if a cell value is supposed to be a string and Excel has automatically\r\n // converted it to a number, perform a backwards conversion.\r\n //\r\n if (typeof value === 'number') {\r\n if (isNaN(value)) {\r\n throw new InvalidError('invalid_number')\r\n }\r\n // The global `isFinite()` function filters out:\r\n // * NaN\r\n // * -Infinity\r\n // * Infinity\r\n //\r\n // All other values pass (including non-numbers).\r\n //\r\n if (!isFinite(value)) {\r\n throw new InvalidError('out_of_bounds')\r\n }\r\n return String(value)\r\n }\r\n throw new InvalidError('not_a_string')\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,oBAAoB;AAE7C,eAAe,SAASC,UAAUA,CAACC,KAAK,EAAE;EACxC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAOA,KAAK;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,IAAIC,KAAK,CAACD,KAAK,CAAC,EAAE;MAChB,MAAM,IAAIF,YAAY,CAAC,gBAAgB,CAAC;IAC1C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,CAACI,QAAQ,CAACF,KAAK,CAAC,EAAE;MACpB,MAAM,IAAIF,YAAY,CAAC,eAAe,CAAC;IACzC;IACA,OAAOK,MAAM,CAACH,KAAK,CAAC;EACtB;EACA,MAAM,IAAIF,YAAY,CAAC,cAAc,CAAC;AACxC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Email.js","names":["InvalidError","Email","value","isEmail","EMAIL_REGEXP","test"],"sources":["../../../../source/parseData/types/additional/Email.js"],"sourcesContent":["import InvalidError from '../../InvalidError.js'\r\n\r\nexport default function Email(value) {\r\n if (typeof value === 'string') {\r\n if (isEmail(value)) {\r\n return value\r\n }\r\n throw new InvalidError('not_an_email')\r\n }\r\n throw new InvalidError('not_a_string')\r\n}\r\n\r\nconst EMAIL_REGEXP = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i\r\n\r\nexport function isEmail(value) {\r\n\treturn EMAIL_REGEXP.test(value)\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,uBAAuB;AAEhD,eAAe,SAASC,KAAKA,CAACC,KAAK,EAAE;EACnC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,IAAIC,OAAO,CAACD,KAAK,CAAC,EAAE;MAClB,OAAOA,KAAK;IACd;IACA,MAAM,IAAIF,YAAY,CAAC,cAAc,CAAC;EACxC;EACA,MAAM,IAAIA,YAAY,CAAC,cAAc,CAAC;AACxC;AAEA,IAAMI,YAAY,GAAG,0CAA0C;AAE/D,OAAO,SAASD,OAAOA,CAACD,KAAK,EAAE;EAC9B,OAAOE,YAAY,CAACC,IAAI,CAACH,KAAK,CAAC;AAChC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Email.test.js","names":["describe","it","expect","isEmail","to","equal"],"sources":["../../../../source/parseData/types/additional/Email.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { isEmail } from './Email.js'\r\n\r\ndescribe('Email', () => {\r\n\tit('should validate an Email', () => {\r\n\t\texpect(isEmail('123')).to.equal(false)\r\n\t\texpect(isEmail('vladimir.putin@kremlin.ru')).to.equal(true)\r\n\t})\r\n})"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,OAAO;AACpC,SAASC,MAAM,QAAQ,MAAM;AAE7B,SAASC,OAAO,QAAQ,YAAY;AAEpCH,QAAQ,CAAC,OAAO,EAAE,YAAM;EACvBC,EAAE,CAAC,0BAA0B,EAAE,YAAM;IACpCC,MAAM,CAACC,OAAO,CAAC,KAAK,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,KAAK,CAAC;IACtCH,MAAM,CAACC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;EAC5D,CAAC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Integer.js","names":["InvalidError","NumberType","Integer","value","isInteger","x"],"sources":["../../../../source/parseData/types/additional/Integer.js"],"sourcesContent":["import InvalidError from '../../InvalidError.js'\r\nimport NumberType from '../Number.js'\r\n\r\nexport default function Integer(value) {\r\n\tvalue = NumberType(value)\r\n if (!isInteger(value)) {\r\n throw new InvalidError('not_an_integer')\r\n }\r\n return value\r\n}\r\n\r\nexport function isInteger(x) {\r\n\t// https://stackoverflow.com/questions/14636536/how-to-check-if-a-variable-is-an-integer-in-javascript\r\n\treturn (x | 0) === x\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,uBAAuB;AAChD,OAAOC,UAAU,MAAM,cAAc;AAErC,eAAe,SAASC,OAAOA,CAACC,KAAK,EAAE;EACtCA,KAAK,GAAGF,UAAU,CAACE,KAAK,CAAC;EACxB,IAAI,CAACC,SAAS,CAACD,KAAK,CAAC,EAAE;IACrB,MAAM,IAAIH,YAAY,CAAC,gBAAgB,CAAC;EAC1C;EACA,OAAOG,KAAK;AACd;AAEA,OAAO,SAASC,SAASA,CAACC,CAAC,EAAE;EAC5B;EACA,OAAO,CAACA,CAAC,GAAG,CAAC,MAAMA,CAAC;AACrB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Integer.test.js","names":["describe","it","expect","isInteger","to","equal"],"sources":["../../../../source/parseData/types/additional/Integer.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { isInteger } from './Integer.js'\r\n\r\ndescribe('Integer', () => {\r\n\tit('should validate an Integer', () => {\r\n\t\texpect(isInteger(1.2)).to.equal(false)\r\n\t\texpect(isInteger(1)).to.equal(true)\r\n\t})\r\n})"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,OAAO;AACpC,SAASC,MAAM,QAAQ,MAAM;AAE7B,SAASC,SAAS,QAAQ,cAAc;AAExCH,QAAQ,CAAC,SAAS,EAAE,YAAM;EACzBC,EAAE,CAAC,4BAA4B,EAAE,YAAM;IACtCC,MAAM,CAACC,SAAS,CAAC,GAAG,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,KAAK,CAAC;IACtCH,MAAM,CAACC,SAAS,CAAC,CAAC,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;EACpC,CAAC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"URL.js","names":["InvalidError","URL","value","isURL","URL_REGEXP","test"],"sources":["../../../../source/parseData/types/additional/URL.js"],"sourcesContent":["import InvalidError from '../../InvalidError.js'\r\n\r\nexport default function URL(value) {\r\n if (typeof value === 'string') {\r\n if (isURL(value)) {\r\n return value\r\n }\r\n throw new InvalidError('not_a_url')\r\n }\r\n throw new InvalidError('not_a_string')\r\n}\r\n\r\n// URL regexp explanation:\r\n//\r\n// /^\r\n//\r\n// \t(?:\r\n// \t // Matches optional \"http(s):\" or \"ftp:\":\r\n// \t\t(?:\r\n// \t\t\t(?:https?|ftp):\r\n// \t\t)?\r\n//\r\n// \t // Matches \"//\" (required):\r\n// \t\t\\/\\/\r\n// \t)\r\n//\r\n// \t// Matches a valid non-local IP address:\r\n// \t(?:\r\n// \t\t(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])\r\n// \t\t(?:\r\n// \t\t\t\\.\r\n// \t\t\t(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])\r\n// \t\t){2}\r\n// \t\t(?:\r\n// \t\t\t\\.\r\n// \t\t\t(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4])\r\n// \t\t)\r\n//\r\n// \t // Or,\r\n// \t\t|\r\n//\r\n// \t // Matches an alpha-numeric domain name.\r\n// \t\t(?:\r\n// \t\t\t(?:\r\n// \t\t\t\t[a-z0-9\\u00a1-\\uffff]\r\n// \t\t\t\t[a-z0-9\\u00a1-\\uffff_-]{0,62}\r\n// \t\t\t)?\r\n// \t\t\t[a-z0-9\\u00a1-\\uffff]\r\n// \t\t\t\\.\r\n// \t\t)*\r\n// \t\t(?:\r\n// \t // Domain zone: \"com\", \"net\", etc (required):\r\n// \t\t\t[a-z\\u00a1-\\uffff]{2,}\r\n// \t\t)\r\n// \t)\r\n//\r\n// \t// Matches a colon and a port number:\r\n// \t(?::\\d{2,5})?\r\n//\r\n// \t// Matches everything after the \"origin\":\r\n// \t// * pathname\r\n// \t// * query\r\n// \t// * hash\r\n// \t(?:[/?#]\\S*)?\r\n//\r\n// $/i\r\n\r\nconst URL_REGEXP = /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)*(?:[a-z\\u00a1-\\uffff]{2,}))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i;\r\n\r\n// https://stackoverflow.com/questions/8667070/javascript-regular-expression-to-validate-url\r\nexport function isURL(value) {\r\n\treturn URL_REGEXP.test(value)\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,uBAAuB;AAEhD,eAAe,SAASC,GAAGA,CAACC,KAAK,EAAE;EACjC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,IAAIC,KAAK,CAACD,KAAK,CAAC,EAAE;MAChB,OAAOA,KAAK;IACd;IACA,MAAM,IAAIF,YAAY,CAAC,WAAW,CAAC;EACrC;EACA,MAAM,IAAIA,YAAY,CAAC,cAAc,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMI,UAAU,GAAG,+RAA+R;;AAElT;AACA,OAAO,SAASD,KAAKA,CAACD,KAAK,EAAE;EAC5B,OAAOE,UAAU,CAACC,IAAI,CAACH,KAAK,CAAC;AAC9B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"URL.test.js","names":["describe","it","expect","isURL","to","equal"],"sources":["../../../../source/parseData/types/additional/URL.test.js"],"sourcesContent":["import { describe, it } from 'mocha'\r\nimport { expect } from 'chai'\r\n\r\nimport { isURL } from './URL.js'\r\n\r\ndescribe('URL', () => {\r\n\tit('should validate a URL', () => {\r\n\t\texpect(isURL('123')).to.equal(false)\r\n\t\texpect(isURL('https://stackoverflow.com/questions/8667070/javascript-regular-expression-to-validate-url')).to.equal(true)\r\n\t})\r\n})"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,QAAQ,OAAO;AACpC,SAASC,MAAM,QAAQ,MAAM;AAE7B,SAASC,KAAK,QAAQ,UAAU;AAEhCH,QAAQ,CAAC,KAAK,EAAE,YAAM;EACrBC,EAAE,CAAC,uBAAuB,EAAE,YAAM;IACjCC,MAAM,CAACC,KAAK,CAAC,KAAK,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,KAAK,CAAC;IACpCH,MAAM,CAACC,KAAK,CAAC,2FAA2F,CAAC,CAAC,CAACC,EAAE,CAACC,KAAK,CAAC,IAAI,CAAC;EAC1H,CAAC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import { CellValue } from '../types.d.js'
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
StringType,
|
|
5
|
-
DateType,
|
|
6
|
-
NumberType,
|
|
7
|
-
BooleanType,
|
|
8
|
-
Integer,
|
|
9
|
-
Email,
|
|
10
|
-
URL,
|
|
11
|
-
ParseDataCustomType,
|
|
12
|
-
ParseDataValueType
|
|
13
|
-
} from './parseDataValueType.d.js'
|
|
14
|
-
|
|
15
|
-
export interface ParseDataValueRequiredError<
|
|
16
|
-
ColumnTitle extends string = string,
|
|
17
|
-
CustomType extends ParseDataCustomType<unknown> = never
|
|
18
|
-
> {
|
|
19
|
-
row: number;
|
|
20
|
-
column: ColumnTitle;
|
|
21
|
-
// `type: undefined` is treated as `type: String`.
|
|
22
|
-
type?: ParseDataValueType<CustomType>;
|
|
23
|
-
error: 'required';
|
|
24
|
-
reason: undefined;
|
|
25
|
-
// When `error` is `"required"`, `value` could only be `null` or `undefined`.
|
|
26
|
-
// * `null` means "cell is empty"
|
|
27
|
-
// * `undefined` means "column is missing"
|
|
28
|
-
value: null | undefined;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
interface ParseDataError_<
|
|
32
|
-
ColumnTitle extends string,
|
|
33
|
-
// ` | undefined` is added to support `parseData()` errors that originate
|
|
34
|
-
// on properties that have no `type` property specified. In such cases,
|
|
35
|
-
// `type` defaults to `String`.
|
|
36
|
-
//
|
|
37
|
-
// One could ask: "Why is then the `type` not simply marked as optional?".
|
|
38
|
-
// The answer is that `type` could only be `undefined` in case of `parseData()` errors
|
|
39
|
-
// that originate from `type: String` parser while other type parsers can't have `type` be `undefined`.
|
|
40
|
-
//
|
|
41
|
-
Type extends ParseDataValueType<unknown> | undefined,
|
|
42
|
-
ErrorMessage extends string,
|
|
43
|
-
ErrorReason extends string | undefined
|
|
44
|
-
> {
|
|
45
|
-
row: number;
|
|
46
|
-
column: ColumnTitle;
|
|
47
|
-
type: Type;
|
|
48
|
-
error: ErrorMessage;
|
|
49
|
-
reason: ErrorReason;
|
|
50
|
-
// When `error` is not `"required"`, `value` is known to not be `null` or `undefined`
|
|
51
|
-
// because when `value` is `null` or `undefined`, it won't be parsed at all,
|
|
52
|
-
// so there can't be any error thrown during parsing phase.
|
|
53
|
-
value: CellValue;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export type ParseDataCustomTypeErrorMessage<
|
|
57
|
-
CustomType extends ParseDataCustomType<unknown>
|
|
58
|
-
> = string
|
|
59
|
-
|
|
60
|
-
export type ParseDataCustomTypeErrorReason<
|
|
61
|
-
CustomType extends ParseDataCustomType<unknown>,
|
|
62
|
-
ErrorMessage extends ParseDataCustomTypeErrorMessage<CustomType>
|
|
63
|
-
> = string | undefined
|
|
64
|
-
|
|
65
|
-
// This is just a public export. It's not used internally.
|
|
66
|
-
interface ParseDataErrorCustomType<
|
|
67
|
-
ColumnTitle extends string = string,
|
|
68
|
-
CustomType extends ParseDataCustomType<unknown> = never,
|
|
69
|
-
ErrorMessage extends ParseDataCustomTypeErrorMessage<CustomType> = string,
|
|
70
|
-
ErrorReason extends ParseDataCustomTypeErrorReason<CustomType, ErrorMessage> = string | undefined
|
|
71
|
-
> extends ParseDataError_<
|
|
72
|
-
ColumnTitle,
|
|
73
|
-
CustomType,
|
|
74
|
-
ErrorMessage,
|
|
75
|
-
ErrorReason
|
|
76
|
-
> {}
|
|
77
|
-
|
|
78
|
-
interface ParseDataErrorNotABoolean<ColumnTitle extends string = string> extends ParseDataError_<
|
|
79
|
-
ColumnTitle,
|
|
80
|
-
BooleanType,
|
|
81
|
-
'not_a_boolean',
|
|
82
|
-
undefined
|
|
83
|
-
> {
|
|
84
|
-
value: Exclude<CellValue, boolean>;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
interface ParseDataErrorNotADate<ColumnTitle extends string = string> extends ParseDataError_<
|
|
88
|
-
ColumnTitle,
|
|
89
|
-
DateType,
|
|
90
|
-
'not_a_date',
|
|
91
|
-
undefined
|
|
92
|
-
> {
|
|
93
|
-
value: Exclude<CellValue, typeof Date | number>;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
interface ParseDataErrorDateOutOfBounds<ColumnTitle extends string = string> extends ParseDataError_<
|
|
97
|
-
ColumnTitle,
|
|
98
|
-
DateType,
|
|
99
|
-
'out_of_bounds',
|
|
100
|
-
undefined
|
|
101
|
-
> {
|
|
102
|
-
value: typeof Date;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
interface ParseDataErrorNotAString<ColumnTitle extends string = string> extends ParseDataError_<
|
|
106
|
-
ColumnTitle,
|
|
107
|
-
StringType | undefined,
|
|
108
|
-
'not_a_string',
|
|
109
|
-
undefined
|
|
110
|
-
> {
|
|
111
|
-
value: Exclude<CellValue, string | number>;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
interface ParseDataErrorStringInvalidNumber<ColumnTitle extends string = string> extends ParseDataError_<
|
|
115
|
-
ColumnTitle,
|
|
116
|
-
StringType | undefined,
|
|
117
|
-
'invalid_number',
|
|
118
|
-
undefined
|
|
119
|
-
> {
|
|
120
|
-
value: number;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
interface ParseDataErrorStringNumberOutOfBounds<ColumnTitle extends string = string> extends ParseDataError_<
|
|
124
|
-
ColumnTitle,
|
|
125
|
-
StringType | undefined,
|
|
126
|
-
'out_of_bounds',
|
|
127
|
-
undefined
|
|
128
|
-
> {
|
|
129
|
-
value: number;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
interface ParseDataErrorNotANumber<
|
|
133
|
-
ColumnTitle extends string = string,
|
|
134
|
-
Type extends ParseDataCustomType<unknown> | undefined = NumberType
|
|
135
|
-
> extends ParseDataError_<
|
|
136
|
-
ColumnTitle,
|
|
137
|
-
Type,
|
|
138
|
-
'not_a_number',
|
|
139
|
-
undefined
|
|
140
|
-
> {
|
|
141
|
-
value: Exclude<CellValue, number | string>;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
interface ParseDataErrorNotANumberString<
|
|
145
|
-
ColumnTitle extends string = string,
|
|
146
|
-
Type extends ParseDataCustomType<unknown> | undefined = NumberType
|
|
147
|
-
> extends ParseDataError_<
|
|
148
|
-
ColumnTitle,
|
|
149
|
-
Type,
|
|
150
|
-
'not_a_number',
|
|
151
|
-
undefined
|
|
152
|
-
> {
|
|
153
|
-
value: string;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
interface ParseDataErrorNumberInvalid<
|
|
157
|
-
ColumnTitle extends string = string,
|
|
158
|
-
Type extends ParseDataCustomType<unknown> | undefined = NumberType
|
|
159
|
-
> extends ParseDataError_<
|
|
160
|
-
ColumnTitle,
|
|
161
|
-
Type,
|
|
162
|
-
'invalid_number',
|
|
163
|
-
undefined
|
|
164
|
-
> {
|
|
165
|
-
value: number | string;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
interface ParseDataErrorNumberOutOfBounds<
|
|
169
|
-
ColumnTitle extends string = string,
|
|
170
|
-
Type extends ParseDataCustomType<unknown> | undefined = NumberType
|
|
171
|
-
> extends ParseDataError_<
|
|
172
|
-
ColumnTitle,
|
|
173
|
-
Type,
|
|
174
|
-
'out_of_bounds',
|
|
175
|
-
undefined
|
|
176
|
-
> {
|
|
177
|
-
value: number | string;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
type ParseDataBaseValueTypeError<ColumnTitle extends string = string> =
|
|
181
|
-
| ParseDataErrorNotABoolean<ColumnTitle>
|
|
182
|
-
| ParseDataErrorNotADate<ColumnTitle>
|
|
183
|
-
| ParseDataErrorDateOutOfBounds<ColumnTitle>
|
|
184
|
-
| ParseDataErrorNotAString<ColumnTitle>
|
|
185
|
-
| ParseDataErrorStringInvalidNumber<ColumnTitle>
|
|
186
|
-
| ParseDataErrorStringNumberOutOfBounds<ColumnTitle>
|
|
187
|
-
| ParseDataErrorNotANumber<ColumnTitle, NumberType>
|
|
188
|
-
| ParseDataErrorNotANumberString<ColumnTitle, NumberType>
|
|
189
|
-
| ParseDataErrorNumberInvalid<ColumnTitle, NumberType>
|
|
190
|
-
| ParseDataErrorNumberOutOfBounds<ColumnTitle, NumberType>;
|
|
191
|
-
|
|
192
|
-
interface ParseDataErrorNotAnInteger<ColumnTitle extends string = string> extends ParseDataError_<
|
|
193
|
-
ColumnTitle,
|
|
194
|
-
typeof Integer,
|
|
195
|
-
'not_an_integer',
|
|
196
|
-
undefined
|
|
197
|
-
> {
|
|
198
|
-
value: number | string;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
interface ParseDataErrorIntegerNotANumber<ColumnTitle extends string = string> extends ParseDataErrorNotANumber<ColumnTitle, typeof Integer> {}
|
|
202
|
-
interface ParseDataErrorIntegerNotANumberString<ColumnTitle extends string = string> extends ParseDataErrorNotANumberString<ColumnTitle, typeof Integer> {}
|
|
203
|
-
interface ParseDataErrorIntegerNumberInvalid<ColumnTitle extends string = string> extends ParseDataErrorNumberInvalid<ColumnTitle, typeof Integer> {}
|
|
204
|
-
interface ParseDataErrorIntegerNumberOutOfBounds<ColumnTitle extends string = string> extends ParseDataErrorNumberOutOfBounds<ColumnTitle, typeof Integer> {}
|
|
205
|
-
|
|
206
|
-
interface ParseDataErrorNotAUrl<ColumnTitle extends string = string> extends ParseDataError_<
|
|
207
|
-
ColumnTitle,
|
|
208
|
-
typeof URL,
|
|
209
|
-
'not_a_url',
|
|
210
|
-
undefined
|
|
211
|
-
> {
|
|
212
|
-
value: string;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
interface ParseDataErrorUrlNotAString<ColumnTitle extends string = string> extends ParseDataError_<
|
|
216
|
-
ColumnTitle,
|
|
217
|
-
typeof URL,
|
|
218
|
-
'not_a_string',
|
|
219
|
-
undefined
|
|
220
|
-
> {
|
|
221
|
-
value: Exclude<CellValue, string>;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
interface ParseDataErrorNotAnEmail<ColumnTitle extends string = string> extends ParseDataError_<
|
|
225
|
-
ColumnTitle,
|
|
226
|
-
typeof Email,
|
|
227
|
-
'not_an_email',
|
|
228
|
-
undefined
|
|
229
|
-
> {
|
|
230
|
-
value: string;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
interface ParseDataErrorEmailNotAString<ColumnTitle extends string = string> extends ParseDataError_<
|
|
234
|
-
ColumnTitle,
|
|
235
|
-
typeof Email,
|
|
236
|
-
'not_a_string',
|
|
237
|
-
undefined
|
|
238
|
-
> {
|
|
239
|
-
value: Exclude<CellValue, string>;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
type ParseDataAdditionalValueTypeError<ColumnTitle extends string = string> =
|
|
243
|
-
| ParseDataErrorNotAnInteger<ColumnTitle>
|
|
244
|
-
| ParseDataErrorIntegerNotANumber<ColumnTitle>
|
|
245
|
-
| ParseDataErrorIntegerNotANumberString<ColumnTitle>
|
|
246
|
-
| ParseDataErrorIntegerNumberInvalid<ColumnTitle>
|
|
247
|
-
| ParseDataErrorIntegerNumberOutOfBounds<ColumnTitle>
|
|
248
|
-
| ParseDataErrorNotAUrl<ColumnTitle>
|
|
249
|
-
| ParseDataErrorUrlNotAString<ColumnTitle>
|
|
250
|
-
| ParseDataErrorNotAnEmail<ColumnTitle>
|
|
251
|
-
| ParseDataErrorEmailNotAString<ColumnTitle>;
|
|
252
|
-
|
|
253
|
-
type ParseDataBuiltInValueTypeError<ColumnTitle extends string = string> =
|
|
254
|
-
| ParseDataBaseValueTypeError<ColumnTitle>
|
|
255
|
-
| ParseDataAdditionalValueTypeError<ColumnTitle>;
|
|
256
|
-
|
|
257
|
-
interface ParseDataArrayValueNotAStringError<
|
|
258
|
-
ColumnTitle extends string = string,
|
|
259
|
-
ParseDataCustomType_ extends ParseDataCustomType<unknown> = ParseDataCustomType<unknown>
|
|
260
|
-
> extends ParseDataError_<
|
|
261
|
-
ColumnTitle,
|
|
262
|
-
ParseDataValueType<ParseDataCustomType_>,
|
|
263
|
-
'not_a_string',
|
|
264
|
-
undefined
|
|
265
|
-
> {}
|
|
266
|
-
|
|
267
|
-
interface ParseDataArrayValueSyntaxError<
|
|
268
|
-
ColumnTitle extends string = string,
|
|
269
|
-
ParseDataCustomType_ extends ParseDataCustomType<unknown> = ParseDataCustomType<unknown>
|
|
270
|
-
> extends ParseDataError_<
|
|
271
|
-
ColumnTitle,
|
|
272
|
-
ParseDataValueType<ParseDataCustomType_>,
|
|
273
|
-
'invalid',
|
|
274
|
-
'syntax'
|
|
275
|
-
> {}
|
|
276
|
-
|
|
277
|
-
export type ParseDataError<
|
|
278
|
-
ColumnTitle extends string = string,
|
|
279
|
-
CustomType extends ParseDataCustomType<unknown> = never,
|
|
280
|
-
ErrorMessage extends ParseDataCustomTypeErrorMessage<CustomType> = string,
|
|
281
|
-
ErrorReason extends ParseDataCustomTypeErrorReason<CustomType, ErrorMessage> = string | undefined
|
|
282
|
-
> =
|
|
283
|
-
| ParseDataBuiltInValueTypeError<ColumnTitle>
|
|
284
|
-
| ParseDataValueRequiredError<ColumnTitle, ParseDataValueType<CustomType>>
|
|
285
|
-
| ParseDataArrayValueNotAStringError<ColumnTitle, ParseDataValueType<CustomType>>
|
|
286
|
-
| ParseDataArrayValueSyntaxError<ColumnTitle, ParseDataValueType<CustomType>>
|
|
287
|
-
| ParseDataErrorCustomType<
|
|
288
|
-
ColumnTitle,
|
|
289
|
-
ParseDataValueType<CustomType>,
|
|
290
|
-
ErrorMessage,
|
|
291
|
-
ErrorReason
|
|
292
|
-
>;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|