@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
@@ -0,0 +1,430 @@
1
+ import { Annotation, ChartPivotRow, DrillDownLocator, LoadResponse, LoadResponseResult, PivotConfig, PivotConfigFull, PivotQuery, PivotRow, Query, QueryAnnotations, QueryType, SerializedResult, Series, SeriesNamesColumn, TableColumn, TimeDimension } from './types';
2
+ export declare const QUERY_TYPE: Record<string, QueryType>;
3
+ export type ResultSetOptions = {
4
+ parseDateMeasures?: boolean;
5
+ };
6
+ /**
7
+ * Provides a convenient interface for data manipulation.
8
+ */
9
+ export default class ResultSet<T extends Record<string, any> = any> {
10
+ private readonly loadResponse;
11
+ private readonly loadResponses;
12
+ private readonly queryType;
13
+ private readonly parseDateMeasures;
14
+ private readonly options;
15
+ private readonly backwardCompatibleData;
16
+ static measureFromAxis(axisValues: string[]): string;
17
+ static timeDimensionMember(td: TimeDimension): string;
18
+ /**
19
+ * ```js
20
+ * import { ResultSet } from '@cubejs-client/core';
21
+ *
22
+ * const resultSet = await cubeApi.load(query);
23
+ * // You can store the result somewhere
24
+ * const tmp = resultSet.serialize();
25
+ *
26
+ * // and restore it later
27
+ * const resultSet = ResultSet.deserialize(tmp);
28
+ * ```
29
+ * @param data the result of [serialize](#result-set-serialize)
30
+ * @param options
31
+ */
32
+ static deserialize<TData extends Record<string, any> = any>(data: SerializedResult, options?: Object): ResultSet<TData>;
33
+ constructor(loadResponse: LoadResponse<T> | LoadResponseResult<T>, options?: ResultSetOptions);
34
+ /**
35
+ * Returns a measure drill down query.
36
+ *
37
+ * Provided you have a measure with the defined `drillMembers` on the `Orders` cube
38
+ * ```js
39
+ * measures: {
40
+ * count: {
41
+ * type: `count`,
42
+ * drillMembers: [Orders.status, Users.city, count],
43
+ * },
44
+ * // ...
45
+ * }
46
+ * ```
47
+ *
48
+ * Then you can use the `drillDown` method to see the rows that contribute to that metric
49
+ * ```js
50
+ * resultSet.drillDown(
51
+ * {
52
+ * xValues,
53
+ * yValues,
54
+ * },
55
+ * // you should pass the `pivotConfig` if you have used it for axes manipulation
56
+ * pivotConfig
57
+ * )
58
+ * ```
59
+ *
60
+ * the result will be a query with the required filters applied and the dimensions/measures filled out
61
+ * ```js
62
+ * {
63
+ * measures: ['Orders.count'],
64
+ * dimensions: ['Orders.status', 'Users.city'],
65
+ * filters: [
66
+ * // dimension and measure filters
67
+ * ],
68
+ * timeDimensions: [
69
+ * //...
70
+ * ]
71
+ * }
72
+ * ```
73
+ *
74
+ * In case when you want to add `order` or `limit` to the query, you can simply spread it
75
+ *
76
+ * ```js
77
+ * // An example for React
78
+ * const drillDownResponse = useCubeQuery(
79
+ * {
80
+ * ...drillDownQuery,
81
+ * limit: 30,
82
+ * order: {
83
+ * 'Orders.ts': 'desc'
84
+ * }
85
+ * },
86
+ * {
87
+ * skip: !drillDownQuery
88
+ * }
89
+ * );
90
+ * ```
91
+ * @returns Drill down query
92
+ */
93
+ drillDown(drillDownLocator: DrillDownLocator, pivotConfig?: PivotConfig): Query | null;
94
+ /**
95
+ * Returns an array of series with key, title and series data.
96
+ * ```js
97
+ * // For the query
98
+ * {
99
+ * measures: ['Stories.count'],
100
+ * timeDimensions: [{
101
+ * dimension: 'Stories.time',
102
+ * dateRange: ['2015-01-01', '2015-12-31'],
103
+ * granularity: 'month'
104
+ * }]
105
+ * }
106
+ *
107
+ * // ResultSet.series() will return
108
+ * [
109
+ * {
110
+ * key: 'Stories.count',
111
+ * title: 'Stories Count',
112
+ * shortTitle: 'Count',
113
+ * series: [
114
+ * { x: '2015-01-01T00:00:00', value: 27120 },
115
+ * { x: '2015-02-01T00:00:00', value: 25861 },
116
+ * { x: '2015-03-01T00:00:00', value: 29661 },
117
+ * //...
118
+ * ],
119
+ * },
120
+ * ]
121
+ * ```
122
+ */
123
+ series<SeriesItem = any>(pivotConfig?: PivotConfig): Series<SeriesItem>[];
124
+ private axisValues;
125
+ private axisValuesString;
126
+ static getNormalizedPivotConfig(query?: PivotQuery, pivotConfig?: PivotConfig): PivotConfigFull;
127
+ normalizePivotConfig(pivotConfig?: PivotConfig): PivotConfigFull;
128
+ timeSeries(timeDimension: TimeDimension, resultIndex?: number, annotations?: Record<string, Annotation>): string[] | null;
129
+ /**
130
+ * Base method for pivoting [ResultSet](#result-set) data.
131
+ * Most of the time shouldn't be used directly and [chartPivot](#result-set-chart-pivot)
132
+ * or [tablePivot](#table-pivot) should be used instead.
133
+ *
134
+ * You can find the examples of using the `pivotConfig` [here](#types-pivot-config)
135
+ * ```js
136
+ * // For query
137
+ * {
138
+ * measures: ['Stories.count'],
139
+ * timeDimensions: [{
140
+ * dimension: 'Stories.time',
141
+ * dateRange: ['2015-01-01', '2015-03-31'],
142
+ * granularity: 'month'
143
+ * }]
144
+ * }
145
+ *
146
+ * // ResultSet.pivot({ x: ['Stories.time'], y: ['measures'] }) will return
147
+ * [
148
+ * {
149
+ * xValues: ["2015-01-01T00:00:00"],
150
+ * yValuesArray: [
151
+ * [['Stories.count'], 27120]
152
+ * ]
153
+ * },
154
+ * {
155
+ * xValues: ["2015-02-01T00:00:00"],
156
+ * yValuesArray: [
157
+ * [['Stories.count'], 25861]
158
+ * ]
159
+ * },
160
+ * {
161
+ * xValues: ["2015-03-01T00:00:00"],
162
+ * yValuesArray: [
163
+ * [['Stories.count'], 29661]
164
+ * ]
165
+ * }
166
+ * ]
167
+ * ```
168
+ * @returns An array of pivoted rows.
169
+ */
170
+ pivot(pivotConfig?: PivotConfig): PivotRow[];
171
+ private mergePivots;
172
+ /**
173
+ * Returns normalized query result data in the following format.
174
+ *
175
+ * You can find the examples of using the `pivotConfig` [here](#types-pivot-config)
176
+ * ```js
177
+ * // For the query
178
+ * {
179
+ * measures: ['Stories.count'],
180
+ * timeDimensions: [{
181
+ * dimension: 'Stories.time',
182
+ * dateRange: ['2015-01-01', '2015-12-31'],
183
+ * granularity: 'month'
184
+ * }]
185
+ * }
186
+ *
187
+ * // ResultSet.chartPivot() will return
188
+ * [
189
+ * { "x":"2015-01-01T00:00:00", "Stories.count": 27120, "xValues": ["2015-01-01T00:00:00"] },
190
+ * { "x":"2015-02-01T00:00:00", "Stories.count": 25861, "xValues": ["2015-02-01T00:00:00"] },
191
+ * { "x":"2015-03-01T00:00:00", "Stories.count": 29661, "xValues": ["2015-03-01T00:00:00"] },
192
+ * //...
193
+ * ]
194
+ *
195
+ * ```
196
+ * When using `chartPivot()` or `seriesNames()`, you can pass `aliasSeries` in the [pivotConfig](#types-pivot-config)
197
+ * to give each series a unique prefix. This is useful for `blending queries` which use the same measure multiple times.
198
+ *
199
+ * ```js
200
+ * // For the queries
201
+ * {
202
+ * measures: ['Stories.count'],
203
+ * timeDimensions: [
204
+ * {
205
+ * dimension: 'Stories.time',
206
+ * dateRange: ['2015-01-01', '2015-12-31'],
207
+ * granularity: 'month',
208
+ * },
209
+ * ],
210
+ * },
211
+ * {
212
+ * measures: ['Stories.count'],
213
+ * timeDimensions: [
214
+ * {
215
+ * dimension: 'Stories.time',
216
+ * dateRange: ['2015-01-01', '2015-12-31'],
217
+ * granularity: 'month',
218
+ * },
219
+ * ],
220
+ * filters: [
221
+ * {
222
+ * member: 'Stores.read',
223
+ * operator: 'equals',
224
+ * value: ['true'],
225
+ * },
226
+ * ],
227
+ * },
228
+ *
229
+ * // ResultSet.chartPivot({ aliasSeries: ['one', 'two'] }) will return
230
+ * [
231
+ * {
232
+ * x: '2015-01-01T00:00:00',
233
+ * 'one,Stories.count': 27120,
234
+ * 'two,Stories.count': 8933,
235
+ * xValues: ['2015-01-01T00:00:00'],
236
+ * },
237
+ * {
238
+ * x: '2015-02-01T00:00:00',
239
+ * 'one,Stories.count': 25861,
240
+ * 'two,Stories.count': 8344,
241
+ * xValues: ['2015-02-01T00:00:00'],
242
+ * },
243
+ * {
244
+ * x: '2015-03-01T00:00:00',
245
+ * 'one,Stories.count': 29661,
246
+ * 'two,Stories.count': 9023,
247
+ * xValues: ['2015-03-01T00:00:00'],
248
+ * },
249
+ * //...
250
+ * ]
251
+ * ```
252
+ */
253
+ chartPivot(pivotConfig?: PivotConfig): ChartPivotRow[];
254
+ /**
255
+ * Returns normalized query result data prepared for visualization in the table format.
256
+ *
257
+ * You can find the examples of using the `pivotConfig` [here](#types-pivot-config)
258
+ *
259
+ * For example:
260
+ * ```js
261
+ * // For the query
262
+ * {
263
+ * measures: ['Stories.count'],
264
+ * timeDimensions: [{
265
+ * dimension: 'Stories.time',
266
+ * dateRange: ['2015-01-01', '2015-12-31'],
267
+ * granularity: 'month'
268
+ * }]
269
+ * }
270
+ *
271
+ * // ResultSet.tablePivot() will return
272
+ * [
273
+ * { "Stories.time": "2015-01-01T00:00:00", "Stories.count": 27120 },
274
+ * { "Stories.time": "2015-02-01T00:00:00", "Stories.count": 25861 },
275
+ * { "Stories.time": "2015-03-01T00:00:00", "Stories.count": 29661 },
276
+ * //...
277
+ * ]
278
+ * ```
279
+ * @returns An array of pivoted rows
280
+ */
281
+ tablePivot(pivotConfig?: PivotConfig): Array<{
282
+ [key: string]: string | number | boolean;
283
+ }>;
284
+ /**
285
+ * Returns an array of column definitions for `tablePivot`.
286
+ *
287
+ * For example:
288
+ * ```js
289
+ * // For the query
290
+ * {
291
+ * measures: ['Stories.count'],
292
+ * timeDimensions: [{
293
+ * dimension: 'Stories.time',
294
+ * dateRange: ['2015-01-01', '2015-12-31'],
295
+ * granularity: 'month'
296
+ * }]
297
+ * }
298
+ *
299
+ * // ResultSet.tableColumns() will return
300
+ * [
301
+ * {
302
+ * key: 'Stories.time',
303
+ * dataIndex: 'Stories.time',
304
+ * title: 'Stories Time',
305
+ * shortTitle: 'Time',
306
+ * type: 'time',
307
+ * format: undefined,
308
+ * },
309
+ * {
310
+ * key: 'Stories.count',
311
+ * dataIndex: 'Stories.count',
312
+ * title: 'Stories Count',
313
+ * shortTitle: 'Count',
314
+ * type: 'count',
315
+ * format: undefined,
316
+ * },
317
+ * //...
318
+ * ]
319
+ * ```
320
+ *
321
+ * In case we want to pivot the table axes
322
+ * ```js
323
+ * // Let's take this query as an example
324
+ * {
325
+ * measures: ['Orders.count'],
326
+ * dimensions: ['Users.country', 'Users.gender']
327
+ * }
328
+ *
329
+ * // and put the dimensions on `y` axis
330
+ * resultSet.tableColumns({
331
+ * x: [],
332
+ * y: ['Users.country', 'Users.gender', 'measures']
333
+ * })
334
+ * ```
335
+ *
336
+ * then `tableColumns` will group the table head and return
337
+ * ```js
338
+ * {
339
+ * key: 'Germany',
340
+ * type: 'string',
341
+ * title: 'Users Country Germany',
342
+ * shortTitle: 'Germany',
343
+ * meta: undefined,
344
+ * format: undefined,
345
+ * children: [
346
+ * {
347
+ * key: 'male',
348
+ * type: 'string',
349
+ * title: 'Users Gender male',
350
+ * shortTitle: 'male',
351
+ * meta: undefined,
352
+ * format: undefined,
353
+ * children: [
354
+ * {
355
+ * // ...
356
+ * dataIndex: 'Germany.male.Orders.count',
357
+ * shortTitle: 'Count',
358
+ * },
359
+ * ],
360
+ * },
361
+ * {
362
+ * // ...
363
+ * shortTitle: 'female',
364
+ * children: [
365
+ * {
366
+ * // ...
367
+ * dataIndex: 'Germany.female.Orders.count',
368
+ * shortTitle: 'Count',
369
+ * },
370
+ * ],
371
+ * },
372
+ * ],
373
+ * },
374
+ * // ...
375
+ * ```
376
+ * @returns An array of columns
377
+ */
378
+ tableColumns(pivotConfig?: PivotConfig): TableColumn[];
379
+ totalRow(pivotConfig?: PivotConfig): ChartPivotRow;
380
+ categories(pivotConfig?: PivotConfig): ChartPivotRow[];
381
+ /**
382
+ * Returns an array of series objects, containing `key` and `title` parameters.
383
+ * ```js
384
+ * // For query
385
+ * {
386
+ * measures: ['Stories.count'],
387
+ * timeDimensions: [{
388
+ * dimension: 'Stories.time',
389
+ * dateRange: ['2015-01-01', '2015-12-31'],
390
+ * granularity: 'month'
391
+ * }]
392
+ * }
393
+ *
394
+ * // ResultSet.seriesNames() will return
395
+ * [
396
+ * {
397
+ * key: 'Stories.count',
398
+ * title: 'Stories Count',
399
+ * shortTitle: 'Count',
400
+ * yValues: ['Stories.count'],
401
+ * },
402
+ * ]
403
+ * ```
404
+ * @returns An array of series names
405
+ */
406
+ seriesNames(pivotConfig?: PivotConfig): SeriesNamesColumn[];
407
+ query(): Query;
408
+ pivotQuery(): PivotQuery;
409
+ /**
410
+ * @return the total number of rows if the `total` option was set, when sending the query
411
+ */
412
+ totalRows(): number | null | undefined;
413
+ rawData(): T[];
414
+ annotation(): QueryAnnotations;
415
+ private timeDimensionBackwardCompatibleData;
416
+ /**
417
+ * Can be used when you need access to the methods that can't be used with some query types (eg `compareDateRangeQuery` or `blendingQuery`)
418
+ * ```js
419
+ * resultSet.decompose().forEach((currentResultSet) => {
420
+ * console.log(currentResultSet.rawData());
421
+ * });
422
+ * ```
423
+ */
424
+ decompose(): ResultSet<any>[];
425
+ /**
426
+ * Can be used to stash the `ResultSet` in a storage and restored later with [deserialize](#result-set-deserialize)
427
+ */
428
+ serialize(): SerializedResult;
429
+ }
430
+ //# sourceMappingURL=ResultSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResultSet.d.ts","sourceRoot":"","sources":["../../src/ResultSet.ts"],"names":[],"mappings":"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"}