@deot/docs-dever 1.0.5 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +17 -2
- package/dist/index.js +17 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ development 和 preview 会保持服务运行;build 在 Vite 构建结束后
|
|
|
51
51
|
- 在 development 模式注入 `window.__DOCS_RUNTIME__`;
|
|
52
52
|
- 为 workspace 资源提供安全的原始文本响应;`.page.json` 按页面文档(`page`)处理,其余 `.json` 按 sidebar 处理;
|
|
53
53
|
- 在 development 模式开放 `/__docs/events`,以及 `PUT /__docs/page`(只写工作区内、带语言前缀的 `.page.json`);
|
|
54
|
-
- 为客户端路由提供 HTML history fallback
|
|
54
|
+
- 为客户端路由提供 HTML history fallback;静态托管若只能配置自定义 404 页,请改用 Client 的 [`@deot/docs:redirect`](../client/README.md) 约定。
|
|
55
55
|
- 在 build 模式复制 Markdown、JSON(含 `.page.json`)、SFC 等静态内容资源;
|
|
56
56
|
- 当当前仓库源码存在时,将 locale、renderer、markdown、playground、theme 包映射到本地入口。
|
|
57
57
|
|
package/dist/index.cjs
CHANGED
|
@@ -227,6 +227,12 @@ var decodeWorkspacePath = (requestUrl, urlPrefix) => {
|
|
|
227
227
|
return decoded;
|
|
228
228
|
};
|
|
229
229
|
var isPackageReadme = (relative) => /^[^/]+\/README\.md$/u.test(relative);
|
|
230
|
+
/**
|
|
231
|
+
* 传统 workspace 把语言放在第一段目录,例如 `zh-CN/guide.md`。
|
|
232
|
+
* `docs/`、`src/` 这类共享目录不能当成语言,否则 SSE identity 对不上 Client。
|
|
233
|
+
* @param value
|
|
234
|
+
*/
|
|
235
|
+
var isLocaleDirectory = (value) => /^[a-z]{2}(?:-[A-Za-z0-9]{2,8})*$/u.test(value);
|
|
230
236
|
var getContentType = (extension) => {
|
|
231
237
|
switch (extension) {
|
|
232
238
|
case ".md": return "text/markdown; charset=utf-8";
|
|
@@ -386,6 +392,8 @@ var configureEvents = (server, workspace, entry, packages, rootReadme) => {
|
|
|
386
392
|
res.setHeader("Content-Type", "text/event-stream");
|
|
387
393
|
res.setHeader("Cache-Control", "no-cache");
|
|
388
394
|
res.setHeader("Connection", "keep-alive");
|
|
395
|
+
res.setHeader("X-Accel-Buffering", "no");
|
|
396
|
+
res.flushHeaders?.();
|
|
389
397
|
res.write(": connected\n\n");
|
|
390
398
|
clients.add(res);
|
|
391
399
|
req.on("close", () => clients.delete(res));
|
|
@@ -430,11 +438,18 @@ var configureEvents = (server, workspace, entry, packages, rootReadme) => {
|
|
|
430
438
|
}
|
|
431
439
|
const [lang, ...segments] = relative.split("/");
|
|
432
440
|
if (!lang || !segments.length) return;
|
|
433
|
-
const
|
|
441
|
+
const resourceType = getResourceType(relative);
|
|
442
|
+
const payload = JSON.stringify(isLocaleDirectory(lang) ? {
|
|
434
443
|
type,
|
|
435
444
|
lang,
|
|
436
445
|
source: `./${segments.join("/")}`,
|
|
437
|
-
resourceType
|
|
446
|
+
resourceType,
|
|
447
|
+
timestamp: Date.now()
|
|
448
|
+
} : {
|
|
449
|
+
type,
|
|
450
|
+
lang: "",
|
|
451
|
+
source: relative,
|
|
452
|
+
resourceType,
|
|
438
453
|
timestamp: Date.now()
|
|
439
454
|
});
|
|
440
455
|
clients.forEach((client) => client.write(`data: ${payload}\n\n`));
|
package/dist/index.js
CHANGED
|
@@ -198,6 +198,12 @@ var decodeWorkspacePath = (requestUrl, urlPrefix) => {
|
|
|
198
198
|
return decoded;
|
|
199
199
|
};
|
|
200
200
|
var isPackageReadme = (relative) => /^[^/]+\/README\.md$/u.test(relative);
|
|
201
|
+
/**
|
|
202
|
+
* 传统 workspace 把语言放在第一段目录,例如 `zh-CN/guide.md`。
|
|
203
|
+
* `docs/`、`src/` 这类共享目录不能当成语言,否则 SSE identity 对不上 Client。
|
|
204
|
+
* @param value
|
|
205
|
+
*/
|
|
206
|
+
var isLocaleDirectory = (value) => /^[a-z]{2}(?:-[A-Za-z0-9]{2,8})*$/u.test(value);
|
|
201
207
|
var getContentType = (extension) => {
|
|
202
208
|
switch (extension) {
|
|
203
209
|
case ".md": return "text/markdown; charset=utf-8";
|
|
@@ -357,6 +363,8 @@ var configureEvents = (server, workspace, entry, packages, rootReadme) => {
|
|
|
357
363
|
res.setHeader("Content-Type", "text/event-stream");
|
|
358
364
|
res.setHeader("Cache-Control", "no-cache");
|
|
359
365
|
res.setHeader("Connection", "keep-alive");
|
|
366
|
+
res.setHeader("X-Accel-Buffering", "no");
|
|
367
|
+
res.flushHeaders?.();
|
|
360
368
|
res.write(": connected\n\n");
|
|
361
369
|
clients.add(res);
|
|
362
370
|
req.on("close", () => clients.delete(res));
|
|
@@ -401,11 +409,18 @@ var configureEvents = (server, workspace, entry, packages, rootReadme) => {
|
|
|
401
409
|
}
|
|
402
410
|
const [lang, ...segments] = relative.split("/");
|
|
403
411
|
if (!lang || !segments.length) return;
|
|
404
|
-
const
|
|
412
|
+
const resourceType = getResourceType(relative);
|
|
413
|
+
const payload = JSON.stringify(isLocaleDirectory(lang) ? {
|
|
405
414
|
type,
|
|
406
415
|
lang,
|
|
407
416
|
source: `./${segments.join("/")}`,
|
|
408
|
-
resourceType
|
|
417
|
+
resourceType,
|
|
418
|
+
timestamp: Date.now()
|
|
419
|
+
} : {
|
|
420
|
+
type,
|
|
421
|
+
lang: "",
|
|
422
|
+
source: relative,
|
|
423
|
+
resourceType,
|
|
409
424
|
timestamp: Date.now()
|
|
410
425
|
});
|
|
411
426
|
clients.forEach((client) => client.write(`data: ${payload}\n\n`));
|