read-excel-file 5.3.3 → 5.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +21 -14
  3. package/bundle/read-excel-file.min.js +1 -1
  4. package/bundle/read-excel-file.min.js.map +1 -1
  5. package/commonjs/read/isDateTimestamp.js +112 -0
  6. package/commonjs/read/isDateTimestamp.js.map +1 -0
  7. package/commonjs/read/parseCell.js +5 -0
  8. package/commonjs/read/parseCell.js.map +1 -1
  9. package/commonjs/read/parseCellValue.js +66 -82
  10. package/commonjs/read/parseCellValue.js.map +1 -1
  11. package/commonjs/read/parseDate.js.map +1 -1
  12. package/commonjs/read/schema/convertToJson.js +87 -26
  13. package/commonjs/read/schema/convertToJson.js.map +1 -1
  14. package/commonjs/read/schema/convertToJson.test.js.map +1 -1
  15. package/commonjs/xml/dom.js +29 -0
  16. package/commonjs/xml/dom.js.map +1 -1
  17. package/commonjs/xml/xlsx.js.map +1 -1
  18. package/commonjs/xml/xml.js +2 -4
  19. package/commonjs/xml/xml.js.map +1 -1
  20. package/commonjs/xml/{xlsx-xpath.js → xpath/xlsx-xpath.js} +1 -0
  21. package/commonjs/xml/xpath/xlsx-xpath.js.map +1 -0
  22. package/commonjs/xml/{xpathBrowser.js → xpath/xpathBrowser.js} +1 -0
  23. package/commonjs/xml/xpath/xpathBrowser.js.map +1 -0
  24. package/commonjs/xml/{xpathNode.js → xpath/xpathNode.js} +1 -1
  25. package/commonjs/xml/xpath/xpathNode.js.map +1 -0
  26. package/modules/read/isDateTimestamp.js +104 -0
  27. package/modules/read/isDateTimestamp.js.map +1 -0
  28. package/modules/read/parseCell.js +5 -1
  29. package/modules/read/parseCell.js.map +1 -1
  30. package/modules/read/parseCellValue.js +64 -80
  31. package/modules/read/parseCellValue.js.map +1 -1
  32. package/modules/read/parseDate.js.map +1 -1
  33. package/modules/read/schema/convertToJson.js +87 -26
  34. package/modules/read/schema/convertToJson.js.map +1 -1
  35. package/modules/read/schema/convertToJson.test.js.map +1 -1
  36. package/modules/xml/dom.js +27 -0
  37. package/modules/xml/dom.js.map +1 -1
  38. package/modules/xml/xlsx.js.map +1 -1
  39. package/modules/xml/xml.js +2 -2
  40. package/modules/xml/xml.js.map +1 -1
  41. package/modules/xml/{xlsx-xpath.js → xpath/xlsx-xpath.js} +1 -0
  42. package/modules/xml/xpath/xlsx-xpath.js.map +1 -0
  43. package/modules/xml/{xpathBrowser.js → xpath/xpathBrowser.js} +1 -0
  44. package/modules/xml/xpath/xpathBrowser.js.map +1 -0
  45. package/modules/xml/{xpathNode.js → xpath/xpathNode.js} +1 -1
  46. package/modules/xml/xpath/xpathNode.js.map +1 -0
  47. package/package.json +1 -1
  48. package/types.d.ts +1 -0
  49. package/commonjs/xml/xlsx-xpath.js.map +0 -1
  50. package/commonjs/xml/xpathBrowser.js.map +0 -1
  51. package/commonjs/xml/xpathNode.js.map +0 -1
  52. package/modules/xml/xlsx-xpath.js.map +0 -1
  53. package/modules/xml/xpathBrowser.js.map +0 -1
  54. package/modules/xml/xpathNode.js.map +0 -1
