node-automator 1.4.22 → 1.4.24

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/commands/mgr.js CHANGED
@@ -122,6 +122,7 @@ const { Word2txtCommand } = require('./word2txt');
122
122
  const { ObfuscateCommand } = require('./obfuscate');
123
123
  const { SplitFileCommand } = require('./split_file');
124
124
  const { MergeFileCommand } = require('./merge_file');
125
+ const { ZipFolderCommand } = require('./zip_folder');
125
126
 
126
127
  const globalData = {
127
128
  "executed_cfg": [], // 执行过的配置文件
@@ -487,6 +488,7 @@ function init() {
487
488
  register("obfuscate", ObfuscateCommand, false);
488
489
  register("split_file", SplitFileCommand, false);
489
490
  register("merge_file", MergeFileCommand, false);
491
+ register("zip_folder", ZipFolderCommand, false);
490
492
  }
491
493
 
492
494
  module.exports = {
@@ -0,0 +1,56 @@
1
+ const { BaseCommand } = require("./base");
2
+ const path = require("path");
3
+ const { get_fst_file, get_full_path } = require("../utils/file_tool");
4
+ const { info } = require("../utils/log_tool");
5
+ const { progress } = require("../utils/display_tool");
6
+ const { eval_code } = require("./share_data");
7
+
8
+ class ZipFolderCommand extends BaseCommand {
9
+ async execute() {
10
+ const AdmZip = require("adm-zip");
11
+ let data = this.selfData;
12
+ let folder = get_fst_file(data.src);
13
+ const isAccept = data.filter
14
+ ? eval_code(data.filter)
15
+ : (filename) => {
16
+ // 排除以 . 开头的文件、目录
17
+ if (filename.split(path.sep).some((part) => part.startsWith("."))) {
18
+ return false;
19
+ }
20
+ return true;
21
+ };
22
+ // creating archives
23
+ var zip = new AdmZip();
24
+ let i = 0;
25
+ zip.addLocalFolder(folder, "", (filename) => {
26
+ if (!isAccept(filename)) {
27
+ return false;
28
+ }
29
+ progress(i++, 0, {
30
+ desc: `${filename}`,
31
+ depth: 0,
32
+ align: true,
33
+ });
34
+ return true;
35
+ });
36
+ // or write everything to disk
37
+ if (data.dst) {
38
+ let dst = get_full_path(data.dst);
39
+ await new Promise((resolve) => {
40
+ zip.writeZip(dst, (err) => {
41
+ if (err) {
42
+ throw err;
43
+ }
44
+ resolve();
45
+ });
46
+ });
47
+ } else {
48
+ let buffer = zip.toBuffer();
49
+ return buffer;
50
+ }
51
+ }
52
+ }
53
+
54
+ module.exports = {
55
+ ZipFolderCommand,
56
+ };
package/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  // 控制台文本颜色
3
3
  const path = require("path");
4
- require("colors");
5
4
  const {
6
5
  argv,
7
6
  } = require('yargs');
@@ -12,10 +11,10 @@ require('dotenv').config({
12
11
 
13
12
  // 禁用其他打印
14
13
  console.yzplog = console.log;
15
- console.log = () => {};
16
- console.warn = () => {};
17
- console.info = () => {};
18
- console.error = () => {};
14
+ console.log = () => { };
15
+ console.warn = () => { };
16
+ console.info = () => { };
17
+ console.error = () => { };
19
18
 
20
19
  const mgr = require("./commands/mgr");
21
20
  const {
@@ -43,6 +42,8 @@ const {
43
42
  } = require("./commands/share_data");
44
43
  const { decode } = require('./utils/base64_tool');
45
44
  const { formatTimeInMillisec, formatTimestampMillisec } = require('./utils/transform_tool');
45
+ const { hash } = require('./utils/hash_tool');
46
+ const { getCache, setCache } = require('./utils/cache_tool');
46
47
 
47
48
  process.on('exit', (code) => {
48
49
  if (!code) {
@@ -68,9 +69,14 @@ async function getCfgs() {
68
69
  });
69
70
  }
70
71
  async function MainProcess() {
72
+ let lastError = null;
73
+ const cfgs = await getCfgs();
74
+ const cfgHash = hash(cfgs).toString();
71
75
  const enableTimer = argv.ENABLE_TIMER;
72
- const timerInterval = argv.TIMER_INTERVAL;
73
- const estimateTime = +argv.ESTIMATE_TIME;
76
+ const timerInterval = argv.TIMER_INTERVAL || 1000;
77
+ const CACHE_KEY_ESTIMATE_TIME = `ESTIMATE_TIME_${cfgHash}`;
78
+ const estimateTime = +argv.ESTIMATE_TIME || +(await getCache(CACHE_KEY_ESTIMATE_TIME)) || 0;
79
+ console.yzplog(`estimateTime ${estimateTime}`)
74
80
  let beginTime = Date.now();
75
81
  let timer;
76
82
  if (enableTimer && timerInterval) {
@@ -84,8 +90,6 @@ async function MainProcess() {
84
90
  }
85
91
  }, timerInterval);
86
92
  }
87
- let lastError = null;
88
- const cfgs = await getCfgs();
89
93
  try {
90
94
  if (cfgs.indexOf(".") != -1) {
91
95
  await mgr.exec([{
@@ -102,21 +106,22 @@ async function MainProcess() {
102
106
  } catch (err) {
103
107
  lastError = err.message || err;
104
108
  }
109
+ const costTime = Date.now() - beginTime;
105
110
  if (enableTimer) {
106
111
  clearInterval(timer);
107
112
  info("")
108
- const costTime = Date.now() - beginTime;
109
113
  let timeLog = `任务总耗时 ${formatTimeInMillisec(costTime, "hh:mm:ss")}`;
110
114
  if (estimateTime) {
111
115
  const offsetTime = costTime - estimateTime;
112
116
  if (offsetTime > 0) {
113
- timeLog += `, 比预期慢了 ${formatTimeInMillisec(offsetTime, "hh:mm:ss")}`;
117
+ timeLog += `, 比预期慢了 ${formatTimeInMillisec(offsetTime, "hh:mm:ss SSS")}`;
114
118
  } else {
115
- timeLog += `, 比预期快了 ${formatTimeInMillisec(-offsetTime, "hh:mm:ss")}`;
119
+ timeLog += `, 比预期快了 ${formatTimeInMillisec(-offsetTime, "hh:mm:ss SSS")}`;
116
120
  }
117
121
  }
118
122
  success(`>>> ${timeLog} <<<`, undefined, undefined, true);
119
123
  }
124
+ await setCache(CACHE_KEY_ESTIMATE_TIME, costTime);
120
125
 
121
126
  let code = lastError ? (getLastErrorCode() || 1) : 0;
122
127
  let extname = path.extname(argv.$0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-automator",
3
- "version": "1.4.22",
3
+ "version": "1.4.24",
4
4
  "description": "Execute automation with yaml configuration(compatible with json)",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -3,6 +3,7 @@ const { stdout_columns, clear_line_end, shareData } = require("../commands/share
3
3
  const { clearLine } = require("./interaction_tool");
4
4
  const { omit, omit_offset, write } = require("./log_tool");
5
5
  const { alignNumber, formatByteSize, alignStr, Alignment } = require("./transform_tool");
6
+ require("colors");
6
7
 
7
8
  const color_cfg = [
8
9
  "cyan",
package/utils/log_tool.js CHANGED
@@ -1,5 +1,6 @@
1
1
  const { stdout_columns } = require("../commands/share_data");
2
2
  const { json_compacted, formatTimestampMillisec } = require('./transform_tool');
3
+ require("colors");
3
4
 
4
5
  const colors = [
5
6
  "gray",
@@ -37,7 +37,7 @@ async function doRequest(data) {
37
37
  let result;
38
38
  let useCache = enable_http_cache && http_cache;
39
39
  let quiet = data.quiet;
40
- !quiet && info(useCache ? "[缓存]" : `[${options.method}] ${url} `);
40
+ !quiet && info(`[${options.method}] ${url}` + (useCache ? "[缓存]" : ""));
41
41
  let hasProgress = false;
42
42
  let fileDst = get_full_path(data.dst || shareData.AUTOMATOR_SCRATCH + "/request_tool/" + cache_name, "FILE");
43
43
  if (useCache) {