cc98-cli 0.2.0 → 0.4.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/CHANGELOG.md +27 -0
- package/README.md +4 -2
- package/dist/api/client.d.ts +40 -15
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +179 -38
- package/dist/api/client.js.map +1 -1
- package/dist/api/endpoints.d.ts +14 -0
- package/dist/api/endpoints.d.ts.map +1 -1
- package/dist/api/endpoints.js +21 -1
- package/dist/api/endpoints.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.d.ts.map +1 -1
- package/dist/cli/commands/board.js +16 -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.d.ts.map +1 -1
- package/dist/cli/commands/me.js +18 -3
- package/dist/cli/commands/me.js.map +1 -1
- package/dist/cli/commands/message.d.ts.map +1 -1
- package/dist/cli/commands/message.js +11 -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.d.ts.map +1 -1
- package/dist/cli/commands/post.js +13 -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.d.ts.map +1 -1
- package/dist/cli/commands/topic.js +42 -6
- package/dist/cli/commands/topic.js.map +1 -1
- package/dist/cli/commands/user.d.ts.map +1 -1
- package/dist/cli/commands/user.js +13 -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 +13 -2
- 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/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 +27 -1725
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/borders.d.ts +183 -0
- package/dist/tui/borders.d.ts.map +1 -0
- package/dist/tui/borders.js +143 -0
- package/dist/tui/borders.js.map +1 -0
- package/dist/tui/cached-client.d.ts +23 -0
- package/dist/tui/cached-client.d.ts.map +1 -1
- package/dist/tui/cached-client.js +88 -0
- package/dist/tui/cached-client.js.map +1 -1
- package/dist/tui/components/content.d.ts +11 -0
- package/dist/tui/components/content.d.ts.map +1 -0
- package/dist/tui/components/content.js +129 -0
- package/dist/tui/components/content.js.map +1 -0
- package/dist/tui/components/header.d.ts +7 -0
- package/dist/tui/components/header.d.ts.map +1 -0
- package/dist/tui/components/header.js +38 -0
- package/dist/tui/components/header.js.map +1 -0
- package/dist/tui/components/index.d.ts +8 -0
- package/dist/tui/components/index.d.ts.map +1 -0
- package/dist/tui/components/index.js +9 -0
- package/dist/tui/components/index.js.map +1 -0
- package/dist/tui/components/layout.d.ts +3 -0
- package/dist/tui/components/layout.d.ts.map +1 -0
- package/dist/tui/components/layout.js +453 -0
- package/dist/tui/components/layout.js.map +1 -0
- package/dist/tui/components/overview.d.ts +7 -0
- package/dist/tui/components/overview.d.ts.map +1 -0
- package/dist/tui/components/overview.js +30 -0
- package/dist/tui/components/overview.js.map +1 -0
- package/dist/tui/components/sidebar.d.ts +7 -0
- package/dist/tui/components/sidebar.d.ts.map +1 -0
- package/dist/tui/components/sidebar.js +57 -0
- package/dist/tui/components/sidebar.js.map +1 -0
- package/dist/tui/components/status.d.ts +8 -0
- package/dist/tui/components/status.d.ts.map +1 -0
- package/dist/tui/components/status.js +42 -0
- package/dist/tui/components/status.js.map +1 -0
- package/dist/tui/components/types.d.ts +17 -0
- package/dist/tui/components/types.d.ts.map +1 -0
- package/dist/tui/components/types.js +3 -0
- package/dist/tui/components/types.js.map +1 -0
- package/dist/tui/components/utils.d.ts +5 -0
- package/dist/tui/components/utils.d.ts.map +1 -0
- package/dist/tui/components/utils.js +68 -0
- package/dist/tui/components/utils.js.map +1 -0
- package/dist/tui/controller.d.ts +66 -0
- package/dist/tui/controller.d.ts.map +1 -0
- package/dist/tui/controller.js +1200 -0
- package/dist/tui/controller.js.map +1 -0
- package/dist/tui/helpers.d.ts +25 -0
- package/dist/tui/helpers.d.ts.map +1 -0
- package/dist/tui/helpers.js +249 -0
- package/dist/tui/helpers.js.map +1 -0
- package/dist/tui/navigation.d.ts +4 -0
- package/dist/tui/navigation.d.ts.map +1 -0
- package/dist/tui/navigation.js +19 -0
- package/dist/tui/navigation.js.map +1 -0
- package/dist/tui/renderer.d.ts +6 -0
- package/dist/tui/renderer.d.ts.map +1 -0
- package/dist/tui/renderer.js +305 -0
- package/dist/tui/renderer.js.map +1 -0
- package/dist/tui/state/index.d.ts +3 -0
- package/dist/tui/state/index.d.ts.map +1 -0
- package/dist/tui/state/index.js +4 -0
- package/dist/tui/state/index.js.map +1 -0
- package/dist/tui/state/store.d.ts +4 -0
- package/dist/tui/state/store.d.ts.map +1 -0
- package/dist/tui/state/store.js +62 -0
- package/dist/tui/state/store.js.map +1 -0
- package/dist/tui/state/types.d.ts +141 -0
- package/dist/tui/state/types.d.ts.map +1 -0
- package/dist/tui/state/types.js +3 -0
- package/dist/tui/state/types.js.map +1 -0
- package/dist/tui/topic-reader.d.ts +10 -0
- package/dist/tui/topic-reader.d.ts.map +1 -0
- package/dist/tui/topic-reader.js +178 -0
- package/dist/tui/topic-reader.js.map +1 -0
- 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/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- /package/{docs/images → images}/tui.jpg +0 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { renderUbbToLines } from "./ubb-renderer.js";
|
|
2
|
+
import { asArray, asNumber, asObject, normalizeInline } from "./helpers.js";
|
|
3
|
+
import { stripAnsi } from "./ansi.js";
|
|
4
|
+
const topicWidth = 72;
|
|
5
|
+
export function buildTopicReader(topicId, topic, posts, size) {
|
|
6
|
+
const title = String(topic.title ?? `主题 #${topicId}`);
|
|
7
|
+
const replyCount = asNumber(topic.replyCount);
|
|
8
|
+
const hitCount = asNumber(topic.hitCount);
|
|
9
|
+
const boardName = String(topic.boardName ?? "");
|
|
10
|
+
const meta = [
|
|
11
|
+
boardName || undefined,
|
|
12
|
+
replyCount !== undefined ? `${replyCount} 回复` : undefined,
|
|
13
|
+
hitCount !== undefined ? `${hitCount} 浏览` : undefined
|
|
14
|
+
].filter(Boolean).join(" · ");
|
|
15
|
+
const rendered = renderPosts(posts, 0);
|
|
16
|
+
return {
|
|
17
|
+
topicId,
|
|
18
|
+
title,
|
|
19
|
+
meta,
|
|
20
|
+
lines: rendered.lines,
|
|
21
|
+
posts: rendered.posts,
|
|
22
|
+
loaded: posts.length,
|
|
23
|
+
size,
|
|
24
|
+
hasMore: posts.length >= size,
|
|
25
|
+
imageCount: rendered.imageCount,
|
|
26
|
+
linkCount: rendered.linkCount,
|
|
27
|
+
floorInput: ""
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function appendTopicPosts(topic, posts) {
|
|
31
|
+
const rendered = renderPosts(posts, topic.lines.length);
|
|
32
|
+
topic.lines.push(...rendered.lines);
|
|
33
|
+
topic.posts.push(...rendered.posts);
|
|
34
|
+
topic.loaded += posts.length;
|
|
35
|
+
topic.hasMore = posts.length >= topic.size;
|
|
36
|
+
topic.imageCount += rendered.imageCount;
|
|
37
|
+
topic.linkCount += rendered.linkCount;
|
|
38
|
+
}
|
|
39
|
+
export function currentTopicPost(topic, scroll) {
|
|
40
|
+
return topic.posts.find((post) => scroll >= post.lineStart && scroll <= post.lineEnd);
|
|
41
|
+
}
|
|
42
|
+
export function currentTopicLine(topic, scroll) {
|
|
43
|
+
for (const post of topic.posts) {
|
|
44
|
+
const line = post.lines.find((entry) => entry.line === scroll);
|
|
45
|
+
if (line) {
|
|
46
|
+
return line;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
export function findTopicPostByFloor(topic, floor) {
|
|
52
|
+
return topic.posts.find((post) => post.floor === floor);
|
|
53
|
+
}
|
|
54
|
+
export function jumpRelativeTopicFloor(topic, scroll, delta) {
|
|
55
|
+
const current = currentTopicPost(topic, scroll);
|
|
56
|
+
if (!current) {
|
|
57
|
+
return scroll;
|
|
58
|
+
}
|
|
59
|
+
const next = findTopicPostByFloor(topic, (current.floor ?? 1) + delta);
|
|
60
|
+
return next?.lineStart ?? scroll;
|
|
61
|
+
}
|
|
62
|
+
export function lineKindLabel(kind) {
|
|
63
|
+
switch (kind) {
|
|
64
|
+
case "header":
|
|
65
|
+
return "楼层";
|
|
66
|
+
case "divider":
|
|
67
|
+
return "分隔";
|
|
68
|
+
case "quote":
|
|
69
|
+
return "引用";
|
|
70
|
+
case "image":
|
|
71
|
+
return "图片";
|
|
72
|
+
case "link":
|
|
73
|
+
return "链接";
|
|
74
|
+
case "blank":
|
|
75
|
+
return "空行";
|
|
76
|
+
case "text":
|
|
77
|
+
return "正文";
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export function parseBracketIndex(value, label) {
|
|
81
|
+
const match = value.match(new RegExp(`^\\[${label} (\\d+)\\]`));
|
|
82
|
+
return match ? Number(match[1]) : undefined;
|
|
83
|
+
}
|
|
84
|
+
function parseLinkIndex(value) {
|
|
85
|
+
const plain = stripAnsi(value);
|
|
86
|
+
const explicit = parseBracketIndex(plain, "link");
|
|
87
|
+
if (explicit !== undefined) {
|
|
88
|
+
return explicit;
|
|
89
|
+
}
|
|
90
|
+
const inline = plain.match(/\[(\d+)\]/);
|
|
91
|
+
return inline ? Number(inline[1]) : undefined;
|
|
92
|
+
}
|
|
93
|
+
function renderPosts(posts, lineOffset) {
|
|
94
|
+
const lines = [];
|
|
95
|
+
const entries = [];
|
|
96
|
+
let imageCount = 0;
|
|
97
|
+
let linkCount = 0;
|
|
98
|
+
for (const post of posts) {
|
|
99
|
+
const obj = asObject(post);
|
|
100
|
+
const floor = asNumber(obj.floor) ?? entries.length + 1;
|
|
101
|
+
const author = String(obj.userName ?? asObject(obj.user).name ?? "匿名");
|
|
102
|
+
const time = typeof obj.time === "string" ? obj.time.replace("T", " ").slice(0, 16) : "";
|
|
103
|
+
const content = String(obj.content ?? "");
|
|
104
|
+
const rendered = renderUbbToLines(content, topicWidth);
|
|
105
|
+
const postLines = [];
|
|
106
|
+
const start = lineOffset + lines.length;
|
|
107
|
+
const header = `#${floor} ${author}${time ? ` · ${time}` : ""}`;
|
|
108
|
+
lines.push(header);
|
|
109
|
+
postLines.push({ line: lineOffset + lines.length - 1, row: 0, floor, kind: "header", text: header });
|
|
110
|
+
lines.push("─".repeat(20));
|
|
111
|
+
postLines.push({ line: lineOffset + lines.length - 1, row: 1, floor, kind: "divider", text: "" });
|
|
112
|
+
for (const renderedLine of rendered.lines) {
|
|
113
|
+
const kind = classifyLine(renderedLine);
|
|
114
|
+
const imageIndex = kind === "image" ? parseBracketIndex(renderedLine, "image") : undefined;
|
|
115
|
+
const linkIndex = kind === "link" ? parseLinkIndex(renderedLine) : undefined;
|
|
116
|
+
lines.push(renderedLine);
|
|
117
|
+
postLines.push({
|
|
118
|
+
line: lineOffset + lines.length - 1,
|
|
119
|
+
row: postLines.length,
|
|
120
|
+
floor,
|
|
121
|
+
kind,
|
|
122
|
+
text: renderedLine,
|
|
123
|
+
imageIndex,
|
|
124
|
+
imageUrl: imageIndex !== undefined ? rendered.images[imageIndex - 1] : undefined,
|
|
125
|
+
linkIndex,
|
|
126
|
+
linkUrl: linkIndex !== undefined ? rendered.links[linkIndex - 1] : undefined
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
lines.push("");
|
|
130
|
+
postLines.push({ line: lineOffset + lines.length - 1, row: postLines.length, floor, kind: "blank", text: "" });
|
|
131
|
+
imageCount += rendered.images.length;
|
|
132
|
+
linkCount += rendered.links.length;
|
|
133
|
+
entries.push({
|
|
134
|
+
id: asNumber(obj.id),
|
|
135
|
+
userId: asNumber(obj.userId),
|
|
136
|
+
floor,
|
|
137
|
+
author,
|
|
138
|
+
time,
|
|
139
|
+
likeCount: asNumber(obj.likeCount) ?? 0,
|
|
140
|
+
dislikeCount: asNumber(obj.dislikeCount) ?? 0,
|
|
141
|
+
rating: formatRating(obj),
|
|
142
|
+
preview: normalizeInline(rendered.lines.join(" ")).slice(0, 80),
|
|
143
|
+
lineStart: start,
|
|
144
|
+
lineEnd: lineOffset + lines.length - 1,
|
|
145
|
+
imageCount: rendered.images.length,
|
|
146
|
+
linkCount: rendered.links.length,
|
|
147
|
+
images: rendered.images,
|
|
148
|
+
links: rendered.links,
|
|
149
|
+
lines: postLines
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return { lines, posts: entries, imageCount, linkCount };
|
|
153
|
+
}
|
|
154
|
+
function classifyLine(line) {
|
|
155
|
+
const plain = stripAnsi(line);
|
|
156
|
+
if (plain.startsWith("[image ")) {
|
|
157
|
+
return "image";
|
|
158
|
+
}
|
|
159
|
+
if (plain.startsWith("[link ") || /\[\d+\]/.test(plain)) {
|
|
160
|
+
return "link";
|
|
161
|
+
}
|
|
162
|
+
if (plain.startsWith("│ ")) {
|
|
163
|
+
return "quote";
|
|
164
|
+
}
|
|
165
|
+
if (plain.trim() === "") {
|
|
166
|
+
return "blank";
|
|
167
|
+
}
|
|
168
|
+
return "text";
|
|
169
|
+
}
|
|
170
|
+
function formatRating(post) {
|
|
171
|
+
const ratings = asArray(post.ratings);
|
|
172
|
+
if (ratings.length > 0) {
|
|
173
|
+
return `${ratings.length} 条评分`;
|
|
174
|
+
}
|
|
175
|
+
const rating = asNumber(post.rating);
|
|
176
|
+
return rating !== undefined && rating !== 0 ? String(rating) : undefined;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=topic-reader.js.map
|
|
@@ -0,0 +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;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,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,CAAC,CAAC;IAEvC,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,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;QAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,EAAE;KACf,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAuB,EAAE,KAAgB;IACxE,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,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,MAAM,UAAU,sBAAsB,CAAC,KAAuB,EAAE,MAAc,EAAE,KAAa;IAC3F,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IACvE,OAAO,IAAI,EAAE,SAAS,IAAI,MAAM,CAAC;AACnC,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;IAMvD,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,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxD,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":"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"}
|
|
1
|
+
{"version":3,"file":"ubb-renderer.js","sourceRoot":"","sources":["../../src/tui/ubb-renderer.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,SAAS;IACpB,aAAa,EAAE,SAAS;IACxB,MAAM;IACN,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK;IACL,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,UAAU;IACvB,YAAY,EAAE,UAAU;IACxB,UAAU,EAAE,UAAU;IACtB,aAAa,EAAE,UAAU;IACzB,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,UAAU;IACvB,KAAK;IACL,IAAI,EAAE,UAAU;CACR,CAAC;AAEX,qBAAqB;AACrB,MAAM,SAAS,GAA2B;IACxC,OAAO;IACP,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,GAAG,EAAE,IAAI,CAAC,GAAG;IACb,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,MAAM,EAAE,IAAI,CAAC,MAAM;IACnB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,OAAO,EAAE,IAAI,CAAC,OAAO;IACrB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,KAAK;IACL,MAAM,EAAE,IAAI,CAAC,SAAS;IACtB,IAAI,EAAE,IAAI,CAAC,aAAa;IACxB,MAAM,EAAE,IAAI,CAAC,OAAO;IACpB,SAAS;IACT,IAAI,EAAE,IAAI,CAAC,YAAY;IACvB,IAAI,EAAE,IAAI,CAAC,WAAW;IACtB,IAAI,EAAE,IAAI,CAAC,UAAU;IACrB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,MAAM,EAAE,IAAI,CAAC,GAAG;IAChB,KAAK,EAAE,IAAI,CAAC,MAAM;CACnB,CAAC;AAQF,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,yBAAyB;IACzB,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,4BAA4B,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,+CAA+C;IAC/C,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,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACzH,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,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IAC5H,CAAC,CAAC,CAAC;IAEH,yDAAyD;IACzD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gDAAgD,EAAE,CAAC,MAAM,EAAE,MAAc,EAAE,MAAc,EAAE,EAAE;QAC/G,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1G,OAAO,KAAK,MAAM,GAAG,KAAK,IAAI,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,4BAA4B;IAC5B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gCAAgC,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,OAAO,KAAK,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAChE,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAC9D,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAChE,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAC9D,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;QAC9D,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,uBAAuB;IACvB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE;QAC1E,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE;QAC1E,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE;QAC1E,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IACH,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,0CAA0C,EAAE,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE;QAC1F,OAAO,GAAG,IAAI,CAAC,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,iCAAiC;IACjC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,2CAA2C,EAAE,CAAC,MAAM,EAAE,KAAa,EAAE,OAAe,EAAE,EAAE;QAC1G,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,qBAAqB;IACrB,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE/B,gBAAgB;IAChB,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,QAAQ;AACR,SAAS,YAAY,CAAC,KAAa;IACjC,WAAW;IACX,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACrC,CAAC;IAED,SAAS;IACT,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;AAED,eAAe;AACf,SAAS,iBAAiB,CAAC,KAAa;IACtC,UAAU;IACV,MAAM,oBAAoB,GAAa,EAAE,CAAC;IAC1C,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,gBAAgB;IAChB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,uDAAuD,EAAE,CAAC,KAAK,EAAE,EAAE;QACzF,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,cAAc,oBAAoB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5C,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,UAAU,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,eAAe;IACf,MAAM,GAAG,MAAM;SACZ,OAAO,CAAC,8EAA8E,EAAE,EAAE,CAAC;SAC3F,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;SAC1C,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAEpC,UAAU;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,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,GAAG,CAAC;SACvB,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,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;YAC9C,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC1C,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACvC,KAAK,GAAG,GAAG,CAAC;gBACZ,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC1F,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;YACD,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,KAAK,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAClC,OAAO,KAAK,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,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,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,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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const appName = "cc98-cli";
|
|
2
|
-
export declare const appVersion = "0.
|
|
2
|
+
export declare const appVersion = "0.3.0";
|
|
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.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const appName = "cc98-cli";
|
|
2
|
-
export const appVersion = "0.
|
|
2
|
+
export const appVersion = "0.3.0";
|
|
3
3
|
export const repositoryOwner = "Lucent-Snow";
|
|
4
4
|
export const repositoryName = "CC98-CLI";
|
|
5
5
|
export const repositoryUrl = `https://github.com/${repositoryOwner}/${repositoryName}`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cc98-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "A native TypeScript CLI and TUI client for CC98.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|
|
11
|
-
"
|
|
11
|
+
"images/tui.jpg",
|
|
12
12
|
"CHANGELOG.md"
|
|
13
13
|
],
|
|
14
14
|
"scripts": {
|
|
File without changes
|