Skip to content

Commit ddf5841

Browse files
committed
implement yaml transpilation in worker threads
1 parent f34ab99 commit ddf5841

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
@@ -605,7 +605,7 @@ export class DataSchemaCompiler {
605605
cubeSymbols,
606606
};
607607

608-
const res = await this.workerPool!.exec('transpile', [data]);
608+
const res = await this.workerPool!.exec('transpileJs', [data]);
609609
errorsReport.addErrors(res.errors);
610610
errorsReport.addWarnings(res.warnings);
611611

@@ -647,23 +647,35 @@ export class DataSchemaCompiler {
647647
errorsReport: ErrorReporter,
648648
{ cubeNames, cubeSymbols, contextSymbols, transpilerNames, compilerId, stage }: TranspileOptions
649649
): Promise<(FileContent | undefined)> {
650-
// if (getEnv('transpilationNative')) {
651-
//
652-
// } else if (getEnv('transpilationWorkerThreads')) {
653-
//
654-
// } else {
655-
const transpiledFile = this.yamlCompiler.transpileYamlFile(file, errorsReport);
650+
/* if (getEnv('transpilationNative')) {
651+
652+
} else */ if (getEnv('transpilationWorkerThreads')) {
653+
const data = {
654+
fileName: file.fileName,
655+
content: file.content,
656+
transpilers: [],
657+
cubeNames,
658+
cubeSymbols,
659+
};
660+
661+
const res = await this.workerPool!.exec('transpileYaml', [data]);
662+
errorsReport.addErrors(res.errors);
663+
errorsReport.addWarnings(res.warnings);
664+
665+
return { ...file, content: res.content };
666+
} else {
667+
const transpiledFile = this.yamlCompiler.transpileYamlFile(file, errorsReport);
668+
669+
if (transpiledFile) {
670+
// We update the yaml file content to the transpiled js content
671+
// and raise related flag so it will go JS transpilation flow afterward
672+
// avoiding costly YAML/Python parsing again.
673+
file.content = transpiledFile.content;
674+
file.convertedToJs = true;
675+
}
656676

657-
if (transpiledFile) {
658-
// We update the yaml file content to the transpiled js content
659-
// and raise related flag so it will go JS transpilation flow afterward
660-
// avoiding costly YAML/Python parsing again.
661-
file.content = transpiledFile.content;
662-
file.convertedToJs = true;
677+
return transpiledFile;
663678
}
664-
665-
return transpiledFile;
666-
// }
667679
}
668680

669681
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
@@ -11,6 +11,8 @@ import { ErrorReporter } from '../ErrorReporter';
1111
import { LightweightSymbolResolver } from './LightweightSymbolResolver';
1212
import { LightweightNodeCubeDictionary } from './LightweightNodeCubeDictionary';
1313
import { IIFETranspiler } from './IIFETranspiler';
14+
import { YamlCompiler } from '../YamlCompiler';
15+
import { NativeInstance } from '@cubejs-backend/native';
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)