nope/lib/cli/generateFolderStructure.ts

104 lines
2.2 KiB
TypeScript
Raw Normal View History

/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2021-01-18 17:24:49
2021-01-21 15:20:59 +00:00
* @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",
2021-01-21 15:20:59 +00:00
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();
}