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.
Files changed (143) hide show
  1. package/LICENSE +15 -0
  2. package/assets/alert.png +0 -0
  3. package/assets/error.png +0 -0
  4. package/assets/success.png +0 -0
  5. package/commands/abort.js +11 -0
  6. package/commands/alert.js +19 -0
  7. package/commands/assemble.js +56 -0
  8. package/commands/assert.js +18 -0
  9. package/commands/base.js +363 -0
  10. package/commands/break.js +11 -0
  11. package/commands/change_filter.js +34 -0
  12. package/commands/cheerio.js +15 -0
  13. package/commands/clear_screen.js +14 -0
  14. package/commands/commit.js +31 -0
  15. package/commands/compare.js +23 -0
  16. package/commands/confirm.js +16 -0
  17. package/commands/continue.js +11 -0
  18. package/commands/copy.js +14 -0
  19. package/commands/cursor_up.js +12 -0
  20. package/commands/date.js +25 -0
  21. package/commands/debugger.js +11 -0
  22. package/commands/dingtalk.js +110 -0
  23. package/commands/disassemble.js +36 -0
  24. package/commands/divination.js +15 -0
  25. package/commands/download.js +12 -0
  26. package/commands/edit.js +83 -0
  27. package/commands/edit_excel.js +57 -0
  28. package/commands/env_optional.js +57 -0
  29. package/commands/eval.js +27 -0
  30. package/commands/exec_from_file.js +31 -0
  31. package/commands/export_diff_head.js +31 -0
  32. package/commands/file_info.js +41 -0
  33. package/commands/file_size.js +12 -0
  34. package/commands/files.js +14 -0
  35. package/commands/first_exist.js +18 -0
  36. package/commands/flatten.js +18 -0
  37. package/commands/ftp.js +161 -0
  38. package/commands/git_commit.js +31 -0
  39. package/commands/git_export_diff_head.js +13 -0
  40. package/commands/git_is_dirty.js +13 -0
  41. package/commands/hash.js +21 -0
  42. package/commands/http_request.js +12 -0
  43. package/commands/image_crop.js +19 -0
  44. package/commands/input.js +37 -0
  45. package/commands/interval.js +60 -0
  46. package/commands/is_dirty.js +31 -0
  47. package/commands/jwt_decode.js +22 -0
  48. package/commands/list2dict.js +32 -0
  49. package/commands/log.js +72 -0
  50. package/commands/loop.js +115 -0
  51. package/commands/loop_forever.js +66 -0
  52. package/commands/merge_files.js +39 -0
  53. package/commands/mgr.js +476 -0
  54. package/commands/modify.js +44 -0
  55. package/commands/move.js +14 -0
  56. package/commands/move_local.js +14 -0
  57. package/commands/multi_select.js +16 -0
  58. package/commands/mysql_connect.js +29 -0
  59. package/commands/mysql_end.js +13 -0
  60. package/commands/mysql_query.js +19 -0
  61. package/commands/notify.js +13 -0
  62. package/commands/open.js +30 -0
  63. package/commands/parse.js +18 -0
  64. package/commands/pause.js +15 -0
  65. package/commands/print.js +47 -0
  66. package/commands/read_cache.js +12 -0
  67. package/commands/read_cfg.js +13 -0
  68. package/commands/read_clipboard.js +19 -0
  69. package/commands/read_excel.js +17 -0
  70. package/commands/read_only_excel.js +40 -0
  71. package/commands/read_plain.js +14 -0
  72. package/commands/remove.js +14 -0
  73. package/commands/retrieve.js +17 -0
  74. package/commands/reveal.js +33 -0
  75. package/commands/revision_info.js +31 -0
  76. package/commands/schedule.js +80 -0
  77. package/commands/select.js +17 -0
  78. package/commands/send_email.js +25 -0
  79. package/commands/share_data.js +745 -0
  80. package/commands/shell.js +13 -0
  81. package/commands/sleep.js +17 -0
  82. package/commands/store.js +13 -0
  83. package/commands/store_optional.js +33 -0
  84. package/commands/stream.js +16 -0
  85. package/commands/stringify.js +24 -0
  86. package/commands/svn_add.js +26 -0
  87. package/commands/svn_commit.js +49 -0
  88. package/commands/svn_export_diff_head.js +13 -0
  89. package/commands/svn_is_dirty.js +13 -0
  90. package/commands/svn_update.js +27 -0
  91. package/commands/switch.js +18 -0
  92. package/commands/temp.js +12 -0
  93. package/commands/tencent_cos.js +323 -0
  94. package/commands/test.js +14 -0
  95. package/commands/title.js +18 -0
  96. package/commands/tmpdir.js +21 -0
  97. package/commands/translate.js +58 -0
  98. package/commands/traversal.js +38 -0
  99. package/commands/truncate.js +31 -0
  100. package/commands/truncate_all.js +62 -0
  101. package/commands/ts_sort.js +18 -0
  102. package/commands/unzip.js +50 -0
  103. package/commands/updating_revision.js +28 -0
  104. package/commands/valid_required.js +31 -0
  105. package/commands/void.js +10 -0
  106. package/commands/watch_mail.js +94 -0
  107. package/commands/web_socket.js +233 -0
  108. package/commands/which.js +60 -0
  109. package/commands/write_cache.js +16 -0
  110. package/commands/write_cfg.js +18 -0
  111. package/commands/write_clipboard.js +23 -0
  112. package/commands/write_excel.js +17 -0
  113. package/commands/write_plain.js +18 -0
  114. package/commands/zip.js +78 -0
  115. package/commands/zip_data.js +64 -0
  116. package/examples/print_env.yml +3 -0
  117. package/index.js +109 -0
  118. package/package.json +63 -0
  119. package/scratch/.gitkeep +0 -0
  120. package/utils/alert_tool.js +133 -0
  121. package/utils/base64_tool.js +13 -0
  122. package/utils/cache/local_cache.js +79 -0
  123. package/utils/cache/raw_cache.js +47 -0
  124. package/utils/cache/simple_local_cache.js +33 -0
  125. package/utils/cache/simple_sqlite_cache.js +43 -0
  126. package/utils/cache/simple_svn_cache.js +49 -0
  127. package/utils/cache/svn_cache.js +40 -0
  128. package/utils/cache_tool.js +53 -0
  129. package/utils/display_tool.js +85 -0
  130. package/utils/divination_util.js +555 -0
  131. package/utils/file_tool.js +529 -0
  132. package/utils/hash_tool.js +8 -0
  133. package/utils/interaction_tool.js +228 -0
  134. package/utils/log_tool.js +190 -0
  135. package/utils/parse_directive.js +194 -0
  136. package/utils/parse_tool.js +236 -0
  137. package/utils/request_tool.js +156 -0
  138. package/utils/scm_tool.js +108 -0
  139. package/utils/selection_tool.js +593 -0
  140. package/utils/shell_tool.js +162 -0
  141. package/utils/svn_diff/diff_file.js +44 -0
  142. package/utils/svn_diff/diff_parser.js +55 -0
  143. package/utils/transform_tool.js +520 -0
