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 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. HTML Entity Encode/Decode
71
- 8. Variable Format Converter
72
- 9. Chinese to Pinyin
73
- a. Time Format / Timestamp
74
- b. Color Converter (Hex <-> RGB)
75
- c. Get UUID
76
- d. Hash Calculator (MD5/SHA/SM3)
77
- e. Mock Text
78
- f. Special Characters (Symbols)
79
- g. Emoji Picker
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. HTML 实体编码/解码
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
- ### 8. 变量格式转换
151
- - 选择 `8` 进入。
158
+ ### 9. 变量格式转换
159
+ - 选择 `9` 进入。
152
160
  - 输入变量名(支持直接回车读取剪贴板)。
153
161
  - 自动展示 CamelCase, PascalCase, SnakeCase, KebabCase, ConstantCase 五种格式。
154
162
  - 选择一种格式自动复制。
155
163
 
156
- ### 9. 中文转拼音
157
- - 选择 `9` 进入。
164
+ ### 10. 中文转拼音
165
+ - 选择 `a` 进入。
158
166
  - 输入中文字符串(支持直接回车读取剪贴板)。
159
167
  - 输出对应的拼音(无声调)。
160
168
 
161
- ### 10. 时间格式化 (Time Format)
162
- - 选择 `a` 进入。
169
+ ### 11. 时间格式化 (Time Format)
170
+ - 选择 `b` 进入。
163
171
  - 支持时间戳转日期字符串,或日期字符串转时间戳。
164
172
  - 直接回车可获取当前时间戳。
165
173
 
166
- ### 11. 颜色转换 (Hex <-> RGB)
167
- - 选择 `b` 进入。
174
+ ### 12. 颜色转换 (Hex <-> RGB)
175
+ - 选择 `c` 进入。
168
176
  - 输入 Hex 颜色值 (如 #333) 或 RGB 值 (如 rgb(51,51,51))。
169
177
  - 自动转换并显示对应格式。
170
178
 
171
- ### 12. Get UUID
172
- - 选择 `c` 进入。
179
+ ### 13. Get UUID
180
+ - 选择 `d` 进入。
173
181
  - 自动生成一个 UUID v4 并复制到剪贴板。
174
182
 
175
- ### 13. 哈希计算 (Encryption)
176
- - 选择 `d` 进入。
183
+ ### 14. 哈希计算 (Encryption)
184
+ - 选择 `e` 进入。
177
185
  - 输入文本(支持直接回车读取剪贴板)。
178
186
  - 同时计算并显示 MD5, SHA1, SHA256, SHA512, SM3 哈希值。
179
187
 
180
- ### 14. Mock 数据生成
181
- - 选择 `e` 进入。
188
+ ### 15. Mock 数据生成
189
+ - 选择 `f` 进入。
182
190
  - 提供多种数据类型:英文段落、中文字符、身份证号、邮箱、手机号等。
183
191
  - 支持指定生成数量。
184
192
 
185
- ### 15. 特殊符号大全
186
- - 选择 `f` 进入。
193
+ ### 16. 特殊符号大全
194
+ - 选择 `g` 进入。
187
195
  - 网格化展示常用特殊符号。
188
196
  - 输入符号对应的编号即可一键复制。
189
197
 
190
- ### 16. Emoji 输入
191
- - 选择 `g` 进入。
198
+ ### 17. Emoji 输入
199
+ - 选择 `h` 进入。
192
200
  - 分类展示常用 Emoji (表情、手势、动物、食物等)。
193
201
  - 输入编号选择并复制 Emoji 到剪贴板。
194
202
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xw-devtool-cli",
3
- "version": "1.0.10",
3
+ "version": "1.0.11",
4
4
  "type": "module",
5
5
  "description": "基于node的开发者助手cli",
6
6
  "main": "index.js",
@@ -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;