@@ -96,6 +96,7 @@ function read(schema, row, rowIndex, columns, errors, options) {
96
96
 
97
97
  var value = void 0;
98
98
  var error = void 0;
99
+ var reason = void 0;
99
100
 
100
101
  if (isNestedSchema) {
101
102
  value = read(schemaEntry.type, row, rowIndex, columns, errors, options);
@@ -110,6 +111,7 @@ function read(schema, row, rowIndex, columns, errors, options) {
110
111
  if (result.error) {
111
112
  value = _value;
112
113
  error = result.error;
114
+ reason = result.reason;
113
115
  }
114
116
 
115
117
  if (result.value !== null) {
@@ -125,6 +127,7 @@ function read(schema, row, rowIndex, columns, errors, options) {
125
127
  } else {
126
128
  var result = parseValue(rawValue, schemaEntry, options);
127
129
  error = result.error;
130
+ reason = result.reason;
128
131
  value = error ? rawValue : result.value;
129
132
  }
130
133
  }
@@ -141,6 +144,10 @@ function read(schema, row, rowIndex, columns, errors, options) {
141
144
  value: value
142
145
  };
143
146
 
147
+ if (reason) {
148
+ error.reason = reason;
149
+ }
150
+
144
151
  if (schemaEntry.type) {
145
152
  error.type = schemaEntry.type;
146
153
  }
@@ -201,7 +208,8 @@ export function parseValue(value, schemaEntry, options) {
201
208
  if (result.value !== null) {
202
209
  if (schemaEntry.oneOf && schemaEntry.oneOf.indexOf(result.value) < 0) {
203
210
  return {
204
- error: 'invalid'
211
+ error: 'invalid',
212
+ reason: 'unknown'
205
213
  };
206
214
  }
207
215
 
@@ -248,7 +256,7 @@ function parseCustomValue(value, parse) {
248
256
  * Converts textual value to a javascript typed value.
249
257
  * @param {any} value
250
258
  * @param {} type
251
- * @return {{ value: (string|number|Date|boolean), error: string }}
259
+ * @return {{ value: (string|number|Date|boolean), error: string, reason?: string }}
252
260
  */
253
261
 
254
262
 
@@ -259,60 +267,90 @@ function parseValueOfType(value, type, options) {
259
267
  return {
260
268
  value: value
261
269
  };
262
- } // The global `isFinite()` function filters out:
263
- // * NaN
264
- // * -Infinity
265
- // * Infinity
266
- // All other values pass (including non-numbers).
270
+ } // Excel tends to perform a forced automatic convertion of string-type values
271
+ // to number-type ones when the user has input them. Otherwise, users wouldn't
272
+ // be able to perform formula calculations on those cell values because users
273
+ // won't bother manually choosing a "numeric" cell type for each cell, and
274
+ // even if they did, choosing a "numeric" cell type every time wouldn't be an
275
+ // acceptable "user experience".
276
+ //
277
+ // So, if a cell value is supposed to be a string and Excel has automatically
278
+ // converted it to a number, perform a backwards conversion.
279
+ //
267
280
 
268
281
 
269
282
  if (typeof value === 'number') {
283
+ // The global `isFinite()` function filters out:
284
+ // * NaN
285
+ // * -Infinity
286
+ // * Infinity
287
+ //
288
+ // All other values pass (including non-numbers).
289
+ //
270
290
  if (isFinite(value)) {
271
291
  return {
272
292
  value: String(value)
273
293
  };
274
294
  }
295
+
296
+ return {
297
+ error: 'invalid',
298
+ reason: 'not_a_number'
299
+ };
275
300
  }
276
301
 
277
302
  return {
278
- error: 'invalid'
303
+ error: 'invalid',
304
+ reason: 'not_a_string'
279
305
  };
280
306
 
281
307
  case Number:
282
308
  case Integer:
283
- // Convert strings to numbers.
284
- // Just an additional feature.
285
- // Won't happen when called from `readXlsx()`.
309
+ // An XLSX file editing software might not always correctly
310
+ // detect numeric values in string-type cells. Users won't bother
311
+ // manually selecting a cell type, so the editing software has to guess
312
+ // based on the user's input. One can assume that such auto-detection
313
+ // might not always work.
314
+ //
315
+ // So, if a cell is supposed to be a numeric one, convert a string value to a number.
316
+ //
286
317
  if (typeof value === 'string') {
287
318
  var stringifiedValue = value;
288
- value = parseFloat(value);
319
+ value = Number(value);
289
320
 
290
321
  if (String(value) !== stringifiedValue) {
291
322
  return {
292
- error: 'invalid'
323
+ error: 'invalid',
324
+ reason: 'not_a_number_string'
293
325
  };
294
326
  }
295
327
  } else if (typeof value !== 'number') {
296
328
  return {
297
- error: 'invalid'
329
+ error: 'invalid',
330
+ reason: 'not_a_number'
298
331
  };
299
- } // The global `isFinite()` function filters out:
332
+ } // At this point, `value` can only be a number.
333
+ //
334
+ // The global `isFinite()` function filters out:
300
335
  // * NaN
301
336
  // * -Infinity
302
337
  // * Infinity
338
+ //
303
339
  // All other values pass (including non-numbers).
304
- // At this point, `value` can only be a number.
340
+ //
305
341
 
306
342
 
307
343
  if (!isFinite(value)) {
308
344
  return {
309
- error: 'invalid'
345
+ error: 'invalid',
346
+ reason: 'not_a_number'
310
347
  };
311
348
  }
312
349
 
313
350
  if (type === Integer && !isInteger(value)) {
314
351
  return {
315
- error: 'invalid'
352
+ error: 'invalid',
353
+ reason: 'not_an_integer'
316
354
  };
317
355
  }
318
356
 
@@ -327,10 +365,16 @@ function parseValueOfType(value, type, options) {
327
365
  value: value
328
366
  };
329
367
  }
368
+
369
+ return {
370
+ error: 'invalid',
371
+ reason: 'not_a_url'
372
+ };
330
373
  }
331
374
 
332
375
  return {
333
- error: 'invalid'
376
+ error: 'invalid',
377
+ reason: 'not_a_string'
334
378
  };
335
379
 
336
380
  case Email:
@@ -340,10 +384,16 @@ function parseValueOfType(value, type, options) {
340
384
  value: value
341
385
  };
342
386
  }
387
+
388
+ return {
389
+ error: 'invalid',
390
+ reason: 'not_an_email'
391
+ };
343
392
  }
344
393
 
345
394
  return {
346
- error: 'invalid'
395
+ error: 'invalid',
396
+ reason: 'not_a_string'
347
397
  };
348
398
 
349
399
  case Date:
