node-automator 1.4.21 → 1.4.23
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 +2 -0
- package/commands/zip_folder.js +56 -0
- package/index.js +0 -1
- package/package.json +1 -1
- package/utils/display_tool.js +1 -0
- package/utils/interaction_tool.js +3 -4
- package/utils/log_tool.js +1 -0
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
package/package.json
CHANGED
package/utils/display_tool.js
CHANGED
|
@@ -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",
|
|
@@ -209,10 +209,9 @@ function showOptions(viewOptions, filteredViewOptions, selectedIndices, focusedI
|
|
|
209
209
|
// 清空本行
|
|
210
210
|
clearLine();
|
|
211
211
|
let preview = omit_offset(viewOptionStr, 2);
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
215
|
-
write(`${indicator}${preview[optionColor]}`);
|
|
212
|
+
const previewParts = preview.split(searchChars);
|
|
213
|
+
preview = previewParts.map(v => v[optionColor]).join(searchChars["bold"]);
|
|
214
|
+
write(`${indicator}${preview}`);
|
|
216
215
|
write('\n');
|
|
217
216
|
}
|
|
218
217
|
write(`${begIndex + numShow >= filteredViewOptions.length ? "" : "▼"['magenta']}${clear_line_end}\n`);
|