maidang 1.0.1

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 ADDED
@@ -0,0 +1,36 @@
1
+ # maidang-cli
2
+
3
+ 一个极简的个人信息命令行工具,支持展示主页、工作经历和猫咪图片。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm i -g maidang-cli
9
+ ```
10
+
11
+ ## 使用
12
+
13
+ ```bash
14
+ maidang
15
+ maidang career
16
+ maidang cat
17
+ maidang meow
18
+ maidang birthday
19
+ ```
20
+
21
+ ## 命令说明
22
+
23
+ - `maidang`:展示主页信息
24
+ - `maidang career`:展示职业经历
25
+ - `maidang cat`:展示麦麦图片
26
+ - `maidang meow`:`cat` 的别名
27
+ - `maidang birthday`:展示生日信息与版本信息
28
+
29
+ ## 本地开发
30
+
31
+ ```bash
32
+ pnpm install
33
+ pnpm build
34
+ pnpm test
35
+ npm link
36
+ ```
Binary file
package/dist/index.js ADDED
@@ -0,0 +1,316 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/index.ts
4
+ import { Command as Command4 } from "commander";
5
+
6
+ // src/commands/home.ts
7
+ import { Command } from "commander";
8
+ import chalk2 from "chalk";
9
+
10
+ // src/data/home.json
11
+ var home_default = {
12
+ greetings: [
13
+ "\u6B22\u8FCE\u6765\u5230\u9EA6\u5F53\u7684\u4E16\u754C\uFF01\u{1F44B}",
14
+ "\u4F60\u597D\u5440\uFF0C\u6211\u662F\u9EA6\u5F53\uFF01\u2728",
15
+ "Hey\uFF0C\u6B22\u8FCE\u6765\u4E86\u89E3\u6211\uFF01\u{1F389}",
16
+ "\u63A2\u7D22\u9EA6\u5F53\u7684\u79D8\u5BC6\u82B1\u56ED \u{1F338}",
17
+ "\u51C6\u5907\u597D\u8BA4\u8BC6\u6211\u4E86\u5417\uFF1F\u{1F680}"
18
+ ],
19
+ basicInfo: {
20
+ name: "\u9EA6\u5F53",
21
+ role: "AI \u65F6\u4EE3\u7684\u63A2\u7D22\u8005",
22
+ motto: "\u4FDD\u6301\u597D\u5947\uFF0C\u6301\u7EED\u63A2\u7D22"
23
+ }
24
+ };
25
+
26
+ // src/utils/display.ts
27
+ import chalk from "chalk";
28
+ import boxen from "boxen";
29
+ import figlet from "figlet";
30
+ import ora from "ora";
31
+ async function displayTitle(text) {
32
+ return new Promise((resolve) => {
33
+ figlet.text(text, {
34
+ font: "Big",
35
+ horizontalLayout: "default",
36
+ verticalLayout: "default"
37
+ }, (err, data) => {
38
+ if (err) {
39
+ console.log(chalk.cyan.bold(text));
40
+ } else {
41
+ console.log(chalk.cyan(data));
42
+ }
43
+ resolve();
44
+ });
45
+ });
46
+ }
47
+ function displayBox(content, options) {
48
+ const borderOptions = {
49
+ padding: options?.padding || 1,
50
+ borderColor: options?.borderColor || "cyan",
51
+ borderStyle: "round"
52
+ };
53
+ if (options?.title) {
54
+ borderOptions.title = options.title;
55
+ borderOptions.titleAlignment = "center";
56
+ }
57
+ console.log(boxen(content, borderOptions));
58
+ }
59
+ function createSpinner(text) {
60
+ return ora({
61
+ text,
62
+ color: "cyan"
63
+ });
64
+ }
65
+ function displaySeparator(char = "\u2500", length = 50) {
66
+ console.log(chalk.gray(char.repeat(length)));
67
+ }
68
+ function displaySection(title) {
69
+ displaySeparator();
70
+ console.log(chalk.bold.cyan(`
71
+ ${title}`));
72
+ displaySeparator();
73
+ }
74
+
75
+ // src/commands/home.ts
76
+ function createHomeCommand() {
77
+ const cmd = new Command("maidang").description("\u6B22\u8FCE\u6765\u5230\u9EA6\u5F53\u7684\u4E16\u754C").action(async () => {
78
+ const randomGreeting = home_default.greetings[Math.floor(Math.random() * home_default.greetings.length)];
79
+ const spinner = createSpinner("\u6B63\u5728\u53EC\u5524\u9EA6\u5F53...");
80
+ spinner.start();
81
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
82
+ spinner.stop();
83
+ console.clear();
84
+ await displayTitle("MAIDANG");
85
+ console.log("");
86
+ const welcomeContent = `
87
+ ${chalk2.white.bold(randomGreeting)}
88
+
89
+ ${chalk2.gray("\u2500".repeat(40))}
90
+
91
+ ${chalk2.yellow("\u{1F464}")} ${chalk2.white.bold("\u59D3\u540D:")} ${chalk2.cyan(home_default.basicInfo.name)}
92
+ ${chalk2.yellow("\u{1F4BC}")} ${chalk2.white.bold("\u8EAB\u4EFD:")} ${chalk2.cyan(home_default.basicInfo.role)}
93
+ ${chalk2.yellow("\u{1F4AD}")} ${chalk2.white.bold("\u5EA7\u53F3\u94ED:")} ${chalk2.green(home_default.basicInfo.motto)}
94
+
95
+ ${chalk2.gray("\u2500".repeat(40))}
96
+
97
+ ${chalk2.gray("\u8F93\u5165 " + chalk2.cyan.bold("maidang --help") + " \u67E5\u770B\u6240\u6709\u547D\u4EE4")}
98
+ ${chalk2.gray("\u8F93\u5165 " + chalk2.cyan.bold("maidang career") + " \u67E5\u770B\u5DE5\u4F5C\u7ECF\u5386")}
99
+ ${chalk2.gray("\u8F93\u5165 " + chalk2.cyan.bold("maidang cat") + " \u6216 " + chalk2.cyan.bold("maidang meow") + " \u67E5\u770B\u6211\u7684\u732B")}
100
+ `;
101
+ displayBox(welcomeContent, {
102
+ padding: 2
103
+ });
104
+ console.log("");
105
+ });
106
+ return cmd;
107
+ }
108
+
109
+ // src/commands/career.ts
110
+ import { Command as Command2 } from "commander";
111
+ import chalk3 from "chalk";
112
+
113
+ // src/data/career.json
114
+ var career_default = {
115
+ career: [
116
+ {
117
+ company: "\u5F71\u5200 RPA\uFF08AI Power \u56E2\u961F\uFF09",
118
+ role: "\u5168\u6808\u5DE5\u7A0B\u5E08 / AI Agent \u5F00\u53D1\u8005",
119
+ period: "2025.10 - \u81F3\u4ECA",
120
+ description: "\u805A\u7126 AI \u5DE5\u4F5C\u6D41\u5EFA\u8BBE\uFF0C\u4E3B\u5BFC AI Agent \u65B9\u6848\u8BBE\u8BA1\u4E0E\u843D\u5730\uFF0C\u63A8\u52A8\u4E1A\u52A1\u4ECE\u529F\u80FD\u5F00\u53D1\u8D70\u5411\u667A\u80FD\u5316\u6D41\u7A0B\u7F16\u6392\u3002",
121
+ achievements: [
122
+ "\u8D1F\u8D23 AI \u5DE5\u4F5C\u6D41\u76F8\u5173\u80FD\u529B\u5EFA\u8BBE\uFF0C\u63A8\u52A8\u56E2\u961F\u5F62\u6210\u53EF\u590D\u7528\u7684\u6D41\u7A0B\u5316\u4EA4\u4ED8\u65B9\u5F0F",
123
+ "\u62C5\u4EFB AI Agent \u6838\u5FC3\u5F00\u53D1\u8005\uFF0C\u8986\u76D6\u4ECE\u9700\u6C42\u62C6\u89E3\u3001\u63D0\u793A\u8BCD\u8BBE\u8BA1\u5230\u670D\u52A1\u7AEF\u843D\u5730\u7684\u5B8C\u6574\u94FE\u8DEF",
124
+ "\u4EE5\u5168\u6808\u65B9\u5F0F\u534F\u540C\u524D\u540E\u7AEF\u5F00\u53D1\uFF0C\u63D0\u5347\u590D\u6742\u4E1A\u52A1\u5728\u7814\u53D1\u4FA7\u7684\u843D\u5730\u6548\u7387",
125
+ "\u5728\u56E2\u961F\u5185\u63A8\u8FDB AI \u5DE5\u7A0B\u5316\u5B9E\u8DF5\uFF0C\u6301\u7EED\u63D0\u5347\u9879\u76EE\u7A33\u5B9A\u6027\u4E0E\u8FED\u4EE3\u901F\u5EA6"
126
+ ]
127
+ },
128
+ {
129
+ company: "\u676D\u5DDE\u4E0D\u5FD8\u667A\u80FD\u79D1\u6280\u6709\u9650\u516C\u53F8",
130
+ role: "\u5168\u6808\u5F00\u53D1\u5DE5\u7A0B\u5E08",
131
+ period: "2024.10 - 2025.09",
132
+ description: "\u53C2\u4E0E AI \u89C6\u9891\u751F\u6210\u4E0E\u5E7F\u544A\u6295\u653E\u4EA7\u54C1\u5EFA\u8BBE\uFF0C\u8D1F\u8D23\u524D\u540E\u7AEF\u8054\u52A8\u548C\u6838\u5FC3\u529F\u80FD\u843D\u5730\u3002",
133
+ achievements: [
134
+ "\u57FA\u4E8E Next.js + React + Node.js \u53C2\u4E0E\u9AD8\u4EA4\u4E92\u5E94\u7528\u4E0E\u4E2D\u53F0\u670D\u52A1\u5F00\u53D1",
135
+ "\u53C2\u4E0E ASR\u3001LLM\u3001\u89C6\u9891\u4EFB\u52A1\u94FE\u8DEF\u7B49 AI \u76F8\u5173\u529F\u80FD\u5EFA\u8BBE",
136
+ "\u53C2\u4E0E\u81EA\u52A8\u5316\u6295\u653E\u4E0E\u5DE5\u7A0B\u5316\u6D41\u7A0B\u5EFA\u8BBE\uFF0C\u63D0\u5347\u4E1A\u52A1\u5904\u7406\u6548\u7387"
137
+ ]
138
+ },
139
+ {
140
+ company: "\u676D\u5DDE\u89C6\u4FE1\u79D1\u6280\u6709\u9650\u516C\u53F8",
141
+ role: "\u524D\u7AEF\u5F00\u53D1\u5DE5\u7A0B\u5E08",
142
+ period: "2022.10 - 2024.06",
143
+ description: "\u8D1F\u8D23\u524D\u7AEF\u5DE5\u7A0B\u5316\u3001\u4E1A\u52A1\u7CFB\u7EDF\u5F00\u53D1\u4E0E\u56E2\u961F\u534F\u4F5C\u6D41\u7A0B\u4F18\u5316\u3002",
144
+ achievements: [
145
+ "\u63A8\u52A8\u89C4\u8303\u4F53\u7CFB\u843D\u5730\uFF08Lint\u3001Commit \u89C4\u8303\u3001\u811A\u624B\u67B6\u7B49\uFF09\uFF0C\u63D0\u5347\u56E2\u961F\u7814\u53D1\u4E00\u81F4\u6027",
146
+ "\u53C2\u4E0E\u6784\u5EFA\u79C1\u6709\u5E93\u4E0E\u5DE5\u7A0B\u5316\u4F53\u7CFB\uFF0C\u63D0\u5347\u591A\u9879\u76EE\u590D\u7528\u6548\u7387",
147
+ "\u652F\u6491\u540E\u53F0\u7CFB\u7EDF\u4E0E\u6838\u5FC3\u4E1A\u52A1\u9875\u9762\u7684\u6301\u7EED\u8FED\u4EE3"
148
+ ]
149
+ },
150
+ {
151
+ company: "\u534E\u76D6\u5BB6\u5C45\u3001\u9177\u5BB6\u4E50",
152
+ role: "\u524D\u7AEF\u5F00\u53D1\u5DE5\u7A0B\u5E08",
153
+ period: "2020.11 - 2022.06",
154
+ description: "\u65E9\u671F\u7ECF\u5386\uFF0C\u4E3B\u8981\u8D1F\u8D23 2D Canvas \u76F8\u5173\u529F\u80FD\u5F00\u53D1\u4E0E\u7EF4\u62A4\u3002",
155
+ achievements: [
156
+ "\u53C2\u4E0E 2D \u8BBE\u8BA1\u5DE5\u5177\u4E0E\u4E3B\u7AD9\u76F8\u5173\u524D\u7AEF\u529F\u80FD\u5F00\u53D1",
157
+ "\u8D1F\u8D23\u753B\u5E03\u4EA4\u4E92\u3001\u5386\u53F2\u8BB0\u5F55\u4E0E\u5FEB\u6377\u952E\u7B49\u80FD\u529B\u8FED\u4EE3",
158
+ "\u4E0E\u4EA7\u54C1\u3001\u8BBE\u8BA1\u3001\u6D4B\u8BD5\u534F\u4F5C\u63A8\u8FDB\u7248\u672C\u4EA4\u4ED8"
159
+ ]
160
+ }
161
+ ]
162
+ };
163
+
164
+ // src/commands/career.ts
165
+ function createCareerCommand() {
166
+ const cmd = new Command2("career").description("\u67E5\u770B\u6211\u7684\u5DE5\u4F5C\u7ECF\u5386").action(() => {
167
+ displaySection("\u{1F4BC} \u5DE5\u4F5C\u7ECF\u5386");
168
+ career_default.career.forEach((job, index) => {
169
+ console.log("");
170
+ console.log(chalk3.yellow.bold(`\u{1F4CB} ${job.company}`));
171
+ console.log(chalk3.cyan(` ${job.role}`));
172
+ console.log(chalk3.gray(` ${job.period}`));
173
+ console.log("");
174
+ console.log(chalk3.white(" \u{1F4DD} " + job.description));
175
+ console.log("");
176
+ if (job.achievements && job.achievements.length > 0) {
177
+ console.log(chalk3.gray(" \u4E3B\u8981\u6210\u5C31:"));
178
+ job.achievements.forEach((achievement) => {
179
+ console.log(chalk3.green(" \u2713 " + achievement));
180
+ });
181
+ }
182
+ if (index < career_default.career.length - 1) {
183
+ console.log("");
184
+ console.log(chalk3.gray("\u2500".repeat(40)));
185
+ }
186
+ });
187
+ console.log("");
188
+ });
189
+ return cmd;
190
+ }
191
+
192
+ // src/commands/cat.ts
193
+ import { Command as Command3 } from "commander";
194
+ import chalk4 from "chalk";
195
+ import path from "path";
196
+ import fs from "fs";
197
+ var RETRO_PIXEL_WIDTH = 28;
198
+ var RETRO_PIXEL_HEIGHT = 16;
199
+ var resolveExecutableDir = () => {
200
+ if (!process.argv[1]) {
201
+ return process.cwd();
202
+ }
203
+ const executablePath = path.resolve(process.argv[1]);
204
+ try {
205
+ const resolvedExecutablePath = fs.realpathSync(executablePath);
206
+ return path.dirname(resolvedExecutablePath);
207
+ } catch {
208
+ return path.dirname(executablePath);
209
+ }
210
+ };
211
+ var resolveCatImagePath = () => {
212
+ const executableDir = resolveExecutableDir();
213
+ const packageRootDir = path.resolve(executableDir, "..");
214
+ const candidatePaths = [
215
+ path.resolve(process.cwd(), "src/assets/cat.jpg"),
216
+ path.resolve(packageRootDir, "src/assets/cat.jpg"),
217
+ path.resolve(packageRootDir, "dist/assets/cat.jpg"),
218
+ path.resolve(executableDir, "assets/cat.jpg"),
219
+ path.resolve(executableDir, "../assets/cat.jpg")
220
+ ];
221
+ for (const candidatePath of candidatePaths) {
222
+ if (fs.existsSync(candidatePath)) {
223
+ return candidatePath;
224
+ }
225
+ }
226
+ return null;
227
+ };
228
+ function createCatCommand() {
229
+ const cmd = new Command3("cat").alias("meow").description("\u67E5\u770B\u9EA6\u9EA6").action(async () => {
230
+ console.log(chalk4.yellow.bold("\u9EA6\u9EA6"));
231
+ console.log("");
232
+ try {
233
+ const catImagePath = resolveCatImagePath();
234
+ if (catImagePath) {
235
+ try {
236
+ const { default: terminalImage } = await import("terminal-image");
237
+ const image = await terminalImage.file(catImagePath, {
238
+ width: RETRO_PIXEL_WIDTH,
239
+ height: RETRO_PIXEL_HEIGHT,
240
+ preserveAspectRatio: true
241
+ });
242
+ console.log(image);
243
+ } catch (error) {
244
+ console.log(chalk4.red("\u56FE\u7247\u6E32\u67D3\u5931\u8D25"));
245
+ }
246
+ } else {
247
+ console.log(chalk4.gray("\u8BF7\u5C06\u732B\u54AA\u56FE\u7247\u653E\u5728 src/assets/cat.jpg"));
248
+ }
249
+ } catch (error) {
250
+ console.log(chalk4.gray("\u{1F4F8} \u8BF7\u5C06\u732B\u54AA\u56FE\u7247\u653E\u5728 src/assets/cat.jpg"));
251
+ }
252
+ console.log("");
253
+ });
254
+ return cmd;
255
+ }
256
+
257
+ // src/utils/version.ts
258
+ function getAgeVersion() {
259
+ const birthDate = new Date(1997, 2, 10);
260
+ const today = /* @__PURE__ */ new Date();
261
+ let age = today.getFullYear() - birthDate.getFullYear();
262
+ const monthDiff = today.getMonth() - birthDate.getMonth();
263
+ if (monthDiff < 0 || monthDiff === 0 && today.getDate() < birthDate.getDate()) {
264
+ age--;
265
+ }
266
+ return `${age}.0.0`;
267
+ }
268
+ function getVersionInfo() {
269
+ const birthDate = new Date(1997, 2, 10);
270
+ const today = /* @__PURE__ */ new Date();
271
+ let currentAge = today.getFullYear() - birthDate.getFullYear();
272
+ const monthDiff = today.getMonth() - birthDate.getMonth();
273
+ const nextBirthday = new Date(today.getFullYear(), birthDate.getMonth(), birthDate.getDate());
274
+ if (monthDiff < 0 || monthDiff === 0 && today.getDate() < birthDate.getDate()) {
275
+ currentAge--;
276
+ } else {
277
+ nextBirthday.setFullYear(today.getFullYear() + 1);
278
+ }
279
+ const version = `${currentAge}.0.0`;
280
+ return {
281
+ version,
282
+ birthDate,
283
+ currentAge,
284
+ nextBirthday
285
+ };
286
+ }
287
+
288
+ // src/index.ts
289
+ var program = new Command4();
290
+ var versionInfo = getVersionInfo();
291
+ program.name("maidang").description("\u4E86\u89E3\u9EA6\u5F53 - \u4E00\u4E2A AI \u65F6\u4EE3\u7684\u63A2\u7D22\u8005").version(getAgeVersion(), "-V, --version", "\u663E\u793A\u9EA6\u5F53\u7684\u5E74\u9F84\u7248\u672C\u53F7");
292
+ program.command("birthday").description("\u663E\u793A\u9EA6\u5F53\u7684\u751F\u65E5\u4FE1\u606F").action(() => {
293
+ const { birthDate, currentAge, nextBirthday, version } = versionInfo;
294
+ console.log(`\u{1F382} \u9EA6\u5F53\u7684\u751F\u65E5\u4FE1\u606F`);
295
+ console.log("");
296
+ console.log(`\u51FA\u751F\u65E5\u671F: ${birthDate.toLocaleDateString("zh-CN", { year: "numeric", month: "long", day: "numeric" })}`);
297
+ console.log(`\u5F53\u524D\u5E74\u9F84: ${currentAge} \u5C81`);
298
+ console.log(`\u5F53\u524D\u7248\u672C: ${version} (\u5E74\u9F84\u7248\u672C)`);
299
+ console.log(`\u4E0B\u4E00\u4E2A\u751F\u65E5: ${nextBirthday.toLocaleDateString("zh-CN", { year: "numeric", month: "long", day: "numeric" })}`);
300
+ const daysUntilNextBirthday = Math.ceil((nextBirthday.getTime() - (/* @__PURE__ */ new Date()).getTime()) / (1e3 * 60 * 60 * 24));
301
+ console.log(`\u8DDD\u79BB\u751F\u65E5\u8FD8\u6709: ${daysUntilNextBirthday} \u5929`);
302
+ if (daysUntilNextBirthday <= 30) {
303
+ console.log(`\u{1F389} \u5FEB\u8981\u8FC7\u751F\u65E5\u4E86\uFF01`);
304
+ }
305
+ });
306
+ var careerCmd = createCareerCommand();
307
+ var catCmd = createCatCommand();
308
+ program.addCommand(careerCmd);
309
+ program.addCommand(catCmd);
310
+ if (!process.argv.slice(2).length) {
311
+ const homeCmd = createHomeCommand();
312
+ homeCmd.parse(process.argv);
313
+ } else {
314
+ program.parse(process.argv);
315
+ }
316
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/commands/home.ts", "../src/data/home.json", "../src/utils/display.ts", "../src/commands/career.ts", "../src/data/career.json", "../src/commands/cat.ts", "../src/utils/version.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { createHomeCommand } from './commands/home';\nimport { createCareerCommand } from './commands/career';\nimport { createCatCommand } from './commands/cat';\nimport { getAgeVersion, getVersionInfo } from './utils/version';\n\nconst program = new Command();\n\n// \u52A8\u6001\u8BA1\u7B97\u5E74\u9F84\u7248\u672C\u53F7\nconst versionInfo = getVersionInfo();\n\nprogram\n .name('maidang')\n .description('\u4E86\u89E3\u9EA6\u5F53 - \u4E00\u4E2A AI \u65F6\u4EE3\u7684\u63A2\u7D22\u8005')\n .version(getAgeVersion(), '-V, --version', '\u663E\u793A\u9EA6\u5F53\u7684\u5E74\u9F84\u7248\u672C\u53F7');\n\n// \u6DFB\u52A0\u4E00\u4E2A\u7279\u6B8A\u7684\u751F\u65E5\u4FE1\u606F\u547D\u4EE4\nprogram\n .command('birthday')\n .description('\u663E\u793A\u9EA6\u5F53\u7684\u751F\u65E5\u4FE1\u606F')\n .action(() => {\n const { birthDate, currentAge, nextBirthday, version } = versionInfo;\n\n console.log(`\uD83C\uDF82 \u9EA6\u5F53\u7684\u751F\u65E5\u4FE1\u606F`);\n console.log('');\n console.log(`\u51FA\u751F\u65E5\u671F: ${birthDate.toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric' })}`);\n console.log(`\u5F53\u524D\u5E74\u9F84: ${currentAge} \u5C81`);\n console.log(`\u5F53\u524D\u7248\u672C: ${version} (\u5E74\u9F84\u7248\u672C)`);\n console.log(`\u4E0B\u4E00\u4E2A\u751F\u65E5: ${nextBirthday.toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric' })}`);\n\n const daysUntilNextBirthday = Math.ceil((nextBirthday.getTime() - new Date().getTime()) / (1000 * 60 * 60 * 24));\n console.log(`\u8DDD\u79BB\u751F\u65E5\u8FD8\u6709: ${daysUntilNextBirthday} \u5929`);\n\n if (daysUntilNextBirthday <= 30) {\n console.log(`\uD83C\uDF89 \u5FEB\u8981\u8FC7\u751F\u65E5\u4E86\uFF01`);\n }\n });\n\nconst careerCmd = createCareerCommand();\nconst catCmd = createCatCommand();\n\nprogram.addCommand(careerCmd);\nprogram.addCommand(catCmd);\n\nif (!process.argv.slice(2).length) {\n const homeCmd = createHomeCommand();\n homeCmd.parse(process.argv);\n} else {\n program.parse(process.argv);\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport homeData from '../data/home.json';\nimport { displayTitle, displayBox, createSpinner } from '../utils/display';\n\nexport function createHomeCommand(): Command {\n const cmd = new Command('maidang')\n .description('\u6B22\u8FCE\u6765\u5230\u9EA6\u5F53\u7684\u4E16\u754C')\n .action(async () => {\n const randomGreeting = homeData.greetings[Math.floor(Math.random() * homeData.greetings.length)];\n\n const spinner = createSpinner('\u6B63\u5728\u53EC\u5524\u9EA6\u5F53...');\n spinner.start();\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n\n spinner.stop();\n\n console.clear();\n\n await displayTitle('MAIDANG');\n\n console.log('');\n\n const welcomeContent = `\n${chalk.white.bold(randomGreeting)}\n\n${chalk.gray('\u2500'.repeat(40))}\n\n${chalk.yellow('\uD83D\uDC64')} ${chalk.white.bold('\u59D3\u540D:')} ${chalk.cyan(homeData.basicInfo.name)}\n${chalk.yellow('\uD83D\uDCBC')} ${chalk.white.bold('\u8EAB\u4EFD:')} ${chalk.cyan(homeData.basicInfo.role)}\n${chalk.yellow('\uD83D\uDCAD')} ${chalk.white.bold('\u5EA7\u53F3\u94ED:')} ${chalk.green(homeData.basicInfo.motto)}\n\n${chalk.gray('\u2500'.repeat(40))}\n\n${chalk.gray('\u8F93\u5165 ' + chalk.cyan.bold('maidang --help') + ' \u67E5\u770B\u6240\u6709\u547D\u4EE4')}\n${chalk.gray('\u8F93\u5165 ' + chalk.cyan.bold('maidang career') + ' \u67E5\u770B\u5DE5\u4F5C\u7ECF\u5386')}\n${chalk.gray('\u8F93\u5165 ' + chalk.cyan.bold('maidang cat') + ' \u6216 ' + chalk.cyan.bold('maidang meow') + ' \u67E5\u770B\u6211\u7684\u732B')}\n `;\n\n displayBox(welcomeContent, {\n padding: 2\n });\n\n console.log('');\n });\n\n return cmd;\n}\n", "{\n \"greetings\": [\n \"\u6B22\u8FCE\u6765\u5230\u9EA6\u5F53\u7684\u4E16\u754C\uFF01\uD83D\uDC4B\",\n \"\u4F60\u597D\u5440\uFF0C\u6211\u662F\u9EA6\u5F53\uFF01\u2728\",\n \"Hey\uFF0C\u6B22\u8FCE\u6765\u4E86\u89E3\u6211\uFF01\uD83C\uDF89\",\n \"\u63A2\u7D22\u9EA6\u5F53\u7684\u79D8\u5BC6\u82B1\u56ED \uD83C\uDF38\",\n \"\u51C6\u5907\u597D\u8BA4\u8BC6\u6211\u4E86\u5417\uFF1F\uD83D\uDE80\"\n ],\n \"basicInfo\": {\n \"name\": \"\u9EA6\u5F53\",\n \"role\": \"AI \u65F6\u4EE3\u7684\u63A2\u7D22\u8005\",\n \"motto\": \"\u4FDD\u6301\u597D\u5947\uFF0C\u6301\u7EED\u63A2\u7D22\"\n }\n}\n", "import chalk from 'chalk';\nimport boxen from 'boxen';\nimport figlet from 'figlet';\nimport ora, { Ora } from 'ora';\n\nexport async function displayTitle(text: string): Promise<void> {\n return new Promise((resolve) => {\n figlet.text(text, {\n font: 'Big',\n horizontalLayout: 'default',\n verticalLayout: 'default'\n }, (err, data) => {\n if (err) {\n console.log(chalk.cyan.bold(text));\n } else {\n console.log(chalk.cyan(data));\n }\n resolve();\n });\n });\n}\n\nexport function displayBox(content: string, options?: {\n title?: string;\n borderColor?: string;\n padding?: number;\n}): void {\n const borderOptions: any = {\n padding: options?.padding || 1,\n borderColor: options?.borderColor || 'cyan',\n borderStyle: 'round'\n };\n\n if (options?.title) {\n borderOptions.title = options.title;\n borderOptions.titleAlignment = 'center';\n }\n\n console.log(boxen(content, borderOptions));\n}\n\nexport function createSpinner(text: string): Ora {\n return ora({\n text,\n color: 'cyan'\n });\n}\n\nexport function displaySeparator(char: string = '\u2500', length: number = 50): void {\n console.log(chalk.gray(char.repeat(length)));\n}\n\nexport function displayItem(icon: string, text: string, color: string = 'cyan'): void {\n const colorMethod = (chalk as any)[color];\n if (colorMethod) {\n console.log(colorMethod(icon), text);\n } else {\n console.log(chalk.cyan(icon), text);\n }\n}\n\nexport function displaySection(title: string): void {\n displaySeparator();\n console.log(chalk.bold.cyan(`\\n${title}`));\n displaySeparator();\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport careerData from '../data/career.json';\nimport { displaySection } from '../utils/display';\n\nexport function createCareerCommand(): Command {\n const cmd = new Command('career')\n .description('\u67E5\u770B\u6211\u7684\u5DE5\u4F5C\u7ECF\u5386')\n .action(() => {\n displaySection('\uD83D\uDCBC \u5DE5\u4F5C\u7ECF\u5386');\n\n careerData.career.forEach((job, index) => {\n console.log('');\n\n console.log(chalk.yellow.bold(`\uD83D\uDCCB ${job.company}`));\n console.log(chalk.cyan(` ${job.role}`));\n console.log(chalk.gray(` ${job.period}`));\n console.log('');\n\n console.log(chalk.white(' \uD83D\uDCDD ' + job.description));\n console.log('');\n\n if (job.achievements && job.achievements.length > 0) {\n console.log(chalk.gray(' \u4E3B\u8981\u6210\u5C31:'));\n job.achievements.forEach(achievement => {\n console.log(chalk.green(' \u2713 ' + achievement));\n });\n }\n\n if (index < careerData.career.length - 1) {\n console.log('');\n console.log(chalk.gray('\u2500'.repeat(40)));\n }\n });\n\n console.log('');\n });\n\n return cmd;\n}\n", "{\n \"career\": [\n {\n \"company\": \"\u5F71\u5200 RPA\uFF08AI Power \u56E2\u961F\uFF09\",\n \"role\": \"\u5168\u6808\u5DE5\u7A0B\u5E08 / AI Agent \u5F00\u53D1\u8005\",\n \"period\": \"2025.10 - \u81F3\u4ECA\",\n \"description\": \"\u805A\u7126 AI \u5DE5\u4F5C\u6D41\u5EFA\u8BBE\uFF0C\u4E3B\u5BFC AI Agent \u65B9\u6848\u8BBE\u8BA1\u4E0E\u843D\u5730\uFF0C\u63A8\u52A8\u4E1A\u52A1\u4ECE\u529F\u80FD\u5F00\u53D1\u8D70\u5411\u667A\u80FD\u5316\u6D41\u7A0B\u7F16\u6392\u3002\",\n \"achievements\": [\n \"\u8D1F\u8D23 AI \u5DE5\u4F5C\u6D41\u76F8\u5173\u80FD\u529B\u5EFA\u8BBE\uFF0C\u63A8\u52A8\u56E2\u961F\u5F62\u6210\u53EF\u590D\u7528\u7684\u6D41\u7A0B\u5316\u4EA4\u4ED8\u65B9\u5F0F\",\n \"\u62C5\u4EFB AI Agent \u6838\u5FC3\u5F00\u53D1\u8005\uFF0C\u8986\u76D6\u4ECE\u9700\u6C42\u62C6\u89E3\u3001\u63D0\u793A\u8BCD\u8BBE\u8BA1\u5230\u670D\u52A1\u7AEF\u843D\u5730\u7684\u5B8C\u6574\u94FE\u8DEF\",\n \"\u4EE5\u5168\u6808\u65B9\u5F0F\u534F\u540C\u524D\u540E\u7AEF\u5F00\u53D1\uFF0C\u63D0\u5347\u590D\u6742\u4E1A\u52A1\u5728\u7814\u53D1\u4FA7\u7684\u843D\u5730\u6548\u7387\",\n \"\u5728\u56E2\u961F\u5185\u63A8\u8FDB AI \u5DE5\u7A0B\u5316\u5B9E\u8DF5\uFF0C\u6301\u7EED\u63D0\u5347\u9879\u76EE\u7A33\u5B9A\u6027\u4E0E\u8FED\u4EE3\u901F\u5EA6\"\n ]\n },\n {\n \"company\": \"\u676D\u5DDE\u4E0D\u5FD8\u667A\u80FD\u79D1\u6280\u6709\u9650\u516C\u53F8\",\n \"role\": \"\u5168\u6808\u5F00\u53D1\u5DE5\u7A0B\u5E08\",\n \"period\": \"2024.10 - 2025.09\",\n \"description\": \"\u53C2\u4E0E AI \u89C6\u9891\u751F\u6210\u4E0E\u5E7F\u544A\u6295\u653E\u4EA7\u54C1\u5EFA\u8BBE\uFF0C\u8D1F\u8D23\u524D\u540E\u7AEF\u8054\u52A8\u548C\u6838\u5FC3\u529F\u80FD\u843D\u5730\u3002\",\n \"achievements\": [\n \"\u57FA\u4E8E Next.js + React + Node.js \u53C2\u4E0E\u9AD8\u4EA4\u4E92\u5E94\u7528\u4E0E\u4E2D\u53F0\u670D\u52A1\u5F00\u53D1\",\n \"\u53C2\u4E0E ASR\u3001LLM\u3001\u89C6\u9891\u4EFB\u52A1\u94FE\u8DEF\u7B49 AI \u76F8\u5173\u529F\u80FD\u5EFA\u8BBE\",\n \"\u53C2\u4E0E\u81EA\u52A8\u5316\u6295\u653E\u4E0E\u5DE5\u7A0B\u5316\u6D41\u7A0B\u5EFA\u8BBE\uFF0C\u63D0\u5347\u4E1A\u52A1\u5904\u7406\u6548\u7387\"\n ]\n },\n {\n \"company\": \"\u676D\u5DDE\u89C6\u4FE1\u79D1\u6280\u6709\u9650\u516C\u53F8\",\n \"role\": \"\u524D\u7AEF\u5F00\u53D1\u5DE5\u7A0B\u5E08\",\n \"period\": \"2022.10 - 2024.06\",\n \"description\": \"\u8D1F\u8D23\u524D\u7AEF\u5DE5\u7A0B\u5316\u3001\u4E1A\u52A1\u7CFB\u7EDF\u5F00\u53D1\u4E0E\u56E2\u961F\u534F\u4F5C\u6D41\u7A0B\u4F18\u5316\u3002\",\n \"achievements\": [\n \"\u63A8\u52A8\u89C4\u8303\u4F53\u7CFB\u843D\u5730\uFF08Lint\u3001Commit \u89C4\u8303\u3001\u811A\u624B\u67B6\u7B49\uFF09\uFF0C\u63D0\u5347\u56E2\u961F\u7814\u53D1\u4E00\u81F4\u6027\",\n \"\u53C2\u4E0E\u6784\u5EFA\u79C1\u6709\u5E93\u4E0E\u5DE5\u7A0B\u5316\u4F53\u7CFB\uFF0C\u63D0\u5347\u591A\u9879\u76EE\u590D\u7528\u6548\u7387\",\n \"\u652F\u6491\u540E\u53F0\u7CFB\u7EDF\u4E0E\u6838\u5FC3\u4E1A\u52A1\u9875\u9762\u7684\u6301\u7EED\u8FED\u4EE3\"\n ]\n },\n {\n \"company\": \"\u534E\u76D6\u5BB6\u5C45\u3001\u9177\u5BB6\u4E50\",\n \"role\": \"\u524D\u7AEF\u5F00\u53D1\u5DE5\u7A0B\u5E08\",\n \"period\": \"2020.11 - 2022.06\",\n \"description\": \"\u65E9\u671F\u7ECF\u5386\uFF0C\u4E3B\u8981\u8D1F\u8D23 2D Canvas \u76F8\u5173\u529F\u80FD\u5F00\u53D1\u4E0E\u7EF4\u62A4\u3002\",\n \"achievements\": [\n \"\u53C2\u4E0E 2D \u8BBE\u8BA1\u5DE5\u5177\u4E0E\u4E3B\u7AD9\u76F8\u5173\u524D\u7AEF\u529F\u80FD\u5F00\u53D1\",\n \"\u8D1F\u8D23\u753B\u5E03\u4EA4\u4E92\u3001\u5386\u53F2\u8BB0\u5F55\u4E0E\u5FEB\u6377\u952E\u7B49\u80FD\u529B\u8FED\u4EE3\",\n \"\u4E0E\u4EA7\u54C1\u3001\u8BBE\u8BA1\u3001\u6D4B\u8BD5\u534F\u4F5C\u63A8\u8FDB\u7248\u672C\u4EA4\u4ED8\"\n ]\n }\n ]\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs';\n\nconst RETRO_PIXEL_WIDTH = 28;\nconst RETRO_PIXEL_HEIGHT = 16;\n\nconst resolveExecutableDir = (): string => {\n if (!process.argv[1]) {\n return process.cwd();\n }\n\n const executablePath = path.resolve(process.argv[1]);\n try {\n const resolvedExecutablePath = fs.realpathSync(executablePath);\n return path.dirname(resolvedExecutablePath);\n } catch {\n return path.dirname(executablePath);\n }\n};\n\nconst resolveCatImagePath = (): string | null => {\n const executableDir = resolveExecutableDir();\n const packageRootDir = path.resolve(executableDir, '..');\n const candidatePaths = [\n path.resolve(process.cwd(), 'src/assets/cat.jpg'),\n path.resolve(packageRootDir, 'src/assets/cat.jpg'),\n path.resolve(packageRootDir, 'dist/assets/cat.jpg'),\n path.resolve(executableDir, 'assets/cat.jpg'),\n path.resolve(executableDir, '../assets/cat.jpg')\n ];\n\n for (const candidatePath of candidatePaths) {\n if (fs.existsSync(candidatePath)) {\n return candidatePath;\n }\n }\n\n return null;\n};\n\nexport function createCatCommand(): Command {\n const cmd = new Command('cat')\n .alias('meow')\n .description('\u67E5\u770B\u9EA6\u9EA6')\n .action(async () => {\n console.log(chalk.yellow.bold('\u9EA6\u9EA6'));\n console.log('');\n\n try {\n const catImagePath = resolveCatImagePath();\n\n if (catImagePath) {\n try {\n const { default: terminalImage } = await import('terminal-image');\n const image = await terminalImage.file(catImagePath, {\n width: RETRO_PIXEL_WIDTH,\n height: RETRO_PIXEL_HEIGHT,\n preserveAspectRatio: true\n });\n\n console.log(image);\n } catch (error) {\n console.log(chalk.red('\u56FE\u7247\u6E32\u67D3\u5931\u8D25'));\n }\n } else {\n console.log(chalk.gray('\u8BF7\u5C06\u732B\u54AA\u56FE\u7247\u653E\u5728 src/assets/cat.jpg'));\n }\n } catch (error) {\n console.log(chalk.gray('\uD83D\uDCF8 \u8BF7\u5C06\u732B\u54AA\u56FE\u7247\u653E\u5728 src/assets/cat.jpg'));\n }\n\n console.log('');\n });\n\n return cmd;\n}\n", "/**\n * \u8BA1\u7B97\u9EA6\u5F53\u7684\u5E74\u9F84\u7248\u672C\u53F7\n * \u51FA\u751F\u65E5\u671F\uFF1A1997\u5E743\u670810\u65E5\n * \u8FD4\u56DE\u683C\u5F0F\uFF1A\u5E74\u9F84.\u5C0F\u7248\u672C\u53F7.\u8865\u4E01\u53F7\n */\nexport function getAgeVersion(): string {\n const birthDate = new Date(1997, 2, 10); // \u6708\u4EFD\u4ECE0\u5F00\u59CB\uFF0C\u6240\u4EE52\u662F3\u6708\n const today = new Date();\n\n let age = today.getFullYear() - birthDate.getFullYear();\n const monthDiff = today.getMonth() - birthDate.getMonth();\n\n // \u5982\u679C\u8FD8\u6CA1\u8FC7\u751F\u65E5\uFF0C\u5E74\u9F84\u51CF1\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {\n age--;\n }\n\n // \u8FD9\u91CC\u7684\u5C0F\u7248\u672C\u548C\u8865\u4E01\u53F7\u53EF\u4EE5\u540E\u7EED\u4ECE package.json \u8BFB\u53D6\u6216\u56FA\u5B9A\n // \u73B0\u5728\u5148\u8FD4\u56DE\u7B80\u5355\u683C\u5F0F\n return `${age}.0.0`;\n}\n\n/**\n * \u83B7\u53D6\u7248\u672C\u53F7\u548C\u751F\u65E5\u4FE1\u606F\n */\nexport function getVersionInfo(): { version: string; birthDate: Date; currentAge: number; nextBirthday: Date } {\n const birthDate = new Date(1997, 2, 10); // 1997\u5E743\u670810\u65E5\n const today = new Date();\n\n let currentAge = today.getFullYear() - birthDate.getFullYear();\n const monthDiff = today.getMonth() - birthDate.getMonth();\n\n // \u8BA1\u7B97\u4E0B\u4E00\u4E2A\u751F\u65E5\n const nextBirthday = new Date(today.getFullYear(), birthDate.getMonth(), birthDate.getDate());\n\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {\n currentAge--;\n } else {\n nextBirthday.setFullYear(today.getFullYear() + 1);\n }\n\n const version = `${currentAge}.0.0`;\n\n return {\n version,\n birthDate,\n currentAge,\n nextBirthday\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Command", "chalk", "chalk", "Command", "chalk", "Command", "chalk", "Command", "chalk", "Command"]
7
+ }
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "maidang",
3
+ "version": "1.0.1",
4
+ "type": "module",
5
+ "description": "一个展示个人信息与职业经历的命令行工具",
6
+ "main": "dist/index.js",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "bin": {
11
+ "maidang": "dist/index.js"
12
+ },
13
+ "scripts": {
14
+ "build": "esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --sourcemap --external:commander --external:chalk --external:boxen --external:figlet --external:ora --external:terminal-image && node scripts/copy-assets.mjs",
15
+ "dev": "tsx src/index.ts",
16
+ "start": "node dist/index.js",
17
+ "test": "jest",
18
+ "test:watch": "jest --watch",
19
+ "test:coverage": "jest --coverage",
20
+ "prepublishOnly": "pnpm test && pnpm build"
21
+ },
22
+ "keywords": [
23
+ "cli",
24
+ "maidang",
25
+ "resume",
26
+ "profile",
27
+ "career"
28
+ ],
29
+ "author": "朱建业",
30
+ "license": "ISC",
31
+ "homepage": "https://github.com/maidangzhu/maidang-cli",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/maidangzhu/maidang-cli.git"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/maidangzhu/maidang-cli/issues"
38
+ },
39
+ "engines": {
40
+ "node": ">=18"
41
+ },
42
+ "dependencies": {
43
+ "boxen": "^8.0.1",
44
+ "chalk": "^5.6.2",
45
+ "commander": "^14.0.3",
46
+ "figlet": "^1.10.0",
47
+ "ora": "^9.3.0",
48
+ "terminal-image": "^4.2.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/boxen": "^2.1.0",
52
+ "@types/chalk": "^0.4.31",
53
+ "@types/figlet": "^1.7.0",
54
+ "@types/jest": "^30.0.0",
55
+ "@types/node": "^25.3.5",
56
+ "esbuild": "^0.27.3",
57
+ "jest": "^30.2.0",
58
+ "ts-jest": "^29.4.6",
59
+ "tsx": "^4.21.0",
60
+ "typescript": "^5.9.3"
61
+ }
62
+ }