@cubejs-client/core 0.36.2 → 0.36.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cubejs-client-core.esm.js +228 -43
- package/dist/cubejs-client-core.esm.js.map +1 -1
- package/dist/cubejs-client-core.js +296 -83
- package/dist/cubejs-client-core.js.map +1 -1
- package/dist/cubejs-client-core.umd.js +515 -203
- package/dist/cubejs-client-core.umd.js.map +1 -1
- package/index.d.ts +6 -0
- package/package.json +2 -2
- package/src/ResultSet.js +28 -52
- package/src/index.js +6 -5
- package/src/tests/ResultSet.test.js +301 -4
- package/src/tests/granularity.test.js +2 -0
- package/src/tests/utils.test.js +1 -1
- package/src/time.js +296 -0
- package/src/utils.js +5 -18
|
@@ -51,11 +51,16 @@ require('core-js/modules/es.set.js');
|
|
|
51
51
|
require('core-js/modules/es.array.index-of.js');
|
|
52
52
|
require('core-js/modules/es.string.trim.js');
|
|
53
53
|
var dayjs = require('dayjs');
|
|
54
|
-
var quarterOfYear = require('dayjs/plugin/quarterOfYear');
|
|
55
|
-
var en = require('dayjs/locale/en');
|
|
56
54
|
var ramda = require('ramda');
|
|
57
55
|
require('core-js/modules/es.array.every.js');
|
|
58
56
|
require('core-js/modules/es.array.splice.js');
|
|
57
|
+
require('core-js/modules/es.parse-int.js');
|
|
58
|
+
require('core-js/modules/es.string.ends-with.js');
|
|
59
|
+
require('core-js/modules/es.array.slice.js');
|
|
60
|
+
var quarterOfYear = require('dayjs/plugin/quarterOfYear');
|
|
61
|
+
var duration = require('dayjs/plugin/duration');
|
|
62
|
+
var isoWeek = require('dayjs/plugin/isoWeek');
|
|
63
|
+
var en = require('dayjs/locale/en');
|
|
59
64
|
require('core-js/modules/es.function.name.js');
|
|
60
65
|
require('core-js/modules/es.array.sort.js');
|
|
61
66
|
require('core-js/modules/web.url-search-params.js');
|
|
@@ -80,6 +85,8 @@ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_obje
|
|
|
80
85
|
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
|
|
81
86
|
var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
|
|
82
87
|
var quarterOfYear__default = /*#__PURE__*/_interopDefaultLegacy(quarterOfYear);
|
|
88
|
+
var duration__default = /*#__PURE__*/_interopDefaultLegacy(duration);
|
|
89
|
+
var isoWeek__default = /*#__PURE__*/_interopDefaultLegacy(isoWeek);
|
|
83
90
|
var en__default = /*#__PURE__*/_interopDefaultLegacy(en);
|
|
84
91
|
var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch);
|
|
85
92
|
var _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);
|
|
@@ -87,10 +94,11 @@ var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_po
|
|
|
87
94
|
var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);
|
|
88
95
|
var _wrapNativeSuper__default = /*#__PURE__*/_interopDefaultLegacy(_wrapNativeSuper);
|
|
89
96
|
|
|
90
|
-
|
|
91
|
-
function
|
|
92
|
-
|
|
93
|
-
|
|
97
|
+
function ownKeys$4(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; }
|
|
98
|
+
function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty__default['default'](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
99
|
+
dayjs__default['default'].extend(quarterOfYear__default['default']);
|
|
100
|
+
dayjs__default['default'].extend(duration__default['default']);
|
|
101
|
+
dayjs__default['default'].extend(isoWeek__default['default']);
|
|
94
102
|
var GRANULARITIES = [{
|
|
95
103
|
name: undefined,
|
|
96
104
|
title: 'w/o grouping'
|
|
@@ -119,6 +127,267 @@ var GRANULARITIES = [{
|
|
|
119
127
|
name: 'year',
|
|
120
128
|
title: 'Year'
|
|
121
129
|
}];
|
|
130
|
+
var DEFAULT_GRANULARITY = 'day';
|
|
131
|
+
|
|
132
|
+
// When granularity is week, weekStart Value must be 1. However, since the client can change it globally
|
|
133
|
+
// (https://day.js.org/docs/en/i18n/changing-locale) So the function below has been added.
|
|
134
|
+
var internalDayjs = function internalDayjs() {
|
|
135
|
+
return dayjs__default['default'].apply(void 0, arguments).locale(_objectSpread$4(_objectSpread$4({}, en__default['default']), {}, {
|
|
136
|
+
weekStart: 1
|
|
137
|
+
}));
|
|
138
|
+
};
|
|
139
|
+
var TIME_SERIES = {
|
|
140
|
+
day: function day(range) {
|
|
141
|
+
return range.by('d').map(function (d) {
|
|
142
|
+
return d.format('YYYY-MM-DDT00:00:00.000');
|
|
143
|
+
});
|
|
144
|
+
},
|
|
145
|
+
month: function month(range) {
|
|
146
|
+
return range.snapTo('month').by('M').map(function (d) {
|
|
147
|
+
return d.format('YYYY-MM-01T00:00:00.000');
|
|
148
|
+
});
|
|
149
|
+
},
|
|
150
|
+
year: function year(range) {
|
|
151
|
+
return range.snapTo('year').by('y').map(function (d) {
|
|
152
|
+
return d.format('YYYY-01-01T00:00:00.000');
|
|
153
|
+
});
|
|
154
|
+
},
|
|
155
|
+
hour: function hour(range) {
|
|
156
|
+
return range.by('h').map(function (d) {
|
|
157
|
+
return d.format('YYYY-MM-DDTHH:00:00.000');
|
|
158
|
+
});
|
|
159
|
+
},
|
|
160
|
+
minute: function minute(range) {
|
|
161
|
+
return range.by('m').map(function (d) {
|
|
162
|
+
return d.format('YYYY-MM-DDTHH:mm:00.000');
|
|
163
|
+
});
|
|
164
|
+
},
|
|
165
|
+
second: function second(range) {
|
|
166
|
+
return range.by('s').map(function (d) {
|
|
167
|
+
return d.format('YYYY-MM-DDTHH:mm:ss.000');
|
|
168
|
+
});
|
|
169
|
+
},
|
|
170
|
+
week: function week(range) {
|
|
171
|
+
return range.snapTo('week').by('w').map(function (d) {
|
|
172
|
+
return d.startOf('week').format('YYYY-MM-DDT00:00:00.000');
|
|
173
|
+
});
|
|
174
|
+
},
|
|
175
|
+
quarter: function quarter(range) {
|
|
176
|
+
return range.snapTo('quarter').by('quarter').map(function (d) {
|
|
177
|
+
return d.startOf('quarter').format('YYYY-MM-DDT00:00:00.000');
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
var isPredefinedGranularity = function isPredefinedGranularity(granularity) {
|
|
182
|
+
return !!TIME_SERIES[granularity];
|
|
183
|
+
};
|
|
184
|
+
var DateRegex = /^\d\d\d\d-\d\d-\d\d$/;
|
|
185
|
+
var LocalDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z?$/;
|
|
186
|
+
var dayRange = function dayRange(from, to) {
|
|
187
|
+
return {
|
|
188
|
+
by: function by(value) {
|
|
189
|
+
var results = [];
|
|
190
|
+
var start = internalDayjs(from);
|
|
191
|
+
var end = internalDayjs(to);
|
|
192
|
+
while (start.isBefore(end) || start.isSame(end)) {
|
|
193
|
+
results.push(start);
|
|
194
|
+
start = start.add(1, value);
|
|
195
|
+
}
|
|
196
|
+
return results;
|
|
197
|
+
},
|
|
198
|
+
snapTo: function snapTo(value) {
|
|
199
|
+
return dayRange(internalDayjs(from).startOf(value), internalDayjs(to).endOf(value));
|
|
200
|
+
},
|
|
201
|
+
start: internalDayjs(from),
|
|
202
|
+
end: internalDayjs(to)
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Parse PostgreSQL-like interval string into object
|
|
208
|
+
* E.g. '2 years 15 months 100 weeks 99 hours 15 seconds'
|
|
209
|
+
* Negative units are also supported
|
|
210
|
+
* E.g. '-2 months 5 days -10 hours'
|
|
211
|
+
*
|
|
212
|
+
* TODO: It's copy/paste of parseSqlInterval from @cubejs-backend/shared [time.ts]
|
|
213
|
+
* It's not referenced to omit imports of moment.js staff.
|
|
214
|
+
* Probably one day we should choose one implementation and reuse it in other places.
|
|
215
|
+
*/
|
|
216
|
+
function parseSqlInterval(intervalStr) {
|
|
217
|
+
var interval = {};
|
|
218
|
+
var parts = intervalStr.split(/\s+/);
|
|
219
|
+
for (var i = 0; i < parts.length; i += 2) {
|
|
220
|
+
var value = parseInt(parts[i], 10);
|
|
221
|
+
var unit = parts[i + 1];
|
|
222
|
+
|
|
223
|
+
// Remove ending 's' (e.g., 'days' -> 'day')
|
|
224
|
+
var singularUnit = unit.endsWith('s') ? unit.slice(0, -1) : unit;
|
|
225
|
+
interval[singularUnit] = value;
|
|
226
|
+
}
|
|
227
|
+
return interval;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Adds interval to provided date.
|
|
232
|
+
* TODO: It's copy/paste of addInterval from @cubejs-backend/shared [time.ts]
|
|
233
|
+
* but operates with dayjs instead of moment.js
|
|
234
|
+
* @param {dayjs} date
|
|
235
|
+
* @param interval
|
|
236
|
+
* @returns {dayjs}
|
|
237
|
+
*/
|
|
238
|
+
function addInterval(date, interval) {
|
|
239
|
+
var res = date.clone();
|
|
240
|
+
Object.entries(interval).forEach(function (_ref) {
|
|
241
|
+
var _ref2 = _slicedToArray__default['default'](_ref, 2),
|
|
242
|
+
key = _ref2[0],
|
|
243
|
+
value = _ref2[1];
|
|
244
|
+
res = res.add(value, key);
|
|
245
|
+
});
|
|
246
|
+
return res;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Adds interval to provided date.
|
|
251
|
+
* TODO: It's copy/paste of subtractInterval from @cubejs-backend/shared [time.ts]
|
|
252
|
+
* but operates with dayjs instead of moment.js
|
|
253
|
+
* @param {dayjs} date
|
|
254
|
+
* @param interval
|
|
255
|
+
* @returns {dayjs}
|
|
256
|
+
*/
|
|
257
|
+
function subtractInterval(date, interval) {
|
|
258
|
+
var res = date.clone();
|
|
259
|
+
Object.entries(interval).forEach(function (_ref3) {
|
|
260
|
+
var _ref4 = _slicedToArray__default['default'](_ref3, 2),
|
|
261
|
+
key = _ref4[0],
|
|
262
|
+
value = _ref4[1];
|
|
263
|
+
res = res.subtract(value, key);
|
|
264
|
+
});
|
|
265
|
+
return res;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Returns the closest date prior to date parameter aligned with the origin point
|
|
270
|
+
* TODO: It's copy/paste of alignToOrigin from @cubejs-backend/shared [time.ts]
|
|
271
|
+
* but operates with dayjs instead of moment.js
|
|
272
|
+
*/
|
|
273
|
+
function alignToOrigin(startDate, interval, origin) {
|
|
274
|
+
var alignedDate = startDate.clone();
|
|
275
|
+
var intervalOp;
|
|
276
|
+
var isIntervalNegative = false;
|
|
277
|
+
var offsetDate = addInterval(origin, interval);
|
|
278
|
+
|
|
279
|
+
// The easiest way to check the interval sign
|
|
280
|
+
if (offsetDate.isBefore(origin)) {
|
|
281
|
+
isIntervalNegative = true;
|
|
282
|
+
}
|
|
283
|
+
offsetDate = origin.clone();
|
|
284
|
+
if (startDate.isBefore(origin)) {
|
|
285
|
+
intervalOp = isIntervalNegative ? addInterval : subtractInterval;
|
|
286
|
+
while (offsetDate.isAfter(startDate)) {
|
|
287
|
+
offsetDate = intervalOp(offsetDate, interval);
|
|
288
|
+
}
|
|
289
|
+
alignedDate = offsetDate;
|
|
290
|
+
} else {
|
|
291
|
+
intervalOp = isIntervalNegative ? subtractInterval : addInterval;
|
|
292
|
+
while (offsetDate.isBefore(startDate)) {
|
|
293
|
+
alignedDate = offsetDate.clone();
|
|
294
|
+
offsetDate = intervalOp(offsetDate, interval);
|
|
295
|
+
}
|
|
296
|
+
if (offsetDate.isSame(startDate)) {
|
|
297
|
+
alignedDate = offsetDate;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return alignedDate;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Returns the time series points for the custom interval
|
|
305
|
+
* TODO: It's almost a copy/paste of timeSeriesFromCustomInterval from
|
|
306
|
+
* @cubejs-backend/shared [time.ts] but operates with dayjs instead of moment.js
|
|
307
|
+
*/
|
|
308
|
+
var timeSeriesFromCustomInterval = function timeSeriesFromCustomInterval(from, to, granularity) {
|
|
309
|
+
var intervalParsed = parseSqlInterval(granularity.interval);
|
|
310
|
+
var start = internalDayjs(from);
|
|
311
|
+
var end = internalDayjs(to);
|
|
312
|
+
var origin = granularity.origin ? internalDayjs(granularity.origin) : internalDayjs().startOf('year');
|
|
313
|
+
if (granularity.offset) {
|
|
314
|
+
origin = addInterval(origin, parseSqlInterval(granularity.offset));
|
|
315
|
+
}
|
|
316
|
+
var alignedStart = alignToOrigin(start, intervalParsed, origin);
|
|
317
|
+
var dates = [];
|
|
318
|
+
while (alignedStart.isBefore(end) || alignedStart.isSame(end)) {
|
|
319
|
+
dates.push(alignedStart.format('YYYY-MM-DDTHH:mm:ss.000'));
|
|
320
|
+
alignedStart = addInterval(alignedStart, intervalParsed);
|
|
321
|
+
}
|
|
322
|
+
return dates;
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Returns the lowest time unit for the interval
|
|
327
|
+
* @protected
|
|
328
|
+
* @param {string} interval
|
|
329
|
+
* @returns {string}
|
|
330
|
+
*/
|
|
331
|
+
var diffTimeUnitForInterval = function diffTimeUnitForInterval(interval) {
|
|
332
|
+
if (/second/i.test(interval)) {
|
|
333
|
+
return 'second';
|
|
334
|
+
} else if (/minute/i.test(interval)) {
|
|
335
|
+
return 'minute';
|
|
336
|
+
} else if (/hour/i.test(interval)) {
|
|
337
|
+
return 'hour';
|
|
338
|
+
} else if (/day/i.test(interval)) {
|
|
339
|
+
return 'day';
|
|
340
|
+
} else if (/week/i.test(interval)) {
|
|
341
|
+
return 'day';
|
|
342
|
+
} else if (/month/i.test(interval)) {
|
|
343
|
+
return 'month';
|
|
344
|
+
} else if (/quarter/i.test(interval)) {
|
|
345
|
+
return 'month';
|
|
346
|
+
} else /* if (/year/i.test(interval)) */{
|
|
347
|
+
return 'year';
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
var granularityOrder = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second'];
|
|
351
|
+
var minGranularityForIntervals = function minGranularityForIntervals(i1, i2) {
|
|
352
|
+
var g1 = diffTimeUnitForInterval(i1);
|
|
353
|
+
var g2 = diffTimeUnitForInterval(i2);
|
|
354
|
+
var g1pos = granularityOrder.indexOf(g1);
|
|
355
|
+
var g2pos = granularityOrder.indexOf(g2);
|
|
356
|
+
if (g1pos > g2pos) {
|
|
357
|
+
return g1;
|
|
358
|
+
}
|
|
359
|
+
return g2;
|
|
360
|
+
};
|
|
361
|
+
var granularityFor = function granularityFor(dateStr) {
|
|
362
|
+
var dayjsDate = internalDayjs(dateStr);
|
|
363
|
+
var month = dayjsDate.month();
|
|
364
|
+
var date = dayjsDate.date();
|
|
365
|
+
var hours = dayjsDate.hour();
|
|
366
|
+
var minutes = dayjsDate.minute();
|
|
367
|
+
var seconds = dayjsDate.second();
|
|
368
|
+
var milliseconds = dayjsDate.millisecond();
|
|
369
|
+
var weekDay = dayjsDate.isoWeekday();
|
|
370
|
+
if (month === 0 && date === 1 && hours === 0 && minutes === 0 && seconds === 0 && milliseconds === 0) {
|
|
371
|
+
return 'year';
|
|
372
|
+
} else if (date === 1 && hours === 0 && minutes === 0 && seconds === 0 && milliseconds === 0) {
|
|
373
|
+
return 'month';
|
|
374
|
+
} else if (weekDay === 1 && hours === 0 && minutes === 0 && seconds === 0 && milliseconds === 0) {
|
|
375
|
+
return 'week';
|
|
376
|
+
} else if (hours === 0 && minutes === 0 && seconds === 0 && milliseconds === 0) {
|
|
377
|
+
return 'day';
|
|
378
|
+
} else if (minutes === 0 && seconds === 0 && milliseconds === 0) {
|
|
379
|
+
return 'hour';
|
|
380
|
+
} else if (seconds === 0 && milliseconds === 0) {
|
|
381
|
+
return 'minute';
|
|
382
|
+
} else if (milliseconds === 0) {
|
|
383
|
+
return 'second';
|
|
384
|
+
}
|
|
385
|
+
return 'second'; // TODO return 'millisecond';
|
|
386
|
+
};
|
|
387
|
+
|
|
388
|
+
var _excluded$2 = ["query"];
|
|
389
|
+
function ownKeys$3(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; }
|
|
390
|
+
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; }
|
|
122
391
|
function removeEmptyQueryFields(_query) {
|
|
123
392
|
var query = _query || {};
|
|
124
393
|
return ramda.fromPairs(ramda.toPairs(query).map(function (_ref) {
|
|
@@ -389,59 +658,6 @@ var _excluded$1 = ["x"],
|
|
|
389
658
|
_excluded3 = ["title", "shortTitle"];
|
|
390
659
|
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; }
|
|
391
660
|
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; }
|
|
392
|
-
dayjs__default['default'].extend(quarterOfYear__default['default']);
|
|
393
|
-
|
|
394
|
-
// When granularity is week, weekStart Value must be 1. However, since the client can change it globally (https://day.js.org/docs/en/i18n/changing-locale)
|
|
395
|
-
// So the function below has been added.
|
|
396
|
-
var internalDayjs = function internalDayjs() {
|
|
397
|
-
return dayjs__default['default'].apply(void 0, arguments).locale(_objectSpread$2(_objectSpread$2({}, en__default['default']), {}, {
|
|
398
|
-
weekStart: 1
|
|
399
|
-
}));
|
|
400
|
-
};
|
|
401
|
-
var TIME_SERIES = {
|
|
402
|
-
day: function day(range) {
|
|
403
|
-
return range.by('d').map(function (d) {
|
|
404
|
-
return d.format('YYYY-MM-DDT00:00:00.000');
|
|
405
|
-
});
|
|
406
|
-
},
|
|
407
|
-
month: function month(range) {
|
|
408
|
-
return range.snapTo('month').by('M').map(function (d) {
|
|
409
|
-
return d.format('YYYY-MM-01T00:00:00.000');
|
|
410
|
-
});
|
|
411
|
-
},
|
|
412
|
-
year: function year(range) {
|
|
413
|
-
return range.snapTo('year').by('y').map(function (d) {
|
|
414
|
-
return d.format('YYYY-01-01T00:00:00.000');
|
|
415
|
-
});
|
|
416
|
-
},
|
|
417
|
-
hour: function hour(range) {
|
|
418
|
-
return range.by('h').map(function (d) {
|
|
419
|
-
return d.format('YYYY-MM-DDTHH:00:00.000');
|
|
420
|
-
});
|
|
421
|
-
},
|
|
422
|
-
minute: function minute(range) {
|
|
423
|
-
return range.by('m').map(function (d) {
|
|
424
|
-
return d.format('YYYY-MM-DDTHH:mm:00.000');
|
|
425
|
-
});
|
|
426
|
-
},
|
|
427
|
-
second: function second(range) {
|
|
428
|
-
return range.by('s').map(function (d) {
|
|
429
|
-
return d.format('YYYY-MM-DDTHH:mm:ss.000');
|
|
430
|
-
});
|
|
431
|
-
},
|
|
432
|
-
week: function week(range) {
|
|
433
|
-
return range.snapTo('week').by('w').map(function (d) {
|
|
434
|
-
return d.startOf('week').format('YYYY-MM-DDT00:00:00.000');
|
|
435
|
-
});
|
|
436
|
-
},
|
|
437
|
-
quarter: function quarter(range) {
|
|
438
|
-
return range.snapTo('quarter').by('quarter').map(function (d) {
|
|
439
|
-
return d.startOf('quarter').format('YYYY-MM-DDT00:00:00.000');
|
|
440
|
-
});
|
|
441
|
-
}
|
|
442
|
-
};
|
|
443
|
-
var DateRegex = /^\d\d\d\d-\d\d-\d\d$/;
|
|
444
|
-
var LocalDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z?$/;
|
|
445
661
|
var groupByToPairs = function groupByToPairs(keyFn) {
|
|
446
662
|
var acc = new Map();
|
|
447
663
|
return function (data) {
|
|
@@ -464,25 +680,6 @@ var unnest = function unnest(arr) {
|
|
|
464
680
|
});
|
|
465
681
|
return res;
|
|
466
682
|
};
|
|
467
|
-
var dayRange = function dayRange(from, to) {
|
|
468
|
-
return {
|
|
469
|
-
by: function by(value) {
|
|
470
|
-
var results = [];
|
|
471
|
-
var start = internalDayjs(from);
|
|
472
|
-
var end = internalDayjs(to);
|
|
473
|
-
while (start.isBefore(end) || start.isSame(end)) {
|
|
474
|
-
results.push(start);
|
|
475
|
-
start = start.add(1, value);
|
|
476
|
-
}
|
|
477
|
-
return results;
|
|
478
|
-
},
|
|
479
|
-
snapTo: function snapTo(value) {
|
|
480
|
-
return dayRange(internalDayjs(from).startOf(value), internalDayjs(to).endOf(value));
|
|
481
|
-
},
|
|
482
|
-
start: internalDayjs(from),
|
|
483
|
-
end: internalDayjs(to)
|
|
484
|
-
};
|
|
485
|
-
};
|
|
486
683
|
var QUERY_TYPE = {
|
|
487
684
|
REGULAR_QUERY: 'regularQuery',
|
|
488
685
|
COMPARE_DATE_RANGE_QUERY: 'compareDateRangeQuery',
|
|
@@ -680,7 +877,7 @@ var ResultSet = /*#__PURE__*/function () {
|
|
|
680
877
|
}
|
|
681
878
|
}, {
|
|
682
879
|
key: "timeSeries",
|
|
683
|
-
value: function timeSeries(timeDimension, resultIndex) {
|
|
880
|
+
value: function timeSeries(timeDimension, resultIndex, annotations) {
|
|
684
881
|
if (!timeDimension.granularity) {
|
|
685
882
|
return null;
|
|
686
883
|
}
|
|
@@ -707,10 +904,13 @@ var ResultSet = /*#__PURE__*/function () {
|
|
|
707
904
|
start = _dateRange2[0],
|
|
708
905
|
end = _dateRange2[1];
|
|
709
906
|
var range = dayRange(start, end);
|
|
710
|
-
if (
|
|
711
|
-
|
|
907
|
+
if (isPredefinedGranularity(timeDimension.granularity)) {
|
|
908
|
+
return TIME_SERIES[timeDimension.granularity](padToDay ? range.snapTo('d') : range);
|
|
909
|
+
}
|
|
910
|
+
if (!annotations["".concat(timeDimension.dimension, ".").concat(timeDimension.granularity)]) {
|
|
911
|
+
throw new Error("Granularity \"".concat(timeDimension.granularity, "\" not found in time dimension \"").concat(timeDimension.dimension, "\""));
|
|
712
912
|
}
|
|
713
|
-
return
|
|
913
|
+
return timeSeriesFromCustomInterval(start, end, annotations["".concat(timeDimension.dimension, ".").concat(timeDimension.granularity)].granularity);
|
|
714
914
|
}
|
|
715
915
|
}, {
|
|
716
916
|
key: "pivot",
|
|
@@ -733,7 +933,7 @@ var ResultSet = /*#__PURE__*/function () {
|
|
|
733
933
|
return ResultSet.timeDimensionMember(td);
|
|
734
934
|
}))) {
|
|
735
935
|
var series = _this2.loadResponses.map(function (loadResponse) {
|
|
736
|
-
return _this2.timeSeries(loadResponse.query.timeDimensions[0], resultIndex);
|
|
936
|
+
return _this2.timeSeries(loadResponse.query.timeDimensions[0], resultIndex, loadResponse.annotation.timeDimensions);
|
|
737
937
|
});
|
|
738
938
|
if (series[0]) {
|
|
739
939
|
groupByXAxis = function groupByXAxis(rows) {
|
|
@@ -2155,22 +2355,35 @@ var index = (function (apiToken, options) {
|
|
|
2155
2355
|
|
|
2156
2356
|
exports.CubeApi = CubeApi;
|
|
2157
2357
|
exports.DEFAULT_GRANULARITY = DEFAULT_GRANULARITY;
|
|
2358
|
+
exports.DateRegex = DateRegex;
|
|
2158
2359
|
exports.GRANULARITIES = GRANULARITIES;
|
|
2159
2360
|
exports.HttpTransport = HttpTransport;
|
|
2361
|
+
exports.LocalDateRegex = LocalDateRegex;
|
|
2160
2362
|
exports.Meta = Meta;
|
|
2161
2363
|
exports.RequestError = RequestError;
|
|
2162
2364
|
exports.ResultSet = ResultSet;
|
|
2365
|
+
exports.TIME_SERIES = TIME_SERIES;
|
|
2366
|
+
exports.addInterval = addInterval;
|
|
2163
2367
|
exports.aliasSeries = aliasSeries;
|
|
2164
2368
|
exports.areQueriesEqual = areQueriesEqual;
|
|
2369
|
+
exports.dayRange = dayRange;
|
|
2165
2370
|
exports.default = index;
|
|
2166
2371
|
exports.defaultHeuristics = defaultHeuristics;
|
|
2167
2372
|
exports.defaultOrder = defaultOrder;
|
|
2373
|
+
exports.diffTimeUnitForInterval = diffTimeUnitForInterval;
|
|
2168
2374
|
exports.flattenFilters = flattenFilters;
|
|
2169
2375
|
exports.getOrderMembersFromOrder = getOrderMembersFromOrder;
|
|
2170
2376
|
exports.getQueryMembers = getQueryMembers;
|
|
2377
|
+
exports.granularityFor = granularityFor;
|
|
2378
|
+
exports.internalDayjs = internalDayjs;
|
|
2379
|
+
exports.isPredefinedGranularity = isPredefinedGranularity;
|
|
2171
2380
|
exports.isQueryPresent = isQueryPresent;
|
|
2381
|
+
exports.minGranularityForIntervals = minGranularityForIntervals;
|
|
2172
2382
|
exports.moveItemInArray = moveItemInArray;
|
|
2173
2383
|
exports.movePivotItem = movePivotItem;
|
|
2384
|
+
exports.parseSqlInterval = parseSqlInterval;
|
|
2174
2385
|
exports.removeEmptyQueryFields = removeEmptyQueryFields;
|
|
2386
|
+
exports.subtractInterval = subtractInterval;
|
|
2387
|
+
exports.timeSeriesFromCustomInterval = timeSeriesFromCustomInterval;
|
|
2175
2388
|
exports.validateQuery = validateQuery;
|
|
2176
2389
|
//# sourceMappingURL=cubejs-client-core.js.map
|