-
Notifications
You must be signed in to change notification settings - Fork 0
/
kurami.js
78 lines (61 loc) · 1.97 KB
/
kurami.js
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
const fs = require('fs');
const path = require('path');
class Kurami {
constructor() {
this.config;
this.path;
}
getCommandsInfo() {
const commands = fs.readdirSync(this.path)
let cleanCommandsList = this.cleanCommandsList(commands)
return cleanCommandsList.map(commandFile => {
const command = require(path.join(this.path, commandFile))
return {
name: new command().getName(),
description: new command().getDescription(),
fileName: commandFile
}
})
}
cleanCommandsList(commands) {
let cleanCommandsList = []
commands.map(file => {
if (file !== 'BaseCommand.js') {
cleanCommandsList.push(file)
}
})
return cleanCommandsList
}
run(args) {
this.setConfig()
const commands = this.getCommandsInfo()
if (args[0] === "help" || args.length === 0) {
this.runHelp()
}
if (args.length > 0 && args[0] !== "help") {
const command = commands.find(command => command.name === args[0])
if (command) {
const commandFile = require(path.join(this.path, command.fileName))
new commandFile().run()
} else {
console.log('Command not found')
}
}
}
runHelp() {
console.log('Kurami CLI')
console.log('Available commands:')
this.getCommandsInfo().map(command => {
console.log(`- ${command.name} - ${command.description}`)
})
}
setConfig() {
if (!fs.existsSync(path.resolve() + '/kurami.json')) {
console.log('Kurami config file not found.')
return process.exit()
}
this.config = require(path.resolve() + '/kurami.json');
this.path = path.resolve() + '/' + this.config.commandsPath
}
}
module.exports = new Kurami();