Skip to content

Commit 6d8e01d

Browse files
committed
implement yaml transpilation in worker threads
1 parent a6d9f0c commit 6d8e01d

File tree

4 files changed

+60
-25
lines changed

4 files changed

+60
-25
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: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ export class DataSchemaCompiler {
586586
cubeSymbols,
587587
};
588588

589-
const res = await this.workerPool!.exec('transpile', [data]);
589+
const res = await this.workerPool!.exec('transpileJs', [data]);
590590
errorsReport.addErrors(res.errors);
591591
errorsReport.addWarnings(res.warnings);
592592

@@ -628,23 +628,35 @@ export class DataSchemaCompiler {
628628
errorsReport: ErrorReporter,
629629
{ cubeNames, cubeSymbols, contextSymbols, transpilerNames, compilerId, stage }: TranspileOptions
630630
): Promise<(FileContent | undefined)> {
631-
// if (getEnv('transpilationNative')) {
632-
//
633-
// } else if (getEnv('transpilationWorkerThreads')) {
634-
//
635-
// } else {
636-
const transpiledFile = this.yamlCompiler.transpileYamlFile(file, errorsReport);
631+
/* if (getEnv('transpilationNative')) {
632+
633+
} else */ if (getEnv('transpilationWorkerThreads')) {
634+
const data = {
635+
fileName: file.fileName,
636+
content: file.content,
637+
transpilers: [],
638+
cubeNames,
639+
cubeSymbols,
640+
};
641+
642+
const res = await this.workerPool!.exec('transpileYaml', [data]);
643+
errorsReport.addErrors(res.errors);
644+
errorsReport.addWarnings(res.warnings);
645+
646+
return { ...file, content: res.content };
647+
} else {
648+
const transpiledFile = this.yamlCompiler.transpileYamlFile(file, errorsReport);
649+
650+
if (transpiledFile) {
651+
// We update the yaml file content to the transpiled js content
652+
// and raise related flag so it will go JS transpilation flow afterward
653+
// avoiding costly YAML/Python parsing again.
654+
file.content = transpiledFile.content;
655+
file.convertedToJs = true;
656+
}
637657

638-
if (transpiledFile) {
639-
// We update the yaml file content to the transpiled js content
640-
// and raise related flag so it will go JS transpilation flow afterward
641-
// avoiding costly YAML/Python parsing again.
642-
file.content = transpiledFile.content;
643-
file.convertedToJs = true;
658+
return transpiledFile;
644659
}
645-
646-
return transpiledFile;
647-
// }
648660
}
649661

650662
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)