@splunk/visualization-encoding-parsers 25.7.2 → 25.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Base.js CHANGED
@@ -240,55 +240,46 @@ var find_default = /*#__PURE__*/__webpack_require__.n(find_);
240
240
  var format_hasOwnProperty = Object.prototype.hasOwnProperty;
241
241
  var rangeFormat = function rangeFormat(value) {
242
242
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
243
- ranges = _ref.ranges,
244
- values = _ref.values;
245
-
243
+ ranges = _ref.ranges,
244
+ values = _ref.values;
246
245
  if (Array.isArray(ranges) && Array.isArray(values) && !Number.isNaN(value)) {
247
246
  var floatVal = parseFloat(value);
248
-
249
247
  for (var i = 0; i < ranges.length; i += 1) {
250
248
  // bad range value
251
249
  if (Number.isNaN(Number(ranges[i]))) {
252
250
  // Could not format value: Ranges are required to be numbers. Falling back to original value
253
251
  return value;
254
- } // value is less than the range limit
255
-
256
-
252
+ }
253
+ // value is less than the range limit
257
254
  if (floatVal <= parseFloat(ranges[i])) {
258
255
  var valueIndex = Math.min(i, values.length - 1); // correct the index if there are more range items than values
259
-
260
256
  if (values[valueIndex]) {
261
257
  return values[valueIndex];
262
258
  }
263
259
  }
264
260
  }
265
-
266
261
  if (floatVal > parseFloat(ranges[ranges.length - 1])) {
267
262
  return values[values.length - 1];
268
263
  }
269
- } // Could not format value: Ranges and Value are required to be numbers
270
-
271
-
264
+ }
265
+ // Could not format value: Ranges and Value are required to be numbers
272
266
  return value;
273
267
  };
274
268
  var categoryFormat = function categoryFormat(value, _ref2) {
275
269
  var categories = _ref2.categories,
276
- values = _ref2.values;
277
-
270
+ values = _ref2.values;
278
271
  if (!(Array.isArray(categories) && Array.isArray(values) && categories.length === values.length)) {
279
272
  // Could not format value: categories & values should be arrays of the same length. Falling back to original value
280
273
  return value;
281
274
  }
282
-
283
275
  var valueIndex = categories.indexOf(value);
284
-
285
276
  if (valueIndex > -1) {
286
277
  return values[valueIndex];
287
- } // Could not format value: Category does not exist. Falling back to original value
288
-
289
-
278
+ }
279
+ // Could not format value: Category does not exist. Falling back to original value
290
280
  return value;
291
281
  };
282
+
292
283
  /**
293
284
  * based on a range configuration this formatter maps the value to a value specified in a range.
294
285
  * the range fitting follows this criteria: `range.from <= value < range.to` so the `to` value is not included
@@ -301,27 +292,27 @@ var categoryFormat = function categoryFormat(value, _ref2) {
301
292
  * @param {object} formatConfig
302
293
  * @param {Object[]} formatConfig.ranges
303
294
  */
