UNPKG

cbt-game-generator

Version:

Configuration generator for CBT animation apps

69 lines (62 loc) 2.27 kB
import * as fs from 'fs'; import * as path from 'path'; export class MainGenerator { constructor( private gamePath: string, private gameName: string, private numberOfVariants: number, private numberOfSubLos: number ) {} generate(): void { const mainContent = `import { useLocation } from "react-router-dom"; import { T${this.gameName} } from "./types/tagTypes"; import { E${this.gameName}Variants } from "./constants/variantsConfig"; ${this.generateImports()} export default function Main({ children, }: { children: (gameWithVariantConfig: T${this.gameName}) => void; }) { const location = useLocation(); const pathSegments = location.pathname.split("/").filter(Boolean); const variantId = pathSegments[pathSegments.length - 1]; // Last segment let gameWithVariantConfig; switch (variantId) { ${this.generateSwitchCases()} default: console.warn("Unknown Game ID"); break; } return <>{children(gameWithVariantConfig!)}</>; }`; fs.writeFileSync(path.join(this.gamePath, 'Main.tsx'), mainContent); } private generateImports(): string { const imports: string[] = []; for (let subLoIndex = 0; subLoIndex < this.numberOfSubLos; subLoIndex++) { const startVariant = subLoIndex * this.numberOfVariants + 1; for (let variantIndex = 0; variantIndex < this.numberOfVariants; variantIndex++) { const variantNumber = startVariant + variantIndex; imports.push( `import { ${this.gameName}V${variantNumber} } from "./configuration/variants-config/sub-lo-${subLoIndex + 1}/${this.gameName}V${variantNumber}";` ); } } return imports.join('\n'); } private generateSwitchCases(): string { const cases: string[] = []; for (let subLoIndex = 0; subLoIndex < this.numberOfSubLos; subLoIndex++) { const startVariant = subLoIndex * this.numberOfVariants + 1; for (let variantIndex = 0; variantIndex < this.numberOfVariants; variantIndex++) { const variantNumber = startVariant + variantIndex; cases.push( ` case E${this.gameName}Variants.V${variantNumber}: gameWithVariantConfig = ${this.gameName}V${variantNumber}; break;` ); } } return cases.join('\n'); } }