node-automator 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/assets/alert.png +0 -0
- package/assets/error.png +0 -0
- package/assets/success.png +0 -0
- package/commands/abort.js +11 -0
- package/commands/alert.js +19 -0
- package/commands/assemble.js +56 -0
- package/commands/assert.js +18 -0
- package/commands/base.js +363 -0
- package/commands/break.js +11 -0
- package/commands/change_filter.js +34 -0
- package/commands/cheerio.js +15 -0
- package/commands/clear_screen.js +14 -0
- package/commands/commit.js +31 -0
- package/commands/compare.js +23 -0
- package/commands/confirm.js +16 -0
- package/commands/continue.js +11 -0
- package/commands/copy.js +14 -0
- package/commands/cursor_up.js +12 -0
- package/commands/date.js +25 -0
- package/commands/debugger.js +11 -0
- package/commands/dingtalk.js +110 -0
- package/commands/disassemble.js +36 -0
- package/commands/divination.js +15 -0
- package/commands/download.js +12 -0
- package/commands/edit.js +83 -0
- package/commands/edit_excel.js +57 -0
- package/commands/env_optional.js +57 -0
- package/commands/eval.js +27 -0
- package/commands/exec_from_file.js +31 -0
- package/commands/export_diff_head.js +31 -0
- package/commands/file_info.js +41 -0
- package/commands/file_size.js +12 -0
- package/commands/files.js +14 -0
- package/commands/first_exist.js +18 -0
- package/commands/flatten.js +18 -0
- package/commands/ftp.js +161 -0
- package/commands/git_commit.js +31 -0
- package/commands/git_export_diff_head.js +13 -0
- package/commands/git_is_dirty.js +13 -0
- package/commands/hash.js +21 -0
- package/commands/http_request.js +12 -0
- package/commands/image_crop.js +19 -0
- package/commands/input.js +37 -0
- package/commands/interval.js +60 -0
- package/commands/is_dirty.js +31 -0
- package/commands/jwt_decode.js +22 -0
- package/commands/list2dict.js +32 -0
- package/commands/log.js +72 -0
- package/commands/loop.js +115 -0
- package/commands/loop_forever.js +66 -0
- package/commands/merge_files.js +39 -0
- package/commands/mgr.js +476 -0
- package/commands/modify.js +44 -0
- package/commands/move.js +14 -0
- package/commands/move_local.js +14 -0
- package/commands/multi_select.js +16 -0
- package/commands/mysql_connect.js +29 -0
- package/commands/mysql_end.js +13 -0
- package/commands/mysql_query.js +19 -0
- package/commands/notify.js +13 -0
- package/commands/open.js +30 -0
- package/commands/parse.js +18 -0
- package/commands/pause.js +15 -0
- package/commands/print.js +47 -0
- package/commands/read_cache.js +12 -0
- package/commands/read_cfg.js +13 -0
- package/commands/read_clipboard.js +19 -0
- package/commands/read_excel.js +17 -0
- package/commands/read_only_excel.js +40 -0
- package/commands/read_plain.js +14 -0
- package/commands/remove.js +14 -0
- package/commands/retrieve.js +17 -0
- package/commands/reveal.js +33 -0
- package/commands/revision_info.js +31 -0
- package/commands/schedule.js +80 -0
- package/commands/select.js +17 -0
- package/commands/send_email.js +25 -0
- package/commands/share_data.js +745 -0
- package/commands/shell.js +13 -0
- package/commands/sleep.js +17 -0
- package/commands/store.js +13 -0
- package/commands/store_optional.js +33 -0
- package/commands/stream.js +16 -0
- package/commands/stringify.js +24 -0
- package/commands/svn_add.js +26 -0
- package/commands/svn_commit.js +49 -0
- package/commands/svn_export_diff_head.js +13 -0
- package/commands/svn_is_dirty.js +13 -0
- package/commands/svn_update.js +27 -0
- package/commands/switch.js +18 -0
- package/commands/temp.js +12 -0
- package/commands/tencent_cos.js +323 -0
- package/commands/test.js +14 -0
- package/commands/title.js +18 -0
- package/commands/tmpdir.js +21 -0
- package/commands/translate.js +58 -0
- package/commands/traversal.js +38 -0
- package/commands/truncate.js +31 -0
- package/commands/truncate_all.js +62 -0
- package/commands/ts_sort.js +18 -0
- package/commands/unzip.js +50 -0
- package/commands/updating_revision.js +28 -0
- package/commands/valid_required.js +31 -0
- package/commands/void.js +10 -0
- package/commands/watch_mail.js +94 -0
- package/commands/web_socket.js +233 -0
- package/commands/which.js +60 -0
- package/commands/write_cache.js +16 -0
- package/commands/write_cfg.js +18 -0
- package/commands/write_clipboard.js +23 -0
- package/commands/write_excel.js +17 -0
- package/commands/write_plain.js +18 -0
- package/commands/zip.js +78 -0
- package/commands/zip_data.js +64 -0
- package/examples/print_env.yml +3 -0
- package/index.js +109 -0
- package/package.json +63 -0
- package/scratch/.gitkeep +0 -0
- package/utils/alert_tool.js +133 -0
- package/utils/base64_tool.js +13 -0
- package/utils/cache/local_cache.js +79 -0
- package/utils/cache/raw_cache.js +47 -0
- package/utils/cache/simple_local_cache.js +33 -0
- package/utils/cache/simple_sqlite_cache.js +43 -0
- package/utils/cache/simple_svn_cache.js +49 -0
- package/utils/cache/svn_cache.js +40 -0
- package/utils/cache_tool.js +53 -0
- package/utils/display_tool.js +85 -0
- package/utils/divination_util.js +555 -0
- package/utils/file_tool.js +529 -0
- package/utils/hash_tool.js +8 -0
- package/utils/interaction_tool.js +228 -0
- package/utils/log_tool.js +190 -0
- package/utils/parse_directive.js +194 -0
- package/utils/parse_tool.js +236 -0
- package/utils/request_tool.js +156 -0
- package/utils/scm_tool.js +108 -0
- package/utils/selection_tool.js +593 -0
- package/utils/shell_tool.js +162 -0
- package/utils/svn_diff/diff_file.js +44 -0
- package/utils/svn_diff/diff_parser.js +55 -0
- package/utils/transform_tool.js +520 -0
package/commands/date.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const { formatDate } = require("../utils/transform_tool");
|
|
2
|
+
const { BaseCommand } = require("./base");
|
|
3
|
+
|
|
4
|
+
class DateCommand extends BaseCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
let data = this.selfData;
|
|
7
|
+
let date = (data && data.date) || new Date();
|
|
8
|
+
if (typeof date === "string") {
|
|
9
|
+
date = new Date(date);
|
|
10
|
+
}
|
|
11
|
+
if (data) {
|
|
12
|
+
if (data.offset) {
|
|
13
|
+
date.setTime(date.getTime() + data.offset);
|
|
14
|
+
}
|
|
15
|
+
if (data.format) {
|
|
16
|
+
date = formatDate(date, data.format);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return date;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
module.exports = {
|
|
24
|
+
DateCommand,
|
|
25
|
+
};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
const {
|
|
2
|
+
doRequest
|
|
3
|
+
} = require("../utils/request_tool");
|
|
4
|
+
const {
|
|
5
|
+
BaseCommand
|
|
6
|
+
} = require("./base");
|
|
7
|
+
|
|
8
|
+
class DingtalkCommand extends BaseCommand {
|
|
9
|
+
async execute() {
|
|
10
|
+
let data = this.selfData;
|
|
11
|
+
let body = {};
|
|
12
|
+
// 要@的目标
|
|
13
|
+
body.at = {
|
|
14
|
+
"atMobiles": data.atMobiles || [],
|
|
15
|
+
"atUserIds": data.atUserIds || [],
|
|
16
|
+
"isAtAll": data.isAtAll || false,
|
|
17
|
+
};
|
|
18
|
+
let atUserSuffix = "";
|
|
19
|
+
atUserSuffix += body.at.atMobiles.map(v => `@${v}`).join(" ");
|
|
20
|
+
// atUserSuffix += body.at.atUserIds.map(v => `@${v}`).join(" ");
|
|
21
|
+
if (atUserSuffix) {
|
|
22
|
+
if (data.msgtype && data.msgtype != "text") {
|
|
23
|
+
atUserSuffix = "\n<font color=#007fff>" + atUserSuffix + "</font>";
|
|
24
|
+
} else {
|
|
25
|
+
atUserSuffix = "\n" + atUserSuffix;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
body.msgtype = data.msgtype;
|
|
29
|
+
switch (data.msgtype) {
|
|
30
|
+
case "markdown": {
|
|
31
|
+
body.markdown = {
|
|
32
|
+
title: data.title || "",
|
|
33
|
+
text: data.content + atUserSuffix,
|
|
34
|
+
};
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case "actionCard": {
|
|
38
|
+
body.actionCard = {
|
|
39
|
+
title: data.title || "",
|
|
40
|
+
text: data.content + atUserSuffix,
|
|
41
|
+
};
|
|
42
|
+
let btns = data.btns || [];
|
|
43
|
+
if (btns.length) {
|
|
44
|
+
if (btns.length == 1) {
|
|
45
|
+
body.actionCard.singleTitle = btns[0].title;
|
|
46
|
+
body.actionCard.singleURL = btns[0].url;
|
|
47
|
+
} else {
|
|
48
|
+
body.actionCard.btnOrientation = "1";
|
|
49
|
+
body.actionCard.btns = btns.map(v => {
|
|
50
|
+
return {
|
|
51
|
+
title: v.title,
|
|
52
|
+
actionURL: v.url
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
case 'feedCard': {
|
|
60
|
+
body.feedCard = {};
|
|
61
|
+
let btns = data.btns || [];
|
|
62
|
+
if (btns.length) {
|
|
63
|
+
body.feedCard.links = btns.map(v => {
|
|
64
|
+
return {
|
|
65
|
+
title: v.title,
|
|
66
|
+
messageURL: v.url,
|
|
67
|
+
picURL: v.image,
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case "text":
|
|
74
|
+
default: {
|
|
75
|
+
// content 中必须要有关键词
|
|
76
|
+
body.text = { content: data.content };
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
let webhook = data.webhook;
|
|
81
|
+
// 使用 加签
|
|
82
|
+
if (data.secret) {
|
|
83
|
+
let timestamp = Date.now();
|
|
84
|
+
let str2sign = timestamp + '\n' + data.secret;
|
|
85
|
+
const sign = encodeURIComponent(require("crypto").createHmac('sha256', data.secret).update(str2sign).digest('base64'));
|
|
86
|
+
webhook += `×tamp=${timestamp}&sign=${sign}`;
|
|
87
|
+
}
|
|
88
|
+
let ret = await doRequest({
|
|
89
|
+
target: {
|
|
90
|
+
url: webhook,
|
|
91
|
+
},
|
|
92
|
+
options: {
|
|
93
|
+
method: 'POST',
|
|
94
|
+
headers: {
|
|
95
|
+
"Content-Type": "application/json",
|
|
96
|
+
},
|
|
97
|
+
json: body,
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
return ret;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
getRequireContent() {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
module.exports = {
|
|
109
|
+
DingtalkCommand,
|
|
110
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const {
|
|
2
|
+
BaseCommand
|
|
3
|
+
} = require("./base");
|
|
4
|
+
|
|
5
|
+
class DisassembleCommand extends BaseCommand {
|
|
6
|
+
async execute() {
|
|
7
|
+
let delimiter = this.selfData.delimiter;
|
|
8
|
+
if (delimiter) {
|
|
9
|
+
delimiter = new RegExp(delimiter);
|
|
10
|
+
}
|
|
11
|
+
let props = this.selfData.props;
|
|
12
|
+
if (delimiter && typeof props === "string") {
|
|
13
|
+
props = props.split(delimiter);
|
|
14
|
+
}
|
|
15
|
+
let num_item = this.content.length;
|
|
16
|
+
return props.map((prop, prop_index) => {
|
|
17
|
+
return this.content.map(v => {
|
|
18
|
+
return v[prop];
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
getRequiredParams() {
|
|
24
|
+
return [
|
|
25
|
+
'props'
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
getRequireContent() {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
module.exports = {
|
|
35
|
+
DisassembleCommand,
|
|
36
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const { generateAndParseDiagram, searchDiagram } = require("../utils/divination_util");
|
|
2
|
+
const { BaseCommand } = require("./base");
|
|
3
|
+
|
|
4
|
+
class DivinationCommand extends BaseCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
if (this.selfData?.name) {
|
|
7
|
+
return searchDiagram(this.selfData?.name);
|
|
8
|
+
}
|
|
9
|
+
return generateAndParseDiagram(this.selfData?.raw);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
module.exports = {
|
|
14
|
+
DivinationCommand,
|
|
15
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const { doRequest } = require("../utils/request_tool");
|
|
2
|
+
const { BaseCommand } = require("./base");
|
|
3
|
+
|
|
4
|
+
class DownloadCommand extends BaseCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
return await doRequest(this.selfData);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
DownloadCommand,
|
|
12
|
+
};
|
package/commands/edit.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
const { warn } = require("../utils/log_tool");
|
|
2
|
+
const { format, toArray } = require("../utils/transform_tool");
|
|
3
|
+
const { BaseCommand } = require("./base");
|
|
4
|
+
|
|
5
|
+
class EditCommand extends BaseCommand {
|
|
6
|
+
async execute() {
|
|
7
|
+
let content = this.content;
|
|
8
|
+
/**
|
|
9
|
+
* @type { {type: string, data: any}[] }
|
|
10
|
+
*/
|
|
11
|
+
let actions = this.selfData.actions;
|
|
12
|
+
if (typeof actions === "string") {
|
|
13
|
+
// delete group,update group 6599,update ios_pay true,delete ios_pay
|
|
14
|
+
actions = actions.split(",").filter(Boolean).map(action => {
|
|
15
|
+
let hashIdx = action.indexOf("#");
|
|
16
|
+
let desc = "";
|
|
17
|
+
if (hashIdx >= 0) {
|
|
18
|
+
desc = action.substring(hashIdx + 1);
|
|
19
|
+
action = action.substring(0, hashIdx);
|
|
20
|
+
} else {
|
|
21
|
+
desc = action;
|
|
22
|
+
}
|
|
23
|
+
let [type, prop, val] = action.split(" ");
|
|
24
|
+
switch(type) {
|
|
25
|
+
case "delete": {
|
|
26
|
+
return { type, desc, data: { [prop]: true } };
|
|
27
|
+
}
|
|
28
|
+
case "update": {
|
|
29
|
+
return { type, desc, data: { [prop]: eval(val) } };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}).filter(v => v);
|
|
33
|
+
}
|
|
34
|
+
actions.forEach(action => {
|
|
35
|
+
let actionType = action.type;
|
|
36
|
+
let actionData = action.data;
|
|
37
|
+
let actionDesc = action.desc;
|
|
38
|
+
switch (actionType) {
|
|
39
|
+
case "delete": {
|
|
40
|
+
if (actionData instanceof Array) {
|
|
41
|
+
actionData.forEach(key => {
|
|
42
|
+
delete content[key];
|
|
43
|
+
});
|
|
44
|
+
} else if (typeof actionData === "object") {
|
|
45
|
+
Object.keys(actionData).forEach(key => {
|
|
46
|
+
if (actionData[key]) {
|
|
47
|
+
delete content[key];
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
} else {
|
|
51
|
+
warn(`未支持的 edit - delete 参数`);
|
|
52
|
+
}
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
case "update": {
|
|
56
|
+
for (let key in actionData) {
|
|
57
|
+
content[key] = actionData[key];
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
default: {
|
|
62
|
+
warn(`未支持的 edit 类型 ${actionType}`);
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return actions;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
getRequireContent() {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
getRequiredParams() {
|
|
75
|
+
return [
|
|
76
|
+
"actions",
|
|
77
|
+
];
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
module.exports = {
|
|
82
|
+
EditCommand,
|
|
83
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const { warn } = require("../utils/log_tool");
|
|
2
|
+
const { format, toArray } = require("../utils/transform_tool");
|
|
3
|
+
const { BaseCommand } = require("./base");
|
|
4
|
+
|
|
5
|
+
class EditExcelCommand extends BaseCommand {
|
|
6
|
+
async execute() {
|
|
7
|
+
const Excel = require("exceljs");
|
|
8
|
+
/**
|
|
9
|
+
* @type {Excel.Workbook}
|
|
10
|
+
*/
|
|
11
|
+
let workbook = this.content;
|
|
12
|
+
/**
|
|
13
|
+
* @type { {type: string, data: any}[] }
|
|
14
|
+
*/
|
|
15
|
+
let actions = this.selfData.actions;
|
|
16
|
+
actions.forEach(action => {
|
|
17
|
+
let data = action.data;
|
|
18
|
+
switch (action.type) {
|
|
19
|
+
case "insert_row": {
|
|
20
|
+
let sheet = workbook.getWorksheet(data.sheet ?? 1);
|
|
21
|
+
let row = data.row ?? 0;
|
|
22
|
+
if (row < 1) {
|
|
23
|
+
row = sheet.rowCount + 1 + row;
|
|
24
|
+
}
|
|
25
|
+
sheet.insertRow(row, data.value);
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
case "modify": {
|
|
29
|
+
let sheet = workbook.getWorksheet(data.sheet ?? 1);
|
|
30
|
+
let cell = sheet.getCell(data.cell);
|
|
31
|
+
if (cell) {
|
|
32
|
+
cell.value = data.value;
|
|
33
|
+
}
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
default: {
|
|
37
|
+
warn(`未支持的 edit_excel 类型 ${action.type}`);
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
getRequireContent() {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
getRequiredParams() {
|
|
49
|
+
return [
|
|
50
|
+
"actions",
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
module.exports = {
|
|
56
|
+
EditExcelCommand,
|
|
57
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const { decode } = require('../utils/base64_tool');
|
|
2
|
+
const { info } = require('../utils/log_tool');
|
|
3
|
+
const { parse } = require('../utils/parse_tool');
|
|
4
|
+
const { BaseCommand } = require("./base");
|
|
5
|
+
|
|
6
|
+
class EnvOptionalCommand extends BaseCommand {
|
|
7
|
+
async execute() {
|
|
8
|
+
let data = this.selfData;
|
|
9
|
+
let updatedData = {};
|
|
10
|
+
for (let k in data) {
|
|
11
|
+
const envVal = this.shareData.ENV[k];
|
|
12
|
+
let defValue = data[k];
|
|
13
|
+
if (defValue == null) {
|
|
14
|
+
defValue = "";
|
|
15
|
+
}
|
|
16
|
+
if (envVal == null) {
|
|
17
|
+
updatedData[k] = defValue;
|
|
18
|
+
} else {
|
|
19
|
+
let toType = typeof defValue;
|
|
20
|
+
switch(toType) {
|
|
21
|
+
case 'string': {
|
|
22
|
+
updatedData[k] = envVal;
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
case 'number': {
|
|
26
|
+
updatedData[k] = parseFloat(envVal);
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
case 'boolean': {
|
|
30
|
+
if (envVal && envVal !== "false" && envVal !== "0") {
|
|
31
|
+
updatedData[k] = true;
|
|
32
|
+
} else {
|
|
33
|
+
updatedData[k] = false;
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case 'object': {
|
|
38
|
+
updatedData[k] = await parse(envVal, "yaml");
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
default: {
|
|
42
|
+
throw `unsupport type ${toType}`;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (let k in updatedData) {
|
|
49
|
+
this.shareData[k] = updatedData[k];
|
|
50
|
+
}
|
|
51
|
+
return updatedData;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
module.exports = {
|
|
56
|
+
EnvOptionalCommand,
|
|
57
|
+
};
|
package/commands/eval.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const { eval_code } = require("./share_data");
|
|
2
|
+
const { whisper, vital, getPrint, warn, error } = require("../utils/log_tool");
|
|
3
|
+
const { BaseCommand } = require("./base");
|
|
4
|
+
|
|
5
|
+
class EvalCommand extends BaseCommand {
|
|
6
|
+
async execute() {
|
|
7
|
+
let data = this.selfData;
|
|
8
|
+
let code = data && data.code;
|
|
9
|
+
try {
|
|
10
|
+
let result = eval_code(code);
|
|
11
|
+
return result;
|
|
12
|
+
} catch (err) {
|
|
13
|
+
// warn(getPrint(data, true));
|
|
14
|
+
throw err;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
getRequiredParams() {
|
|
19
|
+
return [
|
|
20
|
+
'code',
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
module.exports = {
|
|
26
|
+
EvalCommand,
|
|
27
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const { get_file_list, read_cfg, get_fst_file } = require("../utils/file_tool");
|
|
2
|
+
const { whisper, info, warn, success, vital } = require("../utils/log_tool");
|
|
3
|
+
const { toArray } = require("../utils/transform_tool");
|
|
4
|
+
const { BaseCommand } = require("./base");
|
|
5
|
+
|
|
6
|
+
class ExecFromFileCommand extends BaseCommand {
|
|
7
|
+
async execute() {
|
|
8
|
+
let data = this.selfData;
|
|
9
|
+
let content = this.content;
|
|
10
|
+
let srcs = toArray(data.src);
|
|
11
|
+
for (let i = 0; i < srcs.length; i++) {
|
|
12
|
+
let src = srcs[i];
|
|
13
|
+
src = get_fst_file(src);
|
|
14
|
+
if (!src) {
|
|
15
|
+
throw (`配置文件未找到 ${srcs[i]}`);
|
|
16
|
+
}
|
|
17
|
+
if (!data.force && this.globalData.executed_cfg.includes(src)) {
|
|
18
|
+
info(`不执行重复配置 ${src}`);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
info(`执行配置文件 ${src}`);
|
|
22
|
+
this.globalData.executed_cfg.push(src);
|
|
23
|
+
let cfg = await read_cfg(src, data.type);
|
|
24
|
+
await this.exec(cfg, this.depth + 1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = {
|
|
30
|
+
ExecFromFileCommand,
|
|
31
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const { vital } = require("../utils/log_tool");
|
|
2
|
+
const { BaseCommand } = require("./base");
|
|
3
|
+
|
|
4
|
+
class ExportDiffHeadCommand extends BaseCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
switch (this.selfData.type) {
|
|
7
|
+
case 'svn': {
|
|
8
|
+
return await this.forward('svn_export_diff_head');
|
|
9
|
+
break;
|
|
10
|
+
}
|
|
11
|
+
case 'git': {
|
|
12
|
+
return await this.forward('git_export_diff_head');
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
default: {
|
|
16
|
+
throw (`不支持的类型 ${this.selfData.type}`);
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getRequiredParams() {
|
|
23
|
+
return [
|
|
24
|
+
"type",
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = {
|
|
30
|
+
ExportDiffHeadCommand,
|
|
31
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const { get_fst_file } = require("../utils/file_tool");
|
|
2
|
+
const { BaseCommand } = require("./base");
|
|
3
|
+
const path = require("path");
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const sizeOf = require('image-size');
|
|
6
|
+
|
|
7
|
+
class FileInfoCommand extends BaseCommand {
|
|
8
|
+
async execute() {
|
|
9
|
+
let file = get_fst_file(this.selfData.src);
|
|
10
|
+
if (!file) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
let dimensions;
|
|
14
|
+
try {
|
|
15
|
+
dimensions = sizeOf(file);
|
|
16
|
+
} catch (err) {
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
let stat = fs.statSync(file);
|
|
20
|
+
let ret = {
|
|
21
|
+
fullpath: file,
|
|
22
|
+
extname: path.extname(file),
|
|
23
|
+
basename: path.basename(file),
|
|
24
|
+
basename_noext: path.basename(file, path.extname(file)),
|
|
25
|
+
dirname: path.dirname(file),
|
|
26
|
+
isDirectory: stat.isDirectory(),
|
|
27
|
+
isFile: stat.isFile(),
|
|
28
|
+
atime: stat.atime,
|
|
29
|
+
mtime: stat.mtime,
|
|
30
|
+
ctime: stat.ctime,
|
|
31
|
+
size: stat.size,
|
|
32
|
+
size_kb: +(stat.size / 1024).toFixed(2),
|
|
33
|
+
dimensions: dimensions,
|
|
34
|
+
};
|
|
35
|
+
return ret;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
module.exports = {
|
|
40
|
+
FileInfoCommand,
|
|
41
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const { get_file_size } = require("../utils/file_tool");
|
|
2
|
+
const { BaseCommand } = require("./base");
|
|
3
|
+
|
|
4
|
+
class FileSizeCommand extends BaseCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
return get_file_size(this.selfData.src);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
FileSizeCommand,
|
|
12
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const { get_file_list } = require("../utils/file_tool");
|
|
2
|
+
const { BaseCommand } = require("./base");
|
|
3
|
+
|
|
4
|
+
class FilesCommand extends BaseCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
let data = this.selfData;
|
|
7
|
+
let ret = get_file_list(data.src, data.no_glob, data.only_file, data.real);
|
|
8
|
+
return ret;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
module.exports = {
|
|
13
|
+
FilesCommand,
|
|
14
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const { get_fst_file } = require("../utils/file_tool");
|
|
2
|
+
const { error, warn, setLastError } = require("../utils/log_tool");
|
|
3
|
+
const { BaseCommand } = require("./base");
|
|
4
|
+
|
|
5
|
+
class FirstExistCommand extends BaseCommand {
|
|
6
|
+
async execute() {
|
|
7
|
+
let data = this.selfData;
|
|
8
|
+
let ret = get_fst_file(data.src, data.real, data.noGlob);
|
|
9
|
+
if (!ret) {
|
|
10
|
+
setLastError(`未找到文件 ${data.src}`);
|
|
11
|
+
}
|
|
12
|
+
return ret;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
module.exports = {
|
|
17
|
+
FirstExistCommand,
|
|
18
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const { flatten } = require("../utils/transform_tool");
|
|
2
|
+
const { BaseCommand } = require("./base");
|
|
3
|
+
|
|
4
|
+
class FlattenCommand extends BaseCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
let data = this.selfData;
|
|
7
|
+
let content = this.content;
|
|
8
|
+
return flatten(content);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
getRequireContent() {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
module.exports = {
|
|
17
|
+
FlattenCommand,
|
|
18
|
+
};
|