@@ -351,6 +401,13 @@ function parseValueOfType(value, type, options) {
351
401
  // Sometimes a date can be heuristically detected.
352
402
  // https://github.com/catamphetamine/read-excel-file/issues/3#issuecomment-395770777
353
403
  if (value instanceof Date) {
404
+ if (isNaN(value)) {
405
+ return {
406
+ error: 'invalid',
407
+ reason: 'out_of_bounds'
408
+ };
409
+ }
410
+
354
411
  return {
355
412
  value: value
356
413
  };
@@ -359,16 +416,18 @@ function parseValueOfType(value, type, options) {
359
416
  if (typeof value === 'number') {
360
417
  if (!isFinite(value)) {
361
418
  return {
362
- error: 'invalid'
419
+ error: 'invalid',
420
+ reason: 'not_a_number'
363
421
  };
364
422
  }
365
423
 
366
- value = parseInt(value);
424
+ value = Number(value);
367
425
  var date = parseDate(value, options.properties);
368
426
 
369
- if (!date) {
427
+ if (isNaN(date)) {
370
428
  return {
371
- error: 'invalid'
429
+ error: 'invalid',
430
+ reason: 'out_of_bounds'
372
431
  };
373
432
  }
374
433
 
@@ -378,7 +437,8 @@ function parseValueOfType(value, type, options) {
378
437
  }
379
438
 
380
439
  return {
381
- error: 'invalid'
440
+ error: 'invalid',
441
+ reason: 'not_a_number'
382
442
  };
383
443
 
384
444
  case Boolean:
@@ -389,7 +449,8 @@ function parseValueOfType(value, type, options) {
389
449
  }
390
450
 
391
451
  return {
392
- error: 'invalid'
452
+ error: 'invalid',
453
+ reason: 'not_a_boolean'
393
454
  };
394
455
 
395
456
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"convertToJson.js","names":["parseDate","Integer","isInteger","URL","isURL","Email","isEmail","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","stringifiedValue","parseFloat","Date","parseInt","date","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":["parseDate","Integer","isInteger","URL","isURL","Email","isEmail","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","reason","notEmpty","array","parseArray","map","_value","parseValue","required","column","prop","Object","keys","parse","parseCustomValue","parseValueOfType","oneOf","validate","message","String","isFinite","Number","stringifiedValue","Date","isNaN","date","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 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 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', 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":["convertToJson","parseArray","getBlock","Integer","URL","Email","date","convertToUTCTimezone","Date","describe","it","should","deep","equal","parse","getTimezoneOffset","DATE","prop","type","NUMBER","Number","BOOLEAN","Boolean","STRING","String","PHONE","value","PHONE_TYPE","rows","errors","toISOString","number","phone","phoneType","string","required","error","row","column","NAMES","names","INTEGER","length","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":["convertToJson","parseArray","getBlock","Integer","URL","Email","date","convertToUTCTimezone","Date","describe","it","should","deep","equal","parse","getTimezoneOffset","DATE","prop","type","NUMBER","Number","BOOLEAN","Boolean","STRING","String","PHONE","value","PHONE_TYPE","rows","errors","toISOString","number","phone","phoneType","string","required","error","row","column","NAMES","names","INTEGER","length","reason","EMAIL","NAME","validate","Error","TRUE","FALSE","INVALID","rowMap","STATUS","oneOf","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\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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"}
@@ -69,5 +69,32 @@ export function getTagName(element) {
69
69
  // when getting `.tagName`, so just replacing anything
70
70
  // before a colon, if any.
71
71
  return element.tagName.replace(NAMESPACE_REG_EXP, '');
72
+ } // This function is only used for occasional debug messages.
73
+
74
+ export function getOuterXml(node) {
75
+ // `nodeType: 1` means "Element".
76
+ // https://www.w3schools.com/xml/prop_element_nodetype.asp
77
+ if (node.nodeType !== 1) {
78
+ return node.textContent;
79
+ }
80
+
81
+ var xml = '<' + getTagName(node);
82
+ var j = 0;
83
+
84
+ while (j < node.attributes.length) {
85
+ xml += ' ' + node.attributes[j].name + '=' + '"' + node.attributes[j].value + '"';
86
+ j++;
87
+ }
88
+
89
+ xml += '>';
90
+ var i = 0;
91
+
92
+ while (i < node.childNodes.length) {
93
+ xml += getOuterXml(node.childNodes[i]);
94
+ i++;
95
+ }
96
+
97
+ xml += '</' + getTagName(node) + '>';
98
+ return xml;
72
99
  }
73
100
  //# sourceMappingURL=dom.js.map
@@ -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":"AAAA,OAAO,SAASA,SAAT,CAAmBC,IAAnB,EAAyBC,OAAzB,EAAkC;EACxC,IAAIC,CAAC,GAAG,CAAR;;EACA,OAAOA,CAAC,GAAGF,IAAI,CAACG,UAAL,CAAgBC,MAA3B,EAAmC;IAClC,IAAMC,SAAS,GAAGL,IAAI,CAACG,UAAL,CAAgBD,CAAhB,CAAlB,CADkC,CAElC;IACA;;IACA,IAAIG,SAAS,CAACC,QAAV,KAAuB,CAAvB,IAA4BC,UAAU,CAACF,SAAD,CAAV,KAA0BJ,OAA1D,EAAmE;MAClE,OAAOI,SAAP;IACA;;IACDH,CAAC;EACD;AACD;AAED,OAAO,SAASM,YAAT,CAAsBR,IAAtB,EAA4BC,OAA5B,EAAqC;EAC3C,IAAMQ,OAAO,GAAG,EAAhB;EACA,IAAIP,CAAC,GAAG,CAAR;;EACA,OAAOA,CAAC,GAAGF,IAAI,CAACG,UAAL,CAAgBC,MAA3B,EAAmC;IAClC,IAAMC,SAAS,GAAGL,IAAI,CAACG,UAAL,CAAgBD,CAAhB,CAAlB,CADkC,CAElC;IACA;;IACA,IAAIG,SAAS,CAACC,QAAV,KAAuB,CAAvB,IAA4BC,UAAU,CAACF,SAAD,CAAV,KAA0BJ,OAA1D,EAAmE;MAClEQ,OAAO,CAACC,IAAR,CAAaL,SAAb;IACA;;IACDH,CAAC;EACD;;EACD,OAAOO,OAAP;AACA;AAED,OAAO,SAASE,OAAT,CAAiBX,IAAjB,EAAuBC,OAAvB,EAAgCW,IAAhC,EAAsC;EAC5C;EACA;EACA;EACA;EACA,IAAIV,CAAC,GAAG,CAAR;;EACA,OAAOA,CAAC,GAAGF,IAAI,CAACG,UAAL,CAAgBC,MAA3B,EAAmC;IAClC,IAAMC,SAAS,GAAGL,IAAI,CAACG,UAAL,CAAgBD,CAAhB,CAAlB;;IACA,IAAID,OAAJ,EAAa;MACZ;MACA;MACA,IAAII,SAAS,CAACC,QAAV,KAAuB,CAAvB,IAA4BC,UAAU,CAACF,SAAD,CAAV,KAA0BJ,OAA1D,EAAmE;QAClEW,IAAI,CAACP,SAAD,EAAYH,CAAZ,CAAJ;MACA;IACD,CAND,MAMO;MACNU,IAAI,CAACP,SAAD,EAAYH,CAAZ,CAAJ;IACA;;IACDA,CAAC;EACD;AACD;AAED,OAAO,SAASW,GAAT,CAAab,IAAb,EAAmBC,OAAnB,EAA4BW,IAA5B,EAAkC;EACxC,IAAMH,OAAO,GAAG,EAAhB;EACAE,OAAO,CAACX,IAAD,EAAOC,OAAP,EAAgB,UAACD,IAAD,EAAOE,CAAP,EAAa;IACnCO,OAAO,CAACC,IAAR,CAAaE,IAAI,CAACZ,IAAD,EAAOE,CAAP,CAAjB;EACA,CAFM,CAAP;EAGA,OAAOO,OAAP;AACA;AAED,IAAMK,iBAAiB,GAAG,MAA1B;AACA,OAAO,SAASP,UAAT,CAAoBQ,OAApB,EAA6B;EACnC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAOA,OAAO,CAACd,OAAR,CAAgBe,OAAhB,CAAwBF,iBAAxB,EAA2C,EAA3C,CAAP;AACA"}
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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"xlsx.js","names":["findChild","findChildren","forEach","map","getTagName","getCells","document","worksheet","documentElement","sheetData","cells","row","cell","push","getMergedCells","mergedCells","mergedCellsInfo","mergedCell","getAttribute","getCellValue","node","getCellInlineStringValue","firstChild","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, 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,SAASA,SAAT,EAAoBC,YAApB,EAAkCC,OAAlC,EAA2CC,GAA3C,EAAgDC,UAAhD,QAAkE,UAAlE;AAEA,OAAO,SAASC,QAAT,CAAkBC,QAAlB,EAA4B;EACjC,IAAMC,SAAS,GAAGD,QAAQ,CAACE,eAA3B;EACA,IAAMC,SAAS,GAAGT,SAAS,CAACO,SAAD,EAAY,WAAZ,CAA3B;EACA,IAAMG,KAAK,GAAG,EAAd;EACAR,OAAO,CAACO,SAAD,EAAY,KAAZ,EAAmB,UAACE,GAAD,EAAS;IACjCT,OAAO,CAACS,GAAD,EAAM,GAAN,EAAW,UAACC,IAAD,EAAU;MAC1BF,KAAK,CAACG,IAAN,CAAWD,IAAX;IACD,CAFM,CAAP;EAGD,CAJM,CAAP;EAKA,OAAOF,KAAP;AACD;AAED,OAAO,SAASI,cAAT,CAAwBR,QAAxB,EAAkC;EACvC,IAAMC,SAAS,GAAGD,QAAQ,CAACE,eAA3B;EACA,IAAMO,WAAW,GAAGf,SAAS,CAACO,SAAD,EAAY,YAAZ,CAA7B;EACA,IAAMS,eAAe,GAAG,EAAxB;;EACA,IAAID,WAAJ,EAAiB;IACfb,OAAO,CAACa,WAAD,EAAc,WAAd,EAA2B,UAACE,UAAD,EAAgB;MAChDD,eAAe,CAACH,IAAhB,CAAqBI,UAAU,CAACC,YAAX,CAAwB,KAAxB,CAArB;IACD,CAFM,CAAP;EAGD;;EACD,OAAOF,eAAP;AACD;AAED,OAAO,SAASG,YAAT,CAAsBb,QAAtB,EAAgCc,IAAhC,EAAsC;EAC3C,OAAOpB,SAAS,CAACoB,IAAD,EAAO,GAAP,CAAhB;AACD;AAED,OAAO,SAASC,wBAAT,CAAkCf,QAAlC,EAA4Cc,IAA5C,EAAkD;EACvD,IAAIA,IAAI,CAACE,UAAL,IACFlB,UAAU,CAACgB,IAAI,CAACE,UAAN,CAAV,KAAgC,IAD9B,IAEFF,IAAI,CAACE,UAAL,CAAgBA,UAFd,IAGFlB,UAAU,CAACgB,IAAI,CAACE,UAAL,CAAgBA,UAAjB,CAAV,KAA2C,GAH7C,EAGkD;IAChD,OAAOF,IAAI,CAACE,UAAL,CAAgBA,UAAhB,CAA2BC,WAAlC;EACD;AACF;AAED,OAAO,SAASC,aAAT,CAAuBlB,QAAvB,EAAiC;EACtC,IAAMC,SAAS,GAAGD,QAAQ,CAACE,eAA3B;EACA,IAAMiB,UAAU,GAAGzB,SAAS,CAACO,SAAD,EAAY,WAAZ,CAA5B;;EACA,IAAIkB,UAAJ,EAAgB;IACd,OAAOA,UAAU,CAACP,YAAX,CAAwB,KAAxB,CAAP;EACD;AACF;AAED,OAAO,SAASQ,aAAT,CAAuBpB,QAAvB,EAAiC;EACtC,IAAMqB,UAAU,GAAGrB,QAAQ,CAACE,eAA5B;EACA,IAAMoB,YAAY,GAAG5B,SAAS,CAAC2B,UAAD,EAAa,cAAb,CAA9B;;EACA,IAAIC,YAAJ,EAAkB;IAChB,OAAO3B,YAAY,CAAC2B,YAAD,EAAe,IAAf,CAAnB;EACD;;EACD,OAAO,EAAP;AACD;AAED,OAAO,SAASC,aAAT,CAAuBvB,QAAvB,EAAiC;EACtC,IAAMqB,UAAU,GAAGrB,QAAQ,CAACE,eAA5B;EACA,IAAMsB,OAAO,GAAG9B,SAAS,CAAC2B,UAAD,EAAa,SAAb,CAAzB;;EACA,IAAI,CAACG,OAAL,EAAc;IACZ,OAAO,EAAP;EACD;;EACD,OAAO7B,YAAY,CAAC6B,OAAD,EAAU,IAAV,CAAnB;AACD;AAED,OAAO,SAASC,gBAAT,CAA0BzB,QAA1B,EAAoC;EACzC,IAAMqB,UAAU,GAAGrB,QAAQ,CAACE,eAA5B;EACA,IAAIwB,aAAa,GAAG,EAApB;EACA,IAAMC,OAAO,GAAGjC,SAAS,CAAC2B,UAAD,EAAa,SAAb,CAAzB;;EACA,IAAIM,OAAJ,EAAa;IACX,OAAOhC,YAAY,CAACgC,OAAD,EAAU,QAAV,CAAnB;EACD;;EACD,OAAO,EAAP;AACD;AAED,OAAO,SAASC,gBAAT,CAA0B5B,QAA1B,EAAoC;EAC1C;EACA;EACA;EAEC,IAAM6B,GAAG,GAAG7B,QAAQ,CAACE,eAArB;EACA,OAAOL,GAAG,CAACgC,GAAD,EAAM,IAAN,EAAY,UAAAC,MAAM,EAAI;IAC9B,IAAMC,CAAC,GAAGrC,SAAS,CAACoC,MAAD,EAAS,GAAT,CAAnB;;IACA,IAAIC,CAAJ,EAAO;MACL,OAAOA,CAAC,CAACd,WAAT;IACD;;IACD,IAAIe,KAAK,GAAG,EAAZ;IACApC,OAAO,CAACkC,MAAD,EAAS,GAAT,EAAc,UAACG,CAAD,EAAO;MAC1BD,KAAK,IAAItC,SAAS,CAACuC,CAAD,EAAI,GAAJ,CAAT,CAAkBhB,WAA3B;IACD,CAFM,CAAP;IAGA,OAAOe,KAAP;EACD,CAVS,CAAV;AAWD;AAED,OAAO,SAASE,qBAAT,CAA+BlC,QAA/B,EAAyC;EAC9C,IAAMmC,QAAQ,GAAGnC,QAAQ,CAACE,eAA1B;EACA,OAAOR,SAAS,CAACyC,QAAD,EAAW,YAAX,CAAhB;AACD;AAED,OAAO,SAASC,gBAAT,CAA0BpC,QAA1B,EAAoC;EACzC,IAAMqC,aAAa,GAAGrC,QAAQ,CAACE,eAA/B;EACA,OAAOP,YAAY,CAAC0C,aAAD,EAAgB,cAAhB,CAAnB;AACD;AAED,OAAO,SAASC,SAAT,CAAmBtC,QAAnB,EAA6B;EAClC,IAAMmC,QAAQ,GAAGnC,QAAQ,CAACE,eAA1B;EACA,IAAMqC,MAAM,GAAG7C,SAAS,CAACyC,QAAD,EAAW,QAAX,CAAxB;EACA,OAAOxC,YAAY,CAAC4C,MAAD,EAAS,OAAT,CAAnB;AACD"}
1
+ {"version":3,"file":"xlsx.js","names":["findChild","findChildren","forEach","map","getTagName","getCells","document","worksheet","documentElement","sheetData","cells","row","cell","push","getMergedCells","mergedCells","mergedCellsInfo","mergedCell","getAttribute","getCellValue","node","getCellInlineStringValue","firstChild","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, 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":"AAAA,SAASA,SAAT,EAAoBC,YAApB,EAAkCC,OAAlC,EAA2CC,GAA3C,EAAgDC,UAAhD,QAAkE,UAAlE;AAEA,OAAO,SAASC,QAAT,CAAkBC,QAAlB,EAA4B;EACjC,IAAMC,SAAS,GAAGD,QAAQ,CAACE,eAA3B;EACA,IAAMC,SAAS,GAAGT,SAAS,CAACO,SAAD,EAAY,WAAZ,CAA3B;EAEA,IAAMG,KAAK,GAAG,EAAd;EACAR,OAAO,CAACO,SAAD,EAAY,KAAZ,EAAmB,UAACE,GAAD,EAAS;IACjCT,OAAO,CAACS,GAAD,EAAM,GAAN,EAAW,UAACC,IAAD,EAAU;MAC1BF,KAAK,CAACG,IAAN,CAAWD,IAAX;IACD,CAFM,CAAP;EAGD,CAJM,CAAP;EAKA,OAAOF,KAAP;AACD;AAED,OAAO,SAASI,cAAT,CAAwBR,QAAxB,EAAkC;EACvC,IAAMC,SAAS,GAAGD,QAAQ,CAACE,eAA3B;EACA,IAAMO,WAAW,GAAGf,SAAS,CAACO,SAAD,EAAY,YAAZ,CAA7B;EACA,IAAMS,eAAe,GAAG,EAAxB;;EACA,IAAID,WAAJ,EAAiB;IACfb,OAAO,CAACa,WAAD,EAAc,WAAd,EAA2B,UAACE,UAAD,EAAgB;MAChDD,eAAe,CAACH,IAAhB,CAAqBI,UAAU,CAACC,YAAX,CAAwB,KAAxB,CAArB;IACD,CAFM,CAAP;EAGD;;EACD,OAAOF,eAAP;AACD;AAED,OAAO,SAASG,YAAT,CAAsBb,QAAtB,EAAgCc,IAAhC,EAAsC;EAC3C,OAAOpB,SAAS,CAACoB,IAAD,EAAO,GAAP,CAAhB;AACD;AAED,OAAO,SAASC,wBAAT,CAAkCf,QAAlC,EAA4Cc,IAA5C,EAAkD;EACvD,IACEA,IAAI,CAACE,UAAL,IACAlB,UAAU,CAACgB,IAAI,CAACE,UAAN,CAAV,KAAgC,IADhC,IAEAF,IAAI,CAACE,UAAL,CAAgBA,UAFhB,IAGAlB,UAAU,CAACgB,IAAI,CAACE,UAAL,CAAgBA,UAAjB,CAAV,KAA2C,GAJ7C,EAKE;IACA,OAAOF,IAAI,CAACE,UAAL,CAAgBA,UAAhB,CAA2BC,WAAlC;EACD;AACF;AAED,OAAO,SAASC,aAAT,CAAuBlB,QAAvB,EAAiC;EACtC,IAAMC,SAAS,GAAGD,QAAQ,CAACE,eAA3B;EACA,IAAMiB,UAAU,GAAGzB,SAAS,CAACO,SAAD,EAAY,WAAZ,CAA5B;;EACA,IAAIkB,UAAJ,EAAgB;IACd,OAAOA,UAAU,CAACP,YAAX,CAAwB,KAAxB,CAAP;EACD;AACF;AAED,OAAO,SAASQ,aAAT,CAAuBpB,QAAvB,EAAiC;EACtC,IAAMqB,UAAU,GAAGrB,QAAQ,CAACE,eAA5B;EACA,IAAMoB,YAAY,GAAG5B,SAAS,CAAC2B,UAAD,EAAa,cAAb,CAA9B;;EACA,IAAIC,YAAJ,EAAkB;IAChB,OAAO3B,YAAY,CAAC2B,YAAD,EAAe,IAAf,CAAnB;EACD;;EACD,OAAO,EAAP;AACD;AAED,OAAO,SAASC,aAAT,CAAuBvB,QAAvB,EAAiC;EACtC,IAAMqB,UAAU,GAAGrB,QAAQ,CAACE,eAA5B;EACA,IAAMsB,OAAO,GAAG9B,SAAS,CAAC2B,UAAD,EAAa,SAAb,CAAzB;;EACA,IAAI,CAACG,OAAL,EAAc;IACZ,OAAO,EAAP;EACD;;EACD,OAAO7B,YAAY,CAAC6B,OAAD,EAAU,IAAV,CAAnB;AACD;AAED,OAAO,SAASC,gBAAT,CAA0BzB,QAA1B,EAAoC;EACzC,IAAMqB,UAAU,GAAGrB,QAAQ,CAACE,eAA5B;EACA,IAAIwB,aAAa,GAAG,EAApB;EACA,IAAMC,OAAO,GAAGjC,SAAS,CAAC2B,UAAD,EAAa,SAAb,CAAzB;;EACA,IAAIM,OAAJ,EAAa;IACX,OAAOhC,YAAY,CAACgC,OAAD,EAAU,QAAV,CAAnB;EACD;;EACD,OAAO,EAAP;AACD;AAED,OAAO,SAASC,gBAAT,CAA0B5B,QAA1B,EAAoC;EAC1C;EACA;EACA;EAEC,IAAM6B,GAAG,GAAG7B,QAAQ,CAACE,eAArB;EACA,OAAOL,GAAG,CAACgC,GAAD,EAAM,IAAN,EAAY,UAAAC,MAAM,EAAI;IAC9B,IAAMC,CAAC,GAAGrC,SAAS,CAACoC,MAAD,EAAS,GAAT,CAAnB;;IACA,IAAIC,CAAJ,EAAO;MACL,OAAOA,CAAC,CAACd,WAAT;IACD;;IACD,IAAIe,KAAK,GAAG,EAAZ;IACApC,OAAO,CAACkC,MAAD,EAAS,GAAT,EAAc,UAACG,CAAD,EAAO;MAC1BD,KAAK,IAAItC,SAAS,CAACuC,CAAD,EAAI,GAAJ,CAAT,CAAkBhB,WAA3B;IACD,CAFM,CAAP;IAGA,OAAOe,KAAP;EACD,CAVS,CAAV;AAWD;AAED,OAAO,SAASE,qBAAT,CAA+BlC,QAA/B,EAAyC;EAC9C,IAAMmC,QAAQ,GAAGnC,QAAQ,CAACE,eAA1B;EACA,OAAOR,SAAS,CAACyC,QAAD,EAAW,YAAX,CAAhB;AACD;AAED,OAAO,SAASC,gBAAT,CAA0BpC,QAA1B,EAAoC;EACzC,IAAMqC,aAAa,GAAGrC,QAAQ,CAACE,eAA/B;EACA,OAAOP,YAAY,CAAC0C,aAAD,EAAgB,cAAhB,CAAnB;AACD;AAED,OAAO,SAASC,SAAT,CAAmBtC,QAAnB,EAA6B;EAClC,IAAMmC,QAAQ,GAAGnC,QAAQ,CAACE,eAA1B;EACA,IAAMqC,MAAM,GAAG7C,SAAS,CAACyC,QAAD,EAAW,QAAX,CAAxB;EACA,OAAOxC,YAAY,CAAC4C,MAAD,EAAS,OAAT,CAAnB;AACD"}
@@ -1,7 +1,7 @@
1
- import XMLDOM from '@xmldom/xmldom';
1
+ import { DOMParser } from '@xmldom/xmldom';
2
2
  export default {
3
3
  createDocument: function createDocument(content) {
4
- return new XMLDOM.DOMParser().parseFromString(content);
4
+ return new DOMParser().parseFromString(content);
5
5
  }
6
6
  };
7
7
  //# sourceMappingURL=xml.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xml.js","names":["XMLDOM","createDocument","content","DOMParser","parseFromString"],"sources":["../../source/xml/xml.js"],"sourcesContent":["import XMLDOM from '@xmldom/xmldom'\r\n\r\nexport default {\r\n\tcreateDocument(content) {\r\n\t\treturn new XMLDOM.DOMParser().parseFromString(content)\r\n\t}\r\n}"],"mappings":"AAAA,OAAOA,MAAP,MAAmB,gBAAnB;AAEA,eAAe;EACdC,cADc,0BACCC,OADD,EACU;IACvB,OAAO,IAAIF,MAAM,CAACG,SAAX,GAAuBC,eAAvB,CAAuCF,OAAvC,CAAP;EACA;AAHa,CAAf"}
1
+ {"version":3,"file":"xml.js","names":["DOMParser","createDocument","content","parseFromString"],"sources":["../../source/xml/xml.js"],"sourcesContent":["import { DOMParser } from '@xmldom/xmldom'\r\n\r\nexport default {\r\n\tcreateDocument(content) {\r\n\t\treturn new DOMParser().parseFromString(content)\r\n\t}\r\n}"],"mappings":"AAAA,SAASA,SAAT,QAA0B,gBAA1B;AAEA,eAAe;EACdC,cADc,0BACCC,OADD,EACU;IACvB,OAAO,IAAIF,SAAJ,GAAgBG,eAAhB,CAAgCD,OAAhC,CAAP;EACA;AAHa,CAAf"}
@@ -1,3 +1,4 @@
1
+ // This file is no longer used.
1
2
  // Turns out IE11 doesn't support XPath, so not using `./xpathBrowser` for browsers.
2
3
  // https://github.com/catamphetamine/read-excel-file/issues/26
3
4
  // The inclusion of `xpath` package in `./xpathNode`
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-xpath.js","names":["xpath","namespaces","a","r","rr","getCells","document","getMergedCells","getCellValue","node","getCellInlineStringValue","textContent","getDimensions","dimensions","getBaseStyles","getCellStyles","getNumberFormats","getSharedStrings","map","string","_","join","getWorkbookProperties","getRelationships","getSheets"],"sources":["../../../source/xml/xpath/xlsx-xpath.js"],"sourcesContent":["// This file is no longer used.\r\n\r\n// Turns out IE11 doesn't support XPath, so not using `./xpathBrowser` for browsers.\r\n// https://github.com/catamphetamine/read-excel-file/issues/26\r\n// The inclusion of `xpath` package in `./xpathNode`\r\n// increases the bundle size by about 100 kilobytes.\r\n// IE11 is a wide-spread browser and it's unlikely that\r\n// anyone would ignore it for now.\r\n// There could be a separate export `read-excel-file/ie11`\r\n// for using `./xpathNode` instead of `./xpathBrowser`\r\n// but this library has been migrated to not using `xpath` anyway.\r\n// This code is just alternative/historical now, it seems.\r\nimport xpath from './xpathNode'\r\n\r\nconst namespaces = {\r\n a: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n // This one seems to be for `r:id` attributes on `<sheet>`s.\r\n r: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\r\n // This one seems to be for `<Relationships/>` file.\r\n rr: 'http://schemas.openxmlformats.org/package/2006/relationships'\r\n}\r\n\r\nexport function getCells(document) {\r\n return xpath(document, null, '/a:worksheet/a:sheetData/a:row/a:c', namespaces)\r\n}\r\n\r\nexport function getMergedCells(document) {\r\n return xpath(document, null, '/a:worksheet/a:mergedCells/a:mergedCell/@ref', namespaces)\r\n}\r\n\r\nexport function getCellValue(document, node) {\r\n return xpath(document, node, './a:v', namespaces)[0]\r\n}\r\n\r\nexport function getCellInlineStringValue(document, node) {\r\n return xpath(document, node, './a:is/a:t', namespaces)[0].textContent\r\n}\r\n\r\nexport function getDimensions(document) {\r\n const dimensions = xpath(document, null, '/a:worksheet/a:dimension/@ref', namespaces)[0]\r\n if (dimensions) {\r\n return dimensions.textContent\r\n }\r\n}\r\n\r\nexport function getBaseStyles(document) {\r\n return xpath(document, null, '/a:styleSheet/a:cellStyleXfs/a:xf', namespaces)\r\n}\r\n\r\nexport function getCellStyles(document) {\r\n return xpath(document, null, '/a:styleSheet/a:cellXfs/a:xf', namespaces)\r\n}\r\n\r\nexport function getNumberFormats(document) {\r\n return xpath(document, null, '/a:styleSheet/a:numFmts/a:numFmt', namespaces)\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  // The \".//a:t[not(ancestor::a:rPh)]\" selector means:\r\n  // \"select all `<t/>` that are not children of `<rPh/>`\". \r\n\t// https://stackoverflow.com/questions/42773772/xpath-span-what-does-the-dot-mean\r\n  // `<rPh><t></t></rPh>` seems to be some \"phonetic data\" added for languages like Japanese that should be ignored.\r\n  // https://github.com/doy/spreadsheet-parsexlsx/issues/72\r\n  return xpath(document, null, '/a:sst/a:si', namespaces)\r\n    .map(string => xpath(document, string, './/a:t[not(ancestor::a:rPh)]', namespaces)\r\n        .map(_ => _.textContent).join('')\r\n    )\r\n}\r\n\r\nexport function getWorkbookProperties(document) {\r\n return xpath(document, null, '/a:workbook/a:workbookPr', namespaces)[0]\r\n}\r\n\r\nexport function getRelationships(document) {\r\n return xpath(document, null, '/rr:Relationships/rr:Relationship', namespaces)\r\n}\r\n\r\nexport function getSheets(document) {\r\n return xpath(document, null, '/a:workbook/a:sheets/a:sheet', namespaces)\r\n}"],"mappings":"AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,KAAP,MAAkB,aAAlB;AAEA,IAAMC,UAAU,GAAG;EACjBC,CAAC,EAAE,2DADc;EAEjB;EACAC,CAAC,EAAE,qEAHc;EAIjB;EACAC,EAAE,EAAE;AALa,CAAnB;AAQA,OAAO,SAASC,QAAT,CAAkBC,QAAlB,EAA4B;EACjC,OAAON,KAAK,CAACM,QAAD,EAAW,IAAX,EAAiB,oCAAjB,EAAuDL,UAAvD,CAAZ;AACD;AAED,OAAO,SAASM,cAAT,CAAwBD,QAAxB,EAAkC;EACvC,OAAON,KAAK,CAACM,QAAD,EAAW,IAAX,EAAiB,8CAAjB,EAAiEL,UAAjE,CAAZ;AACD;AAED,OAAO,SAASO,YAAT,CAAsBF,QAAtB,EAAgCG,IAAhC,EAAsC;EAC3C,OAAOT,KAAK,CAACM,QAAD,EAAWG,IAAX,EAAiB,OAAjB,EAA0BR,UAA1B,CAAL,CAA2C,CAA3C,CAAP;AACD;AAED,OAAO,SAASS,wBAAT,CAAkCJ,QAAlC,EAA4CG,IAA5C,EAAkD;EACvD,OAAOT,KAAK,CAACM,QAAD,EAAWG,IAAX,EAAiB,YAAjB,EAA+BR,UAA/B,CAAL,CAAgD,CAAhD,EAAmDU,WAA1D;AACD;AAED,OAAO,SAASC,aAAT,CAAuBN,QAAvB,EAAiC;EACtC,IAAMO,UAAU,GAAGb,KAAK,CAACM,QAAD,EAAW,IAAX,EAAiB,+BAAjB,EAAkDL,UAAlD,CAAL,CAAmE,CAAnE,CAAnB;;EACA,IAAIY,UAAJ,EAAgB;IACd,OAAOA,UAAU,CAACF,WAAlB;EACD;AACF;AAED,OAAO,SAASG,aAAT,CAAuBR,QAAvB,EAAiC;EACtC,OAAON,KAAK,CAACM,QAAD,EAAW,IAAX,EAAiB,mCAAjB,EAAsDL,UAAtD,CAAZ;AACD;AAED,OAAO,SAASc,aAAT,CAAuBT,QAAvB,EAAiC;EACtC,OAAON,KAAK,CAACM,QAAD,EAAW,IAAX,EAAiB,8BAAjB,EAAiDL,UAAjD,CAAZ;AACD;AAED,OAAO,SAASe,gBAAT,CAA0BV,QAA1B,EAAoC;EACzC,OAAON,KAAK,CAACM,QAAD,EAAW,IAAX,EAAiB,kCAAjB,EAAqDL,UAArD,CAAZ;AACD;AAED,OAAO,SAASgB,gBAAT,CAA0BX,QAA1B,EAAoC;EAC1C;EACA;EACA;EAEC;EACA;EACD;EACC;EACA;EACA,OAAON,KAAK,CAACM,QAAD,EAAW,IAAX,EAAiB,aAAjB,EAAgCL,UAAhC,CAAL,CACJiB,GADI,CACA,UAAAC,MAAM;IAAA,OAAInB,KAAK,CAACM,QAAD,EAAWa,MAAX,EAAmB,8BAAnB,EAAmDlB,UAAnD,CAAL,CACViB,GADU,CACN,UAAAE,CAAC;MAAA,OAAIA,CAAC,CAACT,WAAN;IAAA,CADK,EACcU,IADd,CACmB,EADnB,CAAJ;EAAA,CADN,CAAP;AAID;AAED,OAAO,SAASC,qBAAT,CAA+BhB,QAA/B,EAAyC;EAC9C,OAAON,KAAK,CAACM,QAAD,EAAW,IAAX,EAAiB,0BAAjB,EAA6CL,UAA7C,CAAL,CAA8D,CAA9D,CAAP;AACD;AAED,OAAO,SAASsB,gBAAT,CAA0BjB,QAA1B,EAAoC;EACzC,OAAON,KAAK,CAACM,QAAD,EAAW,IAAX,EAAiB,mCAAjB,EAAsDL,UAAtD,CAAZ;AACD;AAED,OAAO,SAASuB,SAAT,CAAmBlB,QAAnB,EAA6B;EAClC,OAAON,KAAK,CAACM,QAAD,EAAW,IAAX,EAAiB,8BAAjB,EAAiDL,UAAjD,CAAZ;AACD"}