/** * @author Martin Karkowski * @email m.karkowski@zema.de * @create date 2020-11-09 13:27:58 * @modify date 2020-11-10 16:20:05 * @desc [description] */ import { ArgumentParser } from "argparse"; import { readFile, writeFile } from "fs/promises"; import { extractDefinitions } from "../analyzers/typescript/analyzeTypescriptFiles"; import { getNopeLogger } from "../logger/getLogger"; import { ISystemElements } from "../types/ISystemElements"; // Define the Main Function. // This function is used as cli tool. const main = async function () { let opts: { inputDir: string; tsConfig: string; tempDir: string; // A Logger. logger?: Logger; } = null; try { const settings = JSON.parse( await readFile("./nopeconfig.json", { encoding: "utf-8" }) ); // Try to read in the default config file. opts = settings.analyzers.typescript; opts.tempDir = settings.tempDir; } catch (error) { opts = {} as any; } const parser = new ArgumentParser({ version: "1.0.0", addHelp: true, description: "Command Line interface, generate the interface based on the project folder." }); parser.addArgument(["-i", "--inputDir"], { help: "Input Folder to Scan", defaultValue: "not-provided", type: "string", dest: "inputDir" }); parser.addArgument(["-t", "--tsConfig"], { help: "Typescript-Settings File to use.", defaultValue: "not-provided", type: "string", dest: "tsConfig" }); parser.addArgument(["-f", "--file"], { help: "File containing all Defintions, which are currently available. If it doenst extists it will be generated", defaultValue: "./config/description.json", type: "string", dest: "file" }); parser.addArgument(["-o", "--overwrite"], { help: "You can extend the existing description file or overwrite it.", defaultValue: true, dest: "overwrite" }); const args = parser.parseArgs(); const logger = getNopeLogger("TS-Analyzer"); if (args.inputDir != "not-provided") { opts.inputDir = args.inputDir; } if (args.inputDir != "not-provided") { opts.tsConfig = args.tsConfig; } logger.debug( "using the following settings: \n" + JSON.stringify(opts, undefined, 4) ); logger.info("scanning: " + opts.inputDir); opts.logger = logger; let definition: ISystemElements = { services: [], modules: [], generalInformationModel: {} }; try { if (!args.overwrite) { // Try to read in the default config file. definition = JSON.parse( await readFile(args.file, { encoding: "utf-8" }) ); } } catch (error) { definition = { services: [], modules: [], generalInformationModel: {} }; } // Extract the Definitions. const res = await extractDefinitions(opts, definition); await writeFile(args.file, JSON.stringify(res, undefined, 4)); logger.info("Defined config in " + args.file); }; main().catch((e) => console.error(e));