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
|
process.on('uncaughtException', async (e) => {
global.c = (await import('chalk')).default;
if (!fs.existsSync(os.homedir() + "/.twilight/crashes")) {
fs.mkdirSync(os.homedir() + "/.twilight/crashes")
}
let date = new Date().toISOString().replace(/[^a-zA-Z0-9-]/gm, "-");
fs.writeFileSync(require('os').homedir() + "/.twilight/crashes/" + date + ".txt", e.stack);
console.log(c.red("error:") + " an internal error occurred, did you forget to run 'twi update'?");
console.log(" additionally, a crash report has been saved to:\n " + require('os').homedir() + (require('os').platform() === "win32" ? "\\" : "/") + ".twilight" + (require('os').platform() === "win32" ? "\\" : "/") + "crashes" + (require('os').platform() === "win32" ? "\\" : "/") + date + ".txt")
process.exit(2);
})
try {
(async () => {
global.yargs = require('yargs/yargs');
const { hideBin } = require('yargs/helpers');
global.git = require('simple-git');
global.ora = (await import('ora')).default;
global.c = (await import('chalk')).default;
global.fs = require('fs');
global.os = require('os');
global.axios = require('axios');
global.moment = require('moment');
global.prompts = require('prompts').prompts;
if (!fs.existsSync(os.homedir() + "/.twilight")) {
fs.mkdirSync(os.homedir() + "/.twilight")
}
if (!fs.existsSync(os.homedir() + "/.twilight/packages")) {
fs.mkdirSync(os.homedir() + "/.twilight/packages")
}
if (!fs.existsSync(os.homedir() + "/.twilight/crashes")) {
fs.mkdirSync(os.homedir() + "/.twilight/crashes")
}
if (!fs.existsSync(os.homedir() + "/.twilight/binaries")) {
fs.mkdirSync(os.homedir() + "/.twilight/binaries")
}
if (!fs.existsSync(os.homedir() + "/.twilight/installed.json")) {
fs.writeFileSync(os.homedir() + "/.twilight/installed.json", "[]");
} else {
fs.writeFileSync(os.homedir() + "/.twilight/installed.json", JSON.stringify(JSON.parse(fs.readFileSync(os.homedir() + "/.twilight/installed.json").toString()).filter(i => i !== null)));
}
global.home = os.homedir() + "/.twilight";
global.die = (text, code) => {
fs.rmSync(home + "/runtime.pid");
if (text) {
console.log(text);
if (code) {
process.exit(code);
} else {
process.exit();
}
} else {
if (code) {
process.exit(code);
} else {
process.exit();
}
}
}
let pargv = process.argv;
pargv[1] = "twi";
global.argv = yargs(pargv.slice(2))
.command(["install <package>", "i <package>", "a <package>", "add <package>"], "Install a package")
.command(["reinstall <package>", "ri <package>", "reset <package>", "rs <package>"], "Online reinstall an installed package")
.command(["remove <package>", "r <package>", "del <package>", "rm <package>", "delete <package>", "uninstall <package>", "u <package>"], "Delete a package")
.command(["update", "ud", "fetch", "refresh", "reload", "rl"], "Fetches the repository")
.command(["upgrade [package]", "ug [package]"], "Update one or all package(s)")
.command(["purge <package>", "p <package>", "ori <package>", "ors <package>", "oreset <package>", "oreinstall <package>"], "Offline reinstall an installed package")
.command(["info <package>", "inf <package>", "view <package>", "v <package>", "if <package>"], "Get info about a package")
.command(["list", "l", "ls", "all"], "List all packages in the repository")
.command(["installed", "il", "lil", "lsil", "allil"], "List all installed packages")
.command(["installable", "ia", "lia", "lsia", "allia"], "List all compatible packages")
.help()
.alias("help", "h")
.alias("version", "V")
.example("twi install neutron", "Install Neutron")
.example("twi update", "Update all packages")
.example("twi info ponyfind", "Show info about Ponyfind")
.strictCommands()
.demandCommand(1)
.epilog("Twilight Package Manager v" + require('./package.json').version)
.usage('Usage: twi <command> [arguments...]')
.argv;
if (fs.existsSync(home + "/runtime.pid")) {
let pid = fs.readFileSync(home + "/runtime.pid") - 1 + 1;
try {
process.kill(pid, 0);
die(c.red("error:") + " another instance is running (" + pid + ")");
} catch (e) {
console.log(c.yellow("warn:") + " process was stopped unexpectedly");
}
}
fs.writeFileSync(home + "/runtime.pid", process.pid.toString());
let command = argv._[0];
let aliases = require('./commands/aliases.json');
if ([].concat(Object.keys(aliases).map(i => aliases[i])).flat(1).includes(command)) {
command = Object.keys(aliases).map(i => { if (aliases[i].includes(command)) { return i; } else { return null; } }).filter(i => i !== null)[0];
}
await require('./commands/' + command)(argv);
fs.rmSync(home + "/runtime.pid");
})()
} catch (e) {
console.log("error: an internal error occurred, did you forget to run 'twi update'?");
process.exit(2);
}
|