@cubejs-client/core 1.3.15 → 1.3.17

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 (100) hide show
  1. package/dist/{cubejs-client-core.js → cubejs-client-core.cjs.js} +1016 -411
  2. package/dist/cubejs-client-core.cjs.js.map +1 -0
  3. package/dist/cubejs-client-core.umd.js +2901 -12088
  4. package/dist/cubejs-client-core.umd.js.map +1 -1
  5. package/dist/src/HttpTransport.d.ts +54 -0
  6. package/dist/src/HttpTransport.d.ts.map +1 -0
  7. package/dist/src/HttpTransport.js +55 -0
  8. package/dist/src/Meta.d.ts +62 -0
  9. package/dist/src/Meta.d.ts.map +1 -0
  10. package/dist/src/Meta.js +150 -0
  11. package/dist/src/ProgressResult.d.ts +8 -0
  12. package/dist/src/ProgressResult.d.ts.map +1 -0
  13. package/dist/src/ProgressResult.js +11 -0
  14. package/dist/src/RequestError.d.ts +6 -0
  15. package/dist/src/RequestError.d.ts.map +1 -0
  16. package/dist/src/RequestError.js +7 -0
  17. package/dist/src/ResultSet.d.ts +430 -0
  18. package/dist/src/ResultSet.d.ts.map +1 -0
  19. package/dist/src/ResultSet.js +952 -0
  20. package/dist/src/SqlQuery.d.ts +17 -0
  21. package/dist/src/SqlQuery.d.ts.map +1 -0
  22. package/dist/src/SqlQuery.js +11 -0
  23. package/dist/src/index.d.ts +194 -0
  24. package/dist/src/index.d.ts.map +1 -0
  25. package/dist/src/index.js +411 -0
  26. package/dist/src/index.umd.d.ts +3 -0
  27. package/dist/src/index.umd.d.ts.map +1 -0
  28. package/dist/src/index.umd.js +6 -0
  29. package/dist/src/time.d.ts +70 -0
  30. package/dist/src/time.d.ts.map +1 -0
  31. package/dist/src/time.js +249 -0
  32. package/dist/src/types.d.ts +424 -0
  33. package/dist/src/types.d.ts.map +1 -0
  34. package/dist/src/types.js +1 -0
  35. package/dist/src/utils.d.ts +19 -0
  36. package/dist/src/utils.d.ts.map +1 -0
  37. package/dist/src/utils.js +294 -0
  38. package/dist/test/CubeApi.test.d.ts +7 -0
  39. package/dist/test/CubeApi.test.d.ts.map +1 -0
  40. package/dist/test/CubeApi.test.js +279 -0
  41. package/dist/test/HttpTransport.test.d.ts +2 -0
  42. package/dist/test/HttpTransport.test.d.ts.map +1 -0
  43. package/dist/test/HttpTransport.test.js +244 -0
  44. package/dist/test/ResultSet.test.d.ts +7 -0
  45. package/dist/test/ResultSet.test.d.ts.map +1 -0
  46. package/dist/test/ResultSet.test.js +1725 -0
  47. package/dist/test/compare-date-range.test.d.ts +2 -0
  48. package/dist/test/compare-date-range.test.d.ts.map +1 -0
  49. package/dist/test/compare-date-range.test.js +742 -0
  50. package/dist/test/data-blending.test.d.ts +2 -0
  51. package/dist/test/data-blending.test.d.ts.map +1 -0
  52. package/dist/test/data-blending.test.js +423 -0
  53. package/dist/test/default-heuristics.test.d.ts +2 -0
  54. package/dist/test/default-heuristics.test.d.ts.map +1 -0
  55. package/dist/test/default-heuristics.test.js +108 -0
  56. package/dist/test/drill-down.test.d.ts +2 -0
  57. package/dist/test/drill-down.test.d.ts.map +1 -0
  58. package/dist/test/drill-down.test.js +373 -0
  59. package/dist/test/fixtures/datablending/load-responses.json +261 -0
  60. package/dist/test/granularity.test.d.ts +2 -0
  61. package/dist/test/granularity.test.d.ts.map +1 -0
  62. package/dist/test/granularity.test.js +218 -0
  63. package/dist/test/helpers.d.ts +283 -0
  64. package/dist/test/helpers.d.ts.map +1 -0
  65. package/dist/test/helpers.js +974 -0
  66. package/dist/test/index.test.d.ts +7 -0
  67. package/dist/test/index.test.d.ts.map +1 -0
  68. package/dist/test/index.test.js +370 -0
  69. package/dist/test/table.test.d.ts +2 -0
  70. package/dist/test/table.test.d.ts.map +1 -0
  71. package/dist/test/table.test.js +757 -0
  72. package/dist/test/utils.test.d.ts +2 -0
  73. package/dist/test/utils.test.d.ts.map +1 -0
  74. package/dist/test/utils.test.js +32 -0
  75. package/package.json +26 -21
  76. package/dist/cubejs-client-core.esm.js +0 -1639
  77. package/dist/cubejs-client-core.esm.js.map +0 -1
  78. package/dist/cubejs-client-core.js.map +0 -1
  79. package/index.d.ts +0 -1338
  80. package/src/HttpTransport.js +0 -60
  81. package/src/HttpTransport.test.js +0 -117
  82. package/src/Meta.js +0 -142
  83. package/src/ProgressResult.js +0 -13
  84. package/src/RequestError.js +0 -7
  85. package/src/ResultSet.js +0 -746
  86. package/src/SqlQuery.js +0 -13
  87. package/src/index.js +0 -398
  88. package/src/index.test.js +0 -454
  89. package/src/index.umd.js +0 -8
  90. package/src/tests/ResultSet.test.js +0 -1655
  91. package/src/tests/compare-date-range.test.js +0 -753
  92. package/src/tests/data-blending.test.js +0 -432
  93. package/src/tests/default-heuristics.test.js +0 -118
  94. package/src/tests/drill-down.test.js +0 -402
  95. package/src/tests/fixtures/datablending/load-responses.json +0 -261
  96. package/src/tests/granularity.test.js +0 -225
  97. package/src/tests/table.test.js +0 -791
  98. package/src/tests/utils.test.js +0 -35
  99. package/src/time.js +0 -296
  100. package/src/utils.js +0 -368
@@ -3,25 +3,26 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
6
- var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
+ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
7
7
  var _typeof = require('@babel/runtime/helpers/typeof');
8
8
  var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
9
9
  var _createClass = require('@babel/runtime/helpers/createClass');
10
- var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
10
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
11
11
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
12
- require('core-js/modules/es.array.filter.js');
13
12
  require('core-js/modules/es.array.for-each.js');
14
13
  require('core-js/modules/es.symbol.js');
14
+ require('core-js/modules/es.array.filter.js');
15
15
  require('core-js/modules/es.array.is-array.js');
16
+ require('core-js/modules/es.object.define-properties.js');
17
+ require('core-js/modules/es.object.define-property.js');
18
+ require('core-js/modules/es.object.get-own-property-descriptor.js');
19
+ require('core-js/modules/es.object.get-own-property-descriptors.js');
16
20
  require('core-js/modules/es.array.map.js');
21
+ require('core-js/modules/es.array.reduce.js');
17
22
  require('core-js/modules/es.number.constructor.js');
18
23
  require('core-js/modules/es.object.entries.js');
19
24
  require('core-js/modules/es.object.keys.js');
20
25
  require('core-js/modules/es.object.to-string.js');
21
- require('core-js/modules/es.object.define-properties.js');
22
- require('core-js/modules/es.object.define-property.js');
23
- require('core-js/modules/es.object.get-own-property-descriptor.js');
24
- require('core-js/modules/es.object.get-own-property-descriptors.js');
25
26
  require('core-js/modules/es.promise.js');
26
27
  require('core-js/modules/web.dom-collections.for-each.js');
27
28
  require('core-js/modules/web.timers.js');
@@ -36,7 +37,6 @@ require('core-js/modules/es.array.includes.js');
36
37
  require('core-js/modules/es.array.index-of.js');
37
38
  require('core-js/modules/es.array.iterator.js');
38
39
  require('core-js/modules/es.array.join.js');
39
- require('core-js/modules/es.array.reduce.js');
40
40
  require('core-js/modules/es.date.to-string.js');
41
41
  require('core-js/modules/es.map.js');
42
42
  require('core-js/modules/es.number.is-nan.js');
@@ -53,7 +53,9 @@ require('core-js/modules/web.dom-collections.iterator.js');
53
53
  var dayjs = require('dayjs');
54
54
  var ramda = require('ramda');
55
55
  require('core-js/modules/es.array.every.js');
56
+ require('core-js/modules/es.array.flat-map.js');
56
57
  require('core-js/modules/es.array.splice.js');
58
+ require('core-js/modules/es.array.unscopables.flat-map.js');
57
59
  require('core-js/modules/es.array.slice.js');
58
60
  require('core-js/modules/es.parse-int.js');
59
61
  require('core-js/modules/es.string.ends-with.js');
@@ -77,11 +79,11 @@ var _wrapNativeSuper = require('@babel/runtime/helpers/wrapNativeSuper');
77
79
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
78
80
 
79
81
  var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
80
- var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
82
+ var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator);
81
83
  var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
82
84
  var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
83
85
  var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
84
- var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator);
86
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
85
87
  var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
86
88
  var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
87
89
  var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
@@ -101,6 +103,9 @@ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t
101
103
  dayjs__default['default'].extend(quarterOfYear__default['default']);
102
104
  dayjs__default['default'].extend(duration__default['default']);
103
105
  dayjs__default['default'].extend(isoWeek__default['default']);
