@citadelgroup/reporting-cli
Version:
Command line interface to develop custom reports for LeanIX EAM
38 lines (32 loc) • 1.44 kB
text/typescript
import * as chalk from 'chalk';
import { render } from 'ejs';
import * as inquirer from 'inquirer';
import { sync as mkdirpSync } from 'mkdirp';
import * as fs from 'fs';
import * as path from 'path';
import { getProjectDirectoryPath } from './path.helpers';
export class TemplateExtractor {
public extractTemplateFiles(baseTemplateDir: string, answers: inquirer.Answers): void {
console.log(chalk.green('Extracting template files...'));
this.extractTemplateDir(baseTemplateDir, baseTemplateDir, answers);
}
private extractTemplateDir(templateDir: string, baseTemplateDir: string, answers: inquirer.Answers) {
fs.readdirSync(templateDir).forEach((file) => {
const filePath = path.resolve(templateDir, file);
const isDir = fs.lstatSync(filePath).isDirectory();
if (isDir) {
this.extractTemplateDir(filePath, baseTemplateDir, answers);
} else {
this.extractTemplateFile(filePath, baseTemplateDir, answers);
}
});
}
private extractTemplateFile(sourcePath: string, baseTemplateDir: string, answers: inquirer.Answers) {
const destPath = sourcePath.replace(baseTemplateDir, getProjectDirectoryPath()).replace(/\.ejs$/, '');
console.log(sourcePath, destPath);
const template = fs.readFileSync(sourcePath).toString('utf-8');
const result = render(template, answers);
mkdirpSync(path.dirname(destPath));
fs.writeFileSync(destPath, result);
}
}