read-excel-file 5.3.2 → 5.3.5
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 +15 -0
- package/README.md +73 -32
- package/bundle/read-excel-file.min.js +1 -1
- package/bundle/read-excel-file.min.js.map +1 -1
- package/commonjs/read/isDateTimestamp.js +112 -0
- package/commonjs/read/isDateTimestamp.js.map +1 -0
- package/commonjs/read/parseCell.js +5 -0
- package/commonjs/read/parseCell.js.map +1 -1
- package/commonjs/read/parseCellValue.js +78 -93
- package/commonjs/read/parseCellValue.js.map +1 -1
- package/commonjs/read/parseDate.js.map +1 -1
- package/commonjs/read/schema/convertToJson.js +99 -31
- package/commonjs/read/schema/convertToJson.js.map +1 -1
- package/commonjs/read/schema/convertToJson.test.js.map +1 -1
- package/commonjs/xml/dom.js +29 -0
- package/commonjs/xml/dom.js.map +1 -1
- package/commonjs/xml/xlsx.js.map +1 -1
- package/commonjs/xml/xml.js +2 -4
- package/commonjs/xml/xml.js.map +1 -1
- package/commonjs/xml/{xlsx-xpath.js → xpath/xlsx-xpath.js} +1 -0
- package/commonjs/xml/xpath/xlsx-xpath.js.map +1 -0
- package/commonjs/xml/{xpathBrowser.js → xpath/xpathBrowser.js} +1 -0
- package/commonjs/xml/xpath/xpathBrowser.js.map +1 -0
- package/commonjs/xml/{xpathNode.js → xpath/xpathNode.js} +1 -1
- package/commonjs/xml/xpath/xpathNode.js.map +1 -0
- package/modules/read/isDateTimestamp.js +104 -0
- package/modules/read/isDateTimestamp.js.map +1 -0
- package/modules/read/parseCell.js +5 -1
- package/modules/read/parseCell.js.map +1 -1
- package/modules/read/parseCellValue.js +76 -91
- package/modules/read/parseCellValue.js.map +1 -1
- package/modules/read/parseDate.js.map +1 -1
- package/modules/read/schema/convertToJson.js +99 -31
- package/modules/read/schema/convertToJson.js.map +1 -1
- package/modules/read/schema/convertToJson.test.js.map +1 -1
- package/modules/xml/dom.js +27 -0
- package/modules/xml/dom.js.map +1 -1
- package/modules/xml/xlsx.js.map +1 -1
- package/modules/xml/xml.js +2 -2
- package/modules/xml/xml.js.map +1 -1
- package/modules/xml/{xlsx-xpath.js → xpath/xlsx-xpath.js} +1 -0
- package/modules/xml/xpath/xlsx-xpath.js.map +1 -0
- package/modules/xml/{xpathBrowser.js → xpath/xpathBrowser.js} +1 -0
- package/modules/xml/xpath/xpathBrowser.js.map +1 -0
- package/modules/xml/{xpathNode.js → xpath/xpathNode.js} +1 -1
- package/modules/xml/xpath/xpathNode.js.map +1 -0
- package/package.json +1 -1
- package/types.d.ts +11 -6
- package/commonjs/xml/xlsx-xpath.js.map +0 -1
- package/commonjs/xml/xpathBrowser.js.map +0 -1
- package/commonjs/xml/xpathNode.js.map +0 -1
- package/modules/xml/xlsx-xpath.js.map +0 -1
- package/modules/xml/xpathBrowser.js.map +0 -1
- package/modules/xml/xpathNode.js.map +0 -1
|
@@ -103,6 +103,7 @@ function _default(data, schema, options) {
|
|
|
103
103
|
|
|
104
104
|
function read(schema, row, rowIndex, columns, errors, options) {
|
|
105
105
|
var object = {};
|
|
106
|
+
var isEmptyObject = true;
|
|
106
107
|
|
|
107
108
|
var _loop = function _loop() {
|
|
108
109
|
var key = _Object$keys[_i];
|
|
@@ -116,6 +117,7 @@ function read(schema, row, rowIndex, columns, errors, options) {
|
|
|
116
117
|
|
|
117
118
|
var value = void 0;
|
|
118
119
|
var error = void 0;
|
|
120
|
+
var reason = void 0;
|
|
119
121
|
|
|
120
122
|
if (isNestedSchema) {
|
|
121
123
|
value = read(schemaEntry.type, row, rowIndex, columns, errors, options);
|
|
@@ -130,6 +132,7 @@ function read(schema, row, rowIndex, columns, errors, options) {
|
|
|
130
132
|
if (result.error) {
|
|
131
133
|
value = _value;
|
|
132
134
|
error = result.error;
|
|
135
|
+
reason = result.reason;
|
|
133
136
|
}
|
|
134
137
|
|
|
135
138
|
if (result.value !== null) {
|
|
@@ -145,6 +148,7 @@ function read(schema, row, rowIndex, columns, errors, options) {
|
|
|
145
148
|
} else {
|
|
146
149
|
var result = parseValue(rawValue, schemaEntry, options);
|
|
147
150
|
error = result.error;
|
|
151
|
+
reason = result.reason;
|
|
148
152
|
value = error ? rawValue : result.value;
|
|
149
153
|
}
|
|
150
154
|
}
|
|
@@ -161,13 +165,23 @@ function read(schema, row, rowIndex, columns, errors, options) {
|
|
|
161
165
|
value: value
|
|
162
166
|
};
|
|
163
167
|
|
|
168
|
+
if (reason) {
|
|
169
|
+
error.reason = reason;
|
|
170
|
+
}
|
|
171
|
+
|
|
164
172
|
if (schemaEntry.type) {
|
|
165
173
|
error.type = schemaEntry.type;
|
|
166
174
|
}
|
|
167
175
|
|
|
168
176
|
errors.push(error);
|
|
169
|
-
} else
|
|
170
|
-
|
|
177
|
+
} else {
|
|
178
|
+
if (isEmptyObject && value !== null) {
|
|
179
|
+
isEmptyObject = false;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (value !== null || options.includeNullValues) {
|
|
183
|
+
object[schemaEntry.prop] = value;
|
|
184
|
+
}
|
|
171
185
|
}
|
|
172
186
|
};
|
|
173
187
|
|
|
@@ -175,11 +189,11 @@ function read(schema, row, rowIndex, columns, errors, options) {
|
|
|
175
189
|
_loop();
|
|
176
190
|
}
|
|
177
191
|
|
|
178
|
-
if (
|
|
179
|
-
return
|
|
192
|
+
if (isEmptyObject) {
|
|
193
|
+
return null;
|
|
180
194
|
}
|
|
181
195
|
|
|
182
|
-
return
|
|
196
|
+
return object;
|
|
183
197
|
}
|
|
184
198
|
/**
|
|
185
199
|
* Converts textual value to a javascript typed value.
|
|
@@ -221,7 +235,8 @@ function parseValue(value, schemaEntry, options) {
|
|
|
221
235
|
if (result.value !== null) {
|
|
222
236
|
if (schemaEntry.oneOf && schemaEntry.oneOf.indexOf(result.value) < 0) {
|
|
223
237
|
return {
|
|
224
|
-
error: 'invalid'
|
|
238
|
+
error: 'invalid',
|
|
239
|
+
reason: 'unknown'
|
|
225
240
|
};
|
|
226
241
|
}
|
|
227
242
|
|
|
@@ -269,7 +284,7 @@ function parseCustomValue(value, parse) {
|
|
|
269
284
|
* Converts textual value to a javascript typed value.
|
|
270
285
|
* @param {any} value
|
|
271
286
|
* @param {} type
|
|
272
|
-
* @return {{ value: (string|number|Date|boolean), error: string }}
|
|
287
|
+
* @return {{ value: (string|number|Date|boolean), error: string, reason?: string }}
|
|
273
288
|
*/
|
|
274
289
|
|
|
275
290
|
|
|
@@ -280,60 +295,90 @@ function parseValueOfType(value, type, options) {
|
|
|
280
295
|
return {
|
|
281
296
|
value: value
|
|
282
297
|
};
|
|
283
|
-
} //
|
|
284
|
-
//
|
|
285
|
-
//
|
|
286
|
-
//
|
|
287
|
-
//
|
|
298
|
+
} // Excel tends to perform a forced automatic convertion of string-type values
|
|
299
|
+
// to number-type ones when the user has input them. Otherwise, users wouldn't
|
|
300
|
+
// be able to perform formula calculations on those cell values because users
|
|
301
|
+
// won't bother manually choosing a "numeric" cell type for each cell, and
|
|
302
|
+
// even if they did, choosing a "numeric" cell type every time wouldn't be an
|
|
303
|
+
// acceptable "user experience".
|
|
304
|
+
//
|
|
305
|
+
// So, if a cell value is supposed to be a string and Excel has automatically
|
|
306
|
+
// converted it to a number, perform a backwards conversion.
|
|
307
|
+
//
|
|
288
308
|
|
|
289
309
|
|
|
290
310
|
if (typeof value === 'number') {
|
|
311
|
+
// The global `isFinite()` function filters out:
|
|
312
|
+
// * NaN
|
|
313
|
+
// * -Infinity
|
|
314
|
+
// * Infinity
|
|
315
|
+
//
|
|
316
|
+
// All other values pass (including non-numbers).
|
|
317
|
+
//
|
|
291
318
|
if (isFinite(value)) {
|
|
292
319
|
return {
|
|
293
320
|
value: String(value)
|
|
294
321
|
};
|
|
295
322
|
}
|
|
323
|
+
|
|
324
|
+
return {
|
|
325
|
+
error: 'invalid',
|
|
326
|
+
reason: 'not_a_number'
|
|
327
|
+
};
|
|
296
328
|
}
|
|
297
329
|
|
|
298
330
|
return {
|
|
299
|
-
error: 'invalid'
|
|
331
|
+
error: 'invalid',
|
|
332
|
+
reason: 'not_a_string'
|
|
300
333
|
};
|
|
301
334
|
|
|
302
335
|
case Number:
|
|
303
336
|
case _Integer["default"]:
|
|
304
|
-
//
|
|
305
|
-
//
|
|
306
|
-
//
|
|
337
|
+
// An XLSX file editing software might not always correctly
|
|
338
|
+
// detect numeric values in string-type cells. Users won't bother
|
|
339
|
+
// manually selecting a cell type, so the editing software has to guess
|
|
340
|
+
// based on the user's input. One can assume that such auto-detection
|
|
341
|
+
// might not always work.
|
|
342
|
+
//
|
|
343
|
+
// So, if a cell is supposed to be a numeric one, convert a string value to a number.
|
|
344
|
+
//
|
|
307
345
|
if (typeof value === 'string') {
|
|
308
346
|
var stringifiedValue = value;
|
|
309
|
-
value =
|
|
347
|
+
value = Number(value);
|
|
310
348
|
|
|
311
349
|
if (String(value) !== stringifiedValue) {
|
|
312
350
|
return {
|
|
313
|
-
error: 'invalid'
|
|
351
|
+
error: 'invalid',
|
|
352
|
+
reason: 'not_a_number_string'
|
|
314
353
|
};
|
|
315
354
|
}
|
|
316
355
|
} else if (typeof value !== 'number') {
|
|
317
356
|
return {
|
|
318
|
-
error: 'invalid'
|
|
357
|
+
error: 'invalid',
|
|
358
|
+
reason: 'not_a_number'
|
|
319
359
|
};
|
|
320
|
-
} //
|
|
360
|
+
} // At this point, `value` can only be a number.
|
|
361
|
+
//
|
|
362
|
+
// The global `isFinite()` function filters out:
|
|
321
363
|
// * NaN
|
|
322
364
|
// * -Infinity
|
|
323
365
|
// * Infinity
|
|
366
|
+
//
|
|
324
367
|
// All other values pass (including non-numbers).
|
|
325
|
-
//
|
|
368
|
+
//
|
|
326
369
|
|
|
327
370
|
|
|
328
371
|
if (!isFinite(value)) {
|
|
329
372
|
return {
|
|
330
|
-
error: 'invalid'
|
|
373
|
+
error: 'invalid',
|
|
374
|
+
reason: 'not_a_number'
|
|
331
375
|
};
|
|
332
376
|
}
|
|
333
377
|
|
|
334
378
|
if (type === _Integer["default"] && !(0, _Integer.isInteger)(value)) {
|
|
335
379
|
return {
|
|
336
|
-
error: 'invalid'
|
|
380
|
+
error: 'invalid',
|
|
381
|
+
reason: 'not_an_integer'
|
|
337
382
|
};
|
|
338
383
|
}
|
|
339
384
|
|
|
@@ -348,10 +393,16 @@ function parseValueOfType(value, type, options) {
|
|
|
348
393
|
value: value
|
|
349
394
|
};
|
|
350
395
|
}
|
|
396
|
+
|
|
397
|
+
return {
|
|
398
|
+
error: 'invalid',
|
|
399
|
+
reason: 'not_a_url'
|
|
400
|
+
};
|
|
351
401
|
}
|
|
352
402
|
|
|
353
403
|
return {
|
|
354
|
-
error: 'invalid'
|
|
404
|
+
error: 'invalid',
|
|
405
|
+
reason: 'not_a_string'
|
|
355
406
|
};
|
|
356
407
|
|
|
357
408
|
case _Email["default"]:
|
|
@@ -361,10 +412,16 @@ function parseValueOfType(value, type, options) {
|
|
|
361
412
|
value: value
|
|
362
413
|
};
|
|
363
414
|
}
|
|
415
|
+
|
|
416
|
+
return {
|
|
417
|
+
error: 'invalid',
|
|
418
|
+
reason: 'not_an_email'
|
|
419
|
+
};
|
|
364
420
|
}
|
|
365
421
|
|
|
366
422
|
return {
|
|
367
|
-
error: 'invalid'
|
|
423
|
+
error: 'invalid',
|
|
424
|
+
reason: 'not_a_string'
|
|
368
425
|
};
|
|
369
426
|
|
|
370
427
|
case Date:
|
|
@@ -372,6 +429,13 @@ function parseValueOfType(value, type, options) {
|
|
|
372
429
|
// Sometimes a date can be heuristically detected.
|
|
373
430
|
// https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777
|
|
374
431
|
if (value instanceof Date) {
|
|
432
|
+
if (isNaN(value)) {
|
|
433
|
+
return {
|
|
434
|
+
error: 'invalid',
|
|
435
|
+
reason: 'out_of_bounds'
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
|
|
375
439
|
return {
|
|
376
440
|
value: value
|
|
377
441
|
};
|
|
@@ -380,16 +444,18 @@ function parseValueOfType(value, type, options) {
|
|
|
380
444
|
if (typeof value === 'number') {
|
|
381
445
|
if (!isFinite(value)) {
|
|
382
446
|
return {
|
|
383
|
-
error: 'invalid'
|
|
447
|
+
error: 'invalid',
|
|
448
|
+
reason: 'not_a_number'
|
|
384
449
|
};
|
|
385
450
|
}
|
|
386
451
|
|
|
387
|
-
value =
|
|
452
|
+
value = Number(value);
|
|
388
453
|
var date = (0, _parseDate["default"])(value, options.properties);
|
|
389
454
|
|
|
390
|
-
if (
|
|
455
|
+
if (isNaN(date)) {
|
|
391
456
|
return {
|
|
392
|
-
error: 'invalid'
|
|
457
|
+
error: 'invalid',
|
|
458
|
+
reason: 'out_of_bounds'
|
|
393
459
|
};
|
|
394
460
|
}
|
|
395
461
|
|
|
@@ -399,7 +465,8 @@ function parseValueOfType(value, type, options) {
|
|
|
399
465
|
}
|
|
400
466
|
|
|
401
467
|
return {
|
|
402
|
-
error: 'invalid'
|
|
468
|
+
error: 'invalid',
|
|
469
|
+
reason: 'not_a_number'
|
|
403
470
|
};
|
|
404
471
|
|
|
405
472
|
case Boolean:
|
|
@@ -410,7 +477,8 @@ function parseValueOfType(value, type, options) {
|
|
|
410
477
|
}
|
|
411
478
|
|
|
412
479
|
return {
|
|
413
|
-
error: 'invalid'
|
|
480
|
+
error: 'invalid',
|
|
481
|
+
reason: 'not_a_boolean'
|
|
414
482
|
};
|
|
415
483
|
|
|
416
484
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertToJson.js","names":["DEFAULT_OPTIONS","isColumnOriented","data","schema","options","rowMap","validateSchema","transpose","columns","results","errors","i","length","result","read","push","error","row","rows","rowIndex","object","key","schemaEntry","isNestedSchema","type","Array","isArray","rawValue","indexOf","undefined","value","notEmpty","array","parseArray","map","_value","parseValue","required","column","prop","Object","keys","parse","parseCustomValue","parseValueOfType","oneOf","validate","message","String","isFinite","Number","Integer","stringifiedValue","parseFloat","isInteger","URL","isURL","Email","isEmail","Date","parseInt","date","parseDate","properties","Boolean","Error","name","getBlock","string","endCharacter","startIndex","substring","character","block","blocks","index","trim","_","entry"],"sources":["../../../source/read/schema/convertToJson.js"],"sourcesContent":["import parseDate from '../parseDate.js'\r\n\r\nimport Integer, { isInteger } from '../../types/Integer.js'\r\nimport URL, { isURL } from '../../types/URL.js'\r\nimport Email, { isEmail } from '../../types/Email.js'\r\n\r\nconst DEFAULT_OPTIONS = {\r\n isColumnOriented: false\r\n}\r\n\r\n/**\r\n * Convert 2D array to nested objects.\r\n * If row oriented data, row 0 is dotted key names.\r\n * Column oriented data is transposed.\r\n * @param {any[][]} data - An array of rows, each row being an array of cells.\r\n * @param {object} schema\r\n * @return {object[]}\r\n */\r\nexport default function(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 rowMap\r\n } = options\r\n\r\n validateSchema(schema)\r\n\r\n if (isColumnOriented) {\r\n data = transpose(data)\r\n }\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 - 1, columns, errors, options)\r\n if (result) {\r\n results.push(result)\r\n }\r\n }\r\n\r\n // Correct error rows.\r\n if (rowMap) {\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 // The `1` compensates for the header row.\r\n error.row = rowMap[error.row] + 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, columns, errors, options) {\r\n const object = {}\r\n for (const key of Object.keys(schema)) {\r\n const schemaEntry = schema[key]\r\n const isNestedSchema = typeof schemaEntry.type === 'object' && !Array.isArray(schemaEntry.type)\r\n let rawValue = row[columns.indexOf(key)]\r\n if (rawValue === undefined) {\r\n rawValue = null\r\n }\r\n let value\r\n let error\r\n if (isNestedSchema) {\r\n value = read(schemaEntry.type, row, rowIndex, columns, errors, options)\r\n } else {\r\n if (rawValue === null) {\r\n value = null\r\n }\r\n else if (Array.isArray(schemaEntry.type)) {\r\n let notEmpty = false\r\n const array = parseArray(rawValue).map((_value) => {\r\n const result = parseValue(_value, schemaEntry, options)\r\n if (result.error) {\r\n value = _value\r\n error = result.error\r\n }\r\n if (result.value !== null) {\r\n notEmpty = true\r\n }\r\n return result.value\r\n })\r\n if (!error) {\r\n value = notEmpty ? array : null\r\n }\r\n } else {\r\n const result = parseValue(rawValue, schemaEntry, options)\r\n error = result.error\r\n value = error ? rawValue : result.value\r\n }\r\n }\r\n if (!error && value === null && schemaEntry.required) {\r\n error = 'required'\r\n }\r\n if (error) {\r\n error = {\r\n error,\r\n row: rowIndex + 1,\r\n column: key,\r\n value\r\n }\r\n if (schemaEntry.type) {\r\n error.type = schemaEntry.type\r\n }\r\n errors.push(error)\r\n } else if (value !== null) {\r\n object[schemaEntry.prop] = value\r\n }\r\n }\r\n if (Object.keys(object).length > 0) {\r\n return object\r\n }\r\n return null\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 result = parseCustomValue(value, schemaEntry.parse)\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 and no .parse():\\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' }\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 value = parse(value)\r\n if (value === undefined) {\r\n return { value: null }\r\n }\r\n return { value }\r\n } catch (error) {\r\n return { error: error.message }\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 }}\r\n */\r\nfunction parseValueOfType(value, type, options) {\r\n switch (type) {\r\n case String:\r\n if (typeof value === 'string') {\r\n return { value }\r\n }\r\n // The global `isFinite()` function filters out:\r\n // * NaN\r\n // * -Infinity\r\n // * Infinity\r\n // All other values pass (including non-numbers).\r\n if (typeof value === 'number') {\r\n if (isFinite(value)) {\r\n return { value: String(value) }\r\n }\r\n }\r\n return { error: 'invalid' }\r\n\r\n case Number:\r\n case Integer:\r\n // Convert strings to numbers.\r\n // Just an additional feature.\r\n // Won't happen when called from `readXlsx()`.\r\n if (typeof value === 'string') {\r\n const stringifiedValue = value\r\n value = parseFloat(value)\r\n if (String(value) !== stringifiedValue) {\r\n return { error: 'invalid' }\r\n }\r\n } else if (typeof value !== 'number') {\r\n return { error: 'invalid' }\r\n }\r\n // The global `isFinite()` function filters out:\r\n // * NaN\r\n // * -Infinity\r\n // * Infinity\r\n // All other values pass (including non-numbers).\r\n // At this point, `value` can only be a number.\r\n if (!isFinite(value)) {\r\n return { error: 'invalid' }\r\n }\r\n if (type === Integer && !isInteger(value)) {\r\n return { error: 'invalid' }\r\n }\r\n return { value }\r\n\r\n case URL:\r\n if (typeof value === 'string') {\r\n if (isURL(value)) {\r\n return { value }\r\n }\r\n }\r\n return { error: 'invalid' }\r\n\r\n case Email:\r\n if (typeof value === 'string') {\r\n if (isEmail(value)) {\r\n return { value }\r\n }\r\n }\r\n return { error: 'invalid' }\r\n\r\n case Date:\r\n // XLSX has no specific format for dates.\r\n // Sometimes a date can be heuristically detected.\r\n // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777\r\n if (value instanceof Date) {\r\n return { value }\r\n }\r\n if (typeof value === 'number') {\r\n if (!isFinite(value)) {\r\n return { error: 'invalid' }\r\n }\r\n value = parseInt(value)\r\n const date = parseDate(value, options.properties)\r\n if (!date) {\r\n return { error: 'invalid' }\r\n }\r\n return { value: date }\r\n }\r\n return { error: 'invalid' }\r\n\r\n case Boolean:\r\n if (typeof value === 'boolean') {\r\n return { value }\r\n }\r\n return { error: 'invalid' }\r\n\r\n default:\r\n if (typeof type === 'function') {\r\n return parseCustomValue(value, type)\r\n }\r\n throw new Error(`Unknown 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) {\r\n const blocks = []\r\n let index = 0\r\n while (index < string.length) {\r\n const [substring, length] = getBlock(string, ',', index)\r\n index += length + ','.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 entry = schema[key]\r\n if (!entry.prop) {\r\n throw new Error(`\"prop\" not defined for schema entry \"${key}\".`)\r\n }\r\n }\r\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convertToJson.js","names":["DEFAULT_OPTIONS","isColumnOriented","data","schema","options","rowMap","validateSchema","transpose","columns","results","errors","i","length","result","read","push","error","row","rows","rowIndex","object","isEmptyObject","key","schemaEntry","isNestedSchema","type","Array","isArray","rawValue","indexOf","undefined","value","reason","notEmpty","array","parseArray","map","_value","parseValue","required","column","includeNullValues","prop","Object","keys","parse","parseCustomValue","parseValueOfType","oneOf","validate","message","String","isFinite","Number","Integer","stringifiedValue","isInteger","URL","isURL","Email","isEmail","Date","isNaN","date","parseDate","properties","Boolean","Error","name","getBlock","string","endCharacter","startIndex","substring","character","block","blocks","index","trim","_","entry"],"sources":["../../../source/read/schema/convertToJson.js"],"sourcesContent":["import parseDate from '../parseDate.js'\r\n\r\nimport Integer, { isInteger } from '../../types/Integer.js'\r\nimport URL, { isURL } from '../../types/URL.js'\r\nimport Email, { isEmail } from '../../types/Email.js'\r\n\r\nconst DEFAULT_OPTIONS = {\r\n isColumnOriented: false\r\n}\r\n\r\n/**\r\n * Convert 2D array to nested objects.\r\n * If row oriented data, row 0 is dotted key names.\r\n * Column oriented data is transposed.\r\n * @param {any[][]} data - An array of rows, each row being an array of cells.\r\n * @param {object} schema\r\n * @return {object[]}\r\n */\r\nexport default function(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 rowMap\r\n } = options\r\n\r\n validateSchema(schema)\r\n\r\n if (isColumnOriented) {\r\n data = transpose(data)\r\n }\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 - 1, columns, errors, options)\r\n if (result) {\r\n results.push(result)\r\n }\r\n }\r\n\r\n // Correct error rows.\r\n if (rowMap) {\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 // The `1` compensates for the header row.\r\n error.row = rowMap[error.row] + 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, columns, errors, options) {\r\n const object = {}\r\n let isEmptyObject = true\r\n for (const key of Object.keys(schema)) {\r\n const schemaEntry = schema[key]\r\n const isNestedSchema = typeof schemaEntry.type === 'object' && !Array.isArray(schemaEntry.type)\r\n let rawValue = row[columns.indexOf(key)]\r\n if (rawValue === undefined) {\r\n rawValue = null\r\n }\r\n let value\r\n let error\r\n let reason\r\n if (isNestedSchema) {\r\n value = read(schemaEntry.type, row, rowIndex, columns, errors, options)\r\n } else {\r\n if (rawValue === null) {\r\n value = null\r\n }\r\n else if (Array.isArray(schemaEntry.type)) {\r\n let notEmpty = false\r\n const array = parseArray(rawValue).map((_value) => {\r\n const result = parseValue(_value, schemaEntry, options)\r\n if (result.error) {\r\n value = _value\r\n error = result.error\r\n reason = result.reason\r\n }\r\n if (result.value !== null) {\r\n notEmpty = true\r\n }\r\n return result.value\r\n })\r\n if (!error) {\r\n value = notEmpty ? array : null\r\n }\r\n } else {\r\n const result = parseValue(rawValue, schemaEntry, options)\r\n error = result.error\r\n reason = result.reason\r\n value = error ? rawValue : result.value\r\n }\r\n }\r\n if (!error && value === null && schemaEntry.required) {\r\n error = 'required'\r\n }\r\n if (error) {\r\n error = {\r\n error,\r\n row: rowIndex + 1,\r\n column: key,\r\n value\r\n }\r\n if (reason) {\r\n error.reason = reason\r\n }\r\n if (schemaEntry.type) {\r\n error.type = schemaEntry.type\r\n }\r\n errors.push(error)\r\n } else {\r\n if (isEmptyObject && value !== null) {\r\n isEmptyObject = false\r\n }\r\n if (value !== null || options.includeNullValues) {\r\n object[schemaEntry.prop] = value\r\n }\r\n }\r\n }\r\n if (isEmptyObject) {\r\n return null\r\n }\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 result = parseCustomValue(value, schemaEntry.parse)\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 and no .parse():\\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 value = parse(value)\r\n if (value === undefined) {\r\n return { value: null }\r\n }\r\n return { value }\r\n } catch (error) {\r\n return { error: error.message }\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 if (typeof value === 'string') {\r\n return { value }\r\n }\r\n // Excel tends to perform a forced automatic convertion of string-type values\r\n // to number-type ones when the user has input them. Otherwise, users wouldn't\r\n // be able to perform formula calculations on those cell values because users\r\n // won't bother manually choosing a \"numeric\" cell type for each cell, and\r\n // even if they did, choosing a \"numeric\" cell type every time wouldn't be an\r\n // acceptable \"user experience\".\r\n //\r\n // So, if a cell value is supposed to be a string and Excel has automatically\r\n // converted it to a number, perform a backwards conversion.\r\n //\r\n if (typeof value === 'number') {\r\n // The global `isFinite()` function filters out:\r\n // * NaN\r\n // * -Infinity\r\n // * Infinity\r\n //\r\n // All other values pass (including non-numbers).\r\n //\r\n if (isFinite(value)) {\r\n return { value: String(value) }\r\n }\r\n return { error: 'invalid', reason: 'not_a_number' }\r\n }\r\n return { error: 'invalid', reason: 'not_a_string' }\r\n\r\n case Number:\r\n case Integer:\r\n // An XLSX file editing software might not always correctly\r\n // detect numeric values in string-type cells. Users won't bother\r\n // manually selecting a cell type, so the editing software has to guess\r\n // based on the user's input. One can assume that such auto-detection\r\n // might not always work.\r\n //\r\n // So, if a cell is supposed to be a numeric one, convert a string value to a number.\r\n //\r\n if (typeof value === 'string') {\r\n const stringifiedValue = value\r\n value = Number(value)\r\n if (String(value) !== stringifiedValue) {\r\n return { error: 'invalid', reason: 'not_a_number_string' }\r\n }\r\n } else if (typeof value !== 'number') {\r\n return { error: 'invalid', reason: 'not_a_number' }\r\n }\r\n // At this point, `value` can only be a number.\r\n //\r\n // The global `isFinite()` function filters out:\r\n // * NaN\r\n // * -Infinity\r\n // * Infinity\r\n //\r\n // All other values pass (including non-numbers).\r\n //\r\n if (!isFinite(value)) {\r\n return { error: 'invalid', reason: 'not_a_number' }\r\n }\r\n if (type === Integer && !isInteger(value)) {\r\n return { error: 'invalid', reason: 'not_an_integer' }\r\n }\r\n return { value }\r\n\r\n case URL:\r\n if (typeof value === 'string') {\r\n if (isURL(value)) {\r\n return { value }\r\n }\r\n return { error: 'invalid', reason: 'not_a_url' }\r\n }\r\n return { error: 'invalid', reason: 'not_a_string' }\r\n\r\n case Email:\r\n if (typeof value === 'string') {\r\n if (isEmail(value)) {\r\n return { value }\r\n }\r\n return { error: 'invalid', reason: 'not_an_email' }\r\n }\r\n return { error: 'invalid', reason: 'not_a_string' }\r\n\r\n case Date:\r\n // XLSX has no specific format for dates.\r\n // Sometimes a date can be heuristically detected.\r\n // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777\r\n if (value instanceof Date) {\r\n if (isNaN(value)) {\r\n return { error: 'invalid', reason: 'out_of_bounds' }\r\n }\r\n return { value }\r\n }\r\n if (typeof value === 'number') {\r\n if (!isFinite(value)) {\r\n return { error: 'invalid', reason: 'not_a_number' }\r\n }\r\n value = Number(value)\r\n const date = parseDate(value, options.properties)\r\n if (isNaN(date)) {\r\n return { error: 'invalid', reason: 'out_of_bounds' }\r\n }\r\n return { value: date }\r\n }\r\n return { error: 'invalid', reason: 'not_a_number' }\r\n\r\n case Boolean:\r\n if (typeof value === 'boolean') {\r\n return { value }\r\n }\r\n return { error: 'invalid', reason: 'not_a_boolean' }\r\n\r\n default:\r\n if (typeof type === 'function') {\r\n return parseCustomValue(value, type)\r\n }\r\n throw new Error(`Unknown 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) {\r\n const blocks = []\r\n let index = 0\r\n while (index < string.length) {\r\n const [substring, length] = getBlock(string, ',', index)\r\n index += length + ','.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 entry = schema[key]\r\n if (!entry.prop) {\r\n throw new Error(`\"prop\" not defined for schema entry \"${key}\".`)\r\n }\r\n }\r\n}"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertToJson.test.js","names":["date","convertToUTCTimezone","Date","describe","it","getBlock","should","deep","equal","parseArray","convertToJson","parse","getTimezoneOffset","DATE","prop","type","NUMBER","Number","BOOLEAN","Boolean","STRING","String","PHONE","value","PHONE_TYPE","rows","errors","toISOString","number","phone","phoneType","string","required","error","row","column","NAMES","names","INTEGER","Integer","length","URL","EMAIL","Email","NAME","validate","Error","TRUE","FALSE","INVALID","rowMap","STATUS","oneOf","getTime"],"sources":["../../../source/read/schema/convertToJson.test.js"],"sourcesContent":["import convertToJson, { parseArray, getBlock } from './convertToJson.js'\r\n\r\nimport Integer from '../../types/Integer.js'\r\nimport URL from '../../types/URL.js'\r\nimport Email from '../../types/Email.js'\r\n\r\nconst date = convertToUTCTimezone(new Date(2018, 3 - 1, 24))\r\n\r\ndescribe('convertToJson', () => {\r\n\tit('should parse arrays', () => {\r\n\t\tgetBlock('abc\"de,f\"g,h', ',', 0).should.deep.equal(['abcde,fg', 10])\r\n\t\tparseArray(' abc\"de,f\"g , h ').should.deep.equal(['abcde,fg', 'h'])\r\n\t})\r\n\r\n\tit('should convert to json', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING',\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t'123',\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc',\r\n\t\t\t\t'(123) 456-7890',\r\n\t\t\t\t'(123) 456-7890'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tDATE: {\r\n\t\t\t\tprop: 'date',\r\n\t\t\t\ttype: Date\r\n\t\t\t},\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number',\r\n\t\t\t\ttype: Number\r\n\t\t\t},\r\n\t\t\tBOOLEAN: {\r\n\t\t\t\tprop: 'boolean',\r\n\t\t\t\ttype: Boolean\r\n\t\t\t},\r\n\t\t\tSTRING: {\r\n\t\t\t\tprop: 'string',\r\n\t\t\t\ttype: String\r\n\t\t\t},\r\n\t\t\tPHONE: {\r\n\t\t\t\tprop: 'phone',\r\n\t\t\t\tparse(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tPHONE_TYPE: {\r\n\t\t\t\tprop: 'phoneType',\r\n\t\t\t\ttype(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\t// Convert `Date` to `String` for equality check.\r\n\t\trows[0].date = rows[0].date.toISOString()\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate: date.toISOString(),\r\n\t\t\tnumber: 123,\r\n\t\t\tphone: '+11234567890',\r\n\t\t\tphoneType: '+11234567890',\r\n\t\t\tboolean: true,\r\n\t\t\tstring: 'abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should support schema entries with no `type`s', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t123,\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tDATE: {\r\n\t\t\t\tprop: 'date'\r\n\t\t\t},\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number'\r\n\t\t\t},\r\n\t\t\tBOOLEAN: {\r\n\t\t\t\tprop: 'boolean'\r\n\t\t\t},\r\n\t\t\tSTRING: {\r\n\t\t\t\tprop: 'string'\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\t// Convert `Date` to `String` for equality check.\r\n\t\trows[0].date = rows[0].date.toISOString()\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate: date.toISOString(),\r\n\t\t\tnumber: 123,\r\n\t\t\tboolean: true,\r\n\t\t\tstring: 'abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should require fields', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should parse arrays', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NAMES'\r\n\t\t\t], [\r\n\t\t\t\t'Barack Obama, \"String, with, colons\", Donald Trump'\r\n\t\t\t], [\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tNAMES: {\r\n\t\t\t\tprop: 'names',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tnames: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse integers', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'INTEGER'\r\n\t\t\t], [\r\n\t\t\t\t'1'\r\n\t\t\t], [\r\n\t\t\t\t'1.2'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tINTEGER: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: Integer\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].row.should.equal(2)\r\n\t\terrors[0].column.should.equal('INTEGER')\r\n\t\terrors[0].error.should.equal('invalid')\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 1\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse URLs', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'URL'\r\n\t\t\t], [\r\n\t\t\t\t'https://kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'kremlin.ru'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tURL: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: URL\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].row.should.equal(2)\r\n\t\terrors[0].column.should.equal('URL')\r\n\t\terrors[0].error.should.equal('invalid')\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 'https://kremlin.ru'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse Emails', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'EMAIL'\r\n\t\t\t], [\r\n\t\t\t\t'vladimir.putin@kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tEMAIL: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: Email\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].row.should.equal(2)\r\n\t\terrors[0].column.should.equal('EMAIL')\r\n\t\terrors[0].error.should.equal('invalid')\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 'vladimir.putin@kremlin.ru'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should call .validate()', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NAME'\r\n\t\t\t], [\r\n\t\t\t\t'George Bush'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tNAME: {\r\n\t\t\t\tprop: 'name',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true,\r\n\t\t\t\tvalidate: (value) => {\r\n\t\t\t\t\tif (value === 'George Bush') {\r\n\t\t\t\t\t\tthrow new Error('custom-error')\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'custom-error',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'NAME',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: 'George Bush'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should validate numbers', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: '123abc'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should validate booleans', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'TRUE',\r\n\t\t\t\t'FALSE',\r\n\t\t\t\t'INVALID'\r\n\t\t\t], [\r\n\t\t\t\ttrue,\r\n\t\t\t\tfalse,\r\n\t\t\t\t'TRUE'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tTRUE: {\r\n\t\t\t\tprop: 'true',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tFALSE: {\r\n\t\t\t\tprop: 'false',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tINVALID: {\r\n\t\t\t\tprop: 'invalid',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'INVALID',\r\n\t\t\ttype: Boolean,\r\n\t\t\tvalue: 'TRUE'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\ttrue: true,\r\n\t\t\tfalse: false\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate dates', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'INVALID'\r\n\t\t\t], [\r\n\t\t\t\t43183, // 03/24/2018',\r\n\t\t\t\t'-'\r\n\t\t\t], [\r\n\t\t\t\tdate, // 03/24/2018',,\r\n\t\t\t\t'-'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tDATE: {\r\n\t\t\t\tprop: 'date',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tINVALID: {\r\n\t\t\t\tprop: 'invalid',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'INVALID',\r\n\t\t\ttype: Date,\r\n\t\t\tvalue: '-'\r\n\t\t}, {\r\n\t\t\terror: 'invalid',\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\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate\r\n\t\t}, {\r\n\t\t\tdate\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should throw parse() errors', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\t'123',\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tPHONE: {\r\n\t\t\t\tprop: 'phone',\r\n\t\t\t\tparse: () => {\r\n\t\t\t\t\tthrow new Error('invalid')\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tPHONE_TYPE: {\r\n\t\t\t\tprop: 'phoneType',\r\n\t\t\t\tparse: () => {\r\n\t\t\t\t\tthrow new Error('invalid')\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'PHONE',\r\n\t\t\tvalue: '123'\r\n\t\t}, {\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\tvalue: '123'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should map row numbers', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number',\r\n\t\t\t\ttype: Number\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\trowMap: [2, 5]\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 6,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: '123abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (valid)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'STARTED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tSTATUS: {\r\n\t\t\t\tprop: 'status',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(0)\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (not valid)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'SCHEDULED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tSTATUS: {\r\n\t\t\t\tprop: 'status',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'STATUS',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: 'SCHEDULED'\r\n\t\t}])\r\n\t})\r\n})\r\n\r\n\r\n// Converts timezone to UTC while preserving the same time\r\nfunction convertToUTCTimezone(date) {\r\n\t// Doesn't account for leap seconds but I guess that's ok\r\n\t// given that javascript's own `Date()` does not either.\r\n\t// https://www.timeanddate.com/time/leap-seconds-background.html\r\n\t//\r\n\t// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\r\n\t//\r\n\treturn new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000)\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convertToJson.test.js","names":["date","convertToUTCTimezone","Date","describe","it","getBlock","should","deep","equal","parseArray","convertToJson","parse","getTimezoneOffset","DATE","prop","type","NUMBER","Number","BOOLEAN","Boolean","STRING","String","PHONE","value","PHONE_TYPE","rows","errors","toISOString","number","phone","phoneType","string","required","error","row","column","NAMES","names","INTEGER","Integer","length","reason","URL","EMAIL","Email","NAME","validate","Error","TRUE","FALSE","INVALID","rowMap","STATUS","oneOf","A","B","C","CA","CB","a","b","c","includeNullValues","getTime"],"sources":["../../../source/read/schema/convertToJson.test.js"],"sourcesContent":["import convertToJson, { parseArray, getBlock } from './convertToJson.js'\r\n\r\nimport Integer from '../../types/Integer.js'\r\nimport URL from '../../types/URL.js'\r\nimport Email from '../../types/Email.js'\r\n\r\nconst date = convertToUTCTimezone(new Date(2018, 3 - 1, 24))\r\n\r\ndescribe('convertToJson', () => {\r\n\tit('should parse arrays', () => {\r\n\t\tgetBlock('abc\"de,f\"g,h', ',', 0).should.deep.equal(['abcde,fg', 10])\r\n\t\tparseArray(' abc\"de,f\"g , h ').should.deep.equal(['abcde,fg', 'h'])\r\n\t})\r\n\r\n\tit('should convert to json', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING',\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t'123',\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc',\r\n\t\t\t\t'(123) 456-7890',\r\n\t\t\t\t'(123) 456-7890'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tDATE: {\r\n\t\t\t\tprop: 'date',\r\n\t\t\t\ttype: Date\r\n\t\t\t},\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number',\r\n\t\t\t\ttype: Number\r\n\t\t\t},\r\n\t\t\tBOOLEAN: {\r\n\t\t\t\tprop: 'boolean',\r\n\t\t\t\ttype: Boolean\r\n\t\t\t},\r\n\t\t\tSTRING: {\r\n\t\t\t\tprop: 'string',\r\n\t\t\t\ttype: String\r\n\t\t\t},\r\n\t\t\tPHONE: {\r\n\t\t\t\tprop: 'phone',\r\n\t\t\t\tparse(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tPHONE_TYPE: {\r\n\t\t\t\tprop: 'phoneType',\r\n\t\t\t\ttype(value) {\r\n\t\t\t\t\treturn '+11234567890'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\t// Convert `Date` to `String` for equality check.\r\n\t\trows[0].date = rows[0].date.toISOString()\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate: date.toISOString(),\r\n\t\t\tnumber: 123,\r\n\t\t\tphone: '+11234567890',\r\n\t\t\tphoneType: '+11234567890',\r\n\t\t\tboolean: true,\r\n\t\t\tstring: 'abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should support schema entries with no `type`s', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'NUMBER',\r\n\t\t\t\t'BOOLEAN',\r\n\t\t\t\t'STRING'\r\n\t\t\t], [\r\n\t\t\t\tnew Date(Date.parse('03/24/2018') - new Date().getTimezoneOffset() * 60 * 1000), // '43183', // '03/24/2018',\r\n\t\t\t\t123,\r\n\t\t\t\ttrue,\r\n\t\t\t\t'abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tDATE: {\r\n\t\t\t\tprop: 'date'\r\n\t\t\t},\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number'\r\n\t\t\t},\r\n\t\t\tBOOLEAN: {\r\n\t\t\t\tprop: 'boolean'\r\n\t\t\t},\r\n\t\t\tSTRING: {\r\n\t\t\t\tprop: 'string'\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\t// Convert `Date` to `String` for equality check.\r\n\t\trows[0].date = rows[0].date.toISOString()\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate: date.toISOString(),\r\n\t\t\tnumber: 123,\r\n\t\t\tboolean: true,\r\n\t\t\tstring: 'abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should require fields', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'required',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: null\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should parse arrays', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NAMES'\r\n\t\t\t], [\r\n\t\t\t\t'Barack Obama, \"String, with, colons\", Donald Trump'\r\n\t\t\t], [\r\n\t\t\t\tnull\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tNAMES: {\r\n\t\t\t\tprop: 'names',\r\n\t\t\t\ttype: [String]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tnames: ['Barack Obama', 'String, with, colons', 'Donald Trump']\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse integers', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'INTEGER'\r\n\t\t\t], [\r\n\t\t\t\t'1'\r\n\t\t\t], [\r\n\t\t\t\t'1.2'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tINTEGER: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: Integer\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].should.deep.equal({\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_an_integer',\r\n\t\t\trow: 2,\r\n\t\t\tcolumn: 'INTEGER',\r\n\t\t\ttype: Integer,\r\n\t\t\tvalue: '1.2'\r\n\t\t})\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 1\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse URLs', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'URL'\r\n\t\t\t], [\r\n\t\t\t\t'https://kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'kremlin.ru'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tURL: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: URL\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].row.should.equal(2)\r\n\t\terrors[0].column.should.equal('URL')\r\n\t\terrors[0].error.should.equal('invalid')\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 'https://kremlin.ru'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should parse Emails', () =>\r\n\t{\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'EMAIL'\r\n\t\t\t], [\r\n\t\t\t\t'vladimir.putin@kremlin.ru'\r\n\t\t\t], [\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tEMAIL: {\r\n\t\t\t\tprop: 'value',\r\n\t\t\t\ttype: Email\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(1)\r\n\t\terrors[0].row.should.equal(2)\r\n\t\terrors[0].column.should.equal('EMAIL')\r\n\t\terrors[0].error.should.equal('invalid')\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\tvalue: 'vladimir.putin@kremlin.ru'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should call .validate()', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NAME'\r\n\t\t\t], [\r\n\t\t\t\t'George Bush'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tNAME: {\r\n\t\t\t\tprop: 'name',\r\n\t\t\t\ttype: String,\r\n\t\t\t\trequired: true,\r\n\t\t\t\tvalidate: (value) => {\r\n\t\t\t\t\tif (value === 'George Bush') {\r\n\t\t\t\t\t\tthrow new Error('custom-error')\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'custom-error',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'NAME',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: 'George Bush'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should validate numbers', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number',\r\n\t\t\t\ttype: Number,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number_string',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: '123abc'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should validate booleans', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'TRUE',\r\n\t\t\t\t'FALSE',\r\n\t\t\t\t'INVALID'\r\n\t\t\t], [\r\n\t\t\t\ttrue,\r\n\t\t\t\tfalse,\r\n\t\t\t\t'TRUE'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tTRUE: {\r\n\t\t\t\tprop: 'true',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tFALSE: {\r\n\t\t\t\tprop: 'false',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tINVALID: {\r\n\t\t\t\tprop: 'invalid',\r\n\t\t\t\ttype: Boolean,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_boolean',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'INVALID',\r\n\t\t\ttype: Boolean,\r\n\t\t\tvalue: 'TRUE'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([{\r\n\t\t\ttrue: true,\r\n\t\t\tfalse: false\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate dates', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'DATE',\r\n\t\t\t\t'INVALID'\r\n\t\t\t], [\r\n\t\t\t\t43183, // 03/24/2018',\r\n\t\t\t\t'-'\r\n\t\t\t], [\r\n\t\t\t\tdate, // 03/24/2018',,\r\n\t\t\t\t'-'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tDATE: {\r\n\t\t\t\tprop: 'date',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t},\r\n\t\t\tINVALID: {\r\n\t\t\t\tprop: 'invalid',\r\n\t\t\t\ttype: Date,\r\n\t\t\t\trequired: true\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'INVALID',\r\n\t\t\ttype: Date,\r\n\t\t\tvalue: '-'\r\n\t\t}, {\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number',\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\r\n\t\trows.should.deep.equal([{\r\n\t\t\tdate\r\n\t\t}, {\r\n\t\t\tdate\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should throw parse() errors', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'PHONE',\r\n\t\t\t\t'PHONE_TYPE'\r\n\t\t\t], [\r\n\t\t\t\t'123',\r\n\t\t\t\t'123'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tPHONE: {\r\n\t\t\t\tprop: 'phone',\r\n\t\t\t\tparse: () => {\r\n\t\t\t\t\tthrow new Error('invalid')\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tPHONE_TYPE: {\r\n\t\t\t\tprop: 'phoneType',\r\n\t\t\t\tparse: () => {\r\n\t\t\t\t\tthrow new Error('invalid')\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'PHONE',\r\n\t\t\tvalue: '123'\r\n\t\t}, {\r\n\t\t\terror: 'invalid',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'PHONE_TYPE',\r\n\t\t\tvalue: '123'\r\n\t\t}])\r\n\r\n\t\trows.should.deep.equal([])\r\n\t})\r\n\r\n\tit('should map row numbers', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'NUMBER'\r\n\t\t\t], [\r\n\t\t\t\t'123abc'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tNUMBER: {\r\n\t\t\t\tprop: 'number',\r\n\t\t\t\ttype: Number\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\trowMap: [2, 5]\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'not_a_number_string',\r\n\t\t\trow: 6,\r\n\t\t\tcolumn: 'NUMBER',\r\n\t\t\ttype: Number,\r\n\t\t\tvalue: '123abc'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (valid)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'STARTED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tSTATUS: {\r\n\t\t\t\tprop: 'status',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.length.should.equal(0)\r\n\t})\r\n\r\n\tit('should validate \"oneOf\" (not valid)', () => {\r\n\t\tconst { rows, errors } = convertToJson([\r\n\t\t\t[\r\n\t\t\t\t'STATUS'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'SCHEDULED'\r\n\t\t\t]\r\n\t\t], {\r\n\t\t\tSTATUS: {\r\n\t\t\t\tprop: 'status',\r\n\t\t\t\ttype: String,\r\n\t\t\t\toneOf: [\r\n\t\t\t\t\t'STARTED',\r\n\t\t\t\t\t'FINISHED'\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\terrors.should.deep.equal([{\r\n\t\t\terror: 'invalid',\r\n\t\t\treason: 'unknown',\r\n\t\t\trow: 1,\r\n\t\t\tcolumn: 'STATUS',\r\n\t\t\ttype: String,\r\n\t\t\tvalue: 'SCHEDULED'\r\n\t\t}])\r\n\t})\r\n\r\n\tit('should not include `null` values by default', function() {\r\n\t\tconst { rows } = convertToJson(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', 'ca', null],\r\n\t\t\t\t['a', null]\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\tA: {\r\n\t\t\t\t\tprop: 'a',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tB: {\r\n\t\t\t\t\tprop: 'b',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tC: {\r\n\t\t\t\t\tprop: 'c',\r\n \t\t\ttype: {\r\n\t\t\t\t\t\tCA: {\r\n\t\t\t\t\t\t\tprop: 'a',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tCB: {\r\n\t\t\t\t\t\t\tprop: 'b',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\trows.should.deep.equal([\r\n\t\t\t{ a: 'a', b: 'b', c: { a: 'ca' } },\r\n\t\t\t{ a: 'a' },\r\n\t\t])\r\n\t})\r\n\r\n\tit('should include `null` values when `includeNullValues: true` option is passed', function() {\r\n\t\tconst { rows } = convertToJson(\r\n\t\t\t[\r\n\t\t\t\t['A', 'B', 'CA', 'CB'],\r\n\t\t\t\t['a', 'b', 'ca', null],\r\n\t\t\t\t['a', null]\r\n\t\t\t],\r\n\t\t\t{\r\n\t\t\t\tA: {\r\n\t\t\t\t\tprop: 'a',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tB: {\r\n\t\t\t\t\tprop: 'b',\r\n\t\t\t\t\ttype: String\r\n\t\t\t\t},\r\n\t\t\t\tC: {\r\n\t\t\t\t\tprop: 'c',\r\n \t\t\ttype: {\r\n\t\t\t\t\t\tCA: {\r\n\t\t\t\t\t\t\tprop: 'a',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tCB: {\r\n\t\t\t\t\t\t\tprop: 'b',\r\n\t\t\t\t\t\t\ttype: String\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tincludeNullValues: true\r\n\t\t\t}\r\n\t\t)\r\n\r\n\t\trows.should.deep.equal([\r\n\t\t\t{ a: 'a', b: 'b', c: { a: 'ca', b: null } },\r\n\t\t\t{ a: 'a', b: null, c: null },\r\n\t\t])\r\n\t})\r\n})\r\n\r\n// Converts timezone to UTC while preserving the same time\r\nfunction convertToUTCTimezone(date) {\r\n\t// Doesn't account for leap seconds but I guess that's ok\r\n\t// given that javascript's own `Date()` does not either.\r\n\t// https://www.timeanddate.com/time/leap-seconds-background.html\r\n\t//\r\n\t// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\r\n\t//\r\n\treturn new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000)\r\n}\r\n"],"mappings":"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"}
|
package/commonjs/xml/dom.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.findChild = findChild;
|
|
7
7
|
exports.findChildren = findChildren;
|
|
8
8
|
exports.forEach = forEach;
|
|
9
|
+
exports.getOuterXml = getOuterXml;
|
|
9
10
|
exports.getTagName = getTagName;
|
|
10
11
|
exports.map = map;
|
|
11
12
|
|
|
@@ -85,5 +86,33 @@ function getTagName(element) {
|
|
|
85
86
|
// when getting `.tagName`, so just replacing anything
|
|
86
87
|
// before a colon, if any.
|
|
87
88
|
return element.tagName.replace(NAMESPACE_REG_EXP, '');
|
|
89
|
+
} // This function is only used for occasional debug messages.
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
function getOuterXml(node) {
|
|
93
|
+
// `nodeType: 1` means "Element".
|
|
94
|
+
// https://www.w3schools.com/xml/prop_element_nodetype.asp
|
|
95
|
+
if (node.nodeType !== 1) {
|
|
96
|
+
return node.textContent;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
var xml = '<' + getTagName(node);
|
|
100
|
+
var j = 0;
|
|
101
|
+
|
|
102
|
+
while (j < node.attributes.length) {
|
|
103
|
+
xml += ' ' + node.attributes[j].name + '=' + '"' + node.attributes[j].value + '"';
|
|
104
|
+
j++;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
xml += '>';
|
|
108
|
+
var i = 0;
|
|
109
|
+
|
|
110
|
+
while (i < node.childNodes.length) {
|
|
111
|
+
xml += getOuterXml(node.childNodes[i]);
|
|
112
|
+
i++;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
xml += '</' + getTagName(node) + '>';
|
|
116
|
+
return xml;
|
|
88
117
|
}
|
|
89
118
|
//# sourceMappingURL=dom.js.map
|
package/commonjs/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"],"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}"],"mappings":"
|
|
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","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\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/commonjs/xml/xlsx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx.js","names":["getCells","document","worksheet","documentElement","sheetData","findChild","cells","forEach","row","cell","push","getMergedCells","mergedCells","mergedCellsInfo","mergedCell","getAttribute","getCellValue","node","getCellInlineStringValue","firstChild","getTagName","textContent","getDimensions","dimensions","getBaseStyles","styleSheet","cellStyleXfs","findChildren","getCellStyles","cellXfs","getNumberFormats","numberFormats","numFmts","getSharedStrings","sst","map","string","t","value","r","getWorkbookProperties","workbook","getRelationships","relationships","getSheets","sheets"],"sources":["../../source/xml/xlsx.js"],"sourcesContent":["import { findChild, findChildren, forEach, map, getTagName } from './dom.js'\r\n\r\nexport function getCells(document) {\r\n const worksheet = document.documentElement\r\n const sheetData = findChild(worksheet, 'sheetData')\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 if (node.firstChild &&\r\n getTagName(node.firstChild) === 'is' &&\r\n node.firstChild.firstChild &&\r\n getTagName(node.firstChild.firstChild) === 't') {\r\n return node.firstChild.firstChild.textContent\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":";;;;;;;;;;;;;;;;;;AAAA;;AAEO,SAASA,QAAT,CAAkBC,QAAlB,EAA4B;EACjC,IAAMC,SAAS,GAAGD,QAAQ,CAACE,eAA3B;EACA,IAAMC,SAAS,GAAG,IAAAC,cAAA,EAAUH,SAAV,EAAqB,WAArB,CAAlB;
|
|
1
|
+
{"version":3,"file":"xlsx.js","names":["getCells","document","worksheet","documentElement","sheetData","findChild","cells","forEach","row","cell","push","getMergedCells","mergedCells","mergedCellsInfo","mergedCell","getAttribute","getCellValue","node","getCellInlineStringValue","firstChild","getTagName","textContent","getDimensions","dimensions","getBaseStyles","styleSheet","cellStyleXfs","findChildren","getCellStyles","cellXfs","getNumberFormats","numberFormats","numFmts","getSharedStrings","sst","map","string","t","value","r","getWorkbookProperties","workbook","getRelationships","relationships","getSheets","sheets"],"sources":["../../source/xml/xlsx.js"],"sourcesContent":["import { findChild, findChildren, forEach, map, getTagName } from './dom.js'\r\n\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 if (\r\n node.firstChild &&\r\n getTagName(node.firstChild) === 'is' &&\r\n node.firstChild.firstChild &&\r\n getTagName(node.firstChild.firstChild) === 't'\r\n ) {\r\n return node.firstChild.firstChild.textContent\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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"}
|