heyq02 0.1.18 → 0.2.0
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/dist/cli.js +200 -29702
- package/package.json +4 -49
- package/dist/devtools-uvpAiM_6.js +0 -79
- package/dist/index.d.ts +0 -46
- package/dist/index.js +0 -3
- package/dist/plain-BouEzSLj.js +0 -220
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "heyq02",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
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/
|
|
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
|
-
"@
|
|
33
|
-
"@heyq02/profile": "0.1.18",
|
|
31
|
+
"@heyq02/profile": "0.2.0",
|
|
34
32
|
"@liangmi/vp-config": "^1.0.0",
|
|
35
|
-
"@types/node": "^26.
|
|
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
package/dist/plain-BouEzSLj.js
DELETED
|
@@ -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 };
|