/** * @author Martin Karkowski * @email m.karkowski@zema.de * @create date 2021-01-18 17:24:49 * @modify date 2021-01-21 15:45:23 * @desc [description] */ import { ArgumentParser } from "argparse"; import { copyFile } from "fs/promises"; import { join } from "path"; import { createPath } from "../helpers/fileMethods"; import { getNopeLogger } from "../logger/getLogger"; const FOLDERS_TO_CREATE = ["config", "modules"]; const BASE_FOLDER = __dirname; const FILES_TO_COPY = [ // Config-Files "tsconfig.json", "tsconfig.browser.json", // Doc-Files: "jsdoc.json", ]; export async function generateFolderStructure( additionalArguments: { help: string; type: "string" | "number"; name: string | string; defaultValue?: any; }[] = [] ) { const parser = new ArgumentParser({ // version: "1.0.0", add_help: true, description: "Command Line interface, determines the available Packages.", }); for (const arg of additionalArguments) { parser.add_argument(arg.name, { help: arg.help, default: arg.defaultValue, type: arg.type, }); } parser.add_argument("-o", "--output", { help: "Output Folder", default: "./", type: "str", dest: "dir", }); const args = parser.parse_args(); for (const folder of FOLDERS_TO_CREATE) { try { await createPath(join(args.dir, folder)); } catch (e) { // Define a Logger const logger = getNopeLogger("cli"); logger.error("Failed to create directory " + folder); logger.error(e); } } for (const file of FILES_TO_COPY) { try { await copyFile( join(BASE_FOLDER, "..", "..", "..", file), join(args.dir, file) ); } catch (e) { // Define a Logger const logger = getNopeLogger("cli"); logger.error("Failed to copy file " + file); logger.error(e); } } } if (require.main === module) { generateFolderStructure(); }