cc98-cli 0.3.0 → 0.4.2
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/CHANGELOG.md +28 -1
- package/dist/api/client.d.ts +14 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +83 -8
- package/dist/api/client.js.map +1 -1
- package/dist/api/types.d.ts +13 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/webvpn.d.ts +68 -0
- package/dist/api/webvpn.d.ts.map +1 -0
- package/dist/api/webvpn.js +311 -0
- package/dist/api/webvpn.js.map +1 -0
- package/dist/cli/commands/board.js +1 -1
- package/dist/cli/commands/board.js.map +1 -1
- package/dist/cli/commands/forum.js +1 -1
- package/dist/cli/commands/forum.js.map +1 -1
- package/dist/cli/commands/login.js +1 -1
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/logout.js +2 -2
- package/dist/cli/commands/logout.js.map +1 -1
- package/dist/cli/commands/me.js +1 -1
- package/dist/cli/commands/me.js.map +1 -1
- package/dist/cli/commands/message.js +1 -1
- package/dist/cli/commands/message.js.map +1 -1
- package/dist/cli/commands/notice.js +1 -1
- package/dist/cli/commands/notice.js.map +1 -1
- package/dist/cli/commands/post.js +1 -1
- package/dist/cli/commands/post.js.map +1 -1
- package/dist/cli/commands/search.js +1 -1
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/topic.js +1 -1
- package/dist/cli/commands/topic.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +49 -3
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/user.js +1 -1
- package/dist/cli/commands/user.js.map +1 -1
- package/dist/cli/commands/vpn.d.ts +2 -0
- package/dist/cli/commands/vpn.d.ts.map +1 -0
- package/dist/cli/commands/vpn.js +200 -0
- package/dist/cli/commands/vpn.js.map +1 -0
- package/dist/cli/context.d.ts +2 -2
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +20 -2
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/router.d.ts.map +1 -1
- package/dist/cli/router.js +5 -1
- package/dist/cli/router.js.map +1 -1
- package/dist/main.js +0 -0
- package/dist/storage/image-cache.d.ts +32 -0
- package/dist/storage/image-cache.d.ts.map +1 -0
- package/dist/storage/image-cache.js +90 -0
- package/dist/storage/image-cache.js.map +1 -0
- package/dist/storage/settings-store.d.ts +10 -0
- package/dist/storage/settings-store.d.ts.map +1 -0
- package/dist/storage/settings-store.js +37 -0
- package/dist/storage/settings-store.js.map +1 -0
- package/dist/storage/vpn-store.d.ts +39 -0
- package/dist/storage/vpn-store.d.ts.map +1 -0
- package/dist/storage/vpn-store.js +94 -0
- package/dist/storage/vpn-store.js.map +1 -0
- package/dist/tui/app.d.ts.map +1 -1
- package/dist/tui/app.js +13 -1
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/components/content.d.ts +1 -0
- package/dist/tui/components/content.d.ts.map +1 -1
- package/dist/tui/components/content.js +26 -8
- package/dist/tui/components/content.js.map +1 -1
- package/dist/tui/components/overview.d.ts.map +1 -1
- package/dist/tui/components/overview.js +18 -8
- package/dist/tui/components/overview.js.map +1 -1
- package/dist/tui/components/sidebar.d.ts.map +1 -1
- package/dist/tui/components/sidebar.js +0 -1
- package/dist/tui/components/sidebar.js.map +1 -1
- package/dist/tui/components/status.d.ts +3 -0
- package/dist/tui/components/status.d.ts.map +1 -1
- package/dist/tui/components/status.js +28 -9
- package/dist/tui/components/status.js.map +1 -1
- package/dist/tui/controller.d.ts +22 -0
- package/dist/tui/controller.d.ts.map +1 -1
- package/dist/tui/controller.js +573 -134
- package/dist/tui/controller.js.map +1 -1
- package/dist/tui/helpers.d.ts.map +1 -1
- package/dist/tui/helpers.js +19 -10
- package/dist/tui/helpers.js.map +1 -1
- package/dist/tui/keybindings.d.ts +24 -0
- package/dist/tui/keybindings.d.ts.map +1 -0
- package/dist/tui/keybindings.js +207 -0
- package/dist/tui/keybindings.js.map +1 -0
- package/dist/tui/navigation.d.ts.map +1 -1
- package/dist/tui/navigation.js +1 -1
- package/dist/tui/navigation.js.map +1 -1
- package/dist/tui/renderer.d.ts.map +1 -1
- package/dist/tui/renderer.js +50 -20
- package/dist/tui/renderer.js.map +1 -1
- package/dist/tui/state/store.d.ts.map +1 -1
- package/dist/tui/state/store.js +14 -2
- package/dist/tui/state/store.js.map +1 -1
- package/dist/tui/state/types.d.ts +21 -1
- package/dist/tui/state/types.d.ts.map +1 -1
- package/dist/tui/topic-reader.d.ts +9 -1
- package/dist/tui/topic-reader.d.ts.map +1 -1
- package/dist/tui/topic-reader.js +39 -16
- package/dist/tui/topic-reader.js.map +1 -1
- package/dist/tui/ubb-renderer.d.ts.map +1 -1
- package/dist/tui/ubb-renderer.js +176 -12
- package/dist/tui/ubb-renderer.js.map +1 -1
- package/dist/update.d.ts +4 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +71 -11
- package/dist/update.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +10 -2
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/dist/tui/app-new.d.ts +0 -2
- package/dist/tui/app-new.d.ts.map +0 -1
- package/dist/tui/app-new.js +0 -2589
- package/dist/tui/app-new.js.map +0 -1
- package/dist/tui/app-old.d.ts +0 -2
- package/dist/tui/app-old.d.ts.map +0 -1
- package/dist/tui/app-old.js +0 -2589
- package/dist/tui/app-old.js.map +0 -1
- package/dist/tui/components/layout.d.ts +0 -3
- package/dist/tui/components/layout.d.ts.map +0 -1
- package/dist/tui/components/layout.js +0 -464
- package/dist/tui/components/layout.js.map +0 -1
- package/dist/tui/keymap/actions.d.ts +0 -9
- package/dist/tui/keymap/actions.d.ts.map +0 -1
- package/dist/tui/keymap/actions.js +0 -208
- package/dist/tui/keymap/actions.js.map +0 -1
- package/dist/tui/keymap/bindings.d.ts +0 -5
- package/dist/tui/keymap/bindings.d.ts.map +0 -1
- package/dist/tui/keymap/bindings.js +0 -138
- package/dist/tui/keymap/bindings.js.map +0 -1
- package/dist/tui/keymap/index.d.ts +0 -4
- package/dist/tui/keymap/index.d.ts.map +0 -1
- package/dist/tui/keymap/index.js +0 -5
- package/dist/tui/keymap/index.js.map +0 -1
- package/dist/tui/keymap/types.d.ts +0 -17
- package/dist/tui/keymap/types.d.ts.map +0 -1
- package/dist/tui/keymap/types.js +0 -3
- package/dist/tui/keymap/types.js.map +0 -1
|
@@ -4,7 +4,15 @@ export declare function appendTopicPosts(topic: TopicReaderState, posts: unknown
|
|
|
4
4
|
export declare function currentTopicPost(topic: TopicReaderState, scroll: number): TopicPostEntry | undefined;
|
|
5
5
|
export declare function currentTopicLine(topic: TopicReaderState, scroll: number): TopicLineEntry | undefined;
|
|
6
6
|
export declare function findTopicPostByFloor(topic: TopicReaderState, floor: number): TopicPostEntry | undefined;
|
|
7
|
-
export declare
|
|
7
|
+
export declare const FLOORS_PER_PAGE = 10;
|
|
8
|
+
export interface TopicPageInfo {
|
|
9
|
+
currentPage: number;
|
|
10
|
+
totalPages: number;
|
|
11
|
+
currentFloor: number;
|
|
12
|
+
totalFloors: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function getTopicPageInfo(topic: TopicReaderState, scroll: number): TopicPageInfo;
|
|
15
|
+
export declare function jumpToPage(topic: TopicReaderState, page: number): number;
|
|
8
16
|
export declare function lineKindLabel(kind: TopicLineEntry["kind"]): string;
|
|
9
17
|
export declare function parseBracketIndex(value: string, label: "image" | "link"): number | undefined;
|
|
10
18
|
//# sourceMappingURL=topic-reader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topic-reader.d.ts","sourceRoot":"","sources":["../../src/tui/topic-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"topic-reader.d.ts","sourceRoot":"","sources":["../../src/tui/topic-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CA8BlI;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAQhF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEpG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAQpG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEvG;AAGD,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAOvF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,CAiBlE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAG5F"}
|
package/dist/tui/topic-reader.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { renderUbbToLines } from "./ubb-renderer.js";
|
|
2
2
|
import { asArray, asNumber, asObject, normalizeInline } from "./helpers.js";
|
|
3
|
+
import { stripAnsi } from "./ansi.js";
|
|
3
4
|
const topicWidth = 72;
|
|
4
5
|
export function buildTopicReader(topicId, topic, posts, size) {
|
|
5
6
|
const title = String(topic.title ?? `主题 #${topicId}`);
|
|
6
7
|
const replyCount = asNumber(topic.replyCount);
|
|
7
8
|
const hitCount = asNumber(topic.hitCount);
|
|
8
9
|
const boardName = String(topic.boardName ?? "");
|
|
10
|
+
const totalFloors = Math.max(posts.length, replyCount !== undefined ? replyCount + 1 : posts.length);
|
|
9
11
|
const meta = [
|
|
10
12
|
boardName || undefined,
|
|
11
13
|
replyCount !== undefined ? `${replyCount} 回复` : undefined,
|
|
12
14
|
hitCount !== undefined ? `${hitCount} 浏览` : undefined
|
|
13
15
|
].filter(Boolean).join(" · ");
|
|
14
|
-
const rendered = renderPosts(posts, 0);
|
|
16
|
+
const rendered = renderPosts(posts, 0, 0);
|
|
15
17
|
return {
|
|
16
18
|
topicId,
|
|
17
19
|
title,
|
|
@@ -20,14 +22,18 @@ export function buildTopicReader(topicId, topic, posts, size) {
|
|
|
20
22
|
posts: rendered.posts,
|
|
21
23
|
loaded: posts.length,
|
|
22
24
|
size,
|
|
25
|
+
totalFloors,
|
|
26
|
+
viewportRows: 0,
|
|
27
|
+
cursorLine: 0,
|
|
23
28
|
hasMore: posts.length >= size,
|
|
24
29
|
imageCount: rendered.imageCount,
|
|
25
30
|
linkCount: rendered.linkCount,
|
|
26
|
-
floorInput: ""
|
|
31
|
+
floorInput: "",
|
|
32
|
+
jumpTarget: undefined
|
|
27
33
|
};
|
|
28
34
|
}
|
|
29
35
|
export function appendTopicPosts(topic, posts) {
|
|
30
|
-
const rendered = renderPosts(posts, topic.lines.length);
|
|
36
|
+
const rendered = renderPosts(posts, topic.lines.length, topic.loaded);
|
|
31
37
|
topic.lines.push(...rendered.lines);
|
|
32
38
|
topic.posts.push(...rendered.posts);
|
|
33
39
|
topic.loaded += posts.length;
|
|
@@ -50,13 +56,20 @@ export function currentTopicLine(topic, scroll) {
|
|
|
50
56
|
export function findTopicPostByFloor(topic, floor) {
|
|
51
57
|
return topic.posts.find((post) => post.floor === floor);
|
|
52
58
|
}
|
|
53
|
-
|
|
59
|
+
// 页码相关常量
|
|
60
|
+
export const FLOORS_PER_PAGE = 10;
|
|
61
|
+
export function getTopicPageInfo(topic, scroll) {
|
|
54
62
|
const current = currentTopicPost(topic, scroll);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
return
|
|
63
|
+
const currentFloor = current?.floor ?? 1;
|
|
64
|
+
const totalFloors = Math.max(topic.totalFloors, topic.posts.length > 0 ? topic.posts[topic.posts.length - 1].floor ?? topic.posts.length : 0);
|
|
65
|
+
const currentPage = Math.ceil(currentFloor / FLOORS_PER_PAGE);
|
|
66
|
+
const totalPages = Math.max(1, Math.ceil(totalFloors / FLOORS_PER_PAGE));
|
|
67
|
+
return { currentPage, totalPages, currentFloor, totalFloors };
|
|
68
|
+
}
|
|
69
|
+
export function jumpToPage(topic, page) {
|
|
70
|
+
const targetFloor = (page - 1) * FLOORS_PER_PAGE + 1;
|
|
71
|
+
const post = findTopicPostByFloor(topic, targetFloor);
|
|
72
|
+
return post?.lineStart ?? 0;
|
|
60
73
|
}
|
|
61
74
|
export function lineKindLabel(kind) {
|
|
62
75
|
switch (kind) {
|
|
@@ -80,14 +93,23 @@ export function parseBracketIndex(value, label) {
|
|
|
80
93
|
const match = value.match(new RegExp(`^\\[${label} (\\d+)\\]`));
|
|
81
94
|
return match ? Number(match[1]) : undefined;
|
|
82
95
|
}
|
|
83
|
-
function
|
|
96
|
+
function parseLinkIndex(value) {
|
|
97
|
+
const plain = stripAnsi(value);
|
|
98
|
+
const explicit = parseBracketIndex(plain, "link");
|
|
99
|
+
if (explicit !== undefined) {
|
|
100
|
+
return explicit;
|
|
101
|
+
}
|
|
102
|
+
const inline = plain.match(/\[(\d+)\]/);
|
|
103
|
+
return inline ? Number(inline[1]) : undefined;
|
|
104
|
+
}
|
|
105
|
+
function renderPosts(posts, lineOffset, floorOffset) {
|
|
84
106
|
const lines = [];
|
|
85
107
|
const entries = [];
|
|
86
108
|
let imageCount = 0;
|
|
87
109
|
let linkCount = 0;
|
|
88
110
|
for (const post of posts) {
|
|
89
111
|
const obj = asObject(post);
|
|
90
|
-
const floor = asNumber(obj.floor) ?? entries.length + 1;
|
|
112
|
+
const floor = asNumber(obj.floor) ?? floorOffset + entries.length + 1;
|
|
91
113
|
const author = String(obj.userName ?? asObject(obj.user).name ?? "匿名");
|
|
92
114
|
const time = typeof obj.time === "string" ? obj.time.replace("T", " ").slice(0, 16) : "";
|
|
93
115
|
const content = String(obj.content ?? "");
|
|
@@ -102,7 +124,7 @@ function renderPosts(posts, lineOffset) {
|
|
|
102
124
|
for (const renderedLine of rendered.lines) {
|
|
103
125
|
const kind = classifyLine(renderedLine);
|
|
104
126
|
const imageIndex = kind === "image" ? parseBracketIndex(renderedLine, "image") : undefined;
|
|
105
|
-
const linkIndex = kind === "link" ?
|
|
127
|
+
const linkIndex = kind === "link" ? parseLinkIndex(renderedLine) : undefined;
|
|
106
128
|
lines.push(renderedLine);
|
|
107
129
|
postLines.push({
|
|
108
130
|
line: lineOffset + lines.length - 1,
|
|
@@ -142,16 +164,17 @@ function renderPosts(posts, lineOffset) {
|
|
|
142
164
|
return { lines, posts: entries, imageCount, linkCount };
|
|
143
165
|
}
|
|
144
166
|
function classifyLine(line) {
|
|
145
|
-
|
|
167
|
+
const plain = stripAnsi(line);
|
|
168
|
+
if (plain.startsWith("[image ")) {
|
|
146
169
|
return "image";
|
|
147
170
|
}
|
|
148
|
-
if (
|
|
171
|
+
if (plain.startsWith("[link ") || /\[\d+\]/.test(plain)) {
|
|
149
172
|
return "link";
|
|
150
173
|
}
|
|
151
|
-
if (
|
|
174
|
+
if (plain.startsWith("│ ")) {
|
|
152
175
|
return "quote";
|
|
153
176
|
}
|
|
154
|
-
if (
|
|
177
|
+
if (plain.trim() === "") {
|
|
155
178
|
return "blank";
|
|
156
179
|
}
|
|
157
180
|
return "text";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topic-reader.js","sourceRoot":"","sources":["../../src/tui/topic-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"topic-reader.js","sourceRoot":"","sources":["../../src/tui/topic-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,KAA8B,EAAE,KAAgB,EAAE,IAAY;IAC9G,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,OAAO,EAAE,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrG,MAAM,IAAI,GAAG;QACX,SAAS,IAAI,SAAS;QACtB,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,SAAS;QACzD,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,SAAS;KACtD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1C,OAAO;QACL,OAAO;QACP,KAAK;QACL,IAAI;QACJ,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI;QACJ,WAAW;QACX,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;QAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAuB,EAAE,KAAgB;IACxE,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IAC7B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;IAC3C,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC;IACxC,KAAK,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAuB,EAAE,MAAc;IACtE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAuB,EAAE,MAAc;IACtE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC/D,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAuB,EAAE,KAAa;IACzE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS;AACT,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AASlC,MAAM,UAAU,gBAAgB,CAAC,KAAuB,EAAE,MAAc;IACtE,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9I,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC;IACzE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAuB,EAAE,IAAY;IAC9D,MAAM,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACtD,OAAO,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAA4B;IACxD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;QACd,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd,KAAK,MAAM;YACT,OAAO,IAAI,CAAC;QACd,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd,KAAK,MAAM;YACT,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,KAAuB;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,KAAgB,EAAE,UAAkB,EAAE,WAAmB;IAM5E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,SAAS,GAAqB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAEhE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACrG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAElG,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3F,MAAM,SAAS,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7E,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;gBACnC,GAAG,EAAE,SAAS,CAAC,MAAM;gBACrB,KAAK;gBACL,IAAI;gBACJ,IAAI,EAAE,YAAY;gBAClB,UAAU;gBACV,QAAQ,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBAChF,SAAS;gBACT,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;aAC7E,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/G,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACrC,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAEnC,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAC5B,KAAK;YACL,MAAM;YACN,IAAI;YACJ,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;YACvC,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;YAC7C,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC;YACzB,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/D,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;YACtC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM;YAClC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;YAChC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAA6B;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,OAAO,CAAC,MAAM,MAAM,CAAC;IACjC,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ubb-renderer.d.ts","sourceRoot":"","sources":["../../src/tui/ubb-renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ubb-renderer.d.ts","sourceRoot":"","sources":["../../src/tui/ubb-renderer.ts"],"names":[],"mappings":"AAuDA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAuF7E"}
|
package/dist/tui/ubb-renderer.js
CHANGED
|
@@ -1,49 +1,190 @@
|
|
|
1
|
+
// ANSI 转义码
|
|
2
|
+
const ANSI = {
|
|
3
|
+
reset: "\x1b[0m",
|
|
4
|
+
bold: "\x1b[1m",
|
|
5
|
+
italic: "\x1b[3m",
|
|
6
|
+
underline: "\x1b[4m",
|
|
7
|
+
strikethrough: "\x1b[9m",
|
|
8
|
+
// 前景色
|
|
9
|
+
black: "\x1b[30m",
|
|
10
|
+
red: "\x1b[31m",
|
|
11
|
+
green: "\x1b[32m",
|
|
12
|
+
yellow: "\x1b[33m",
|
|
13
|
+
blue: "\x1b[34m",
|
|
14
|
+
magenta: "\x1b[35m",
|
|
15
|
+
cyan: "\x1b[36m",
|
|
16
|
+
white: "\x1b[37m",
|
|
17
|
+
// 亮色
|
|
18
|
+
brightRed: "\x1b[91m",
|
|
19
|
+
brightGreen: "\x1b[92m",
|
|
20
|
+
brightYellow: "\x1b[93m",
|
|
21
|
+
brightBlue: "\x1b[94m",
|
|
22
|
+
brightMagenta: "\x1b[95m",
|
|
23
|
+
brightCyan: "\x1b[96m",
|
|
24
|
+
brightWhite: "\x1b[97m",
|
|
25
|
+
// 特殊
|
|
26
|
+
gray: "\x1b[90m",
|
|
27
|
+
};
|
|
28
|
+
// CC98 颜色名到 ANSI 的映射
|
|
29
|
+
const COLOR_MAP = {
|
|
30
|
+
// 基础颜色
|
|
31
|
+
black: ANSI.black,
|
|
32
|
+
red: ANSI.red,
|
|
33
|
+
green: ANSI.green,
|
|
34
|
+
yellow: ANSI.yellow,
|
|
35
|
+
blue: ANSI.blue,
|
|
36
|
+
magenta: ANSI.magenta,
|
|
37
|
+
cyan: ANSI.cyan,
|
|
38
|
+
white: ANSI.white,
|
|
39
|
+
gray: ANSI.gray,
|
|
40
|
+
grey: ANSI.gray,
|
|
41
|
+
// 亮色
|
|
42
|
+
orange: ANSI.brightRed,
|
|
43
|
+
pink: ANSI.brightMagenta,
|
|
44
|
+
purple: ANSI.magenta,
|
|
45
|
+
// 其他常见颜色
|
|
46
|
+
gold: ANSI.brightYellow,
|
|
47
|
+
lime: ANSI.brightGreen,
|
|
48
|
+
aqua: ANSI.brightCyan,
|
|
49
|
+
teal: ANSI.cyan,
|
|
50
|
+
navy: ANSI.blue,
|
|
51
|
+
maroon: ANSI.red,
|
|
52
|
+
olive: ANSI.yellow,
|
|
53
|
+
};
|
|
1
54
|
export function renderUbbToLines(content, width) {
|
|
2
55
|
const images = [];
|
|
3
56
|
const links = [];
|
|
4
57
|
let text = content.replace(/\r\n/g, "\n");
|
|
58
|
+
// 1. 处理图片 [img]url[/img]
|
|
5
59
|
text = text.replace(/\[img\]([\s\S]*?)\[\/img\]/gi, (_match, url) => {
|
|
6
60
|
const cleanUrl = url.trim();
|
|
7
61
|
images.push(cleanUrl);
|
|
8
62
|
const index = images.length;
|
|
9
|
-
return `\n[image ${index}] ${shortUrl(cleanUrl)}\n o 打开 c
|
|
63
|
+
return `\n[image ${index}] ${shortUrl(cleanUrl)}\n o 打开 c 复制链接\n`;
|
|
10
64
|
});
|
|
65
|
+
// 2. 处理链接 [url=...]text[/url] 和 [url]url[/url]
|
|
11
66
|
text = text.replace(/\[url=([^\]]+)\]([\s\S]*?)\[\/url\]/gi, (_match, url, label) => {
|
|
12
67
|
const cleanUrl = url.trim();
|
|
13
68
|
links.push(cleanUrl);
|
|
14
|
-
return `${stripUbb(label)} [
|
|
69
|
+
return `${ANSI.underline}${ANSI.brightBlue}${stripUbb(label)}${ANSI.reset} ${ANSI.gray}[${links.length}]${ANSI.reset}`;
|
|
15
70
|
});
|
|
16
71
|
text = text.replace(/\[url\]([\s\S]*?)\[\/url\]/gi, (_match, url) => {
|
|
17
72
|
const cleanUrl = url.trim();
|
|
18
73
|
links.push(cleanUrl);
|
|
19
|
-
return
|
|
74
|
+
return `${ANSI.underline}${ANSI.brightBlue}${shortUrl(cleanUrl)}${ANSI.reset} ${ANSI.gray}[${links.length}]${ANSI.reset}`;
|
|
20
75
|
});
|
|
21
|
-
|
|
22
|
-
|
|
76
|
+
// 3. 处理引用 [quote]...[/quote] 和 [quote=author]...[/quote]
|
|
77
|
+
text = text.replace(/\[quote(?:=([^\]]*))?\]([\s\S]*?)\[\/quote\]/gi, (_match, author, quoted) => {
|
|
78
|
+
const prefix = author ? `${ANSI.gray}${stripUbb(author)} 说:${ANSI.reset}\n` : "";
|
|
79
|
+
const lines = stripUbb(quoted).split("\n").map((line) => `${ANSI.gray}│ ${line}${ANSI.reset}`).join("\n");
|
|
80
|
+
return `\n${prefix}${lines}\n`;
|
|
23
81
|
});
|
|
82
|
+
// 4. 处理代码块 [code]...[/code]
|
|
24
83
|
text = text.replace(/\[code\]([\s\S]*?)\[\/code\]/gi, (_match, code) => {
|
|
25
|
-
|
|
84
|
+
const lines = code.split("\n").map((line) => ` ${line}`).join("\n");
|
|
85
|
+
return `\n${ANSI.gray}${lines}${ANSI.reset}\n`;
|
|
26
86
|
});
|
|
27
|
-
|
|
87
|
+
// 5. 处理表情包 [acXX] [emXX] [cc98XX] [a:XXX] 等
|
|
88
|
+
text = text.replace(/\[(ac\d{2,4})\]/gi, (_match, code) => {
|
|
89
|
+
return `${ANSI.brightYellow}[${code}]${ANSI.reset}`;
|
|
90
|
+
});
|
|
91
|
+
text = text.replace(/\[(em\d{2})\]/gi, (_match, code) => {
|
|
92
|
+
return `${ANSI.brightYellow}[${code}]${ANSI.reset}`;
|
|
93
|
+
});
|
|
94
|
+
text = text.replace(/\[(cc98\d{2})\]/gi, (_match, code) => {
|
|
95
|
+
return `${ANSI.brightYellow}[${code}]${ANSI.reset}`;
|
|
96
|
+
});
|
|
97
|
+
text = text.replace(/\[(a:\d{3})\]/gi, (_match, code) => {
|
|
98
|
+
return `${ANSI.brightYellow}[${code}]${ANSI.reset}`;
|
|
99
|
+
});
|
|
100
|
+
text = text.replace(/\[(tb\d{2})\]/gi, (_match, code) => {
|
|
101
|
+
return `${ANSI.brightYellow}[${code}]${ANSI.reset}`;
|
|
102
|
+
});
|
|
103
|
+
// 6. 处理基本格式标签(转为 ANSI)
|
|
104
|
+
text = text.replace(/\[b\]([\s\S]*?)\[\/b\]/gi, (_match, content) => {
|
|
105
|
+
return `${ANSI.bold}${content}${ANSI.reset}`;
|
|
106
|
+
});
|
|
107
|
+
text = text.replace(/\[i\]([\s\S]*?)\[\/i\]/gi, (_match, content) => {
|
|
108
|
+
return `${ANSI.italic}${content}${ANSI.reset}`;
|
|
109
|
+
});
|
|
110
|
+
text = text.replace(/\[u\]([\s\S]*?)\[\/u\]/gi, (_match, content) => {
|
|
111
|
+
return `${ANSI.underline}${content}${ANSI.reset}`;
|
|
112
|
+
});
|
|
113
|
+
text = text.replace(/\[(?:del|s)\]([\s\S]*?)\[\/(?:del|s)\]/gi, (_match, content) => {
|
|
114
|
+
return `${ANSI.strikethrough}${content}${ANSI.reset}`;
|
|
115
|
+
});
|
|
116
|
+
// 7. 处理颜色 [color=xxx]...[/color]
|
|
117
|
+
text = text.replace(/\[color=([^\]]+)\]([\s\S]*?)\[\/color\]/gi, (_match, color, content) => {
|
|
118
|
+
const ansiColor = resolveColor(color.trim());
|
|
119
|
+
return `${ansiColor}${content}${ANSI.reset}`;
|
|
120
|
+
});
|
|
121
|
+
// 8. 清理其他未处理的 UBB 标签
|
|
122
|
+
text = stripRemainingUbb(text);
|
|
123
|
+
// 9. 解码 HTML 实体
|
|
28
124
|
text = decodeHtml(text);
|
|
29
125
|
return {
|
|
30
126
|
lines: wrapLines(text, width),
|
|
31
127
|
images,
|
|
32
|
-
links
|
|
128
|
+
links,
|
|
33
129
|
};
|
|
34
130
|
}
|
|
35
|
-
|
|
36
|
-
|
|
131
|
+
// 解析颜色值
|
|
132
|
+
function resolveColor(color) {
|
|
133
|
+
// 先检查颜色名映射
|
|
134
|
+
const lowerColor = color.toLowerCase();
|
|
135
|
+
if (COLOR_MAP[lowerColor]) {
|
|
136
|
+
return COLOR_MAP[lowerColor];
|
|
137
|
+
}
|
|
138
|
+
// 处理十六进制颜色 #RRGGBB 或 #RGB
|
|
139
|
+
const hexMatch = color.match(/^#?([0-9a-f]{3,6})$/i);
|
|
140
|
+
if (hexMatch) {
|
|
141
|
+
let hex = hexMatch[1];
|
|
142
|
+
if (hex.length === 3) {
|
|
143
|
+
hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
|
|
144
|
+
}
|
|
145
|
+
const r = parseInt(hex.slice(0, 2), 16);
|
|
146
|
+
const g = parseInt(hex.slice(2, 4), 16);
|
|
147
|
+
const b = parseInt(hex.slice(4, 6), 16);
|
|
148
|
+
return `\x1b[38;2;${r};${g};${b}m`;
|
|
149
|
+
}
|
|
150
|
+
// 默认返回白色
|
|
151
|
+
return ANSI.white;
|
|
152
|
+
}
|
|
153
|
+
// 清理剩余的 UBB 标签
|
|
154
|
+
function stripRemainingUbb(value) {
|
|
155
|
+
// 保留表情包代码
|
|
156
|
+
const emoticonPlaceholders = [];
|
|
157
|
+
const linkPlaceholders = [];
|
|
158
|
+
let result = value;
|
|
159
|
+
// 先将表情包代码替换为占位符
|
|
160
|
+
result = result.replace(/\[(?:ac\d{2,4}|em\d{2}|cc98\d{2}|a:\d{3}|tb\d{2})\]/gi, (match) => {
|
|
161
|
+
emoticonPlaceholders.push(match);
|
|
162
|
+
return `__EMOTICON_${emoticonPlaceholders.length - 1}__`;
|
|
163
|
+
});
|
|
164
|
+
result = result.replace(/\[\d+\]/g, (match) => {
|
|
165
|
+
linkPlaceholders.push(match);
|
|
166
|
+
return `__LINK_${linkPlaceholders.length - 1}__`;
|
|
167
|
+
});
|
|
168
|
+
// 移除已知的 UBB 标签
|
|
169
|
+
result = result
|
|
37
170
|
.replace(/\[(?:\/)?(?:b|i|u|size|color|align|email|del|s|sub|sup|h\d?)(?:=[^\]]*)?\]/gi, "")
|
|
38
171
|
.replace(/\[[a-z0-9]+(?:=[^\]]*)?\]/gi, "")
|
|
39
172
|
.replace(/\[\/[a-z0-9]+\]/gi, "");
|
|
173
|
+
// 恢复表情包代码
|
|
174
|
+
for (let i = 0; i < emoticonPlaceholders.length; i++) {
|
|
175
|
+
result = result.replace(`__EMOTICON_${i}__`, emoticonPlaceholders[i]);
|
|
176
|
+
}
|
|
177
|
+
for (let i = 0; i < linkPlaceholders.length; i++) {
|
|
178
|
+
result = result.replace(`__LINK_${i}__`, linkPlaceholders[i]);
|
|
179
|
+
}
|
|
180
|
+
return result;
|
|
40
181
|
}
|
|
41
182
|
function decodeHtml(value) {
|
|
42
183
|
return value
|
|
43
184
|
.replace(/&/g, "&")
|
|
44
185
|
.replace(/</g, "<")
|
|
45
186
|
.replace(/>/g, ">")
|
|
46
|
-
.replace(/"/g, "
|
|
187
|
+
.replace(/"/g, '"')
|
|
47
188
|
.replace(/'/g, "'");
|
|
48
189
|
}
|
|
49
190
|
function wrapLines(value, width) {
|
|
@@ -56,7 +197,15 @@ function wrapLines(value, width) {
|
|
|
56
197
|
}
|
|
57
198
|
let current = "";
|
|
58
199
|
let currentWidth = 0;
|
|
59
|
-
for (
|
|
200
|
+
for (let index = 0; index < paragraph.length;) {
|
|
201
|
+
if (paragraph[index] === "\x1b") {
|
|
202
|
+
const end = findAnsiEnd(paragraph, index);
|
|
203
|
+
current += paragraph.slice(index, end);
|
|
204
|
+
index = end;
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
const codePoint = paragraph.codePointAt(index);
|
|
208
|
+
const char = codePoint === undefined ? paragraph[index] : String.fromCodePoint(codePoint);
|
|
60
209
|
const nextWidth = charWidth(char);
|
|
61
210
|
if (currentWidth + nextWidth > maxWidth) {
|
|
62
211
|
lines.push(current);
|
|
@@ -67,11 +216,20 @@ function wrapLines(value, width) {
|
|
|
67
216
|
current += char;
|
|
68
217
|
currentWidth += nextWidth;
|
|
69
218
|
}
|
|
219
|
+
index += char.length;
|
|
70
220
|
}
|
|
71
221
|
lines.push(current);
|
|
72
222
|
}
|
|
73
223
|
return lines;
|
|
74
224
|
}
|
|
225
|
+
function findAnsiEnd(value, start) {
|
|
226
|
+
for (let index = start + 1; index < value.length; index += 1) {
|
|
227
|
+
if (/[A-Za-z]/.test(value[index])) {
|
|
228
|
+
return index + 1;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return value.length;
|
|
232
|
+
}
|
|
75
233
|
function shortUrl(value) {
|
|
76
234
|
try {
|
|
77
235
|
const url = new URL(value);
|
|
@@ -82,6 +240,12 @@ function shortUrl(value) {
|
|
|
82
240
|
return value;
|
|
83
241
|
}
|
|
84
242
|
}
|
|
243
|
+
function stripUbb(value) {
|
|
244
|
+
return value
|
|
245
|
+
.replace(/\[(?:\/)?(?:b|i|u|size|color|align|email|del|s|sub|sup|h\d?)(?:=[^\]]*)?\]/gi, "")
|
|
246
|
+
.replace(/\[[a-z0-9]+(?:=[^\]]*)?\]/gi, "")
|
|
247
|
+
.replace(/\[\/[a-z0-9]+\]/gi, "");
|
|
248
|
+
}
|
|
85
249
|
function charWidth(char) {
|
|
86
250
|
const code = char.codePointAt(0) ?? 0;
|
|
87
251
|
if (code >= 0x1100 &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ubb-renderer.js","sourceRoot":"","sources":["../../src/tui/ubb-renderer.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,KAAa;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE1C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,CAAC,MAAM,EAAE,GAAW,EAAE,EAAE;QAC1E,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,OAAO,YAAY,KAAK,KAAK,QAAQ,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uCAAuC,EAAE,CAAC,MAAM,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE;QAClG,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,CAAC,MAAM,EAAE,GAAW,EAAE,EAAE;QAC1E,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,SAAS,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kCAAkC,EAAE,CAAC,MAAM,EAAE,MAAc,EAAE,EAAE;QACjF,OAAO,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gCAAgC,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAC7E,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAExB,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7B,MAAM;QACN,KAAK;KACN,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK;SACT,OAAO,CAAC,8EAA8E,EAAE,EAAE,CAAC;SAC3F,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;SAC1C,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK;SACT,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,KAAa;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,YAAY,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,YAAY,GAAG,SAAS,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,IAAI,CAAC;gBAChB,YAAY,IAAI,SAAS,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtE,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,IACE,IAAI,IAAI,MAAM;QACd,CAAC,IAAI,IAAI,MAAM;YACb,IAAI,KAAK,MAAM;YACf,IAAI,KAAK,MAAM;YACf,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;YAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;YAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;YAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;YAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;YAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;YAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EACrC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
1
|
+
{"version":3,"file":"ubb-renderer.js","sourceRoot":"","sources":["../../src/tui/ubb-renderer.ts"],"names":[],"mappings":"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"}
|
package/dist/update.d.ts
CHANGED
|
@@ -12,6 +12,9 @@ export interface UpdateCheckResult {
|
|
|
12
12
|
updateAvailable: boolean;
|
|
13
13
|
message: string;
|
|
14
14
|
}
|
|
15
|
+
export type InstallMethod = "npm" | "bun" | "source" | "unknown";
|
|
16
|
+
export declare function detectInstallMethod(): Promise<InstallMethod>;
|
|
17
|
+
export declare function performUpdate(method: InstallMethod): Promise<string>;
|
|
15
18
|
export declare function checkForUpdate(): Promise<UpdateCheckResult>;
|
|
16
|
-
export declare function formatUpdateResult(result: UpdateCheckResult): string;
|
|
19
|
+
export declare function formatUpdateResult(result: UpdateCheckResult, installMethod?: InstallMethod): string;
|
|
17
20
|
//# sourceMappingURL=update.d.ts.map
|
package/dist/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAYD,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjE,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,aAAa,CAAC,CAgClE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB1E;AAcD,wBAAsB,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CA6CjE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,MAAM,CAenG"}
|
package/dist/update.js
CHANGED
|
@@ -1,5 +1,70 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
1
4
|
import { appName, appVersion, repositoryName, repositoryOwner, repositoryUrl } from "./version.js";
|
|
2
5
|
const latestReleaseApiUrl = `https://api.github.com/repos/${repositoryOwner}/${repositoryName}/releases/latest`;
|
|
6
|
+
export async function detectInstallMethod() {
|
|
7
|
+
// 检查是否是 npm 全局安装
|
|
8
|
+
try {
|
|
9
|
+
const npmGlobalDir = await execCommand("npm", ["root", "-g"]);
|
|
10
|
+
const currentFile = new URL(import.meta.url).pathname;
|
|
11
|
+
if (currentFile.includes(npmGlobalDir.trim())) {
|
|
12
|
+
return "npm";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// ignore
|
|
17
|
+
}
|
|
18
|
+
// 检查是否是 bun 全局安装
|
|
19
|
+
try {
|
|
20
|
+
const bunGlobalDir = await execCommand("bun", ["pm", "ls", "-g"]);
|
|
21
|
+
if (bunGlobalDir.includes(appName)) {
|
|
22
|
+
return "bun";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// ignore
|
|
27
|
+
}
|
|
28
|
+
// 检查 package.json 是否存在(源码安装)
|
|
29
|
+
try {
|
|
30
|
+
const currentDir = new URL("../..", import.meta.url).pathname;
|
|
31
|
+
await readFile(join(currentDir, "package.json"), "utf-8");
|
|
32
|
+
return "source";
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// ignore
|
|
36
|
+
}
|
|
37
|
+
return "unknown";
|
|
38
|
+
}
|
|
39
|
+
export async function performUpdate(method) {
|
|
40
|
+
switch (method) {
|
|
41
|
+
case "npm":
|
|
42
|
+
return execCommand("npm", ["install", "-g", `${appName}`]);
|
|
43
|
+
case "bun":
|
|
44
|
+
return execCommand("bun", ["install", "-g", `${appName}`]);
|
|
45
|
+
case "source": {
|
|
46
|
+
const currentDir = new URL("../..", import.meta.url).pathname;
|
|
47
|
+
await execCommand("git", ["pull"], currentDir);
|
|
48
|
+
await execCommand("npm", ["install"], currentDir);
|
|
49
|
+
await execCommand("npm", ["run", "build"], currentDir);
|
|
50
|
+
return "源码更新完成";
|
|
51
|
+
}
|
|
52
|
+
default:
|
|
53
|
+
throw new Error("无法检测安装方式,请手动更新。");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function execCommand(command, args, cwd) {
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
execFile(command, args, { cwd }, (error, stdout, stderr) => {
|
|
59
|
+
if (error) {
|
|
60
|
+
reject(new Error(stderr || error.message));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
resolve(stdout);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
3
68
|
export async function checkForUpdate() {
|
|
4
69
|
const response = await fetch(latestReleaseApiUrl, {
|
|
5
70
|
headers: {
|
|
@@ -41,21 +106,16 @@ export async function checkForUpdate() {
|
|
|
41
106
|
: `当前已是最新版本 v${appVersion}。`
|
|
42
107
|
};
|
|
43
108
|
}
|
|
44
|
-
export function formatUpdateResult(result) {
|
|
45
|
-
const lines = [
|
|
46
|
-
result.message
|
|
47
|
-
];
|
|
109
|
+
export function formatUpdateResult(result, installMethod) {
|
|
110
|
+
const lines = [result.message];
|
|
48
111
|
if (result.latest) {
|
|
49
112
|
lines.push(`最新版本:${result.latest.tagName}`);
|
|
50
113
|
lines.push(`发布页面:${result.latest.url}`);
|
|
51
114
|
if (result.updateAvailable) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
lines.push("");
|
|
57
|
-
lines.push("更新内容:");
|
|
58
|
-
lines.push(body);
|
|
115
|
+
if (installMethod && installMethod !== "unknown") {
|
|
116
|
+
lines.push("");
|
|
117
|
+
lines.push(`检测到安装方式:${installMethod}`);
|
|
118
|
+
}
|
|
59
119
|
}
|
|
60
120
|
}
|
|
61
121
|
return lines.join("\n");
|
package/dist/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA0BnG,MAAM,mBAAmB,GAAG,gCAAgC,eAAe,IAAI,cAAc,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const appName
|
|
2
|
-
export declare const appVersion
|
|
1
|
+
export declare const appName: string;
|
|
2
|
+
export declare const appVersion: string;
|
|
3
3
|
export declare const repositoryOwner = "Lucent-Snow";
|
|
4
4
|
export declare const repositoryName = "CC98-CLI";
|
|
5
5
|
export declare const repositoryUrl = "https://github.com/Lucent-Snow/CC98-CLI";
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,OAAO,EAAE,MAAyB,CAAC;AAChD,eAAO,MAAM,UAAU,EAAE,MAA4B,CAAC;AACtD,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAC7C,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,aAAa,4CAA4D,CAAC"}
|