@ozdao/scriptorium 0.0.0-stage → 0.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 +119 -2
- package/bin/scriptorium.js +180 -0
- package/package.json +40 -4
- package/public/favicon/favicon.svg +1 -0
- package/src/client.js +29 -0
- package/src/components/Badge.vue +29 -0
- package/src/components/HeaderNav.vue +46 -0
- package/src/components/Layout.vue +34 -0
- package/src/components/Outline.vue +74 -0
- package/src/components/Page.vue +33 -0
- package/src/components/PrevNext.vue +37 -0
- package/src/components/SearchBox.vue +381 -0
- package/src/components/SearchButton.vue +36 -0
- package/src/components/SidebarTree.vue +114 -0
- package/src/components/SiteTitle.vue +11 -0
- package/src/components/ThemeToggle.vue +31 -0
- package/src/configs/client.config.js +38 -0
- package/src/configs/site.config.js +8 -0
- package/src/content/current-page.js +54 -0
- package/src/content/markdown.js +182 -0
- package/src/content/markdown.loader.js +95 -0
- package/src/content/pages.js +5 -0
- package/src/content/pages.loader.js +33 -0
- package/src/content/scan.js +101 -0
- package/src/content/search-index.js +7 -0
- package/src/content/search-index.loader.js +144 -0
- package/src/content/search-options.js +16 -0
- package/src/content/sidebar.js +99 -0
- package/src/content/site-config.js +95 -0
- package/src/content/use-docs.js +21 -0
- package/src/design-system/doc.scss +262 -0
- package/src/design-system/index.js +19 -0
- package/src/design-system/layout.scss +416 -0
- package/src/design-system/theme.scss +45 -0
- package/src/localization/index.js +27 -0
- package/src/main.js +8 -0
- package/src/router/index.js +101 -0
- package/src/router/links.js +56 -0
- package/src/server.js +59 -0
package/src/server.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Сервер сайта документации: express + статика. Порт слушает раннер martyrs
|
|
2
|
+
// (builder/start.js), SSR-рендер страниц он же вешает поверх этого приложения.
|
|
3
|
+
// Env и резолв-хуки уже стоят: register выполняет bin/scriptorium.js до этого файла.
|
|
4
|
+
// Грузится в node без сборки, поэтому импорты только относительные: хуки martyrs
|
|
5
|
+
// ведут '@/' в src/ корня приложения (documentation/src), которого нет.
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import http from 'node:http';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
import express from 'express';
|
|
10
|
+
import cookies from 'cookie-parser';
|
|
11
|
+
|
|
12
|
+
import { docs_dir, loadSiteConfig } from './content/scan.js';
|
|
13
|
+
|
|
14
|
+
// Статика пакета: favicon по умолчанию.
|
|
15
|
+
const package_public = fileURLToPath(new URL('../public', import.meta.url));
|
|
16
|
+
|
|
17
|
+
const createServer = async () => {
|
|
18
|
+
const site_config = await loadSiteConfig();
|
|
19
|
+
|
|
20
|
+
const app = express();
|
|
21
|
+
|
|
22
|
+
app.set('trust proxy', 'loopback');
|
|
23
|
+
app.use(cookies());
|
|
24
|
+
|
|
25
|
+
// Тема по умолчанию (config.appearance) — через ту же cookie theme, по которой
|
|
26
|
+
// рендерер martyrs (vue-app-renderer.js) ставит data-theme на <html> уже в
|
|
27
|
+
// SSR-ответе: страница приходит в нужной теме, без мигания. Выбор читателя —
|
|
28
|
+
// его cookie, она сильнее умолчания. 'auto' — без умолчания: тема системы.
|
|
29
|
+
if (site_config.appearance !== 'auto') {
|
|
30
|
+
app.use((req, res, next) => {
|
|
31
|
+
if (!req.cookies.theme) req.cookies.theme = site_config.appearance;
|
|
32
|
+
next();
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// documentation/public — первой: там генерируемое сборкой (sw.js, спрайт
|
|
37
|
+
// иконок, шрифты) и своё пользователя, оно перекрывает умолчания пакета.
|
|
38
|
+
// Папки может не быть — express.static тогда просто пропускает запрос.
|
|
39
|
+
app.use(express.static(path.join(docs_dir, 'public')));
|
|
40
|
+
app.use(express.static(package_public));
|
|
41
|
+
|
|
42
|
+
const server = http.createServer(app);
|
|
43
|
+
|
|
44
|
+
// scriptorium start: SIGTERM (systemd, деплой) — штатный выход с кодом 0,
|
|
45
|
+
// а не 143. В dev этот файл живёт в воркере бэкенда, сигналы туда не
|
|
46
|
+
// приходят: остановку ведёт главный поток (builder/dev.js, сообщение close).
|
|
47
|
+
process.once('SIGTERM', () => {
|
|
48
|
+
server.close(() => process.exit(0));
|
|
49
|
+
server.closeAllConnections();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return { app, server };
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export { createServer };
|
|
56
|
+
|
|
57
|
+
export default {
|
|
58
|
+
createServer,
|
|
59
|
+
};
|