xw-devtool-cli 1.0.14 → 1.0.15
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 +15 -1
- package/package.json +21 -3
- package/src/commands/markdown.js +75 -0
- package/src/index.js +6 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
一个基于 Node.js 的开发者命令行工具箱,旨在提供开箱即用的常用开发工具,帮助开发者快速处理日常任务。
|
|
4
4
|
|
|
5
|
-
主要功能包括:Base64 编解码、图片格式转换、图片与 Base64 互转、Mock 数据生成、时间戳/日期格式化、时间计算、URL 编解码、UUID
|
|
5
|
+
主要功能包括:Base64 编解码、图片格式转换、图片与 Base64 互转、Mock 数据生成、时间戳/日期格式化、时间计算、URL 编解码、UUID 生成、汉字转拼音、颜色转换、变量格式转换、哈希计算、二维码生成、特殊符号大全、Markdown 语法工具等。所有结果均自动复制到剪贴板,极大提升开发效率。
|
|
6
6
|
|
|
7
7
|
## ✨ 功能特性
|
|
8
8
|
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
- **特殊符号大全**:包含常用符号、箭头、数学符号、货币、希腊字母等 170+ 个符号,支持一键复制。
|
|
31
31
|
- **Emoji 输入**:支持分类查看和选择常用 Emoji,一键复制到剪贴板。
|
|
32
32
|
- **HTML 实体工具**:支持 HTML 实体编码与解码 (如 `&` <-> `&`)。
|
|
33
|
+
- **Markdown 语法工具**:提供常用 Markdown 语法模板 (Headers, Lists, Tables, Code 等),一键复制。
|
|
33
34
|
- **占位图生成**:自定义尺寸、背景色、文字颜色和格式生成占位图。
|
|
34
35
|
- **便捷操作**:
|
|
35
36
|
- 支持文件选择对话框 (Windows)。
|
|
@@ -82,6 +83,7 @@ g. Hash Calculator (MD5/SHA/SM3)
|
|
|
82
83
|
h. Mock Text
|
|
83
84
|
i. Special Characters (Symbols)
|
|
84
85
|
j. Emoji Picker
|
|
86
|
+
k. Markdown Snippets
|
|
85
87
|
0. Exit
|
|
86
88
|
=================================
|
|
87
89
|
```
|
|
@@ -231,6 +233,18 @@ j. Emoji Picker
|
|
|
231
233
|
- 分类展示常用 Emoji (表情、手势、动物、食物等)。
|
|
232
234
|
- 输入编号选择并复制 Emoji 到剪贴板。
|
|
233
235
|
|
|
236
|
+
### 20. Markdown 语法工具 (Markdown Snippets)
|
|
237
|
+
- 选择 `k` 进入。
|
|
238
|
+
- 提供常用的 Markdown 语法模板,分类包括:
|
|
239
|
+
- **Headers**: 标题 (H1-H6)。
|
|
240
|
+
- **Emphasis**: 加粗、斜体、删除线。
|
|
241
|
+
- **Lists**: 无序列表、有序列表、任务列表。
|
|
242
|
+
- **Links & Images**: 链接、图片插入。
|
|
243
|
+
- **Code**: 行内代码、代码块。
|
|
244
|
+
- **Tables**: 表格模板。
|
|
245
|
+
- **Others**: 引用、分割线、折叠详情等。
|
|
246
|
+
- 选择对应语法后,模板将自动复制到剪贴板。
|
|
247
|
+
|
|
234
248
|
## 📄 License
|
|
235
249
|
|
|
236
250
|
ISC
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xw-devtool-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.15",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "基于node的开发者助手cli",
|
|
6
6
|
"main": "index.js",
|
|
@@ -20,17 +20,35 @@
|
|
|
20
20
|
"keywords": [
|
|
21
21
|
"cli",
|
|
22
22
|
"devtools",
|
|
23
|
+
"developer-tools",
|
|
24
|
+
"toolbox",
|
|
25
|
+
"utility",
|
|
23
26
|
"base64",
|
|
24
|
-
"url",
|
|
27
|
+
"url-encode",
|
|
28
|
+
"unicode",
|
|
29
|
+
"html-entities",
|
|
25
30
|
"uuid",
|
|
26
31
|
"pinyin",
|
|
27
32
|
"mock",
|
|
33
|
+
"mock-data",
|
|
28
34
|
"timestamp",
|
|
29
35
|
"time",
|
|
36
|
+
"date-calculation",
|
|
30
37
|
"image",
|
|
38
|
+
"image-conversion",
|
|
31
39
|
"webp",
|
|
32
40
|
"jpg",
|
|
33
|
-
"png"
|
|
41
|
+
"png",
|
|
42
|
+
"placeholder-image",
|
|
43
|
+
"qrcode",
|
|
44
|
+
"json-format",
|
|
45
|
+
"variable-case",
|
|
46
|
+
"hash",
|
|
47
|
+
"encryption",
|
|
48
|
+
"md5",
|
|
49
|
+
"color-converter",
|
|
50
|
+
"emoji",
|
|
51
|
+
"markdown"
|
|
34
52
|
],
|
|
35
53
|
"author": "npmxw",
|
|
36
54
|
"license": "ISC",
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { selectFromMenu } from '../utils/menu.js';
|
|
2
|
+
import { copy } from '../utils/clipboard.js';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
|
|
5
|
+
const MARKDOWN_SNIPPETS = {
|
|
6
|
+
'headers': [
|
|
7
|
+
{ name: 'H1 Header (#)', value: '# Header 1' },
|
|
8
|
+
{ name: 'H2 Header (##)', value: '## Header 2' },
|
|
9
|
+
{ name: 'H3 Header (###)', value: '### Header 3' },
|
|
10
|
+
{ name: 'H4 Header (####)', value: '#### Header 4' },
|
|
11
|
+
],
|
|
12
|
+
'emphasis': [
|
|
13
|
+
{ name: 'Bold (**text**)', value: '**Bold Text**' },
|
|
14
|
+
{ name: 'Italic (*text*)', value: '*Italic Text*' },
|
|
15
|
+
{ name: 'Bold Italic (***text***)', value: '***Bold Italic Text***' },
|
|
16
|
+
{ name: 'Strikethrough (~~text~~)', value: '~~Strikethrough Text~~' },
|
|
17
|
+
],
|
|
18
|
+
'lists': [
|
|
19
|
+
{ name: 'Unordered List (-)', value: '- Item 1\n- Item 2\n- Item 3' },
|
|
20
|
+
{ name: 'Ordered List (1.)', value: '1. Item 1\n2. Item 2\n3. Item 3' },
|
|
21
|
+
{ name: 'Task List (- [ ])', value: '- [ ] To Do\n- [x] Done' },
|
|
22
|
+
],
|
|
23
|
+
'links_images': [
|
|
24
|
+
{ name: 'Link [text](url)', value: '[Link Text](https://example.com)' },
|
|
25
|
+
{ name: 'Image ', value: '' },
|
|
26
|
+
{ name: 'Link with Title', value: '[Link Text](https://example.com "Title")' },
|
|
27
|
+
],
|
|
28
|
+
'code': [
|
|
29
|
+
{ name: 'Inline Code (`text`)', value: '`code`' },
|
|
30
|
+
{ name: 'Code Block (```)', value: '```javascript\nconsole.log("Hello World");\n```' },
|
|
31
|
+
],
|
|
32
|
+
'tables': [
|
|
33
|
+
{ name: 'Table (3x3)', value: '| Header 1 | Header 2 | Header 3 |\n| :--- | :---: | ---: |\n| Left | Center | Right |\n| Item 1 | Item 2 | Item 3 |' },
|
|
34
|
+
],
|
|
35
|
+
'others': [
|
|
36
|
+
{ name: 'Blockquote (>)', value: '> This is a quote.' },
|
|
37
|
+
{ name: 'Horizontal Rule (---)', value: '---' },
|
|
38
|
+
{ name: 'Details/Summary (<details>)', value: '<details>\n<summary>Click to expand</summary>\n\nHidden content here.\n</details>' },
|
|
39
|
+
]
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export async function markdownHandler() {
|
|
43
|
+
while (true) {
|
|
44
|
+
const category = await selectFromMenu('Markdown Snippets', [
|
|
45
|
+
{ name: 'Headers (H1-H6)', value: 'headers' },
|
|
46
|
+
{ name: 'Emphasis (Bold, Italic...)', value: 'emphasis' },
|
|
47
|
+
{ name: 'Lists (Bullet, Numbered, Task)', value: 'lists' },
|
|
48
|
+
{ name: 'Links & Images', value: 'links_images' },
|
|
49
|
+
{ name: 'Code (Inline, Block)', value: 'code' },
|
|
50
|
+
{ name: 'Tables', value: 'tables' },
|
|
51
|
+
{ name: 'Others (Quote, HR, Details)', value: 'others' },
|
|
52
|
+
{ name: 'Back to Main Menu', value: 'back' }
|
|
53
|
+
]);
|
|
54
|
+
|
|
55
|
+
if (category === 'back') {
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const snippets = MARKDOWN_SNIPPETS[category];
|
|
60
|
+
const snippetValue = await selectFromMenu('Select Snippet', [
|
|
61
|
+
...snippets,
|
|
62
|
+
{ name: 'Back', value: 'back' }
|
|
63
|
+
]);
|
|
64
|
+
|
|
65
|
+
if (snippetValue === 'back') {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
await copy(snippetValue);
|
|
70
|
+
|
|
71
|
+
// Optional: ask if user wants to continue or exit
|
|
72
|
+
// For now, loop back to category selection is consistent with other tools or just exit?
|
|
73
|
+
// Let's loop back to categories to allow picking another one.
|
|
74
|
+
}
|
|
75
|
+
}
|
package/src/index.js
CHANGED
|
@@ -19,6 +19,7 @@ import { specialCharsHandler } from './commands/specialChars.js';
|
|
|
19
19
|
import { emojiHandler } from './commands/emoji.js';
|
|
20
20
|
import { htmlEntitiesHandler } from './commands/htmlEntities.js';
|
|
21
21
|
import { placeholderImgHandler } from './commands/placeholderImg.js';
|
|
22
|
+
import { markdownHandler } from './commands/markdown.js';
|
|
22
23
|
|
|
23
24
|
process.on('SIGINT', () => {
|
|
24
25
|
console.log('\nBye!');
|
|
@@ -61,7 +62,8 @@ const features = [
|
|
|
61
62
|
// Content/Mocking
|
|
62
63
|
{ name: 'Mock Text', value: 'mock' },
|
|
63
64
|
{ name: 'Special Characters (Symbols)', value: 'specialChars' },
|
|
64
|
-
{ name: 'Emoji Picker', value: 'emoji' }
|
|
65
|
+
{ name: 'Emoji Picker', value: 'emoji' },
|
|
66
|
+
{ name: 'Markdown Snippets', value: 'markdown' }
|
|
65
67
|
];
|
|
66
68
|
|
|
67
69
|
async function main() {
|
|
@@ -197,6 +199,9 @@ async function handleAction(action) {
|
|
|
197
199
|
case 'placeholderImg':
|
|
198
200
|
await placeholderImgHandler();
|
|
199
201
|
break;
|
|
202
|
+
case 'markdown':
|
|
203
|
+
await markdownHandler();
|
|
204
|
+
break;
|
|
200
205
|
default:
|
|
201
206
|
console.log('Feature not implemented yet.');
|
|
202
207
|
}
|