read-excel-file 6.0.2 → 7.0.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 +13 -0
- package/README.md +22 -11
- package/browser/index.cjs +7 -0
- package/{index.d.ts → browser/index.d.ts} +2 -2
- package/browser/index.js +6 -0
- package/browser/package.json +17 -0
- package/bundle/read-excel-file.min.js +1 -1
- package/bundle/read-excel-file.min.js.map +1 -1
- package/commonjs/export/convertInputToNodeStream.js +45 -0
- package/commonjs/export/convertInputToNodeStream.js.map +1 -0
- package/commonjs/export/convertValuesFromUint8ArraysToStrings.js +20 -0
- package/commonjs/export/convertValuesFromUint8ArraysToStrings.js.map +1 -0
- package/commonjs/export/filterZipArchiveEntry.js +18 -0
- package/commonjs/export/filterZipArchiveEntry.js.map +1 -0
- package/commonjs/{read → export}/readSheetNamesBrowser.js +4 -4
- package/commonjs/export/readSheetNamesBrowser.js.map +1 -0
- package/commonjs/export/readSheetNamesNode.js.map +1 -0
- package/commonjs/export/readSheetNamesUniversal.js +23 -0
- package/commonjs/export/readSheetNamesUniversal.js.map +1 -0
- package/commonjs/{read → export}/readSheetNamesWebWorker.js +2 -2
- package/commonjs/export/readSheetNamesWebWorker.js.map +1 -0
- package/commonjs/{read → export}/readXlsxFileBrowser.js +6 -6
- package/commonjs/export/readXlsxFileBrowser.js.map +1 -0
- package/commonjs/{read → export}/readXlsxFileNode.js +5 -5
- package/commonjs/export/readXlsxFileNode.js.map +1 -0
- package/commonjs/export/readXlsxFileUniversal.js +24 -0
- package/commonjs/export/readXlsxFileUniversal.js.map +1 -0
- package/commonjs/{read → export}/readXlsxFileWebWorker.js +5 -5
- package/commonjs/export/readXlsxFileWebWorker.js.map +1 -0
- package/commonjs/export/unpackXlsxFileBrowser.js +38 -0
- package/commonjs/export/unpackXlsxFileBrowser.js.map +1 -0
- package/commonjs/export/unpackXlsxFileNode.js +23 -0
- package/commonjs/export/unpackXlsxFileNode.js.map +1 -0
- package/commonjs/export/unpackXlsxFileUniversal.js +23 -0
- package/commonjs/export/unpackXlsxFileUniversal.js.map +1 -0
- package/commonjs/types/Date.js +1 -1
- package/commonjs/types/Date.js.map +1 -1
- package/commonjs/{read → xlsx}/coordinates.js.map +1 -1
- package/commonjs/{read → xlsx}/dropEmptyColumns.js.map +1 -1
- package/commonjs/{read → xlsx}/dropEmptyColumns.test.js.map +1 -1
- package/commonjs/{read → xlsx}/dropEmptyRows.js.map +1 -1
- package/commonjs/{read → xlsx}/dropEmptyRows.test.js.map +1 -1
- package/commonjs/{read → xlsx}/getData.js.map +1 -1
- package/commonjs/{read → xlsx}/isDateTimestamp.js.map +1 -1
- package/commonjs/{read → xlsx}/parseCell.js.map +1 -1
- package/commonjs/{read → xlsx}/parseCellValue.js.map +1 -1
- package/commonjs/{read → xlsx}/parseCells.js.map +1 -1
- package/commonjs/{read → xlsx}/parseDate.js.map +1 -1
- package/commonjs/{read → xlsx}/parseDate.test.js.map +1 -1
- package/commonjs/{read → xlsx}/parseDimensions.js.map +1 -1
- package/commonjs/{read → xlsx}/parseFilePaths.js.map +1 -1
- package/commonjs/{read → xlsx}/parseProperties.js.map +1 -1
- package/commonjs/{read → xlsx}/parseSharedStrings.js.map +1 -1
- package/commonjs/{read → xlsx}/parseSheet.js.map +1 -1
- package/commonjs/{read → xlsx}/parseStyles.js.map +1 -1
- package/commonjs/{read/readXlsx.js → xlsx/parseXlsxFileContents.js} +10 -9
- package/commonjs/xlsx/parseXlsxFileContents.js.map +1 -0
- package/commonjs/{read/readXlsxFileContents.js → xlsx/parseXlsxFileContentsWithOptionalSchema.js} +13 -6
- package/commonjs/xlsx/parseXlsxFileContentsWithOptionalSchema.js.map +1 -0
- package/commonjs/{read → xlsx}/schema/mapToObjects.js +0 -4
- package/commonjs/xlsx/schema/mapToObjects.js.map +1 -0
- package/commonjs/{read → xlsx}/schema/mapToObjects.test.js.map +1 -1
- package/commonjs/xml/dom.js +10 -0
- package/commonjs/xml/dom.js.map +1 -1
- package/commonjs/xml/xlsx.js +10 -2
- package/commonjs/xml/xlsx.js.map +1 -1
- package/commonjs/zip/unzipFromArrayBuffer.js +74 -0
- package/commonjs/zip/unzipFromArrayBuffer.js.map +1 -0
- package/commonjs/zip/unzipFromArrayBufferSync.js +33 -0
- package/commonjs/zip/unzipFromArrayBufferSync.js.map +1 -0
- package/commonjs/zip/unzipFromStream.js +123 -0
- package/commonjs/zip/unzipFromStream.js.map +1 -0
- package/modules/export/convertInputToNodeStream.js +36 -0
- package/modules/export/convertInputToNodeStream.js.map +1 -0
- package/modules/export/convertValuesFromUint8ArraysToStrings.js +15 -0
- package/modules/export/convertValuesFromUint8ArraysToStrings.js.map +1 -0
- package/modules/export/filterZipArchiveEntry.js +12 -0
- package/modules/export/filterZipArchiveEntry.js.map +1 -0
- package/modules/{read → export}/readSheetNamesBrowser.js +4 -4
- package/modules/export/readSheetNamesBrowser.js.map +1 -0
- package/modules/export/readSheetNamesNode.js.map +1 -0
- package/modules/export/readSheetNamesUniversal.js +17 -0
- package/modules/export/readSheetNamesUniversal.js.map +1 -0
- package/modules/{read → export}/readSheetNamesWebWorker.js +2 -2
- package/modules/export/readSheetNamesWebWorker.js.map +1 -0
- package/modules/{read → export}/readXlsxFileBrowser.js +6 -6
- package/modules/export/readXlsxFileBrowser.js.map +1 -0
- package/modules/{read → export}/readXlsxFileNode.js +5 -5
- package/modules/export/readXlsxFileNode.js.map +1 -0
- package/modules/export/readXlsxFileUniversal.js +18 -0
- package/modules/export/readXlsxFileUniversal.js.map +1 -0
- package/modules/{read → export}/readXlsxFileWebWorker.js +5 -5
- package/modules/export/readXlsxFileWebWorker.js.map +1 -0
- package/modules/export/unpackXlsxFileBrowser.js +30 -0
- package/modules/export/unpackXlsxFileBrowser.js.map +1 -0
- package/modules/export/unpackXlsxFileNode.js +17 -0
- package/modules/export/unpackXlsxFileNode.js.map +1 -0
- package/modules/export/unpackXlsxFileUniversal.js +17 -0
- package/modules/export/unpackXlsxFileUniversal.js.map +1 -0
- package/modules/types/Date.js +1 -1
- package/modules/types/Date.js.map +1 -1
- package/modules/{read → xlsx}/coordinates.js.map +1 -1
- package/modules/{read → xlsx}/dropEmptyColumns.js.map +1 -1
- package/modules/{read → xlsx}/dropEmptyColumns.test.js.map +1 -1
- package/modules/{read → xlsx}/dropEmptyRows.js.map +1 -1
- package/modules/{read → xlsx}/dropEmptyRows.test.js.map +1 -1
- package/modules/{read → xlsx}/getData.js.map +1 -1
- package/modules/{read → xlsx}/isDateTimestamp.js.map +1 -1
- package/modules/{read → xlsx}/parseCell.js.map +1 -1
- package/modules/{read → xlsx}/parseCellValue.js.map +1 -1
- package/modules/{read → xlsx}/parseCells.js.map +1 -1
- package/modules/{read → xlsx}/parseDate.js.map +1 -1
- package/modules/{read → xlsx}/parseDate.test.js.map +1 -1
- package/modules/{read → xlsx}/parseDimensions.js.map +1 -1
- package/modules/{read → xlsx}/parseFilePaths.js.map +1 -1
- package/modules/{read → xlsx}/parseProperties.js.map +1 -1
- package/modules/{read → xlsx}/parseSharedStrings.js.map +1 -1
- package/modules/{read → xlsx}/parseSheet.js.map +1 -1
- package/modules/{read → xlsx}/parseStyles.js.map +1 -1
- package/modules/{read/readXlsx.js → xlsx/parseXlsxFileContents.js} +9 -8
- package/modules/xlsx/parseXlsxFileContents.js.map +1 -0
- package/modules/{read/readXlsxFileContents.js → xlsx/parseXlsxFileContentsWithOptionalSchema.js} +13 -5
- package/modules/xlsx/parseXlsxFileContentsWithOptionalSchema.js.map +1 -0
- package/modules/{read → xlsx}/schema/mapToObjects.js +0 -4
- package/modules/xlsx/schema/mapToObjects.js.map +1 -0
- package/modules/{read → xlsx}/schema/mapToObjects.test.js.map +1 -1
- package/modules/xml/dom.js +9 -0
- package/modules/xml/dom.js.map +1 -1
- package/modules/xml/xlsx.js +11 -3
- package/modules/xml/xlsx.js.map +1 -1
- package/modules/zip/unzipFromArrayBuffer.js +67 -0
- package/modules/zip/unzipFromArrayBuffer.js.map +1 -0
- package/modules/zip/unzipFromArrayBufferSync.js +27 -0
- package/modules/zip/unzipFromArrayBufferSync.js.map +1 -0
- package/modules/zip/unzipFromStream.js +119 -0
- package/modules/zip/unzipFromStream.js.map +1 -0
- package/node/index.cjs +4 -4
- package/node/index.d.ts +2 -1
- package/node/index.js +3 -3
- package/package.json +14 -9
- package/rollup.config.mjs +1 -1
- package/universal/index.cjs +7 -0
- package/universal/index.d.ts +28 -0
- package/universal/index.js +6 -0
- package/universal/package.json +17 -0
- package/web-worker/index.cjs +4 -4
- package/web-worker/index.js +3 -3
- package/commonjs/read/readSheetNamesBrowser.js.map +0 -1
- package/commonjs/read/readSheetNamesNode.js.map +0 -1
- package/commonjs/read/readSheetNamesNode.test.js.map +0 -1
- package/commonjs/read/readSheetNamesWebWorker.js.map +0 -1
- package/commonjs/read/readXlsx.js.map +0 -1
- package/commonjs/read/readXlsxFileBrowser.js.map +0 -1
- package/commonjs/read/readXlsxFileContents.js.map +0 -1
- package/commonjs/read/readXlsxFileNode.js.map +0 -1
- package/commonjs/read/readXlsxFileNode.test.js.map +0 -1
- package/commonjs/read/readXlsxFileWebWorker.js.map +0 -1
- package/commonjs/read/schema/mapToObjects.js.map +0 -1
- package/commonjs/read/unpackXlsxFileBrowser.js +0 -50
- package/commonjs/read/unpackXlsxFileBrowser.js.map +0 -1
- package/commonjs/read/unpackXlsxFileNode.js +0 -86
- package/commonjs/read/unpackXlsxFileNode.js.map +0 -1
- package/index.cjs +0 -7
- package/index.cjs.js +0 -12
- package/index.js +0 -6
- package/modules/read/readSheetNamesBrowser.js.map +0 -1
- package/modules/read/readSheetNamesNode.js.map +0 -1
- package/modules/read/readSheetNamesNode.test.js.map +0 -1
- package/modules/read/readSheetNamesWebWorker.js.map +0 -1
- package/modules/read/readXlsx.js.map +0 -1
- package/modules/read/readXlsxFileBrowser.js.map +0 -1
- package/modules/read/readXlsxFileContents.js.map +0 -1
- package/modules/read/readXlsxFileNode.js.map +0 -1
- package/modules/read/readXlsxFileNode.test.js.map +0 -1
- package/modules/read/readXlsxFileWebWorker.js.map +0 -1
- package/modules/read/schema/mapToObjects.js.map +0 -1
- package/modules/read/unpackXlsxFileBrowser.js +0 -45
- package/modules/read/unpackXlsxFileBrowser.js.map +0 -1
- package/modules/read/unpackXlsxFileNode.js +0 -78
- package/modules/read/unpackXlsxFileNode.js.map +0 -1
- package/node/index.cjs.js +0 -12
- package/web-worker/index.cjs.js +0 -12
- /package/commonjs/{read → export}/readSheetNamesNode.js +0 -0
- /package/commonjs/{read → xlsx}/coordinates.js +0 -0
- /package/commonjs/{read → xlsx}/dropEmptyColumns.js +0 -0
- /package/commonjs/{read → xlsx}/dropEmptyRows.js +0 -0
- /package/commonjs/{read → xlsx}/getData.js +0 -0
- /package/commonjs/{read → xlsx}/isDateTimestamp.js +0 -0
- /package/commonjs/{read → xlsx}/parseCell.js +0 -0
- /package/commonjs/{read → xlsx}/parseCellValue.js +0 -0
- /package/commonjs/{read → xlsx}/parseCells.js +0 -0
- /package/commonjs/{read → xlsx}/parseDate.js +0 -0
- /package/commonjs/{read → xlsx}/parseDimensions.js +0 -0
- /package/commonjs/{read → xlsx}/parseFilePaths.js +0 -0
- /package/commonjs/{read → xlsx}/parseProperties.js +0 -0
- /package/commonjs/{read → xlsx}/parseSharedStrings.js +0 -0
- /package/commonjs/{read → xlsx}/parseSheet.js +0 -0
- /package/commonjs/{read → xlsx}/parseStyles.js +0 -0
- /package/modules/{read → export}/readSheetNamesNode.js +0 -0
- /package/modules/{read → xlsx}/coordinates.js +0 -0
- /package/modules/{read → xlsx}/dropEmptyColumns.js +0 -0
- /package/modules/{read → xlsx}/dropEmptyRows.js +0 -0
- /package/modules/{read → xlsx}/getData.js +0 -0
- /package/modules/{read → xlsx}/isDateTimestamp.js +0 -0
- /package/modules/{read → xlsx}/parseCell.js +0 -0
- /package/modules/{read → xlsx}/parseCellValue.js +0 -0
- /package/modules/{read → xlsx}/parseCells.js +0 -0
- /package/modules/{read → xlsx}/parseDate.js +0 -0
- /package/modules/{read → xlsx}/parseDimensions.js +0 -0
- /package/modules/{read → xlsx}/parseFilePaths.js +0 -0
- /package/modules/{read → xlsx}/parseProperties.js +0 -0
- /package/modules/{read → xlsx}/parseSharedStrings.js +0 -0
- /package/modules/{read → xlsx}/parseSheet.js +0 -0
- /package/modules/{read → xlsx}/parseStyles.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapToObjects.js","names":["NumberType","StringType","BooleanType","DateType","DEFAULT_OPTIONS","schemaPropertyValueForMissingColumn","undefined","schemaPropertyValueForMissingValue","schemaPropertyShouldSkipRequiredValidationForMissingColumn","getEmptyObjectValue","getEmptyArrayValue","isColumnOriented","ignoreEmptyRows","arrayValueSeparator","mapToObjects","data","schema","options","_objectSpread","_options","rowIndexSourceMapOriginal","rowIndexSourceMap","schemaTransformOptions","_objectWithoutProperties","_excluded","slice","validateSchema","transpose","filter","row","i","isEmptyRow","every","cell","splice","columns","results","errors","length","result","read","push","_iterator","_createForOfIteratorHelperLoose","_step","done","error","value","rows","rowIndex","path","object","isEmptyObject","createError","_ref","schemaEntry","errorMessage","reason","column","type","pendingRequiredChecks","_loop","key","_Object$keys","_i","propertyName","columnTitle","propertyPath","concat","cellValue","columnIndex","indexOf","isMissingColumn","Array","isArray","array","parseArray","map","_value","parseValue","isEmpty","isEmptyValue","required","Object","keys","_i2","_pendingRequiredCheck","_pendingRequiredCheck2","skipRequiredValidation","isRequired","parse","Error","parseValueOfType","oneOf","validate","message","parseCustomValue","parsedValue","String","Number","Date","properties","Boolean","name","getBlock","string","endCharacter","startIndex","substring","character","block","blocks","index","_getBlock","_getBlock2","_slicedToArray","trim","_","_i3","_Object$keys2","_typeof"],"sources":["../../../source/xlsx/schema/mapToObjects.js"],"sourcesContent":["import NumberType from '../../types/Number.js'\r\nimport StringType from '../../types/String.js'\r\nimport BooleanType from '../../types/Boolean.js'\r\nimport DateType from '../../types/Date.js'\r\n\r\nconst DEFAULT_OPTIONS = {\r\n schemaPropertyValueForMissingColumn: undefined,\r\n schemaPropertyValueForMissingValue: null,\r\n schemaPropertyShouldSkipRequiredValidationForMissingColumn: () => false,\r\n // `getEmptyObjectValue(object, { path })` applies to both the top-level object\r\n // and any of its sub-objects.\r\n getEmptyObjectValue: () => null,\r\n getEmptyArrayValue: () => null,\r\n isColumnOriented: false,\r\n ignoreEmptyRows: true,\r\n arrayValueSeparator: ','\r\n}\r\n\r\n/**\r\n * Converts spreadsheet-alike data structure into an array of objects.\r\n *\r\n * Parameters:\r\n *\r\n * * `data` — An array of rows, each row being an array of cells. The first row should be the list of column headers and the rest of the rows should be the data.\r\n * * `schema` — A \"to JSON\" convertion schema (see above).\r\n * * `options` — (optional) Schema conversion parameters of `read-excel-file`:\r\n * * `schemaPropertyValueForMissingColumn` — By default, when some of the `schema` columns are missing in the input `data`, those properties are set to `undefined` in the output objects. Pass `schemaPropertyValueForMissingColumn: null` to set such \"missing column\" properties to `null` in the output objects.\r\n * * `schemaPropertyValueForNullCellValue` — By default, when it encounters a `null` value in a cell in input `data`, it sets it to `undefined` in the output object. Pass `schemaPropertyValueForNullCellValue: null` to make it set such values as `null`s in output objects.\r\n * * `schemaPropertyValueForUndefinedCellValue` — By default, when it encounters an `undefined` value in a cell in input `data`, it it sets it to `undefined` in the output object. Pass `schemaPropertyValueForUndefinedCellValue: null` to make it set such values as `null`s in output objects.\r\n * * `schemaPropertyShouldSkipRequiredValidationForMissingColumn: (column: string, { object }) => boolean` — By default, it does apply `required` validation to `schema` properties for which columns are missing in the input `data`. One could pass a custom `schemaPropertyShouldSkipRequiredValidationForMissingColumn(column, { object })` to disable `required` validation for missing columns in some or all cases.\r\n * * `getEmptyObjectValue(object, { path? })` — By default, it returns `null` for \"empty\" objects. One could override that value using `getEmptyObjectValue(object, { path })` parameter. The value applies to both top-level object and any nested sub-objects in case of a nested schema, hence the additional (optional) `path?: string` parameter.\r\n * * `getEmptyArrayValue(array, { path })` — By default, it returns `null` for an \"empty\" array value. One could override that value using `getEmptyArrayValue(array, { path })` parameter.\r\n *\r\n * When parsing a property value, in case of an error, the value of that property is gonna be `undefined`.\r\n *\r\n * @param {any[][]} data - An array of rows, each row being an array of cells.\r\n * @param {object} schema\r\n * @param {object} [options]\r\n * @param {null} [options.schemaPropertyValueForMissingColumn] — By default, when some of the `schema` columns are missing in the input `data`, those properties are set to `undefined` in the output objects. Pass `schemaPropertyValueForMissingColumn: null` to set such \"missing column\" properties to `null` in the output objects.\r\n * @param {null} [options.schemaPropertyValueForMissingValue] — By default, when it encounters a `null` value in a cell in input `data`, it leaves the value as is. Pass a custom `schemaPropertyValueForMissingValue` to make it set such values to that value.\r\n * @param {object} [options.properties] — An optional object with optional property `epoch1904: true/false`. It is used when parsing dates.\r\n * @param {boolean} [options.schemaPropertyShouldSkipRequiredValidationForMissingColumn(column: string, { object })] — By default, it does apply `required` validation to `schema` properties for which columns are missing in the input `data`. One could pass a custom `schemaPropertyShouldSkipRequiredValidationForMissingColumn(column, { object })` to disable `required` validation for missing columns in some or all cases.\r\n * @param {function} [options.getEmptyObjectValue(object, { path })] — By default, it returns `null` for an \"empty\" resulting object. One could override that value using `getEmptyObjectValue(object, { path })` parameter. The value applies to both top-level object and any nested sub-objects in case of a nested schema, hence the additional `path?: string` parameter.\r\n * @param {function} [getEmptyArrayValue(array, { path })] — By default, it returns `null` for an \"empty\" array value. One could override that value using `getEmptyArrayValue(array, { path })` parameter.\r\n * @param {boolean} [options.isColumnOriented] — By default, the headers are assumed to be the first row in the `data`. Pass `isColumnOriented: true` if the headers are the first column in the `data`. i.e. if `data` is \"transposed\".\r\n * @param {string} [options.arrayValueSeparator] — When specified, string values will be split by this separator to get the array.\r\n * @param {object} [options.rowIndexSourceMap] — Custom row indexes of `data` rows. If present, will overwrite the indexes of `data` rows with the indexes from this `rowIndexSourceMap`.\r\n * @return {object[]}\r\n */\r\nexport default function mapToObjects(data, schema, options) {\r\n if (options) {\r\n options = {\r\n ...DEFAULT_OPTIONS,\r\n ...options\r\n }\r\n } else {\r\n options = DEFAULT_OPTIONS\r\n }\r\n\r\n const {\r\n isColumnOriented,\r\n ignoreEmptyRows,\r\n rowIndexSourceMap: rowIndexSourceMapOriginal,\r\n ...schemaTransformOptions\r\n } = options\r\n\r\n // `rowIndexSourceMap` could be mutated by `ignoreEmptyRows: true` option.\r\n // Create a copy of it so that the original `rowIndexSourceMap` is not affected by those changes.\r\n let rowIndexSourceMap = rowIndexSourceMapOriginal && rowIndexSourceMapOriginal.slice()\r\n\r\n validateSchema(schema)\r\n\r\n if (isColumnOriented) {\r\n data = transpose(data)\r\n }\r\n\r\n\tif (ignoreEmptyRows) {\r\n\t\tdata = data.filter((row, i) => {\r\n const isEmptyRow = row.every(cell => cell === null)\r\n if (isEmptyRow) {\r\n // Adjust `rowIndexSourceMap` now that the row has been removed.\r\n if (rowIndexSourceMap) {\r\n // Remove the `rowIndexSourceMap` entry that corresponds to the removed row.\r\n rowIndexSourceMap.splice(i, 1)\r\n }\r\n return false;\r\n }\r\n return true;\r\n })\r\n\t}\r\n\r\n const columns = data[0]\r\n\r\n const results = []\r\n const errors = []\r\n\r\n for (let i = 1; i < data.length; i++) {\r\n const result = read(schema, data[i], i, undefined, columns, errors, schemaTransformOptions)\r\n results.push(result)\r\n }\r\n\r\n // Set the correct `row` number in `errors` if a custom `rowIndexSourceMap` is supplied.\r\n if (rowIndexSourceMap) {\r\n for (const error of errors) {\r\n // Convert the `row` index in `data` to the\r\n // actual `row` index in the spreadsheet.\r\n // `- 1` converts row number to row index.\r\n // `+ 1` converts row index to row number.\r\n error.row = rowIndexSourceMap[error.row - 1] + 1\r\n }\r\n }\r\n\r\n return {\r\n rows: results,\r\n errors\r\n }\r\n}\r\n\r\nfunction read(schema, row, rowIndex, path, columns, errors, options) {\r\n const object = {}\r\n let isEmptyObject = true\r\n\r\n const createError = ({\r\n schemaEntry,\r\n value,\r\n error: errorMessage,\r\n reason\r\n }) => {\r\n const error = {\r\n error: errorMessage,\r\n row: rowIndex + 1,\r\n column: schemaEntry.column,\r\n value\r\n }\r\n if (reason) {\r\n error.reason = reason\r\n }\r\n // * Regular values specify a `type?` property, which is included in the `error` object.\r\n // * Nested objects specify a `schema` property, which is not included in the `error` object.\r\n if (schemaEntry.type) {\r\n error.type = schemaEntry.type\r\n }\r\n return error\r\n }\r\n\r\n const pendingRequiredChecks = []\r\n\r\n // For each schema entry.\r\n for (const key of Object.keys(schema)) {\r\n const schemaEntry = schema[key]\r\n\r\n const propertyName = key\r\n const columnTitle = schemaEntry.column\r\n\r\n // The path of this property inside the resulting object.\r\n const propertyPath = `${path || ''}.${propertyName}`\r\n\r\n // Read the cell value for the schema entry.\r\n let cellValue\r\n const columnIndex = columns.indexOf(columnTitle)\r\n const isMissingColumn = columnIndex < 0\r\n if (!isMissingColumn) {\r\n cellValue = row[columnIndex]\r\n }\r\n\r\n let value\r\n let error\r\n let reason\r\n\r\n // Get property `value` from cell value.\r\n if (schemaEntry.schema) {\r\n value = read(schemaEntry.schema, row, rowIndex, propertyPath, columns, errors, options)\r\n } else {\r\n if (isMissingColumn) {\r\n if ('schemaPropertyValueForMissingColumn' in options) {\r\n value = options.schemaPropertyValueForMissingColumn\r\n }\r\n }\r\n else if (cellValue === undefined) {\r\n // This isn't supposed to be possible. Cell values are always `null` when cells are empty.\r\n // Employ some sensible fallback behavior here.\r\n if ('schemaPropertyValueForMissingValue' in options) {\r\n value = options.schemaPropertyValueForMissingValue\r\n }\r\n }\r\n else if (cellValue === null) {\r\n if ('schemaPropertyValueForMissingValue' in options) {\r\n value = options.schemaPropertyValueForMissingValue\r\n }\r\n }\r\n else if (Array.isArray(schemaEntry.type)) {\r\n const array = parseArray(cellValue, options.arrayValueSeparator).map((_value) => {\r\n if (error) {\r\n return\r\n }\r\n const result = parseValue(_value, schemaEntry, options)\r\n if (result.error) {\r\n // In case of an error, `value` won't be returned and will just be reported\r\n // as part of an `error` object, so it's fine assigning just an element of the array.\r\n value = _value\r\n error = result.error\r\n reason = result.reason\r\n }\r\n return result.value\r\n })\r\n if (!error) {\r\n const isEmpty = array.every(isEmptyValue)\r\n value = isEmpty ? options.getEmptyArrayValue(array, { path: propertyPath }) : array\r\n }\r\n } else {\r\n const result = parseValue(cellValue, schemaEntry, options)\r\n error = result.error\r\n reason = result.reason\r\n value = error ? cellValue : result.value\r\n }\r\n }\r\n\r\n // Apply `required` validation if the value is \"empty\".\r\n if (!error && isEmptyValue(value)) {\r\n if (schemaEntry.required) {\r\n // Will perform this `required()` validation in the end,\r\n // when all properties of the mapped object have been mapped.\r\n pendingRequiredChecks.push({ schemaEntry, value, isMissingColumn })\r\n }\r\n }\r\n\r\n if (error) {\r\n // If there was an error then the property value in the `object` will be `undefined`,\r\n // i.e it won't add the property value to the mapped object.\r\n errors.push(createError({\r\n schemaEntry,\r\n value,\r\n error,\r\n reason\r\n }))\r\n } else {\r\n // Possibly unmark the mapped object as \"empty\".\r\n if (isEmptyObject && !isEmptyValue(value)) {\r\n isEmptyObject = false\r\n }\r\n // Set the value in the mapped object.\r\n // Skip setting `undefined` values because they're already `undefined`\r\n // due to not having previously been set.\r\n if (value !== undefined) {\r\n object[propertyName] = value\r\n }\r\n }\r\n }\r\n\r\n // Return `null` for an \"empty\" mapped object.\r\n if (isEmptyObject) {\r\n return options.getEmptyObjectValue(object, { path })\r\n }\r\n\r\n // Perform any `required` validations.\r\n for (const { schemaEntry, value, isMissingColumn } of pendingRequiredChecks) {\r\n // Can optionally skip `required` validation for missing columns.\r\n const skipRequiredValidation = isMissingColumn && options.schemaPropertyShouldSkipRequiredValidationForMissingColumn(schemaEntry.column, { object })\r\n if (!skipRequiredValidation) {\r\n const { required } = schemaEntry\r\n const isRequired = typeof required === 'boolean' ? required : required(object)\r\n if (isRequired) {\r\n errors.push(createError({\r\n schemaEntry,\r\n value,\r\n error: 'required'\r\n }))\r\n }\r\n }\r\n }\r\n\r\n // Return the mapped object.\r\n return object\r\n}\r\n\r\n/**\r\n * Converts textual value to a javascript typed value.\r\n * @param {any} value\r\n * @param {object} schemaEntry\r\n * @return {{ value: any, error: string }}\r\n */\r\nexport function parseValue(value, schemaEntry, options) {\r\n if (value === null) {\r\n return { value: null }\r\n }\r\n let result\r\n if (schemaEntry.parse) {\r\n throw new Error('`schemaEntry.parse` property was renamed to `schemaEntry.type`')\r\n } else if (schemaEntry.type) {\r\n result = parseValueOfType(\r\n value,\r\n // Supports parsing array types.\r\n // See `parseArray()` function for more details.\r\n // Example `type`: String[]\r\n // Input: 'Barack Obama, \"String, with, colons\", Donald Trump'\r\n // Output: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n Array.isArray(schemaEntry.type) ? schemaEntry.type[0] : schemaEntry.type,\r\n options\r\n )\r\n } else {\r\n result = { value: value }\r\n // throw new Error('Invalid schema entry: no `type` specified:\\n\\n' + JSON.stringify(schemaEntry, null, 2))\r\n }\r\n // If errored then return the error.\r\n if (result.error) {\r\n return result\r\n }\r\n if (result.value !== null) {\r\n if (schemaEntry.oneOf && schemaEntry.oneOf.indexOf(result.value) < 0) {\r\n return { error: 'invalid', reason: 'unknown' }\r\n }\r\n if (schemaEntry.validate) {\r\n try {\r\n schemaEntry.validate(result.value)\r\n } catch (error) {\r\n return { error: error.message }\r\n }\r\n }\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * Converts textual value to a custom value using supplied `.parse()`.\r\n * @param {any} value\r\n * @param {function} parse\r\n * @return {{ value: any, error: string }}\r\n */\r\nfunction parseCustomValue(value, parse) {\r\n try {\r\n const parsedValue = parse(value)\r\n if (parsedValue === undefined) {\r\n return { value: null }\r\n }\r\n return { value: parsedValue }\r\n } catch (error) {\r\n const result = { error: error.message }\r\n if (error.reason) {\r\n result.reason = error.reason;\r\n }\r\n return result\r\n }\r\n}\r\n\r\n/**\r\n * Converts textual value to a javascript typed value.\r\n * @param {any} value\r\n * @param {} type\r\n * @return {{ value: (string|number|Date|boolean), error: string, reason?: string }}\r\n */\r\nfunction parseValueOfType(value, type, options) {\r\n switch (type) {\r\n case String:\r\n return parseCustomValue(value, StringType)\r\n\r\n case Number:\r\n return parseCustomValue(value, NumberType)\r\n\r\n case Date:\r\n return parseCustomValue(value, (value) => DateType(value, { properties: options.properties }))\r\n\r\n case Boolean:\r\n return parseCustomValue(value, BooleanType)\r\n\r\n default:\r\n if (typeof type === 'function') {\r\n return parseCustomValue(value, type)\r\n }\r\n throw new Error(`Unsupported schema type: ${type && type.name || type}`)\r\n }\r\n}\r\n\r\nexport function getBlock(string, endCharacter, startIndex) {\r\n let i = 0\r\n let substring = ''\r\n let character\r\n while (startIndex + i < string.length) {\r\n const character = string[startIndex + i]\r\n if (character === endCharacter) {\r\n return [substring, i]\r\n }\r\n else if (character === '\"') {\r\n const block = getBlock(string, '\"', startIndex + i + 1)\r\n substring += block[0]\r\n i += '\"'.length + block[1] + '\"'.length\r\n }\r\n else {\r\n substring += character\r\n i++\r\n }\r\n }\r\n return [substring, i]\r\n}\r\n\r\n/**\r\n * Parses a string of comma-separated substrings into an array of substrings.\r\n * (the `export` is just for tests)\r\n * @param {string} string — A string of comma-separated substrings.\r\n * @return {string[]} An array of substrings.\r\n */\r\nexport function parseArray(string, arrayValueSeparator) {\r\n const blocks = []\r\n let index = 0\r\n while (index < string.length) {\r\n const [substring, length] = getBlock(string, arrayValueSeparator, index)\r\n index += length + arrayValueSeparator.length\r\n blocks.push(substring.trim())\r\n }\r\n return blocks\r\n}\r\n\r\n// Transpose a 2D array.\r\n// https://stackoverflow.com/questions/17428587/transposing-a-2d-array-in-javascript\r\nconst transpose = array => array[0].map((_, i) => array.map(row => row[i]))\r\n\r\nfunction validateSchema(schema) {\r\n for (const key of Object.keys(schema)) {\r\n const schemaEntry = schema[key]\r\n // Validate that the `schema` is not using a deprecated `type: nestedSchema` format.\r\n if (typeof schemaEntry.type === 'object' && !Array.isArray(schemaEntry.type)) {\r\n throw new Error('When defining a nested schema, use a `schema` property instead of a `type` property')\r\n }\r\n // Validate that every property has a source `column` title specified for it.\r\n if (!schemaEntry.schema) {\r\n if (!schemaEntry.column) {\r\n throw new Error(`\"column\" not defined for schema entry \"${key}\".`)\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction isEmptyValue(value) {\r\n return value === undefined || value === null\r\n}"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapToObjects.test.js","names":["mapToObjects","parseArray","getBlock","Integer","URL","Email","date","convertToUTCTimezone","Date","describe","it","should","deep","equal","_mapToObjects","parse","getTimezoneOffset","column","type","number","Number","Boolean","string","String","phone","value","phoneType","rows","errors","toISOString","_mapToObjects2","_mapToObjects3","required","error","row","_mapToObjects4","ignoreEmptyRows","_mapToObjects5","_mapToObjects6","names","_mapToObjects7","_mapToObjects8","length","reason","_mapToObjects9","_mapToObjects10","_mapToObjects11","name","validate","Error","_mapToObjects12","_mapToObjects13","invalid","_mapToObjects14","_mapToObjects15","_mapToObjects16","rowIndexSourceMap","_mapToObjects17","status","oneOf","_mapToObjects18","_mapToObjects19","a","b","c","schema","_mapToObjects20","column1","column2","column4","column5","_mapToObjects21","schemaPropertyValueForMissingColumn","_mapToObjects22","_mapToObjects23","schemaPropertyValueForMissingValue","undefined","_mapToObjects24","_mapToObjects25","schemaPropertyValueForNullCellValue","_mapToObjects26","_mapToObjects27","_mapToObjects28","schemaPropertyShouldSkipRequiredValidationForMissingColumn","_mapToObjects29","getTime"],"sources":["../../../source/read/schema/mapToObjects.test.js"],"sourcesContent":["import mapToObjects, { parseArray, getBlock } from './mapToObjects.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('mapToObjects', () => {\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING',\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t'123',\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc',\r\n\t\t\t\t'(123) 456-7890',\r\n\t\t\t\t'(123) 456-7890'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tdate: {\r\n\t\t\t\tcolumn: 'DATE',\r\n\t\t\t\ttype: Date\r\n\t\t\t},\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number\r\n\t\t\t},\r\n\t\t\tboolean: {\r\n\t\t\t\tcolumn: 'BOOLEAN',\r\n\t\t\t\ttype: Boolean\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING',\r\n\t\t\t\ttype: String\r\n\t\t\t},\r\n\t\t\tphone: {\r\n\t\t\t\tcolumn: 'PHONE',\r\n\t\t\t\ttype(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tphoneType: {\r\n\t\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\t\ttype(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t123,\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tdate: {\r\n\t\t\t\tcolumn: 'DATE'\r\n\t\t\t},\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER'\r\n\t\t\t},\r\n\t\t\tboolean: {\r\n\t\t\t\tcolumn: 'BOOLEAN'\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING'\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'STRING'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\tnull,\r\n\t\t\t\t'abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 (`ignoreEmptyRows: false`', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tignoreEmptyRows: false\r\n\t\t})\r\n\r\n\t\trows.should.deep.equal([null])\r\n\t})\r\n\r\n\tit('shouldn\\'t require fields when cell value is empty and object is empty too (`ignoreEmptyRows` not specified)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should parse arrays (`ignoreEmptyRows: false`)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NAMES'\r\n\t\t\t], [\r\n\t\t\t\t'Barack Obama, \"String, with, colons\", Donald Trump'\r\n\t\t\t], [\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnames: {\r\n\t\t\t\tcolumn: 'NAMES',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tignoreEmptyRows: false\r\n\t\t})\r\n\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 arrays (`ignoreEmptyRows` not specified)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NAMES'\r\n\t\t\t], [\r\n\t\t\t\t'Barack Obama, \"String, with, colons\", Donald Trump'\r\n\t\t\t], [\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnames: {\r\n\t\t\t\tcolumn: 'NAMES',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t})\r\n\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'INTEGER'\r\n\t\t\t], [\r\n\t\t\t\t'1'\r\n\t\t\t], [\r\n\t\t\t\t'1.2'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'INTEGER',\r\n\t\t\t\ttype: Integer\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'URL'\r\n\t\t\t], [\r\n\t\t\t\t'https://kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'kremlin.ru'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'URL',\r\n\t\t\t\ttype: URL\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'EMAIL'\r\n\t\t\t], [\r\n\t\t\t\t'vladimir.putin@kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'EMAIL',\r\n\t\t\t\ttype: Email\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NAME'\r\n\t\t\t], [\r\n\t\t\t\t'George Bush'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tname: {\r\n\t\t\t\tcolumn: 'NAME',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true,\r\n\t\t\t\tvalidate: (value) => {\r\n\t\t\t\t\tif (value === 'George Bush') {\r\n\t\t\t\t\t\tthrow new Error('custom-error')\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'TRUE',\r\n\t\t\t\t'FALSE',\r\n\t\t\t\t'INVALID'\r\n\t\t\t], [\r\n\t\t\t\ttrue,\r\n\t\t\t\tfalse,\r\n\t\t\t\t'TRUE'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\ttrue: {\r\n\t\t\t\tcolumn: 'TRUE',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tfalse: {\r\n\t\t\t\tcolumn: 'FALSE',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tinvalid: {\r\n\t\t\t\tcolumn: 'INVALID',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\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\tcolumn: 'DATE',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tinvalid: {\r\n\t\t\t\tcolumn: 'INVALID',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 type = () => {\r\n\t\t\tthrow new Error('invalid')\r\n\t\t}\r\n\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\t'123',\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tphone: {\r\n\t\t\t\tcolumn: 'PHONE',\r\n\t\t\t\ttype\r\n\t\t\t},\r\n\t\t\tphoneType: {\r\n\t\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\t\ttype\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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\ttype\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\ttype\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\trowIndexSourceMap: [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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'STARTED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tstatus: {\r\n\t\t\t\tcolumn: 'STATUS',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(0)\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (not valid)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'SCHEDULED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tstatus: {\r\n\t\t\t\tcolumn: 'STATUS',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', 'ca', null],\r\n\t\t\t\t['a', null]\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\ta: {\r\n\t\t\t\t\tcolumn: 'A',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tb: {\r\n\t\t\t\t\tcolumn: 'B',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tc: {\r\n\t\t\t\t\tcolumn: 'C',\r\n \t\t\tschema: {\r\n\t\t\t\t\t\ta: {\r\n\t\t\t\t\t\t\tcolumn: 'CA',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tb: {\r\n\t\t\t\t\t\t\tcolumn: 'CB',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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 (`schemaPropertyValueForMissingValue` option is not passed) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 (`schemaPropertyValueForMissingValue: undefined`) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tschemaPropertyValueForMissingValue: undefined\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\t// column4: undefined,\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` option is not passed) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 (`schemaPropertyValueForNullCellValue: null`) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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
|
+
{"version":3,"file":"mapToObjects.test.js","names":["mapToObjects","parseArray","getBlock","Integer","URL","Email","date","convertToUTCTimezone","Date","describe","it","should","deep","equal","_mapToObjects","parse","getTimezoneOffset","column","type","number","Number","Boolean","string","String","phone","value","phoneType","rows","errors","toISOString","_mapToObjects2","_mapToObjects3","required","error","row","_mapToObjects4","ignoreEmptyRows","_mapToObjects5","_mapToObjects6","names","_mapToObjects7","_mapToObjects8","length","reason","_mapToObjects9","_mapToObjects10","_mapToObjects11","name","validate","Error","_mapToObjects12","_mapToObjects13","invalid","_mapToObjects14","_mapToObjects15","_mapToObjects16","rowIndexSourceMap","_mapToObjects17","status","oneOf","_mapToObjects18","_mapToObjects19","a","b","c","schema","_mapToObjects20","column1","column2","column4","column5","_mapToObjects21","schemaPropertyValueForMissingColumn","_mapToObjects22","_mapToObjects23","schemaPropertyValueForMissingValue","undefined","_mapToObjects24","_mapToObjects25","schemaPropertyValueForNullCellValue","_mapToObjects26","_mapToObjects27","_mapToObjects28","schemaPropertyShouldSkipRequiredValidationForMissingColumn","_mapToObjects29","getTime"],"sources":["../../../source/xlsx/schema/mapToObjects.test.js"],"sourcesContent":["import mapToObjects, { parseArray, getBlock } from './mapToObjects.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('mapToObjects', () => {\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING',\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t'123',\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc',\r\n\t\t\t\t'(123) 456-7890',\r\n\t\t\t\t'(123) 456-7890'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tdate: {\r\n\t\t\t\tcolumn: 'DATE',\r\n\t\t\t\ttype: Date\r\n\t\t\t},\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number\r\n\t\t\t},\r\n\t\t\tboolean: {\r\n\t\t\t\tcolumn: 'BOOLEAN',\r\n\t\t\t\ttype: Boolean\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING',\r\n\t\t\t\ttype: String\r\n\t\t\t},\r\n\t\t\tphone: {\r\n\t\t\t\tcolumn: 'PHONE',\r\n\t\t\t\ttype(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tphoneType: {\r\n\t\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\t\ttype(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t123,\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tdate: {\r\n\t\t\t\tcolumn: 'DATE'\r\n\t\t\t},\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER'\r\n\t\t\t},\r\n\t\t\tboolean: {\r\n\t\t\t\tcolumn: 'BOOLEAN'\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING'\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'STRING'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\tnull,\r\n\t\t\t\t'abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tstring: {\r\n\t\t\t\tcolumn: 'STRING',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 (`ignoreEmptyRows: false`', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tignoreEmptyRows: false\r\n\t\t})\r\n\r\n\t\trows.should.deep.equal([null])\r\n\t})\r\n\r\n\tit('shouldn\\'t require fields when cell value is empty and object is empty too (`ignoreEmptyRows` not specified)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should parse arrays (`ignoreEmptyRows: false`)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NAMES'\r\n\t\t\t], [\r\n\t\t\t\t'Barack Obama, \"String, with, colons\", Donald Trump'\r\n\t\t\t], [\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnames: {\r\n\t\t\t\tcolumn: 'NAMES',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tignoreEmptyRows: false\r\n\t\t})\r\n\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 arrays (`ignoreEmptyRows` not specified)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NAMES'\r\n\t\t\t], [\r\n\t\t\t\t'Barack Obama, \"String, with, colons\", Donald Trump'\r\n\t\t\t], [\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnames: {\r\n\t\t\t\tcolumn: 'NAMES',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t})\r\n\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'INTEGER'\r\n\t\t\t], [\r\n\t\t\t\t'1'\r\n\t\t\t], [\r\n\t\t\t\t'1.2'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'INTEGER',\r\n\t\t\t\ttype: Integer\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'URL'\r\n\t\t\t], [\r\n\t\t\t\t'https://kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'kremlin.ru'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'URL',\r\n\t\t\t\ttype: URL\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'EMAIL'\r\n\t\t\t], [\r\n\t\t\t\t'vladimir.putin@kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tvalue: {\r\n\t\t\t\tcolumn: 'EMAIL',\r\n\t\t\t\ttype: Email\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NAME'\r\n\t\t\t], [\r\n\t\t\t\t'George Bush'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tname: {\r\n\t\t\t\tcolumn: 'NAME',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true,\r\n\t\t\t\tvalidate: (value) => {\r\n\t\t\t\t\tif (value === 'George Bush') {\r\n\t\t\t\t\t\tthrow new Error('custom-error')\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'TRUE',\r\n\t\t\t\t'FALSE',\r\n\t\t\t\t'INVALID'\r\n\t\t\t], [\r\n\t\t\t\ttrue,\r\n\t\t\t\tfalse,\r\n\t\t\t\t'TRUE'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\ttrue: {\r\n\t\t\t\tcolumn: 'TRUE',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tfalse: {\r\n\t\t\t\tcolumn: 'FALSE',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tinvalid: {\r\n\t\t\t\tcolumn: 'INVALID',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\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\tcolumn: 'DATE',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tinvalid: {\r\n\t\t\t\tcolumn: 'INVALID',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 type = () => {\r\n\t\t\tthrow new Error('invalid')\r\n\t\t}\r\n\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\t'123',\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tphone: {\r\n\t\t\t\tcolumn: 'PHONE',\r\n\t\t\t\ttype\r\n\t\t\t},\r\n\t\t\tphoneType: {\r\n\t\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\t\ttype\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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\ttype\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\ttype\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tnumber: {\r\n\t\t\t\tcolumn: 'NUMBER',\r\n\t\t\t\ttype: Number\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\trowIndexSourceMap: [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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'STARTED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tstatus: {\r\n\t\t\t\tcolumn: 'STATUS',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(0)\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (not valid)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'SCHEDULED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tstatus: {\r\n\t\t\t\tcolumn: 'STATUS',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', 'ca', null],\r\n\t\t\t\t['a', null]\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\ta: {\r\n\t\t\t\t\tcolumn: 'A',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tb: {\r\n\t\t\t\t\tcolumn: 'B',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tc: {\r\n\t\t\t\t\tcolumn: 'C',\r\n \t\t\tschema: {\r\n\t\t\t\t\t\ta: {\r\n\t\t\t\t\t\t\tcolumn: 'CA',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tb: {\r\n\t\t\t\t\t\t\tcolumn: 'CB',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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 (`schemaPropertyValueForMissingValue` option is not passed) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 (`schemaPropertyValueForMissingValue: undefined`) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tschemaPropertyValueForMissingValue: undefined\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\t// column4: undefined,\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` option is not passed) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\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 (`schemaPropertyValueForNullCellValue: null`) (`required: false`)', () => {\r\n\t\tconst { rows, errors } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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 } = mapToObjects([\r\n\t\t\t[\r\n\t\t\t\t'COLUMN_2',\r\n\t\t\t\t'COLUMN_3',\r\n\t\t\t\t'COLUMN_4'\r\n\t\t\t], [\r\n\t\t\t\t'12',\r\n\t\t\t\t'13',\r\n\t\t\t\t'14'\r\n\t\t\t], [\r\n\t\t\t\t'22',\r\n\t\t\t\t'23',\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tcolumn1: {\r\n\t\t\t\tcolumn: 'COLUMN_1',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn2: {\r\n\t\t\t\tcolumn: 'COLUMN_2',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn4: {\r\n\t\t\t\tcolumn: 'COLUMN_4',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: false\r\n\t\t\t},\r\n\t\t\tcolumn5: {\r\n\t\t\t\tcolumn: 'COLUMN_5',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\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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"}
|
package/modules/xml/dom.js
CHANGED
|
@@ -67,6 +67,15 @@ export function isElement(node) {
|
|
|
67
67
|
// https://www.w3schools.com/xml/prop_element_nodetype.asp
|
|
68
68
|
return node.nodeType === 1;
|
|
69
69
|
}
|
|
70
|
+
export function getFirstElementChild(element) {
|
|
71
|
+
var i = 0;
|
|
72
|
+
while (i < element.childNodes.length) {
|
|
73
|
+
if (isElement(element.childNodes[i])) {
|
|
74
|
+
return element.childNodes[i];
|
|
75
|
+
}
|
|
76
|
+
i++;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
70
79
|
|
|
71
80
|
// This function is only used for occasional debug messages.
|
|
72
81
|
export function getOuterXml(node) {
|
package/modules/xml/dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","names":["findChild","node","tagName","i","childNodes","length","childNode","nodeType","getTagName","findChildren","results","push","forEach","func","map","NAMESPACE_REG_EXP","element","replace","isElement","getOuterXml","textContent","xml","j","attributes","name","value"],"sources":["../../source/xml/dom.js"],"sourcesContent":["export function findChild(node, tagName) {\r\n\tlet i = 0\r\n\twhile (i < node.childNodes.length) {\r\n\t\tconst childNode = node.childNodes[i]\r\n\t\t// `nodeType: 1` means \"Element\".\r\n\t\t// https://www.w3schools.com/xml/prop_element_nodetype.asp\r\n\t\tif (childNode.nodeType === 1 && getTagName(childNode) === tagName) {\r\n\t\t\treturn childNode\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n}\r\n\r\nexport function findChildren(node, tagName) {\r\n\tconst results = []\r\n\tlet i = 0\r\n\twhile (i < node.childNodes.length) {\r\n\t\tconst childNode = node.childNodes[i]\r\n\t\t// `nodeType: 1` means \"Element\".\r\n\t\t// https://www.w3schools.com/xml/prop_element_nodetype.asp\r\n\t\tif (childNode.nodeType === 1 && getTagName(childNode) === tagName) {\r\n\t\t\tresults.push(childNode)\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n\treturn results\r\n}\r\n\r\nexport function forEach(node, tagName, func) {\r\n\t// if (typeof tagName === 'function') {\r\n\t// \tfunc = tagName\r\n\t// \ttagName = undefined\r\n\t// }\r\n\tlet i = 0\r\n\twhile (i < node.childNodes.length) {\r\n\t\tconst childNode = node.childNodes[i]\r\n\t\tif (tagName) {\r\n\t\t\t// `nodeType: 1` means \"Element\".\r\n\t\t\t// https://www.w3schools.com/xml/prop_element_nodetype.asp\r\n\t\t\tif (childNode.nodeType === 1 && getTagName(childNode) === tagName) {\r\n\t\t\t\tfunc(childNode, i)\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfunc(childNode, i)\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n}\r\n\r\nexport function map(node, tagName, func) {\r\n\tconst results = []\r\n\tforEach(node, tagName, (node, i) => {\r\n\t\tresults.push(func(node, i))\r\n\t})\r\n\treturn results\r\n}\r\n\r\nconst NAMESPACE_REG_EXP = /.+\\:/\r\nexport function getTagName(element) {\r\n\t// For some weird reason, if an element is declared as,\r\n\t// for example, `<x:sheets/>`, then its `.tagName` will be\r\n\t// \"x:sheets\" instead of just \"sheets\".\r\n\t// https://gitlab.com/catamphetamine/read-excel-file/-/issues/25\r\n\t// Its not clear how to tell it to ignore any namespaces\r\n\t// when getting `.tagName`, so just replacing anything\r\n\t// before a colon, if any.\r\n\treturn element.tagName.replace(NAMESPACE_REG_EXP, '')\r\n}\r\n\r\nexport function isElement(node) {\r\n\t// `nodeType: 1` means \"Element\".\r\n\t// https://www.w3schools.com/xml/prop_element_nodetype.asp\r\n\treturn node.nodeType === 1\r\n}\r\n\r\n// This function is only used for occasional debug messages.\r\nexport function getOuterXml(node) {\r\n\t// `nodeType: 1` means \"Element\".\r\n\t// https://www.w3schools.com/xml/prop_element_nodetype.asp\r\n\tif (node.nodeType !== 1) {\r\n\t\treturn node.textContent\r\n\t}\r\n\r\n let xml = '<' + getTagName(node)\r\n\r\n let j = 0\r\n while (j < node.attributes.length) {\r\n xml += ' ' + node.attributes[j].name + '=' + '\"' + node.attributes[j].value + '\"'\r\n j++\r\n }\r\n\r\n xml += '>'\r\n\r\n let i = 0\r\n while (i < node.childNodes.length) {\r\n \txml += getOuterXml(node.childNodes[i])\r\n i++\r\n }\r\n\r\n xml += '</' + getTagName(node) + '>'\r\n\r\n return xml\r\n}"],"mappings":"AAAA,OAAO,SAASA,SAASA,CAACC,IAAI,EAAEC,OAAO,EAAE;EACxC,IAAIC,CAAC,GAAG,CAAC;EACT,OAAOA,CAAC,GAAGF,IAAI,CAACG,UAAU,CAACC,MAAM,EAAE;IAClC,IAAMC,SAAS,GAAGL,IAAI,CAACG,UAAU,CAACD,CAAC,CAAC;IACpC;IACA;IACA,IAAIG,SAAS,CAACC,QAAQ,KAAK,CAAC,IAAIC,UAAU,CAACF,SAAS,CAAC,KAAKJ,OAAO,EAAE;MAClE,OAAOI,SAAS;IACjB;IACAH,CAAC,EAAE;EACJ;AACD;AAEA,OAAO,SAASM,YAAYA,CAACR,IAAI,EAAEC,OAAO,EAAE;EAC3C,IAAMQ,OAAO,GAAG,EAAE;EAClB,IAAIP,CAAC,GAAG,CAAC;EACT,OAAOA,CAAC,GAAGF,IAAI,CAACG,UAAU,CAACC,MAAM,EAAE;IAClC,IAAMC,SAAS,GAAGL,IAAI,CAACG,UAAU,CAACD,CAAC,CAAC;IACpC;IACA;IACA,IAAIG,SAAS,CAACC,QAAQ,KAAK,CAAC,IAAIC,UAAU,CAACF,SAAS,CAAC,KAAKJ,OAAO,EAAE;MAClEQ,OAAO,CAACC,IAAI,CAACL,SAAS,CAAC;IACxB;IACAH,CAAC,EAAE;EACJ;EACA,OAAOO,OAAO;AACf;AAEA,OAAO,SAASE,OAAOA,CAACX,IAAI,EAAEC,OAAO,EAAEW,IAAI,EAAE;EAC5C;EACA;EACA;EACA;EACA,IAAIV,CAAC,GAAG,CAAC;EACT,OAAOA,CAAC,GAAGF,IAAI,CAACG,UAAU,CAACC,MAAM,EAAE;IAClC,IAAMC,SAAS,GAAGL,IAAI,CAACG,UAAU,CAACD,CAAC,CAAC;IACpC,IAAID,OAAO,EAAE;MACZ;MACA;MACA,IAAII,SAAS,CAACC,QAAQ,KAAK,CAAC,IAAIC,UAAU,CAACF,SAAS,CAAC,KAAKJ,OAAO,EAAE;QAClEW,IAAI,CAACP,SAAS,EAAEH,CAAC,CAAC;MACnB;IACD,CAAC,MAAM;MACNU,IAAI,CAACP,SAAS,EAAEH,CAAC,CAAC;IACnB;IACAA,CAAC,EAAE;EACJ;AACD;AAEA,OAAO,SAASW,GAAGA,CAACb,IAAI,EAAEC,OAAO,EAAEW,IAAI,EAAE;EACxC,IAAMH,OAAO,GAAG,EAAE;EAClBE,OAAO,CAACX,IAAI,EAAEC,OAAO,EAAE,UAACD,IAAI,EAAEE,CAAC,EAAK;IACnCO,OAAO,CAACC,IAAI,CAACE,IAAI,CAACZ,IAAI,EAAEE,CAAC,CAAC,CAAC;EAC5B,CAAC,CAAC;EACF,OAAOO,OAAO;AACf;AAEA,IAAMK,iBAAiB,GAAG,MAAM;AAChC,OAAO,SAASP,UAAUA,CAACQ,OAAO,EAAE;EACnC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAOA,OAAO,CAACd,OAAO,CAACe,OAAO,CAACF,iBAAiB,EAAE,EAAE,CAAC;AACtD;AAEA,OAAO,SAASG,SAASA,CAACjB,IAAI,EAAE;EAC/B;EACA;EACA,OAAOA,IAAI,CAACM,QAAQ,KAAK,CAAC;AAC3B;;AAEA;AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"dom.js","names":["findChild","node","tagName","i","childNodes","length","childNode","nodeType","getTagName","findChildren","results","push","forEach","func","map","NAMESPACE_REG_EXP","element","replace","isElement","getFirstElementChild","getOuterXml","textContent","xml","j","attributes","name","value"],"sources":["../../source/xml/dom.js"],"sourcesContent":["export function findChild(node, tagName) {\r\n\tlet i = 0\r\n\twhile (i < node.childNodes.length) {\r\n\t\tconst childNode = node.childNodes[i]\r\n\t\t// `nodeType: 1` means \"Element\".\r\n\t\t// https://www.w3schools.com/xml/prop_element_nodetype.asp\r\n\t\tif (childNode.nodeType === 1 && getTagName(childNode) === tagName) {\r\n\t\t\treturn childNode\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n}\r\n\r\nexport function findChildren(node, tagName) {\r\n\tconst results = []\r\n\tlet i = 0\r\n\twhile (i < node.childNodes.length) {\r\n\t\tconst childNode = node.childNodes[i]\r\n\t\t// `nodeType: 1` means \"Element\".\r\n\t\t// https://www.w3schools.com/xml/prop_element_nodetype.asp\r\n\t\tif (childNode.nodeType === 1 && getTagName(childNode) === tagName) {\r\n\t\t\tresults.push(childNode)\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n\treturn results\r\n}\r\n\r\nexport function forEach(node, tagName, func) {\r\n\t// if (typeof tagName === 'function') {\r\n\t// \tfunc = tagName\r\n\t// \ttagName = undefined\r\n\t// }\r\n\tlet i = 0\r\n\twhile (i < node.childNodes.length) {\r\n\t\tconst childNode = node.childNodes[i]\r\n\t\tif (tagName) {\r\n\t\t\t// `nodeType: 1` means \"Element\".\r\n\t\t\t// https://www.w3schools.com/xml/prop_element_nodetype.asp\r\n\t\t\tif (childNode.nodeType === 1 && getTagName(childNode) === tagName) {\r\n\t\t\t\tfunc(childNode, i)\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfunc(childNode, i)\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n}\r\n\r\nexport function map(node, tagName, func) {\r\n\tconst results = []\r\n\tforEach(node, tagName, (node, i) => {\r\n\t\tresults.push(func(node, i))\r\n\t})\r\n\treturn results\r\n}\r\n\r\nconst NAMESPACE_REG_EXP = /.+\\:/\r\nexport function getTagName(element) {\r\n\t// For some weird reason, if an element is declared as,\r\n\t// for example, `<x:sheets/>`, then its `.tagName` will be\r\n\t// \"x:sheets\" instead of just \"sheets\".\r\n\t// https://gitlab.com/catamphetamine/read-excel-file/-/issues/25\r\n\t// Its not clear how to tell it to ignore any namespaces\r\n\t// when getting `.tagName`, so just replacing anything\r\n\t// before a colon, if any.\r\n\treturn element.tagName.replace(NAMESPACE_REG_EXP, '')\r\n}\r\n\r\nexport function isElement(node) {\r\n\t// `nodeType: 1` means \"Element\".\r\n\t// https://www.w3schools.com/xml/prop_element_nodetype.asp\r\n\treturn node.nodeType === 1\r\n}\r\n\r\nexport function getFirstElementChild(element) {\r\n let i = 0\r\n while (i < element.childNodes.length) {\r\n \tif (isElement(element.childNodes[i])) {\r\n\t\t\treturn element.childNodes[i]\r\n\t\t}\r\n i++\r\n }\r\n}\r\n\r\n// This function is only used for occasional debug messages.\r\nexport function getOuterXml(node) {\r\n\t// `nodeType: 1` means \"Element\".\r\n\t// https://www.w3schools.com/xml/prop_element_nodetype.asp\r\n\tif (node.nodeType !== 1) {\r\n\t\treturn node.textContent\r\n\t}\r\n\r\n let xml = '<' + getTagName(node)\r\n\r\n let j = 0\r\n while (j < node.attributes.length) {\r\n xml += ' ' + node.attributes[j].name + '=' + '\"' + node.attributes[j].value + '\"'\r\n j++\r\n }\r\n\r\n xml += '>'\r\n\r\n let i = 0\r\n while (i < node.childNodes.length) {\r\n \txml += getOuterXml(node.childNodes[i])\r\n i++\r\n }\r\n\r\n xml += '</' + getTagName(node) + '>'\r\n\r\n return xml\r\n}"],"mappings":"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"}
|
package/modules/xml/xlsx.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { findChild, findChildren, forEach, map,
|
|
1
|
+
import { findChild, findChildren, forEach, map, getFirstElementChild, getTagName } from './dom.js';
|
|
2
2
|
|
|
3
3
|
// Returns an array of cells,
|
|
4
4
|
// each element being an XML DOM element representing a cell.
|
|
@@ -28,8 +28,16 @@ export function getCellValue(document, node) {
|
|
|
28
28
|
return findChild(node, 'v');
|
|
29
29
|
}
|
|
30
30
|
export function getCellInlineStringValue(document, node) {
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
// It seems as if in some weirdly-output "*.xlsx" files
|
|
32
|
+
// there're non-element nodes of some weird nature.
|
|
33
|
+
// https://gitlab.com/catamphetamine/read-excel-file/-/issues/109
|
|
34
|
+
// This code filters out such weird non-element nodes.
|
|
35
|
+
var firstElementChild = getFirstElementChild(node);
|
|
36
|
+
if (firstElementChild && getTagName(firstElementChild) === 'is') {
|
|
37
|
+
var firstElementChildFirstElementChild = getFirstElementChild(firstElementChild);
|
|
38
|
+
if (firstElementChildFirstElementChild && getTagName(firstElementChildFirstElementChild) === 't') {
|
|
39
|
+
return firstElementChildFirstElementChild.textContent;
|
|
40
|
+
}
|
|
33
41
|
}
|
|
34
42
|
}
|
|
35
43
|
export function getDimensions(document) {
|
package/modules/xml/xlsx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx.js","names":["findChild","findChildren","forEach","map","
|
|
1
|
+
{"version":3,"file":"xlsx.js","names":["findChild","findChildren","forEach","map","getFirstElementChild","getTagName","getCells","document","worksheet","documentElement","sheetData","cells","row","cell","push","getMergedCells","mergedCells","mergedCellsInfo","mergedCell","getAttribute","getCellValue","node","getCellInlineStringValue","firstElementChild","firstElementChildFirstElementChild","textContent","getDimensions","dimensions","getBaseStyles","styleSheet","cellStyleXfs","getCellStyles","cellXfs","getNumberFormats","numberFormats","numFmts","getSharedStrings","sst","string","t","value","r","getWorkbookProperties","workbook","getRelationships","relationships","getSheets","sheets"],"sources":["../../source/xml/xlsx.js"],"sourcesContent":["import { findChild, findChildren, forEach, map, getFirstElementChild, getTagName } from './dom.js'\r\n\r\n// Returns an array of cells,\r\n// each element being an XML DOM element representing a cell.\r\nexport function getCells(document) {\r\n const worksheet = document.documentElement\r\n const sheetData = findChild(worksheet, 'sheetData')\r\n\r\n const cells = []\r\n forEach(sheetData, 'row', (row) => {\r\n forEach(row, 'c', (cell) => {\r\n cells.push(cell)\r\n })\r\n })\r\n return cells\r\n}\r\n\r\nexport function getMergedCells(document) {\r\n const worksheet = document.documentElement\r\n const mergedCells = findChild(worksheet, 'mergeCells')\r\n const mergedCellsInfo = []\r\n if (mergedCells) {\r\n forEach(mergedCells, 'mergeCell', (mergedCell) => {\r\n mergedCellsInfo.push(mergedCell.getAttribute('ref'))\r\n })\r\n }\r\n return mergedCellsInfo\r\n}\r\n\r\nexport function getCellValue(document, node) {\r\n return findChild(node, 'v')\r\n}\r\n\r\nexport function getCellInlineStringValue(document, node) {\r\n // It seems as if in some weirdly-output \"*.xlsx\" files\r\n // there're non-element nodes of some weird nature.\r\n // https://gitlab.com/catamphetamine/read-excel-file/-/issues/109\r\n // This code filters out such weird non-element nodes.\r\n const firstElementChild = getFirstElementChild(node)\r\n if (firstElementChild && getTagName(firstElementChild) === 'is') {\r\n const firstElementChildFirstElementChild = getFirstElementChild(firstElementChild)\r\n if (firstElementChildFirstElementChild && getTagName(firstElementChildFirstElementChild) === 't') {\r\n return firstElementChildFirstElementChild.textContent\r\n }\r\n }\r\n}\r\n\r\nexport function getDimensions(document) {\r\n const worksheet = document.documentElement\r\n const dimensions = findChild(worksheet, 'dimension')\r\n if (dimensions) {\r\n return dimensions.getAttribute('ref')\r\n }\r\n}\r\n\r\nexport function getBaseStyles(document) {\r\n const styleSheet = document.documentElement\r\n const cellStyleXfs = findChild(styleSheet, 'cellStyleXfs')\r\n if (cellStyleXfs) {\r\n return findChildren(cellStyleXfs, 'xf')\r\n }\r\n return []\r\n}\r\n\r\nexport function getCellStyles(document) {\r\n const styleSheet = document.documentElement\r\n const cellXfs = findChild(styleSheet, 'cellXfs')\r\n if (!cellXfs) {\r\n return []\r\n }\r\n return findChildren(cellXfs, 'xf')\r\n}\r\n\r\nexport function getNumberFormats(document) {\r\n const styleSheet = document.documentElement\r\n let numberFormats = []\r\n const numFmts = findChild(styleSheet, 'numFmts')\r\n if (numFmts) {\r\n return findChildren(numFmts, 'numFmt')\r\n }\r\n return []\r\n}\r\n\r\nexport function getSharedStrings(document) {\r\n\t// An `<si/>` element can contain a `<t/>` (simplest case) or a set of `<r/>` (\"rich formatting\") elements having `<t/>`.\r\n\t// https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.sharedstringitem?redirectedfrom=MSDN&view=openxml-2.8.1\r\n\t// http://www.datypic.com/sc/ooxml/e-ssml_si-1.html\r\n\r\n const sst = document.documentElement\r\n return map(sst, 'si', string => {\r\n const t = findChild(string, 't')\r\n if (t) {\r\n return t.textContent\r\n }\r\n let value = ''\r\n forEach(string, 'r', (r) => {\r\n value += findChild(r, 't').textContent\r\n })\r\n return value\r\n })\r\n}\r\n\r\nexport function getWorkbookProperties(document) {\r\n const workbook = document.documentElement\r\n return findChild(workbook, 'workbookPr')\r\n}\r\n\r\nexport function getRelationships(document) {\r\n const relationships = document.documentElement\r\n return findChildren(relationships, 'Relationship')\r\n}\r\n\r\nexport function getSheets(document) {\r\n const workbook = document.documentElement\r\n const sheets = findChild(workbook, 'sheets')\r\n return findChildren(sheets, 'sheet')\r\n}"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// `fflate` readme is too complicated:
|
|
2
|
+
// https://github.com/101arrowz/fflate/issues/251
|
|
3
|
+
// I just used whatever approach seemed to work.
|
|
4
|
+
//
|
|
5
|
+
// It was a choice between "syncrhonous" (blocking) unzip via `unzipSync()`
|
|
6
|
+
// and "asynchronous" (non-blocking) unzip via `unzip()`.
|
|
7
|
+
//
|
|
8
|
+
// In the readme they say that using "asynchronous" API will cause the compression or decompression
|
|
9
|
+
// run in a separate thread by using Web (or Node) Workers, so it won't block the main thread.
|
|
10
|
+
// Yet, they also say that there is an initial overhead to using workers of about 50ms for each
|
|
11
|
+
// asynchronous function. For small (under about 50kB) payloads, they say that the "asynchronous" API
|
|
12
|
+
// will be much slower compared to the "synchronous" one. However, when compressing larger files
|
|
13
|
+
// or multiple files at once, the "synchronous" API causes the main thread to hang for too long,
|
|
14
|
+
// and the "asynchronous" API is an order of magnitude better.
|
|
15
|
+
//
|
|
16
|
+
import { unzip } from 'fflate';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Reads `*.zip` file contents. Ignores anything besides `.xml` or `.xml.rels` files.
|
|
20
|
+
* @param {ArrayBuffer} input
|
|
21
|
+
* @return {Promise<Record<string,Uint8Array>>} Resolves to an object holding `*.zip` file entries.
|
|
22
|
+
*/
|
|
23
|
+
export default function unzipFromArrayBuffer(input, options) {
|
|
24
|
+
return unzipFromArrayBufferUsingFunction(input, options, unzipAsync, true);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Reads `*.zip` file contents. Ignores anything besides `.xml` or `.xml.rels` files.
|
|
29
|
+
* @param {ArrayBuffer} input
|
|
30
|
+
* @param {(ArrayBuffer) => Record<string, Uint8Array> | Promise<Record<string, Uint8Array>>} unzip
|
|
31
|
+
* @param {boolean} isAsync — Should be `true` when `unzip()` returns a `Promise`, `false` otherwise.
|
|
32
|
+
* @return {Promise<Record<string,Uint8Array>>|Record<string,Uint8Array>} Resolves to an object holding `*.zip` file entries.
|
|
33
|
+
*/
|
|
34
|
+
export function unzipFromArrayBufferUsingFunction(input) {
|
|
35
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
36
|
+
_filter = _ref.filter;
|
|
37
|
+
var unzip = arguments.length > 2 ? arguments[2] : undefined;
|
|
38
|
+
var isAsync = arguments.length > 3 ? arguments[3] : undefined;
|
|
39
|
+
// Read the `.zip` archive.
|
|
40
|
+
// `result` is either `object` or `Promise<object>`
|
|
41
|
+
return unzip(new Uint8Array(input), {
|
|
42
|
+
// Ignore certain types of files.
|
|
43
|
+
filter: function filter(file) {
|
|
44
|
+
if (_filter) {
|
|
45
|
+
return _filter({
|
|
46
|
+
path: file.name
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function unzipAsync(archive) {
|
|
54
|
+
return new Promise(function (resolve, reject) {
|
|
55
|
+
// `unzip()` will resort to "synchronous" decompression in two edge cases:
|
|
56
|
+
// * When the archive size is less than `512KB`.
|
|
57
|
+
// * When the data is barely compressed, i.e. the compression ratio is less than 20% reduction in size.
|
|
58
|
+
unzip(archive, function (error, files) {
|
|
59
|
+
if (error) {
|
|
60
|
+
reject(error);
|
|
61
|
+
} else {
|
|
62
|
+
resolve(files);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=unzipFromArrayBuffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unzipFromArrayBuffer.js","names":["unzip","unzipFromArrayBuffer","input","options","unzipFromArrayBufferUsingFunction","unzipAsync","_ref","arguments","length","undefined","filter","isAsync","Uint8Array","file","path","name","archive","Promise","resolve","reject","error","files"],"sources":["../../source/zip/unzipFromArrayBuffer.js"],"sourcesContent":["// `fflate` readme is too complicated:\r\n// https://github.com/101arrowz/fflate/issues/251\r\n// I just used whatever approach seemed to work.\r\n//\r\n// It was a choice between \"syncrhonous\" (blocking) unzip via `unzipSync()`\r\n// and \"asynchronous\" (non-blocking) unzip via `unzip()`.\r\n//\r\n// In the readme they say that using \"asynchronous\" API will cause the compression or decompression\r\n// run in a separate thread by using Web (or Node) Workers, so it won't block the main thread.\r\n// Yet, they also say that there is an initial overhead to using workers of about 50ms for each\r\n// asynchronous function. For small (under about 50kB) payloads, they say that the \"asynchronous\" API\r\n// will be much slower compared to the \"synchronous\" one. However, when compressing larger files\r\n// or multiple files at once, the \"synchronous\" API causes the main thread to hang for too long,\r\n// and the \"asynchronous\" API is an order of magnitude better.\r\n//\r\nimport { unzip } from 'fflate'\r\n\r\n/**\r\n * Reads `*.zip` file contents. Ignores anything besides `.xml` or `.xml.rels` files.\r\n * @param {ArrayBuffer} input\r\n * @return {Promise<Record<string,Uint8Array>>} Resolves to an object holding `*.zip` file entries.\r\n */\r\nexport default function unzipFromArrayBuffer(input, options) {\r\n\treturn unzipFromArrayBufferUsingFunction(input, options, unzipAsync, true)\r\n}\r\n\r\n/**\r\n * Reads `*.zip` file contents. Ignores anything besides `.xml` or `.xml.rels` files.\r\n * @param {ArrayBuffer} input\r\n * @param {(ArrayBuffer) => Record<string, Uint8Array> | Promise<Record<string, Uint8Array>>} unzip\r\n * @param {boolean} isAsync — Should be `true` when `unzip()` returns a `Promise`, `false` otherwise.\r\n * @return {Promise<Record<string,Uint8Array>>|Record<string,Uint8Array>} Resolves to an object holding `*.zip` file entries.\r\n */\r\nexport function unzipFromArrayBufferUsingFunction(input, { filter } = {}, unzip, isAsync) {\r\n\t// Read the `.zip` archive.\r\n\t// `result` is either `object` or `Promise<object>`\r\n\treturn unzip(new Uint8Array(input), {\r\n\t\t// Ignore certain types of files.\r\n\t\tfilter: (file) => {\r\n\t\t\tif (filter) {\r\n\t\t\t\treturn filter({\r\n\t\t\t\t\tpath: file.name\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\treturn true\r\n\t\t}\r\n\t})\r\n}\r\n\r\nfunction unzipAsync(archive) {\r\n return new Promise((resolve, reject) => {\r\n\t\t// `unzip()` will resort to \"synchronous\" decompression in two edge cases:\r\n // * When the archive size is less than `512KB`.\r\n // * When the data is barely compressed, i.e. the compression ratio is less than 20% reduction in size.\r\n unzip(archive, (error, files) => {\r\n if (error) {\r\n reject(error)\r\n } else {\r\n resolve(files)\r\n }\r\n })\r\n })\r\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,KAAK,QAAQ,QAAQ;;AAE9B;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,oBAAoBA,CAACC,KAAK,EAAEC,OAAO,EAAE;EAC5D,OAAOC,iCAAiC,CAACF,KAAK,EAAEC,OAAO,EAAEE,UAAU,EAAE,IAAI,CAAC;AAC3E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASD,iCAAiCA,CAACF,KAAK,EAAmC;EAAA,IAAAI,IAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAApB,CAAC,CAAC;IAAbG,OAAM,GAAAJ,IAAA,CAANI,MAAM;EAAA,IAASV,KAAK,GAAAO,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;EAAA,IAAEE,OAAO,GAAAJ,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;EACvF;EACA;EACA,OAAOT,KAAK,CAAC,IAAIY,UAAU,CAACV,KAAK,CAAC,EAAE;IACnC;IACAQ,MAAM,EAAE,SAAAA,OAACG,IAAI,EAAK;MACjB,IAAIH,OAAM,EAAE;QACX,OAAOA,OAAM,CAAC;UACbI,IAAI,EAAED,IAAI,CAACE;QACZ,CAAC,CAAC;MACH;MACA,OAAO,IAAI;IACZ;EACD,CAAC,CAAC;AACH;AAEA,SAASV,UAAUA,CAACW,OAAO,EAAE;EAC3B,OAAO,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IACxC;IACE;IACA;IACAnB,KAAK,CAACgB,OAAO,EAAE,UAACI,KAAK,EAAEC,KAAK,EAAK;MAC/B,IAAID,KAAK,EAAE;QACTD,MAAM,CAACC,KAAK,CAAC;MACf,CAAC,MAAM;QACLF,OAAO,CAACG,KAAK,CAAC;MAChB;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// `fflate` readme is too complicated:
|
|
2
|
+
// https://github.com/101arrowz/fflate/issues/251
|
|
3
|
+
// I just used whatever approach seemed to work.
|
|
4
|
+
//
|
|
5
|
+
// It was a choice between "syncrhonous" (blocking) unzip via `unzipSync()`
|
|
6
|
+
// and "asynchronous" (non-blocking) unzip via `unzip()`.
|
|
7
|
+
//
|
|
8
|
+
// In the readme they say that using "asynchronous" API will cause the compression or decompression
|
|
9
|
+
// run in a separate thread by using Web (or Node) Workers, so it won't block the main thread.
|
|
10
|
+
// Yet, they also say that there is an initial overhead to using workers of about 50ms for each
|
|
11
|
+
// asynchronous function. For small (under about 50kB) payloads, they say that the "asynchronous" API
|
|
12
|
+
// will be much slower compared to the "synchronous" one. However, when compressing larger files
|
|
13
|
+
// or multiple files at once, the "synchronous" API causes the main thread to hang for too long,
|
|
14
|
+
// and the "asynchronous" API is an order of magnitude better.
|
|
15
|
+
//
|
|
16
|
+
import { unzipSync } from 'fflate';
|
|
17
|
+
import { unzipFromArrayBufferUsingFunction } from './unzipFromArrayBuffer.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Reads `*.zip` file contents. Ignores anything besides `.xml` or `.xml.rels` files.
|
|
21
|
+
* @param {ArrayBuffer} input
|
|
22
|
+
* @return {Record<string,Uint8Array>} An object holding `*.zip` file entries.
|
|
23
|
+
*/
|
|
24
|
+
export default function unzipFromArrayBufferSync(input, options) {
|
|
25
|
+
return unzipFromArrayBufferUsingFunction(input, options, unzipSync, true);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=unzipFromArrayBufferSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unzipFromArrayBufferSync.js","names":["unzipSync","unzipFromArrayBufferUsingFunction","unzipFromArrayBufferSync","input","options"],"sources":["../../source/zip/unzipFromArrayBufferSync.js"],"sourcesContent":["// `fflate` readme is too complicated:\r\n// https://github.com/101arrowz/fflate/issues/251\r\n// I just used whatever approach seemed to work.\r\n//\r\n// It was a choice between \"syncrhonous\" (blocking) unzip via `unzipSync()`\r\n// and \"asynchronous\" (non-blocking) unzip via `unzip()`.\r\n//\r\n// In the readme they say that using \"asynchronous\" API will cause the compression or decompression\r\n// run in a separate thread by using Web (or Node) Workers, so it won't block the main thread.\r\n// Yet, they also say that there is an initial overhead to using workers of about 50ms for each\r\n// asynchronous function. For small (under about 50kB) payloads, they say that the \"asynchronous\" API\r\n// will be much slower compared to the \"synchronous\" one. However, when compressing larger files\r\n// or multiple files at once, the \"synchronous\" API causes the main thread to hang for too long,\r\n// and the \"asynchronous\" API is an order of magnitude better.\r\n//\r\nimport { unzipSync } from 'fflate'\r\n\r\nimport { unzipFromArrayBufferUsingFunction } from './unzipFromArrayBuffer.js'\r\n\r\n/**\r\n * Reads `*.zip` file contents. Ignores anything besides `.xml` or `.xml.rels` files.\r\n * @param {ArrayBuffer} input\r\n * @return {Record<string,Uint8Array>} An object holding `*.zip` file entries.\r\n */\r\nexport default function unzipFromArrayBufferSync(input, options) {\r\n\treturn unzipFromArrayBufferUsingFunction(input, options, unzipSync, true)\r\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,SAAS,QAAQ,QAAQ;AAElC,SAASC,iCAAiC,QAAQ,2BAA2B;;AAE7E;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,wBAAwBA,CAACC,KAAK,EAAEC,OAAO,EAAE;EAChE,OAAOH,iCAAiC,CAACE,KAAK,EAAEC,OAAO,EAAEJ,SAAS,EAAE,IAAI,CAAC;AAC1E"}
|