nope/lib/cli/generateFolderStructure.ts

85 lines
1.9 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";
2022-01-17 17:53:06 +00:00
const FOLDERS_TO_CREATE = ["config", "modules"];
const BASE_FOLDER = __dirname;
const FILES_TO_COPY = [
// Config-Files
"tsconfig.json",
2022-01-17 17:06:10 +00:00
"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,
2021-12-04 07:25:26 +00:00
description: "Command Line interface, determines the available Packages.",
});
for (const arg of additionalArguments) {
parser.add_argument(arg.name, {
help: arg.help,
default: arg.defaultValue,
2021-12-04 07:25:26 +00:00
type: arg.type,
});
}
parser.add_argument("-o", "--output", {
help: "Output Folder",
default: "./",
type: "str",
2021-12-04 07:25:26 +00:00
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();
}