heyq02 0.1.17 → 0.1.21

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "heyq02",
3
- "version": "0.1.17",
3
+ "version": "0.1.21",
4
4
  "description": "Ari He. A terminal introduction.",
5
5
  "homepage": "https://heyq02.com",
6
6
  "bugs": {
@@ -21,67 +21,22 @@
21
21
  ],
22
22
  "type": "module",
23
23
  "exports": {
24
- ".": "./dist/index.js",
25
- "./cli": "./dist/cli.js",
24
+ ".": "./dist/cli.js",
26
25
  "./package.json": "./package.json"
27
26
  },
28
27
  "publishConfig": {
29
28
  "access": "public"
30
29
  },
31
30
  "devDependencies": {
32
- "@bomb.sh/router": "0.8.0",
33
- "@heyq02/profile": "0.1.17",
31
+ "@heyq02/profile": "0.1.21",
34
32
  "@liangmi/vp-config": "^1.0.0",
35
- "@types/node": "^26.1.1",
36
- "@types/react": "19.3.0",
37
- "ink": "^8.0.0",
38
- "ink-testing-library": "^4.0.0",
39
- "react": "19.3.1",
33
+ "@types/node": "^26.6.5",
40
34
  "typescript": "7.0.2",
41
35
  "vite-plus": "1.3.0"
42
36
  },
43
37
  "engines": {
44
38
  "node": ">=22.12.0"
45
39
  },