106
+
107
+ // TODO: Define a better type as unitOfTime.DurationConstructor in moment.js
108
+
104
109
  var GRANULARITIES = [{
105
110
  name: undefined,
106
111
  title: 'w/o grouping'
@@ -315,9 +320,6 @@ var timeSeriesFromCustomInterval = function timeSeriesFromCustomInterval(from, t
315
320
 
316
321
  /**
317
322
  * Returns the lowest time unit for the interval
318
- * @protected
319
- * @param {string} interval
320
- * @returns {string}
321
323
  */
322
324
  var diffTimeUnitForInterval = function diffTimeUnitForInterval(interval) {
323
325
  if (/second/i.test(interval)) {
@@ -381,40 +383,38 @@ function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymb
381
383
  function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty__default['default'](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
382
384
  function removeEmptyQueryFields(_query) {
383
385
  var query = _query || {};
384
- return ramda.fromPairs(ramda.toPairs(query).map(function (_ref) {
386
+ return ramda.fromPairs(ramda.toPairs(query).flatMap(function (_ref) {
385
387
  var _ref2 = _slicedToArray__default['default'](_ref, 2),
386
388
  key = _ref2[0],
387
389
  value = _ref2[1];
388
390
  if (['measures', 'dimensions', 'segments', 'timeDimensions', 'filters'].includes(key)) {
389
391
  if (Array.isArray(value) && value.length === 0) {
390
- return null;
392
+ return [];
391
393
  }
392
394
  }
393
395
  if (key === 'order' && value) {
394
- if (Array.isArray(value) && !value.length) {
395
- return null;
396
+ if (Array.isArray(value) && value.length === 0) {
397
+ return [];
396
398
  } else if (!Object.keys(value).length) {
397
- return null;
399
+ return [];
398
400
  }
399
401
  }
400
- return [key, value];
401
- }).filter(Boolean));
402
+ return [[key, value]];
403
+ }));
402
404
  }
403
405
  function validateQuery(_query) {
404
406
  var query = _query || {};
405
407
  return removeEmptyQueryFields(_objectSpread$3(_objectSpread$3({}, query), {}, {
406
408
  filters: (query.filters || []).filter(function (f) {
407
- return f.operator;
409
+ return 'operator' in f;
408
410
  }),
409
411
  timeDimensions: (query.timeDimensions || []).filter(function (td) {
410
412
  return !(!td.dateRange && !td.granularity);
411
413
  })
412
414
  }));
413
415
  }
414
- function areQueriesEqual() {
415
- var query1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
416
- var query2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
417
- return ramda.equals(Object.entries(query1 && query1.order || {}), Object.entries(query2 && query2.order || {})) && ramda.equals(query1, query2);
416
+ function areQueriesEqual(query1, query2) {
417
+ return ramda.equals(Object.entries((query1 === null || query1 === void 0 ? void 0 : query1.order) || {}), Object.entries((query2 === null || query2 === void 0 ? void 0 : query2.order) || {})) && ramda.equals(query1, query2);
418
418
  }
419
419
  function defaultOrder(query) {
420
420
  var granularity = (query.timeDimensions || []).find(function (d) {
@@ -429,9 +429,7 @@ function defaultOrder(query) {
429
429
  }
430
430
  return {};
431
431
  }
432
- function defaultHeuristics(newState) {
433
- var oldQuery = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
434
- var options = arguments.length > 2 ? arguments[2] : undefined;
432
+ function defaultHeuristics(newState, oldQuery, options) {
435
433
  var _clone = ramda.clone(newState),
436
434
  query = _clone.query,
437
435
  props = _objectWithoutProperties__default['default'](_clone, _excluded$2);
@@ -439,6 +437,8 @@ function defaultHeuristics(newState) {
439
437
  sessionGranularity = options.sessionGranularity;
440
438
  var granularity = sessionGranularity || DEFAULT_GRANULARITY;
441
439
  var state = _objectSpread$3({
440
+ shouldApplyHeuristicOrder: false,
441
+ pivotConfig: null,
442
442
  query: query
443
443
  }, props);
444
444
  var newQuery = null;
@@ -446,7 +446,10 @@ function defaultHeuristics(newState) {
446
446
  newQuery = query;
447
447
  }
448
448
  if (Array.isArray(newQuery) || Array.isArray(oldQuery)) {
449
- return newState;
449
+ return _objectSpread$3({
450
+ shouldApplyHeuristicOrder: false,
451
+ pivotConfig: null
452
+ }, newState);
450
453
  }
451
454
  if (newQuery) {
452
455
  if ((oldQuery.timeDimensions || []).length === 1 && (newQuery.timeDimensions || []).length === 1 && newQuery.timeDimensions[0].granularity && oldQuery.timeDimensions[0].granularity !== newQuery.timeDimensions[0].granularity) {
@@ -462,8 +465,8 @@ function defaultHeuristics(newState) {
462
465
  newQuery = _objectSpread$3(_objectSpread$3({}, newQuery), {}, {
463
466
  timeDimensions: defaultTimeDimension ? [{
464
467
  dimension: defaultTimeDimension,
465
- granularity: td && td.granularity || granularity,
466
- dateRange: td && td.dateRange
468
+ granularity: (td === null || td === void 0 ? void 0 : td.granularity) || granularity,
469
+ dateRange: td === null || td === void 0 ? void 0 : td.dateRange
467
470
  }] : []
468
471
  });
469
472
  return _objectSpread$3(_objectSpread$3({}, state), {}, {
@@ -520,8 +523,9 @@ function defaultHeuristics(newState) {
520
523
  if (state.chartType) {
521
524
  var newChartType = state.chartType;
522
525
  if ((newChartType === 'line' || newChartType === 'area') && (oldQuery.timeDimensions || []).length === 1 && !oldQuery.timeDimensions[0].granularity) {
523
- var _oldQuery$timeDimensi = _slicedToArray__default['default'](oldQuery.timeDimensions, 1),
524
- _td = _oldQuery$timeDimensi[0];
526
+ var _ref8 = oldQuery.timeDimensions,
527
+ _ref9 = _slicedToArray__default['default'](_ref8, 1),
528
+ _td = _ref9[0];
525
529
  return _objectSpread$3(_objectSpread$3({}, state), {}, {
526
530
  pivotConfig: null,
527
531
  query: _objectSpread$3(_objectSpread$3({}, oldQuery), {}, {
@@ -532,8 +536,9 @@ function defaultHeuristics(newState) {
532
536
  });
533
537
  }
534
538
  if ((newChartType === 'pie' || newChartType === 'table' || newChartType === 'number') && (oldQuery.timeDimensions || []).length === 1 && oldQuery.timeDimensions[0].granularity) {
535
- var _oldQuery$timeDimensi2 = _slicedToArray__default['default'](oldQuery.timeDimensions, 1),
536
- _td2 = _oldQuery$timeDimensi2[0];
539
+ var _ref10 = oldQuery.timeDimensions,
540
+ _ref11 = _slicedToArray__default['default'](_ref10, 1),
541
+ _td2 = _ref11[0];
537
542
  return _objectSpread$3(_objectSpread$3({}, state), {}, {
538
543
  pivotConfig: null,
539
544
  shouldApplyHeuristicOrder: true,
@@ -552,13 +557,14 @@ function isQueryPresent(query) {
552
557
  return false;
553
558
  }
554
559
  return (Array.isArray(query) ? query : [query]).every(function (q) {
555
- return q.measures && q.measures.length || q.dimensions && q.dimensions.length || q.timeDimensions && q.timeDimensions.length;
560
+ var _q$measures, _q$dimensions, _q$timeDimensions;
561
+ return ((_q$measures = q.measures) === null || _q$measures === void 0 ? void 0 : _q$measures.length) || ((_q$dimensions = q.dimensions) === null || _q$dimensions === void 0 ? void 0 : _q$dimensions.length) || ((_q$timeDimensions = q.timeDimensions) === null || _q$timeDimensions === void 0 ? void 0 : _q$timeDimensions.length);
556
562
  });
557
563
  }
558
564
  function movePivotItem(pivotConfig, sourceIndex, destinationIndex, sourceAxis, destinationAxis) {
559
565
  var nextPivotConfig = _objectSpread$3(_objectSpread$3({}, pivotConfig), {}, {
560
- x: _toConsumableArray__default['default'](pivotConfig.x),
561
- y: _toConsumableArray__default['default'](pivotConfig.y)
566
+ x: _toConsumableArray__default['default'](pivotConfig.x || []),
567
+ y: _toConsumableArray__default['default'](pivotConfig.y || [])
562
568
  });
563
569
  var id = pivotConfig[sourceAxis][sourceIndex];
564
570
  var lastIndex = nextPivotConfig[destinationAxis].length - 1;
@@ -584,8 +590,11 @@ function moveItemInArray(list, sourceIndex, destinationIndex) {
584
590
  function flattenFilters() {
585
591
  var filters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
586
592
  return filters.reduce(function (memo, filter) {
587
- if (filter.or || filter.and) {
588
- return [].concat(_toConsumableArray__default['default'](memo), _toConsumableArray__default['default'](flattenFilters(filter.or || filter.and)));
593
+ if ('or' in filter) {
594
+ return [].concat(_toConsumableArray__default['default'](memo), _toConsumableArray__default['default'](flattenFilters(filter.or)));
595
+ }
596
+ if ('and' in filter) {
597
+ return [].concat(_toConsumableArray__default['default'](memo), _toConsumableArray__default['default'](flattenFilters(filter.and)));
589
598
  }
590
599
  return [].concat(_toConsumableArray__default['default'](memo), [filter]);
591
600
  }, []);
@@ -602,8 +611,12 @@ function getQueryMembers() {
602
611
  (query.timeDimensions || []).forEach(function (td) {
603
612
  return members.add(td.dimension);
604
613
  });
605
- flattenFilters(query.filters).forEach(function (filter) {
606
- return members.add(filter.dimension || filter.member);
614
+ var filters = flattenFilters(query.filters);
615
+ filters.forEach(function (filter) {
616
+ var member = filter.dimension || filter.member;
617
+ if (typeof member === 'string') {
618
+ members.add(member);
619
+ }
607
620
  });
608
621
  return _toConsumableArray__default['default'](members);
609
622
  }
@@ -612,10 +625,10 @@ function getOrderMembersFromOrder(orderMembers, order) {
612
625
  var indexedOrderMembers = ramda.indexBy(ramda.prop('id'), orderMembers);
613
626
  var entries = Array.isArray(order) ? order : Object.entries(order || {});
614
627
  var nextOrderMembers = [];
615
- entries.forEach(function (_ref8) {
616
- var _ref9 = _slicedToArray__default['default'](_ref8, 2),
617
- memberId = _ref9[0],
618
- currentOrder = _ref9[1];
628
+ entries.forEach(function (_ref12) {
629
+ var _ref13 = _slicedToArray__default['default'](_ref12, 2),
630
+ memberId = _ref13[0],
631
+ currentOrder = _ref13[1];
619
632
  if (currentOrder !== 'none' && indexedOrderMembers[memberId]) {
620
633
  ids.add(memberId);
621
634
  nextOrderMembers.push(_objectSpread$3(_objectSpread$3({}, indexedOrderMembers[memberId]), {}, {
@@ -632,11 +645,13 @@ function getOrderMembersFromOrder(orderMembers, order) {
632
645
  });
633
646
  return nextOrderMembers;
634
647
  }
635
- function aliasSeries(values, index, pivotConfig, duplicateMeasures) {
648
+ function aliasSeries(values, index, pivotConfig) {
649
+ var _pivotConfig$aliasSer;
650
+ var duplicateMeasures = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Set();
636
651
  var nonNullValues = values.filter(function (value) {
637
652
  return value != null;
638
653
  });
639
- if (pivotConfig && pivotConfig.aliasSeries && pivotConfig.aliasSeries[index]) {
654
+ if (pivotConfig !== null && pivotConfig !== void 0 && (_pivotConfig$aliasSer = pivotConfig.aliasSeries) !== null && _pivotConfig$aliasSer !== void 0 && _pivotConfig$aliasSer[index]) {
640
655
  return [pivotConfig.aliasSeries[index]].concat(_toConsumableArray__default['default'](nonNullValues));
641
656
  } else if (duplicateMeasures.has(nonNullValues[0])) {
642
657
  return [index].concat(_toConsumableArray__default['default'](nonNullValues));
@@ -649,7 +664,7 @@ var _excluded$1 = ["x"],
649
664
  _excluded3 = ["title", "shortTitle"];
650
665
  function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
651
666
  function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty__default['default'](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
652
- var groupByToPairs = function groupByToPairs(keyFn) {
667
+ var groupByToPairs = function groupByToPairsImpl(keyFn) {
653
668
  var acc = new Map();
654
669
  return function (data) {
655
670
  data.forEach(function (row) {
@@ -676,18 +691,29 @@ var QUERY_TYPE = {
676
691
  COMPARE_DATE_RANGE_QUERY: 'compareDateRangeQuery',
677
692
  BLENDING_QUERY: 'blendingQuery'
678
693
  };
694
+ /**
695
+ * Provides a convenient interface for data manipulation.
696
+ */
679
697
  var ResultSet = /*#__PURE__*/function () {
680
698
  function ResultSet(loadResponse) {
681
699
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
682
700
  _classCallCheck__default['default'](this, ResultSet);
683
- this.loadResponse = loadResponse;
684
- if (this.loadResponse.queryType != null) {
701
+ _defineProperty__default['default'](this, "loadResponse", void 0);
702
+ _defineProperty__default['default'](this, "loadResponses", void 0);
703
+ _defineProperty__default['default'](this, "queryType", void 0);
704
+ _defineProperty__default['default'](this, "parseDateMeasures", void 0);
705
+ _defineProperty__default['default'](this, "options", void 0);
706
+ _defineProperty__default['default'](this, "backwardCompatibleData", void 0);
707
+ if ('queryType' in loadResponse && loadResponse.queryType != null) {
708
+ this.loadResponse = loadResponse;
685
709
  this.queryType = loadResponse.queryType;
686
710
  this.loadResponses = loadResponse.results;
687
711
  } else {
688
712
  this.queryType = QUERY_TYPE.REGULAR_QUERY;
689
- this.loadResponse.pivotQuery = _objectSpread$2(_objectSpread$2({}, loadResponse.query), {}, {
690
- queryType: this.queryType
713
+ this.loadResponse = _objectSpread$2(_objectSpread$2({}, loadResponse), {}, {
714
+ pivotQuery: _objectSpread$2(_objectSpread$2({}, loadResponse.query), {}, {
715
+ queryType: this.queryType
716
+ })
691
717
  });
692
718
  this.loadResponses = [loadResponse];
693
719
  }
@@ -698,9 +724,70 @@ var ResultSet = /*#__PURE__*/function () {
698
724
  this.options = options;
699
725
  this.backwardCompatibleData = [];
700
726
  }
727
+
728
+ /**
729
+ * Returns a measure drill down query.
730
+ *
731
+ * Provided you have a measure with the defined `drillMembers` on the `Orders` cube
732
+ * ```js
733
+ * measures: {
734
+ * count: {
735
+ * type: `count`,
736
+ * drillMembers: [Orders.status, Users.city, count],
737
+ * },
738
+ * // ...
739
+ * }
740
+ * ```
741
+ *
742
+ * Then you can use the `drillDown` method to see the rows that contribute to that metric
743
+ * ```js
744
+ * resultSet.drillDown(
745
+ * {
746
+ * xValues,
747
+ * yValues,
748
+ * },
749
+ * // you should pass the `pivotConfig` if you have used it for axes manipulation
750
+ * pivotConfig
751
+ * )
752
+ * ```
753
+ *
754
+ * the result will be a query with the required filters applied and the dimensions/measures filled out
755
+ * ```js
756
+ * {
757
+ * measures: ['Orders.count'],
758
+ * dimensions: ['Orders.status', 'Users.city'],
759
+ * filters: [
760
+ * // dimension and measure filters
761
+ * ],
762
+ * timeDimensions: [
763
+ * //...
764
+ * ]
765
+ * }
766
+ * ```
767
+ *
768
+ * In case when you want to add `order` or `limit` to the query, you can simply spread it
769
+ *
770
+ * ```js
771
+ * // An example for React
772
+ * const drillDownResponse = useCubeQuery(
773
+ * {
774
+ * ...drillDownQuery,
775
+ * limit: 30,
776
+ * order: {
777
+ * 'Orders.ts': 'desc'
778
+ * }
779
+ * },
780
+ * {
781
+ * skip: !drillDownQuery
782
+ * }
783
+ * );
784
+ * ```
785
+ * @returns Drill down query
786
+ */
701
787
  return _createClass__default['default'](ResultSet, [{
702
788
  key: "drillDown",
703
789
  value: function drillDown(drillDownLocator, pivotConfig) {
790
+ var _drillDownLocator$xVa, _drillDownLocator$yVa, _measures$measureName, _measures$measureName2;
704
791
  if (this.queryType === QUERY_TYPE.COMPARE_DATE_RANGE_QUERY) {
705
792
  throw new Error('compareDateRange drillDown query is not currently supported');
706
793
  }
@@ -708,16 +795,14 @@ var ResultSet = /*#__PURE__*/function () {
708
795
  throw new Error('Data blending drillDown query is not currently supported');
709
796
  }
710
797
  var query = this.loadResponses[0].query;
711
- var _drillDownLocator$xVa = drillDownLocator.xValues,
712
- xValues = _drillDownLocator$xVa === void 0 ? [] : _drillDownLocator$xVa,
713
- _drillDownLocator$yVa = drillDownLocator.yValues,
714
- yValues = _drillDownLocator$yVa === void 0 ? [] : _drillDownLocator$yVa;
798
+ var xValues = (_drillDownLocator$xVa = drillDownLocator === null || drillDownLocator === void 0 ? void 0 : drillDownLocator.xValues) !== null && _drillDownLocator$xVa !== void 0 ? _drillDownLocator$xVa : [];
799
+ var yValues = (_drillDownLocator$yVa = drillDownLocator === null || drillDownLocator === void 0 ? void 0 : drillDownLocator.yValues) !== null && _drillDownLocator$yVa !== void 0 ? _drillDownLocator$yVa : [];
715
800
  var normalizedPivotConfig = this.normalizePivotConfig(pivotConfig);
716
801
  var values = [];
717
- normalizedPivotConfig.x.forEach(function (member, currentIndex) {
802
+ normalizedPivotConfig === null || normalizedPivotConfig === void 0 || normalizedPivotConfig.x.forEach(function (member, currentIndex) {
718
803
  return values.push([member, xValues[currentIndex]]);
719
804
  });
720
- normalizedPivotConfig.y.forEach(function (member, currentIndex) {
805
+ normalizedPivotConfig === null || normalizedPivotConfig === void 0 || normalizedPivotConfig.y.forEach(function (member, currentIndex) {
721
806
  return values.push([member, yValues[currentIndex]]);
722
807
  });
723
808
  var _this$query = this.query(),
@@ -738,7 +823,7 @@ var ResultSet = /*#__PURE__*/function () {
738
823
  var _Object$keys2 = _slicedToArray__default['default'](_Object$keys, 1);
739
824
  measureName = _Object$keys2[0];
740
825
  }
741
- if (!(measures[measureName] && measures[measureName].drillMembers || []).length) {
826
+ if (!((_measures$measureName = (_measures$measureName2 = measures[measureName]) === null || _measures$measureName2 === void 0 || (_measures$measureName2 = _measures$measureName2.drillMembers) === null || _measures$measureName2 === void 0 ? void 0 : _measures$measureName2.length) !== null && _measures$measureName !== void 0 ? _measures$measureName : 0)) {
742
827
  return null;
743
828
  }
744
829
  var filters = [{
@@ -760,8 +845,9 @@ var ResultSet = /*#__PURE__*/function () {
760
845
  dimension = _member$split2[1],
761
846
  granularity = _member$split2[2];
762
847
  if (granularity !== undefined) {
848
+ var _query$timeDimensions;
763
849
  var range = _dayRange(value, value).snapTo(granularity);
764
- var originalTimeDimension = query.timeDimensions.find(function (td) {
850
+ var originalTimeDimension = (_query$timeDimensions = query.timeDimensions) === null || _query$timeDimensions === void 0 ? void 0 : _query$timeDimensions.find(function (td) {
765
851
  return td.dimension;
766
852
  });
767
853
  var dateRange = [range.start, range.end];
@@ -790,7 +876,7 @@ var ResultSet = /*#__PURE__*/function () {
790
876
  });
791
877
  }
792
878
  });
793
- if (timeDimensions.length === 0 && query.timeDimensions.length > 0 && query.timeDimensions[0].granularity == null) {
879
+ if (timeDimensions.length === 0 && Array.isArray(query.timeDimensions) && query.timeDimensions.length > 0 && query.timeDimensions[0].granularity == null) {
794
880
  timeDimensions.push(query.timeDimensions[0]);
795
881
  }
796
882
  return _objectSpread$2(_objectSpread$2(_objectSpread$2({}, measures[measureName].drillMembersGrouped), {}, {
@@ -803,6 +889,36 @@ var ResultSet = /*#__PURE__*/function () {
803
889
  timezone: query.timezone
804
890
  });
805
891
  }
892
+
893
+ /**
894
+ * Returns an array of series with key, title and series data.
895
+ * ```js
896
+ * // For the query
897
+ * {
898
+ * measures: ['Stories.count'],
899
+ * timeDimensions: [{
900
+ * dimension: 'Stories.time',
901
+ * dateRange: ['2015-01-01', '2015-12-31'],
902
+ * granularity: 'month'
903
+ * }]
904
+ * }
905
+ *
906
+ * // ResultSet.series() will return
907
+ * [
908
+ * {
909
+ * key: 'Stories.count',
910
+ * title: 'Stories Count',
911
+ * shortTitle: 'Count',
912
+ * series: [
913
+ * { x: '2015-01-01T00:00:00', value: 27120 },
914
+ * { x: '2015-02-01T00:00:00', value: 25861 },
915
+ * { x: '2015-03-01T00:00:00', value: 29661 },
916
+ * //...
917
+ * ],
918
+ * },
919
+ * ]
920
+ * ```
921
+ */
806
922
  }, {
807
923
  key: "series",
808
924
  value: function series(pivotConfig) {
@@ -836,20 +952,22 @@ var ResultSet = /*#__PURE__*/function () {
836
952
  return axis.filter(function (d) {
837
953
  return d !== 'measures';
838
954
  }).map(function (d) {
839
- return row[d] != null ? row[d] : null;
955
+ var val = row[d];
956
+ return val != null ? val : null;
840
957
  }).concat(measure ? [measure] : []);
841
958
  };
842
959
  if (axis.find(function (d) {
843
960
  return d === 'measures';
844
961
  }) && (query.measures || []).length) {
845
- return query.measures.map(value);
962
+ return (query.measures || []).map(value);
846
963
  }
847
964
  return [value()];
848
965
  };
849
966
  }
850
967
  }, {
851
968
  key: "axisValuesString",
852
- value: function axisValuesString(axisValues, delimiter) {
969
+ value: function axisValuesString(axisValues) {
970
+ var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ', ';
853
971
  var formatValue = function formatValue(v) {
854
972
  if (v == null) {
855
973
  return '∅';
@@ -859,7 +977,7 @@ var ResultSet = /*#__PURE__*/function () {
859
977
  return v;
860
978
  }
861
979
  };
862
- return axisValues.map(formatValue).join(delimiter || ', ');
980
+ return axisValues.map(formatValue).join(delimiter);
863
981
  }
864
982
  }, {
865
983
  key: "normalizePivotConfig",
@@ -872,17 +990,22 @@ var ResultSet = /*#__PURE__*/function () {
872
990
  if (!timeDimension.granularity) {
873
991
  return null;
874
992
  }
875
- var dateRange = timeDimension.dateRange;
993
+ var dateRange;
994
+ dateRange = timeDimension.dateRange;
876
995
  if (!dateRange) {
877
996
  var member = ResultSet.timeDimensionMember(timeDimension);
878
- var dates = ramda.pipe(ramda.map(function (row) {
879
- return row[member] && internalDayjs(row[member]);
880
- }), ramda.filter(Boolean))(this.timeDimensionBackwardCompatibleData(resultIndex));
997
+ var rawRows = this.timeDimensionBackwardCompatibleData(resultIndex || 0);
998
+ var dates = rawRows.map(function (row) {
999
+ var value = row[member];
1000
+ return value ? internalDayjs(value) : null;
1001
+ }).filter(function (d) {
1002
+ return Boolean(d);
1003
+ });
881
1004
  dateRange = dates.length && [ramda.reduce(ramda.minBy(function (d) {
882
1005
  return d.toDate();
883
- }), dates[0], dates), ramda.reduce(ramda.maxBy(function (d) {
1006
+ }), dates[0], dates).toString(), ramda.reduce(ramda.maxBy(function (d) {
884
1007
  return d.toDate();
885
- }), dates[0], dates)] || null;
1008
+ }), dates[0], dates).toString()] || null;
886
1009
  }
887
1010
  if (!dateRange) {
888
1011
  return null;
@@ -898,16 +1021,58 @@ var ResultSet = /*#__PURE__*/function () {
898
1021
  if (isPredefinedGranularity(timeDimension.granularity)) {
899
1022
  return TIME_SERIES[timeDimension.granularity](padToDay ? range.snapTo('d') : range);
900
1023
  }
901
- if (!annotations["".concat(timeDimension.dimension, ".").concat(timeDimension.granularity)]) {
1024
+ if (!(annotations !== null && annotations !== void 0 && annotations["".concat(timeDimension.dimension, ".").concat(timeDimension.granularity)])) {
902
1025
  throw new Error("Granularity \"".concat(timeDimension.granularity, "\" not found in time dimension \"").concat(timeDimension.dimension, "\""));
903
1026
  }
904
1027
  return timeSeriesFromCustomInterval(start, end, annotations["".concat(timeDimension.dimension, ".").concat(timeDimension.granularity)].granularity);
905
1028
  }
1029
+
1030
+ /**
1031
+ * Base method for pivoting [ResultSet](#result-set) data.
1032
+ * Most of the time shouldn't be used directly and [chartPivot](#result-set-chart-pivot)
1033
+ * or [tablePivot](#table-pivot) should be used instead.
1034
+ *
1035
+ * You can find the examples of using the `pivotConfig` [here](#types-pivot-config)
1036
+ * ```js
1037
+ * // For query
1038
+ * {
1039
+ * measures: ['Stories.count'],
1040
+ * timeDimensions: [{
1041
+ * dimension: 'Stories.time',
1042
+ * dateRange: ['2015-01-01', '2015-03-31'],
1043
+ * granularity: 'month'
1044
+ * }]
1045
+ * }
1046
+ *
1047
+ * // ResultSet.pivot({ x: ['Stories.time'], y: ['measures'] }) will return
1048
+ * [
1049
+ * {
1050
+ * xValues: ["2015-01-01T00:00:00"],
1051
+ * yValuesArray: [
1052
+ * [['Stories.count'], 27120]
1053
+ * ]
1054
+ * },
1055
+ * {
1056
+ * xValues: ["2015-02-01T00:00:00"],
1057
+ * yValuesArray: [
1058
+ * [['Stories.count'], 25861]
1059
+ * ]
1060
+ * },
1061
+ * {
1062
+ * xValues: ["2015-03-01T00:00:00"],
1063
+ * yValuesArray: [
1064
+ * [['Stories.count'], 29661]
1065
+ * ]
1066
+ * }
1067
+ * ]
1068
+ * ```
1069
+ * @returns An array of pivoted rows.
1070
+ */
906
1071
  }, {
907
1072
  key: "pivot",
908
1073
  value: function pivot(pivotConfig) {
909
1074
  var _this2 = this;
910
- pivotConfig = this.normalizePivotConfig(pivotConfig);
1075
+ var normalizedPivotConfig = this.normalizePivotConfig(pivotConfig);
911
1076
  var query = this.loadResponse.pivotQuery;
912
1077
  var pivotImpl = function pivotImpl() {
913
1078
  var resultIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
@@ -916,9 +1081,9 @@ var ResultSet = /*#__PURE__*/function () {
916
1081
  return _this2.axisValuesString(xValues);
917
1082
  });
918
1083
  var measureValue = function measureValue(row, measure) {
919
- return row[measure] || pivotConfig.fillWithValue || 0;
1084
+ return row[measure] || normalizedPivotConfig.fillWithValue || 0;
920
1085
  };
921
- if (pivotConfig.fillMissingDates && pivotConfig.x.length === 1 && ramda.equals(pivotConfig.x, (query.timeDimensions || []).filter(function (td) {
1086
+ if (normalizedPivotConfig.fillMissingDates && normalizedPivotConfig.x.length === 1 && ramda.equals(normalizedPivotConfig.x, (query.timeDimensions || []).filter(function (td) {
922
1087
  return Boolean(td.granularity);
923
1088
  }).map(function (td) {
924
1089
  return ResultSet.timeDimensionMember(td);
@@ -928,21 +1093,22 @@ var ResultSet = /*#__PURE__*/function () {
928
1093
  });
929
1094
  if (series[0]) {
930
1095
  groupByXAxis = function groupByXAxis(rows) {
1096
+ var _series$resultIndex$m, _series$resultIndex;
931
1097
  var byXValues = ramda.groupBy(function (_ref12) {
932
1098
  var xValues = _ref12.xValues;
933
1099
  return xValues[0];
934
1100
  }, rows);
935
- return series[resultIndex].map(function (d) {
1101
+ return (_series$resultIndex$m = (_series$resultIndex = series[resultIndex]) === null || _series$resultIndex === void 0 ? void 0 : _series$resultIndex.map(function (d) {
936
1102
  return [d, byXValues[d] || [{
937
1103
  xValues: [d],
938
1104
  row: {}
939
1105
  }]];
940
- });
1106
+ })) !== null && _series$resultIndex$m !== void 0 ? _series$resultIndex$m : [];
941
1107
  };
942
1108
  }
943
1109
  }
944
1110
  var xGrouped = ramda.pipe(ramda.map(function (row) {
945
- return _this2.axisValues(pivotConfig.x, resultIndex)(row).map(function (xValues) {
1111
+ return _this2.axisValues(normalizedPivotConfig.x, resultIndex)(row).map(function (xValues) {
946
1112
  return {
947
1113
  xValues: xValues,
948
1114
  row: row
@@ -955,7 +1121,7 @@ var ResultSet = /*#__PURE__*/function () {
955
1121
  rows = _ref14[1];
956
1122
  rows.forEach(function (_ref15) {
957
1123
  var row = _ref15.row;
958
- _this2.axisValues(pivotConfig.y, resultIndex)(row).forEach(function (values) {
1124
+ _this2.axisValues(normalizedPivotConfig.y, resultIndex)(row).forEach(function (values) {
959
1125
  if (Object.keys(row).length > 0) {
960
1126
  yValuesMap[values.join()] = values;
961
1127
  }
@@ -963,7 +1129,7 @@ var ResultSet = /*#__PURE__*/function () {
963
1129
  });
964
1130
  });
965
1131
  var allYValues = Object.values(yValuesMap);
966
- var measureOnX = Boolean(pivotConfig.x.find(function (d) {
1132
+ var measureOnX = Boolean(normalizedPivotConfig.x.find(function (d) {
967
1133
  return d === 'measures';
968
1134
  }));
969
1135
  return xGrouped.map(function (_ref16) {
@@ -973,7 +1139,7 @@ var ResultSet = /*#__PURE__*/function () {
973
1139
  var yGrouped = {};
974
1140
  rows.forEach(function (_ref18) {
975
1141
  var row = _ref18.row;
976
- var arr = _this2.axisValues(pivotConfig.y, resultIndex)(row).map(function (yValues) {
1142
+ var arr = _this2.axisValues(normalizedPivotConfig.y, resultIndex)(row).map(function (yValues) {
977
1143
  return {
978
1144
  yValues: yValues,
979
1145
  row: row
@@ -997,17 +1163,18 @@ var ResultSet = /*#__PURE__*/function () {
997
1163
  var pivots = this.loadResponses.length > 1 ? this.loadResponses.map(function (_, index) {
998
1164
  return pivotImpl(index);
999
1165
  }) : [];
1000
- return pivots.length ? this.mergePivots(pivots, pivotConfig.joinDateRange) : pivotImpl();
1166
+ return pivots.length ? this.mergePivots(pivots, normalizedPivotConfig.joinDateRange || false) : pivotImpl();
1001
1167
  }
1002
1168
  }, {
1003
1169
  key: "mergePivots",
1004
1170
  value: function mergePivots(pivots, joinDateRange) {
1005
1171
  var minLengthPivot = pivots.reduce(function (memo, current) {
1006
1172
  return memo != null && current.length >= memo.length ? memo : current;
1007
- }, null);
1173
+ }, null) || [];
1008
1174
  return minLengthPivot.map(function (_, index) {
1009
1175
  var xValues = joinDateRange ? [pivots.map(function (pivot) {
1010
- return pivot[index] && pivot[index].xValues || [];
1176
+ var _pivot$index;
1177
+ return ((_pivot$index = pivot[index]) === null || _pivot$index === void 0 ? void 0 : _pivot$index.xValues) || [];
1011
1178
  }).join(', ')] : minLengthPivot[index].xValues;
1012
1179
  return {
1013
1180
  xValues: xValues,
@@ -1017,12 +1184,88 @@ var ResultSet = /*#__PURE__*/function () {
1017
1184
  };
1018
1185
  });
1019
1186
  }
1020
- }, {
1021
- key: "pivotedRows",
1022
- value: function pivotedRows(pivotConfig) {
1023
- // TODO
1024
- return this.chartPivot(pivotConfig);
1025
- }
1187
+
1188
+ /**
1189
+ * Returns normalized query result data in the following format.
1190
+ *
1191
+ * You can find the examples of using the `pivotConfig` [here](#types-pivot-config)
1192
+ * ```js
1193
+ * // For the query
1194
+ * {
1195
+ * measures: ['Stories.count'],
1196
+ * timeDimensions: [{
1197
+ * dimension: 'Stories.time',
1198
+ * dateRange: ['2015-01-01', '2015-12-31'],
1199
+ * granularity: 'month'
1200
+ * }]
1201
+ * }
1202
+ *
1203
+ * // ResultSet.chartPivot() will return
1204
+ * [
1205
+ * { "x":"2015-01-01T00:00:00", "Stories.count": 27120, "xValues": ["2015-01-01T00:00:00"] },
1206
+ * { "x":"2015-02-01T00:00:00", "Stories.count": 25861, "xValues": ["2015-02-01T00:00:00"] },
1207
+ * { "x":"2015-03-01T00:00:00", "Stories.count": 29661, "xValues": ["2015-03-01T00:00:00"] },
1208
+ * //...
1209
+ * ]
1210
+ *
1211
+ * ```
1212
+ * When using `chartPivot()` or `seriesNames()`, you can pass `aliasSeries` in the [pivotConfig](#types-pivot-config)
1213
+ * to give each series a unique prefix. This is useful for `blending queries` which use the same measure multiple times.
1214
+ *
1215
+ * ```js
1216
+ * // For the queries
1217
+ * {
1218
+ * measures: ['Stories.count'],
1219
+ * timeDimensions: [
1220
+ * {
1221
+ * dimension: 'Stories.time',
1222
+ * dateRange: ['2015-01-01', '2015-12-31'],
1223
+ * granularity: 'month',
1224
+ * },
1225
+ * ],
1226
+ * },
1227
+ * {
1228
+ * measures: ['Stories.count'],
1229
+ * timeDimensions: [
1230
+ * {
1231
+ * dimension: 'Stories.time',
1232
+ * dateRange: ['2015-01-01', '2015-12-31'],
1233
+ * granularity: 'month',
1234
+ * },
1235
+ * ],
1236
+ * filters: [
1237
+ * {
1238
+ * member: 'Stores.read',
1239
+ * operator: 'equals',
1240
+ * value: ['true'],
1241
+ * },
1242
+ * ],
1243
+ * },
1244
+ *
1245
+ * // ResultSet.chartPivot({ aliasSeries: ['one', 'two'] }) will return
1246
+ * [
1247
+ * {
1248
+ * x: '2015-01-01T00:00:00',
1249
+ * 'one,Stories.count': 27120,
1250
+ * 'two,Stories.count': 8933,
1251
+ * xValues: ['2015-01-01T00:00:00'],
1252
+ * },
1253
+ * {
1254
+ * x: '2015-02-01T00:00:00',
1255
+ * 'one,Stories.count': 25861,
1256
+ * 'two,Stories.count': 8344,
1257
+ * xValues: ['2015-02-01T00:00:00'],
1258
+ * },
1259
+ * {
1260
+ * x: '2015-03-01T00:00:00',
1261
+ * 'one,Stories.count': 29661,
1262
+ * 'two,Stories.count': 9023,
1263
+ * xValues: ['2015-03-01T00:00:00'],
1264
+ * },
1265
+ * //...
1266
+ * ]
1267
+ * ```
1268
+ */
1026
1269
  }, {
1027
1270
  key: "chartPivot",
1028
1271
  value: function chartPivot(pivotConfig) {
@@ -1038,8 +1281,9 @@ var ResultSet = /*#__PURE__*/function () {
1038
1281
  var duplicateMeasures = new Set();
1039
1282
  if (this.queryType === QUERY_TYPE.BLENDING_QUERY) {
1040
1283
  var allMeasures = ramda.flatten(this.loadResponses.map(function (_ref19) {
1284
+ var _query$measures;
1041
1285
  var query = _ref19.query;
1042
- return query.measures;
1286
+ return (_query$measures = query.measures) !== null && _query$measures !== void 0 ? _query$measures : [];
1043
1287
  }));
1044
1288
  allMeasures.filter(function (e, i, a) {
1045
1289
  return a.indexOf(e) !== i;
@@ -1063,6 +1307,34 @@ var ResultSet = /*#__PURE__*/function () {
1063
1307
  }, yValuesMap);
1064
1308
  });
1065
1309
  }
1310
+
1311
+ /**
1312
+ * Returns normalized query result data prepared for visualization in the table format.
1313
+ *
1314
+ * You can find the examples of using the `pivotConfig` [here](#types-pivot-config)
1315
+ *
1316
+ * For example:
1317
+ * ```js
1318
+ * // For the query
1319
+ * {
1320
+ * measures: ['Stories.count'],
1321
+ * timeDimensions: [{
1322
+ * dimension: 'Stories.time',
1323
+ * dateRange: ['2015-01-01', '2015-12-31'],
1324
+ * granularity: 'month'
1325
+ * }]
1326
+ * }
1327
+ *
1328
+ * // ResultSet.tablePivot() will return
1329
+ * [
1330
+ * { "Stories.time": "2015-01-01T00:00:00", "Stories.count": 27120 },
1331
+ * { "Stories.time": "2015-02-01T00:00:00", "Stories.count": 25861 },
1332
+ * { "Stories.time": "2015-03-01T00:00:00", "Stories.count": 29661 },
1333
+ * //...
1334
+ * ]
1335
+ * ```
1336
+ * @returns An array of pivoted rows
1337
+ */
1066
1338
  }, {
1067
1339
  key: "tablePivot",
1068
1340
  value: function tablePivot(pivotConfig) {
@@ -1071,21 +1343,127 @@ var ResultSet = /*#__PURE__*/function () {
1071
1343
  return this.pivot(normalizedPivotConfig).map(function (_ref23) {
1072
1344
  var xValues = _ref23.xValues,
1073
1345
  yValuesArray = _ref23.yValuesArray;
1074
- return ramda.fromPairs(normalizedPivotConfig.x.map(function (key, index) {
1075
- return [key, xValues[index]];
1076
- }).concat(isMeasuresPresent ? yValuesArray.map(function (_ref24) {
1346
+ return ramda.fromPairs([].concat(_toConsumableArray__default['default'](normalizedPivotConfig.x.map(function (key, index) {
1347
+ var _xValues$index;
1348
+ return [key, (_xValues$index = xValues[index]) !== null && _xValues$index !== void 0 ? _xValues$index : ''];
1349
+ })), _toConsumableArray__default['default'](isMeasuresPresent ? yValuesArray.map(function (_ref24) {
1077
1350
  var _ref25 = _slicedToArray__default['default'](_ref24, 2),
1078
1351
  yValues = _ref25[0],
1079
1352
  measure = _ref25[1];
1080
1353
  return [yValues.length ? yValues.join() : 'value', measure];
1081
- }) : []));
1354
+ }) : [])));
1082
1355
  });
1083
1356
  }
1357
+
1358
+ /**
1359
+ * Returns an array of column definitions for `tablePivot`.
1360
+ *
1361
+ * For example:
1362
+ * ```js
1363
+ * // For the query
1364
+ * {
1365
+ * measures: ['Stories.count'],
1366
+ * timeDimensions: [{
1367
+ * dimension: 'Stories.time',
1368
+ * dateRange: ['2015-01-01', '2015-12-31'],
1369
+ * granularity: 'month'
1370
+ * }]
1371
+ * }
1372
+ *
1373
+ * // ResultSet.tableColumns() will return
1374
+ * [
1375
+ * {
1376
+ * key: 'Stories.time',
1377
+ * dataIndex: 'Stories.time',
1378
+ * title: 'Stories Time',
1379
+ * shortTitle: 'Time',
1380
+ * type: 'time',
1381
+ * format: undefined,
1382
+ * },
1383
+ * {
1384
+ * key: 'Stories.count',
1385
+ * dataIndex: 'Stories.count',
1386
+ * title: 'Stories Count',
1387
+ * shortTitle: 'Count',
1388
+ * type: 'count',
1389
+ * format: undefined,
1390
+ * },
1391
+ * //...
1392
+ * ]
1393
+ * ```
1394
+ *
1395
+ * In case we want to pivot the table axes
1396
+ * ```js
1397
+ * // Let's take this query as an example
1398
+ * {
1399
+ * measures: ['Orders.count'],
1400
+ * dimensions: ['Users.country', 'Users.gender']
1401
+ * }
1402
+ *
1403
+ * // and put the dimensions on `y` axis
1404
+ * resultSet.tableColumns({
1405
+ * x: [],
1406
+ * y: ['Users.country', 'Users.gender', 'measures']
1407
+ * })
1408
+ * ```
1409
+ *
1410
+ * then `tableColumns` will group the table head and return
1411
+ * ```js
1412
+ * {
1413
+ * key: 'Germany',
1414
+ * type: 'string',
1415
+ * title: 'Users Country Germany',
1416
+ * shortTitle: 'Germany',
1417
+ * meta: undefined,
1418
+ * format: undefined,
1419
+ * children: [
1420
+ * {
1421
+ * key: 'male',
1422
+ * type: 'string',
1423
+ * title: 'Users Gender male',
1424
+ * shortTitle: 'male',
1425
+ * meta: undefined,
1426
+ * format: undefined,
1427
+ * children: [
1428
+ * {
1429
+ * // ...
1430
+ * dataIndex: 'Germany.male.Orders.count',
1431
+ * shortTitle: 'Count',
1432
+ * },
1433
+ * ],
1434
+ * },
1435
+ * {
1436
+ * // ...
1437
+ * shortTitle: 'female',
1438
+ * children: [
1439
+ * {
1440
+ * // ...
1441
+ * dataIndex: 'Germany.female.Orders.count',
1442
+ * shortTitle: 'Count',
1443
+ * },
1444
+ * ],
1445
+ * },
1446
+ * ],
1447
+ * },
1448
+ * // ...
1449
+ * ```
1450
+ * @returns An array of columns
1451
+ */
1084
1452
  }, {
1085
1453
  key: "tableColumns",
1086
1454
  value: function tableColumns(pivotConfig) {
1455
+ var _pivot$;
1087
1456
  var normalizedPivotConfig = this.normalizePivotConfig(pivotConfig || {});
1088
- var annotations = ramda.pipe(ramda.pluck('annotation'), ramda.reduce(ramda.mergeDeepLeft(), {}))(this.loadResponses);
1457
+ var annotations = this.loadResponses.map(function (r) {
1458
+ return r.annotation;
1459
+ }).reduce(function (acc, annotation) {
1460
+ return ramda.mergeDeepLeft(acc, annotation);
1461
+ }, {
1462
+ dimensions: {},
1463
+ measures: {},
1464
+ timeDimensions: {},
1465
+ segments: {}
1466
+ });
1089
1467
  var flatMeta = Object.values(annotations).reduce(function (a, b) {
1090
1468
  return _objectSpread$2(_objectSpread$2({}, a), b);
1091
1469
  }, {});
@@ -1107,16 +1485,17 @@ var ResultSet = /*#__PURE__*/function () {
1107
1485
  };
1108
1486
  };
1109
1487
  var pivot = this.pivot(normalizedPivotConfig);
1110
- (pivot[0] && pivot[0].yValuesArray || []).forEach(function (_ref27) {
1488
+ (((_pivot$ = pivot[0]) === null || _pivot$ === void 0 ? void 0 : _pivot$.yValuesArray) || []).forEach(function (_ref27) {
1111
1489
  var _ref28 = _slicedToArray__default['default'](_ref27, 1),
1112
1490
  yValues = _ref28[0];
1113
1491
  if (yValues.length > 0) {
1114
1492
  var currentItem = schema;
1115
1493
  yValues.forEach(function (value, index) {
1494
+ var _currentItem;
1116
1495
  currentItem["_".concat(value)] = {
1117
1496
  key: value,
1118
1497
  memberId: normalizedPivotConfig.y[index] === 'measures' ? value : normalizedPivotConfig.y[index],
1119
- children: currentItem["_".concat(value)] && currentItem["_".concat(value)].children || {}
1498
+ children: ((_currentItem = currentItem["_".concat(value)]) === null || _currentItem === void 0 ? void 0 : _currentItem.children) || {}
1120
1499
  };
1121
1500
  currentItem = currentItem["_".concat(value)].children;
1122
1501
  });
@@ -1162,7 +1541,7 @@ var ResultSet = /*#__PURE__*/function () {
1162
1541
  });
1163
1542
  }
1164
1543
 
1165
- // Syntatic column to display the measure value
1544
+ // Synthetic column to display the measure value
1166
1545
  if (!normalizedPivotConfig.y.length && normalizedPivotConfig.x.includes('measures')) {
1167
1546
  otherColumns.push({
1168
1547
  key: 'value',
@@ -1195,23 +1574,53 @@ var ResultSet = /*#__PURE__*/function () {
1195
1574
  }, {
1196
1575
  key: "categories",
1197
1576
  value: function categories(pivotConfig) {
1198
- // TODO
1199
1577
  return this.chartPivot(pivotConfig);
1200
1578
  }
1579
+
1580
+ /**
1581
+ * Returns an array of series objects, containing `key` and `title` parameters.
1582
+ * ```js
1583
+ * // For query
1584
+ * {
1585
+ * measures: ['Stories.count'],
1586
+ * timeDimensions: [{
1587
+ * dimension: 'Stories.time',
1588
+ * dateRange: ['2015-01-01', '2015-12-31'],
1589
+ * granularity: 'month'
1590
+ * }]
1591
+ * }
1592
+ *
1593
+ * // ResultSet.seriesNames() will return
1594
+ * [
1595
+ * {
1596
+ * key: 'Stories.count',
1597
+ * title: 'Stories Count',
1598
+ * shortTitle: 'Count',
1599
+ * yValues: ['Stories.count'],
1600
+ * },
1601
+ * ]
1602
+ * ```
1603
+ * @returns An array of series names
1604
+ */
1201
1605
  }, {
1202
1606
  key: "seriesNames",
1203
1607
  value: function seriesNames(pivotConfig) {
1204
1608
  var _this4 = this;
1205
- pivotConfig = this.normalizePivotConfig(pivotConfig);
1206
- var measures = ramda.pipe(ramda.pluck('annotation'), ramda.pluck('measures'), ramda.mergeAll)(this.loadResponses);
1609
+ var normalizedPivotConfig = this.normalizePivotConfig(pivotConfig);
1610
+ var measures = this.loadResponses.map(function (r) {
1611
+ return r.annotation.measures;
1612
+ }).reduce(function (acc, m) {
1613
+ return _objectSpread$2(_objectSpread$2({}, acc), m);
1614
+ }, {});
1207
1615
  var seriesNames = unnest(this.loadResponses.map(function (_, index) {
1208
- return ramda.pipe(ramda.map(_this4.axisValues(pivotConfig.y, index)), unnest, ramda.uniq)(_this4.timeDimensionBackwardCompatibleData(index));
1616
+ return ramda.pipe(ramda.map(_this4.axisValues(normalizedPivotConfig.y, index)), unnest, ramda.uniq)(_this4.timeDimensionBackwardCompatibleData(index));
1209
1617
  }));
1210
1618
  var duplicateMeasures = new Set();
1211
1619
  if (this.queryType === QUERY_TYPE.BLENDING_QUERY) {
1212
1620
  var allMeasures = ramda.flatten(this.loadResponses.map(function (_ref30) {
1621
+ var _query$measures2;
1213
1622
  var query = _ref30.query;
1214
- return query.measures;
1623
+ return (_query$measures2 = query.measures) !== null && _query$measures2 !== void 0 ? _query$measures2 : [];
1215
1624
  }));
1216
1625
  allMeasures.filter(function (e, i, a) {
1217
1626
  return a.indexOf(e) !== i;
@@ -1220,12 +1629,12 @@ var ResultSet = /*#__PURE__*/function () {
1220
1629
  });
1221
1630
  }
1222
1631
  return seriesNames.map(function (axisValues, i) {
1223
- var aliasedAxis = aliasSeries(axisValues, i, pivotConfig, duplicateMeasures);
1632
+ var aliasedAxis = aliasSeries(axisValues, i, normalizedPivotConfig, duplicateMeasures);
1224
1633
  return {
1225
- title: _this4.axisValuesString(pivotConfig.y.find(function (d) {
1634
+ title: _this4.axisValuesString(normalizedPivotConfig.y.find(function (d) {
1226
1635
  return d === 'measures';
1227
1636
  }) ? ramda.dropLast(1, aliasedAxis).concat(measures[ResultSet.measureFromAxis(axisValues)].title) : aliasedAxis, ', '),
1228
- shortTitle: _this4.axisValuesString(pivotConfig.y.find(function (d) {
1637
+ shortTitle: _this4.axisValuesString(normalizedPivotConfig.y.find(function (d) {
1229
1638
  return d === 'measures';
1230
1639
  }) ? ramda.dropLast(1, aliasedAxis).concat(measures[ResultSet.measureFromAxis(axisValues)].shortTitle) : aliasedAxis, ', '),
1231
1640
  key: _this4.axisValuesString(aliasedAxis, ','),
@@ -1246,6 +1655,10 @@ var ResultSet = /*#__PURE__*/function () {
1246
1655
  value: function pivotQuery() {
1247
1656
  return this.loadResponse.pivotQuery || null;
1248
1657
  }
1658
+
1659
+ /**
1660
+ * @return the total number of rows if the `total` option was set, when sending the query
1661
+ */
1249
1662
  }, {
1250
1663
  key: "totalRows",
1251
1664
  value: function totalRows() {
@@ -1282,11 +1695,10 @@ var ResultSet = /*#__PURE__*/function () {
1282
1695
  });
1283
1696
  this.backwardCompatibleData[resultIndex] = data.map(function (row) {
1284
1697
  return _objectSpread$2(_objectSpread$2({}, row), ramda.fromPairs(Object.keys(row).filter(function (field) {
1285
- return timeDimensions.find(function (d) {
1698
+ var foundTd = timeDimensions.find(function (d) {
1286
1699
  return d.dimension === field;
1287
- }) && !row[ResultSet.timeDimensionMember(timeDimensions.find(function (d) {
1288
- return d.dimension === field;
1289
- }))];
1700
+ });
1701
+ return foundTd && !row[ResultSet.timeDimensionMember(foundTd)];
1290
1702
  }).map(function (field) {
1291
1703
  return [ResultSet.timeDimensionMember(timeDimensions.find(function (d) {
1292
1704
  return d.dimension === field;
@@ -1296,6 +1708,15 @@ var ResultSet = /*#__PURE__*/function () {
1296
1708
  }
1297
1709
  return this.backwardCompatibleData[resultIndex];
1298
1710
  }
1711
+
1712
+ /**
1713
+ * Can be used when you need access to the methods that can't be used with some query types (eg `compareDateRangeQuery` or `blendingQuery`)
1714
+ * ```js
1715
+ * resultSet.decompose().forEach((currentResultSet) => {
1716
+ * console.log(currentResultSet.rawData());
1717
+ * });
1718
+ * ```
1719
+ */
1299
1720
  }, {
1300
1721
  key: "decompose",
1301
1722
  value: function decompose() {
@@ -1310,6 +1731,10 @@ var ResultSet = /*#__PURE__*/function () {
1310
1731
  }, _this5.options);
1311
1732
  });
1312
1733
  }
1734
+
1735
+ /**
1736
+ * Can be used to stash the `ResultSet` in a storage and restored later with [deserialize](#result-set-deserialize)
1737
+ */
1313
1738
  }, {
1314
1739
  key: "serialize",
1315
1740
  value: function serialize() {
@@ -1327,28 +1752,41 @@ var ResultSet = /*#__PURE__*/function () {
1327
1752
  value: function timeDimensionMember(td) {
1328
1753
  return "".concat(td.dimension, ".").concat(td.granularity);
1329
1754
  }
1755
+
1756
+ /**
1757
+ * ```js
1758
+ * import { ResultSet } from '@cubejs-client/core';
1759
+ *
1760
+ * const resultSet = await cubeApi.load(query);
1761
+ * // You can store the result somewhere
1762
+ * const tmp = resultSet.serialize();
1763
+ *
1764
+ * // and restore it later
1765
+ * const resultSet = ResultSet.deserialize(tmp);
1766
+ * ```
1767
+ * @param data the result of [serialize](#result-set-serialize)
1768
+ * @param options
1769
+ */
1330
1770
  }, {
1331
1771
  key: "deserialize",
1332
- value: function deserialize(data) {
1333
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1772
+ value: function deserialize(data, options) {
1334
1773
  return new ResultSet(data.loadResponse, options);
1335
1774
  }
1336
1775
  }, {
1337
1776
  key: "getNormalizedPivotConfig",
1338
- value: function getNormalizedPivotConfig() {
1339
- var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1340
- var pivotConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1777
+ value: function getNormalizedPivotConfig(query, pivotConfig) {
1341
1778
  var defaultPivotConfig = {
1342
1779
  x: [],
1343
1780
  y: [],
1344
1781
  fillMissingDates: true,
1345
1782
  joinDateRange: false
1346
1783
  };
1347
- var _query$measures = query.measures,
1348
- measures = _query$measures === void 0 ? [] : _query$measures,
1349
- _query$dimensions = query.dimensions,
1350
- dimensions = _query$dimensions === void 0 ? [] : _query$dimensions;
1351
- var timeDimensions = (query.timeDimensions || []).filter(function (td) {
1784
+ var _ref31 = query || {},
1785
+ _ref31$measures = _ref31.measures,
1786
+ measures = _ref31$measures === void 0 ? [] : _ref31$measures,
1787
+ _ref31$dimensions = _ref31.dimensions,
1788
+ dimensions = _ref31$dimensions === void 0 ? [] : _ref31$dimensions;
1789
+ var timeDimensions = ((query === null || query === void 0 ? void 0 : query.timeDimensions) || []).filter(function (td) {
1352
1790
  return !!td.granularity;
1353
1791
  });
1354
1792
  pivotConfig = pivotConfig || (timeDimensions.length ? {
@@ -1360,48 +1798,48 @@ var ResultSet = /*#__PURE__*/function () {
1360
1798
  x: dimensions,
1361
1799
  y: []
1362
1800
  });
1363
- pivotConfig = ramda.mergeDeepLeft(pivotConfig, defaultPivotConfig);
1801
+ var normalizedPivotConfig = ramda.mergeDeepLeft(pivotConfig, defaultPivotConfig);
1364
1802
  var substituteTimeDimensionMembers = function substituteTimeDimensionMembers(axis) {
1365
1803
  return axis.map(function (subDim) {
1366
1804
  return timeDimensions.find(function (td) {
1367
1805
  return td.dimension === subDim;
1368
1806
  }) && !dimensions.find(function (d) {
1369
1807
  return d === subDim;
1370
- }) ? ResultSet.timeDimensionMember(query.timeDimensions.find(function (td) {
1808
+ }) ? ResultSet.timeDimensionMember(((query === null || query === void 0 ? void 0 : query.timeDimensions) || []).find(function (td) {
1371
1809
  return td.dimension === subDim;
1372
1810
  })) : subDim;
1373
1811
  });
1374
1812
  };
1375
- pivotConfig.x = substituteTimeDimensionMembers(pivotConfig.x);
1376
- pivotConfig.y = substituteTimeDimensionMembers(pivotConfig.y);
1377
- var allIncludedDimensions = pivotConfig.x.concat(pivotConfig.y);
1813
+ normalizedPivotConfig.x = substituteTimeDimensionMembers(normalizedPivotConfig.x);
1814
+ normalizedPivotConfig.y = substituteTimeDimensionMembers(normalizedPivotConfig.y);
1815
+ var allIncludedDimensions = normalizedPivotConfig.x.concat(normalizedPivotConfig.y);
1378
1816
  var allDimensions = timeDimensions.map(function (td) {
1379
1817
  return ResultSet.timeDimensionMember(td);
1380
1818
  }).concat(dimensions);
1381
1819
  var dimensionFilter = function dimensionFilter(key) {
1382
1820
  return allDimensions.includes(key) || key === 'measures';
1383
1821
  };
1384
- pivotConfig.x = pivotConfig.x.concat(allDimensions.filter(function (d) {
1822
+ normalizedPivotConfig.x = normalizedPivotConfig.x.concat(allDimensions.filter(function (d) {
1385
1823
  return !allIncludedDimensions.includes(d) && d !== 'compareDateRange';
1386
1824
  })).filter(dimensionFilter);
1387
- pivotConfig.y = pivotConfig.y.filter(dimensionFilter);
1388
- if (!pivotConfig.x.concat(pivotConfig.y).find(function (d) {
1825
+ normalizedPivotConfig.y = normalizedPivotConfig.y.filter(dimensionFilter);
1826
+ if (!normalizedPivotConfig.x.concat(normalizedPivotConfig.y).find(function (d) {
1389
1827
  return d === 'measures';
1390
1828
  })) {
1391
- pivotConfig.y.push('measures');
1829
+ normalizedPivotConfig.y.push('measures');
1392
1830
  }
1393
- if (dimensions.includes('compareDateRange') && !pivotConfig.y.concat(pivotConfig.x).includes('compareDateRange')) {
1394
- pivotConfig.y.unshift('compareDateRange');
1831
+ if (dimensions.includes('compareDateRange') && !normalizedPivotConfig.y.concat(normalizedPivotConfig.x).includes('compareDateRange')) {
1832
+ normalizedPivotConfig.y.unshift('compareDateRange');
1395
1833
  }
1396
1834
  if (!measures.length) {
1397
- pivotConfig.x = pivotConfig.x.filter(function (d) {
1835
+ normalizedPivotConfig.x = normalizedPivotConfig.x.filter(function (d) {
1398
1836
  return d !== 'measures';
1399
1837
  });
1400
- pivotConfig.y = pivotConfig.y.filter(function (d) {
1838
+ normalizedPivotConfig.y = normalizedPivotConfig.y.filter(function (d) {
1401
1839
  return d !== 'measures';
1402
1840
  });
1403
1841
  }
1404
- return pivotConfig;
1842
+ return normalizedPivotConfig;
1405
1843
  }
1406
1844
  }]);
1407
1845
  }();
@@ -1409,12 +1847,13 @@ var ResultSet = /*#__PURE__*/function () {
1409
1847
  var SqlQuery = /*#__PURE__*/function () {
1410
1848
  function SqlQuery(sqlQuery) {
1411
1849
  _classCallCheck__default['default'](this, SqlQuery);
1850
+ _defineProperty__default['default'](this, "sqlQuery", void 0);
1412
1851
  this.sqlQuery = sqlQuery;
1413
1852
  }
1414
1853
  return _createClass__default['default'](SqlQuery, [{
1415
1854
  key: "rawQuery",
1416
1855
  value: function rawQuery() {
1417
- return this.sqlQuery.sql;
1856
+ return this.sqlQuery;
1418
1857
  }
1419
1858
  }, {
1420
1859
  key: "sql",
@@ -1519,6 +1958,18 @@ var operators = {
1519
1958
  var Meta = /*#__PURE__*/function () {
1520
1959
  function Meta(metaResponse) {
1521
1960
  _classCallCheck__default['default'](this, Meta);
1961
+ /**
1962
+ * Raw meta response
1963
+ */
1964
+ _defineProperty__default['default'](this, "meta", void 0);
1965
+ /**
1966
+ * An array of all available cubes with their members
1967
+ */
1968
+ _defineProperty__default['default'](this, "cubes", void 0);
1969
+ /**
1970
+ * A map of all cubes where the key is a cube name
1971
+ */
1972
+ _defineProperty__default['default'](this, "cubesMap", void 0);
1522
1973
  this.meta = metaResponse;
1523
1974
  var cubes = this.meta.cubes;
1524
1975
  this.cubes = cubes;
@@ -1530,9 +1981,16 @@ var Meta = /*#__PURE__*/function () {
1530
1981
  }];
1531
1982
  }));
1532
1983
  }
1984
+
1985
+ /**
1986
+ * Get all members of a specific type for a given query.
1987
+ * If empty query is provided no filtering is done based on query context and all available members are retrieved.
1988
+ * @param _query - context query to provide filtering of members available to add to this query
1989
+ * @param memberType
1990
+ */
1533
1991
  return _createClass__default['default'](Meta, [{
1534
1992
  key: "membersForQuery",
1535
- value: function membersForQuery(query, memberType) {
1993
+ value: function membersForQuery(_query, memberType) {
1536
1994
  return ramda.unnest(this.cubes.map(function (c) {
1537
1995
  return c[memberType];
1538
1996
  })).sort(function (a, b) {
@@ -1545,19 +2003,35 @@ var Meta = /*#__PURE__*/function () {
1545
2003
  var memberKeys = ['measures', 'dimensions', 'segments', 'timeDimensions'];
1546
2004
  return this.cubes.reduce(function (memo, cube) {
1547
2005
  memberKeys.forEach(function (key) {
1548
- var members = cube[key];
1549
- if (key === 'timeDimensions') {
1550
- members = cube.dimensions.filter(function (m) {
1551
- return m.type === 'time';
1552
- });
2006
+ var members = [];
2007
+
2008
+ // eslint-disable-next-line default-case
2009
+ switch (key) {
2010
+ case 'measures':
2011
+ members = cube.measures || [];
2012
+ break;
2013
+ case 'dimensions':
2014
+ members = cube.dimensions || [];
2015
+ break;
2016
+ case 'segments':
2017
+ members = cube.segments || [];
2018
+ break;
2019
+ case 'timeDimensions':
2020
+ members = cube.dimensions.filter(function (m) {
2021
+ return m.type === 'time';
2022
+ }) || [];
2023
+ break;
1553
2024
  }
1554
- memo[key] = [].concat(_toConsumableArray__default['default'](memo[key]), [{
2025
+
2026
+ // TODO: Convince TS this is working
2027
+ // @ts-ignore
2028
+ memo[key].push({
1555
2029
  cubeName: cube.name,
1556
2030
  cubeTitle: cube.title,
1557
2031
  type: cube.type,
1558
2032
  "public": cube["public"],
1559
2033
  members: members
1560
- }]);
2034
+ });
1561
2035
  });
1562
2036
  return memo;
1563
2037
  }, {
@@ -1567,6 +2041,24 @@ var Meta = /*#__PURE__*/function () {
1567
2041
  timeDimensions: []
1568
2042
  });
1569
2043
  }
2044
+
2045
+ /**
2046
+ * Get meta information for a cube member
2047
+ * meta information contains:
2048
+ * ```javascript
2049
+ * {
2050
+ * name,
2051
+ * title,
2052
+ * shortTitle,
2053
+ * type,
2054
+ * description,
2055
+ * format
2056
+ * }
2057
+ * ```
2058
+ * @param memberName - Fully qualified member name in a form `Cube.memberName`
2059
+ * @param memberType
2060
+ * @return An object containing meta information about member
2061
+ */
1570
2062
  }, {
1571
2063
  key: "resolveMember",
1572
2064
  value: function resolveMember(memberName, memberType) {
@@ -1612,6 +2104,9 @@ var Meta = /*#__PURE__*/function () {
1612
2104
  key: "filterOperatorsForMember",
1613
2105
  value: function filterOperatorsForMember(memberName, memberType) {
1614
2106
  var member = this.resolveMember(memberName, memberType);
2107
+ if ('error' in member || !('type' in member) || member.type === 'boolean') {
2108
+ return operators.string;
2109
+ }
1615
2110
  return operators[member.type] || operators.string;
1616
2111
  }
1617
2112
  }]);
@@ -1620,6 +2115,7 @@ var Meta = /*#__PURE__*/function () {
1620
2115
  var ProgressResult = /*#__PURE__*/function () {
1621
2116
  function ProgressResult(progressResponse) {
1622
2117
  _classCallCheck__default['default'](this, ProgressResult);
2118
+ _defineProperty__default['default'](this, "progressResponse", void 0);
1623
2119
  this.progressResponse = progressResponse;
1624
2120
  }
1625
2121
  return _createClass__default['default'](ProgressResult, [{
@@ -1635,9 +2131,12 @@ var ProgressResult = /*#__PURE__*/function () {
1635
2131
  }]);
1636
2132
  }();
1637
2133
 
1638
- var _excluded = ["baseRequestId"];
2134
+ var _excluded = ["baseRequestId", "signal"];
1639
2135
  function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1640
2136
  function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty__default['default'](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2137
+ /**
2138
+ * Default transport implementation.
2139
+ */
1641
2140
  var HttpTransport = /*#__PURE__*/function () {
1642
2141
  function HttpTransport(_ref) {
1643
2142
  var authorization = _ref.authorization,
@@ -1646,20 +2145,30 @@ var HttpTransport = /*#__PURE__*/function () {
1646
2145
  _ref$headers = _ref.headers,
1647
2146
  headers = _ref$headers === void 0 ? {} : _ref$headers,
1648
2147
  credentials = _ref.credentials,
1649
- fetchTimeout = _ref.fetchTimeout;
2148
+ fetchTimeout = _ref.fetchTimeout,
2149
+ signal = _ref.signal;
1650
2150
  _classCallCheck__default['default'](this, HttpTransport);
2151
+ _defineProperty__default['default'](this, "authorization", void 0);
2152
+ _defineProperty__default['default'](this, "apiUrl", void 0);
2153
+ _defineProperty__default['default'](this, "method", void 0);
2154
+ _defineProperty__default['default'](this, "headers", void 0);
2155
+ _defineProperty__default['default'](this, "credentials", void 0);
2156
+ _defineProperty__default['default'](this, "fetchTimeout", void 0);
2157
+ _defineProperty__default['default'](this, "signal", void 0);
1651
2158
  this.authorization = authorization;
1652
2159
  this.apiUrl = apiUrl;
1653
2160
  this.method = method;
1654
2161
  this.headers = headers;
1655
2162
  this.credentials = credentials;
1656
2163
  this.fetchTimeout = fetchTimeout;
2164
+ this.signal = signal;
1657
2165
  }
1658
2166
  return _createClass__default['default'](HttpTransport, [{
1659
2167
  key: "request",
1660
2168
  value: function request(method, _ref2) {
1661
2169
  var _this = this;
1662
2170
  var baseRequestId = _ref2.baseRequestId,
2171
+ signal = _ref2.signal,
1663
2172
  params = _objectWithoutProperties__default['default'](_ref2, _excluded);
1664
2173
  var spanCounter = 1;
1665
2174
  var searchParams = new URLSearchParams(params && Object.keys(params).map(function (k) {
@@ -1685,35 +2194,39 @@ var HttpTransport = /*#__PURE__*/function () {
1685
2194
  }, _this.headers),
1686
2195
  credentials: _this.credentials,
1687
2196
  body: requestMethod === 'POST' ? JSON.stringify(params) : null,
1688
- signal: _this.fetchTimeout ? AbortSignal.timeout(_this.fetchTimeout) : undefined
2197
+ signal: signal || _this.signal || (_this.fetchTimeout ? AbortSignal.timeout(_this.fetchTimeout) : undefined)
1689
2198
  });
1690
2199
  };
1691
2200
  return {
1692
2201
  /* eslint no-unsafe-finally: off */subscribe: function subscribe(callback) {
1693
2202
  var _this2 = this;
1694
2203
  return _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee() {
1695
- var result;
2204
+ var result, _result;
1696
2205
  return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
1697
2206
  while (1) switch (_context.prev = _context.next) {
1698
2207
  case 0:
1699
- result = {
1700
- error: 'network Error' // add default error message
1701
- };
1702
- _context.prev = 1;
1703
- _context.next = 4;
2208
+ _context.prev = 0;
2209
+ _context.next = 3;
1704
2210
  return runRequest();
1705
- case 4:
2211
+ case 3:
1706
2212
  result = _context.sent;
1707
- case 5:
1708
- _context.prev = 5;
1709
2213
  return _context.abrupt("return", callback(result, function () {
1710
2214
  return _this2.subscribe(callback);
1711
2215
  }));
1712
- case 8:
2216
+ case 7:
2217
+ _context.prev = 7;
2218
+ _context.t0 = _context["catch"](0);
2219
+ _result = {
2220
+ error: 'network Error'
2221
+ };
2222
+ return _context.abrupt("return", callback(_result, function () {
2223
+ return _this2.subscribe(callback);
2224
+ }));
2225
+ case 11:
1713
2226
  case "end":
1714
2227
  return _context.stop();
1715
2228
  }
1716
- }, _callee, null, [[1,, 5, 8]]);
2229
+ }, _callee, null, [[0, 7]]);
1717
2230
  }))();
1718
2231
  }
1719
2232
  };
@@ -1728,6 +2241,8 @@ var RequestError = /*#__PURE__*/function (_Error) {
1728
2241
  var _this;
1729
2242
  _classCallCheck__default['default'](this, RequestError);
1730
2243
  _this = _callSuper(this, RequestError, [message]);
2244
+ _defineProperty__default['default'](_this, "response", void 0);
2245
+ _defineProperty__default['default'](_this, "status", void 0);
1731
2246
  _this.response = response;
1732
2247
  _this.status = status;
1733
2248
  return _this;
@@ -1738,57 +2253,67 @@ var RequestError = /*#__PURE__*/function (_Error) {
1738
2253
 
1739
2254
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1740
2255
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default['default'](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1741
- var mutexCounter = 0;
1742
- var MUTEX_ERROR = 'Mutex has been changed';
2256
+
2257
+ // If we can't infer any members at all, then return any.
1743
2258
 
1744
2259
  /**
1745
- * Query result dataset formats enum.
2260
+ * @deprecated use DryRunResponse
1746
2261
  */
1747
- var ResultType = {
1748
- DEFAULT: 'default',
1749
- COMPACT: 'compact'
1750
- };
2262
+
2263
+ var mutexCounter = 0;
2264
+ var MUTEX_ERROR = 'Mutex has been changed';
1751
2265
  function mutexPromise(promise) {
1752
- return new Promise(/*#__PURE__*/function () {
1753
- var _ref = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee(resolve, reject) {
1754
- return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
1755
- while (1) switch (_context.prev = _context.next) {
1756
- case 0:
1757
- _context.prev = 0;
1758
- _context.t0 = resolve;
1759
- _context.next = 4;
1760
- return promise;
1761
- case 4:
1762
- _context.t1 = _context.sent;
1763
- (0, _context.t0)(_context.t1);
1764
- _context.next = 11;
1765
- break;
1766
- case 8:
1767
- _context.prev = 8;
1768
- _context.t2 = _context["catch"](0);
1769
- if (_context.t2 !== MUTEX_ERROR) {
1770
- reject(_context.t2);
1771
- }
1772
- case 11:
1773
- case "end":
1774
- return _context.stop();
1775
- }
1776
- }, _callee, null, [[0, 8]]);
1777
- }));
1778
- return function (_x, _x2) {
1779
- return _ref.apply(this, arguments);
1780
- };
1781
- }());
2266
+ return promise.then(function (result) {
2267
+ return result;
2268
+ })["catch"](function (error) {
2269
+ if (error !== MUTEX_ERROR) {
2270
+ throw error;
2271
+ }
2272
+ });
1782
2273
  }
2274
+ /**
2275
+ * Main class for accessing Cube API
2276
+ */
1783
2277
  var CubeApi = /*#__PURE__*/function () {
2278
+ /**
2279
+ * Creates an instance of the `CubeApi`. The API entry point.
2280
+ *
2281
+ * ```js
2282
+ * import cube from '@cubejs-client/core';
2283
+ * const cubeApi = cube(
2284
+ * 'CUBE-API-TOKEN',
2285
+ * { apiUrl: 'http://localhost:4000/cubejs-api/v1' }
2286
+ * );
2287
+ * ```
2288
+ *
2289
+ * You can also pass an async function or a promise that will resolve to the API token
2290
+ *
2291
+ * ```js
2292
+ * import cube from '@cubejs-client/core';
2293
+ * const cubeApi = cube(
2294
+ * async () => await Auth.getJwtToken(),
2295
+ * { apiUrl: 'http://localhost:4000/cubejs-api/v1' }
2296
+ * );
2297
+ * ```
2298
+ */
1784
2299
  function CubeApi(apiToken, options) {
1785
2300
  _classCallCheck__default['default'](this, CubeApi);
1786
- if (apiToken !== null && !Array.isArray(apiToken) && _typeof__default['default'](apiToken) === 'object') {
2301
+ _defineProperty__default['default'](this, "apiToken", void 0);
2302
+ _defineProperty__default['default'](this, "apiUrl", void 0);
2303
+ _defineProperty__default['default'](this, "method", void 0);
2304
+ _defineProperty__default['default'](this, "headers", void 0);
2305
+ _defineProperty__default['default'](this, "credentials", void 0);
2306
+ _defineProperty__default['default'](this, "transport", void 0);
2307
+ _defineProperty__default['default'](this, "pollInterval", void 0);
2308
+ _defineProperty__default['default'](this, "parseDateMeasures", void 0);
2309
+ _defineProperty__default['default'](this, "castNumerics", void 0);
2310
+ _defineProperty__default['default'](this, "networkErrorRetries", void 0);
2311
+ _defineProperty__default['default'](this, "updateAuthorizationPromise", void 0);
2312
+ if (apiToken && !Array.isArray(apiToken) && _typeof__default['default'](apiToken) === 'object') {
1787
2313
  options = apiToken;
1788
2314
  apiToken = undefined;
1789
2315
  }
1790
- options = options || {};
1791
- if (!options.transport && !options.apiUrl) {
2316
+ if (!options || !options.transport && !options.apiUrl) {
1792
2317
  throw new Error('The `apiUrl` option is required');
1793
2318
  }
1794
2319
  this.apiToken = apiToken;
@@ -1797,11 +2322,13 @@ var CubeApi = /*#__PURE__*/function () {
1797
2322
  this.headers = options.headers || {};
1798
2323
  this.credentials = options.credentials;
1799
2324
  this.transport = options.transport || new HttpTransport({
1800
- authorization: typeof apiToken === 'function' ? undefined : apiToken,
2325
+ authorization: typeof apiToken === 'string' ? apiToken : undefined,
1801
2326
  apiUrl: this.apiUrl,
1802
2327
  method: this.method,
1803
2328
  headers: this.headers,
1804
- credentials: this.credentials
2329
+ credentials: this.credentials,
2330
+ fetchTimeout: options.fetchTimeout,
2331
+ signal: options.signal
1805
2332
  });
1806
2333
  this.pollInterval = options.pollInterval || 5;
1807
2334
  this.parseDateMeasures = options.parseDateMeasures;
@@ -1836,218 +2363,225 @@ var CubeApi = /*#__PURE__*/function () {
1836
2363
  var skipAuthorizationUpdate = true;
1837
2364
  var unsubscribed = false;
1838
2365
  var checkMutex = /*#__PURE__*/function () {
1839
- var _ref2 = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2() {
2366
+ var _ref = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee() {
1840
2367
  var requestInstance;
1841
- return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) {
1842
- while (1) switch (_context2.prev = _context2.next) {
2368
+ return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) {
2369
+ while (1) switch (_context.prev = _context.next) {
1843
2370
  case 0:
1844
- _context2.next = 2;
2371
+ _context.next = 2;
1845
2372
  return requestPromise;
1846
2373
  case 2:
1847
- requestInstance = _context2.sent;
1848
- if (!(options.mutexObj && options.mutexObj[mutexKey] !== mutexValue)) {
1849
- _context2.next = 9;
2374
+ requestInstance = _context.sent;
2375
+ if (!(options && options.mutexObj && options.mutexObj[mutexKey] !== mutexValue)) {
2376
+ _context.next = 9;
1850
2377
  break;
1851
2378
  }
1852
2379
  unsubscribed = true;
1853
2380
  if (!requestInstance.unsubscribe) {
1854
- _context2.next = 8;
2381
+ _context.next = 8;
1855
2382
  break;
1856
2383
  }
1857
- _context2.next = 8;
2384
+ _context.next = 8;
1858
2385
  return requestInstance.unsubscribe();
1859
2386
  case 8:
1860
2387
  throw MUTEX_ERROR;
1861
2388
  case 9:
1862
2389
  case "end":
1863
- return _context2.stop();
2390
+ return _context.stop();
1864
2391
  }
1865
- }, _callee2);
2392
+ }, _callee);
1866
2393
  }));
1867
2394
  return function checkMutex() {
1868
- return _ref2.apply(this, arguments);
2395
+ return _ref.apply(this, arguments);
1869
2396
  };
1870
2397
  }();
1871
2398
  var networkRetries = this.networkErrorRetries;
1872
2399
  var loadImpl = /*#__PURE__*/function () {
1873
- var _ref3 = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee5(response, next) {
1874
- var requestInstance, subscribeNext, continueWait, body, text, error, result;
1875
- return _regeneratorRuntime__default['default'].wrap(function _callee5$(_context5) {
1876
- while (1) switch (_context5.prev = _context5.next) {
2400
+ var _ref2 = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee4(response, next) {
2401
+ var _options2, _response$error, _options5;
2402
+ var requestInstance, subscribeNext, continueWait, body, text, _options3, _options4, _error, result;
2403
+ return _regeneratorRuntime__default['default'].wrap(function _callee4$(_context4) {
2404
+ while (1) switch (_context4.prev = _context4.next) {
1877
2405
  case 0:
1878
- _context5.next = 2;
2406
+ _context4.next = 2;
1879
2407
  return requestPromise;
1880
2408
  case 2:
1881
- requestInstance = _context5.sent;
2409
+ requestInstance = _context4.sent;
1882
2410
  subscribeNext = /*#__PURE__*/function () {
1883
- var _ref4 = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee3() {
1884
- return _regeneratorRuntime__default['default'].wrap(function _callee3$(_context3) {
1885
- while (1) switch (_context3.prev = _context3.next) {
2411
+ var _ref3 = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2() {
2412
+ var _options;
2413
+ return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) {
2414
+ while (1) switch (_context2.prev = _context2.next) {
1886
2415
  case 0:
1887
- if (!(options.subscribe && !unsubscribed)) {
1888
- _context3.next = 8;
2416
+ if (!((_options = options) !== null && _options !== void 0 && _options.subscribe && !unsubscribed)) {
2417
+ _context2.next = 8;
1889
2418
  break;
1890
2419
  }
1891
2420
  if (!requestInstance.unsubscribe) {
1892
- _context3.next = 5;
2421
+ _context2.next = 5;
1893
2422
  break;
1894
2423
  }
1895
- return _context3.abrupt("return", next());
2424
+ return _context2.abrupt("return", next());
1896
2425
  case 5:
1897
- _context3.next = 7;
2426
+ _context2.next = 7;
1898
2427
  return new Promise(function (resolve) {
1899
2428
  return setTimeout(function () {
1900
2429
  return resolve();
1901
2430
  }, _this.pollInterval * 1000);
1902
2431
  });
1903
2432
  case 7:
1904
- return _context3.abrupt("return", next());
2433
+ return _context2.abrupt("return", next());
1905
2434
  case 8:
1906
- return _context3.abrupt("return", null);
2435
+ return _context2.abrupt("return", null);
1907
2436
  case 9:
1908
2437
  case "end":
1909
- return _context3.stop();
2438
+ return _context2.stop();
1910
2439
  }
1911
- }, _callee3);
2440
+ }, _callee2);
1912
2441
  }));
1913
2442
  return function subscribeNext() {
1914
- return _ref4.apply(this, arguments);
2443
+ return _ref3.apply(this, arguments);
1915
2444
  };
1916
2445
  }();
1917
2446
  continueWait = /*#__PURE__*/function () {
1918
- var _ref5 = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee4(wait) {
1919
- return _regeneratorRuntime__default['default'].wrap(function _callee4$(_context4) {
1920
- while (1) switch (_context4.prev = _context4.next) {
2447
+ var _ref4 = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee3() {
2448
+ var wait,
2449
+ _args3 = arguments;
2450
+ return _regeneratorRuntime__default['default'].wrap(function _callee3$(_context3) {
2451
+ while (1) switch (_context3.prev = _context3.next) {
1921
2452
  case 0:
2453
+ wait = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : false;
1922
2454
  if (unsubscribed) {
1923
- _context4.next = 5;
2455
+ _context3.next = 6;
1924
2456
  break;
1925
2457
  }
1926
2458
  if (!wait) {
1927
- _context4.next = 4;
2459
+ _context3.next = 5;
1928
2460
  break;
1929
2461
  }
1930
- _context4.next = 4;
2462
+ _context3.next = 5;
1931
2463
  return new Promise(function (resolve) {
1932
2464
  return setTimeout(function () {
1933
2465
  return resolve();
1934
2466
  }, _this.pollInterval * 1000);
1935
2467
  });
1936
- case 4:
1937
- return _context4.abrupt("return", next());
1938
2468
  case 5:
1939
- return _context4.abrupt("return", null);
2469
+ return _context3.abrupt("return", next());
1940
2470
  case 6:
2471
+ return _context3.abrupt("return", null);
2472
+ case 7:
1941
2473
  case "end":
1942
- return _context4.stop();
2474
+ return _context3.stop();
1943
2475
  }
1944
- }, _callee4);
2476
+ }, _callee3);
1945
2477
  }));
1946
- return function continueWait(_x5) {
1947
- return _ref5.apply(this, arguments);
2478
+ return function continueWait() {
2479
+ return _ref4.apply(this, arguments);
1948
2480
  };
1949
2481
  }();
1950
- if (!(options.subscribe && !skipAuthorizationUpdate)) {
1951
- _context5.next = 8;
2482
+ if (!((_options2 = options) !== null && _options2 !== void 0 && _options2.subscribe && !skipAuthorizationUpdate)) {
2483
+ _context4.next = 8;
1952
2484
  break;
1953
2485
  }
1954
- _context5.next = 8;
2486
+ _context4.next = 8;
1955
2487
  return _this.updateTransportAuthorization();
1956
2488
  case 8:
1957
2489
  skipAuthorizationUpdate = false;
1958
- if (!(response.status === 502 || response.error && response.error.toLowerCase() === 'network error' && --networkRetries >= 0)) {
1959
- _context5.next = 13;
2490
+ if (!('status' in response && response.status === 502 || 'error' in response && ((_response$error = response.error) === null || _response$error === void 0 ? void 0 : _response$error.toLowerCase()) === 'network error' && --networkRetries >= 0)) {
2491
+ _context4.next = 13;
1960
2492
  break;
1961
2493
  }
1962
- _context5.next = 12;
2494
+ _context4.next = 12;
1963
2495
  return checkMutex();
1964
2496
  case 12:
1965
- return _context5.abrupt("return", continueWait(true));
2497
+ return _context4.abrupt("return", continueWait(true));
1966
2498
  case 13:
2499
+ // From here we're sure that response is only fetch Response
2500
+ response = response;
1967
2501
  body = {};
1968
2502
  text = '';
1969
- _context5.prev = 15;
1970
- _context5.next = 18;
2503
+ _context4.prev = 16;
2504
+ _context4.next = 19;
1971
2505
  return response.text();
1972
- case 18:
1973
- text = _context5.sent;
2506
+ case 19:
2507
+ text = _context4.sent;
1974
2508
  body = JSON.parse(text);
1975
- _context5.next = 25;
2509
+ _context4.next = 26;
1976
2510
  break;
1977
- case 22:
1978
- _context5.prev = 22;
1979
- _context5.t0 = _context5["catch"](15);
2511
+ case 23:
2512
+ _context4.prev = 23;
2513
+ _context4.t0 = _context4["catch"](16);
1980
2514
  body.error = text;
1981
- case 25:
2515
+ case 26:
1982
2516
  if (!(body.error === 'Continue wait')) {
1983
- _context5.next = 30;
2517
+ _context4.next = 31;
1984
2518
  break;
1985
2519
  }
1986
- _context5.next = 28;
2520
+ _context4.next = 29;
1987
2521
  return checkMutex();
1988
- case 28:
1989
- if (options.progressCallback) {
2522
+ case 29:
2523
+ if ((_options3 = options) !== null && _options3 !== void 0 && _options3.progressCallback) {
1990
2524
  options.progressCallback(new ProgressResult(body));
1991
2525
  }
1992
- return _context5.abrupt("return", continueWait());
1993
- case 30:
2526
+ return _context4.abrupt("return", continueWait());
2527
+ case 31:
1994
2528
  if (!(response.status !== 200)) {
1995
- _context5.next = 43;
2529
+ _context4.next = 44;
1996
2530
  break;
1997
2531
  }
1998
- _context5.next = 33;
2532
+ _context4.next = 34;
1999
2533
  return checkMutex();
2000
- case 33:
2001
- if (!(!options.subscribe && requestInstance.unsubscribe)) {
2002
- _context5.next = 36;
2534
+ case 34:
2535
+ if (!(!((_options4 = options) !== null && _options4 !== void 0 && _options4.subscribe) && requestInstance.unsubscribe)) {
2536
+ _context4.next = 37;
2003
2537
  break;
2004
2538
  }
2005
- _context5.next = 36;
2539
+ _context4.next = 37;
2006
2540
  return requestInstance.unsubscribe();
2007
- case 36:
2008
- error = new RequestError(body.error, body, response.status); // TODO error class
2541
+ case 37:
2542
+ _error = new RequestError(body.error || '', body, response.status);
2009
2543
  if (!callback) {
2010
- _context5.next = 41;
2544
+ _context4.next = 42;
2011
2545
  break;
2012
2546
  }
2013
- callback(error);
2014
- _context5.next = 42;
2547
+ callback(_error);
2548
+ _context4.next = 43;
2015
2549
  break;
2016
- case 41:
2017
- throw error;
2018
2550
  case 42:
2019
- return _context5.abrupt("return", subscribeNext());
2551
+ throw _error;
2020
2552
  case 43:
2021
- _context5.next = 45;
2553
+ return _context4.abrupt("return", subscribeNext());
2554
+ case 44:
2555
+ _context4.next = 46;
2022
2556
  return checkMutex();
2023
- case 45:
2024
- if (!(!options.subscribe && requestInstance.unsubscribe)) {
2025
- _context5.next = 48;
2557
+ case 46:
2558
+ if (!(!((_options5 = options) !== null && _options5 !== void 0 && _options5.subscribe) && requestInstance.unsubscribe)) {
2559
+ _context4.next = 49;
2026
2560
  break;
2027
2561
  }
2028
- _context5.next = 48;
2562
+ _context4.next = 49;
2029
2563
  return requestInstance.unsubscribe();
2030
- case 48:
2564
+ case 49:
2031
2565
  result = toResult(body);
2032
2566
  if (!callback) {
2033
- _context5.next = 53;
2567
+ _context4.next = 54;
2034
2568
  break;
2035
2569
  }
2036
2570
  callback(null, result);
2037
- _context5.next = 54;
2571
+ _context4.next = 55;
2038
2572
  break;
2039
- case 53:
2040
- return _context5.abrupt("return", result);
2041
2573
  case 54:
2042
- return _context5.abrupt("return", subscribeNext());
2574
+ return _context4.abrupt("return", result);
2043
2575
  case 55:
2576
+ return _context4.abrupt("return", subscribeNext());
2577
+ case 56:
2044
2578
  case "end":
2045
- return _context5.stop();
2579
+ return _context4.stop();
2046
2580
  }
2047
- }, _callee5, null, [[15, 22]]);
2581
+ }, _callee4, null, [[16, 23]]);
2048
2582
  }));
2049
- return function loadImpl(_x3, _x4) {
2050
- return _ref3.apply(this, arguments);
2583
+ return function loadImpl(_x, _x2) {
2584
+ return _ref2.apply(this, arguments);
2051
2585
  };
2052
2586
  }();
2053
2587
  var promise = requestPromise.then(function (requestInstance) {
@@ -2056,28 +2590,28 @@ var CubeApi = /*#__PURE__*/function () {
2056
2590
  if (callback) {
2057
2591
  return {
2058
2592
  unsubscribe: function () {
2059
- var _unsubscribe = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee6() {
2593
+ var _unsubscribe = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee5() {
2060
2594
  var requestInstance;
2061
- return _regeneratorRuntime__default['default'].wrap(function _callee6$(_context6) {
2062
- while (1) switch (_context6.prev = _context6.next) {
2595
+ return _regeneratorRuntime__default['default'].wrap(function _callee5$(_context5) {
2596
+ while (1) switch (_context5.prev = _context5.next) {
2063
2597
  case 0:
2064
- _context6.next = 2;
2598
+ _context5.next = 2;
2065
2599
  return requestPromise;
2066
2600
  case 2:
2067
- requestInstance = _context6.sent;
2601
+ requestInstance = _context5.sent;
2068
2602
  unsubscribed = true;
2069
2603
  if (!requestInstance.unsubscribe) {
2070
- _context6.next = 6;
2604
+ _context5.next = 6;
2071
2605
  break;
2072
2606
  }
2073
- return _context6.abrupt("return", requestInstance.unsubscribe());
2607
+ return _context5.abrupt("return", requestInstance.unsubscribe());
2074
2608
  case 6:
2075
- return _context6.abrupt("return", null);
2609
+ return _context5.abrupt("return", null);
2076
2610
  case 7:
2077
2611
  case "end":
2078
- return _context6.stop();
2612
+ return _context5.stop();
2079
2613
  }
2080
- }, _callee6);
2614
+ }, _callee5);
2081
2615
  }));
2082
2616
  function unsubscribe() {
2083
2617
  return _unsubscribe.apply(this, arguments);
@@ -2092,66 +2626,57 @@ var CubeApi = /*#__PURE__*/function () {
2092
2626
  }, {
2093
2627
  key: "updateTransportAuthorization",
2094
2628
  value: function () {
2095
- var _updateTransportAuthorization = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee8() {
2629
+ var _updateTransportAuthorization = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee7() {
2096
2630
  var _this2 = this;
2097
- return _regeneratorRuntime__default['default'].wrap(function _callee8$(_context8) {
2098
- while (1) switch (_context8.prev = _context8.next) {
2631
+ var tokenFetcher, promise;
2632
+ return _regeneratorRuntime__default['default'].wrap(function _callee7$(_context7) {
2633
+ while (1) switch (_context7.prev = _context7.next) {
2099
2634
  case 0:
2100
2635
  if (!this.updateAuthorizationPromise) {
2101
- _context8.next = 4;
2636
+ _context7.next = 4;
2102
2637
  break;
2103
2638
  }
2104
- _context8.next = 3;
2639
+ _context7.next = 3;
2105
2640
  return this.updateAuthorizationPromise;
2106
2641
  case 3:
2107
- return _context8.abrupt("return");
2642
+ return _context7.abrupt("return");
2108
2643
  case 4:
2109
- if (!(typeof this.apiToken === 'function')) {
2110
- _context8.next = 8;
2644
+ tokenFetcher = this.apiToken;
2645
+ if (!(typeof tokenFetcher === 'function')) {
2646
+ _context7.next = 10;
2111
2647
  break;
2112
2648
  }
2113
- this.updateAuthorizationPromise = new Promise(/*#__PURE__*/function () {
2114
- var _ref6 = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee7(resolve, reject) {
2115
- var token;
2116
- return _regeneratorRuntime__default['default'].wrap(function _callee7$(_context7) {
2117
- while (1) switch (_context7.prev = _context7.next) {
2118
- case 0:
2119
- _context7.prev = 0;
2120
- _context7.next = 3;
2121
- return _this2.apiToken();
2122
- case 3:
2123
- token = _context7.sent;
2124
- if (_this2.transport.authorization !== token) {
2125
- _this2.transport.authorization = token;
2126
- }
2127
- resolve();
2128
- _context7.next = 11;
2129
- break;
2130
- case 8:
2131
- _context7.prev = 8;
2132
- _context7.t0 = _context7["catch"](0);
2133
- reject(_context7.t0);
2134
- case 11:
2135
- _context7.prev = 11;
2136
- _this2.updateAuthorizationPromise = null;
2137
- return _context7.finish(11);
2138
- case 14:
2139
- case "end":
2140
- return _context7.stop();
2141
- }
2142
- }, _callee7, null, [[0, 8, 11, 14]]);
2143
- }));
2144
- return function (_x6, _x7) {
2145
- return _ref6.apply(this, arguments);
2146
- };
2147
- }());
2148
- _context8.next = 8;
2149
- return this.updateAuthorizationPromise;
2150
- case 8:
2649
+ promise = _asyncToGenerator__default['default'](/*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee6() {
2650
+ var token;
2651
+ return _regeneratorRuntime__default['default'].wrap(function _callee6$(_context6) {
2652
+ while (1) switch (_context6.prev = _context6.next) {
2653
+ case 0:
2654
+ _context6.prev = 0;
2655
+ _context6.next = 3;
2656
+ return tokenFetcher();
2657
+ case 3:
2658
+ token = _context6.sent;
2659
+ if (_this2.transport.authorization !== token) {
2660
+ _this2.transport.authorization = token;
2661
+ }
2662
+ case 5:
2663
+ _context6.prev = 5;
2664
+ _this2.updateAuthorizationPromise = null;
2665
+ return _context6.finish(5);
2666
+ case 8:
2667
+ case "end":
2668
+ return _context6.stop();
2669
+ }
2670
+ }, _callee6, null, [[0,, 5, 8]]);
2671
+ }))();
2672
+ this.updateAuthorizationPromise = promise;
2673
+ _context7.next = 10;
2674
+ return promise;
2675
+ case 10:
2151
2676
  case "end":
2152
- return _context8.stop();
2677
+ return _context7.stop();
2153
2678
  }
2154
- }, _callee8, this);
2679
+ }, _callee7, this);
2155
2680
  }));
2156
2681
  function updateTransportAuthorization() {
2157
2682
  return _updateTransportAuthorization.apply(this, arguments);
@@ -2160,17 +2685,13 @@ var CubeApi = /*#__PURE__*/function () {
2160
2685
  }()
2161
2686
  /**
2162
2687
  * Add system properties to a query object.
2163
- * @param {Query} query
2164
- * @param {string} responseFormat
2165
- * @returns {void}
2166
- * @private
2167
2688
  */
2168
2689
  }, {
2169
2690
  key: "patchQueryInternal",
2170
2691
  value: function patchQueryInternal(query, responseFormat) {
2171
- if (responseFormat === ResultType.COMPACT && query.responseFormat !== ResultType.COMPACT) {
2692
+ if (responseFormat === 'compact' && query.responseFormat !== 'compact') {
2172
2693
  return _objectSpread(_objectSpread({}, query), {}, {
2173
- responseFormat: ResultType.COMPACT
2694
+ responseFormat: 'compact'
2174
2695
  });
2175
2696
  } else {
2176
2697
  return query;
@@ -2180,26 +2701,23 @@ var CubeApi = /*#__PURE__*/function () {
2180
2701
  /**
2181
2702
  * Process result fetched from the gateway#load method according
2182
2703
  * to the network protocol.
2183
- * @param {*} response
2184
- * @returns ResultSet
2185
- * @private
2186
2704
  */
2187
2705
  }, {
2188
2706
  key: "loadResponseInternal",
2189
2707
  value: function loadResponseInternal(response) {
2190
2708
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2191
2709
  if (response.results.length) {
2192
- if (options.castNumerics) {
2710
+ if (options !== null && options !== void 0 && options.castNumerics) {
2193
2711
  response.results.forEach(function (result) {
2194
- var numericMembers = Object.entries(_objectSpread(_objectSpread({}, result.annotation.measures), result.annotation.dimensions)).map(function (_ref7) {
2195
- var _ref8 = _slicedToArray__default['default'](_ref7, 2),
2196
- k = _ref8[0],
2197
- v = _ref8[1];
2712
+ var numericMembers = Object.entries(_objectSpread(_objectSpread({}, result.annotation.measures), result.annotation.dimensions)).reduce(function (acc, _ref6) {
2713
+ var _ref7 = _slicedToArray__default['default'](_ref6, 2),
2714
+ k = _ref7[0],
2715
+ v = _ref7[1];
2198
2716
  if (v.type === 'number') {
2199
- return k;
2717
+ acc.push(k);
2200
2718
  }
2201
- return undefined;
2202
- }).filter(Boolean);
2719
+ return acc;
2720
+ }, []);
2203
2721
  result.data = result.data.map(function (row) {
2204
2722
  numericMembers.forEach(function (key) {
2205
2723
  if (row[key] != null) {
@@ -2210,12 +2728,15 @@ var CubeApi = /*#__PURE__*/function () {
2210
2728
  });
2211
2729
  });
2212
2730
  }
2213
- if (response.results[0].query.responseFormat && response.results[0].query.responseFormat === ResultType.COMPACT) {
2731
+ if (response.results[0].query.responseFormat && response.results[0].query.responseFormat === 'compact') {
2214
2732
  response.results.forEach(function (result, j) {
2215
2733
  var data = [];
2216
- result.data.dataset.forEach(function (r) {
2734
+ var _ref8 = result.data,
2735
+ dataset = _ref8.dataset,
2736
+ members = _ref8.members;
2737
+ dataset.forEach(function (r) {
2217
2738
  var row = {};
2218
- result.data.members.forEach(function (m, i) {
2739
+ members.forEach(function (m, i) {
2219
2740
  row[m] = r[i];
2220
2741
  });
2221
2742
  data.push(row);
@@ -2230,65 +2751,136 @@ var CubeApi = /*#__PURE__*/function () {
2230
2751
  }
2231
2752
  }, {
2232
2753
  key: "load",
2233
- value: function load(query, options, callback) {
2754
+ value:
2755
+ /**
2756
+ * Fetch data for the passed `query`.
2757
+ *
2758
+ * ```js
2759
+ * import cube from '@cubejs-client/core';
2760
+ * import Chart from 'chart.js';
2761
+ * import chartjsConfig from './toChartjsData';
2762
+ *
2763
+ * const cubeApi = cube('CUBEJS_TOKEN');
2764
+ *
2765
+ * const resultSet = await cubeApi.load({
2766
+ * measures: ['Stories.count'],
2767
+ * timeDimensions: [{
2768
+ * dimension: 'Stories.time',
2769
+ * dateRange: ['2015-01-01', '2015-12-31'],
2770
+ * granularity: 'month'
2771
+ * }]
2772
+ * });
2773
+ *
2774
+ * const context = document.getElementById('myChart');
2775
+ * new Chart(context, chartjsConfig(resultSet));
2776
+ * ```
2777
+ * @param query - [Query object](/product/apis-integrations/rest-api/query-format)
2778
+ * @param options
2779
+ * @param callback
2780
+ * @param responseFormat
2781
+ */
2782
+ function load(query, options, callback) {
2234
2783
  var _this3 = this;
2235
- var responseFormat = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ResultType.DEFAULT;
2236
- options = _objectSpread({
2237
- castNumerics: this.castNumerics
2238
- }, options);
2239
- if (responseFormat === ResultType.COMPACT) {
2240
- if (Array.isArray(query)) {
2241
- query = query.map(function (q) {
2242
- return _this3.patchQueryInternal(q, ResultType.COMPACT);
2243
- });
2244
- } else {
2245
- query = this.patchQueryInternal(query, ResultType.COMPACT);
2246
- }
2247
- }
2784
+ var responseFormat = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'default';
2785
+ var _this$prepareQueryOpt = this.prepareQueryOptions(query, options, responseFormat);
2786
+ var _this$prepareQueryOpt2 = _slicedToArray__default['default'](_this$prepareQueryOpt, 2);
2787
+ query = _this$prepareQueryOpt2[0];
2788
+ options = _this$prepareQueryOpt2[1];
2248
2789
  return this.loadMethod(function () {
2790
+ var _options6;
2249
2791
  return _this3.request('load', {
2250
2792
  query: query,
2251
- queryType: 'multi'
2793
+ queryType: 'multi',
2794
+ signal: (_options6 = options) === null || _options6 === void 0 ? void 0 : _options6.signal
2252
2795
  });
2253
2796
  }, function (response) {
2254
2797
  return _this3.loadResponseInternal(response, options);
2255
2798
  }, options, callback);
2256
2799
  }
2257
2800
  }, {
2258
- key: "subscribe",
2259
- value: function subscribe(query, options, callback) {
2801
+ key: "prepareQueryOptions",
2802
+ value: function prepareQueryOptions(query, options) {
2260
2803
  var _this4 = this;
2261
- var responseFormat = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ResultType.DEFAULT;
2804
+ var responseFormat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'default';
2262
2805
  options = _objectSpread({
2263
2806
  castNumerics: this.castNumerics
2264
2807
  }, options);
2265
- if (responseFormat === ResultType.COMPACT) {
2808
+ if (responseFormat === 'compact') {
2266
2809
  if (Array.isArray(query)) {
2267
- query = query.map(function (q) {
2268
- return _this4.patchQueryInternal(q, ResultType.COMPACT);
2810
+ var patched = query.map(function (q) {
2811
+ return _this4.patchQueryInternal(q, 'compact');
2269
2812
  });
2813
+ return [patched, options];
2270
2814
  } else {
2271
- query = this.patchQueryInternal(query, ResultType.COMPACT);
2815
+ var _patched = this.patchQueryInternal(query, 'compact');
2816
+ return [_patched, options];
2272
2817
  }
2273
2818
  }
2819
+ return [query, options];
2820
+ }
2821
+
2822
+ /**
2823
+ * Allows you to fetch data and receive updates over time. See [Real-Time Data Fetch](/product/apis-integrations/rest-api/real-time-data-fetch)
2824
+ *
2825
+ * ```js
2826
+ * // Subscribe to a query's updates
2827
+ * const subscription = await cubeApi.subscribe(
2828
+ * {
2829
+ * measures: ['Logs.count'],
2830
+ * timeDimensions: [
2831
+ * {
2832
+ * dimension: 'Logs.time',
2833
+ * granularity: 'hour',
2834
+ * dateRange: 'last 1440 minutes',
2835
+ * },
2836
+ * ],
2837
+ * },
2838
+ * options,
2839
+ * (error, resultSet) => {
2840
+ * if (!error) {
2841
+ * // handle the update
2842
+ * }
2843
+ * }
2844
+ * );
2845
+ *
2846
+ * // Unsubscribe from a query's updates
2847
+ * subscription.unsubscribe();
2848
+ * ```
2849
+ */
2850
+ }, {
2851
+ key: "subscribe",
2852
+ value: function subscribe(query, options, callback) {
2853
+ var _this5 = this;
2854
+ var responseFormat = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'default';
2855
+ var _this$prepareQueryOpt3 = this.prepareQueryOptions(query, options, responseFormat);
2856
+ var _this$prepareQueryOpt4 = _slicedToArray__default['default'](_this$prepareQueryOpt3, 2);
2857
+ query = _this$prepareQueryOpt4[0];
2858
+ options = _this$prepareQueryOpt4[1];
2274
2859
  return this.loadMethod(function () {
2275
- return _this4.request('subscribe', {
2860
+ var _options7;
2861
+ return _this5.request('subscribe', {
2276
2862
  query: query,
2277
- queryType: 'multi'
2863
+ queryType: 'multi',
2864
+ signal: (_options7 = options) === null || _options7 === void 0 ? void 0 : _options7.signal
2278
2865
  });
2279
2866
  }, function (response) {
2280
- return _this4.loadResponseInternal(response, options);
2867
+ return _this5.loadResponseInternal(response, options);
2281
2868
  }, _objectSpread(_objectSpread({}, options), {}, {
2282
2869
  subscribe: true
2283
2870
  }), callback);
2284
2871
  }
2285
2872
  }, {
2286
2873
  key: "sql",
2287
- value: function sql(query, options, callback) {
2288
- var _this5 = this;
2874
+ value:
2875
+ /**
2876
+ * Get generated SQL string for the given `query`.
2877
+ */
2878
+ function sql(query, options, callback) {
2879
+ var _this6 = this;
2289
2880
  return this.loadMethod(function () {
2290
- return _this5.request('sql', {
2291
- query: query
2881
+ return _this6.request('sql', {
2882
+ query: query,
2883
+ signal: options === null || options === void 0 ? void 0 : options.signal
2292
2884
  });
2293
2885
  }, function (response) {
2294
2886
  return Array.isArray(response) ? response.map(function (body) {
@@ -2298,21 +2890,32 @@ var CubeApi = /*#__PURE__*/function () {
2298
2890
  }
2299
2891
  }, {
2300
2892
  key: "meta",
2301
- value: function meta(options, callback) {
2302
- var _this6 = this;
2893
+ value:
2894
+ /**
2895
+ * Get meta description of cubes available for querying.
2896
+ */
2897
+ function meta(options, callback) {
2898
+ var _this7 = this;
2303
2899
  return this.loadMethod(function () {
2304
- return _this6.request('meta');
2900
+ return _this7.request('meta', {
2901
+ signal: options === null || options === void 0 ? void 0 : options.signal
2902
+ });
2305
2903
  }, function (body) {
2306
2904
  return new Meta(body);
2307
2905
  }, options, callback);
2308
2906
  }
2309
2907
  }, {
2310
2908
  key: "dryRun",
2311
- value: function dryRun(query, options, callback) {
2312
- var _this7 = this;
2909
+ value:
2910
+ /**
2911
+ * Get query related meta without query execution
2912
+ */
2913
+ function dryRun(query, options, callback) {
2914
+ var _this8 = this;
2313
2915
  return this.loadMethod(function () {
2314
- return _this7.request('dry-run', {
2315
- query: query
2916
+ return _this8.request('dry-run', {
2917
+ query: query,
2918
+ signal: options === null || options === void 0 ? void 0 : options.signal
2316
2919
  });
2317
2920
  }, function (response) {
2318
2921
  return response;
@@ -2331,8 +2934,10 @@ exports.GRANULARITIES = GRANULARITIES;
2331
2934
  exports.HttpTransport = HttpTransport;
2332
2935
  exports.LocalDateRegex = LocalDateRegex;
2333
2936
  exports.Meta = Meta;
2937
+ exports.ProgressResult = ProgressResult;
2334
2938
  exports.RequestError = RequestError;
2335
2939
  exports.ResultSet = ResultSet;
2940
+ exports.SqlQuery = SqlQuery;
2336
2941
  exports.TIME_SERIES = TIME_SERIES;
2337
2942
  exports.addInterval = addInterval;
2338
2943
  exports.aliasSeries = aliasSeries;
@@ -2357,4 +2962,4 @@ exports.removeEmptyQueryFields = removeEmptyQueryFields;
2357
2962
  exports.subtractInterval = subtractInterval;
2358
2963
  exports.timeSeriesFromCustomInterval = timeSeriesFromCustomInterval;
2359
2964
  exports.validateQuery = validateQuery;
2360
- //# sourceMappingURL=cubejs-client-core.js.map
2965
+ //# sourceMappingURL=cubejs-client-core.cjs.js.map