Skip to content

Commit d6d638c

Browse files
committed
refactor(schema-compiler): Extract ToString type
1 parent 381630e commit d6d638c

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable no-restricted-syntax */
22
import R from 'ramda';
33

4-
import { CubeSymbols } from './CubeSymbols';
4+
import { CubeSymbols, type ToString } from './CubeSymbols';
55
import { UserError } from './UserError';
66
import { BaseQuery } from '../adapter';
77
import type { CubeValidator } from './CubeValidator';
@@ -28,7 +28,7 @@ export type DimensionDefinition = {
2828
};
2929

3030
export type TimeShiftDefinition = {
31-
timeDimension: (...args: Array<unknown>) => { toString(): string },
31+
timeDimension: (...args: Array<unknown>) => ToString,
3232
interval: string,
3333
type: 'next' | 'prior',
3434
};
@@ -48,9 +48,9 @@ export type MeasureDefinition = {
4848
primaryKey?: true,
4949
drillFilters?: any,
5050
multiStage?: boolean,
51-
groupBy?: (...args: Array<unknown>) => Array<{ toString(): string }>,
52-
reduceBy?: (...args: Array<unknown>) => Array<{ toString(): string }>,
53-
addGroupBy?: (...args: Array<unknown>) => Array<{ toString(): string }>,
51+
groupBy?: (...args: Array<unknown>) => Array<ToString>,
52+
reduceBy?: (...args: Array<unknown>) => Array<ToString>,
53+
addGroupBy?: (...args: Array<unknown>) => Array<ToString>,
5454
timeShift?: TimeShiftDefinition[],
5555
groupByReferences?: string[],
5656
reduceByReferences?: string[],
@@ -67,13 +67,13 @@ export type PreAggregationFilters = {
6767

6868
type PreAggregationDefinition = {
6969
allowNonStrictDateRangeMatch?: boolean,
70-
timeDimensionReference?: () => { toString(): string },
70+
timeDimensionReference?: () => ToString,
7171
granularity: string,
72-
timeDimensionReferences: Array<{ dimension: () => { toString(): string }, granularity: string }>,
73-
dimensionReferences: () => Array<{ toString(): string }>,
74-
segmentReferences: () => Array<{ toString(): string }>,
75-
measureReferences: () => Array<{ toString(): string }>,
76-
rollupReferences: () => Array<{ toString(): string }>,
72+
timeDimensionReferences: Array<{ dimension: () => ToString, granularity: string }>,
73+
dimensionReferences: () => Array<ToString>,
74+
segmentReferences: () => Array<ToString>,
75+
measureReferences: () => Array<ToString>,
76+
rollupReferences: () => Array<ToString>,
7777
};
7878

7979
type PreAggregationTimeDimensionReference = {

packages/cubejs-schema-compiler/src/compiler/CubeSymbols.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import { BaseQuery } from '../adapter';
99

1010
import type { ErrorReporter } from './ErrorReporter';
1111

12+
export type ToString = { toString(): string };
13+
1214
interface CubeDefinition {
1315
name: string;
1416
extends?: (...args: Array<unknown>) => { __cubeName: string };
@@ -293,7 +295,7 @@ export class CubeSymbols {
293295
// Extend `includes` with members from hierarchies that should be auto-included
294296
const cubes = type === 'dimensions' ? cube.cubes.map((it) => {
295297
// TODO recheck `it.joinPath` typing
296-
const fullPath = this.evaluateReferences(null, it.joinPath as () => { toString(): string }, { collectJoinHints: true });
298+
const fullPath = this.evaluateReferences(null, it.joinPath as () => ToString, { collectJoinHints: true });
297299
const split = fullPath.split('.');
298300
const cubeRef = split[split.length - 1];
299301

@@ -334,7 +336,7 @@ export class CubeSymbols {
334336

335337
if (hierarchy) {
336338
// TODO recheck `this.getResolvedMember(...).levels` typing
337-
const levels = this.evaluateReferences(cubeName, this.getResolvedMember('hierarchies', cubeName, hierarchyName).levels as () => Array<{ toString(): string }>, { originalSorting: true });
339+
const levels = this.evaluateReferences(cubeName, this.getResolvedMember('hierarchies', cubeName, hierarchyName).levels as () => Array<ToString>, { originalSorting: true });
338340

339341
levels.forEach((level) => autoIncludeMembers.add(level));
340342
}
@@ -373,7 +375,7 @@ export class CubeSymbols {
373375
protected membersFromCubes(parentCube: CubeDefinition, cubes: any[], type: string, errorReporter: ErrorReporter, splitViews: SplitViews, memberSets: any) {
374376
return R.unnest(cubes.map(cubeInclude => {
375377
// TODO recheck `cubeInclude.joinPath` typing
376-
const fullPath = this.evaluateReferences(null, cubeInclude.joinPath as () => { toString(): string }, { collectJoinHints: true });
378+
const fullPath = this.evaluateReferences(null, cubeInclude.joinPath as () => ToString, { collectJoinHints: true });
377379
const split = fullPath.split('.');
378380
const cubeReference = split[split.length - 1];
379381
const cubeName = cubeInclude.alias || cubeReference;
@@ -456,7 +458,7 @@ export class CubeSymbols {
456458
return includes.filter(include => !excludesMap.has(include.member));
457459
}
458460

459-
protected membersFromIncludeExclude(referencesFn: (...args: Array<unknown>) => Array<{ toString(): string }>, cubeName: string, type: string) {
461+
protected membersFromIncludeExclude(referencesFn: (...args: Array<unknown>) => Array<ToString>, cubeName: string, type: string) {
460462
const references = this.evaluateReferences(cubeName, referencesFn);
461463
return R.unnest(references.map((ref: string) => {
462464
const path = ref.split('.');
@@ -553,11 +555,12 @@ export class CubeSymbols {
553555
return res;
554556
}
555557

556-
protected evaluateReferences<T extends { toString(): string } | Array<{ toString(): string }>>(
558+
protected evaluateReferences<T extends ToString | Array<ToString>>(
557559
cube: string | null,
558560
referencesFn: (...args: Array<unknown>) => T,
559-
options: { collectJoinHints?: boolean, originalSorting?: boolean } = {}):
560-
T extends Array<{ toString(): string }> ? Array<string> : T extends { toString(): string } ? string : string | Array<string> {
561+
options: { collectJoinHints?: boolean, originalSorting?: boolean } = {}
562+
):
563+
T extends Array<ToString> ? Array<string> : T extends ToString ? string : string | Array<string> {
561564
const cubeEvaluator = this;
562565

563566
const fullPath = (joinHints, path) => {

0 commit comments

Comments
 (0)