summaryrefslogtreecommitdiff
path: root/Components/Documentation/index.js
blob: 1b0e132e3f882337baa408917ca6a15c026a7d91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
const fs = require('fs');
const path = require('path');
const chalk = require(__dirname + '/../../MistyCore/node_modules/chalk');
const child_process = require("child_process");
const semver = require(__dirname + '/../../MistyCore/node_modules/semver');

function prettyVersion(version) {
    return version.replace(/^\*$/gm, "<all versions>").replace(/^>=(| *)(\d+\.\d+\.\d+)$/gm, "$2 and later").replace(/^=(| *)(\d+\.\d+\.\d+)$/gm, "$2").replace(/^(\d+\.\d+\.\d+)(| +)-(| +)(\d+\.\d+\.\d+)$/gm, "$1 to $4");
}

module.exports = (arguments) => {
    if (arguments['_finals'].length === 0) {
        console.log(chalk.bgYellow.white("<!>") + " " + chalk.yellow("Missing operand"));
        return;
    }

    let input = arguments['_finals'][0];
    let command = null;

    let commands = global.commands;
    let commandsMetadata = global.commandsMetadata;

    for (let cmd of commands) {
        if (cmd.toLowerCase() === input.toLowerCase()) {
            command = cmd;
            break;
        }

        let metadata = commandsMetadata[commands.indexOf(cmd)];
        if (metadata['aliases'].map(i => i.toLowerCase()).includes(input.toLowerCase())) {
            command = cmd;
            break;
        }
    }

    let metadata = commandsMetadata[commands.indexOf(command)];
    if (!command) {
        console.log(chalk.bgRed.white("<!>") + " " + chalk.red("Command not found: ") + input);
    } else {
        let out = chalk.reset("") + "\n";
        let pack = "*";

        out += chalk.red("  ╔" + "═".repeat(command.length + 2) + "╗\n  ║ " + command + " ║\n  " + "╚" + "═".repeat(command.length + 2) + "╝") + "\n\n";

        out += chalk.magenta("  Name\n  ----") + "\n";
        out += chalk.whiteBright("  " + command + " - " + metadata.description) + "\n\n";

        out += chalk.magenta("  Synopsis\n  --------") + "\n";
        out += chalk.whiteBright("  " + chalk.green(command));

        for (let param of metadata['manual']['parameters']) {
            out += " ";

            if (!param.required) out += "[";
            if (param.value) {
                out += chalk.cyan("-" + param.name) + chalk.magenta(chalk.bgGray("=") + param.value);
            } else {
                out += chalk.magenta("-" + param.name);
            }
            if (!param.required) out += "]";
        }

        if (metadata['manual']['final']) {
            out += " ";

            if (!metadata['manual']['final'].required) out += "[";

            if (metadata['manual']['final']['command']) {
                out += chalk.yellow(metadata['manual']['final'].name);
            } else {
                out += metadata['manual']['final'].name;
            }

            if (metadata['manual']['final'].multiple) out += " ...";
            if (!metadata['manual']['final'].required) out += "]";
        }

        out += "\n";

        for (let alias of metadata.aliases) {
            out += chalk.whiteBright("  " + chalk.green(alias) + chalk.gray(" (-> " + command + ")") + "\n");
        }

        if (metadata['manual']['summary'] || metadata['manual']['parameters'].length > 0) {
            out += chalk.magenta("\n  Description\n  -----------") + "\n";
            if (metadata['manual']['summary']) {
                out += "  " + metadata['manual']['summary'].trim();
                for (let param of metadata['manual']['parameters']) {
                    out += "\n\n  ";

                    if (param.value) {
                        out += chalk.cyan("-" + param.name) + chalk.magenta(chalk.bgGray("=") + param.value);
                    } else {
                        out += chalk.magenta("-" + param.name);
                    }

                    out += "\n    " + param.description ?? "<no description>";
                }

                if (metadata['manual']['final']) {
                    out += "\n\n  ";

                    if (metadata['manual']['final']['command']) {
                        out += chalk.yellow(metadata['manual']['final'].name);
                    } else {
                        out += metadata['manual']['final'].name;
                    }

                    if (metadata['manual']['final'].multiple) out += " ...";
                    out += "\n    " + metadata['manual']['final'].description ?? "<no description>";
                }
            }
        }

        if (metadata['manual']['examples']) {
            out += chalk.magenta("\n\n  Examples\n  --------") + "\n";

            for (let example of metadata['manual']['examples']) {
                out += "  " + example.description + "\n    " + chalk.blue("> ") + example.command + "\n";
            }
        }

        out += chalk.magenta("\n\n  Compatibility\n  -------------") + "\n";
        out += "  MistyOS:   " + prettyVersion(metadata['manual']['compatibility']['mistyos']) + "\n";
        out += "  Kernel:    " + prettyVersion(metadata['manual']['compatibility']['kernel']);

        console.log("\n" + out.trim() + "\n");
    }
}