xw-devtool-cli 1.0.10 → 1.0.11
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/README.md +37 -29
- package/package.json +1 -1
- package/src/commands/unicode.js +52 -0
- package/src/index.js +5 -0
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
- **获取时间戳**:快速获取当前毫秒级时间戳。
|
|
20
20
|
- **开发辅助工具**:
|
|
21
21
|
- **URL 编解码**:Encode/Decode URL。
|
|
22
|
+
- **Unicode 编解码**:文本与 Unicode 转义序列 (\uXXXX) 互转。
|
|
22
23
|
- **UUID**:生成 UUID v4。
|
|
23
24
|
- **中文转拼音**:将汉字转换为不带声调的拼音。
|
|
24
25
|
- **颜色转换**:Hex <-> RGB 互转。
|
|
@@ -67,16 +68,17 @@ xw-devtool
|
|
|
67
68
|
4. QR Code Generator
|
|
68
69
|
5. URL Encode/Decode
|
|
69
70
|
6. String Encode/Decode (Base64)
|
|
70
|
-
7.
|
|
71
|
-
8.
|
|
72
|
-
9.
|
|
73
|
-
a.
|
|
74
|
-
b.
|
|
75
|
-
c.
|
|
76
|
-
d.
|
|
77
|
-
e.
|
|
78
|
-
f.
|
|
79
|
-
g.
|
|
71
|
+
7. Unicode Encode/Decode
|
|
72
|
+
8. HTML Entity Encode/Decode
|
|
73
|
+
9. Variable Format Converter
|
|
74
|
+
a. Chinese to Pinyin
|
|
75
|
+
b. Time Format / Timestamp
|
|
76
|
+
c. Color Converter (Hex <-> RGB)
|
|
77
|
+
d. Get UUID
|
|
78
|
+
e. Hash Calculator (MD5/SHA/SM3)
|
|
79
|
+
f. Mock Text
|
|
80
|
+
g. Special Characters (Symbols)
|
|
81
|
+
h. Emoji Picker
|
|
80
82
|
0. Exit
|
|
81
83
|
=================================
|
|
82
84
|
```
|
|
@@ -139,56 +141,62 @@ g. Emoji Picker
|
|
|
139
141
|
- **Manual input**: 手动粘贴或输入文本。
|
|
140
142
|
- 输出支持:直接复制、保存为文件、预览后复制。
|
|
141
143
|
|
|
142
|
-
### 7.
|
|
144
|
+
### 7. Unicode 编码/解码
|
|
143
145
|
- 选择 `7` 进入。
|
|
146
|
+
- **Encode**: 将文本转换为 Unicode 转义序列 (如 `\u4F60\u597D`)。
|
|
147
|
+
- **Decode**: 将 Unicode 转义序列还原为文本。
|
|
148
|
+
- 结果自动复制到剪贴板。
|
|
149
|
+
|
|
150
|
+
### 8. HTML 实体编码/解码
|
|
151
|
+
- 选择 `8` 进入。
|
|
144
152
|
- 支持两种编码模式:
|
|
145
153
|
- **Standard**: 仅编码特殊字符(如 `<` `>` `&` 及非 ASCII 字符)。
|
|
146
154
|
- **Everything**: 编码所有字符(包括 ASCII 字母数字)。
|
|
147
155
|
- 支持直接回车读取剪贴板内容。
|
|
148
156
|
- 结果自动复制到剪贴板。
|
|
149
157
|
|
|
150
|
-
###
|
|
151
|
-
- 选择 `
|
|
158
|
+
### 9. 变量格式转换
|
|
159
|
+
- 选择 `9` 进入。
|
|
152
160
|
- 输入变量名(支持直接回车读取剪贴板)。
|
|
153
161
|
- 自动展示 CamelCase, PascalCase, SnakeCase, KebabCase, ConstantCase 五种格式。
|
|
154
162
|
- 选择一种格式自动复制。
|
|
155
163
|
|
|
156
|
-
###
|
|
157
|
-
- 选择 `
|
|
164
|
+
### 10. 中文转拼音
|
|
165
|
+
- 选择 `a` 进入。
|
|
158
166
|
- 输入中文字符串(支持直接回车读取剪贴板)。
|
|
159
167
|
- 输出对应的拼音(无声调)。
|
|
160
168
|
|
|
161
|
-
###
|
|
162
|
-
- 选择 `
|
|
169
|
+
### 11. 时间格式化 (Time Format)
|
|
170
|
+
- 选择 `b` 进入。
|
|
163
171
|
- 支持时间戳转日期字符串,或日期字符串转时间戳。
|
|
164
172
|
- 直接回车可获取当前时间戳。
|
|
165
173
|
|
|
166
|
-
###
|
|
167
|
-
- 选择 `
|
|
174
|
+
### 12. 颜色转换 (Hex <-> RGB)
|
|
175
|
+
- 选择 `c` 进入。
|
|
168
176
|
- 输入 Hex 颜色值 (如 #333) 或 RGB 值 (如 rgb(51,51,51))。
|
|
169
177
|
- 自动转换并显示对应格式。
|
|
170
178
|
|
|
171
|
-
###
|
|
172
|
-
- 选择 `
|
|
179
|
+
### 13. Get UUID
|
|
180
|
+
- 选择 `d` 进入。
|
|
173
181
|
- 自动生成一个 UUID v4 并复制到剪贴板。
|
|
174
182
|
|
|
175
|
-
###
|
|
176
|
-
- 选择 `
|
|
183
|
+
### 14. 哈希计算 (Encryption)
|
|
184
|
+
- 选择 `e` 进入。
|
|
177
185
|
- 输入文本(支持直接回车读取剪贴板)。
|
|
178
186
|
- 同时计算并显示 MD5, SHA1, SHA256, SHA512, SM3 哈希值。
|
|
179
187
|
|
|
180
|
-
###
|
|
181
|
-
- 选择 `
|
|
188
|
+
### 15. Mock 数据生成
|
|
189
|
+
- 选择 `f` 进入。
|
|
182
190
|
- 提供多种数据类型:英文段落、中文字符、身份证号、邮箱、手机号等。
|
|
183
191
|
- 支持指定生成数量。
|
|
184
192
|
|
|
185
|
-
###
|
|
186
|
-
- 选择 `
|
|
193
|
+
### 16. 特殊符号大全
|
|
194
|
+
- 选择 `g` 进入。
|
|
187
195
|
- 网格化展示常用特殊符号。
|
|
188
196
|
- 输入符号对应的编号即可一键复制。
|
|
189
197
|
|
|
190
|
-
###
|
|
191
|
-
- 选择 `
|
|
198
|
+
### 17. Emoji 输入
|
|
199
|
+
- 选择 `h` 进入。
|
|
192
200
|
- 分类展示常用 Emoji (表情、手势、动物、食物等)。
|
|
193
201
|
- 输入编号选择并复制 Emoji 到剪贴板。
|
|
194
202
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import { copy } from '../utils/clipboard.js';
|
|
3
|
+
import { selectFromMenu } from '../utils/menu.js';
|
|
4
|
+
|
|
5
|
+
export async function unicodeHandler() {
|
|
6
|
+
const mode = await selectFromMenu('Unicode Encode/Decode', [
|
|
7
|
+
{ name: 'Encode (Text -> \\uXXXX)', value: 'encode' },
|
|
8
|
+
{ name: 'Decode (\\uXXXX -> Text)', value: 'decode' }
|
|
9
|
+
]);
|
|
10
|
+
|
|
11
|
+
const { input } = await inquirer.prompt([
|
|
12
|
+
{
|
|
13
|
+
type: 'input',
|
|
14
|
+
name: 'input',
|
|
15
|
+
message: `Enter string to ${mode}:`
|
|
16
|
+
}
|
|
17
|
+
]);
|
|
18
|
+
|
|
19
|
+
let result;
|
|
20
|
+
try {
|
|
21
|
+
if (mode === 'encode') {
|
|
22
|
+
const encodeType = await selectFromMenu('Select Encoding Mode', [
|
|
23
|
+
{ name: 'Encode Non-ASCII Only (Recommended)', value: 'non-ascii' },
|
|
24
|
+
{ name: 'Encode All Characters', value: 'all' }
|
|
25
|
+
]);
|
|
26
|
+
result = encodeUnicode(input, encodeType === 'non-ascii');
|
|
27
|
+
} else {
|
|
28
|
+
result = decodeUnicode(input);
|
|
29
|
+
}
|
|
30
|
+
console.log(`\nResult:\n${result}\n`);
|
|
31
|
+
await copy(result);
|
|
32
|
+
} catch (e) {
|
|
33
|
+
console.error('Error processing Unicode:', e.message);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function encodeUnicode(str, onlyNonAscii) {
|
|
38
|
+
return str.split('').map(char => {
|
|
39
|
+
const code = char.charCodeAt(0);
|
|
40
|
+
if (onlyNonAscii && code <= 127) {
|
|
41
|
+
return char;
|
|
42
|
+
}
|
|
43
|
+
const hex = code.toString(16).toUpperCase();
|
|
44
|
+
return '\\u' + '0000'.substring(0, 4 - hex.length) + hex;
|
|
45
|
+
}).join('');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function decodeUnicode(str) {
|
|
49
|
+
return str.replace(/\\u[\dA-F]{4}/gi, (match) => {
|
|
50
|
+
return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
|
|
51
|
+
});
|
|
52
|
+
}
|
package/src/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import inquirer from 'inquirer';
|
|
|
2
2
|
import { program } from 'commander';
|
|
3
3
|
import { urlHandler } from './commands/url.js';
|
|
4
4
|
import { base64Handler } from './commands/base64.js';
|
|
5
|
+
import { unicodeHandler } from './commands/unicode.js';
|
|
5
6
|
import { imgBase64Handler } from './commands/imgBase64.js';
|
|
6
7
|
import { imgConvertHandler } from './commands/imgConvert.js';
|
|
7
8
|
import { timeFormatHandler } from './commands/timeFormat.js';
|
|
@@ -42,6 +43,7 @@ const features = [
|
|
|
42
43
|
// Encode/Decode & Formatting
|
|
43
44
|
{ name: 'URL Encode/Decode', value: 'url' },
|
|
44
45
|
{ name: 'String Encode/Decode (Base64)', value: 'base64' },
|
|
46
|
+
{ name: 'Unicode Encode/Decode', value: 'unicode' },
|
|
45
47
|
{ name: 'HTML Entity Encode/Decode', value: 'htmlEntities' },
|
|
46
48
|
{ name: 'Variable Format Converter', value: 'variableFormat' },
|
|
47
49
|
{ name: 'Chinese to Pinyin', value: 'pinyin' },
|
|
@@ -140,6 +142,9 @@ async function handleAction(action) {
|
|
|
140
142
|
case 'base64':
|
|
141
143
|
await base64Handler();
|
|
142
144
|
break;
|
|
145
|
+
case 'unicode':
|
|
146
|
+
await unicodeHandler();
|
|
147
|
+
break;
|
|
143
148
|
case 'imgBase64':
|
|
144
149
|
await imgBase64Handler();
|
|
145
150
|
break;
|