read-excel-file 5.7.1 → 5.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/README.md +45 -19
- package/bundle/read-excel-file.min.js +1 -1
- package/bundle/read-excel-file.min.js.map +1 -1
- package/commonjs/read/coordinates.js +7 -10
- package/commonjs/read/coordinates.js.map +1 -1
- package/commonjs/read/dropEmptyColumns.js +6 -18
- package/commonjs/read/dropEmptyColumns.js.map +1 -1
- package/commonjs/read/dropEmptyColumns.test.js.map +1 -1
- package/commonjs/read/dropEmptyRows.js +11 -23
- package/commonjs/read/dropEmptyRows.js.map +1 -1
- package/commonjs/read/dropEmptyRows.test.js.map +1 -1
- package/commonjs/read/getData.js +31 -43
- package/commonjs/read/getData.js.map +1 -1
- package/commonjs/read/isDateTimestamp.js +51 -40
- package/commonjs/read/isDateTimestamp.js.map +1 -1
- package/commonjs/read/parseCell.js +3 -10
- package/commonjs/read/parseCell.js.map +1 -1
- package/commonjs/read/parseCellValue.js +28 -59
- package/commonjs/read/parseCellValue.js.map +1 -1
- package/commonjs/read/parseCells.js +3 -7
- package/commonjs/read/parseCells.js.map +1 -1
- package/commonjs/read/parseDate.js +5 -5
- package/commonjs/read/parseDate.js.map +1 -1
- package/commonjs/read/parseDate.test.js.map +1 -1
- package/commonjs/read/parseDimensions.js +6 -18
- package/commonjs/read/parseDimensions.js.map +1 -1
- package/commonjs/read/parseFilePaths.js +4 -11
- package/commonjs/read/parseFilePaths.js.map +1 -1
- package/commonjs/read/parseProperties.js +6 -8
- package/commonjs/read/parseProperties.js.map +1 -1
- package/commonjs/read/parseSharedStrings.js +0 -3
- package/commonjs/read/parseSharedStrings.js.map +1 -1
- package/commonjs/read/parseSheet.js +3 -7
- package/commonjs/read/parseSheet.js.map +1 -1
- package/commonjs/read/parseStyles.js +13 -21
- package/commonjs/read/parseStyles.js.map +1 -1
- package/commonjs/read/readSheetNamesBrowser.js +0 -3
- package/commonjs/read/readSheetNamesBrowser.js.map +1 -1
- package/commonjs/read/readSheetNamesNode.js +0 -3
- package/commonjs/read/readSheetNamesNode.js.map +1 -1
- package/commonjs/read/readSheetNamesNode.test.js.map +1 -1
- package/commonjs/read/readSheetNamesWebWorker.js +0 -3
- package/commonjs/read/readSheetNamesWebWorker.js.map +1 -1
- package/commonjs/read/readXlsx.js +34 -42
- package/commonjs/read/readXlsx.js.map +1 -1
- package/commonjs/read/readXlsxFileBrowser.js +0 -5
- package/commonjs/read/readXlsxFileBrowser.js.map +1 -1
- package/commonjs/read/readXlsxFileContents.js +12 -22
- package/commonjs/read/readXlsxFileContents.js.map +1 -1
- package/commonjs/read/readXlsxFileNode.js +0 -5
- package/commonjs/read/readXlsxFileNode.js.map +1 -1
- package/commonjs/read/readXlsxFileNode.test.js.map +1 -1
- package/commonjs/read/readXlsxFileWebWorker.js +0 -5
- package/commonjs/read/readXlsxFileWebWorker.js.map +1 -1
- package/commonjs/read/schema/convertMapToSchema.js +1 -8
- package/commonjs/read/schema/convertMapToSchema.js.map +1 -1
- package/commonjs/read/schema/convertMapToSchema.test.js.map +1 -1
- package/commonjs/read/schema/convertToJson.js +143 -142
- package/commonjs/read/schema/convertToJson.js.map +1 -1
- package/commonjs/read/schema/convertToJson.legacy.js +60 -0
- package/commonjs/read/schema/convertToJson.legacy.js.map +1 -0
- package/commonjs/read/schema/convertToJson.legacy.test.js.map +1 -0
- package/commonjs/read/schema/convertToJson.spreadsheet.js +25 -0
- package/commonjs/read/schema/convertToJson.spreadsheet.js.map +1 -0
- package/commonjs/read/schema/convertToJson.spreadsheet.test.js.map +1 -0
- package/commonjs/read/schema/convertToJson.test.js.map +1 -1
- package/commonjs/read/unpackXlsxFileBrowser.js +3 -9
- package/commonjs/read/unpackXlsxFileBrowser.js.map +1 -1
- package/commonjs/read/unpackXlsxFileNode.js +9 -15
- package/commonjs/read/unpackXlsxFileNode.js.map +1 -1
- package/commonjs/types/Boolean.js +0 -4
- package/commonjs/types/Boolean.js.map +1 -1
- package/commonjs/types/Date.js +0 -12
- package/commonjs/types/Date.js.map +1 -1
- package/commonjs/types/Email.js +0 -7
- package/commonjs/types/Email.js.map +1 -1
- package/commonjs/types/Email.test.js.map +1 -1
- package/commonjs/types/Integer.js +0 -7
- package/commonjs/types/Integer.js.map +1 -1
- package/commonjs/types/Integer.test.js.map +1 -1
- package/commonjs/types/InvalidError.js +8 -28
- package/commonjs/types/InvalidError.js.map +1 -1
- package/commonjs/types/Number.js +2 -10
- package/commonjs/types/Number.js.map +1 -1
- package/commonjs/types/String.js +4 -11
- package/commonjs/types/String.js.map +1 -1
- package/commonjs/types/URL.js +5 -8
- package/commonjs/types/URL.js.map +1 -1
- package/commonjs/types/URL.test.js.map +1 -1
- package/commonjs/xml/dom.js +6 -25
- package/commonjs/xml/dom.js.map +1 -1
- package/commonjs/xml/xlsx.js +1 -24
- package/commonjs/xml/xlsx.js.map +1 -1
- package/commonjs/xml/xml.js +1 -4
- package/commonjs/xml/xml.js.map +1 -1
- package/commonjs/xml/xmlBrowser.js +1 -2
- package/commonjs/xml/xmlBrowser.js.map +1 -1
- package/commonjs/xml/xpath/xlsx-xpath.js +3 -16
- package/commonjs/xml/xpath/xlsx-xpath.js.map +1 -1
- package/commonjs/xml/xpath/xpathBrowser.js +3 -5
- package/commonjs/xml/xpath/xpathBrowser.js.map +1 -1
- package/commonjs/xml/xpath/xpathNode.js +1 -5
- package/commonjs/xml/xpath/xpathNode.js.map +1 -1
- package/map/index.cjs +2 -0
- package/map/index.cjs.js +7 -0
- package/map/index.d.ts +11 -0
- package/map/index.js +1 -0
- package/map/package.json +17 -0
- package/modules/read/coordinates.js +7 -8
- package/modules/read/coordinates.js.map +1 -1
- package/modules/read/dropEmptyColumns.js +6 -17
- package/modules/read/dropEmptyColumns.js.map +1 -1
- package/modules/read/dropEmptyColumns.test.js.map +1 -1
- package/modules/read/dropEmptyRows.js +11 -22
- package/modules/read/dropEmptyRows.js.map +1 -1
- package/modules/read/dropEmptyRows.test.js.map +1 -1
- package/modules/read/getData.js +31 -39
- package/modules/read/getData.js.map +1 -1
- package/modules/read/isDateTimestamp.js +52 -39
- package/modules/read/isDateTimestamp.js.map +1 -1
- package/modules/read/parseCell.js +6 -6
- package/modules/read/parseCell.js.map +1 -1
- package/modules/read/parseCellValue.js +30 -55
- package/modules/read/parseCellValue.js.map +1 -1
- package/modules/read/parseCells.js +3 -3
- package/modules/read/parseCells.js.map +1 -1
- package/modules/read/parseDate.js +5 -4
- package/modules/read/parseDate.js.map +1 -1
- package/modules/read/parseDate.test.js.map +1 -1
- package/modules/read/parseDimensions.js +9 -17
- package/modules/read/parseDimensions.js.map +1 -1
- package/modules/read/parseFilePaths.js +5 -10
- package/modules/read/parseFilePaths.js.map +1 -1
- package/modules/read/parseProperties.js +8 -7
- package/modules/read/parseProperties.js.map +1 -1
- package/modules/read/parseSharedStrings.js +0 -1
- package/modules/read/parseSharedStrings.js.map +1 -1
- package/modules/read/parseSheet.js +3 -2
- package/modules/read/parseSheet.js.map +1 -1
- package/modules/read/parseStyles.js +16 -21
- package/modules/read/parseStyles.js.map +1 -1
- package/modules/read/readSheetNamesBrowser.js +1 -1
- package/modules/read/readSheetNamesBrowser.js.map +1 -1
- package/modules/read/readSheetNamesNode.js +1 -1
- package/modules/read/readSheetNamesNode.js.map +1 -1
- package/modules/read/readSheetNamesNode.test.js.map +1 -1
- package/modules/read/readSheetNamesWebWorker.js +1 -1
- package/modules/read/readSheetNamesWebWorker.js.map +1 -1
- package/modules/read/readXlsx.js +37 -35
- package/modules/read/readXlsx.js.map +1 -1
- package/modules/read/readXlsxFileBrowser.js +1 -1
- package/modules/read/readXlsxFileBrowser.js.map +1 -1
- package/modules/read/readXlsxFileContents.js +12 -17
- package/modules/read/readXlsxFileContents.js.map +1 -1
- package/modules/read/readXlsxFileNode.js +1 -1
- package/modules/read/readXlsxFileNode.js.map +1 -1
- package/modules/read/readXlsxFileNode.test.js.map +1 -1
- package/modules/read/readXlsxFileWebWorker.js +1 -1
- package/modules/read/readXlsxFileWebWorker.js.map +1 -1
- package/modules/read/schema/convertMapToSchema.js +1 -7
- package/modules/read/schema/convertMapToSchema.js.map +1 -1
- package/modules/read/schema/convertMapToSchema.test.js.map +1 -1
- package/modules/read/schema/convertToJson.js +143 -133
- package/modules/read/schema/convertToJson.js.map +1 -1
- package/modules/read/schema/convertToJson.legacy.js +53 -0
- package/modules/read/schema/convertToJson.legacy.js.map +1 -0
- package/modules/read/schema/convertToJson.legacy.test.js.map +1 -0
- package/modules/read/schema/convertToJson.spreadsheet.js +19 -0
- package/modules/read/schema/convertToJson.spreadsheet.js.map +1 -0
- package/modules/read/schema/convertToJson.spreadsheet.test.js.map +1 -0
- package/modules/read/schema/convertToJson.test.js.map +1 -1
- package/modules/read/unpackXlsxFileBrowser.js +4 -7
- package/modules/read/unpackXlsxFileBrowser.js.map +1 -1
- package/modules/read/unpackXlsxFileNode.js +9 -7
- package/modules/read/unpackXlsxFileNode.js.map +1 -1
- package/modules/types/Boolean.js +0 -1
- package/modules/types/Boolean.js.map +1 -1
- package/modules/types/Date.js +0 -8
- package/modules/types/Date.js.map +1 -1
- package/modules/types/Email.js +0 -2
- package/modules/types/Email.js.map +1 -1
- package/modules/types/Email.test.js.map +1 -1
- package/modules/types/Integer.js +0 -2
- package/modules/types/Integer.js.map +1 -1
- package/modules/types/Integer.test.js.map +1 -1
- package/modules/types/InvalidError.js +7 -25
- package/modules/types/InvalidError.js.map +1 -1
- package/modules/types/Number.js +2 -7
- package/modules/types/Number.js.map +1 -1
- package/modules/types/String.js +4 -8
- package/modules/types/String.js.map +1 -1
- package/modules/types/URL.js +5 -4
- package/modules/types/URL.js.map +1 -1
- package/modules/types/URL.test.js.map +1 -1
- package/modules/xml/dom.js +6 -18
- package/modules/xml/dom.js.map +1 -1
- package/modules/xml/xlsx.js +4 -13
- package/modules/xml/xlsx.js.map +1 -1
- package/modules/xml/xml.js.map +1 -1
- package/modules/xml/xmlBrowser.js.map +1 -1
- package/modules/xml/xpath/xlsx-xpath.js +2 -1
- package/modules/xml/xpath/xlsx-xpath.js.map +1 -1
- package/modules/xml/xpath/xpathBrowser.js +3 -4
- package/modules/xml/xpath/xpathBrowser.js.map +1 -1
- package/modules/xml/xpath/xpathNode.js +1 -0
- package/modules/xml/xpath/xpathNode.js.map +1 -1
- package/package.json +6 -1
- package/schema/index.cjs +2 -2
- package/schema/index.cjs.js +2 -2
- package/schema/index.d.ts +7 -2
- package/schema/index.js +1 -1
- package/types.d.ts +25 -2
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
6
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
7
|
+
import convertToJson from './convertToJson.js';
|
|
8
|
+
export default function convertToJsonLegacyBehavior(data, schema) {
|
|
9
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
10
|
+
var includeNullValues = options.includeNullValues,
|
|
11
|
+
ignoreEmptyRows = options.ignoreEmptyRows,
|
|
12
|
+
isColumnOriented = options.isColumnOriented,
|
|
13
|
+
rowMap = options.rowMap;
|
|
14
|
+
var defaultConversionOptions = {
|
|
15
|
+
schemaPropertyValueForMissingColumn: undefined,
|
|
16
|
+
schemaPropertyValueForUndefinedCellValue: undefined,
|
|
17
|
+
schemaPropertyValueForNullCellValue: undefined,
|
|
18
|
+
schemaPropertyShouldSkipRequiredValidationForMissingColumn: function schemaPropertyShouldSkipRequiredValidationForMissingColumn(column, _ref) {
|
|
19
|
+
var path = _ref.path;
|
|
20
|
+
return false;
|
|
21
|
+
},
|
|
22
|
+
getEmptyObjectValue: function getEmptyObjectValue(object, _ref2) {
|
|
23
|
+
var path = _ref2.path;
|
|
24
|
+
return path ? undefined : null;
|
|
25
|
+
},
|
|
26
|
+
getEmptyArrayValue: function getEmptyArrayValue() {
|
|
27
|
+
return null;
|
|
28
|
+
},
|
|
29
|
+
arrayValueSeparator: ','
|
|
30
|
+
};
|
|
31
|
+
if (includeNullValues) {
|
|
32
|
+
defaultConversionOptions.schemaPropertyValueForMissingColumn = null;
|
|
33
|
+
defaultConversionOptions.schemaPropertyValueForUndefinedCellValue = null;
|
|
34
|
+
defaultConversionOptions.schemaPropertyValueForNullCellValue = null;
|
|
35
|
+
defaultConversionOptions.getEmptyObjectValue = function (object, _ref3) {
|
|
36
|
+
var path = _ref3.path;
|
|
37
|
+
return null;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
var result = convertToJson(data, schema, _objectSpread(_objectSpread({}, defaultConversionOptions), {}, {
|
|
41
|
+
rowIndexMap: rowMap,
|
|
42
|
+
isColumnOriented: isColumnOriented
|
|
43
|
+
}));
|
|
44
|
+
if (ignoreEmptyRows !== false) {
|
|
45
|
+
result.rows = result.rows.filter(function (_) {
|
|
46
|
+
return _ !== defaultConversionOptions.getEmptyObjectValue(_, {
|
|
47
|
+
path: undefined
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=convertToJson.legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertToJson.legacy.js","names":["convertToJson","convertToJsonLegacyBehavior","data","schema","options","arguments","length","undefined","includeNullValues","ignoreEmptyRows","isColumnOriented","rowMap","defaultConversionOptions","schemaPropertyValueForMissingColumn","schemaPropertyValueForUndefinedCellValue","schemaPropertyValueForNullCellValue","schemaPropertyShouldSkipRequiredValidationForMissingColumn","column","_ref","path","getEmptyObjectValue","object","_ref2","getEmptyArrayValue","arrayValueSeparator","_ref3","result","_objectSpread","rowIndexMap","rows","filter","_"],"sources":["../../../source/read/schema/convertToJson.legacy.js"],"sourcesContent":["import convertToJson from './convertToJson.js'\r\n\r\nexport default function convertToJsonLegacyBehavior(data, schema, options = {}) {\r\n\tconst {\r\n\t\tincludeNullValues,\r\n\t\tignoreEmptyRows,\r\n\t\tisColumnOriented,\r\n\t\trowMap\r\n\t} = options\r\n\tconst defaultConversionOptions = {\r\n\t\tschemaPropertyValueForMissingColumn: undefined,\r\n\t\tschemaPropertyValueForUndefinedCellValue: undefined,\r\n\t\tschemaPropertyValueForNullCellValue: undefined,\r\n\t\tschemaPropertyShouldSkipRequiredValidationForMissingColumn: (column, { path }) => false,\r\n\t\tgetEmptyObjectValue: (object, { path }) => path ? undefined : null,\r\n\t\tgetEmptyArrayValue: () => null,\r\n\t\tarrayValueSeparator: ','\r\n\t}\r\n\tif (includeNullValues) {\r\n\t\tdefaultConversionOptions.schemaPropertyValueForMissingColumn = null\r\n\t\tdefaultConversionOptions.schemaPropertyValueForUndefinedCellValue = null\r\n\t\tdefaultConversionOptions.schemaPropertyValueForNullCellValue = null\r\n\t\tdefaultConversionOptions.getEmptyObjectValue = (object, { path }) => null\r\n\t}\r\n\tconst result = convertToJson(data, schema, {\r\n\t\t...defaultConversionOptions,\r\n\t\trowIndexMap: rowMap,\r\n\t\tisColumnOriented\r\n\t})\r\n\tif (ignoreEmptyRows !== false) {\r\n\t\tresult.rows = result.rows.filter(_ => _ !== defaultConversionOptions.getEmptyObjectValue(_, { path: undefined }))\r\n\t}\r\n\treturn result\r\n}"],"mappings":";;;;;;AAAA,OAAOA,aAAa,MAAM,oBAAoB;AAE9C,eAAe,SAASC,2BAA2BA,CAACC,IAAI,EAAEC,MAAM,EAAgB;EAAA,IAAdC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAC7E,IACCG,iBAAiB,GAIdJ,OAAO,CAJVI,iBAAiB;IACjBC,eAAe,GAGZL,OAAO,CAHVK,eAAe;IACfC,gBAAgB,GAEbN,OAAO,CAFVM,gBAAgB;IAChBC,MAAM,GACHP,OAAO,CADVO,MAAM;EAEP,IAAMC,wBAAwB,GAAG;IAChCC,mCAAmC,EAAEN,SAAS;IAC9CO,wCAAwC,EAAEP,SAAS;IACnDQ,mCAAmC,EAAER,SAAS;IAC9CS,0DAA0D,EAAE,SAAAA,2DAACC,MAAM,EAAAC,IAAA;MAAA,IAAIC,IAAI,GAAAD,IAAA,CAAJC,IAAI;MAAA,OAAO,KAAK;IAAA;IACvFC,mBAAmB,EAAE,SAAAA,oBAACC,MAAM,EAAAC,KAAA;MAAA,IAAIH,IAAI,GAAAG,KAAA,CAAJH,IAAI;MAAA,OAAOA,IAAI,GAAGZ,SAAS,GAAG,IAAI;IAAA;IAClEgB,kBAAkB,EAAE,SAAAA,mBAAA;MAAA,OAAM,IAAI;IAAA;IAC9BC,mBAAmB,EAAE;EACtB,CAAC;EACD,IAAIhB,iBAAiB,EAAE;IACtBI,wBAAwB,CAACC,mCAAmC,GAAG,IAAI;IACnED,wBAAwB,CAACE,wCAAwC,GAAG,IAAI;IACxEF,wBAAwB,CAACG,mCAAmC,GAAG,IAAI;IACnEH,wBAAwB,CAACQ,mBAAmB,GAAG,UAACC,MAAM,EAAAI,KAAA;MAAA,IAAIN,IAAI,GAAAM,KAAA,CAAJN,IAAI;MAAA,OAAO,IAAI;IAAA;EAC1E;EACA,IAAMO,MAAM,GAAG1B,aAAa,CAACE,IAAI,EAAEC,MAAM,EAAAwB,aAAA,CAAAA,aAAA,KACrCf,wBAAwB;IAC3BgB,WAAW,EAAEjB,MAAM;IACnBD,gBAAgB,EAAhBA;EAAgB,EAChB,CAAC;EACF,IAAID,eAAe,KAAK,KAAK,EAAE;IAC9BiB,MAAM,CAACG,IAAI,GAAGH,MAAM,CAACG,IAAI,CAACC,MAAM,CAAC,UAAAC,CAAC;MAAA,OAAIA,CAAC,KAAKnB,wBAAwB,CAACQ,mBAAmB,CAACW,CAAC,EAAE;QAAEZ,IAAI,EAAEZ;MAAU,CAAC,CAAC;IAAA,EAAC;EAClH;EACA,OAAOmB,MAAM;AACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertToJson.legacy.test.js","names":["convertToJson","Integer","describe","it","_convertToJson","A","prop","type","String","B","C","CA","CB","includeNullValues","rows","should","deep","equal","a","b","c","_convertToJson2","COLUMN_1","required","COLUMN_2","COLUMN_4","COLUMN_5","errors","column2","column4","_convertToJson3","column1","column5","_convertToJson4","NUMBER","Number","STRING","error","row","column","value","undefined","string","_convertToJson5","_convertToJson6","NAMES","names","_convertToJson7","INTEGER","length","reason","_convertToJson8"],"sources":["../../../source/read/schema/convertToJson.legacy.test.js"],"sourcesContent":["import convertToJson from './convertToJson.legacy.js'\r\n\r\nimport Integer from '../../types/Integer.js'\r\n\r\ndescribe('convertToJson (legacy behavior)', () => {\r\n\tit('should include `null` values when `includeNullValues: true` option is passed', function() {\r\n\t\tconst { rows } = convertToJson(\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\tprop: '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\tprop: '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\tprop: 'c',\r\n \t\t\ttype: {\r\n\t\t\t\t\t\tCA: {\r\n\t\t\t\t\t\t\tprop: 'a',\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\tCB: {\r\n\t\t\t\t\t\t\tprop: 'b',\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\t{\r\n\t\t\t\tincludeNullValues: true\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\trows.should.deep.equal([\r\n\t\t\t{ a: 'a', b: 'b', c: { a: 'ca', b: null } },\r\n\t\t\t{ a: 'a', b: null, c: null },\r\n\t\t])\r\n\t})\r\n\r\n\tit('should handle missing columns / empty cells (default) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\terrors.should.deep.equal([])\r\n\r\n\t\t// Legacy behavior.\r\n\t\trows.should.deep.equal([{\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14'\r\n\t\t}, {\r\n\t\t\tcolumn2: '22'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should handle missing columns / empty cells (`includeNullValues: true`) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\tincludeNullValues: true\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.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\tit('should require fields when cell value is empty', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\trow: 2,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\t// value: null,\r\n\t\t\tvalue: undefined\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tstring: 'abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('shouldn\\'t require fields when cell value is empty and object is empty too', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should parse arrays (and remove `null` empty objects from result)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: 'names',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tnames: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse integers (and drop `null` errored objects from result)', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\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\tINTEGER: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: Integer\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].should.deep.equal({\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_an_integer',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 1\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should not include `null` values by default (and set `null` for an \"empty\" object)', function() {\r\n\t\tconst { rows } = convertToJson(\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\tprop: '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\tprop: '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\tprop: 'c',\r\n \t\t\ttype: {\r\n\t\t\t\t\t\tCA: {\r\n\t\t\t\t\t\t\tprop: 'a',\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\tCB: {\r\n\t\t\t\t\t\t\tprop: 'b',\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\trows.should.deep.equal([\r\n\t\t\t{ a: 'a', b: 'b', c: { a: 'ca' } },\r\n\t\t\t{ a: 'a' },\r\n\t\t])\r\n\t})\r\n})"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
var _excluded = ["schemaPropertyValueForEmptyCell"];
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
9
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
10
|
+
// Renames some of the `react-excel-file` options to `convertToJson()` options.
|
|
11
|
+
export default function convertToJsonSpreadsheetBehavior(convertToJson, data, schema) {
|
|
12
|
+
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
13
|
+
var schemaPropertyValueForEmptyCell = options.schemaPropertyValueForEmptyCell,
|
|
14
|
+
restOptions = _objectWithoutProperties(options, _excluded);
|
|
15
|
+
return convertToJson(data, schema, _objectSpread(_objectSpread({}, restOptions), {}, {
|
|
16
|
+
schemaPropertyValueForNullCellValue: schemaPropertyValueForEmptyCell
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=convertToJson.spreadsheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertToJson.spreadsheet.js","names":["convertToJsonSpreadsheetBehavior","convertToJson","data","schema","options","arguments","length","undefined","schemaPropertyValueForEmptyCell","restOptions","_objectWithoutProperties","_excluded","_objectSpread","schemaPropertyValueForNullCellValue"],"sources":["../../../source/read/schema/convertToJson.spreadsheet.js"],"sourcesContent":["// Renames some of the `react-excel-file` options to `convertToJson()` options.\r\nexport default function convertToJsonSpreadsheetBehavior(convertToJson, data, schema, options = {}) {\r\n\tconst {\r\n\t\tschemaPropertyValueForEmptyCell,\r\n\t\t...restOptions\r\n\t} = options\r\n\treturn convertToJson(data, schema, {\r\n\t\t...restOptions,\r\n\t\tschemaPropertyValueForNullCellValue: schemaPropertyValueForEmptyCell\r\n\t})\r\n}"],"mappings":";;;;;;;;;AAAA;AACA,eAAe,SAASA,gCAAgCA,CAACC,aAAa,EAAEC,IAAI,EAAEC,MAAM,EAAgB;EAAA,IAAdC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACjG,IACCG,+BAA+B,GAE5BJ,OAAO,CAFVI,+BAA+B;IAC5BC,WAAW,GAAAC,wBAAA,CACXN,OAAO,EAAAO,SAAA;EACX,OAAOV,aAAa,CAACC,IAAI,EAAEC,MAAM,EAAAS,aAAA,CAAAA,aAAA,KAC7BH,WAAW;IACdI,mCAAmC,EAAEL;EAA+B,EACpE,CAAC;AACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertToJson.spreadsheet.test.js","names":["convertToJson_","convertToJsonSpreadsheetBehavior","convertToJson","data","schema","options","describe","it","_convertToJson","COLUMN_1","prop","type","String","required","COLUMN_2","COLUMN_4","COLUMN_5","schemaPropertyValueForMissingColumn","rows","errors","should","deep","equal","column1","column2","column4","column5","_convertToJson2","schemaPropertyValueForEmptyCell"],"sources":["../../../source/read/schema/convertToJson.spreadsheet.test.js"],"sourcesContent":["import convertToJson_ from './convertToJson.js'\r\nimport convertToJsonSpreadsheetBehavior from './convertToJson.spreadsheet.js'\r\n\r\nfunction convertToJson(data, schema, options) {\r\n\treturn convertToJsonSpreadsheetBehavior(convertToJson_, data, schema, options)\r\n}\r\n\r\ndescribe('convertToJson (spreadsheet behavior)', () => {\r\n\tit('should handle missing columns / empty cells (`schemaPropertyValueForMissingColumn: null`) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\tschemaPropertyValueForMissingColumn: null\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.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\t// column4: undefined,\r\n\t\t\tcolumn5: null\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should handle missing columns / empty cells (`schemaPropertyValueForEmptyCell: null`) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\tschemaPropertyValueForEmptyCell: null\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\t// column1: undefined,\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14',\r\n\t\t\t// column5: undefined\r\n\t\t}, {\r\n\t\t\t// column1: undefined,\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: null,\r\n\t\t\t// column5: undefined\r\n\t\t}])\r\n\t})\r\n})\r\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertToJson.test.js","names":["convertToJson","parseArray","getBlock","Integer","URL","Email","date","convertToUTCTimezone","Date","describe","it","should","deep","equal","parse","getTimezoneOffset","DATE","prop","type","NUMBER","Number","BOOLEAN","Boolean","STRING","String","PHONE","value","PHONE_TYPE","rows","errors","toISOString","number","phone","phoneType","string","required","error","row","column","NAMES","names","INTEGER","length","reason","EMAIL","NAME","validate","Error","TRUE","FALSE","INVALID","rowMap","STATUS","oneOf","A","B","C","CA","CB","a","b","c","includeNullValues","getTime"],"sources":["../../../source/read/schema/convertToJson.test.js"],"sourcesContent":["import convertToJson, { parseArray, getBlock } from './convertToJson.js'\r\n\r\nimport Integer from '../../types/Integer.js'\r\nimport URL from '../../types/URL.js'\r\nimport Email from '../../types/Email.js'\r\n\r\nconst date = convertToUTCTimezone(new Date(2018, 3 - 1, 24))\r\n\r\ndescribe('convertToJson', () => {\r\n\tit('should parse arrays', () => {\r\n\t\tgetBlock('abc\"de,f\"g,h', ',', 0).should.deep.equal(['abcde,fg', 10])\r\n\t\tparseArray(' abc\"de,f\"g , h ').should.deep.equal(['abcde,fg', 'h'])\r\n\t})\r\n\r\n\tit('should convert to json', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: 'date',\r\n\t\t\t\ttype: Date\r\n\t\t\t},\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number',\r\n\t\t\t\ttype: Number\r\n\t\t\t},\r\n\t\t\tBOOLEAN: {\r\n\t\t\t\tprop: 'boolean',\r\n\t\t\t\ttype: Boolean\r\n\t\t\t},\r\n\t\t\tSTRING: {\r\n\t\t\t\tprop: 'string',\r\n\t\t\t\ttype: String\r\n\t\t\t},\r\n\t\t\tPHONE: {\r\n\t\t\t\tprop: 'phone',\r\n\t\t\t\tparse(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tPHONE_TYPE: {\r\n\t\t\t\tprop: 'phoneType',\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\terrors.should.deep.equal([])\r\n\r\n\t\t// Convert `Date` to `String` for equality check.\r\n\t\trows[0].date = rows[0].date.toISOString()\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate: date.toISOString(),\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 { rows, errors } = convertToJson([\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\tprop: 'date'\r\n\t\t\t},\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number'\r\n\t\t\t},\r\n\t\t\tBOOLEAN: {\r\n\t\t\t\tprop: 'boolean'\r\n\t\t\t},\r\n\t\t\tSTRING: {\r\n\t\t\t\tprop: 'string'\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\t// Convert `Date` to `String` for equality check.\r\n\t\trows[0].date = rows[0].date.toISOString()\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate: date.toISOString(),\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', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should parse arrays', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: 'names',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tnames: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse integers', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\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\tINTEGER: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: Integer\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].should.deep.equal({\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_an_integer',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 1\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse URLs', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\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\tURL: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: URL\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].row.should.equal(3)\r\n\t\terrors[0].column.should.equal('URL')\r\n\t\terrors[0].error.should.equal('invalid')\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 'https://kremlin.ru'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse Emails', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\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\tEMAIL: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: Email\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].row.should.equal(3)\r\n\t\terrors[0].column.should.equal('EMAIL')\r\n\t\terrors[0].error.should.equal('invalid')\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 'vladimir.putin@kremlin.ru'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should call .validate()', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'custom-error',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should validate numbers', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should validate booleans', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\tprop: '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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_boolean',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([{\r\n\t\t\ttrue: true,\r\n\t\t\tfalse: false\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate dates', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\t43183, // 03/24/2018',\r\n\t\t\t\t'-'\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\tprop: '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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_date',\r\n\t\t\trow: 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\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_date',\r\n\t\t\trow: 3,\r\n\t\t\tcolumn: 'INVALID',\r\n\t\t\ttype: Date,\r\n\t\t\tvalue: '-'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate\r\n\t\t}, {\r\n\t\t\tdate\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should throw parse() errors', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: 'phone',\r\n\t\t\t\tparse: () => {\r\n\t\t\t\t\tthrow new Error('invalid')\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tPHONE_TYPE: {\r\n\t\t\t\tprop: 'phoneType',\r\n\t\t\t\tparse: () => {\r\n\t\t\t\t\tthrow new Error('invalid')\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 2,\r\n\t\t\tcolumn: 'PHONE',\r\n\t\t\tvalue: '123'\r\n\t\t}, {\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 2,\r\n\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\tvalue: '123'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should map row numbers', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: 'number',\r\n\t\t\t\ttype: Number\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\trowMap: [2, 5]\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number',\r\n\t\t\trow: 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 { rows, errors } = convertToJson([\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\tprop: '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\terrors.length.should.equal(0)\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (not valid)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'unknown',\r\n\t\t\trow: 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 not include `null` values by default', function() {\r\n\t\tconst { rows } = convertToJson(\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\tprop: '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\tprop: '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\tprop: 'c',\r\n \t\t\ttype: {\r\n\t\t\t\t\t\tCA: {\r\n\t\t\t\t\t\t\tprop: 'a',\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\tCB: {\r\n\t\t\t\t\t\t\tprop: 'b',\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\trows.should.deep.equal([\r\n\t\t\t{ a: 'a', b: 'b', c: { a: 'ca' } },\r\n\t\t\t{ a: 'a' },\r\n\t\t])\r\n\t})\r\n\r\n\tit('should include `null` values when `includeNullValues: true` option is passed', function() {\r\n\t\tconst { rows } = convertToJson(\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\tprop: '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\tprop: '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\tprop: 'c',\r\n \t\t\ttype: {\r\n\t\t\t\t\t\tCA: {\r\n\t\t\t\t\t\t\tprop: 'a',\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\tCB: {\r\n\t\t\t\t\t\t\tprop: 'b',\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\t{\r\n\t\t\t\tincludeNullValues: true\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\trows.should.deep.equal([\r\n\t\t\t{ a: 'a', b: 'b', c: { a: 'ca', b: null } },\r\n\t\t\t{ a: 'a', b: null, c: null },\r\n\t\t])\r\n\t})\r\n})\r\n\r\n// Converts timezone to UTC while preserving the same time\r\nfunction convertToUTCTimezone(date) {\r\n\t// Doesn't account for leap seconds but I guess that's ok\r\n\t// given that javascript's own `Date()` does not either.\r\n\t// https://www.timeanddate.com/time/leap-seconds-background.html\r\n\t//\r\n\t// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\r\n\t//\r\n\treturn new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000)\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convertToJson.test.js","names":["convertToJson","parseArray","getBlock","Integer","URL","Email","date","convertToUTCTimezone","Date","describe","it","should","deep","equal","_convertToJson","parse","getTimezoneOffset","DATE","prop","type","NUMBER","Number","BOOLEAN","Boolean","STRING","String","PHONE","value","PHONE_TYPE","rows","errors","toISOString","number","phone","phoneType","string","_convertToJson2","_convertToJson3","required","error","row","column","_convertToJson4","_convertToJson5","NAMES","names","_convertToJson6","INTEGER","length","reason","_convertToJson7","_convertToJson8","EMAIL","_convertToJson9","NAME","validate","Error","_convertToJson10","_convertToJson11","TRUE","FALSE","INVALID","_convertToJson12","_convertToJson13","_convertToJson14","rowIndexMap","_convertToJson15","STATUS","oneOf","_convertToJson16","_convertToJson17","A","B","C","CA","CB","a","b","c","_convertToJson18","COLUMN_1","COLUMN_2","COLUMN_4","COLUMN_5","column2","column4","_convertToJson19","schemaPropertyValueForMissingColumn","column1","column5","_convertToJson20","schemaPropertyValueForNullCellValue","_convertToJson21","_convertToJson22","_convertToJson23","schemaPropertyShouldSkipRequiredValidationForMissingColumn","_convertToJson24","getTime"],"sources":["../../../source/read/schema/convertToJson.test.js"],"sourcesContent":["import convertToJson, { parseArray, getBlock } from './convertToJson.js'\r\n\r\nimport Integer from '../../types/Integer.js'\r\nimport URL from '../../types/URL.js'\r\nimport Email from '../../types/Email.js'\r\n\r\nconst date = convertToUTCTimezone(new Date(2018, 3 - 1, 24))\r\n\r\ndescribe('convertToJson', () => {\r\n\tit('should parse arrays', () => {\r\n\t\tgetBlock('abc\"de,f\"g,h', ',', 0).should.deep.equal(['abcde,fg', 10])\r\n\t\tparseArray(' abc\"de,f\"g , h ', ',').should.deep.equal(['abcde,fg', 'h'])\r\n\t})\r\n\r\n\tit('should convert to json', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: 'date',\r\n\t\t\t\ttype: Date\r\n\t\t\t},\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number',\r\n\t\t\t\ttype: Number\r\n\t\t\t},\r\n\t\t\tBOOLEAN: {\r\n\t\t\t\tprop: 'boolean',\r\n\t\t\t\ttype: Boolean\r\n\t\t\t},\r\n\t\t\tSTRING: {\r\n\t\t\t\tprop: 'string',\r\n\t\t\t\ttype: String\r\n\t\t\t},\r\n\t\t\tPHONE: {\r\n\t\t\t\tprop: 'phone',\r\n\t\t\t\tparse(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tPHONE_TYPE: {\r\n\t\t\t\tprop: 'phoneType',\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\terrors.should.deep.equal([])\r\n\r\n\t\t// Convert `Date` to `String` for equality check.\r\n\t\trows[0].date = rows[0].date.toISOString()\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate: date.toISOString(),\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 { rows, errors } = convertToJson([\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\tprop: 'date'\r\n\t\t\t},\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number'\r\n\t\t\t},\r\n\t\t\tBOOLEAN: {\r\n\t\t\t\tprop: 'boolean'\r\n\t\t\t},\r\n\t\t\tSTRING: {\r\n\t\t\t\tprop: 'string'\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\t// Convert `Date` to `String` for equality check.\r\n\t\trows[0].date = rows[0].date.toISOString()\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate: date.toISOString(),\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 { rows, errors } = convertToJson([\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\tprop: '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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([{\r\n\t\t\tnumber: null,\r\n\t\t\tstring: 'abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('shouldn\\'t require fields when cell value is empty and object is empty too', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\trows.should.deep.equal([null])\r\n\t})\r\n\r\n\tit('should parse arrays', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: 'names',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.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 integers', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\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\tINTEGER: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: Integer\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].should.deep.equal({\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_an_integer',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 1\r\n\t\t}, null])\r\n\t})\r\n\r\n\tit('should parse URLs', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\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\tURL: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: URL\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].row.should.equal(3)\r\n\t\terrors[0].column.should.equal('URL')\r\n\t\terrors[0].error.should.equal('invalid')\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 'https://kremlin.ru'\r\n\t\t}, null])\r\n\t})\r\n\r\n\tit('should parse Emails', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\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\tEMAIL: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: Email\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].row.should.equal(3)\r\n\t\terrors[0].column.should.equal('EMAIL')\r\n\t\terrors[0].error.should.equal('invalid')\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 'vladimir.putin@kremlin.ru'\r\n\t\t}, null])\r\n\t})\r\n\r\n\tit('should call .validate()', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'custom-error',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([null])\r\n\t})\r\n\r\n\tit('should validate numbers', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([null])\r\n\t})\r\n\r\n\tit('should validate booleans', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\tprop: '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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_boolean',\r\n\t\t\trow: 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\r\n\t\trows.should.deep.equal([{\r\n\t\t\ttrue: true,\r\n\t\t\tfalse: false\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate dates', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\t43183, // 03/24/2018',\r\n\t\t\t\t'-'\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\tprop: '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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_date',\r\n\t\t\trow: 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\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_date',\r\n\t\t\trow: 3,\r\n\t\t\tcolumn: 'INVALID',\r\n\t\t\ttype: Date,\r\n\t\t\tvalue: '-'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate\r\n\t\t}, {\r\n\t\t\tdate\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should throw parse() errors', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: 'phone',\r\n\t\t\t\tparse: () => {\r\n\t\t\t\t\tthrow new Error('invalid')\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tPHONE_TYPE: {\r\n\t\t\t\tprop: 'phoneType',\r\n\t\t\t\tparse: () => {\r\n\t\t\t\t\tthrow new Error('invalid')\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 2,\r\n\t\t\tcolumn: 'PHONE',\r\n\t\t\tvalue: '123'\r\n\t\t}, {\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 2,\r\n\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\tvalue: '123'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([null])\r\n\t})\r\n\r\n\tit('should map row numbers', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: 'number',\r\n\t\t\t\ttype: Number\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\trowIndexMap: [2, 5]\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number',\r\n\t\t\trow: 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 { rows, errors } = convertToJson([\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\tprop: '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\terrors.length.should.equal(0)\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (not valid)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tprop: '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\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'unknown',\r\n\t\t\trow: 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 not include `null` values by default', function() {\r\n\t\tconst { rows } = convertToJson(\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\tprop: '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\tprop: '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\tprop: 'c',\r\n \t\t\ttype: {\r\n\t\t\t\t\t\tCA: {\r\n\t\t\t\t\t\t\tprop: 'a',\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\tCB: {\r\n\t\t\t\t\t\t\tprop: 'b',\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\trows.should.deep.equal([\r\n\t\t\t{ a: 'a', b: 'b', c: { a: 'ca', b: null } },\r\n\t\t\t{ a: 'a', b: null, c: null },\r\n\t\t])\r\n\t})\r\n\r\n\tit('should handle missing columns / empty cells (default) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\terrors.should.deep.equal([])\r\n\r\n\t\t// Legacy behavior.\r\n\t\trows.should.deep.equal([{\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14'\r\n\t\t}, {\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: null\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should handle missing columns / empty cells (`schemaPropertyValueForMissingColumn: null`) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\tschemaPropertyValueForMissingColumn: null\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.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\tit('should handle missing columns / empty cells (`schemaPropertyValueForNullCellValue: null`) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\tschemaPropertyValueForNullCellValue: null\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\t// column1: undefined,\r\n\t\t\tcolumn2: '12',\r\n\t\t\tcolumn4: '14',\r\n\t\t\t// column5: undefined\r\n\t\t}, {\r\n\t\t\t// column1: undefined,\r\n\t\t\tcolumn2: '22',\r\n\t\t\tcolumn4: null,\r\n\t\t\t// column5: undefined\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should handle missing columns / empty cells (`schemaPropertyValueForMissingColumn: null` and `schemaPropertyValueForNullCellValue: null`) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\tschemaPropertyValueForMissingColumn: null,\r\n\t\t\tschemaPropertyValueForNullCellValue: null\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.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\tit('should handle missing columns / empty cells (`schemaPropertyValueForMissingColumn: null` and `schemaPropertyValueForNullCellValue: null` and `schemaPropertyShouldSkipRequiredValidationForMissingColumn()` not specified) (`required: true`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\tschemaPropertyValueForMissingColumn: null,\r\n\t\t\tschemaPropertyValueForNullCellValue: null\r\n\t\t})\r\n\r\n\t\terrors.should.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\r\n\t\trows.should.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\tit('should handle missing columns / empty cells (`schemaPropertyValueForMissingColumn: null` and `schemaPropertyValueForNullCellValue: null` and `schemaPropertyShouldSkipRequiredValidationForMissingColumn: () => false`) (`required: true`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\tschemaPropertyValueForMissingColumn: null,\r\n\t\t\tschemaPropertyValueForNullCellValue: null,\r\n\t\t\tschemaPropertyShouldSkipRequiredValidationForMissingColumn: () => false\r\n\t\t})\r\n\r\n\t\terrors.should.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\r\n\t\trows.should.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\tit('should handle missing columns / empty cells (`schemaPropertyValueForMissingColumn: null` and `schemaPropertyValueForNullCellValue: null` and `schemaPropertyShouldSkipRequiredValidationForMissingColumn: () => true`) (`required: true`)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\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\tCOLUMN_1: {\r\n\t\t\t\tprop: 'column1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_2: {\r\n\t\t\t\tprop: 'column2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_4: {\r\n\t\t\t\tprop: 'column4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tCOLUMN_5: {\r\n\t\t\t\tprop: 'column5',\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\tschemaPropertyValueForMissingColumn: null,\r\n\t\t\tschemaPropertyValueForNullCellValue: null,\r\n\t\t\tschemaPropertyShouldSkipRequiredValidationForMissingColumn: () => true\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.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\r\n// Converts timezone to UTC while preserving the same time\r\nfunction convertToUTCTimezone(date) {\r\n\t// Doesn't account for leap seconds but I guess that's ok\r\n\t// given that javascript's own `Date()` does not either.\r\n\t// https://www.timeanddate.com/time/leap-seconds-background.html\r\n\t//\r\n\t// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\r\n\t//\r\n\treturn new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000)\r\n}\r\n"],"mappings":"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"}
|
|
@@ -1,31 +1,30 @@
|
|
|
1
1
|
import { unzipSync, strFromU8 } from 'fflate';
|
|
2
|
+
|
|
2
3
|
/**
|
|
3
4
|
* Reads XLSX file in a browser.
|
|
4
5
|
* @param {(File|Blob|ArrayBuffer)} input - A `File` or an `ArrayBuffer`.
|
|
5
6
|
* @return {Promise} Resolves to an object holding XLSX file entries.
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
8
|
export default function unpackXlsxFile(input) {
|
|
9
9
|
if (input instanceof File) {
|
|
10
10
|
return input.arrayBuffer().then(unpackXlsxArrayBuffer);
|
|
11
11
|
}
|
|
12
|
-
|
|
13
12
|
if (input instanceof Blob) {
|
|
14
13
|
return input.arrayBuffer().then(unpackXlsxArrayBuffer);
|
|
15
14
|
}
|
|
16
|
-
|
|
17
15
|
return unpackXlsxArrayBuffer(input);
|
|
18
16
|
}
|
|
17
|
+
|
|
19
18
|
/**
|
|
20
19
|
* Reads XLSX file in a browser from an `ArrayBuffer`.
|
|
21
20
|
* @param {ArrayBuffer} input
|
|
22
21
|
* @return {Promise} Resolves to an object holding XLSX file entries.
|
|
23
22
|
*/
|
|
24
|
-
|
|
25
23
|
function unpackXlsxArrayBuffer(arrayBuffer) {
|
|
26
24
|
var archive = new Uint8Array(arrayBuffer);
|
|
27
25
|
var contents = unzipSync(archive);
|
|
28
|
-
return Promise.resolve(getContents(contents));
|
|
26
|
+
return Promise.resolve(getContents(contents));
|
|
27
|
+
// return new Promise((resolve, reject) => {
|
|
29
28
|
// unzip(archive, (error, contents) => {
|
|
30
29
|
// if (error) {
|
|
31
30
|
// return reject(error)
|
|
@@ -37,12 +36,10 @@ function unpackXlsxArrayBuffer(arrayBuffer) {
|
|
|
37
36
|
|
|
38
37
|
function getContents(contents) {
|
|
39
38
|
var unzippedFiles = [];
|
|
40
|
-
|
|
41
39
|
for (var _i = 0, _Object$keys = Object.keys(contents); _i < _Object$keys.length; _i++) {
|
|
42
40
|
var key = _Object$keys[_i];
|
|
43
41
|
unzippedFiles[key] = strFromU8(contents[key]);
|
|
44
42
|
}
|
|
45
|
-
|
|
46
43
|
return unzippedFiles;
|
|
47
44
|
}
|
|
48
45
|
//# sourceMappingURL=unpackXlsxFileBrowser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unpackXlsxFileBrowser.js","names":["unzipSync","strFromU8","unpackXlsxFile","input","File","arrayBuffer","then","unpackXlsxArrayBuffer","Blob","archive","Uint8Array","contents","Promise","resolve","getContents","unzippedFiles","Object","keys","key"],"sources":["../../source/read/unpackXlsxFileBrowser.js"],"sourcesContent":["import { unzipSync, strFromU8 } from 'fflate'\r\n\r\n/**\r\n * Reads XLSX file in a browser.\r\n * @param {(File|Blob|ArrayBuffer)} input - A `File` or an `ArrayBuffer`.\r\n * @return {Promise} Resolves to an object holding XLSX file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n\tif (input instanceof File) {\r\n\t\treturn input.arrayBuffer().then(unpackXlsxArrayBuffer)\r\n\t}\r\n\tif (input instanceof Blob) {\r\n\t\treturn input.arrayBuffer().then(unpackXlsxArrayBuffer)\r\n\t}\r\n\treturn unpackXlsxArrayBuffer(input)\r\n}\r\n\r\n/**\r\n * Reads XLSX file in a browser from an `ArrayBuffer`.\r\n * @param {ArrayBuffer} input\r\n * @return {Promise} Resolves to an object holding XLSX file entries.\r\n */\r\nfunction unpackXlsxArrayBuffer(arrayBuffer) {\r\n\tconst archive = new Uint8Array(arrayBuffer)\r\n\tconst contents = unzipSync(archive)\r\n\treturn Promise.resolve(getContents(contents))\r\n\t// return new Promise((resolve, reject) => {\r\n\t// \tunzip(archive, (error, contents) => {\r\n\t// \t\tif (error) {\r\n\t// \t\t\treturn reject(error)\r\n\t// \t\t}\r\n\t// \t\treturn resolve(getContents(contents))\r\n\t// \t})\r\n\t// })\r\n}\r\n\r\nfunction getContents(contents) {\r\n\tconst unzippedFiles = []\r\n\tfor (const key of Object.keys(contents)) {\r\n\t\tunzippedFiles[key] = strFromU8(contents[key])\r\n\t}\r\n\treturn unzippedFiles\r\n}"],"mappings":"AAAA,SAASA,
|
|
1
|
+
{"version":3,"file":"unpackXlsxFileBrowser.js","names":["unzipSync","strFromU8","unpackXlsxFile","input","File","arrayBuffer","then","unpackXlsxArrayBuffer","Blob","archive","Uint8Array","contents","Promise","resolve","getContents","unzippedFiles","_i","_Object$keys","Object","keys","length","key"],"sources":["../../source/read/unpackXlsxFileBrowser.js"],"sourcesContent":["import { unzipSync, strFromU8 } from 'fflate'\r\n\r\n/**\r\n * Reads XLSX file in a browser.\r\n * @param {(File|Blob|ArrayBuffer)} input - A `File` or an `ArrayBuffer`.\r\n * @return {Promise} Resolves to an object holding XLSX file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n\tif (input instanceof File) {\r\n\t\treturn input.arrayBuffer().then(unpackXlsxArrayBuffer)\r\n\t}\r\n\tif (input instanceof Blob) {\r\n\t\treturn input.arrayBuffer().then(unpackXlsxArrayBuffer)\r\n\t}\r\n\treturn unpackXlsxArrayBuffer(input)\r\n}\r\n\r\n/**\r\n * Reads XLSX file in a browser from an `ArrayBuffer`.\r\n * @param {ArrayBuffer} input\r\n * @return {Promise} Resolves to an object holding XLSX file entries.\r\n */\r\nfunction unpackXlsxArrayBuffer(arrayBuffer) {\r\n\tconst archive = new Uint8Array(arrayBuffer)\r\n\tconst contents = unzipSync(archive)\r\n\treturn Promise.resolve(getContents(contents))\r\n\t// return new Promise((resolve, reject) => {\r\n\t// \tunzip(archive, (error, contents) => {\r\n\t// \t\tif (error) {\r\n\t// \t\t\treturn reject(error)\r\n\t// \t\t}\r\n\t// \t\treturn resolve(getContents(contents))\r\n\t// \t})\r\n\t// })\r\n}\r\n\r\nfunction getContents(contents) {\r\n\tconst unzippedFiles = []\r\n\tfor (const key of Object.keys(contents)) {\r\n\t\tunzippedFiles[key] = strFromU8(contents[key])\r\n\t}\r\n\treturn unzippedFiles\r\n}"],"mappings":"AAAA,SAASA,SAAS,EAAEC,SAAS,QAAQ,QAAQ;;AAE7C;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC7C,IAAIA,KAAK,YAAYC,IAAI,EAAE;IAC1B,OAAOD,KAAK,CAACE,WAAW,CAAC,CAAC,CAACC,IAAI,CAACC,qBAAqB,CAAC;EACvD;EACA,IAAIJ,KAAK,YAAYK,IAAI,EAAE;IAC1B,OAAOL,KAAK,CAACE,WAAW,CAAC,CAAC,CAACC,IAAI,CAACC,qBAAqB,CAAC;EACvD;EACA,OAAOA,qBAAqB,CAACJ,KAAK,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASI,qBAAqBA,CAACF,WAAW,EAAE;EAC3C,IAAMI,OAAO,GAAG,IAAIC,UAAU,CAACL,WAAW,CAAC;EAC3C,IAAMM,QAAQ,GAAGX,SAAS,CAACS,OAAO,CAAC;EACnC,OAAOG,OAAO,CAACC,OAAO,CAACC,WAAW,CAACH,QAAQ,CAAC,CAAC;EAC7C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACD;;AAEA,SAASG,WAAWA,CAACH,QAAQ,EAAE;EAC9B,IAAMI,aAAa,GAAG,EAAE;EACxB,SAAAC,EAAA,MAAAC,YAAA,GAAkBC,MAAM,CAACC,IAAI,CAACR,QAAQ,CAAC,EAAAK,EAAA,GAAAC,YAAA,CAAAG,MAAA,EAAAJ,EAAA,IAAE;IAApC,IAAMK,GAAG,GAAAJ,YAAA,CAAAD,EAAA;IACbD,aAAa,CAACM,GAAG,CAAC,GAAGpB,SAAS,CAACU,QAAQ,CAACU,GAAG,CAAC,CAAC;EAC9C;EACA,OAAON,aAAa;AACrB"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import Stream, { Readable } from 'stream';
|
|
3
3
|
import unzip from 'unzipper';
|
|
4
|
+
|
|
4
5
|
/**
|
|
5
6
|
* Reads XLSX file in Node.js.
|
|
6
7
|
* @param {(string|Stream)} input - A Node.js readable stream or a path to a file.
|
|
7
8
|
* @return {Promise} Resolves to an object holding XLSX file entries.
|
|
8
9
|
*/
|
|
9
|
-
|
|
10
10
|
export default function unpackXlsxFile(input) {
|
|
11
11
|
// XLSX file is a zip archive.
|
|
12
12
|
// The `entries` object stores the files
|
|
@@ -15,15 +15,17 @@ export default function unpackXlsxFile(input) {
|
|
|
15
15
|
var stream = input instanceof Stream ? input : input instanceof Buffer ? Readable.from(input) : fs.createReadStream(input);
|
|
16
16
|
return new Promise(function (resolve, reject) {
|
|
17
17
|
var entryPromises = [];
|
|
18
|
-
stream
|
|
19
|
-
|
|
18
|
+
stream
|
|
19
|
+
// This first "error" listener is for the original stream errors.
|
|
20
|
+
.on('error', reject).pipe(unzip.Parse())
|
|
21
|
+
// This second "error" listener is for the unzip stream errors.
|
|
20
22
|
.on('error', reject).on('close', function () {
|
|
21
23
|
return Promise.all(entryPromises).then(function () {
|
|
22
24
|
return resolve(entries);
|
|
23
25
|
});
|
|
24
26
|
}).on('entry', function (entry) {
|
|
25
|
-
var contents = '';
|
|
26
|
-
|
|
27
|
+
var contents = '';
|
|
28
|
+
// To ignore an entry: `entry.autodrain()`.
|
|
27
29
|
entryPromises.push(new Promise(function (resolve) {
|
|
28
30
|
// It's not clear what encoding are the files inside XLSX in.
|
|
29
31
|
// https://stackoverflow.com/questions/45194771/are-xlsx-files-utf-8-encoded-by-definition
|
|
@@ -37,8 +39,8 @@ export default function unpackXlsxFile(input) {
|
|
|
37
39
|
// If the `entry.setEncoding('utf8')` line would be commented out,
|
|
38
40
|
// there's a `nonAsciiCharacterEncoding` test that wouldn't pass.
|
|
39
41
|
//
|
|
40
|
-
entry.setEncoding('utf8');
|
|
41
|
-
|
|
42
|
+
entry.setEncoding('utf8');
|
|
43
|
+
//
|
|
42
44
|
entry.on('data', function (data) {
|
|
43
45
|
return contents += data.toString();
|
|
44
46
|
}).on('end', function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unpackXlsxFileNode.js","names":["fs","Stream","Readable","unzip","unpackXlsxFile","input","entries","stream","Buffer","from","createReadStream","Promise","resolve","reject","entryPromises","on","pipe","Parse","all","then","entry","contents","push","setEncoding","data","toString","path"],"sources":["../../source/read/unpackXlsxFileNode.js"],"sourcesContent":["import fs from 'fs'\r\nimport Stream, { Readable } from 'stream'\r\nimport unzip from 'unzipper'\r\n\r\n/**\r\n * Reads XLSX file in Node.js.\r\n * @param {(string|Stream)} input - A Node.js readable stream or a path to a file.\r\n * @return {Promise} Resolves to an object holding XLSX file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n // XLSX file is a zip archive.\r\n // The `entries` object stores the files\r\n // and their contents from this XLSX zip archive.\r\n const entries = {}\r\n\r\n const stream = input instanceof Stream\r\n ? input\r\n : (\r\n input instanceof Buffer\r\n ? Readable.from(input)\r\n : fs.createReadStream(input)\r\n )\r\n\r\n return new Promise((resolve, reject) => {\r\n const entryPromises = []\r\n\r\n stream\r\n // This first \"error\" listener is for the original stream errors.\r\n .on('error', reject)\r\n .pipe(unzip.Parse())\r\n // This second \"error\" listener is for the unzip stream errors.\r\n .on('error', reject)\r\n .on('close', () => Promise.all(entryPromises).then(() => resolve(entries)))\r\n .on('entry', (entry) => {\r\n let contents = ''\r\n // To ignore an entry: `entry.autodrain()`.\r\n entryPromises.push(new Promise((resolve) => {\r\n // It's not clear what encoding are the files inside XLSX in.\r\n // https://stackoverflow.com/questions/45194771/are-xlsx-files-utf-8-encoded-by-definition\r\n // For example, for XML files, encoding is specified at the top node:\r\n // `<?xml version=\"1.0\" encoding=\"UTF-8\"/>`.\r\n //\r\n // `unzipper` supports setting encoding when reading an `entry`.\r\n // https://github.com/ZJONSSON/node-unzipper/issues/35\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/54\r\n //\r\n // If the `entry.setEncoding('utf8')` line would be commented out,\r\n // there's a `nonAsciiCharacterEncoding` test that wouldn't pass.\r\n //\r\n entry.setEncoding('utf8')\r\n //\r\n entry\r\n .on('data', data => contents += data.toString())\r\n .on('end', () => resolve(entries[entry.path] = contents))\r\n }))\r\n })\r\n })\r\n}\r\n"],"mappings":"AAAA,OAAOA,
|
|
1
|
+
{"version":3,"file":"unpackXlsxFileNode.js","names":["fs","Stream","Readable","unzip","unpackXlsxFile","input","entries","stream","Buffer","from","createReadStream","Promise","resolve","reject","entryPromises","on","pipe","Parse","all","then","entry","contents","push","setEncoding","data","toString","path"],"sources":["../../source/read/unpackXlsxFileNode.js"],"sourcesContent":["import fs from 'fs'\r\nimport Stream, { Readable } from 'stream'\r\nimport unzip from 'unzipper'\r\n\r\n/**\r\n * Reads XLSX file in Node.js.\r\n * @param {(string|Stream)} input - A Node.js readable stream or a path to a file.\r\n * @return {Promise} Resolves to an object holding XLSX file entries.\r\n */\r\nexport default function unpackXlsxFile(input) {\r\n // XLSX file is a zip archive.\r\n // The `entries` object stores the files\r\n // and their contents from this XLSX zip archive.\r\n const entries = {}\r\n\r\n const stream = input instanceof Stream\r\n ? input\r\n : (\r\n input instanceof Buffer\r\n ? Readable.from(input)\r\n : fs.createReadStream(input)\r\n )\r\n\r\n return new Promise((resolve, reject) => {\r\n const entryPromises = []\r\n\r\n stream\r\n // This first \"error\" listener is for the original stream errors.\r\n .on('error', reject)\r\n .pipe(unzip.Parse())\r\n // This second \"error\" listener is for the unzip stream errors.\r\n .on('error', reject)\r\n .on('close', () => Promise.all(entryPromises).then(() => resolve(entries)))\r\n .on('entry', (entry) => {\r\n let contents = ''\r\n // To ignore an entry: `entry.autodrain()`.\r\n entryPromises.push(new Promise((resolve) => {\r\n // It's not clear what encoding are the files inside XLSX in.\r\n // https://stackoverflow.com/questions/45194771/are-xlsx-files-utf-8-encoded-by-definition\r\n // For example, for XML files, encoding is specified at the top node:\r\n // `<?xml version=\"1.0\" encoding=\"UTF-8\"/>`.\r\n //\r\n // `unzipper` supports setting encoding when reading an `entry`.\r\n // https://github.com/ZJONSSON/node-unzipper/issues/35\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/54\r\n //\r\n // If the `entry.setEncoding('utf8')` line would be commented out,\r\n // there's a `nonAsciiCharacterEncoding` test that wouldn't pass.\r\n //\r\n entry.setEncoding('utf8')\r\n //\r\n entry\r\n .on('data', data => contents += data.toString())\r\n .on('end', () => resolve(entries[entry.path] = contents))\r\n }))\r\n })\r\n })\r\n}\r\n"],"mappings":"AAAA,OAAOA,EAAE,MAAM,IAAI;AACnB,OAAOC,MAAM,IAAIC,QAAQ,QAAQ,QAAQ;AACzC,OAAOC,KAAK,MAAM,UAAU;;AAE5B;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC5C;EACA;EACA;EACA,IAAMC,OAAO,GAAG,CAAC,CAAC;EAElB,IAAMC,MAAM,GAAGF,KAAK,YAAYJ,MAAM,GAClCI,KAAK,GAELA,KAAK,YAAYG,MAAM,GACnBN,QAAQ,CAACO,IAAI,CAACJ,KAAK,CAAC,GACpBL,EAAE,CAACU,gBAAgB,CAACL,KAAK,CAC9B;EAEH,OAAO,IAAIM,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IACtC,IAAMC,aAAa,GAAG,EAAE;IAExBP;IACE;IAAA,CACCQ,EAAE,CAAC,OAAO,EAAEF,MAAM,CAAC,CACnBG,IAAI,CAACb,KAAK,CAACc,KAAK,CAAC,CAAC;IACnB;IAAA,CACCF,EAAE,CAAC,OAAO,EAAEF,MAAM,CAAC,CACnBE,EAAE,CAAC,OAAO,EAAE;MAAA,OAAOJ,OAAO,CAACO,GAAG,CAACJ,aAAa,CAAC,CAACK,IAAI,CAAC;QAAA,OAAMP,OAAO,CAACN,OAAO,CAAC;MAAA,EAAC;IAAA,EAAC,CAC3ES,EAAE,CAAC,OAAO,EAAE,UAACK,KAAK,EAAK;MACtB,IAAIC,QAAQ,GAAG,EAAE;MACjB;MACAP,aAAa,CAACQ,IAAI,CAAC,IAAIX,OAAO,CAAC,UAACC,OAAO,EAAK;QAC1C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACAQ,KAAK,CAACG,WAAW,CAAC,MAAM,CAAC;QACzB;QACAH,KAAK,CACFL,EAAE,CAAC,MAAM,EAAE,UAAAS,IAAI;UAAA,OAAIH,QAAQ,IAAIG,IAAI,CAACC,QAAQ,CAAC,CAAC;QAAA,EAAC,CAC/CV,EAAE,CAAC,KAAK,EAAE;UAAA,OAAMH,OAAO,CAACN,OAAO,CAACc,KAAK,CAACM,IAAI,CAAC,GAAGL,QAAQ,CAAC;QAAA,EAAC;MAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACN,CAAC,CAAC;AACJ"}
|
package/modules/types/Boolean.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Boolean.js","names":["InvalidError","BooleanType","value"],"sources":["../../source/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,
|
|
1
|
+
{"version":3,"file":"Boolean.js","names":["InvalidError","BooleanType","value"],"sources":["../../source/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,mBAAmB;AAE5C,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"}
|
package/modules/types/Date.js
CHANGED
|
@@ -2,7 +2,6 @@ import parseDate from '../read/parseDate.js';
|
|
|
2
2
|
import InvalidError from './InvalidError.js';
|
|
3
3
|
export default function DateType(value, _ref) {
|
|
4
4
|
var properties = _ref.properties;
|
|
5
|
-
|
|
6
5
|
// XLSX has no specific format for dates.
|
|
7
6
|
// Sometimes a date can be heuristically detected.
|
|
8
7
|
// https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777
|
|
@@ -10,28 +9,21 @@ export default function DateType(value, _ref) {
|
|
|
10
9
|
if (isNaN(value.valueOf())) {
|
|
11
10
|
throw new InvalidError('out_of_bounds');
|
|
12
11
|
}
|
|
13
|
-
|
|
14
12
|
return value;
|
|
15
13
|
}
|
|
16
|
-
|
|
17
14
|
if (typeof value === 'number') {
|
|
18
15
|
if (isNaN(value)) {
|
|
19
16
|
throw new InvalidError('invalid_number');
|
|
20
17
|
}
|
|
21
|
-
|
|
22
18
|
if (!isFinite(value)) {
|
|
23
19
|
throw new InvalidError('out_of_bounds');
|
|
24
20
|
}
|
|
25
|
-
|
|
26
21
|
var date = parseDate(value, properties);
|
|
27
|
-
|
|
28
22
|
if (isNaN(date.valueOf())) {
|
|
29
23
|
throw new InvalidError('out_of_bounds');
|
|
30
24
|
}
|
|
31
|
-
|
|
32
25
|
return date;
|
|
33
26
|
}
|
|
34
|
-
|
|
35
27
|
throw new InvalidError('not_a_date');
|
|
36
28
|
}
|
|
37
29
|
//# sourceMappingURL=Date.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Date.js","names":["parseDate","InvalidError","DateType","value","properties","Date","isNaN","valueOf","isFinite","date"],"sources":["../../source/types/Date.js"],"sourcesContent":["import parseDate from '../read/parseDate.js'\r\nimport InvalidError from './InvalidError.js'\r\n\r\nexport default function DateType(value, { properties }) {\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 if (typeof value === 'number') {\r\n if (isNaN(value)) {\r\n throw new InvalidError('invalid_number')\r\n }\r\n if (!isFinite(value)) {\r\n throw new InvalidError('out_of_bounds')\r\n }\r\n const date = parseDate(value, properties)\r\n if (isNaN(date.valueOf())) {\r\n throw new InvalidError('out_of_bounds')\r\n }\r\n return date\r\n }\r\n throw new InvalidError('not_a_date')\r\n}"],"mappings":"AAAA,OAAOA,
|
|
1
|
+
{"version":3,"file":"Date.js","names":["parseDate","InvalidError","DateType","value","_ref","properties","Date","isNaN","valueOf","isFinite","date"],"sources":["../../source/types/Date.js"],"sourcesContent":["import parseDate from '../read/parseDate.js'\r\nimport InvalidError from './InvalidError.js'\r\n\r\nexport default function DateType(value, { properties }) {\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 if (typeof value === 'number') {\r\n if (isNaN(value)) {\r\n throw new InvalidError('invalid_number')\r\n }\r\n if (!isFinite(value)) {\r\n throw new InvalidError('out_of_bounds')\r\n }\r\n const date = parseDate(value, properties)\r\n if (isNaN(date.valueOf())) {\r\n throw new InvalidError('out_of_bounds')\r\n }\r\n return date\r\n }\r\n throw new InvalidError('not_a_date')\r\n}"],"mappings":"AAAA,OAAOA,SAAS,MAAM,sBAAsB;AAC5C,OAAOC,YAAY,MAAM,mBAAmB;AAE5C,eAAe,SAASC,QAAQA,CAACC,KAAK,EAAAC,IAAA,EAAkB;EAAA,IAAdC,UAAU,GAAAD,IAAA,CAAVC,UAAU;EACnD;EACC;EACA;EACA,IAAIF,KAAK,YAAYG,IAAI,EAAE;IACzB,IAAIC,KAAK,CAACJ,KAAK,CAACK,OAAO,CAAC,CAAC,CAAC,EAAE;MAC1B,MAAM,IAAIP,YAAY,CAAC,eAAe,CAAC;IACzC;IACA,OAAOE,KAAK;EACd;EACA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,IAAII,KAAK,CAACJ,KAAK,CAAC,EAAE;MAChB,MAAM,IAAIF,YAAY,CAAC,gBAAgB,CAAC;IAC1C;IACA,IAAI,CAACQ,QAAQ,CAACN,KAAK,CAAC,EAAE;MACpB,MAAM,IAAIF,YAAY,CAAC,eAAe,CAAC;IACzC;IACA,IAAMS,IAAI,GAAGV,SAAS,CAACG,KAAK,EAAEE,UAAU,CAAC;IACzC,IAAIE,KAAK,CAACG,IAAI,CAACF,OAAO,CAAC,CAAC,CAAC,EAAE;MACzB,MAAM,IAAIP,YAAY,CAAC,eAAe,CAAC;IACzC;IACA,OAAOS,IAAI;EACb;EACA,MAAM,IAAIT,YAAY,CAAC,YAAY,CAAC;AACtC"}
|
package/modules/types/Email.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Email.js","names":["InvalidError","Email","value","isEmail","regexp","test"],"sources":["../../source/types/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 regexp = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i\r\n\r\nexport function isEmail(value) {\r\n\treturn regexp.test(value)\r\n}"],"mappings":"AAAA,OAAOA,
|
|
1
|
+
{"version":3,"file":"Email.js","names":["InvalidError","Email","value","isEmail","regexp","test"],"sources":["../../source/types/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 regexp = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i\r\n\r\nexport function isEmail(value) {\r\n\treturn regexp.test(value)\r\n}"],"mappings":"AAAA,OAAOA,YAAY,MAAM,mBAAmB;AAE5C,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,MAAM,GAAG,0CAA0C;AAEzD,OAAO,SAASD,OAAOA,CAACD,KAAK,EAAE;EAC9B,OAAOE,MAAM,CAACC,IAAI,CAACH,KAAK,CAAC;AAC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Email.test.js","names":["isEmail","describe","it","should","equal"],"sources":["../../source/types/Email.test.js"],"sourcesContent":["import { isEmail } from './Email.js'\r\n\r\ndescribe('Email', () => {\r\n\tit('should validate an Email', () => {\r\n\t\tisEmail('123').should.equal(false)\r\n\t\tisEmail('vladimir.putin@kremlin.ru').should.equal(true)\r\n\t})\r\n})"],"mappings":"AAAA,SAASA,
|
|
1
|
+
{"version":3,"file":"Email.test.js","names":["isEmail","describe","it","should","equal"],"sources":["../../source/types/Email.test.js"],"sourcesContent":["import { isEmail } from './Email.js'\r\n\r\ndescribe('Email', () => {\r\n\tit('should validate an Email', () => {\r\n\t\tisEmail('123').should.equal(false)\r\n\t\tisEmail('vladimir.putin@kremlin.ru').should.equal(true)\r\n\t})\r\n})"],"mappings":"AAAA,SAASA,OAAO,QAAQ,YAAY;AAEpCC,QAAQ,CAAC,OAAO,EAAE,YAAM;EACvBC,EAAE,CAAC,0BAA0B,EAAE,YAAM;IACpCF,OAAO,CAAC,KAAK,CAAC,CAACG,MAAM,CAACC,KAAK,CAAC,KAAK,CAAC;IAClCJ,OAAO,CAAC,2BAA2B,CAAC,CAACG,MAAM,CAACC,KAAK,CAAC,IAAI,CAAC;EACxD,CAAC,CAAC;AACH,CAAC,CAAC"}
|
package/modules/types/Integer.js
CHANGED
|
@@ -2,11 +2,9 @@ import InvalidError from './InvalidError.js';
|
|
|
2
2
|
import NumberType from './Number.js';
|
|
3
3
|
export default function Integer(value) {
|
|
4
4
|
value = NumberType(value);
|
|
5
|
-
|
|
6
5
|
if (!isInteger(value)) {
|
|
7
6
|
throw new InvalidError('not_an_integer');
|
|
8
7
|
}
|
|
9
|
-
|
|
10
8
|
return value;
|
|
11
9
|
}
|
|
12
10
|
export function isInteger(x) {
|