/** * @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", "open-api", "pages", join("public", "nope"), join("dist", "modules") ]; const BASE_FOLDER = __dirname; const FILES_TO_COPY = [ // Public-Files, like logo etc. "/public/nope/logo_light.png", "/public/nope/logo.png", // Default-Pages "/pages/_app.tsx", "/pages/index.tsx", // Config-Files "tsconfig.json", "tsconfigBackend.json", // Doc-Files: "jsdoc.json", // NextJS "next.config.js", "next-env.d.ts", // Package File: "package.json" ]; export async function generateFolderStructure( additionalArguments: { help: string; type: "string" | "number"; name: string | string; defaultValue?: any; }[] = [] ) { const parser = new ArgumentParser({ version: "1.0.0", addHelp: true, description: "Command Line interface, determines the available Packages." }); for (const arg of additionalArguments) { parser.addArgument(arg.name, { help: arg.help, defaultValue: arg.defaultValue, type: arg.type }); } parser.addArgument(["-o", "--output"], { help: "Output Folder", defaultValue: "./", type: "string", dest: "dir" }); const args = parser.parseArgs(); 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(); }