2021-01-21 07:38:44 +00:00
|
|
|
/**
|
|
|
|
* @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
|
2021-01-21 07:38:44 +00:00
|
|
|
* @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"),
|
2021-12-04 07:25:26 +00:00
|
|
|
join("dist", "modules"),
|
2021-01-21 07:38:44 +00:00
|
|
|
];
|
|
|
|
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:
|
2021-12-04 07:25:26 +00:00
|
|
|
"package.json",
|
2021-01-21 07:38:44 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
export async function generateFolderStructure(
|
|
|
|
additionalArguments: {
|
|
|
|
help: string;
|
|
|
|
type: "string" | "number";
|
|
|
|
name: string | string;
|
|
|
|
defaultValue?: any;
|
|
|
|
}[] = []
|
|
|
|
) {
|
|
|
|
const parser = new ArgumentParser({
|
2022-01-16 19:38:45 +00:00
|
|
|
// version: "1.0.0",
|
|
|
|
add_help: true,
|
2021-12-04 07:25:26 +00:00
|
|
|
description: "Command Line interface, determines the available Packages.",
|
2021-01-21 07:38:44 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
for (const arg of additionalArguments) {
|
2022-01-16 19:38:45 +00:00
|
|
|
parser.add_argument(arg.name, {
|
2021-01-21 07:38:44 +00:00
|
|
|
help: arg.help,
|
2022-01-16 19:38:45 +00:00
|
|
|
default: arg.defaultValue,
|
2021-12-04 07:25:26 +00:00
|
|
|
type: arg.type,
|
2021-01-21 07:38:44 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2022-01-16 19:38:45 +00:00
|
|
|
parser.add_argument("-o", "--output", {
|
2021-01-21 07:38:44 +00:00
|
|
|
help: "Output Folder",
|
2022-01-16 19:38:45 +00:00
|
|
|
default: "./",
|
|
|
|
type: "str",
|
2021-12-04 07:25:26 +00:00
|
|
|
dest: "dir",
|
2021-01-21 07:38:44 +00:00
|
|
|
});
|
|
|
|
|
2022-01-16 19:38:45 +00:00
|
|
|
const args = parser.parse_args();
|
2021-01-21 07:38:44 +00:00
|
|
|
|
|
|
|
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();
|
|
|
|
}
|