@zzclub/z-cli 0.7.1 → 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 (64) hide show
  1. package/LICENSE +20 -20
  2. package/dist/commands/config.d.ts +9 -0
  3. package/dist/commands/config.d.ts.map +1 -0
  4. package/dist/commands/config.js +33 -0
  5. package/dist/commands/config.js.map +1 -0
  6. package/dist/commands/set.d.ts +11 -0
  7. package/dist/commands/set.d.ts.map +1 -0
  8. package/dist/commands/set.js +43 -0
  9. package/dist/commands/set.js.map +1 -0
  10. package/dist/commands/tiny/compressor.d.ts +11 -0
  11. package/dist/commands/tiny/compressor.d.ts.map +1 -0
  12. package/dist/commands/tiny/compressor.js +46 -0
  13. package/dist/commands/tiny/compressor.js.map +1 -0
  14. package/dist/commands/tiny/file-processor.d.ts +40 -0
  15. package/dist/commands/tiny/file-processor.d.ts.map +1 -0
  16. package/dist/commands/tiny/file-processor.js +137 -0
  17. package/dist/commands/tiny/file-processor.js.map +1 -0
  18. package/dist/commands/tiny/index.d.ts +15 -0
  19. package/dist/commands/tiny/index.d.ts.map +1 -0
  20. package/dist/commands/tiny/index.js +55 -0
  21. package/dist/commands/tiny/index.js.map +1 -0
  22. package/dist/commands/tiny/types.d.ts +55 -0
  23. package/dist/commands/tiny/types.d.ts.map +1 -0
  24. package/dist/commands/tiny/types.js +5 -0
  25. package/dist/commands/tiny/types.js.map +1 -0
  26. package/dist/core/config-manager.d.ts +38 -0
  27. package/dist/core/config-manager.d.ts.map +1 -0
  28. package/dist/core/config-manager.js +87 -0
  29. package/dist/core/config-manager.js.map +1 -0
  30. package/dist/core/logger.d.ts +17 -0
  31. package/dist/core/logger.d.ts.map +1 -0
  32. package/dist/core/logger.js +30 -0
  33. package/dist/core/logger.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +177 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/types/config.d.ts +32 -0
  39. package/dist/types/config.d.ts.map +1 -0
  40. package/dist/types/config.js +18 -0
  41. package/dist/types/config.js.map +1 -0
  42. package/dist/types/index.d.ts +4 -0
  43. package/dist/types/index.d.ts.map +1 -0
  44. package/dist/types/index.js +3 -0
  45. package/dist/types/index.js.map +1 -0
  46. package/package.json +34 -19
  47. package/readme.md +457 -0
  48. package/CHANGELOG.md +0 -211
  49. package/README.md +0 -329
  50. package/src/command/config.js +0 -97
  51. package/src/command/i18n.js +0 -318
  52. package/src/command/index.js +0 -30
  53. package/src/command/picgo.js +0 -122
  54. package/src/command/replace.js +0 -81
  55. package/src/command/set.js +0 -47
  56. package/src/command/tiny.js +0 -328
  57. package/src/command/translate.js +0 -337
  58. package/src/config.json +0 -16
  59. package/src/index.js +0 -31
  60. package/src/translate-api/index.js +0 -77
  61. package/src/translate-api/md5.js +0 -231
  62. package/src/utils/common.js +0 -218
  63. package/src/utils/file.js +0 -61
  64. package/src/utils/picgo.js +0 -149