304
-
305
295
  var rangeValueFormat = function rangeValueFormat(value, _ref3) {
306
296
  var _ref3$ranges = _ref3.ranges,
307
- ranges = _ref3$ranges === void 0 ? [] : _ref3$ranges;
297
+ ranges = _ref3$ranges === void 0 ? [] : _ref3$ranges;
308
298
  var floatValue = parseFloat(value);
309
-
310
299
  if (Number.isNaN(Number(value))) {
311
300
  return value;
312
301
  }
313
-
314
302
  for (var i = 0; i < ranges.length; i += 1) {
315
- if ( // open upper bound: value is bigger than or equal to open upper bound start (from)
316
- i === 0 && format_hasOwnProperty.call(ranges[i], 'from') && floatValue >= ranges[i].from || // inbetween: value falls into from - to range
317
- floatValue >= ranges[i].from && floatValue < ranges[i].to || // open lower bound: value is smaller than or equal to open lower bound end (to)
303
+ if (
304
+ // open upper bound: value is bigger than or equal to open upper bound start (from)
305
+ i === 0 && format_hasOwnProperty.call(ranges[i], 'from') && floatValue >= ranges[i].from ||
306
+ // inbetween: value falls into from - to range
307
+ floatValue >= ranges[i].from && floatValue < ranges[i].to ||
308
+ // open lower bound: value is smaller than or equal to open lower bound end (to)
318
309
  i === ranges.length - 1 && format_hasOwnProperty.call(ranges[i], 'to') && floatValue < ranges[i].to) {
319
310
  return ranges[i].value;
320
311
  }
321
312
  }
322
-
323
313
  return value;
324
314
  };
315
+
325
316
  /**
326
317
  * this formatter maps the value to a value specified in a list of potential matches .
327
318
  * if the value passed is a match for what is provided in `matches[i].match`, we return that mapped value `matches[i].value`.
@@ -334,12 +325,11 @@ var rangeValueFormat = function rangeValueFormat(value, _ref3) {
334
325
  * @param {Object[]} formatConfig.matches
335
326
  * @param {object} formatConfig.defaultValue
336
327
  */
337
-
338
328
  var format_matchValueFormat = function matchValueFormat(value, _ref4) {
339
329
  var _ref4$matches = _ref4.matches,
340
- matches = _ref4$matches === void 0 ? [] : _ref4$matches,
341
- _ref4$defaultValue = _ref4.defaultValue,
342
- defaultValue = _ref4$defaultValue === void 0 ? undefined : _ref4$defaultValue;
330
+ matches = _ref4$matches === void 0 ? [] : _ref4$matches,
331
+ _ref4$defaultValue = _ref4.defaultValue,
332
+ defaultValue = _ref4$defaultValue === void 0 ? undefined : _ref4$defaultValue;
343
333
  var defaultResult = isUndefined_default()(defaultValue) ? value : defaultValue;
344
334
  var matchResult = find_default()(matches, function (match) {
345
335
  return match.match && match.match === value;
@@ -349,6 +339,7 @@ var format_matchValueFormat = function matchValueFormat(value, _ref4) {
349
339
  var NON_NUMERIC_RANGE_ERROR = 'Could not format value: Ranges are required to be numbers. Falling back to first color';
350
340
  var VALUES_AND_RANGES_HAVE_DIFFERENT_LENGTH = 'gradient ranges and values must have the same number of elements';
351
341
  var INVALID_VALUE = 'Could not format value for gradient:';
342
+
352
343
  /**
353
344
  * based on ranges and values this formatter maps the value to an interpolated color
354
345
  *
@@ -359,38 +350,31 @@ var INVALID_VALUE = 'Could not format value for gradient:';
359
350
  * @param {string[]} data the data to be formatted
360
351
  * @param errorHandler function
361
352
  */
362
-
363
353
  var format_colorGradientFormat = function colorGradientFormat(value, _ref5, data, errorHandler) {
364
354
  var ranges = _ref5.ranges,
365
- values = _ref5.values;
355
+ values = _ref5.values;
366
356
  var colorValues = values;
367
357
  var colorRanges = ranges;
368
-
369
358
  function errorColor() {
370
359
  return colorValues ? external_chroma_js_default()(colorValues[0]).hex().toUpperCase() : '#000';
371
360
  }
372
-
373
361
  if (!Number.isNaN(Number(value))) {
374
362
  // set default values for gradient colors if values not explicit
375
363
  if (!colorValues) {
376
364
  colorValues = ['white', 'red'];
377
365
  }
378
-
379
366
  if (colorValues.length === 1) {
380
367
  colorValues.unshift('white'); // force color bin to have a lower bound color
381
- } // set default values for ranges if ranges not explicit
382
-
383
-
368
+ }
369
+ // set default values for ranges if ranges not explicit
384
370
  if (!ranges) {
385
371
  if (data && data.length > 0) {
386
372
  var min = data.length > 0 ? Math.min.apply(null, data) : undefined;
387
373
  var max = data.length > 0 ? Math.max.apply(null, data) : undefined;
388
374
  colorRanges = [min];
389
-
390
375
  for (var i = 1; i < colorValues.length - 1; i += 1) {
391
376
  colorRanges.push(min + i * (max - min) / (colorValues.length - 1));
392
377
  }
393
-
394
378
  colorRanges.push(max);
395
379
  } else {
396
380
  colorRanges = [0, 1]; // no data values, so just make the range from zero to 1
@@ -404,23 +388,22 @@ var format_colorGradientFormat = function colorGradientFormat(value, _ref5, data
404
388
  colorRanges.sort(function (a, b) {
405
389
  return a - b;
406
390
  }); // force ascending order of range stops
407
-
408
391
  if (colorRanges.length !== colorValues.length) {
409
392
  errorHandler(VALUES_AND_RANGES_HAVE_DIFFERENT_LENGTH);
410
393
  return errorColor();
411
394
  }
395
+ var floatVal = parseFloat(value);
412
396
 
413
- var floatVal = parseFloat(value); // don't let value be outside the allowed range
414
-
397
+ // don't let value be outside the allowed range
415
398
  if (floatVal > parseFloat(colorRanges[colorRanges.length - 1])) {
416
399
  return external_chroma_js_default()(colorValues[colorValues.length - 1]).hex().toUpperCase(); // high end
417
400
  }
418
401
 
419
402
  if (floatVal < parseFloat(colorRanges[0])) {
420
403
  return external_chroma_js_default()(colorValues[0]).hex().toUpperCase(); // low end
421
- } // find the color gradient range that the value is inside
422
-
404
+ }
423
405
 
406
+ // find the color gradient range that the value is inside
424
407
  for (var _i = 1; _i < colorRanges.length; _i += 1) {
425
408
  // bad range value
426
409
  if (Number.isNaN(Number(colorRanges[_i]))) {
@@ -428,14 +411,13 @@ var format_colorGradientFormat = function colorGradientFormat(value, _ref5, data
428
411
  errorHandler(NON_NUMERIC_RANGE_ERROR);
429
412
  return errorColor();
430
413
  }
431
-
432
414
  var upperVal = colorRanges[_i];
433
-
434
415
  if (floatVal <= upperVal) {
435
416
  // if value is inside the bin
436
417
  var lowerVal = colorRanges[_i - 1];
437
- var tau = (value - lowerVal) / (upperVal - lowerVal); // deal with special case when the upper and lower and bounds of the colorRange is equal
418
+ var tau = (value - lowerVal) / (upperVal - lowerVal);
438
419
 
420
+ // deal with special case when the upper and lower and bounds of the colorRange is equal
439
421
  if (upperVal === lowerVal) {
440
422
  if (value === 0) {
441
423
  // user prolly expects lower end of color range if value is zero
@@ -450,9 +432,8 @@ var format_colorGradientFormat = function colorGradientFormat(value, _ref5, data
450
432
  return external_chroma_js_default.a.scale([lowerColor, upperColor])(tau).hex().toUpperCase();
451
433
  }
452
434
  }
453
- } // eslint-disable-next-line
454
-
455
-
435
+ }
436
+ // eslint-disable-next-line
456
437
  errorHandler("".concat(INVALID_VALUE, " ").concat(value));
457
438
  return errorColor();
458
439
  };
@@ -468,10 +449,10 @@ var newFormatterErrorHandler = function newFormatterErrorHandler(maxErrors, hand
468
449
  if (errorCount < maxErrors) {
469
450
  handlerFunc(msg);
470
451
  }
471
-
472
452
  errorCount += 1;
473
453
  };
474
454
  };
455
+
475
456
  /**
476
457
  * returns a formatter function based on a format config
477
458
  * @param {Object} formatCfg formatter config
@@ -480,50 +461,44 @@ var newFormatterErrorHandler = function newFormatterErrorHandler(maxErrors, hand
480
461
  * @param {string[]|number[]} formatCfg.categories an array of categories. categories are used for a 1:1 mapping to values. requires formatCfg.values
481
462
  * @param {number[]} data the data to be formatted
482
463
  */
483
-
484
464
  var getFormatter = function getFormatter(data) {
485
465
  var formatCfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
486
-
487
466
  if (formatCfg.type) {
488
467
  if (formatters[formatCfg.type]) {
489
468
  // @TODO(pwied):
490
469
  // future: should formatters have prepare stage where params are validated
491
470
  // and additional formatting context is generated (e.g. min & max value)
492
471
  return function (value) {
493
- return formatters[formatCfg.type](value, formatCfg, data, // eslint-disable-next-line no-console
472
+ return formatters[formatCfg.type](value, formatCfg, data,
473
+ // eslint-disable-next-line no-console
494
474
  newFormatterErrorHandler(MAX_LOGGED_FORMATTER_ERRORS, function (msg) {
495
475
  return console.warn(msg);
496
476
  }));
497
477
  };
498
478
  }
499
-
500
479
  return function (value) {
501
480
  return value;
502
481
  };
503
- } // @TODO(pwied):
482
+ }
483
+ // @TODO(pwied):
504
484
  // - remove post beta deadline
505
485
  // - move to formatters with type option
506
486
  // - leaving it here for now because Choropleth builds on it
507
-
508
-
509
487
  var ranges = formatCfg.ranges,
510
- values = formatCfg.values;
511
-
488
+ values = formatCfg.values;
512
489
  if (values) {
513
490
  if (ranges) {
514
491
  return function (value) {
515
492
  return rangeFormat(value, formatCfg);
516
493
  };
517
494
  }
518
-
519
495
  if (formatCfg.categories) {
520
496
  return function (value) {
521
497
  return categoryFormat(value, formatCfg);
522
498
  };
523
499
  }
524
- } // eslint-disable-next-line
525
-
526
-
500
+ }
501
+ // eslint-disable-next-line
527
502
  console.warn('Could not find a formatter. Falling back to identity fn');
528
503
  return function (value) {
529
504
  return value;
@@ -536,6 +511,7 @@ var isFinite_default = /*#__PURE__*/__webpack_require__.n(isFinite_);
536
511
  // CONCATENATED MODULE: ./src/util/types.js
537
512
 
538
513
 
514
+
539
515
  /**
540
516
  * getDataTypeForPoint
541
517
  * naive implementation of checking for the data type of a single data point
@@ -545,23 +521,20 @@ var isFinite_default = /*#__PURE__*/__webpack_require__.n(isFinite_);
545
521
  * @param {any} dataPoint
546
522
  * @return {string} type
547
523
  */
548
-
549
524
  var types_getDataTypeForPoint = function getDataTypeForPoint(dataPoint) {
550
525
  if (isFinite_default()(+dataPoint) && isNumber_default()(+dataPoint)) {
551
526
  return 'number';
552
527
  }
553
-
554
528
  if (!Number.isNaN(Date.parse(dataPoint))) {
555
529
  return 'time';
556
530
  }
557
-
558
531
  if (typeof dataPoint === 'string') {
559
532
  return 'string';
560
- } // nulls, objects, etc
561
-
562
-
533
+ }
534
+ // nulls, objects, etc
563
535
  return 'unknown';
564
536
  };
537
+
565
538
  /**
566
539
  * inferDataTypeFromSample
567
540
  * based on a number of data points this function determines the data type for all of them
@@ -570,7 +543,6 @@ var types_getDataTypeForPoint = function getDataTypeForPoint(dataPoint) {
570
543
  * @param {Array} dataSample an array of arbitrary size containing data points of any data type
571
544
  * @return {string} type the most common type in the sample
572
545
  */
573
-
574
546
  var inferDataTypeFromSample = function inferDataTypeFromSample(dataSample) {
575
547
  var typeMatches = {
576
548
  time: 0,
@@ -591,6 +563,7 @@ var inferDataTypeFromSample = function inferDataTypeFromSample(dataSample) {
591
563
  });
592
564
  return returnType;
593
565
  };
566
+
594
567
  /**
595
568
  * based on a data array (e.g. one data column) this function returns a tiny sample of it
596
569
  * @TODO: very naive approach. there's papers with more advanced techniques but for now this should be very fast
@@ -598,55 +571,39 @@ var inferDataTypeFromSample = function inferDataTypeFromSample(dataSample) {
598
571
  * @param {Array} data to draw a sample from
599
572
  * @return {Array} a sample of the passed data
600
573
  */
601
-
602
574
  var drawSample = function drawSample(data) {
603
575
  if (data.length > 2) {
604
576
  return [data[0], data[Math.floor(data.length / 2)], data[data.length - 1]];
605
577
  }
606
-
607
578
  if (data.length === 2) {
608
579
  return [data[0], data[1]];
609
- } // small enough to check everything
610
-
611
-
580
+ }
581
+ // small enough to check everything
612
582
  return data;
613
583
  };
614
584
  // CONCATENATED MODULE: ./src/Base.js
615
585
 
616
586
 
617
587
 
618
-
619
588
  function ownKeys(object, enumerableOnly) {
620
589
  var keys = Object.keys(object);
621
-
622
590
  if (Object.getOwnPropertySymbols) {
623
591
  var symbols = Object.getOwnPropertySymbols(object);
624
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
592
+ enumerableOnly && (symbols = symbols.filter(function (sym) {
625
593
  return Object.getOwnPropertyDescriptor(object, sym).enumerable;
626
- });
627
- keys.push.apply(keys, symbols);
594
+ })), keys.push.apply(keys, symbols);
628
595
  }
629
-
630
596
  return keys;
631
597
  }
632
-
633
598
  function _objectSpread(target) {
634
599
  for (var i = 1; i < arguments.length; i++) {
635
- var source = arguments[i] != null ? arguments[i] : {};
636
-
637
- if (i % 2) {
638
- ownKeys(Object(source), true).forEach(function (key) {
639
- defineProperty_default()(target, key, source[key]);
640
- });
641
- } else if (Object.getOwnPropertyDescriptors) {
642
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
643
- } else {
644
- ownKeys(Object(source)).forEach(function (key) {
645
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
646
- });
647
- }
600
+ var source = null != arguments[i] ? arguments[i] : {};
601
+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
602
+ defineProperty_default()(target, key, source[key]);
603
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
604
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
605
+ });
648
606
  }
649
-
650
607
  return target;
651
608
  }
652
609
 
@@ -655,8 +612,6 @@ function _objectSpread(target) {
655
612
 
656
613
 
657
614
 
658
-
659
-
660
615
  var getDataForDataSourceType = function getDataForDataSourceType(data, dataSourceType) {
661
616
  if (!dataSourceType || !data[dataSourceType] || !data[dataSourceType].data) {
662
617
  // @TODO: warn about datasource type not being found
@@ -665,7 +620,6 @@ var getDataForDataSourceType = function getDataForDataSourceType(data, dataSourc
665
620
  columns: []
666
621
  };
667
622
  }
668
-
669
623
  return data[dataSourceType].data;
670
624
  };
671
625
  /*
@@ -673,20 +627,16 @@ var getDataForDataSourceType = function getDataForDataSourceType(data, dataSourc
673
627
  * @param {String} fieldIndexRangeStr '0:', '0:5', ':5'
674
628
  * @returns {Object} info about parsed range if there is any
675
629
  */
676
-
677
-
678
630
  var Base_parseFieldRangeReference = function parseFieldRangeReference(fieldIndexRangeStr) {
679
631
  if (!fieldIndexRangeStr || fieldIndexRangeStr.indexOf(':') === -1) {
680
632
  return {
681
633
  isFieldIndexRange: false
682
634
  };
683
635
  }
684
-
685
636
  var _fieldIndexRangeStr$s = fieldIndexRangeStr.split(':'),
686
- _fieldIndexRangeStr$s2 = slicedToArray_default()(_fieldIndexRangeStr$s, 2),
687
- fromFieldIndexStr = _fieldIndexRangeStr$s2[0],
688
- toFieldIndexStr = _fieldIndexRangeStr$s2[1];
689
-
637
+ _fieldIndexRangeStr$s2 = slicedToArray_default()(_fieldIndexRangeStr$s, 2),
638
+ fromFieldIndexStr = _fieldIndexRangeStr$s2[0],
639
+ toFieldIndexStr = _fieldIndexRangeStr$s2[1];
690
640
  return {
691
641
  isFieldIndexRange: true,
692
642
  fromFieldIndex: Number.isNaN(Number(fromFieldIndexStr)) || !fromFieldIndexStr ? 0 : Number(fromFieldIndexStr),
@@ -698,7 +648,6 @@ var Base_parseFieldRangeReference = function parseFieldRangeReference(fieldIndex
698
648
  * @param {String} fieldReferenceStr 'primary[1][123]'
699
649
  * @returns {Object} { fieldIndex: 1, columnIndex: 123, isFieldIndexRange: true, fromFieldIndexRange: 0, toFieldIndexRange: 3 }
700
650
  */
701
-
702
651
  var parseIndexBasedFieldReference = function parseIndexBasedFieldReference(fieldReferenceStr) {
703
652
  var indices = fieldReferenceStr.replace(/^[A-Za-z0-9]+/, '').replace(/\[/g, '').replace(/\]/g, ',').split(',');
704
653
  var dataSourceName = fieldReferenceStr.match(/^[A-Za-z0-9]+/)[0];
@@ -709,12 +658,12 @@ var parseIndexBasedFieldReference = function parseIndexBasedFieldReference(field
709
658
  columnIndex: Number.isNaN(Number(indices[1])) || !indices[1] ? null : Number(indices[1])
710
659
  }, fieldRange);
711
660
  };
661
+
712
662
  /*
713
663
  * parse fieldReferenceStr to get field name and column index for user defined encoding. e.g. 'primary.color[123]'
714
664
  * @param {String} fieldReferenceStr 'primary.color[123]'
715
665
  * @returns {Object} { fieldName: 'color', columnIndex: 123 }
716
666
  */
717
-
718
667
  var parseNameBasedFieldReference = function parseNameBasedFieldReference(fieldReferenceStr) {
719
668
  var dataSourceName = fieldReferenceStr.match(/^[A-Za-z0-9]+/)[0];
720
669
  var fieldNameStr = fieldReferenceStr.split('.')[1];
@@ -727,54 +676,42 @@ var parseNameBasedFieldReference = function parseNameBasedFieldReference(fieldRe
727
676
  columnIndex: columnIndex
728
677
  };
729
678
  };
730
-
731
679
  var Base_getDataForIndexBasedFieldReference = function getDataForIndexBasedFieldReference(data, fieldReferenceStr) {
732
680
  var fields = data.fields,
733
- columns = data.columns;
734
-
681
+ columns = data.columns;
735
682
  var _parseIndexBasedField = parseIndexBasedFieldReference(fieldReferenceStr),
736
- dataSourceName = _parseIndexBasedField.dataSourceName,
737
- isFieldIndexRange = _parseIndexBasedField.isFieldIndexRange,
738
- fromFieldIndex = _parseIndexBasedField.fromFieldIndex,
739
- toFieldIndex = _parseIndexBasedField.toFieldIndex,
740
- fieldIndex = _parseIndexBasedField.fieldIndex,
741
- columnIndex = _parseIndexBasedField.columnIndex;
742
-
683
+ dataSourceName = _parseIndexBasedField.dataSourceName,
684
+ isFieldIndexRange = _parseIndexBasedField.isFieldIndexRange,
685
+ fromFieldIndex = _parseIndexBasedField.fromFieldIndex,
686
+ toFieldIndex = _parseIndexBasedField.toFieldIndex,
687
+ fieldIndex = _parseIndexBasedField.fieldIndex,
688
+ columnIndex = _parseIndexBasedField.columnIndex;
743
689
  if (isFieldIndexRange) {
744
690
  var dataForRange = [];
745
-
746
691
  if (fromFieldIndex > -1) {
747
692
  var endIndex = toFieldIndex > -1 ? Math.min(fields.length - 1, toFieldIndex) : fields.length + toFieldIndex;
748
-
749
693
  for (var i = fromFieldIndex; i <= endIndex; i += 1) {
750
694
  dataForRange.push(getDataForIndexBasedFieldReference(data, "".concat(dataSourceName, "[").concat(i, "][").concat(columnIndex, "]")));
751
695
  }
752
-
753
696
  return dataForRange;
754
697
  }
755
698
  }
756
-
757
699
  if (isNumber_default()(fieldIndex)) {
758
700
  var isNegative = fieldIndex < 0;
759
701
  var absoluteIndex = Math.abs(fieldIndex);
760
-
761
702
  if (isNegative && absoluteIndex > fields.length || !isNegative && fieldIndex > fields.length - 1) {
762
703
  // The field index is out of bounds
763
704
  return {};
764
705
  }
765
-
766
706
  var correctedFieldIndex = isNegative ? fields.length - absoluteIndex : fieldIndex;
767
707
  var fieldName = typeof_default()(fields[correctedFieldIndex]) === 'object' ? fields[correctedFieldIndex].name : fields[correctedFieldIndex];
768
708
  var fieldData;
769
-
770
709
  if (isNumber_default()(columnIndex)) {
771
710
  var isNegativeColumnIndex = columnIndex < 0;
772
-
773
711
  if (isNegativeColumnIndex && columnIndex < -columns[correctedFieldIndex].length || columnIndex >= columns[correctedFieldIndex].length) {
774
712
  // The column index is out of bounds
775
713
  return {};
776
714
  }
777
-
778
715
  var correctColumnIndex = isNegativeColumnIndex ? columns[correctedFieldIndex].length + columnIndex : columnIndex;
779
716
  fieldData = columns[correctedFieldIndex].map(function () {
780
717
  return columns[correctedFieldIndex][correctColumnIndex];
@@ -782,41 +719,31 @@ var Base_getDataForIndexBasedFieldReference = function getDataForIndexBasedField
782
719
  } else {
783
720
  fieldData = columns[correctedFieldIndex];
784
721
  }
785
-
786
722
  return {
787
723
  fieldName: fieldName,
788
724
  data: fieldData
789
725
  };
790
726
  }
791
-
792
727
  return {};
793
728
  };
794
-
795
729
  var Base_getDataForNameBasedFieldReference = function getDataForNameBasedFieldReference(data, fieldReferenceStr) {
796
730
  var fields = data.fields,
797
- columns = data.columns;
798
-
731
+ columns = data.columns;
799
732
  var _parseNameBasedFieldR = parseNameBasedFieldReference(fieldReferenceStr),
800
- fieldName = _parseNameBasedFieldR.fieldName,
801
- columnIndex = _parseNameBasedFieldR.columnIndex; // <datasource>.<fieldname>[0]
802
-
803
-
733
+ fieldName = _parseNameBasedFieldR.fieldName,
734
+ columnIndex = _parseNameBasedFieldR.columnIndex; // <datasource>.<fieldname>[0]
804
735
  if (fieldName) {
805
736
  var fieldIndex = findIndex_default()(fields, function (field) {
806
737
  return typeof_default()(field) === 'object' ? field.name === fieldName : field === fieldName;
807
738
  });
808
-
809
739
  if (fieldIndex > -1) {
810
740
  var fieldData;
811
-
812
741
  if (isNumber_default()(columnIndex)) {
813
742
  var isNegativeColumnIndex = columnIndex < 0;
814
-
815
743
  if (isNegativeColumnIndex && columnIndex < -columns[fieldIndex].length || columnIndex >= columns[fieldIndex].length) {
816
744
  // The column index is out of bounds
817
745
  return {};
818
746
  }
819
-
820
747
  var correctColumnIndex = isNegativeColumnIndex ? columns[fieldIndex].length + columnIndex : columnIndex;
821
748
  fieldData = columns[fieldIndex].map(function () {
822
749
  return columns[fieldIndex][correctColumnIndex];
@@ -824,100 +751,80 @@ var Base_getDataForNameBasedFieldReference = function getDataForNameBasedFieldRe
824
751
  } else {
825
752
  fieldData = columns[fieldIndex];
826
753
  }
827
-
828
754
  return {
829
755
  fieldName: fieldName,
830
756
  data: fieldData
831
757
  };
832
- } // eslint-disable-next-line
833
-
834
-
758
+ }
759
+ // eslint-disable-next-line
835
760
  console.warn("field '".concat(fieldName, "' not available."));
836
761
  return {};
837
762
  }
838
-
839
763
  return {};
840
764
  };
841
-
842
765
  var Base_getDataForFieldReference = function getDataForFieldReference(dataSources, fieldReference) {
843
766
  var fieldReferenceStr = fieldReference;
844
767
  var formatValue;
845
-
846
768
  if (Array.isArray(fieldReference) && !fieldReference.isDefault) {
847
769
  return fieldReference.map(function (ref) {
848
770
  return getDataForFieldReference(dataSources, ref);
849
771
  });
850
- } // if the reference is a default and there is multiple default fields to fall back
851
-
852
-
772
+ }
773
+ // if the reference is a default and there is multiple default fields to fall back
853
774
  if (fieldReference.isDefault && Array.isArray(fieldReference.field)) {
854
775
  // iterate through all defaults and check whether the data type matches the expected type
855
776
  for (var i = 0; i < fieldReference.field.length; i += 1) {
856
777
  fieldReferenceStr = fieldReference.field[i];
857
778
  var dataFromDefault = getDataForFieldReference(dataSources, fieldReferenceStr);
858
-
859
779
  if (Array.isArray(dataFromDefault.data)) {
860
780
  var type = inferDataTypeFromSample(drawSample(dataFromDefault.data));
861
-
862
781
  if (fieldReference.type.indexOf(type) > -1) {
863
782
  return dataFromDefault;
864
783
  }
865
784
  }
866
- } // if none of the defaults matched the data type use the last default
867
-
785
+ }
786
+ // if none of the defaults matched the data type use the last default
868
787
  }
869
788
 
870
789
  if (typeof_default()(fieldReference) === 'object') {
871
790
  var field = fieldReference.field;
872
-
873
791
  if (field && !Array.isArray(field)) {
874
792
  fieldReferenceStr = field;
875
793
  }
876
794
  }
877
-
878
795
  var indexBasedRegx = /^[A-Za-z0-9_]+\[.*\].*$/;
879
796
  var nameBasedRegx = /^[A-Za-z0-9_]+\..*$/;
880
797
  var isIndexBasedReference = indexBasedRegx.test(fieldReferenceStr);
881
798
  var isNameBasedReference = nameBasedRegx.test(fieldReferenceStr);
882
-
883
799
  if (!isIndexBasedReference && !isNameBasedReference) {
884
800
  // Unable to parse the encoding. Please verify the encoding format is correct
885
801
  return {};
886
802
  }
887
-
888
803
  var dataSourceType = fieldReferenceStr.match(/^(.*?)(\.|\[)/)[1];
889
804
  var data = getDataForDataSourceType(dataSources, dataSourceType);
890
805
  var fieldData;
891
-
892
806
  if (isIndexBasedReference) {
893
807
  fieldData = Base_getDataForIndexBasedFieldReference(data, fieldReferenceStr);
894
808
  } else {
895
809
  fieldData = Base_getDataForNameBasedFieldReference(data, fieldReferenceStr);
896
810
  }
897
-
898
811
  if (typeof_default()(fieldReference) === 'object') {
899
812
  var format = fieldReference.format;
900
-
901
813
  if (format) {
902
814
  formatValue = getFormatter(fieldData.data, format);
903
815
  }
904
816
  }
905
-
906
817
  if (formatValue && !isEmpty_default()(fieldData)) {
907
818
  return {
908
819
  fieldName: fieldData.fieldName,
909
820
  data: fieldData.data.map(formatValue)
910
821
  };
911
822
  }
912
-
913
823
  return fieldData;
914
824
  };
915
-
916
825
  var Base_mergeEncoding = function mergeEncoding(defaultEncoding) {
917
826
  var userDefinedEncoding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
918
-
919
827
  var mergedEncoding = _objectSpread({}, userDefinedEncoding);
920
-
921
828
  Object.keys(defaultEncoding).forEach(function (key) {
922
829
  if (isEmpty_default()(userDefinedEncoding[key]) && defaultEncoding[key].isRequired && defaultEncoding[key].default) {
923
830
  mergedEncoding[key] = typeof_default()(defaultEncoding[key].default) === 'object' && !Array.isArray(defaultEncoding[key].default) ? _objectSpread(_objectSpread({}, defaultEncoding[key].default), {}, {
@@ -941,26 +848,25 @@ var Base_parse = function parse(dataSources) {
941
848
  }
942
849
  };
943
850
  Object.keys(encoding).forEach(function (key) {
944
- var fieldReference = clone_default()(encoding[key]); // handle the case for encoding field reference, for example fill: 'encoding.trend'
851
+ var fieldReference = clone_default()(encoding[key]);
945
852
 
853
+ // handle the case for encoding field reference, for example fill: 'encoding.trend'
946
854
  if (typeof_default()(fieldReference) === 'object' && fieldReference.field && fieldReference.field.indexOf('encoding') === 0) {
947
- var replacedKey = fieldReference.field.split('.')[1]; // return for the below invalid cases
948
- // `encoding.z` if `z` is not a valid field in encoding
855
+ var replacedKey = fieldReference.field.split('.')[1];
949
856
 
857
+ // return for the below invalid cases
858
+ // `encoding.z` if `z` is not a valid field in encoding
950
859
  if (!encoding[replacedKey]) {
951
860
  // eslint-disable-next-line
952
861
  console.warn("".concat(key, " field cannot refer to 'encoding.").concat(replacedKey, "'."));
953
- } // if `z` is an object configuration in encoding simply extract the field when refering `encoding.z`
954
-
955
-
862
+ }
863
+ // if `z` is an object configuration in encoding simply extract the field when refering `encoding.z`
956
864
  var field = typeof_default()(encoding[replacedKey]) === 'object' ? encoding[replacedKey].field : encoding[replacedKey];
957
865
  fieldReference = _objectSpread(_objectSpread({}, fieldReference), {}, {
958
866
  field: field
959
867
  });
960
868
  }
961
-
962
869
  var dataForFieldReference = Base_getDataForFieldReference(dataSources, fieldReference);
963
-
964
870
  if (Array.isArray(dataForFieldReference)) {
965
871
  parsedOutput[key] = dataForFieldReference.map(function (entry) {
966
872
  return entry.data;
@@ -969,19 +875,16 @@ var Base_parse = function parse(dataSources) {
969
875
  return entry.fieldName;
970
876
  }); // eslint-disable-line no-underscore-dangle
971
877
  // eslint-disable-next-line no-underscore-dangle
972
-
973
878
  parsedOutput._meta.types[key] = dataForFieldReference.map(function (entry) {
974
879
  return inferDataTypeFromSample(drawSample(entry.data));
975
880
  });
976
881
  } else {
977
882
  var fieldName = dataForFieldReference.fieldName,
978
- data = dataForFieldReference.data;
979
-
883
+ data = dataForFieldReference.data;
980
884
  if (fieldName) {
981
885
  parsedOutput[key] = data;
982
886
  parsedOutput._meta.fieldNames[key] = fieldName; // eslint-disable-line no-underscore-dangle
983
887
  // eslint-disable-next-line no-underscore-dangle
984
-
985
888
  parsedOutput._meta.types[key] = inferDataTypeFromSample(drawSample(data));
986
889
  }
987
890
  }