@cubejs-client/core 1.3.14 → 1.3.16

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,54 @@
1
+ import 'url-search-params-polyfill';
2
+ export interface ErrorResponse {
3
+ error: string;
4
+ }
5
+ export type TransportOptions = {
6
+ /**
7
+ * [jwt auth token](security)
8
+ */
9
+ authorization?: string;
10
+ /**
11
+ * path to `/cubejs-api/v1`
12
+ */
13
+ apiUrl: string;
14
+ /**
15
+ * custom headers
16
+ */
17
+ headers: Record<string, string>;
18
+ credentials?: 'omit' | 'same-origin' | 'include';
19
+ method?: 'GET' | 'PUT' | 'POST' | 'PATCH';
20
+ /**
21
+ * Fetch timeout in milliseconds. Would be passed as AbortSignal.timeout()
22
+ */
23
+ fetchTimeout?: number;
24
+ /**
25
+ * AbortSignal to cancel requests
26
+ */
27
+ signal?: AbortSignal;
28
+ };
29
+ export interface ITransportResponse<R> {
30
+ subscribe: <CBResult>(cb: (result: R | ErrorResponse, resubscribe: () => Promise<CBResult>) => CBResult) => Promise<CBResult>;
31
+ unsubscribe?: () => Promise<void>;
32
+ }
33
+ export interface ITransport<R> {
34
+ request(method: string, params: Record<string, unknown>): ITransportResponse<R>;
35
+ authorization: TransportOptions['authorization'];
36
+ }
37
+ /**
38
+ * Default transport implementation.
39
+ */
40
+ export declare class HttpTransport implements ITransport<Response> {
41
+ authorization: TransportOptions['authorization'];
42
+ protected apiUrl: TransportOptions['apiUrl'];
43
+ protected method: TransportOptions['method'];
44
+ protected headers: TransportOptions['headers'];
45
+ protected credentials: TransportOptions['credentials'];
46
+ protected fetchTimeout: number | undefined;
47
+ private readonly signal;
48
+ constructor({ authorization, apiUrl, method, headers, credentials, fetchTimeout, signal }: Omit<TransportOptions, 'headers'> & {
49
+ headers?: TransportOptions['headers'];
50
+ });
51
+ request(method: string, { baseRequestId, signal, ...params }: any): ITransportResponse<Response>;
52
+ }
53
+ export default HttpTransport;
54
+ //# sourceMappingURL=HttpTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpTransport.d.ts","sourceRoot":"","sources":["../../src/HttpTransport.ts"],"names":[],"mappings":"AACA,OAAO,4BAA4B,CAAC;AAEpC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IACjD,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAC1C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,aAAa,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE9H,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAChF,aAAa,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;CAClD;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,UAAU,CAAC,QAAQ,CAAC;IACjD,aAAa,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAExD,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE7C,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE/C,SAAS,CAAC,WAAW,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAEvD,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;gBAE9B,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;QAAE,OAAO,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAA;KAAE;IAU7K,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC;CA2CxG;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,55 @@
1
+ import fetch from 'cross-fetch';
2
+ import 'url-search-params-polyfill';
3
+ /**
4
+ * Default transport implementation.
5
+ */
6
+ export class HttpTransport {
7
+ constructor({ authorization, apiUrl, method, headers = {}, credentials, fetchTimeout, signal }) {
8
+ this.authorization = authorization;
9
+ this.apiUrl = apiUrl;
10
+ this.method = method;
11
+ this.headers = headers;
12
+ this.credentials = credentials;
13
+ this.fetchTimeout = fetchTimeout;
14
+ this.signal = signal;
15
+ }
16
+ request(method, { baseRequestId, signal, ...params }) {
17
+ let spanCounter = 1;
18
+ const searchParams = new URLSearchParams(params && Object.keys(params)
19
+ .map(k => ({ [k]: typeof params[k] === 'object' ? JSON.stringify(params[k]) : params[k] }))
20
+ .reduce((a, b) => ({ ...a, ...b }), {}));
21
+ let url = `${this.apiUrl}/${method}${searchParams.toString().length ? `?${searchParams}` : ''}`;
22
+ const requestMethod = this.method || (url.length < 2000 ? 'GET' : 'POST');
23
+ if (requestMethod === 'POST') {
24
+ url = `${this.apiUrl}/${method}`;
25
+ this.headers['Content-Type'] = 'application/json';
26
+ }
27
+ // Currently, all methods make GET requests. If a method makes a request with a body payload,
28
+ // remember to add {'Content-Type': 'application/json'} to the header.
29
+ const runRequest = () => fetch(url, {
30
+ method: requestMethod,
31
+ headers: {
32
+ Authorization: this.authorization,
33
+ 'x-request-id': baseRequestId && `${baseRequestId}-span-${spanCounter++}`,
34
+ ...this.headers
35
+ },
36
+ credentials: this.credentials,
37
+ body: requestMethod === 'POST' ? JSON.stringify(params) : null,
38
+ signal: signal || this.signal || (this.fetchTimeout ? AbortSignal.timeout(this.fetchTimeout) : undefined),
39
+ });
40
+ return {
41
+ /* eslint no-unsafe-finally: off */
42
+ async subscribe(callback) {
43
+ try {
44
+ const result = await runRequest();
45
+ return callback(result, () => this.subscribe(callback));
46
+ }
47
+ catch (e) {
48
+ const result = { error: 'network Error' };
49
+ return callback(result, () => this.subscribe(callback));
50
+ }
51
+ }
52
+ };
53
+ }
54
+ }
55
+ export default HttpTransport;
@@ -0,0 +1,62 @@
1
+ import { Cube, CubesMap, MemberType, MetaResponse, TCubeMeasure, TCubeDimension, TCubeMember, TCubeMemberByType, Query, FilterOperator, TCubeSegment, NotFoundMember } from './types';
2
+ import { DeeplyReadonly } from './index';
3
+ export interface CubeMemberWrapper<T> {
4
+ cubeName: string;
5
+ cubeTitle: string;
6
+ type: 'view' | 'cube';
7
+ public: boolean;
8
+ members: T[];
9
+ }
10
+ export type AggregatedMembers = {
11
+ measures: CubeMemberWrapper<TCubeMeasure>[];
12
+ dimensions: CubeMemberWrapper<TCubeDimension>[];
13
+ segments: CubeMemberWrapper<TCubeSegment>[];
14
+ timeDimensions: CubeMemberWrapper<TCubeDimension>[];
15
+ };
16
+ /**
17
+ * Contains information about available cubes and it's members.
18
+ */
19
+ export default class Meta {
20
+ /**
21
+ * Raw meta response
22
+ */
23
+ readonly meta: MetaResponse;
24
+ /**
25
+ * An array of all available cubes with their members
26
+ */
27
+ readonly cubes: Cube[];
28
+ /**
29
+ * A map of all cubes where the key is a cube name
30
+ */
31
+ readonly cubesMap: CubesMap;
32
+ constructor(metaResponse: MetaResponse);
33
+ /**
34
+ * Get all members of a specific type for a given query.
35
+ * If empty query is provided no filtering is done based on query context and all available members are retrieved.
36
+ * @param _query - context query to provide filtering of members available to add to this query
37
+ * @param memberType
38
+ */
39
+ membersForQuery(_query: DeeplyReadonly<Query> | null, memberType: MemberType): (TCubeMeasure | TCubeDimension | TCubeMember | TCubeSegment)[];
40
+ membersGroupedByCube(): AggregatedMembers;
41
+ /**
42
+ * Get meta information for a cube member
43
+ * meta information contains:
44
+ * ```javascript
45
+ * {
46
+ * name,
47
+ * title,
48
+ * shortTitle,
49
+ * type,
50
+ * description,
51
+ * format
52
+ * }
53
+ * ```
54
+ * @param memberName - Fully qualified member name in a form `Cube.memberName`
55
+ * @param memberType
56
+ * @return An object containing meta information about member
57
+ */
58
+ resolveMember<T extends MemberType>(memberName: string, memberType: T | T[]): NotFoundMember | TCubeMemberByType<T>;
59
+ defaultTimeDimensionNameFor(memberName: string): string | null | undefined;
60
+ filterOperatorsForMember(memberName: string, memberType: MemberType | MemberType[]): FilterOperator[];
61
+ }
62
+ //# sourceMappingURL=Meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Meta.d.ts","sourceRoot":"","sources":["../../src/Meta.ts"],"names":[],"mappings":"AACA,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,KAAK,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,CAAC,EAAE,CAAC;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;IAC5C,UAAU,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;IAChD,QAAQ,EAAE,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;IAC5C,cAAc,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAC;CACrD,CAAC;AAyCF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,IAAI;IACvB;;OAEG;IACH,SAAgB,IAAI,EAAE,YAAY,CAAC;IAEnC;;OAEG;IACH,SAAgB,KAAK,EAAE,IAAI,EAAE,CAAC;IAE9B;;OAEG;IACH,SAAgB,QAAQ,EAAE,QAAQ,CAAC;gBAEhB,YAAY,EAAE,YAAY;IAgB7C;;;;;OAKG;IACI,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,CAAC,YAAY,GAAG,cAAc,GAAG,WAAW,GAAG,YAAY,CAAC,EAAE;IAK7I,oBAAoB;IA8C3B;;;;;;;;;;;;;;;;OAgBG;IACI,aAAa,CAAC,CAAC,SAAS,UAAU,EACvC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,GAClB,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAsBjC,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAU1E,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,cAAc,EAAE;CAS7G"}
@@ -0,0 +1,150 @@
1
+ import { unnest, fromPairs } from 'ramda';
2
+ const memberMap = (memberArray) => fromPairs(memberArray.map((m) => [m.name, m]));
3
+ const operators = {
4
+ string: [
5
+ { name: 'contains', title: 'contains' },
6
+ { name: 'notContains', title: 'does not contain' },
7
+ { name: 'equals', title: 'equals' },
8
+ { name: 'notEquals', title: 'does not equal' },
9
+ { name: 'set', title: 'is set' },
10
+ { name: 'notSet', title: 'is not set' },
11
+ { name: 'startsWith', title: 'starts with' },
12
+ { name: 'notStartsWith', title: 'does not start with' },
13
+ { name: 'endsWith', title: 'ends with' },
14
+ { name: 'notEndsWith', title: 'does not end with' },
15
+ ],
16
+ number: [
17
+ { name: 'equals', title: 'equals' },
18
+ { name: 'notEquals', title: 'does not equal' },
19
+ { name: 'set', title: 'is set' },
20
+ { name: 'notSet', title: 'is not set' },
21
+ { name: 'gt', title: '>' },
22
+ { name: 'gte', title: '>=' },
23
+ { name: 'lt', title: '<' },
24
+ { name: 'lte', title: '<=' },
25
+ ],
26
+ time: [
27
+ { name: 'equals', title: 'equals' },
28
+ { name: 'notEquals', title: 'does not equal' },
29
+ { name: 'inDateRange', title: 'in date range' },
30
+ { name: 'notInDateRange', title: 'not in date range' },
31
+ { name: 'afterDate', title: 'after date' },
32
+ { name: 'afterOrOnDate', title: 'after or on date' },
33
+ { name: 'beforeDate', title: 'before date' },
34
+ { name: 'beforeOrOnDate', title: 'before or on date' },
35
+ ],
36
+ };
37
+ /**
38
+ * Contains information about available cubes and it's members.
39
+ */
40
+ export default class Meta {
41
+ constructor(metaResponse) {
42
+ this.meta = metaResponse;
43
+ const { cubes } = this.meta;
44
+ this.cubes = cubes;
45
+ this.cubesMap = fromPairs(cubes.map((c) => [
46
+ c.name,
47
+ {
48
+ measures: memberMap(c.measures),
49
+ dimensions: memberMap(c.dimensions),
50
+ segments: memberMap(c.segments),
51
+ },
52
+ ]));
53
+ }
54
+ /**
55
+ * Get all members of a specific type for a given query.
56
+ * If empty query is provided no filtering is done based on query context and all available members are retrieved.
57
+ * @param _query - context query to provide filtering of members available to add to this query
58
+ * @param memberType
59
+ */
60
+ membersForQuery(_query, memberType) {
61
+ return unnest(this.cubes.map((c) => c[memberType]))
62
+ .sort((a, b) => (a.title > b.title ? 1 : -1));
63
+ }
64
+ membersGroupedByCube() {
65
+ const memberKeys = ['measures', 'dimensions', 'segments', 'timeDimensions'];
66
+ return this.cubes.reduce((memo, cube) => {
67
+ memberKeys.forEach((key) => {
68
+ let members = [];
69
+ // eslint-disable-next-line default-case
70
+ switch (key) {
71
+ case 'measures':
72
+ members = cube.measures || [];
73
+ break;
74
+ case 'dimensions':
75
+ members = cube.dimensions || [];
76
+ break;
77
+ case 'segments':
78
+ members = cube.segments || [];
79
+ break;
80
+ case 'timeDimensions':
81
+ members = cube.dimensions.filter((m) => m.type === 'time') || [];
82
+ break;
83
+ }
84
+ // TODO: Convince TS this is working
85
+ // @ts-ignore
86
+ memo[key].push({
87
+ cubeName: cube.name,
88
+ cubeTitle: cube.title,
89
+ type: cube.type,
90
+ public: cube.public,
91
+ members,
92
+ });
93
+ });
94
+ return memo;
95
+ }, {
96
+ measures: [],
97
+ dimensions: [],
98
+ segments: [],
99
+ timeDimensions: [],
100
+ });
101
+ }
102
+ /**
103
+ * Get meta information for a cube member
104
+ * meta information contains:
105
+ * ```javascript
106
+ * {
107
+ * name,
108
+ * title,
109
+ * shortTitle,
110
+ * type,
111
+ * description,
112
+ * format
113
+ * }
114
+ * ```
115
+ * @param memberName - Fully qualified member name in a form `Cube.memberName`
116
+ * @param memberType
117
+ * @return An object containing meta information about member
118
+ */
119
+ resolveMember(memberName, memberType) {
120
+ const [cube] = memberName.split('.');
121
+ if (!this.cubesMap[cube]) {
122
+ return { title: memberName, error: `Cube not found ${cube} for path '${memberName}'` };
123
+ }
124
+ const memberTypes = Array.isArray(memberType) ? memberType : [memberType];
125
+ const member = memberTypes
126
+ .map((type) => this.cubesMap[cube][type] && this.cubesMap[cube][type][memberName])
127
+ .find((m) => m);
128
+ if (!member) {
129
+ return {
130
+ title: memberName,
131
+ error: `Path not found '${memberName}'`,
132
+ };
133
+ }
134
+ return member;
135
+ }
136
+ defaultTimeDimensionNameFor(memberName) {
137
+ const [cube] = memberName.split('.');
138
+ if (!this.cubesMap[cube]) {
139
+ return null;
140
+ }
141
+ return Object.keys(this.cubesMap[cube].dimensions || {}).find((d) => this.cubesMap[cube].dimensions[d].type === 'time');
142
+ }
143
+ filterOperatorsForMember(memberName, memberType) {
144
+ const member = this.resolveMember(memberName, memberType);
145
+ if ('error' in member || !('type' in member) || member.type === 'boolean') {
146
+ return operators.string;
147
+ }
148
+ return operators[member.type] || operators.string;
149
+ }
150
+ }
@@ -0,0 +1,8 @@
1
+ import { ProgressResponse } from './types';
2
+ export default class ProgressResult {
3
+ private progressResponse;
4
+ constructor(progressResponse: ProgressResponse);
5
+ stage(): string;
6
+ timeElapsed(): number;
7
+ }
8
+ //# sourceMappingURL=ProgressResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressResult.d.ts","sourceRoot":"","sources":["../../src/ProgressResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;gBAExB,gBAAgB,EAAE,gBAAgB;IAI9C,KAAK,IAAI,MAAM;IAIf,WAAW,IAAI,MAAM;CAG7B"}
@@ -0,0 +1,11 @@
1
+ export default class ProgressResult {
2
+ constructor(progressResponse) {
3
+ this.progressResponse = progressResponse;
4
+ }
5
+ stage() {
6
+ return this.progressResponse.stage;
7
+ }
8
+ timeElapsed() {
9
+ return this.progressResponse.timeElapsed;
10
+ }
11
+ }
@@ -0,0 +1,6 @@
1
+ export default class RequestError extends Error {
2
+ response: any;
3
+ status: number;
4
+ constructor(message: string, response: any, status: number);
5
+ }
6
+ //# sourceMappingURL=RequestError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestError.d.ts","sourceRoot":"","sources":["../../src/RequestError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,KAAK;IACtC,QAAQ,EAAE,GAAG,CAAC;IAEd,MAAM,EAAE,MAAM,CAAC;gBAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;CAKlE"}
@@ -0,0 +1,7 @@
1
+ export default class RequestError extends Error {
2
+ constructor(message, response, status) {
3
+ super(message);
4
+ this.response = response;
5
+ this.status = status;
6
+ }
7
+ }