import { apply, chain, mergeWith, move, renameTemplateFiles, Rule, SchematicContext, template, Tree, url } from "@angular-devkit/schematics"; import path from "path"; import { getPrjSrd } from "../router.gen"; import { removeBlankLines } from "./remove-blank-lines"; export abstract class Generator { abstract get outDir(): string; filesDir: string src = 'src'; urlComp = `../../../../`; constructor(filesDir: string) { this.filesDir = path.dirname(filesDir); } public gen(_options: any): Rule { return (tree: Tree, _context: SchematicContext) => { const rule = chain([ this._gen(_options), removeBlankLines() ]); return rule(tree, _context); }; } private _gen(_options: any): Rule { return (tree: Tree, _context: SchematicContext) => { const appSource = apply(url(`${this.urlComp}${this.src + this.filesDir.split('js')[1].replace(/\\/g, '/')}/files`), [ renameTemplateFiles(), template({..._options, ...getPrjSrd()}), move(tree.getDir(this.outDir).path), ]); return mergeWith(appSource); }; } } export class BackEndGenerator extends Generator { override get outDir() { return `ywtc-output/${getPrjSrd().prjNDashd}-backend`;} } export class FrontEndGenerator extends Generator { override get outDir() { return `ywtc-output/${getPrjSrd().prjNDashd}-frontend`;} } export class E2EGenerator extends FrontEndGenerator { override get outDir() { return `ywtc-output/${getPrjSrd().prjNDashd}-frontend`;} override urlComp = `../../../../../`; }