34 lines
1.6 KiB
TypeScript
34 lines
1.6 KiB
TypeScript
import { IExpressionsCompiler, ParameterValueDictionary } from '@/application/Parser/Script/Compiler/Expressions/IExpressionsCompiler';
|
|
import { ParameterSubstitutionParser } from '@/application/Parser/Script/Compiler/Expressions/SyntaxParsers/ParameterSubstitutionParser';
|
|
import { CompositeExpressionParser } from '@/application/Parser/Script/Compiler/Expressions/Parser/CompositeExpressionParser';
|
|
import { ExpressionsCompiler } from '@/application/Parser/Script/Compiler/Expressions/ExpressionsCompiler';
|
|
import { IProjectInformation } from '@/domain/IProjectInformation';
|
|
import { ICodeSubstituter } from './ICodeSubstituter';
|
|
|
|
export class CodeSubstituter implements ICodeSubstituter {
|
|
constructor(
|
|
private readonly compiler: IExpressionsCompiler = createSubstituteCompiler(),
|
|
private readonly date = new Date(),
|
|
) {
|
|
|
|
}
|
|
public substitute(code: string, info: IProjectInformation): string {
|
|
if (!code) { throw new Error('undefined code'); }
|
|
if (!info) { throw new Error('undefined info'); }
|
|
const parameters: ParameterValueDictionary = {
|
|
homepage: info.homepage,
|
|
version: info.version,
|
|
date: this.date.toUTCString(),
|
|
};
|
|
const compiledCode = this.compiler.compileExpressions(code, parameters);
|
|
return compiledCode;
|
|
}
|
|
}
|
|
|
|
function createSubstituteCompiler(): IExpressionsCompiler {
|
|
const parsers = [ new ParameterSubstitutionParser() ];
|
|
const parser = new CompositeExpressionParser(parsers);
|
|
const expressionCompiler = new ExpressionsCompiler(parser);
|
|
return expressionCompiler;
|
|
}
|