-
-
Notifications
You must be signed in to change notification settings - Fork 197
/
Copy pathmicro-templating-service.ts
47 lines (41 loc) · 2.03 KB
/
micro-templating-service.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import * as util from "util";
import * as os from "os";
import * as constants from "../../constants";
import { formatListOfNames } from '../helpers';
export class MicroTemplateService implements IMicroTemplateService {
private dynamicCallRegex: RegExp;
constructor(private $injector: IInjector,
private $testInitializationService: ITestInitializationService) {
// Injector's dynamicCallRegex doesn't have 'g' option, which we need here.
// Use ( ) in order to use $1 to get whole expression later
this.dynamicCallRegex = new RegExp(util.format("(%s)", this.$injector.dynamicCallRegex.source), "g");
}
public async parseContent(data: string, options: { isHtml: boolean }): Promise<string> {
const localVariables = this.getLocalVariables(options);
const compiledTemplate = _.template(data.replace(this.dynamicCallRegex, "this.$injector.getDynamicCallData(\"$1\")"));
// When debugging parsing, uncomment the line below:
// console.log(compiledTemplate.source);
return await compiledTemplate.apply(this, [localVariables]);
}
private isPlatform(...args: string[]): boolean {
const platform = os.platform().toLowerCase();
return _.some(args, arg => arg.toLowerCase() === platform);
}
private getLocalVariables(options: { isHtml: boolean }): IDictionary<any> {
const isHtml = options.isHtml;
// in html help we want to show all help. Only CONSOLE specific help(wrapped in if(isConsole) ) must be omitted
const localVariables: IDictionary<any> = {
constants
};
localVariables["isLinux"] = isHtml || this.isPlatform("linux");
localVariables["isWindows"] = isHtml || this.isPlatform("win32");
localVariables["isMacOS"] = isHtml || this.isPlatform("darwin");
localVariables["isConsole"] = !isHtml;
localVariables["isHtml"] = isHtml;
localVariables["formatListOfNames"] = formatListOfNames;
localVariables["getUnitTestingFrameworkNames"] = this.$testInitializationService.getFrameworkNames;
localVariables["isJekyll"] = false;
return localVariables;
}
}
$injector.register("microTemplateService", MicroTemplateService);