46
- "inlinedDependencies": {
47
- "@alcalzone/ansi-tokenize": "0.3.1",
48
- "@bomb.sh/router": "0.8.0",
49
- "ansi-escapes": "7.3.0",
50
- "ansi-regex": "6.4.0",
51
- "ansi-styles": "6.2.3",
52
- "auto-bind": "5.0.1",
53
- "chalk": "6.0.1",
54
- "cli-boxes": "4.0.1",
55
- "cli-cursor": "4.0.0",
56
- "cli-truncate": "6.1.1",
57
- "code-excerpt": "4.0.0",
58
- "convert-to-spaces": "2.0.1",
59
- "environment": "1.1.0",
60
- "es-toolkit": "1.52.0",
61
- "escape-string-regexp": "2.0.0",
62
- "get-east-asian-width": "1.7.0",
63
- "indent-string": "5.0.0",
64
- "ink": "8.0.0",
65
- "is-fullwidth-code-point": "5.1.0",
66
- "is-in-ci": "2.0.0",
67
- "mimic-fn": "2.1.0",
68
- "onetime": "5.1.2",
69
- "patch-console": "2.0.0",
70
- "quick-lru": "7.3.0",
71
- "react": "19.3.1",
72
- "react-reconciler": "0.34.0",
73
- "restore-cursor": "4.0.0",
74
- "scheduler": "0.28.0",
75
- "signal-exit": "3.0.7",
76
- "slice-ansi": "9.0.1",
77
- "stack-utils": "2.0.6",
78
- "string-width": "8.3.0",
79
- "strip-ansi": "7.2.0",
80
- "terminal-size": "4.0.1",
81
- "widest-line": "6.0.0",
82
- "wrap-ansi": "10.0.2",
83
- "yoga-layout": "3.2.1"
84
- },
85
40
  "scripts": {
86
41
  "build": "vp run cpack",
87
42
  "dev": "vp pack --watch",
@@ -1,79 +0,0 @@
1
- import devtools from "react-devtools-core";
2
-
3
- //#region ../../node_modules/.pnpm/ink@8.0.0_@types+react@19.3.0_react@19.3.1/node_modules/ink/build/devtools-window-polyfill.js
4
- const customGlobal = globalThis;
5
- customGlobal.window ||= globalThis;
6
- customGlobal.self ||= globalThis;
7
- customGlobal.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__ = [
8
- {
9
- type: 1,
10
- value: 7,
11
- isEnabled: true
12
- },
13
- {
14
- type: 2,
15
- value: "InternalApp",
16
- isEnabled: true,
17
- isValid: true
18
- },
19
- {
20
- type: 2,
21
- value: "InternalAppContext",
22
- isEnabled: true,
23
- isValid: true
24
- },
25
- {
26
- type: 2,
27
- value: "InternalStdoutContext",
28
- isEnabled: true,
29
- isValid: true
30
- },
31
- {
32
- type: 2,
33
- value: "InternalStderrContext",
34
- isEnabled: true,
35
- isValid: true
36
- },
37
- {
38
- type: 2,
39
- value: "InternalStdinContext",
40
- isEnabled: true,
41
- isValid: true
42
- },
43
- {
44
- type: 2,
45
- value: "InternalFocusContext",
46
- isEnabled: true,
47
- isValid: true
48
- }
49
- ];
50
-
51
- //#endregion
52
- //#region ../../node_modules/.pnpm/ink@8.0.0_@types+react@19.3.0_react@19.3.1/node_modules/ink/build/is-devtools-reachable.js
53
- const isDevToolsReachable = async (url = "ws://localhost:8097", timeoutMs = 2e3) => new Promise((resolve) => {
54
- const socket = new WebSocket(url);
55
- const timeout = setTimeout(() => {
56
- resolve(false);
57
- socket.close();
58
- }, timeoutMs);
59
- timeout.unref();
60
- socket.addEventListener("open", () => {
61
- clearTimeout(timeout);
62
- socket.close();
63
- resolve(true);
64
- });
65
- socket.addEventListener("error", () => {
66
- clearTimeout(timeout);
67
- resolve(false);
68
- });
69
- });
70
-
71
- //#endregion
72
- //#region ../../node_modules/.pnpm/ink@8.0.0_@types+react@19.3.0_react@19.3.1/node_modules/ink/build/devtools.js
73
- if (await isDevToolsReachable()) {
74
- devtools.initialize();
75
- devtools.connectToDevTools();
76
- } else console.warn("DEV is set to true, but the React DevTools server is not running. Start it with:\n\n$ npx react-devtools\n");
77
-
78
- //#endregion
79
- export { };
package/dist/index.d.ts DELETED
@@ -1,46 +0,0 @@
1
- //#region ../../packages/profile/dist/index.d.ts
2
- interface Place {
3
- label: string;
4
- href: string;
5
- detail: string;
6
- }
7
- interface Experience {
8
- company: string;
9
- href: string;
10
- start: string;
11
- end: string;
12
- points: string[];
13
- }
14
- interface Skill {
15
- name: string;
16
- href: string;
17
- summary: string;
18
- }
19
- export declare function formatCount(count: number): string;
20
- export declare function fullName(role?: string): string;
21
- /** Terminal-oriented view of the same intro. */
22
- export declare const profile: {
23
- name: string;
24
- givenNames: readonly [string, ...string[]];
25
- role: string;
26
- bio: string;
27
- phone: string;
28
- email: string;
29
- site: string;
30
- places: Place[];
31
- experiences: Experience[];
32
- skills: Skill[];
33
- projects: {
34
- name: string;
35
- href: string;
36
- summary: string;
37
- language: string;
38
- stars: number;
39
- forks: number;
40
- }[];
41
- };
42
- //#endregion
43
- //#region src/plain.d.ts
44
- export declare function renderPlain(): string;
45
- //#endregion
46
- export {};
package/dist/index.js DELETED
@@ -1,3 +0,0 @@
1
- import { i as profile, n as formatCount, r as fullName, t as renderPlain } from "./plain-BouEzSLj.js";
2
-
3
- export { formatCount, fullName, profile, renderPlain };
@@ -1,220 +0,0 @@
1
- //#region ../../packages/profile/dist/index.js
2
- /** Shared intro SSOT from `static/data/intro.json` for site, cli, and readme. */
3
- const intro = {
4
- name: "Ari He",
5
- names: ["Ari He", "Developer"],
6
- degree: "Bachelor",
7
- city: "China",
8
- bio: "Full-stack engineer / open-source enthusiast / vlogger on career. Focused on AI that speeds up development and ships in real products",
9
- kaomoji: "(๑•̀ㅂ•́)و",
10
- avatar: "https://avatars.githubusercontent.com/u/206218794?v=4",
11
- site: "https://heyq02.com",
12
- contact: {
13
- "phone": "+86 135****8086",
14
- "email": "hello@heyq02.com"
15
- },
16
- pages: {
17
- "home": {
18
- "kicker": "PROFILE",
19
- "title": "Ari He",
20
- "description": "Ari He. Full-stack engineer, open-source enthusiast, and vlogger on career. Focused on AI that speeds up development and ships in real products."
21
- },
22
- "blog": {
23
- "title": "Blog · Ari He",
24
- "description": "Blog of Ari He.",
25
- "heading": "Blog",
26
- "empty": "Posts live on this site. None yet."
27
- }
28
- },
29
- sections: {
30
- "experience": "Experience",
31
- "skills": "Skills",
32
- "openSource": "Open source"
33
- },
34
- nav: [{
35
- "id": "home",
36
- "href": "/",
37
- "label": "Home"
38
- }, {
39
- "id": "blog",
40
- "href": "/blog/",
41
- "label": "Blog"
42
- }],
43
- places: [
44
- {
45
- "label": "GitHub",
46
- "href": "https://github.com/heyq02",
47
- "detail": "heyq02"
48
- },
49
- {
50
- "label": "Bluesky",
51
- "href": "https://bsky.app/profile/heyq02.com",
52
- "detail": "heyq02.com"
53
- },
54
- {
55
- "label": "Bilibili",
56
- "href": "https://space.bilibili.com/3493273159075938",
57
- "detail": "全栈糕手Ari"
58
- },
59
- {
60
- "label": "Juejin",
61
- "href": "https://juejin.cn/user/708557910842296",
62
- "detail": "编程糕手Ari"
63
- },
64
- {
65
- "label": "WeChat",
66
- "href": "/wechat.jpg",
67
- "detail": "Scan to add"
68
- }
69
- ],
70
- experiences: [{
71
- "company": "JD.com, Inc.",
72
- "href": "https://www.jd.com/",
73
- "start": "2024.06",
74
- "end": "Present",
75
- "points": [
76
- "Owned iterations for JD Takeout across the mini program, H5, and admin console",
77
- "Upgraded the admin console off its legacy architecture and improved TP95",
78
- "Built C3-level AI Infra for Local Life product and engineering, improving R&D efficiency"
79
- ]
80
- }],
81
- skills: [
82
- {
83
- "name": "Vue",
84
- "href": "https://vuejs.org/",
85
- "summary": "Progressive JavaScript framework for building web UIs"
86
- },
87
- {
88
- "name": "React",
89
- "href": "https://react.dev/",
90
- "summary": "The library for web and native user interfaces"
91
- },
92
- {
93
- "name": "Next",
94
- "href": "https://nextjs.org/",
95
- "summary": "The React framework for the web"
96
- },
97
- {
98
- "name": "Rolldown",
99
- "href": "https://rolldown.rs/",
100
- "summary": "Rust-based JavaScript bundler with a Rollup-compatible API"
101
- },
102
- {
103
- "name": "Vite",
104
- "href": "https://vite.dev/",
105
- "summary": "Frontend build tool for the web"
106
- },
107
- {
108
- "name": "Oxc",
109
- "href": "https://oxc.rs/",
110
- "summary": "High-performance JavaScript tools written in Rust"
111
- },
112
- {
113
- "name": "Spring",
114
- "href": "https://spring.io/",
115
- "summary": "Framework for creating Java enterprise applications"
116
- },
117
- {
118
- "name": "Redis",
119
- "href": "https://redis.io/",
120
- "summary": "In-memory store for databases, cache, and messaging"
121
- },
122
- {
123
- "name": "RabbitMQ",
124
- "href": "https://www.rabbitmq.com/",
125
- "summary": "Open-source messaging and streaming broker"
126
- },
127
- {
128
- "name": "Nginx",
129
- "href": "https://nginx.org/",
130
- "summary": "HTTP server, reverse proxy, and load balancer"
131
- },
132
- {
133
- "name": "Docker",
134
- "href": "https://www.docker.com/",
135
- "summary": "Open platform for building, shipping, and running apps"
136
- }
137
- ],
138
- projects: [{
139
- "name": "jd-opensource/taro-ui",
140
- "href": "https://github.com/jd-opensource/taro-ui",
141
- "summary": "一款基于 Taro 框架开发的多端 UI 组件库",
142
- "language": "TypeScript",
143
- "languageColor": "#3178c6",
144
- "stars": 4730,
145
- "forks": 743
146
- }, {
147
- "name": "simpleicons.dev",
148
- "href": "https://github.com/heyq02/simpleicons.dev",
149
- "summary": "Showcase your skills on your GitHub readme or resumé with ease.",
150
- "language": "TypeScript",
151
- "languageColor": "#3178c6",
152
- "stars": 171,
153
- "forks": 0
154
- }],
155
- posts: []
156
- };
157
- function absoluteHref(href, site = intro.site) {
158
- if (href.startsWith("/")) return `${site}${href}`;
159
- return href;
160
- }
161
- const places = intro.places.map((place) => ({
162
- ...place,
163
- href: absoluteHref(place.href)
164
- }));
165
- const skills = intro.skills.map((skill) => ({
166
- ...skill,
167
- href: absoluteHref(skill.href)
168
- }));
169
- const { name, names, degree, city, bio, kaomoji, avatar, site, contact, pages, sections, nav, experiences, projects, posts } = intro;
170
- function formatCount(count) {
171
- if (count < 1e3) return String(count);
172
- return `${(count / 1e3).toFixed(1).replace(/\.0$/, "")}k`;
173
- }
174
- function fullName(role = "") {
175
- return `${intro.name}${role}`;
176
- }
177
- /** Terminal-oriented view of the same intro. */
178
- const profile = {
179
- name: intro.name,
180
- givenNames: intro.names,
181
- role: "",
182
- bio: `${intro.bio} ${intro.kaomoji}`,
183
- phone: intro.contact.phone,
184
- email: intro.contact.email,
185
- site: intro.site,
186
- places,
187
- experiences: intro.experiences,
188
- skills,
189
- projects: intro.projects.map(({ languageColor: _languageColor, ...project }) => project)
190
- };
191
-
192
- //#endregion
193
- //#region src/plain.ts
194
- function renderPlain() {
195
- const lines = [
196
- fullName(),
197
- "",
198
- profile.bio,
199
- "",
200
- profile.site,
201
- "",
202
- "Experience"
203
- ];
204
- for (const job of profile.experiences) lines.push(`${job.company} · ${job.start} – ${job.end}`, job.href, ...job.points.map((point) => `- ${point}`), "");
205
- lines.push("Skills");
206
- for (const skill of profile.skills) lines.push(`${skill.name} — ${skill.summary}`, skill.href);
207
- lines.push("", "Open source");
208
- for (const project of profile.projects) {
209
- const stats = [`★ ${formatCount(project.stars)}`];
210
- if (project.forks > 0) stats.push(`${formatCount(project.forks)} forks`);
211
- lines.push(`${project.name} · ${project.language} · ${stats.join(" · ")}`, project.summary, project.href, "");
212
- }
213
- lines.push("Contact");
214
- for (const place of profile.places) lines.push(`${place.label} · ${place.detail}`, place.href);
215
- lines.push(profile.phone, profile.email);
216
- return lines.join("\n");
217
- }
218
-
219
- //#endregion
220
- export { profile as i, formatCount as n, fullName as r, renderPlain as t };