-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathindex.js
More file actions
executable file
·53 lines (53 loc) · 1.31 KB
/
index.js
File metadata and controls
executable file
·53 lines (53 loc) · 1.31 KB
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
#!/usr/bin/env node
const path = require('path')
const fs = require('fs')
require('dotenv').config({path: path.resolve(process.cwd(), '.bit')})
const bin = {}
const keywords = ['cat', 'echo', 'route', 'useradd', 'to']
const tokenize = function(tokens) {
let result = []
let bundle = []
for(let index=0; index<tokens.length; index++) {
let token = tokens[index]
if (keywords.includes(token.toLowerCase())) {
token = token.toLowerCase()
}
if (['to'].includes(token)) {
result.push(bundle)
result.push([token])
bundle = []
} else {
bundle.push(token)
}
}
result.push(bundle)
return result
}
const parse = function(sequences) {
let cmd = sequences[0][0]
return {
cmd: bin[cmd],
params: sequences
}
}
if (require.main === module) {
if (process.argv.length >= 3) {
fs.readdir(__dirname + "/bin", async function(err, items) {
for (let i=0; i<items.length; i++) {
let name = items[i].split('.')[0];
bin[name] = require(__dirname + "/bin/" + items[i])
}
let tok = tokenize(process.argv.slice(2))
let program = parse(tok)
if (program) {
program.cmd(program.params)
} else {
console.log("Error: command doesn't exist")
}
});
}
}
module.exports = {
tokenize: tokenize,
parse: parse
}