Skip to content

Commit b8aaad4

Browse files
committed
implement yaml transpilation in worker threads
1 parent 1bae7f9 commit b8aaad4

File tree

4 files changed

+52
-17
lines changed

4 files changed

+52
-17
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { DynamicReference } from './DynamicReference';
77
import { camelizeCube } from './utils';
88

99
import type { ErrorReporter } from './ErrorReporter';
10+
import { TranspilerSymbolResolver } from './transpilers';
1011

1112
export type ToString = { toString(): string };
1213

@@ -193,7 +194,7 @@ export const CONTEXT_SYMBOLS = {
193194

194195
export const CURRENT_CUBE_CONSTANTS = ['CUBE', 'TABLE'];
195196

196-
export class CubeSymbols {
197+
export class CubeSymbols implements TranspilerSymbolResolver {
197198
public symbols: Record<string | symbol, CubeSymbolsDefinition>;
198199

199200
private builtCubes: Record<string, CubeDefinitionExtended>;

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

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ export class DataSchemaCompiler {
663663
cubeSymbols,
664664
};
665665

666-
const res = await this.workerPool!.exec('transpile', [data]);
666+
const res = await this.workerPool!.exec('transpileJs', [data]);
667667
errorsReport.addErrors(res.errors);
668668
errorsReport.addWarnings(res.warnings);
669669

@@ -705,13 +705,25 @@ export class DataSchemaCompiler {
705705
errorsReport: ErrorReporter,
706706
{ cubeNames, cubeSymbols, contextSymbols, transpilerNames, compilerId, stage }: TranspileOptions
707707
): Promise<(FileContent | undefined)> {
708-
// if (getEnv('transpilationNative')) {
709-
//
710-
// } else if (getEnv('transpilationWorkerThreads')) {
711-
//
712-
// } else {
713-
return this.yamlCompiler.transpileYamlFile(file, errorsReport);
714-
// }
708+
/* if (getEnv('transpilationNative')) {
709+
710+
} else */ if (getEnv('transpilationWorkerThreads')) {
711+
const data = {
712+
fileName: file.fileName,
713+
content: file.content,
714+
transpilers: [],
715+
cubeNames,
716+
cubeSymbols,
717+
};
718+
719+
const res = await this.workerPool!.exec('transpileYaml', [data]);
720+
errorsReport.addErrors(res.errors);
721+
errorsReport.addWarnings(res.warnings);
722+
723+
return { ...file, content: res.content };
724+
} else {
725+
return this.yamlCompiler.transpileYamlFile(file, errorsReport);
726+
}
715727
}
716728

717729
private async transpileJinjaFile(

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ import { JinjaEngine, NativeInstance, PythonCtx } from '@cubejs-backend/native';
88
import type { FileContent } from '@cubejs-backend/shared';
99

1010
import { getEnv } from '@cubejs-backend/shared';
11-
import { CubePropContextTranspiler, transpiledFields, transpiledFieldsPatterns } from './transpilers';
11+
import {
12+
CubePropContextTranspiler,
13+
transpiledFields,
14+
transpiledFieldsPatterns,
15+
TranspilerCubeResolver, TranspilerSymbolResolver
16+
} from './transpilers';
1217
import { PythonParser } from '../parser/PythonParser';
13-
import { CubeSymbols } from './CubeSymbols';
1418
import { nonStringFields } from './CubeValidator';
15-
import { CubeDictionary } from './CubeDictionary';
1619
import { ErrorReporter } from './ErrorReporter';
1720
import { camelizeCube } from './utils';
1821
import { CompileContext } from './DataSchemaCompiler';
@@ -28,10 +31,10 @@ export class YamlCompiler {
2831
protected jinjaEngine: JinjaEngine | null = null;
2932

3033
public constructor(
31-
private readonly cubeSymbols: CubeSymbols,
32-
private readonly cubeDictionary: CubeDictionary,
34+
private readonly cubeSymbols: TranspilerSymbolResolver,
35+
private readonly cubeDictionary: TranspilerCubeResolver,
3336
private readonly nativeInstance: NativeInstance,
34-
private readonly viewCompiler: CubeSymbols,
37+
private readonly viewCompiler: TranspilerSymbolResolver,
3538
) {
3639
}
3740

packages/cubejs-schema-compiler/src/compiler/transpilers/transpiler_worker.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { parse } from '@babel/parser';
33
import babelGenerator from '@babel/generator';
44
import babelTraverse from '@babel/traverse';
55

6+
import { NativeInstance } from '@cubejs-backend/native';
67
import { ValidationTranspiler } from './ValidationTranspiler';
78
import { ImportExportTranspiler } from './ImportExportTranspiler';
89
import { CubeCheckDuplicatePropTranspiler } from './CubeCheckDuplicatePropTranspiler';
@@ -11,6 +12,7 @@ import { ErrorReporter } from '../ErrorReporter';
1112
import { LightweightSymbolResolver } from './LightweightSymbolResolver';
1213
import { LightweightNodeCubeDictionary } from './LightweightNodeCubeDictionary';
1314
import { IIFETranspiler } from './IIFETranspiler';
15+
import { YamlCompiler } from '../YamlCompiler';
1416

1517
type TransferContent = {
1618
fileName: string;
@@ -23,6 +25,7 @@ type TransferContent = {
2325
const cubeDictionary = new LightweightNodeCubeDictionary();
2426
const cubeSymbols = new LightweightSymbolResolver();
2527
const errorsReport = new ErrorReporter(null, []);
28+
const yamlCompiler = new YamlCompiler(cubeSymbols, cubeDictionary, new NativeInstance(), cubeSymbols);
2629

2730
const transpilers = {
2831
ValidationTranspiler: new ValidationTranspiler(),
@@ -32,7 +35,7 @@ const transpilers = {
3235
IIFETranspiler: new IIFETranspiler(),
3336
};
3437

35-
const transpile = (data: TransferContent) => {
38+
const transpileJs = (data: TransferContent) => {
3639
cubeDictionary.setCubeNames(data.cubeNames);
3740
cubeSymbols.setSymbols(data.cubeSymbols);
3841

@@ -64,6 +67,22 @@ const transpile = (data: TransferContent) => {
6467
};
6568
};
6669

70+
const transpileYaml = (data: TransferContent) => {
71+
cubeDictionary.setCubeNames(data.cubeNames);
72+
cubeSymbols.setSymbols(data.cubeSymbols);
73+
74+
errorsReport.inFile(data);
75+
const transpiledFile = yamlCompiler.transpileYamlFile(data, errorsReport);
76+
errorsReport.exitFile();
77+
78+
return {
79+
content: transpiledFile?.content,
80+
errors: errorsReport.getErrors(),
81+
warnings: errorsReport.getWarnings()
82+
};
83+
};
84+
6785
workerpool.worker({
68-
transpile,
86+
transpileJs,
87+
transpileYaml,
6988
});

0 commit comments

Comments
 (0)