@@ -1,77 +0,0 @@
1
- import { MD5 } from "./md5.js";
2
- import path from "path";
3
- import { readJsonFile } from "../utils/file.js";
4
- import axios from "axios";
5
- import { dirname } from "node:path"
6
- import { fileURLToPath } from "node:url"
7
- import { getLocalConfig } from "../utils/common.js";
8
-
9
- const __filename = fileURLToPath(import.meta.url);
10
- const __dirname = dirname(__filename);
11
- let salt = new Date().getTime();
12
- let appid, key;
13
- async function genUser() {
14
- let config = await getLocalConfig();
15
- let translateConfig = config.translate;
16
- appid = translateConfig.account.appId; // appid
17
- key = translateConfig.account.key; // 密钥
18
- }
19
- function genSign(options) {
20
- let str1 = appid + options.query + salt + key;
21
- let sign = MD5(str1);
22
- return sign;
23
- }
24
-
25
- // export async function translate(options) {
26
- // await genUser();
27
- // return new Promise((resolve, reject) => {
28
- // axios({
29
- // url: "http://api.fanyi.baidu.com/api/trans/vip/translate",
30
- // method: "get",
31
- // params: {
32
- // q: options.query,
33
- // appid: appid,
34
- // salt: salt,
35
- // from: options.from,
36
- // to: options.to,
37
- // sign: genSign(options),
38
- // },
39
- // })
40
- // .then((res) => {
41
- // console.log(res);
42
- // resolve(res.data);
43
- // })
44
- // .catch((err) => {
45
- // reject("翻译失败" + JSON.stringify(err));
46
- // })
47
- // .finally(() => {});
48
- // });
49
- // }
50
-
51
- export async function translate(options) {
52
- await genUser();
53
-
54
- try {
55
- const params = new URLSearchParams({
56
- q: options.query,
57
- appid: appid,
58
- salt: salt,
59
- from: options.from,
60
- to: options.to,
61
- sign: genSign(options)
62
- });
63
-
64
- const url = `http://api.fanyi.baidu.com/api/trans/vip/translate?${params}`;
65
- const response = await fetch(url);
66
-
67
- if (!response.ok) {
68
- throw new Error(`HTTP error! status: ${response.status}`);
69
- }
70
-
71
- const data = await response.json();
72
- // console.log(data);
73
- return data;
74
- } catch (error) {
75
- throw new Error("翻译失败" + JSON.stringify(error));
76
- }
77
- }
@@ -1,231 +0,0 @@
1
- var MD5 = function (string) {
2
- function RotateLeft(lValue, iShiftBits) {
3
- return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
4
- }
5
-
6
- function AddUnsigned(lX, lY) {
7
- var lX4, lY4, lX8, lY8, lResult;
8
- lX8 = lX & 0x80000000;
9
- lY8 = lY & 0x80000000;
10
- lX4 = lX & 0x40000000;
11
- lY4 = lY & 0x40000000;
12
- lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff);
13
- if (lX4 & lY4) {
14
- return lResult ^ 0x80000000 ^ lX8 ^ lY8;
15
- }
16
- if (lX4 | lY4) {
17
- if (lResult & 0x40000000) {
18
- return lResult ^ 0xc0000000 ^ lX8 ^ lY8;
19
- } else {
20
- return lResult ^ 0x40000000 ^ lX8 ^ lY8;
21
- }
22
- } else {
23
- return lResult ^ lX8 ^ lY8;
24
- }
25
- }
26
-
27
- function F(x, y, z) {
28
- return (x & y) | (~x & z);
29
- }
30
- function G(x, y, z) {
31
- return (x & z) | (y & ~z);
32
- }
33
- function H(x, y, z) {
34
- return x ^ y ^ z;
35
- }
36
- function I(x, y, z) {
37
- return y ^ (x | ~z);
38
- }
39
-
40
- function FF(a, b, c, d, x, s, ac) {
41
- a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
42
- return AddUnsigned(RotateLeft(a, s), b);
43
- }
44
-
45
- function GG(a, b, c, d, x, s, ac) {
46
- a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
47
- return AddUnsigned(RotateLeft(a, s), b);
48
- }
49
-
50
- function HH(a, b, c, d, x, s, ac) {
51
- a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
52
- return AddUnsigned(RotateLeft(a, s), b);
53
- }
54
-
55
- function II(a, b, c, d, x, s, ac) {
56
- a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
57
- return AddUnsigned(RotateLeft(a, s), b);
58
- }
59
-
60
- function ConvertToWordArray(string) {
61
- var lWordCount;
62
- var lMessageLength = string.length;
63
- var lNumberOfWords_temp1 = lMessageLength + 8;
64
- var lNumberOfWords_temp2 =
65
- (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
66
- var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
67
- var lWordArray = Array(lNumberOfWords - 1);
68
- var lBytePosition = 0;
69
- var lByteCount = 0;
70
- while (lByteCount < lMessageLength) {
71
- lWordCount = (lByteCount - (lByteCount % 4)) / 4;
72
- lBytePosition = (lByteCount % 4) * 8;
73
- lWordArray[lWordCount] =
74
- lWordArray[lWordCount] |
75
- (string.charCodeAt(lByteCount) << lBytePosition);
76
- lByteCount++;
77
- }
78
- lWordCount = (lByteCount - (lByteCount % 4)) / 4;
79
- lBytePosition = (lByteCount % 4) * 8;
80
- lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
81
- lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
82
- lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
83
- return lWordArray;
84
- }
85
-
86
- function WordToHex(lValue) {
87
- var WordToHexValue = "",
88
- WordToHexValue_temp = "",
89
- lByte,
90
- lCount;
91
- for (lCount = 0; lCount <= 3; lCount++) {
92
- lByte = (lValue >>> (lCount * 8)) & 255;
93
- WordToHexValue_temp = "0" + lByte.toString(16);
94
- WordToHexValue =
95
- WordToHexValue +
96
- WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);
97
- }
98
- return WordToHexValue;
99
- }
100
-
101
- function Utf8Encode(string) {
102
- string = string.replace(/\r\n/g, "\n");
103
- var utftext = "";
104
-
105
- for (var n = 0; n < string.length; n++) {
106
- var c = string.charCodeAt(n);
107
-
108
- if (c < 128) {
109
- utftext += String.fromCharCode(c);
110
- } else if (c > 127 && c < 2048) {
111
- utftext += String.fromCharCode((c >> 6) | 192);
112
- utftext += String.fromCharCode((c & 63) | 128);
113
- } else {
114
- utftext += String.fromCharCode((c >> 12) | 224);
115
- utftext += String.fromCharCode(((c >> 6) & 63) | 128);
116
- utftext += String.fromCharCode((c & 63) | 128);
117
- }
118
- }
119
-
120
- return utftext;
121
- }
122
-
123
- var x = Array();
124
- var k, AA, BB, CC, DD, a, b, c, d;
125
- var S11 = 7,
126
- S12 = 12,
127
- S13 = 17,
128
- S14 = 22;
129
- var S21 = 5,
130
- S22 = 9,
131
- S23 = 14,
132
- S24 = 20;
133
- var S31 = 4,
134
- S32 = 11,
135
- S33 = 16,
136
- S34 = 23;
137
- var S41 = 6,
138
- S42 = 10,
139
- S43 = 15,
140
- S44 = 21;
141
-
142
- string = Utf8Encode(string);
143
-
144
- x = ConvertToWordArray(string);
145
-
146
- a = 0x67452301;
147
- b = 0xefcdab89;
148
- c = 0x98badcfe;
149
- d = 0x10325476;
150
-
151
- for (k = 0; k < x.length; k += 16) {
152
- AA = a;
153
- BB = b;
154
- CC = c;
155
- DD = d;
156
- a = FF(a, b, c, d, x[k + 0], S11, 0xd76aa478);
157
- d = FF(d, a, b, c, x[k + 1], S12, 0xe8c7b756);
158
- c = FF(c, d, a, b, x[k + 2], S13, 0x242070db);
159
- b = FF(b, c, d, a, x[k + 3], S14, 0xc1bdceee);
160
- a = FF(a, b, c, d, x[k + 4], S11, 0xf57c0faf);
161
- d = FF(d, a, b, c, x[k + 5], S12, 0x4787c62a);
162
- c = FF(c, d, a, b, x[k + 6], S13, 0xa8304613);
163
- b = FF(b, c, d, a, x[k + 7], S14, 0xfd469501);
164
- a = FF(a, b, c, d, x[k + 8], S11, 0x698098d8);
165
- d = FF(d, a, b, c, x[k + 9], S12, 0x8b44f7af);
166
- c = FF(c, d, a, b, x[k + 10], S13, 0xffff5bb1);
167
- b = FF(b, c, d, a, x[k + 11], S14, 0x895cd7be);
168
- a = FF(a, b, c, d, x[k + 12], S11, 0x6b901122);
169
- d = FF(d, a, b, c, x[k + 13], S12, 0xfd987193);
170
- c = FF(c, d, a, b, x[k + 14], S13, 0xa679438e);
171
- b = FF(b, c, d, a, x[k + 15], S14, 0x49b40821);
172
- a = GG(a, b, c, d, x[k + 1], S21, 0xf61e2562);
173
- d = GG(d, a, b, c, x[k + 6], S22, 0xc040b340);
174
- c = GG(c, d, a, b, x[k + 11], S23, 0x265e5a51);
175
- b = GG(b, c, d, a, x[k + 0], S24, 0xe9b6c7aa);
176
- a = GG(a, b, c, d, x[k + 5], S21, 0xd62f105d);
177
- d = GG(d, a, b, c, x[k + 10], S22, 0x2441453);
178
- c = GG(c, d, a, b, x[k + 15], S23, 0xd8a1e681);
179
- b = GG(b, c, d, a, x[k + 4], S24, 0xe7d3fbc8);
180
- a = GG(a, b, c, d, x[k + 9], S21, 0x21e1cde6);
181
- d = GG(d, a, b, c, x[k + 14], S22, 0xc33707d6);
182
- c = GG(c, d, a, b, x[k + 3], S23, 0xf4d50d87);
183
- b = GG(b, c, d, a, x[k + 8], S24, 0x455a14ed);
184
- a = GG(a, b, c, d, x[k + 13], S21, 0xa9e3e905);
185
- d = GG(d, a, b, c, x[k + 2], S22, 0xfcefa3f8);
186
- c = GG(c, d, a, b, x[k + 7], S23, 0x676f02d9);
187
- b = GG(b, c, d, a, x[k + 12], S24, 0x8d2a4c8a);
188
- a = HH(a, b, c, d, x[k + 5], S31, 0xfffa3942);
189
- d = HH(d, a, b, c, x[k + 8], S32, 0x8771f681);
190
- c = HH(c, d, a, b, x[k + 11], S33, 0x6d9d6122);
191
- b = HH(b, c, d, a, x[k + 14], S34, 0xfde5380c);
192
- a = HH(a, b, c, d, x[k + 1], S31, 0xa4beea44);
193
- d = HH(d, a, b, c, x[k + 4], S32, 0x4bdecfa9);
194
- c = HH(c, d, a, b, x[k + 7], S33, 0xf6bb4b60);
195
- b = HH(b, c, d, a, x[k + 10], S34, 0xbebfbc70);
196
- a = HH(a, b, c, d, x[k + 13], S31, 0x289b7ec6);
197
- d = HH(d, a, b, c, x[k + 0], S32, 0xeaa127fa);
198
- c = HH(c, d, a, b, x[k + 3], S33, 0xd4ef3085);
199
- b = HH(b, c, d, a, x[k + 6], S34, 0x4881d05);
200
- a = HH(a, b, c, d, x[k + 9], S31, 0xd9d4d039);
201
- d = HH(d, a, b, c, x[k + 12], S32, 0xe6db99e5);
202
- c = HH(c, d, a, b, x[k + 15], S33, 0x1fa27cf8);
203
- b = HH(b, c, d, a, x[k + 2], S34, 0xc4ac5665);
204
- a = II(a, b, c, d, x[k + 0], S41, 0xf4292244);
205
- d = II(d, a, b, c, x[k + 7], S42, 0x432aff97);
206
- c = II(c, d, a, b, x[k + 14], S43, 0xab9423a7);
207
- b = II(b, c, d, a, x[k + 5], S44, 0xfc93a039);
208
- a = II(a, b, c, d, x[k + 12], S41, 0x655b59c3);
209
- d = II(d, a, b, c, x[k + 3], S42, 0x8f0ccc92);
210
- c = II(c, d, a, b, x[k + 10], S43, 0xffeff47d);
211
- b = II(b, c, d, a, x[k + 1], S44, 0x85845dd1);
212
- a = II(a, b, c, d, x[k + 8], S41, 0x6fa87e4f);
213
- d = II(d, a, b, c, x[k + 15], S42, 0xfe2ce6e0);
214
- c = II(c, d, a, b, x[k + 6], S43, 0xa3014314);
215
- b = II(b, c, d, a, x[k + 13], S44, 0x4e0811a1);
216
- a = II(a, b, c, d, x[k + 4], S41, 0xf7537e82);
217
- d = II(d, a, b, c, x[k + 11], S42, 0xbd3af235);
218
- c = II(c, d, a, b, x[k + 2], S43, 0x2ad7d2bb);
219
- b = II(b, c, d, a, x[k + 9], S44, 0xeb86d391);
220
- a = AddUnsigned(a, AA);
221
- b = AddUnsigned(b, BB);
222
- c = AddUnsigned(c, CC);
223
- d = AddUnsigned(d, DD);
224
- }
225
-
226
- var temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d);
227
-
228
- return temp.toLowerCase();
229
- };
230
-
231
- export { MD5 };
@@ -1,218 +0,0 @@
1
- import fs from "node:fs";
2
- import ora from "ora";
3
- import { dirname } from "node:path";
4
- import { fileURLToPath } from "node:url";
5
- import path from "node:path";
6
- import chalk from "chalk";
7
- import os from "node:os";
8
- import latestVersion from 'latest-version';
9
-
10
- const __filename = fileURLToPath(import.meta.url);
11
- const __dirname = dirname(__filename);
12
-
13
- export const defaultConfig = {
14
- "translate": {
15
- "sourceDirName": "zh-CN",
16
- "targetDirName": "en-US",
17
- "ignoreFiles": ["node_modules"],
18
- "account": {
19
- "appId": "",
20
- "key": ""
21
- }
22
- },
23
- "editableConfig": ["translate"]
24
- }
25
-
26
- export async function getLocalConfig() {
27
- let spinner = ora();
28
- const homeDir = os.homedir();
29
- const configDir = path.join(homeDir, '.zzclub-z-cli');
30
- const configPath = path.join(configDir, 'config.json');
31
- let config = {}
32
- if (fs.existsSync(configPath)) {
33
- try {
34
- const content = fs.readFileSync(configPath, 'utf8');
35
- config = JSON.parse(content);
36
- } catch (err) {
37
- spinner.fail('读取配置文件失败:' + JSON.stringify(err));
38
- process.exit(1);
39
- }
40
- } else {
41
- spinner.warn('未找到配置文件,正在初始化默认配置');
42
-
43
-
44
-
45
- config = setLocalConfig(defaultConfig, spinner);
46
- }
47
-
48
- return config;
49
- }
50
-
51
- /**
52
- * 写入文件
53
- * @param filePath 文件路径
54
- * @param fileContent 文件内容
55
- * @param onFinally 完成时回调
56
- */
57
- export function writeFileContent(filePath, fileContent, onFinally = () => {}) {
58
- let spinner = ora();
59
- fs.writeFile(filePath, fileContent, "utf-8", (error) => {
60
- if (!error) {
61
- // spinner.succeed(`已写入${chalk.yellow(filePath)}`);
62
- onFinally && onFinally(spinner, true);
63
- } else {
64
- console.log(error);
65
- // spinner.fail(`写入${chalk.red(filePath)}文件失败, 请重试`);
66
- onFinally && onFinally(spinner, false);
67
- }
68
- });
69
- }
70
-
71
- export const readJsonFile = async (filePath) => {
72
- let jsonData;
73
- try {
74
- let jsonStr = fs.readFileSync(filePath);
75
- jsonData = JSON.parse(jsonStr.toString());
76
- } catch (err) {
77
- jsonData = {};
78
- }
79
- return jsonData;
80
- };
81
-
82
- export const setHighLightStr = (
83
- sourceText,
84
- hightlightText,
85
- chalkFn = chalk.red
86
- ) => {
87
- let index = sourceText.indexOf(hightlightText);
88
- if (index === -1) return sourceText;
89
- return sourceText.replaceAll(hightlightText, chalkFn(hightlightText));
90
- };
91
-
92
- //
93
- export async function setLocalConfig(newConfig = {}, spinner) {
94
- const homeDir = os.homedir();
95
- const configDir = path.join(homeDir, '.zzclub-z-cli');
96
- const configPath = path.join(configDir, 'config.json');
97
-
98
- // 确保配置目录存在
99
- if (!fs.existsSync(configDir)) {
100
- fs.mkdirSync(configDir, { recursive: true });
101
- }
102
-
103
- // 读取已存在的配置
104
- let config = {};
105
- if (fs.existsSync(configPath)) {
106
- try {
107
- const content = fs.readFileSync(configPath, 'utf8');
108
- config = JSON.parse(content);
109
- } catch (err) {
110
- spinner && spinner.fail('读取配置文件失败')
111
- process.exit(1);
112
- }
113
- }
114
-
115
- config = {
116
- ...config,
117
- ...newConfig,
118
- translate: {
119
- ...config.translate,
120
- ...newConfig.translate,
121
- account: {
122
- ...(config.translate?.account || {}),
123
- ...newConfig.translate.account,
124
- }
125
- }
126
- };
127
-
128
- // 保存配置
129
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
130
- spinner && spinner.succeed(`配置文件已更新:${chalk.yellow(configPath)}`)
131
- return config;
132
- }
133
-
134
-
135
- // 获取 package.json
136
- export function getPackageJson() {
137
- try {
138
- const rootDir = path.resolve(__dirname, '../../');
139
- const packagePath = path.join(rootDir, 'package.json');
140
- const content = fs.readFileSync(packagePath, 'utf8');
141
- return JSON.parse(content);
142
- } catch (err) {
143
- console.error('读取 package.json 失败:', err);
144
- return null;
145
- }
146
- }
147
-
148
-
149
- // 检查版本更新
150
- // ... 其他代码保持不变 ...
151
-
152
- // 检查版本更新
153
- export async function checkUpdate() {
154
- // 获取缓存目录
155
- const homeDir = os.homedir();
156
- const cacheDir = path.join(homeDir, '.zzclub-z-cli');
157
- const cacheFile = path.join(cacheDir, 'version-cache.json');
158
-
159
- // 检查是否需要更新
160
- const needCheck = () => {
161
- try {
162
- if (!fs.existsSync(cacheFile)) return true;
163
- const cache = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
164
- // 24小时内不重复检查
165
- return Date.now() - cache.lastCheck > 24 * 60 * 60 * 1000;
166
- } catch (err) {
167
- return true;
168
- }
169
- };
170
-
171
-
172
- if (!needCheck()) return;
173
-
174
- try {
175
- const pkg = getPackageJson();
176
- if (!pkg) return;
177
- let spinner = ora();
178
- spinner.start('正在检测版本更新...')
179
- const latest = await latestVersion('@zzclub/z-cli');
180
- if (latest !== pkg.version) {
181
- spinner.warn(chalk.yellow(`\n提示: 发现新版本 ${chalk.green(latest)},当前版本 ${chalk.red(pkg.version)}\n`))
182
- } else {
183
- spinner.succeed('当前为最新版本!')
184
- }
185
-
186
- // 更新缓存
187
- if (!fs.existsSync(cacheDir)) {
188
- fs.mkdirSync(cacheDir, { recursive: true });
189
- }
190
- fs.writeFileSync(cacheFile, JSON.stringify({
191
- lastCheck: Date.now(),
192
- version: latest
193
- }));
194
-
195
- spinner.stop();
196
-
197
- } catch (err) {
198
- // 静默处理错误
199
- }
200
- }
201
-
202
-
203
- export async function checkNodeVersion() {
204
- const currentNodeVersion = process.versions.node;
205
- const semver = currentNodeVersion.split('.');
206
- const major = parseInt(semver[0], 10);
207
- const minor = parseInt(semver[1], 10);
208
-
209
- if (major < 18 || (major === 18 && minor < 18)) {
210
- console.error(
211
- chalk.red('\n❌ Node版本过低:') +
212
- chalk.yellow('建议升级到 ') +
213
- chalk.green('18.18.0') +
214
- chalk.yellow(' 或更高版本。\n') +
215
- chalk.gray('当前版本:') + chalk.red(currentNodeVersion)
216
- );
217
- }
218
- }
package/src/utils/file.js DELETED
@@ -1,61 +0,0 @@
1
- import fs from "node:fs";
2
- // 导出一个异步函数,用于读取JSON文件
3
- export const readJsonFile = async (filePath) => {
4
- let jsonData;
5
- try {
6
- // 使用fs.readFileSync读取文件内容
7
- let jsonStr = fs.readFileSync(filePath);
8
- // 将文件内容转换为JSON对象
9
- jsonData = JSON.parse(jsonStr);
10
- } catch (err) {
11
- // 如果读取文件失败,则将jsonData初始化为空对象
12
- jsonData = {};
13
- }
14
- // 返回JSON对象
15
- return jsonData;
16
- };
17
-
18
- // 用于获取格式化的文件大小
19
- export const getFormatedFileSize = (byte) => {
20
- if (byte === 0) return "0 Bytes";
21
- const sizes = ["B", "KB", "MB", "GB", "TB"];
22
- const i = parseInt(Math.floor(Math.log(byte) / Math.log(1024)), 10);
23
- if (i === 0) return byte + " " + sizes[i];
24
- return (byte / Math.pow(1024, i)).toFixed(1) + " " + sizes[i];
25
- };
26
-
27
- // 检测文件是否存在 且 是文件类型
28
- export const checkFileExist = (filePath) => {
29
- try {
30
- return fs.existsSync(filePath) && fs.statSync(filePath).isFile();
31
- } catch (err) {
32
- return false;
33
- }
34
- };
35
-
36
- // 获取文件信息, 没返回说明文件不存在, 或不是一个文件
37
- export const getFileInfo = (filePath) => {
38
- let fileInfo = {};
39
- if (checkFileExist(filePath)) {
40
- fileInfo.fileName = filePath.split("/").pop();
41
- fileInfo.formatFileSize = getFormatedFileSize(fs.statSync(filePath).size);
42
- fileInfo.rawFileSize = fs.statSync(filePath).size;
43
- fileInfo.fileType = filePath.split(".").pop();
44
- }
45
- return fileInfo;
46
- };
47
-
48
- // 替换文件内的内容
49
- // replaceMaps: [ {text: '1', newText: '2'}, {text: '45', newText: '112'},]
50
- export const replaceFileContent = async (file, replaceMaps) => {
51
- try {
52
- let fileContent = fs.readFileSync(file, "utf8");
53
- replaceMaps.forEach((item) => {
54
- if (item.text && item.newText)
55
- fileContent = fileContent.replaceAll(item.text, item.newText);
56
- });
57
- return fileContent;
58
- } catch (err) {
59
- return null;
60
- }
61
- };