@leanix/reporting-cli
Version:
Command line interface to develop custom reports for LeanIX EAM
39 lines (33 loc) • 1.44 kB
text/typescript
import type * as inquirer from 'inquirer'
import * as fs from 'node:fs'
import { dirname, resolve } from 'node:path'
import chalk from 'chalk'
import { render } from 'ejs'
import { sync as mkdirpSync } from 'mkdirp'
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 = 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(dirname(destPath))
fs.writeFileSync(destPath, result)
}
}