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