@@ -0,0 +1,66 @@
1
+ const transform_tool = require("../utils/transform_tool");
2
+ const { progress } = require("../utils/display_tool");
3
+ const { getLastError, resetError, log } = require("../utils/log_tool");
4
+ const { BaseCommand, PROCESS_STATE } = require("./base");
5
+ const { formatData } = require("./share_data");
6
+
7
+ class LoopForeverCommand extends BaseCommand {
8
+ async execute() {
9
+ let data = this.selfData;
10
+ let show_progress = this.selfCfg.show_progress;
11
+ for (let loop_index = 0; true; loop_index++) {
12
+ if (this.globalData.process_state === PROCESS_STATE.BREAK) {
13
+ this.resetProcessState();
14
+ break;
15
+ } else if (this.globalData.process_state === PROCESS_STATE.CONTINUE) {
16
+ this.resetProcessState();
17
+ }
18
+ let loop_key = loop_index;
19
+ // 键索引值映射
20
+ if (data.index_mapping) {
21
+ this.shareData[data.index_mapping] = loop_index;
22
+ } else {
23
+ this.shareData['loop_index'] = loop_index;
24
+ }
25
+ // 键映射
26
+ if (data.key_mapping) {
27
+ this.shareData[data.key_mapping] = loop_key;
28
+ } else {
29
+ this.shareData['loop_key'] = loop_key;
30
+ }
31
+ if (show_progress) {
32
+ log("");
33
+ progress(loop_index, 0, { desc: `> ${this.selfCfg.title || this.selfCfg.type}`, color: "white"});
34
+ log("");
35
+ }
36
+ let commandCfgs = data.commands;
37
+ // 特殊处理字符的情况
38
+ if (typeof commandCfgs === "string") {
39
+ commandCfgs = formatData(commandCfgs);
40
+ }
41
+ // 默认从循环开始执行,增加深度
42
+ await this.exec(commandCfgs, this.depth + 1);
43
+ if (show_progress) {
44
+ if (!getLastError()) {
45
+ progress(loop_index + 1, 0, {desc: `✔ ${this.selfCfg.title || this.selfCfg.type}`, color: "cyan"});
46
+ } else {
47
+ progress(loop_index + 1, 0, {desc: `✖ ${this.selfCfg.title || this.selfCfg.type}`, color: "red"});
48
+ }
49
+ log("");
50
+ }
51
+ if (getLastError()) {
52
+ if (this.selfCfg.ignore_error) {
53
+ resetError(this.selfCfg.ignore_error);
54
+ } else {
55
+ throw getLastError();
56
+ }
57
+ }
58
+ }
59
+ // 最后一个循环结束后,需要重置掉执行状态
60
+ this.resetProcessState();
61
+ }
62
+ }
63
+
64
+ module.exports = {
65
+ LoopForeverCommand,
66
+ };
@@ -0,0 +1,39 @@
1
+ const path = require("path");
2
+ const fs = require("fs");
3
+ const { get_file_list, read_cfg, write_with_type, get_fst_file } = require("../utils/file_tool");
4
+ const { BaseCommand } = require("./base");
5
+
6
+ class MergeFilesCommand extends BaseCommand {
7
+ async execute() {
8
+ let data = this.selfData;
9
+ let src_files = get_file_list(data.src);
10
+ if (!fs.existsSync(data.dst) || !fs.lstatSync(data.dst).isDirectory()) {
11
+ try {
12
+ fs.mkdirSync(data.dst, {
13
+ recursive: true
14
+ });
15
+ } catch (err) {
16
+ throw (err);
17
+ }
18
+ }
19
+ for (let i = 0; i < src_files.length; i++) {
20
+ let src_file = src_files[i];
21
+ let src_data = await read_cfg(src_file);
22
+ let dst_data;
23
+ let dst_file = path.join(get_fst_file(data.dst), path.relative(get_fst_file(data.base), src_file));
24
+ if (fs.existsSync(dst_file)) {
25
+ dst_data = await read_cfg(dst_file);
26
+ } else {
27
+ dst_data = {};
28
+ }
29
+ for (let k in src_data) {
30
+ dst_data[k] = src_data[k];
31
+ }
32
+ await write_with_type(dst_data, dst_file, undefined, data.options);
33
+ }
34
+ }
35
+ }
36
+
37
+ module.exports = {
38
+ MergeFilesCommand,
39
+ };
@@ -0,0 +1,476 @@
1
+ const { progress } = require("../utils/display_tool");
2
+ const { eval_code } = require("./share_data");
3
+ const { read_plain } = require("../utils/file_tool");
4
+ const { pause } = require("../utils/interaction_tool");
5
+ const { whisper, getPrint, resetError, getLastError, warn, log, error, setLastError } = require("../utils/log_tool");
6
+ const { AbortCommand } = require("./abort");
7
+ const { BaseCommand, PROCESS_STATE } = require("./base");
8
+ const { BreakCommand } = require("./break");
9
+ const { CommitCommand } = require("./commit");
10
+ const { ConfirmCommand } = require("./confirm");
11
+ const { ContinueCommand } = require("./continue");
12
+ const { CopyCommand } = require("./copy");
13
+ const { WriteClipboard } = require("./write_clipboard");
14
+ const { ReadClipboard } = require("./read_clipboard");
15
+ const { DateCommand } = require("./date");
16
+ const { DebuggerCommand } = require("./debugger");
17
+ const { EvalCommand } = require("./eval");
18
+ const { ExecFromFileCommand } = require("./exec_from_file");
19
+ const { ExportDiffHeadCommand } = require("./export_diff_head");
20
+ const { FilesCommand } = require("./files");
21
+ const { FirstExistCommand } = require("./first_exist");
22
+ const { FlattenCommand } = require("./flatten");
23
+ const { GitCommitCommand } = require("./git_commit");
24
+ const { GitExportDiffHeadCommand } = require("./git_export_diff_head");
25
+ const { GitIsDirtyCommand } = require("./git_is_dirty");
26
+ const { HTTPRequestCommand } = require("./http_request");
27
+ const { InputCommand } = require("./input");
28
+ const { IsDirtyCommand } = require("./is_dirty");
29
+ const { List2DictCommand } = require("./list2dict");
30
+ const { LoopCommand } = require("./loop");
31
+ const { LoopForeverCommand } = require("./loop_forever");
32
+ const { ModifyCommand } = require("./modify");
33
+ const { MoveCommand } = require("./move");
34
+ const { MultiSelectCommand } = require("./multi_select");
35
+ const { OpenCommand } = require("./open");
36
+ const { ParseCommand } = require("./parse");
37
+ const { PauseCommand } = require("./pause");
38
+ const { PrintCommand } = require("./print");
39
+ const { ReadCfgCommand } = require("./read_cfg");
40
+ const { ReadPlainCommand } = require("./read_plain");
41
+ const { RemoveCommand } = require("./remove");
42
+ const { RetrieveCommand } = require("./retrieve");
43
+ const { RevealCommand } = require("./reveal");
44
+ const { SelectCommand } = require("./select");
45
+ const { ShellCommand } = require("./shell");
46
+ const { SleepCommand } = require("./sleep");
47
+ const { StoreCommand } = require("./store");
48
+ const { StringifyCommand } = require("./stringify");
49
+ const { SvnCommitCommand } = require("./svn_commit");
50
+ const { SVNExportDiffHeadCommand } = require("./svn_export_diff_head");
51
+ const { SvnIsDirtyCommand } = require("./svn_is_dirty");
52
+ const { SvnUpdateCommand } = require("./svn_update");
53
+ const { TestCommand } = require("./test");
54
+ const { TruncateCommand } = require("./truncate");
55
+ const { TruncateAllCommand } = require("./truncate_all");
56
+ const { ValidRequiredCommand } = require("./valid_required");
57
+ const { VoidCommand } = require("./void");
58
+ const { WhichCommand } = require("./which");
59
+ const { WriteCfgCommand } = require("./write_cfg");
60
+ const { WritePlainCommand } = require("./write_plain");
61
+ const { ZipCommand } = require("./zip");
62
+ const { MoveLocalCommand } = require("./move_local");
63
+ const { EditCommand } = require("./edit");
64
+ const { ScheduleCommand } = require("./schedule");
65
+ const { AlertCommand } = require("./alert");
66
+ const { IntervalCommand } = require("./interval");
67
+ const { TraversalCommand } = require("./traversal");
68
+ const { NotifyCommand } = require("./notify");
69
+ const { LogCommand } = require("./log");
70
+ const { formatData, shareData } = require("./share_data");
71
+ const { FileInfoCommand } = require("./file_info");
72
+ const { ReadOnlyExcelCommand } = require("./read_only_excel");
73
+ const { WebSocketCommand } = require("./web_socket");
74
+ const { TsSortCommand } = require("./ts_sort");
75
+ const { DivinationCommand } = require("./divination");
76
+ const { FileSizeCommand } = require("./file_size");
77
+ const { TmpdirCommand } = require("./tmpdir");
78
+ const { HashCommand } = require("./hash");
79
+ const { StoreOptionalCommand } = require("./store_optional");
80
+ const { UpdatingRevisionCommand } = require("./updating_revision");
81
+ const { RevisionInfoCommand } = require("./revision_info");
82
+ const { UnzipCommand } = require("./unzip");
83
+ const { DownloadCommand } = require("./download");
84
+ const { ReadExcelCommand } = require("./read_excel");
85
+ const { WriteExcelCommand } = require("./write_excel");
86
+ const { EditExcelCommand } = require("./edit_excel");
87
+ const { MysqlConnectCommand } = require("./mysql_connect");
88
+ const { MysqlEndCommand } = require("./mysql_end");
89
+ const { MysqlQueryCommand } = require("./mysql_query");
90
+ const { FtpCommand } = require("./ftp");
91
+ const { StreamCommand } = require("./stream");
92
+ const { TencentCosCommand } = require("./tencent_cos");
93
+ const { WriteCacheCommand } = require("./write_cache");
94
+ const { ReadCacheCommand } = require("./read_cache");
95
+ const { AssembleCommand } = require("./Assemble");
96
+ const { DisassembleCommand } = require("./disassemble");
97
+ const { DingtalkCommand } = require("./dingtalk");
98
+ const { WatchMailCommand } = require("./watch_mail");
99
+ const { TranslateCommand } = require("./translate");
100
+ const { ChangeFilterCommand } = require("./change_filter");
101
+ const { TempCommand } = require("./temp");
102
+ const { CheerioCommand } = require("./cheerio");
103
+ const { SwitchCommand } = require("./switch");
104
+ const { MergeFilesCommand } = require("./merge_files");
105
+ const { JwtDecodeCommand } = require("./jwt_decode");
106
+ const { ClearScreenCommand } = require("./clear_screen");
107
+ const { TitleCommand } = require("./title");
108
+ const { CompareCommand } = require('./compare');
109
+ const { ZipDataCommand } = require('./zip_data');
110
+ const { EnvOptionalCommand } = require('./env_optional');
111
+ const { SendEmailCommand } = require("./send_email");
112
+ const { AssertCommand } = require('./assert');
113
+ const { SvnAddCommand } = require('./svn_add');
114
+ const { ImageCropCommand } = require('./image_crop');
115
+ const { CursorUpCommand } = require('./cursor_up');
116
+
117
+ const globalData = {
118
+ "executed_cfg": [], // 执行过的配置文件
119
+ "process_state": PROCESS_STATE.NONE, // 当前执行状态
120
+ };
121
+
122
+ /**
123
+ * @type { { [commandType: string]: BaseCommand[] } }
124
+ */
125
+ const commandMap = {};
126
+
127
+ /**
128
+ * @type { { [commandType: string]: BaseCommand[] } }
129
+ */
130
+ const commandPool = {};
131
+ const showLogs = {
132
+
133
+ };
134
+
135
+
136
+ function register(type, commandCls, showLog) {
137
+ commandMap[type] = commandCls;
138
+ showLogs[type] = showLog;
139
+ }
140
+
141
+ /**
142
+ * 获取命令
143
+ * @param {string} type
144
+ * @returns {BaseCommand}
145
+ */
146
+ function getCommand(type) {
147
+ let commandCls = commandMap[type];
148
+ if (!commandCls) {
149
+ return;
150
+ }
151
+ let commands = commandPool[type];
152
+ if (!commands) {
153
+ commands = commandPool[type] = [];
154
+ }
155
+ let command = commands.pop();
156
+ if (!command) {
157
+ command = new commandCls(type, globalData, execSingle, exec);
158
+ }
159
+ return command;
160
+ }
161
+
162
+ /**
163
+ * 回收命令
164
+ * @param {BaseCommand} command
165
+ */
166
+ function recyleCommand(command) {
167
+ if (!command) {
168
+ warn("回收命令异常");
169
+ return;
170
+ }
171
+ let type = command.type;
172
+ let commands = commandPool[type];
173
+ if (!commands) {
174
+ commands = commandPool[type] = [];
175
+ }
176
+ commands.push(command);
177
+ }
178
+
179
+ /**
180
+ *
181
+ * @param {{type: string, title?: string, when:?: string, data: any, ignore_error: boolean}[]} commandCfgs
182
+ */
183
+ async function exec(commandCfgs, depth = 0) {
184
+ for (let i = 0, len = commandCfgs && commandCfgs.length; i < len; ++i) {
185
+ const commandCfg = commandCfgs[i];
186
+ await execSingle(commandCfg, depth, {
187
+ curr: i,
188
+ total: len,
189
+ });
190
+ if (globalData.process_state === PROCESS_STATE.BREAK) {
191
+ break;
192
+ } else if (globalData.process_state === PROCESS_STATE.CONTINUE) {
193
+ break;
194
+ }
195
+ }
196
+ }
197
+
198
+ /**
199
+ *
200
+ * @param {*} depth
201
+ */
202
+ async function execSingle(commandCfg) {
203
+ let totalRetryTimes = commandCfg.retry || 0;
204
+ let retryTimes = 0;
205
+ let ret = null;
206
+ while(true) {
207
+ if (retryTimes > 0) { // 仅在重试时,重置错误
208
+ setLastError(null);
209
+ }
210
+ try {
211
+ if (commandCfg.async) {
212
+ _execSingle.apply(this, arguments);
213
+ } else {
214
+ ret = await _execSingle.apply(this, arguments);
215
+ }
216
+ } catch (e) {
217
+ setLastError(e);
218
+ }
219
+ if (getLastError()) {
220
+ if (++retryTimes <= totalRetryTimes) {
221
+ error("\n" + getLastError());
222
+ warn(`重新执行 (${retryTimes}/${totalRetryTimes})...`);
223
+ await new Promise(resolve => {
224
+ setTimeout(() => {
225
+ resolve();
226
+ }, 1000 * retryTimes);
227
+ });
228
+ continue;
229
+ }
230
+ throw getLastError();
231
+ }
232
+ break;
233
+ }
234
+ return ret;
235
+ }
236
+
237
+ /**
238
+ *
239
+ * @param {*} depth
240
+ */
241
+ async function _execSingle(commandCfg, depth, progressData) {
242
+ if (typeof commandCfg === "string") {
243
+ commandCfg = {
244
+ type: commandCfg,
245
+ };
246
+ }
247
+ let rawCfg = JSON.stringify(commandCfg, undefined, 4);
248
+ // 深度拷贝
249
+ commandCfg = JSON.parse(rawCfg);
250
+ // 提前format
251
+ if (!commandCfg.raw) {
252
+ formatData(commandCfg);
253
+ }
254
+ if (commandCfg.side_effect && shareData.DRY_RUN) {
255
+ warn(`[DRY_RUN] ${commandCfg.title || commandCfg.type}`);
256
+ return;
257
+ }
258
+ let type = commandCfg.type;
259
+ let data = commandCfg.data;
260
+ let command = getCommand(type);
261
+ if (!command) {
262
+ log("");
263
+ whisper(`${getPrint(commandCfg, true)}`);
264
+ throw (`未注册的命令 ${type}`);
265
+ }
266
+ // 判断是否步进执行
267
+ if (command.shareData.STEP_BY_STEP) {
268
+ await pause(`即将执行 ${rawCfg}`);
269
+ }
270
+ if (commandCfg.debugger) {
271
+ if (typeof commandCfg.debugger === "boolean") {
272
+ debugger;
273
+ } else {
274
+ try {
275
+ if (eval_code(commandCfg.debugger)) {
276
+ debugger;
277
+ }
278
+ } catch (err) {
279
+ debugger;
280
+ warn(err);
281
+ }
282
+ }
283
+ }
284
+
285
+ if (!(await command.checkValid(commandCfg))) {
286
+ return;
287
+ }
288
+ if (commandCfg.show_progress /* !== false */ && progressData && shareData.$COMPRESS_PROGERSS <= 0) {
289
+ progress(progressData.curr, progressData.total, {depth: depth, desc: `> ${commandCfg.title || commandCfg.type}`, color: "white"});
290
+ }
291
+
292
+ if (showLogs[commandCfg.type]) {
293
+ log("");
294
+ }
295
+
296
+
297
+ let content;
298
+ if (command.getRequireContent()) {
299
+ if (data.content != null) {
300
+ content = data.content;
301
+ } else if (data.key) {
302
+ let keys = data.key.split(".");
303
+ content = command.shareData;
304
+ for (let i = 0; i < keys.length; i++) {
305
+ const key = keys[i];
306
+ content = content[key];
307
+ if (!content) {
308
+ break;
309
+ }
310
+ }
311
+ } else if (data.src) {
312
+ content = read_plain(data.src);
313
+ } else if (data.code) {
314
+ content = eval_code(data.code);
315
+ }
316
+ if (content == null) {
317
+ if (!commandCfg.ignore_error) {
318
+ throw `无content可供使用 ${rawCfg}`;
319
+ }
320
+ }
321
+ }
322
+ let ret;
323
+ let is_first = true;
324
+ do {
325
+ if (!is_first) {
326
+ warn(`结果不合法,请检查...`);
327
+ }
328
+ ret = await command.handle(commandCfg, content, depth);
329
+ is_first = false;
330
+ } while (!ret && commandCfg.required);
331
+ recyleCommand(command);
332
+
333
+ if (!getLastError()) {
334
+ if (commandCfg.show_progress /* !== false */ && progressData && shareData.$COMPRESS_PROGERSS <= 0) {
335
+ progress(progressData.curr + 1, progressData.total, {depth: depth, desc: `✔ ${commandCfg.title || commandCfg.type}`['cyan']});
336
+ }
337
+ } else {
338
+ if (commandCfg.show_progress /* !== false */ && progressData && shareData.$COMPRESS_PROGERSS <= 0) {
339
+ progress(progressData.curr + 1, progressData.total, {depth: depth, desc: `✖ ${commandCfg.title || commandCfg.type}`['red']});
340
+ }
341
+ if (commandCfg.ignore_error) {
342
+ resetError(commandCfg.ignore_error);
343
+ } else {
344
+ throw getLastError() + " " + rawCfg;
345
+ }
346
+ }
347
+ if (commandCfg.newline) {
348
+ log("");
349
+ }
350
+
351
+ return ret;
352
+ }
353
+
354
+
355
+ function init() {
356
+ register("abort", AbortCommand, false);
357
+ register("base", BaseCommand, false);
358
+ register("confirm", ConfirmCommand, false);
359
+ register("copy", CopyCommand, false);
360
+ register("write_clipboard", WriteClipboard, false);
361
+ register("read_clipboard", ReadClipboard, false);
362
+ register("date", DateCommand, false);
363
+ register("debugger", DebuggerCommand, false);
364
+ register("eval", EvalCommand, false);
365
+ register("exec_from_file", ExecFromFileCommand, true);
366
+ register("exec_shell", ShellCommand, false);
367
+ register("files", FilesCommand, false);
368
+ register("first_exist", FirstExistCommand, false);
369
+ register("flatten", FlattenCommand, false);
370
+ register("git_commit", GitCommitCommand, false);
371
+ register("git_export_diff_head", GitExportDiffHeadCommand, false);
372
+ register("git_is_dirty", GitIsDirtyCommand, false);
373
+ register("http_request", HTTPRequestCommand, false);
374
+ register("input", InputCommand, true);
375
+ register("list2dict", List2DictCommand, false);
376
+ register("loop", LoopCommand, false);
377
+ register("loop_forever", LoopForeverCommand, false);
378
+ register("move", MoveCommand, false);
379
+ register("multi_select", MultiSelectCommand, false);
380
+ register("modify", ModifyCommand, false);
381
+ register("open", OpenCommand, false);
382
+ register("parse", ParseCommand, false);
383
+ register("pause", PauseCommand, false);
384
+ register("print", PrintCommand, false);
385
+ register("read_cfg", ReadCfgCommand, false);
386
+ register("read_plain", ReadPlainCommand, false);
387
+ register("remove", RemoveCommand, false);
388
+ register("request", HTTPRequestCommand, false);
389
+ register("retrieve", RetrieveCommand, false);
390
+ register("reveal", RevealCommand, false);
391
+ register("select", SelectCommand, false);
392
+ register("shell", ShellCommand, false);
393
+ register("sleep", SleepCommand, false);
394
+ register("storage", StoreCommand, false);
395
+ register("store", StoreCommand, false);
396
+ register("storage_optional", StoreOptionalCommand, false);
397
+ register("store_optional", StoreOptionalCommand, false);
398
+ register("svn_commit", SvnCommitCommand, false);
399
+ register("svn_is_dirty", SvnIsDirtyCommand, false);
400
+ register("svn_update", SvnUpdateCommand, false);
401
+ register("svn_export_diff_head", SVNExportDiffHeadCommand, false);
402
+ register("test", TestCommand, false);
403
+ register("truncate", TruncateCommand, false);
404
+ register("truncate_all", TruncateAllCommand, false);
405
+ register("void", VoidCommand, false);
406
+ register("write_cfg", WriteCfgCommand, false);
407
+ register("write_plain", WritePlainCommand, false);
408
+ register("zip", ZipCommand, false);
409
+ register("valid_required", ValidRequiredCommand, false);
410
+ register("continue", ContinueCommand, false);
411
+ register("break", BreakCommand, false);
412
+ register("stringify", StringifyCommand, false);
413
+ register("commit", CommitCommand, false);
414
+ register("export_diff_head", ExportDiffHeadCommand, false);
415
+ register("is_dirty", IsDirtyCommand, false);
416
+ register("which", WhichCommand, false);
417
+ register("move_local", MoveLocalCommand, false);
418
+ register("edit", EditCommand, false);
419
+ register("schedule", ScheduleCommand, false);
420
+ register("alert", AlertCommand, false);
421
+ register("interval", IntervalCommand, false);
422
+ register("traversal", TraversalCommand, false);
423
+ register("notify", NotifyCommand, false);
424
+ register("log", LogCommand, false);
425
+ register("file_info", FileInfoCommand, false);
426
+ register("read_only_excel", ReadOnlyExcelCommand, false);
427
+ register("web_socket", WebSocketCommand, false);
428
+ register("ts_sort", TsSortCommand, false);
429
+ register("suan_gua", DivinationCommand, false);
430
+ register("divination", DivinationCommand, false);
431
+ register("file_size", FileSizeCommand, false);
432
+ register("tmpdir", TmpdirCommand, false);
433
+ register("hash", HashCommand, false);
434
+ register("updating_revision", UpdatingRevisionCommand, false);
435
+ register("revision_info", RevisionInfoCommand, false);
436
+ register("unzip", UnzipCommand, false);
437
+ register("download", DownloadCommand, false);
438
+ register("read_excel", ReadExcelCommand, false);
439
+ register("write_excel", WriteExcelCommand, false);
440
+ register("edit_excel", EditExcelCommand, false);
441
+ register("mysql_connect", MysqlConnectCommand, false);
442
+ register("mysql_end", MysqlEndCommand, false);
443
+ register("mysql_query", MysqlQueryCommand, false);
444
+ register("ftp", FtpCommand, false);
445
+ register("stream", StreamCommand, false);
446
+ register("tencent_cos", TencentCosCommand, false);
447
+ register("read_cache", ReadCacheCommand, false);
448
+ register("write_cache", WriteCacheCommand, false);
449
+ register("assemble", AssembleCommand, false);
450
+ register("disassemble", DisassembleCommand, false);
451
+ register("dingtalk", DingtalkCommand, false);
452
+ register("watch_mail", WatchMailCommand, false);
453
+ register("translate", TranslateCommand, false);
454
+ register("change_filter", ChangeFilterCommand, false);
455
+ register("temp", TempCommand, false);
456
+ register("cheerio", CheerioCommand, false);
457
+ register("switch", SwitchCommand, false);
458
+ register("merge_files", MergeFilesCommand, false);
459
+ register("jwt_decode", JwtDecodeCommand, false);
460
+ register("clear_screen", ClearScreenCommand, false);
461
+ register("title", TitleCommand, false);
462
+ register("compare", CompareCommand, false);
463
+ register("zip_data", ZipDataCommand, false);
464
+ register("env_optional", EnvOptionalCommand, false);
465
+ register("send_email", SendEmailCommand, false);
466
+ register("assert", AssertCommand, false);
467
+ register("svn_add", SvnAddCommand, false);
468
+ register("image_crop", ImageCropCommand, false);
469
+ register("cursor_up", CursorUpCommand, false);
470
+ }
471
+
472
+ module.exports = {
473
+ init,
474
+ exec,
475
+ execSingle,
476
+ };
@@ -0,0 +1,44 @@
1
+ const { eval_code } = require("./share_data");
2
+ const { format, toArray } = require("../utils/transform_tool");
3
+ const { BaseCommand } = require("./base");
4
+
5
+ class ModifyCommand extends BaseCommand {
6
+ async execute() {
7
+ let data = this.selfData;
8
+ let flags = data.flags || "";
9
+ if (flags.indexOf("g") == -1) {
10
+ flags += "g";
11
+ }
12
+ let reg = new RegExp(data.pattern, flags);
13
+ let idx = 0;
14
+ let replacers = toArray(data.replacer);
15
+ let converters = toArray(data.converter);
16
+ let ret = this.content.replace(reg, (...args) => {
17
+ let replacer = replacers[idx] || data.default_replacer;
18
+ let converter = converters[idx];
19
+ if (replacer == null) {
20
+ return args[0];
21
+ }
22
+ if (converter) {
23
+ args[1] = eval_code(converter)(args[1]);
24
+ }
25
+ ++idx;
26
+ return format(replacer, args);
27
+ });
28
+ return ret;
29
+ }
30
+
31
+ getRequireContent() {
32
+ return true;
33
+ }
34
+
35
+ getRequiredParams() {
36
+ return [
37
+ "pattern",
38
+ ];
39
+ }
40
+ }
41
+
42
+ module.exports = {
43
+ ModifyCommand,
44
+ };
@@ -0,0 +1,14 @@
1
+ const { move } = require("../utils/file_tool");
2
+ const { log } = require("../utils/log_tool");
3
+ const { BaseCommand } = require("./base");
4
+
5
+ class MoveCommand extends BaseCommand {
6
+ async execute() {
7
+ let data = this.selfData;
8
+ await move(data.src, data.dst, data.base, data.options);
9
+ }
10
+ }
11
+
12
+ module.exports = {
13
+ MoveCommand,
14
+ };
@@ -0,0 +1,14 @@
1
+ const { move_local } = require("../utils/file_tool");
2
+ const { log } = require("../utils/log_tool");
3
+ const { BaseCommand } = require("./base");
4
+
5
+ class MoveLocalCommand extends BaseCommand {
6
+ async execute() {
7
+ let data = this.selfData;
8
+ await move_local(data.src, data.dst, data.base, data.options);
9
+ }
10
+ }
11
+
12
+ module.exports = {
13
+ MoveLocalCommand,
14
+ };
@@ -0,0 +1,16 @@
1
+ const { multiSelect } = require('../utils/selection_tool');
2
+ const { BaseCommand } = require("./base");
3
+
4
+ class MultiSelectCommand extends BaseCommand {
5
+ async execute() {
6
+ return multiSelect(this.content, this.selfData);
7
+ }
8
+
9
+ getRequireContent() {
10
+ return true;
11
+ }
12
+ }
13
+
14
+ module.exports = {
15
+ MultiSelectCommand,
16
+ };