-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommand.js
More file actions
118 lines (113 loc) · 2.74 KB
/
command.js
File metadata and controls
118 lines (113 loc) · 2.74 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
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
var fs = require("fs");
var request = require("request");
var prompt = "prompt > ";
// require("chalk")
// chalk is a standard library to add color to terminal
// if you require a folder, it assumes you are looking for an index.js file
var print = function (txt, noline) {
process.stdout.write((noline ? "" :"\n") + (txt || prompt));
};
var pwd = function (files, done) {
var result = __dirname;
print(result);
done(result);
};
var date = function (files, done) {
var result = Date();
print(result);
done(result);
};
var echo = function (files, done) {
var result = files.join(" ");
print(result);
done(result);
};
var forEachFile = function (func, n) {
func = typeof func === "function" ? func : function (d) { return d;};
return function (files, done) {
var arr = 0;
n || (n = 10);
files.forEach(function(filezzz, i) {
fs.readFile(filezzz, "utf8", function (err, data) {
if (err) throw err;
files.length > 1 && print("\n\n==> " + files[i] + " <==\n\n", false);
var result = func(data, n);
print(result);
arr++;
if(arr === files.length) done(result);
});
});
};
};
var cat = forEachFile();
var head = forEachFile(function (data, n) {
return data.split("\n").slice(0,n).join("\n");
});
var tail = forEachFile(function (data, n) {
return data.split("\n").slice(0 - n).join("\n");
});
var sort = forEachFile(function (data, n) {
return data.split("\n").sort().join("\n");
});
var wc = forEachFile(function (data) {
return data.split("\n").length - 1;
});
var uniq = forEachFile(function (data) {
var result = [];
var j = 0, newData = data.split("\n"),
length = newData.length - 1;
for(; j <= length; j++) {
if(newData[j - 1] !== newData[j]) {
result.push(newData[j]);
}
}
return result.join("\n");
});
module.exports = {
"newPrompt": print,
"pwd": pwd,
"date": date,
ls: function (files, done) {
fs.readdir(".", function (err, files) {
if(err) throw err;
var result = [];
files.forEach(function (file) {
result.push(file.toString());
});
process.stdout.write(result.join("\n"));
done(result);
});
},
"echo": echo,
"cat": cat,
"head": head,
"tail": tail,
"sort": sort,
"wc": wc,
"uniq": uniq,
"curl": function(files, done) {
request.get({url: "http://" + files[0]}, function (error, response, body) {
if (!error && response.statusCode == 200) {
process.stdout.write(body);
}
});
},
"find": function (files, done) {
var arr = 0;
actions.ls(files || ".", function(files) {
files.forEach(function (f) {
fs.stat(f, function(err, filezzz) {
if(err) throw err;
if(filezzz.isDirectory()) {
actions.find(f, done);
} else {
process.stdout.write("\n" + f);
}
});
});
done();
});
},
"|": function (files, done) {
}
};