@musnows/scriverse 0.7.2 → 0.7.4
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.en.md +3 -0
- package/README.md +8 -0
- package/dist/ai-connectivity-test.js +109 -0
- package/dist/ai-connectivity-test.js.map +1 -0
- package/dist/ai-conversation-export.js +70 -0
- package/dist/ai-conversation-export.js.map +1 -0
- package/dist/ai-stream-timeout.js +18 -0
- package/dist/ai-stream-timeout.js.map +1 -0
- package/dist/ai.js +926 -354
- package/dist/ai.js.map +1 -1
- package/dist/app.js +498 -80
- package/dist/app.js.map +1 -1
- package/dist/attachment-storage.js +28 -12
- package/dist/attachment-storage.js.map +1 -1
- package/dist/backup-encryption.js +129 -0
- package/dist/backup-encryption.js.map +1 -0
- package/dist/character-extraction.js +133 -0
- package/dist/character-extraction.js.map +1 -0
- package/dist/cli-core.js +7 -6
- package/dist/cli-core.js.map +1 -1
- package/dist/collaboration-presence.js +200 -18
- package/dist/collaboration-presence.js.map +1 -1
- package/dist/database.js +335 -3
- package/dist/database.js.map +1 -1
- package/dist/docx-export.js +1 -1
- package/dist/docx-export.js.map +1 -1
- package/dist/domain.js +18 -0
- package/dist/domain.js.map +1 -1
- package/dist/epub-export.js +319 -0
- package/dist/epub-export.js.map +1 -0
- package/dist/hybrid-search.js +8 -0
- package/dist/hybrid-search.js.map +1 -1
- package/dist/image-metadata.js +17 -2
- package/dist/image-metadata.js.map +1 -1
- package/dist/presence-store.js +160 -0
- package/dist/presence-store.js.map +1 -0
- package/dist/public/ai-connectivity-test.d.ts +7 -0
- package/dist/public/ai-connectivity-test.js +82 -0
- package/dist/public/ai-context-meter.js +27 -0
- package/dist/public/ai-mentions.js +14 -0
- package/dist/public/ai-request-manager.js +99 -0
- package/dist/public/ai-stream-protocol.js +51 -0
- package/dist/public/app.js +3587 -559
- package/dist/public/background-task-center.js +1 -1
- package/dist/public/chapter-editor-virtualization.js +52 -0
- package/dist/public/chapter-version-diff.d.ts +20 -0
- package/dist/public/chapter-version-diff.js +116 -0
- package/dist/public/foreshadow-reminder.d.ts +32 -0
- package/dist/public/foreshadow-reminder.js +73 -0
- package/dist/public/global-replace-refresh.js +60 -0
- package/dist/public/index.html +161 -31
- package/dist/public/outline-board.d.ts +61 -0
- package/dist/public/outline-board.js +137 -0
- package/dist/public/page-route.d.ts +1 -0
- package/dist/public/page-route.js +8 -0
- package/dist/public/presence-client-id.d.ts +10 -0
- package/dist/public/presence-client-id.js +31 -0
- package/dist/public/reading-preview.d.ts +32 -0
- package/dist/public/reading-preview.js +136 -0
- package/dist/public/s3-backup-ui.d.ts +10 -0
- package/dist/public/s3-backup-ui.js +29 -0
- package/dist/public/setting-filters.d.ts +16 -0
- package/dist/public/setting-filters.js +19 -0
- package/dist/public/styles.css +522 -11
- package/dist/public/upload-progress.d.ts +2 -0
- package/dist/public/upload-progress.js +10 -0
- package/dist/s3-backup.js +197 -12
- package/dist/s3-backup.js.map +1 -1
- package/dist/security.js +86 -21
- package/dist/security.js.map +1 -1
- package/dist/server-runtime.js +38 -18
- package/dist/server-runtime.js.map +1 -1
- package/dist/store.js +899 -104
- package/dist/store.js.map +1 -1
- package/dist/upload-limits.js +35 -0
- package/dist/upload-limits.js.map +1 -0
- package/dist/user-auth.js +56 -10
- package/dist/user-auth.js.map +1 -1
- package/dist/utils.js +3 -0
- package/dist/utils.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import JSZip from "jszip";
|
|
3
|
+
import sharp from "sharp";
|
|
4
|
+
export const EPUB_MIME_TYPE = "application/epub+zip";
|
|
5
|
+
const bidiControlCharacters = /[\u202a-\u202e\u2066-\u2069]/gu;
|
|
6
|
+
const unsafeFileNameCharacters = /[\u0000-\u001f\u007f-\u009f<>:"/\\|?*]/gu;
|
|
7
|
+
function xml(value) {
|
|
8
|
+
return value
|
|
9
|
+
.replaceAll("&", "&")
|
|
10
|
+
.replaceAll("<", "<")
|
|
11
|
+
.replaceAll(">", ">")
|
|
12
|
+
.replaceAll('"', """)
|
|
13
|
+
.replaceAll("'", "'");
|
|
14
|
+
}
|
|
15
|
+
function normalizeLanguage(value) {
|
|
16
|
+
const language = String(value ?? "").trim();
|
|
17
|
+
return /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/u.test(language) ? language : "zh-CN";
|
|
18
|
+
}
|
|
19
|
+
function normalizeModifiedAt(value) {
|
|
20
|
+
const parsed = value ? new Date(value) : new Date();
|
|
21
|
+
const date = Number.isNaN(parsed.getTime()) ? new Date() : parsed;
|
|
22
|
+
return { date, value: date.toISOString().replace(/\.\d{3}Z$/u, "Z") };
|
|
23
|
+
}
|
|
24
|
+
function xhtmlPage(input) {
|
|
25
|
+
const bodyType = input.bodyType ? ` epub:type="${xml(input.bodyType)}"` : "";
|
|
26
|
+
const stylePath = input.stylePath ?? "../styles/book.css";
|
|
27
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
28
|
+
<!DOCTYPE html>
|
|
29
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" lang="${xml(input.language)}" xml:lang="${xml(input.language)}">
|
|
30
|
+
<head>
|
|
31
|
+
<meta charset="UTF-8" />
|
|
32
|
+
<title>${xml(input.title)}</title>
|
|
33
|
+
<link rel="stylesheet" type="text/css" href="${xml(stylePath)}" />
|
|
34
|
+
</head>
|
|
35
|
+
<body${bodyType}>
|
|
36
|
+
${input.body}
|
|
37
|
+
</body>
|
|
38
|
+
</html>
|
|
39
|
+
`;
|
|
40
|
+
}
|
|
41
|
+
function renderChapterBody(content) {
|
|
42
|
+
const lines = String(content ?? "").replace(/\r\n?/gu, "\n").split("\n");
|
|
43
|
+
const blocks = [];
|
|
44
|
+
let paragraph = [];
|
|
45
|
+
let code = null;
|
|
46
|
+
const flushParagraph = () => {
|
|
47
|
+
if (!paragraph.length)
|
|
48
|
+
return;
|
|
49
|
+
blocks.push(` <p>${paragraph.map(xml).join("<br />\n")}</p>`);
|
|
50
|
+
paragraph = [];
|
|
51
|
+
};
|
|
52
|
+
const flushCode = () => {
|
|
53
|
+
if (code === null)
|
|
54
|
+
return;
|
|
55
|
+
blocks.push(` <pre class="code-block"><code>${xml(code.join("\n"))}</code></pre>`);
|
|
56
|
+
code = null;
|
|
57
|
+
};
|
|
58
|
+
for (const line of lines) {
|
|
59
|
+
if (/^\s*`{3,}[^`]*$/u.test(line)) {
|
|
60
|
+
if (code === null) {
|
|
61
|
+
flushParagraph();
|
|
62
|
+
code = [];
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
flushCode();
|
|
66
|
+
}
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (code !== null) {
|
|
70
|
+
code.push(line);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (!line.trim()) {
|
|
74
|
+
flushParagraph();
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
paragraph.push(line);
|
|
78
|
+
}
|
|
79
|
+
flushParagraph();
|
|
80
|
+
flushCode();
|
|
81
|
+
return blocks.join("\n");
|
|
82
|
+
}
|
|
83
|
+
async function prepareCover(cover) {
|
|
84
|
+
if (cover.mimeType === "image/jpeg") {
|
|
85
|
+
return { content: cover.content, extension: "jpg", mediaType: "image/jpeg" };
|
|
86
|
+
}
|
|
87
|
+
if (cover.mimeType === "image/png") {
|
|
88
|
+
return { content: cover.content, extension: "png", mediaType: "image/png" };
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
content: await sharp(cover.content, { limitInputPixels: 16_777_216 }).png().toBuffer(),
|
|
92
|
+
extension: "png",
|
|
93
|
+
mediaType: "image/png"
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function packageDocument(input) {
|
|
97
|
+
const creator = input.author ? `\n <dc:creator>${xml(input.author)}</dc:creator>` : "";
|
|
98
|
+
const description = input.description ? `\n <dc:description>${xml(input.description)}</dc:description>` : "";
|
|
99
|
+
const coverMetadata = input.cover ? '\n <meta name="cover" content="cover-image" />' : "";
|
|
100
|
+
const coverManifest = input.cover
|
|
101
|
+
? `\n <item id="cover-image" href="images/cover.${input.cover.extension}" media-type="${input.cover.mediaType}" properties="cover-image" />\n <item id="cover-page" href="text/cover.xhtml" media-type="application/xhtml+xml" />`
|
|
102
|
+
: "";
|
|
103
|
+
const documentManifest = input.documents
|
|
104
|
+
.map((document) => ` <item id="${document.id}" href="${document.href}" media-type="application/xhtml+xml" />`)
|
|
105
|
+
.join("\n");
|
|
106
|
+
const coverSpine = input.cover ? '\n <itemref idref="cover-page" linear="no" />' : "";
|
|
107
|
+
const documentSpine = input.documents.map((document) => ` <itemref idref="${document.id}" />`).join("\n");
|
|
108
|
+
const guide = input.cover ? '\n <guide>\n <reference type="cover" title="封面" href="text/cover.xhtml" />\n </guide>' : "";
|
|
109
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
110
|
+
<package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" version="3.0" unique-identifier="pub-id" xml:lang="${xml(input.language)}" prefix="dcterms: http://purl.org/dc/terms/">
|
|
111
|
+
<metadata>
|
|
112
|
+
<dc:identifier id="pub-id">${xml(input.identifier)}</dc:identifier>
|
|
113
|
+
<dc:title>${xml(input.title)}</dc:title>
|
|
114
|
+
<dc:language>${xml(input.language)}</dc:language>${creator}${description}
|
|
115
|
+
<meta property="dcterms:modified">${xml(input.modifiedAt)}</meta>${coverMetadata}
|
|
116
|
+
</metadata>
|
|
117
|
+
<manifest>
|
|
118
|
+
<item id="nav" href="nav.xhtml" media-type="application/xhtml+xml" properties="nav" />
|
|
119
|
+
<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" />
|
|
120
|
+
<item id="style" href="styles/book.css" media-type="text/css" />${coverManifest}
|
|
121
|
+
${documentManifest}
|
|
122
|
+
</manifest>
|
|
123
|
+
<spine toc="ncx">${coverSpine}
|
|
124
|
+
${documentSpine}
|
|
125
|
+
</spine>${guide}
|
|
126
|
+
</package>
|
|
127
|
+
`;
|
|
128
|
+
}
|
|
129
|
+
function navigationDocument(input) {
|
|
130
|
+
const volumeContents = input.volumes.map(({ document, chapters }) => {
|
|
131
|
+
const children = chapters.length
|
|
132
|
+
? `\n <ol>\n${chapters.map((chapter) => ` <li><a href="${chapter.href}">${xml(chapter.title)}</a></li>`).join("\n")}\n </ol>`
|
|
133
|
+
: "";
|
|
134
|
+
return ` <li><a href="${document.href}">${xml(document.title)}</a>${children}</li>`;
|
|
135
|
+
}).join("\n");
|
|
136
|
+
const contents = volumeContents || ' <li><a href="text/title.xhtml">书名页</a></li>';
|
|
137
|
+
const coverLandmark = input.hasCover ? '\n <li><a epub:type="cover" href="text/cover.xhtml">封面</a></li>' : "";
|
|
138
|
+
const body = ` <nav epub:type="toc" id="toc" aria-labelledby="toc-title">
|
|
139
|
+
<h1 id="toc-title">目录</h1>
|
|
140
|
+
<ol>
|
|
141
|
+
${contents}
|
|
142
|
+
</ol>
|
|
143
|
+
</nav>
|
|
144
|
+
<nav epub:type="landmarks" aria-label="阅读导航">
|
|
145
|
+
<ol>${coverLandmark}
|
|
146
|
+
<li><a epub:type="titlepage" href="text/title.xhtml">书名页</a></li>
|
|
147
|
+
<li><a epub:type="bodymatter" href="${input.volumes[0]?.document.href ?? "text/title.xhtml"}">正文</a></li>
|
|
148
|
+
</ol>
|
|
149
|
+
</nav>`;
|
|
150
|
+
return xhtmlPage({ language: input.language, title: `${input.title}目录`, body, stylePath: "styles/book.css" });
|
|
151
|
+
}
|
|
152
|
+
function ncxDocument(input) {
|
|
153
|
+
let playOrder = 0;
|
|
154
|
+
const volumeNavigation = input.volumes.map(({ document, chapters }) => {
|
|
155
|
+
playOrder += 1;
|
|
156
|
+
const volumeOrder = playOrder;
|
|
157
|
+
const children = chapters.map((chapter) => {
|
|
158
|
+
playOrder += 1;
|
|
159
|
+
return ` <navPoint id="${chapter.id}" playOrder="${playOrder}">
|
|
160
|
+
<navLabel><text>${xml(chapter.title)}</text></navLabel>
|
|
161
|
+
<content src="${chapter.href}" />
|
|
162
|
+
</navPoint>`;
|
|
163
|
+
}).join("\n");
|
|
164
|
+
return ` <navPoint id="${document.id}" playOrder="${volumeOrder}">
|
|
165
|
+
<navLabel><text>${xml(document.title)}</text></navLabel>
|
|
166
|
+
<content src="${document.href}" />${children ? `\n${children}` : ""}
|
|
167
|
+
</navPoint>`;
|
|
168
|
+
}).join("\n");
|
|
169
|
+
const navigation = volumeNavigation || ` <navPoint id="title-page" playOrder="1">
|
|
170
|
+
<navLabel><text>${xml(input.title)}</text></navLabel>
|
|
171
|
+
<content src="text/title.xhtml" />
|
|
172
|
+
</navPoint>`;
|
|
173
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
174
|
+
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
|
|
175
|
+
<head>
|
|
176
|
+
<meta name="dtb:uid" content="${xml(input.identifier)}" />
|
|
177
|
+
<meta name="dtb:depth" content="2" />
|
|
178
|
+
<meta name="dtb:totalPageCount" content="0" />
|
|
179
|
+
<meta name="dtb:maxPageNumber" content="0" />
|
|
180
|
+
</head>
|
|
181
|
+
<docTitle><text>${xml(input.title)}</text></docTitle>
|
|
182
|
+
<navMap>
|
|
183
|
+
${navigation}
|
|
184
|
+
</navMap>
|
|
185
|
+
</ncx>
|
|
186
|
+
`;
|
|
187
|
+
}
|
|
188
|
+
const bookStyles = `@charset "UTF-8";
|
|
189
|
+
@namespace epub "http://www.idpf.org/2007/ops";
|
|
190
|
+
html { writing-mode: horizontal-tb; }
|
|
191
|
+
body { margin: 5%; color: #1f1f1f; font-family: serif; line-height: 1.8; }
|
|
192
|
+
h1 { margin: 1.5em 0 1em; font-size: 1.65em; line-height: 1.35; }
|
|
193
|
+
p { margin: 0 0 1em; text-align: justify; }
|
|
194
|
+
.title-page, .cover-page { min-height: 80vh; text-align: center; }
|
|
195
|
+
.title-page { display: flex; flex-direction: column; justify-content: center; }
|
|
196
|
+
.title-page p { text-align: center; }
|
|
197
|
+
.book-description { margin: 2em auto 0; max-width: 32em; color: #555; }
|
|
198
|
+
.cover-page img { display: block; max-width: 100%; max-height: 90vh; margin: 0 auto; object-fit: contain; }
|
|
199
|
+
.volume-label { color: #666; font-size: .85em; }
|
|
200
|
+
.code-block { margin: 1em 0; padding: .8em; overflow-wrap: anywhere; white-space: pre-wrap; font-family: monospace; font-size: .9em; line-height: 1.55; }
|
|
201
|
+
nav ol { padding-left: 1.5em; }
|
|
202
|
+
nav li { margin: .45em 0; }
|
|
203
|
+
nav[epub|type~="landmarks"] { margin-top: 2em; }
|
|
204
|
+
`;
|
|
205
|
+
export function epubDownloadFileName(title) {
|
|
206
|
+
const normalized = String(title ?? "")
|
|
207
|
+
.normalize("NFKC")
|
|
208
|
+
.replace(bidiControlCharacters, "")
|
|
209
|
+
.replace(unsafeFileNameCharacters, " ")
|
|
210
|
+
.replace(/\.{2,}/gu, " ")
|
|
211
|
+
.replace(/\s+/gu, " ")
|
|
212
|
+
.trim()
|
|
213
|
+
.replace(/[. ]+$/gu, "");
|
|
214
|
+
const stem = Array.from(normalized).slice(0, 120).join("") || "novel";
|
|
215
|
+
return `${stem}.epub`;
|
|
216
|
+
}
|
|
217
|
+
function asciiFallbackFileName(value) {
|
|
218
|
+
const stem = String(value ?? "")
|
|
219
|
+
.replace(/[^A-Za-z0-9._-]+/gu, "-")
|
|
220
|
+
.replace(/\.{2,}/gu, "-")
|
|
221
|
+
.replace(/-+/gu, "-")
|
|
222
|
+
.replace(/^[.-]+|[.-]+$/gu, "")
|
|
223
|
+
.slice(0, 80) || "novel";
|
|
224
|
+
return `${stem}.epub`;
|
|
225
|
+
}
|
|
226
|
+
function encodeRfc5987(value) {
|
|
227
|
+
return encodeURIComponent(value).replace(/['()*]/gu, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
228
|
+
}
|
|
229
|
+
export function epubContentDisposition(title, fallbackStem) {
|
|
230
|
+
return `attachment; filename="${asciiFallbackFileName(fallbackStem)}"; filename*=UTF-8''${encodeRfc5987(epubDownloadFileName(title))}`;
|
|
231
|
+
}
|
|
232
|
+
export async function createEpubArchive(input) {
|
|
233
|
+
const title = String(input.title || "未命名作品");
|
|
234
|
+
const author = String(input.author ?? "").trim();
|
|
235
|
+
const description = String(input.description ?? "").trim();
|
|
236
|
+
const language = normalizeLanguage(input.language);
|
|
237
|
+
const identifier = String(input.identifier ?? `urn:uuid:${randomUUID()}`);
|
|
238
|
+
const modified = normalizeModifiedAt(input.modifiedAt);
|
|
239
|
+
const cover = input.cover ? await prepareCover(input.cover) : null;
|
|
240
|
+
const archive = new JSZip();
|
|
241
|
+
const fileOptions = { date: modified.date };
|
|
242
|
+
archive.file("mimetype", EPUB_MIME_TYPE, { ...fileOptions, compression: "STORE" });
|
|
243
|
+
archive.file("META-INF/container.xml", `<?xml version="1.0" encoding="UTF-8"?>
|
|
244
|
+
<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
|
|
245
|
+
<rootfiles>
|
|
246
|
+
<rootfile full-path="OEBPS/package.opf" media-type="application/oebps-package+xml" />
|
|
247
|
+
</rootfiles>
|
|
248
|
+
</container>
|
|
249
|
+
`, fileOptions);
|
|
250
|
+
archive.file("OEBPS/styles/book.css", bookStyles, fileOptions);
|
|
251
|
+
if (cover) {
|
|
252
|
+
archive.file(`OEBPS/images/cover.${cover.extension}`, cover.content, fileOptions);
|
|
253
|
+
archive.file("OEBPS/text/cover.xhtml", xhtmlPage({
|
|
254
|
+
language,
|
|
255
|
+
title: `${title}封面`,
|
|
256
|
+
body: ` <div class="cover-page"><img src="../images/cover.${cover.extension}" alt="${xml(title)}封面" /></div>`,
|
|
257
|
+
bodyType: "cover"
|
|
258
|
+
}), fileOptions);
|
|
259
|
+
}
|
|
260
|
+
const titleBody = ` <section class="title-page" epub:type="titlepage">
|
|
261
|
+
<h1>${xml(title)}</h1>${author ? `\n <p class="book-author">${xml(author)}</p>` : ""}${description ? `\n <p class="book-description">${xml(description)}</p>` : ""}
|
|
262
|
+
</section>`;
|
|
263
|
+
const titleDocument = {
|
|
264
|
+
id: "title-page",
|
|
265
|
+
href: "text/title.xhtml",
|
|
266
|
+
title,
|
|
267
|
+
content: xhtmlPage({ language, title, body: titleBody, bodyType: "frontmatter" })
|
|
268
|
+
};
|
|
269
|
+
archive.file(`OEBPS/${titleDocument.href}`, titleDocument.content, fileOptions);
|
|
270
|
+
const volumeDocuments = input.volumes.map((volume, volumeIndex) => {
|
|
271
|
+
const volumeNumber = String(volumeIndex + 1).padStart(3, "0");
|
|
272
|
+
const volumeTitle = String(volume.title ?? "");
|
|
273
|
+
const volumeDocument = {
|
|
274
|
+
id: `volume-${volumeNumber}`,
|
|
275
|
+
href: `text/volume-${volumeNumber}.xhtml`,
|
|
276
|
+
title: volumeTitle,
|
|
277
|
+
content: xhtmlPage({
|
|
278
|
+
language,
|
|
279
|
+
title: volumeTitle,
|
|
280
|
+
body: ` <section class="volume-page" epub:type="part"><h1>${xml(volumeTitle)}</h1></section>`,
|
|
281
|
+
bodyType: "bodymatter"
|
|
282
|
+
})
|
|
283
|
+
};
|
|
284
|
+
archive.file(`OEBPS/${volumeDocument.href}`, volumeDocument.content, fileOptions);
|
|
285
|
+
const chapters = volume.chapters.map((chapter, chapterIndex) => {
|
|
286
|
+
const chapterNumber = String(chapterIndex + 1).padStart(3, "0");
|
|
287
|
+
const chapterTitle = String(chapter.title ?? "");
|
|
288
|
+
const chapterDocument = {
|
|
289
|
+
id: `chapter-${volumeNumber}-${chapterNumber}`,
|
|
290
|
+
href: `text/chapter-${volumeNumber}-${chapterNumber}.xhtml`,
|
|
291
|
+
title: chapterTitle,
|
|
292
|
+
content: xhtmlPage({
|
|
293
|
+
language,
|
|
294
|
+
title: chapterTitle,
|
|
295
|
+
body: ` <article epub:type="chapter">\n <p class="volume-label">${xml(volumeTitle)}</p>\n <h1>${xml(chapterTitle)}</h1>\n${renderChapterBody(chapter.content)}\n </article>`,
|
|
296
|
+
bodyType: "bodymatter"
|
|
297
|
+
})
|
|
298
|
+
};
|
|
299
|
+
archive.file(`OEBPS/${chapterDocument.href}`, chapterDocument.content, fileOptions);
|
|
300
|
+
return chapterDocument;
|
|
301
|
+
});
|
|
302
|
+
return { document: volumeDocument, chapters };
|
|
303
|
+
});
|
|
304
|
+
const documents = [titleDocument, ...volumeDocuments.flatMap((volume) => [volume.document, ...volume.chapters])];
|
|
305
|
+
archive.file("OEBPS/nav.xhtml", navigationDocument({ title, language, volumes: volumeDocuments, hasCover: Boolean(cover) }), fileOptions);
|
|
306
|
+
archive.file("OEBPS/toc.ncx", ncxDocument({ title, identifier, volumes: volumeDocuments }), fileOptions);
|
|
307
|
+
archive.file("OEBPS/package.opf", packageDocument({
|
|
308
|
+
title,
|
|
309
|
+
author,
|
|
310
|
+
description,
|
|
311
|
+
language,
|
|
312
|
+
identifier,
|
|
313
|
+
modifiedAt: modified.value,
|
|
314
|
+
documents,
|
|
315
|
+
cover
|
|
316
|
+
}), fileOptions);
|
|
317
|
+
return archive;
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=epub-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epub-export.js","sourceRoot":"","sources":["../src/epub-export.ts"],"names":[],"mappings":"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"}
|
package/dist/hybrid-search.js
CHANGED
|
@@ -12,6 +12,14 @@ export const HYBRID_SEARCH_TYPES = [
|
|
|
12
12
|
"review",
|
|
13
13
|
"agent-history"
|
|
14
14
|
];
|
|
15
|
+
export const MAXIMUM_WORK_SEARCH_QUERY_LENGTH = 100;
|
|
16
|
+
export function normalizeWorkSearchQuery(value) {
|
|
17
|
+
return value
|
|
18
|
+
.normalize("NFKC")
|
|
19
|
+
.toLocaleLowerCase("zh-CN")
|
|
20
|
+
.trim()
|
|
21
|
+
.slice(0, MAXIMUM_WORK_SEARCH_QUERY_LENGTH);
|
|
22
|
+
}
|
|
15
23
|
const matchKindOrder = ["metadata", "exact", "phonetic"];
|
|
16
24
|
const reciprocalRankConstant = 60;
|
|
17
25
|
export function fuseHybridSearchChannels(channels, limit = 50) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid-search.js","sourceRoot":"","sources":["../src/hybrid-search.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS;IACT,SAAS;IACT,WAAW;IACX,MAAM;IACN,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,iBAAiB;IACjB,YAAY;IACZ,QAAQ;IACR,eAAe;CACP,CAAC;
|
|
1
|
+
{"version":3,"file":"hybrid-search.js","sourceRoot":"","sources":["../src/hybrid-search.ts"],"names":[],"mappings":"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"}
|
package/dist/image-metadata.js
CHANGED
|
@@ -119,10 +119,25 @@ function readWebp(bytes) {
|
|
|
119
119
|
assertDimensions(width, height);
|
|
120
120
|
return { mimeType: "image/webp", width, height };
|
|
121
121
|
}
|
|
122
|
+
function readGif(bytes) {
|
|
123
|
+
if (bytes.length < 6)
|
|
124
|
+
return null;
|
|
125
|
+
const signature = bytes.subarray(0, 6).toString("ascii");
|
|
126
|
+
if (signature !== "GIF87a" && signature !== "GIF89a")
|
|
127
|
+
return null;
|
|
128
|
+
if (bytes.length < 14)
|
|
129
|
+
throw new InvalidRasterImageError("GIF 文件结构不完整");
|
|
130
|
+
if (bytes[bytes.length - 1] !== 0x3b)
|
|
131
|
+
throw new InvalidRasterImageError("GIF 文件缺少结束标记");
|
|
132
|
+
const width = bytes.readUInt16LE(6);
|
|
133
|
+
const height = bytes.readUInt16LE(8);
|
|
134
|
+
assertDimensions(width, height);
|
|
135
|
+
return { mimeType: "image/gif", width, height };
|
|
136
|
+
}
|
|
122
137
|
export function readRasterImageMetadata(bytes) {
|
|
123
|
-
const metadata = readPng(bytes) ?? readJpeg(bytes) ?? readWebp(bytes);
|
|
138
|
+
const metadata = readPng(bytes) ?? readJpeg(bytes) ?? readWebp(bytes) ?? readGif(bytes);
|
|
124
139
|
if (!metadata)
|
|
125
|
-
throw new InvalidRasterImageError("仅支持 PNG、JPEG 或
|
|
140
|
+
throw new InvalidRasterImageError("仅支持 PNG、JPEG、WebP 或 GIF 图片");
|
|
126
141
|
return metadata;
|
|
127
142
|
}
|
|
128
143
|
//# sourceMappingURL=image-metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-metadata.js","sourceRoot":"","sources":["../src/image-metadata.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"image-metadata.js","sourceRoot":"","sources":["../src/image-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
function requiredString(value) {
|
|
2
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
3
|
+
}
|
|
4
|
+
function optionalString(value) {
|
|
5
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
6
|
+
}
|
|
7
|
+
function parsePage(row) {
|
|
8
|
+
const kind = requiredString(row.page_kind);
|
|
9
|
+
if (kind === "welcome" || kind === "settings")
|
|
10
|
+
return { kind };
|
|
11
|
+
if (kind === "editor") {
|
|
12
|
+
const resourceId = requiredString(row.page_resource_id);
|
|
13
|
+
return resourceId ? { kind, resourceId } : null;
|
|
14
|
+
}
|
|
15
|
+
if (kind === "module") {
|
|
16
|
+
const module = requiredString(row.page_module);
|
|
17
|
+
return module ? { kind, module } : null;
|
|
18
|
+
}
|
|
19
|
+
if (kind === "entity-editor") {
|
|
20
|
+
const module = requiredString(row.page_module);
|
|
21
|
+
const resourceId = optionalString(row.page_resource_id);
|
|
22
|
+
return module ? { kind, module, ...(resourceId ? { resourceId } : {}) } : null;
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
function uniqueRecipients(recipients) {
|
|
27
|
+
return recipients.filter((recipient, index, values) => values.findIndex((candidate) => (candidate.userId === recipient.userId && candidate.clientId === recipient.clientId)) === index);
|
|
28
|
+
}
|
|
29
|
+
function parseRecipients(value) {
|
|
30
|
+
if (typeof value !== "string")
|
|
31
|
+
return [];
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(value);
|
|
34
|
+
if (!Array.isArray(parsed))
|
|
35
|
+
return [];
|
|
36
|
+
const recipients = [];
|
|
37
|
+
for (const item of parsed) {
|
|
38
|
+
if (!item || typeof item !== "object" || Array.isArray(item))
|
|
39
|
+
continue;
|
|
40
|
+
const candidate = item;
|
|
41
|
+
const userId = requiredString(candidate.userId);
|
|
42
|
+
const clientId = requiredString(candidate.clientId);
|
|
43
|
+
if (userId && clientId)
|
|
44
|
+
recipients.push({ userId, clientId });
|
|
45
|
+
}
|
|
46
|
+
return uniqueRecipients(recipients);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export class PresenceStore {
|
|
53
|
+
database;
|
|
54
|
+
constructor(database) {
|
|
55
|
+
this.database = database;
|
|
56
|
+
}
|
|
57
|
+
loadEntries(activeSince) {
|
|
58
|
+
const entries = [];
|
|
59
|
+
for (const row of this.database.all(`SELECT work_id, client_id, user_id, username, display_name, avatar_url,
|
|
60
|
+
page_kind, page_module, page_resource_id, last_seen_at
|
|
61
|
+
FROM presence_entries
|
|
62
|
+
WHERE last_seen_at >= ?
|
|
63
|
+
ORDER BY last_seen_at ASC, work_id ASC, client_id ASC`, activeSince)) {
|
|
64
|
+
const workId = requiredString(row.work_id);
|
|
65
|
+
const clientId = requiredString(row.client_id);
|
|
66
|
+
const userId = requiredString(row.user_id);
|
|
67
|
+
const username = requiredString(row.username);
|
|
68
|
+
const displayName = requiredString(row.display_name);
|
|
69
|
+
const lastSeenAt = requiredString(row.last_seen_at);
|
|
70
|
+
const page = parsePage(row);
|
|
71
|
+
if (!workId || !clientId || !userId || !username || !displayName || !lastSeenAt || !page)
|
|
72
|
+
continue;
|
|
73
|
+
entries.push({
|
|
74
|
+
workId,
|
|
75
|
+
clientId,
|
|
76
|
+
userId,
|
|
77
|
+
username,
|
|
78
|
+
displayName,
|
|
79
|
+
avatarUrl: typeof row.avatar_url === "string" ? row.avatar_url : null,
|
|
80
|
+
page,
|
|
81
|
+
lastSeenAt
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return entries;
|
|
85
|
+
}
|
|
86
|
+
loadChanges(activeSince, limit) {
|
|
87
|
+
const resolvedLimit = Math.max(0, Math.trunc(limit));
|
|
88
|
+
if (resolvedLimit === 0)
|
|
89
|
+
return [];
|
|
90
|
+
const changes = [];
|
|
91
|
+
for (const row of this.database.all(`SELECT id, work_id, page_key, label, action, page_deleted, actor_user_id, actor_display_name,
|
|
92
|
+
saved_at, recipient_client_ids_json
|
|
93
|
+
FROM presence_changes
|
|
94
|
+
WHERE saved_at >= ?
|
|
95
|
+
ORDER BY saved_at DESC, id DESC
|
|
96
|
+
LIMIT ?`, activeSince, resolvedLimit)) {
|
|
97
|
+
const id = requiredString(row.id);
|
|
98
|
+
const workId = requiredString(row.work_id);
|
|
99
|
+
const pageKey = requiredString(row.page_key);
|
|
100
|
+
const label = requiredString(row.label);
|
|
101
|
+
const action = row.action === "delete" ? "delete" : "save";
|
|
102
|
+
const pageDeleted = Number(row.page_deleted) === 1;
|
|
103
|
+
const actorUserId = requiredString(row.actor_user_id);
|
|
104
|
+
const actorDisplayName = requiredString(row.actor_display_name);
|
|
105
|
+
const savedAt = requiredString(row.saved_at);
|
|
106
|
+
if (!id || !workId || !pageKey || !label || !actorUserId || !actorDisplayName || !savedAt)
|
|
107
|
+
continue;
|
|
108
|
+
changes.push({
|
|
109
|
+
id,
|
|
110
|
+
workId,
|
|
111
|
+
pageKey,
|
|
112
|
+
label,
|
|
113
|
+
action,
|
|
114
|
+
pageDeleted,
|
|
115
|
+
actorUserId,
|
|
116
|
+
actorDisplayName,
|
|
117
|
+
savedAt,
|
|
118
|
+
recipients: parseRecipients(row.recipient_client_ids_json)
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return changes.reverse();
|
|
122
|
+
}
|
|
123
|
+
flush(batch) {
|
|
124
|
+
const hasCleanup = batch.entryExpiryCutoff !== undefined || batch.changeExpiryCutoff !== undefined;
|
|
125
|
+
if (batch.entries.length === 0 && batch.changes.length === 0 && !hasCleanup)
|
|
126
|
+
return;
|
|
127
|
+
this.database.transaction(() => {
|
|
128
|
+
for (const entry of batch.entries) {
|
|
129
|
+
this.database.run(`INSERT INTO presence_entries (
|
|
130
|
+
work_id, client_id, user_id, username, display_name, avatar_url,
|
|
131
|
+
page_kind, page_module, page_resource_id, last_seen_at
|
|
132
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
133
|
+
ON CONFLICT(work_id, client_id) DO UPDATE SET
|
|
134
|
+
user_id = excluded.user_id,
|
|
135
|
+
username = excluded.username,
|
|
136
|
+
display_name = excluded.display_name,
|
|
137
|
+
avatar_url = excluded.avatar_url,
|
|
138
|
+
page_kind = excluded.page_kind,
|
|
139
|
+
page_module = excluded.page_module,
|
|
140
|
+
page_resource_id = excluded.page_resource_id,
|
|
141
|
+
last_seen_at = excluded.last_seen_at
|
|
142
|
+
WHERE excluded.last_seen_at >= presence_entries.last_seen_at`, entry.workId, entry.clientId, entry.userId, entry.username, entry.displayName, entry.avatarUrl, entry.page.kind, entry.page.module ?? null, entry.page.resourceId ?? null, entry.lastSeenAt);
|
|
143
|
+
}
|
|
144
|
+
for (const change of batch.changes) {
|
|
145
|
+
this.database.run(`INSERT INTO presence_changes (
|
|
146
|
+
id, work_id, page_key, label, action, page_deleted, actor_user_id, actor_display_name,
|
|
147
|
+
saved_at, recipient_client_ids_json
|
|
148
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
149
|
+
ON CONFLICT(id) DO NOTHING`, change.id, change.workId, change.pageKey, change.label, change.action, change.pageDeleted ? 1 : 0, change.actorUserId, change.actorDisplayName, change.savedAt, JSON.stringify(uniqueRecipients(change.recipients)));
|
|
150
|
+
}
|
|
151
|
+
if (batch.entryExpiryCutoff !== undefined) {
|
|
152
|
+
this.database.run("DELETE FROM presence_entries WHERE last_seen_at < ?", batch.entryExpiryCutoff);
|
|
153
|
+
}
|
|
154
|
+
if (batch.changeExpiryCutoff !== undefined) {
|
|
155
|
+
this.database.run("DELETE FROM presence_changes WHERE saved_at < ?", batch.changeExpiryCutoff);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=presence-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presence-store.js","sourceRoot":"","sources":["../src/presence-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type ConnectivityToastType = "info" | "warning" | "error";
|
|
2
|
+
export type ConnectivityToast = { message: string; type: ConnectivityToastType };
|
|
3
|
+
export type ConnectivityObjectType = "provider" | "model";
|
|
4
|
+
|
|
5
|
+
export function connectivityTestResultToast(result: unknown, objectType: ConnectivityObjectType): ConnectivityToast;
|
|
6
|
+
export function connectivityTestErrorToast(error: unknown, objectType: ConnectivityObjectType): ConnectivityToast;
|
|
7
|
+
export function connectivityConfigurationSavedToast(objectType: ConnectivityObjectType): string;
|