import path = require("path"); import * as fs from "fs"; import {Logger} from "../logging/Logger"; const fsPromises = fs.promises; interface ProjectConfigurationInterface { name: string; main: string; } export class ProjectConfiguration { public static readonly configurationFileName: string = '.bunnyHopper.json'; private constructor(public readonly config: ProjectConfigurationInterface) { } public static async read(directory: string): Promise { const configPath: string = path.resolve(directory, ProjectConfiguration.configurationFileName); if (await this.validate(configPath)) { const config = require(configPath); return new ProjectConfiguration(config); } Logger.error(`Could not find a valid configuration in ${directory} :(`); process.exit(1); } public static create(name: string): ProjectConfiguration { const config: ProjectConfigurationInterface = { name: name, main: 'main.ejs' }; return new ProjectConfiguration(config); } private static async validate(configPath: string): Promise { let fileExists: boolean = true; await fsPromises.access(configPath, fs.constants.F_OK).catch(() => { fileExists = false; }); if (!fileExists) { return false; } return true; } public serialize(): string { return JSON.stringify(this.config, null, 4) + '\n'; } }