ubugeeei 1.1.0 → 2.0.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/README.md +9 -4
- package/assets/cover.png +0 -0
- package/dist/cli.js +166 -158
- package/package.json +6 -6
- package/assets/avatar.png +0 -0
package/README.md
CHANGED
|
@@ -11,10 +11,15 @@ creator of <a href="https://github.com/chibivue-land/chibivue" target="_blank">c
|
|
|
11
11
|
|
|
12
12
|
writing: <a href="https://wtrclred.io" target="_blank">wtrclred.io</a> (blog), <a href="https://github.com/ubugeei/reading-vuejs-core-vapor" target="_blank">reading-vuejs-core-vapor</a>,
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
try it.
|
|
15
|
+
```shell
|
|
16
|
+
npx ubugeeei
|
|
17
|
+
```
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
<img src="https://raw.githubusercontent.com/ubugeeei/sponsors/main/sponsors.png" width="320">
|
|
19
|
+
<div align="center">
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
Please sponsoring me...
|
|
20
22
|
|
|
23
|
+
<img src="https://github.com/ubugeeei/sponsors/blob/main/sponsors-transparent.png?raw=true" width="500">
|
|
24
|
+
|
|
25
|
+
</div>
|
package/assets/cover.png
ADDED
|
Binary file
|
package/dist/cli.js
CHANGED
|
@@ -1,174 +1,182 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
2
|
+
|
|
3
|
+
// bin/cli.ts
|
|
4
|
+
var ESC = "\x1B";
|
|
5
|
+
var OSC = "\x1B]";
|
|
6
|
+
var BEL = "\x07";
|
|
7
|
+
var RESET = `${ESC}[0m`;
|
|
8
|
+
var BOLD = `${ESC}[1m`;
|
|
9
|
+
var DIM = `${ESC}[2m`;
|
|
10
|
+
var ITALIC = `${ESC}[3m`;
|
|
11
|
+
var rgb = (r, g, b) => `${ESC}[38;2;${r};${g};${b}m`;
|
|
12
|
+
var COLORS = {
|
|
13
|
+
vue: rgb(66, 184, 131),
|
|
14
|
+
vueDark: rgb(52, 152, 108),
|
|
15
|
+
vueLight: rgb(100, 207, 159),
|
|
16
|
+
cyan: rgb(0, 200, 220),
|
|
17
|
+
orange: rgb(255, 160, 70),
|
|
18
|
+
pink: rgb(255, 100, 150),
|
|
19
|
+
purple: rgb(180, 120, 255),
|
|
20
|
+
yellow: rgb(255, 215, 0),
|
|
21
|
+
white: rgb(255, 255, 255),
|
|
22
|
+
gray: rgb(150, 150, 150),
|
|
23
|
+
darkGray: rgb(80, 80, 80),
|
|
24
|
+
border: rgb(66, 184, 131)
|
|
15
25
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
26
|
+
var GRADIENT = [
|
|
27
|
+
rgb(66, 184, 131),
|
|
28
|
+
rgb(60, 170, 140),
|
|
29
|
+
rgb(50, 160, 160),
|
|
30
|
+
rgb(40, 150, 180),
|
|
31
|
+
rgb(30, 140, 200),
|
|
32
|
+
rgb(20, 130, 220),
|
|
33
|
+
rgb(80, 120, 240),
|
|
34
|
+
rgb(140, 110, 255)
|
|
35
|
+
];
|
|
36
|
+
function gradientText(text) {
|
|
37
|
+
let result = "";
|
|
38
|
+
for (let i = 0;i < text.length; i++) {
|
|
39
|
+
const colorIndex = Math.floor(i / text.length * GRADIENT.length);
|
|
40
|
+
result += GRADIENT[colorIndex] + text[i];
|
|
41
|
+
}
|
|
42
|
+
return result + RESET;
|
|
43
|
+
}
|
|
44
|
+
var link = (url, text) => `${OSC}8;;${url}${BEL}${text}${OSC}8;;${BEL}`;
|
|
45
|
+
var messages = {
|
|
46
|
+
en: {
|
|
47
|
+
name: "ubugeeei",
|
|
48
|
+
nickname: "もののけ王",
|
|
49
|
+
tagline: "うにをくらえ",
|
|
50
|
+
uni: "\uD83E\uDD80彡..。o",
|
|
51
|
+
interests: "Jazz, Art, Compiler, Vue",
|
|
52
|
+
memberOf: "Member of",
|
|
53
|
+
author: "Author of",
|
|
54
|
+
kingOf: "King of",
|
|
55
|
+
chiefEngineerOf: "Chief Engineer of",
|
|
56
|
+
contribute: "Contribute",
|
|
57
|
+
blog: "Blog"
|
|
58
|
+
},
|
|
59
|
+
ja: {
|
|
60
|
+
name: "ubugeeei",
|
|
61
|
+
nickname: "もののけ王",
|
|
62
|
+
tagline: "うにをくらえ",
|
|
63
|
+
uni: "\uD83E\uDD80彡..。o",
|
|
64
|
+
interests: "Jazz, Art, Compiler, Vue",
|
|
65
|
+
memberOf: "Member of",
|
|
66
|
+
author: "Author of",
|
|
67
|
+
kingOf: "King of",
|
|
68
|
+
chiefEngineerOf: "Chief Engineer of",
|
|
69
|
+
contribute: "Contribute",
|
|
70
|
+
blog: "Blog"
|
|
71
|
+
}
|
|
52
72
|
};
|
|
53
73
|
function detectLocale() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
74
|
+
const args = process.argv.slice(2);
|
|
75
|
+
if (args.includes("--ja") || args.includes("-j") || args.includes("--japanese"))
|
|
76
|
+
return "ja";
|
|
77
|
+
if (args.includes("--en") || args.includes("-e") || args.includes("--english"))
|
|
78
|
+
return "en";
|
|
79
|
+
if ((process.env.LANG || process.env.LANGUAGE || process.env.LC_ALL || "").toLowerCase().startsWith("ja"))
|
|
80
|
+
return "ja";
|
|
81
|
+
return "en";
|
|
59
82
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
name: "ox-content",
|
|
75
|
-
url: "https://github.com/ubugeeei/ox-content"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
name: "relanote",
|
|
79
|
-
url: "https://github.com/ubugeeei/relanote"
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
name: "learn.nuxt.com (ja)",
|
|
83
|
-
url: "https://github.com/nuxt/learn.nuxt.com"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
name: "jp-vue-companies",
|
|
87
|
-
url: "https://github.com/chibivue-land/japanese-companies-using-vuejs"
|
|
88
|
-
}
|
|
83
|
+
var projects = [
|
|
84
|
+
{ name: "chibivue", url: "https://github.com/chibivue-land/chibivue" },
|
|
85
|
+
{
|
|
86
|
+
name: "reading-vuejs-core-vapor",
|
|
87
|
+
url: "https://github.com/ubugeeei/reading-vuejs-core-vapor"
|
|
88
|
+
},
|
|
89
|
+
{ name: "vize", url: "https://github.com/ubugeeei/vize" },
|
|
90
|
+
{ name: "ox-content", url: "https://github.com/ubugeeei/ox-content" },
|
|
91
|
+
{ name: "relanote", url: "https://github.com/ubugeeei/relanote" },
|
|
92
|
+
{ name: "learn.nuxt.com (ja)", url: "https://github.com/nuxt/learn.nuxt.com" },
|
|
93
|
+
{
|
|
94
|
+
name: "jp-vue-companies",
|
|
95
|
+
url: "https://github.com/chibivue-land/japanese-companies-using-vuejs"
|
|
96
|
+
}
|
|
89
97
|
];
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
name: "oxc",
|
|
97
|
-
url: "https://github.com/oxc-project/oxc"
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
name: "vuefes",
|
|
101
|
-
url: "https://github.com/vuejs-jp/vuefes-2025"
|
|
102
|
-
}
|
|
98
|
+
var contributes = [
|
|
99
|
+
{ name: "vuejs/core (mainly vapor)", url: "https://github.com/vuejs/core" },
|
|
100
|
+
{ name: "oxc", url: "https://github.com/oxc-project/oxc" },
|
|
101
|
+
{ name: "vuefes", url: "https://github.com/vuejs-jp/vuefes-2025" }
|
|
103
102
|
];
|
|
104
103
|
function getDisplayWidth(str) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
104
|
+
const clean = str.replace(/\x1b\[[0-9;]*m|\x1b\]8;;[^\x07]*\x07/g, "");
|
|
105
|
+
let width = 0;
|
|
106
|
+
for (const char of clean) {
|
|
107
|
+
const code = char.codePointAt(0) || 0;
|
|
108
|
+
if (code >= 4352 && code <= 4447 || code >= 11904 && code <= 40959 || code >= 44032 && code <= 55215 || code >= 63744 && code <= 64255 || code >= 65040 && code <= 65055 || code >= 65072 && code <= 65135 || code >= 65280 && code <= 65376 || code >= 65504 && code <= 65510 || code >= 127744 && code <= 129535 || code >= 131072 && code <= 196607)
|
|
109
|
+
width += 2;
|
|
110
|
+
else
|
|
111
|
+
width += 1;
|
|
112
|
+
}
|
|
113
|
+
return width;
|
|
113
114
|
}
|
|
114
115
|
function padRight(str, targetWidth) {
|
|
115
|
-
|
|
116
|
-
|
|
116
|
+
const padding = targetWidth - getDisplayWidth(str);
|
|
117
|
+
return str + " ".repeat(Math.max(0, padding));
|
|
117
118
|
}
|
|
118
|
-
|
|
119
|
-
|
|
119
|
+
var WIDTH = 62;
|
|
120
|
+
var INNER_WIDTH = WIDTH - 4;
|
|
120
121
|
function createLine(content) {
|
|
121
|
-
|
|
122
|
-
|
|
122
|
+
return `${COLORS.border}│${RESET} ${padRight(content, INNER_WIDTH)} ${COLORS.border}│${RESET}`;
|
|
123
|
+
}
|
|
124
|
+
function createEmptyLine() {
|
|
125
|
+
return `${COLORS.border}│${RESET}${" ".repeat(WIDTH - 2)}${COLORS.border}│${RESET}`;
|
|
126
|
+
}
|
|
127
|
+
function createSeparator() {
|
|
128
|
+
return `${COLORS.border}├${"─".repeat(WIDTH - 2)}┤${RESET}`;
|
|
123
129
|
}
|
|
124
130
|
function main() {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
131
|
+
const t = messages[detectLocale()];
|
|
132
|
+
const topBorder = `${COLORS.border}╭${"─".repeat(WIDTH - 2)}╮${RESET}`;
|
|
133
|
+
const bottomBorder = `${COLORS.border}╰${"─".repeat(WIDTH - 2)}╯${RESET}`;
|
|
134
|
+
const projectLinks = projects.map((p) => link(p.url, COLORS.cyan + p.name + RESET));
|
|
135
|
+
const contributeLinks = contributes.map((p) => link(p.url, COLORS.purple + p.name + RESET));
|
|
136
|
+
const lines = [
|
|
137
|
+
"",
|
|
138
|
+
topBorder,
|
|
139
|
+
createEmptyLine(),
|
|
140
|
+
createLine(`${BOLD}${gradientText(t.name)}${RESET} ${COLORS.gray}${t.nickname}${RESET}`),
|
|
141
|
+
createLine(`${COLORS.orange}${t.tagline}${RESET} ${t.uni}`),
|
|
142
|
+
createLine(`${DIM}${COLORS.gray}${t.interests}${RESET}`),
|
|
143
|
+
createEmptyLine(),
|
|
144
|
+
createSeparator(),
|
|
145
|
+
createEmptyLine(),
|
|
146
|
+
createLine(`${COLORS.yellow}★${RESET} ${COLORS.white}${t.memberOf}${RESET}`),
|
|
147
|
+
createLine(` ${link("https://vuejs.org", COLORS.vue + BOLD + "Vue.js" + RESET)} ${link("https://vuejs-jp.org", COLORS.vue + "Vue.js Japan" + RESET)}`),
|
|
148
|
+
createEmptyLine(),
|
|
149
|
+
createLine(`${COLORS.pink}♛${RESET} ${COLORS.white}${t.kingOf}${RESET}`),
|
|
150
|
+
createLine(` ${link("https://chibivue.land", COLORS.cyan + "chibivue.land" + RESET)}`),
|
|
151
|
+
createEmptyLine(),
|
|
152
|
+
createLine(`${COLORS.orange}⚙${RESET} ${COLORS.white}${t.chiefEngineerOf}${RESET}`),
|
|
153
|
+
createLine(` ${link("https://github.com/mates-system", COLORS.cyan + "@mates-system" + RESET)}`),
|
|
154
|
+
createEmptyLine(),
|
|
155
|
+
createSeparator(),
|
|
156
|
+
createEmptyLine(),
|
|
157
|
+
createLine(`${COLORS.vue}✦${RESET} ${COLORS.white}${t.author}${RESET}`),
|
|
158
|
+
createLine(` ${projectLinks.slice(0, 2).join(", ")}`),
|
|
159
|
+
createLine(` ${projectLinks.slice(2, 4).join(", ")}`),
|
|
160
|
+
createLine(` ${projectLinks.slice(4, 6).join(", ")}`),
|
|
161
|
+
createLine(` ${projectLinks.slice(6).join(", ")}`),
|
|
162
|
+
createEmptyLine(),
|
|
163
|
+
createLine(`${COLORS.purple}◈${RESET} ${COLORS.white}${t.contribute}${RESET}`),
|
|
164
|
+
createLine(` ${contributeLinks.join(", ")}`),
|
|
165
|
+
createEmptyLine(),
|
|
166
|
+
createLine(`${COLORS.cyan}✎${RESET} ${COLORS.white}${t.blog}${RESET}`),
|
|
167
|
+
createLine(` ${link("https://wtrclred.io", COLORS.cyan + "wtrclred.io" + RESET)}`),
|
|
168
|
+
createEmptyLine(),
|
|
169
|
+
createSeparator(),
|
|
170
|
+
createEmptyLine(),
|
|
171
|
+
createLine(`${COLORS.white}GitHub${RESET} ${link("https://github.com/ubugeeei", COLORS.gray + "github.com/ubugeeei" + RESET)}`),
|
|
172
|
+
createLine(`${COLORS.white}Twitter${RESET} ${link("https://x.com/ubugeeei", COLORS.gray + "@ubugeeei" + RESET)}`),
|
|
173
|
+
createLine(`${COLORS.white}Discord${RESET} ${link("https://discord.com/users/ubugeeei", COLORS.gray + "ubugeeei" + RESET)}`),
|
|
174
|
+
createLine(`${COLORS.pink}Sponsor${RESET} ${link("https://github.com/sponsors/ubugeeei", COLORS.pink + "github.com/sponsors/ubugeeei" + RESET)}`),
|
|
175
|
+
createEmptyLine(),
|
|
176
|
+
bottomBorder,
|
|
177
|
+
""
|
|
178
|
+
];
|
|
179
|
+
console.log(lines.join(`
|
|
180
|
+
`));
|
|
170
181
|
}
|
|
171
182
|
main();
|
|
172
|
-
|
|
173
|
-
//#endregion
|
|
174
|
-
export { };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ubugeeei",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Hi! I'm ubugeeei, Vue.js team member, author of chibivue and vize",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
".": "./index.js"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "
|
|
15
|
-
"dev": "
|
|
14
|
+
"build": "bun run typecheck && bun build bin/cli.ts --outdir dist --target node",
|
|
15
|
+
"dev": "bun run bin/cli.ts",
|
|
16
|
+
"typecheck": "tsc --noEmit"
|
|
16
17
|
},
|
|
17
18
|
"keywords": [
|
|
18
19
|
"cli",
|
|
@@ -33,11 +34,10 @@
|
|
|
33
34
|
},
|
|
34
35
|
"funding": "https://github.com/sponsors/ubugeeei",
|
|
35
36
|
"engines": {
|
|
36
|
-
"node": ">=
|
|
37
|
+
"node": ">=18.0.0"
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
39
|
-
"@types/
|
|
40
|
-
"rolldown": "^1.0.0-beta.60",
|
|
40
|
+
"@types/bun": "^1.0.0",
|
|
41
41
|
"typescript": "^5.0.0"
|
|
42
42
|
},
|
|
43
43
|
"files": [
|
package/assets/avatar.png
DELETED
|
Binary file
|