@@ -88,6 +88,7 @@ export type DataSchemaCompilerOptions = {
8888 compileContext ?: any ;
8989 allowNodeRequire ?: boolean ;
9090 compiledScriptCache : LRUCache < string , vm . Script > ;
91+ compiledYamlCache : LRUCache < string , string > ;
9192} ;
9293
9394export type TranspileOptions = {
@@ -163,6 +164,8 @@ export class DataSchemaCompiler {
163164
164165 private readonly compiledScriptCache : LRUCache < string , vm . Script > ;
165166
167+ private readonly compiledYamlCache : LRUCache < string , string > ;
168+
166169 private compileV8ContextCache : vm . Context | null = null ;
167170
168171 // FIXME: Is public only because of tests, should be private
@@ -196,6 +199,7 @@ export class DataSchemaCompiler {
196199 this . workerPool = null ;
197200 this . compilerId = options . compilerId || 'default' ;
198201 this . compiledScriptCache = options . compiledScriptCache ;
202+ this . compiledYamlCache = options . compiledYamlCache ;
199203 }
200204
201205 public compileObjects ( compileServices : CompilerInterface [ ] , objects , errorsReport : ErrorReporter ) {
@@ -705,6 +709,14 @@ export class DataSchemaCompiler {
705709 errorsReport : ErrorReporter ,
706710 { cubeNames, cubeSymbols, contextSymbols, transpilerNames, compilerId, stage } : TranspileOptions
707711 ) : Promise < ( FileContent | undefined ) > {
712+ const cacheKey = crypto . createHash ( 'md5' ) . update ( JSON . stringify ( file . content ) ) . digest ( 'hex' ) ;
713+
714+ if ( this . compiledYamlCache . has ( cacheKey ) ) {
715+ const content = this . compiledYamlCache . get ( cacheKey ) ! ;
716+
717+ return { ...file , content } ;
718+ }
719+
708720 /* if (getEnv('transpilationNative')) {
709721
710722 } else */ if ( getEnv ( 'transpilationWorkerThreads' ) ) {
@@ -720,9 +732,15 @@ export class DataSchemaCompiler {
720732 errorsReport . addErrors ( res . errors ) ;
721733 errorsReport . addWarnings ( res . warnings ) ;
722734
735+ this . compiledYamlCache . set ( cacheKey , res . content ) ;
736+
723737 return { ...file , content : res . content } ;
724738 } else {
725- return this . yamlCompiler . transpileYamlFile ( file , errorsReport ) ;
739+ const transpiledFile = this . yamlCompiler . transpileYamlFile ( file , errorsReport ) ;
740+
741+ this . compiledYamlCache . set ( cacheKey , transpiledFile ?. content || '' ) ;
742+
743+ return transpiledFile ;
726744 }
727745 }
728746
0 commit comments