zengen 0.1.36 → 0.2.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.
Files changed (153) hide show
  1. package/.github/workflows/pages.yml +1 -1
  2. package/.zen/meta.json +128 -30
  3. package/.zen/src/en-US/01d04f7c17b4a541ead9d759d877b30b403e15b849182a49eb1f62bd29ecd18c.md +120 -0
  4. package/.zen/src/en-US/1b798c44a4f353e47296ca83d5905e37e6aba3e90bbd9bc3b3d34fc12059a2ca.md +75 -0
  5. package/.zen/src/en-US/1e96be58d76c60056b708eb5bd8b8b81d7b5845d9cfe0b879d85068a5f11df3a.md +189 -0
  6. package/.zen/src/en-US/5ec990146b35e00de2630559126ee07f7cdcddeb23b0e8cab3d85b4181353e26.md +53 -0
  7. package/.zen/src/en-US/6124ea88edec5bde737b26b21f71ecfeffe4e73151784856edf813ee231a4baa.md +11 -0
  8. package/.zen/src/en-US/80ae9bed74fc6348a7c1fe9f33e86b65f5d919169721f77bcf0e1bc29fbdb4f9.md +61 -0
  9. package/.zen/src/en-US/f0c2799126931ccd113a0c45b1e623870b0d4f4f400becf6dd877da8f1011517.md +41 -0
  10. package/.zen/src/en-US/fdfca9b960d0eaa8b2b96fe988ead7481d2c0b16f66ebc94fb477139b4178cdc.md +65 -0
  11. package/.zen/src/zh-Hans/01d04f7c17b4a541ead9d759d877b30b403e15b849182a49eb1f62bd29ecd18c.md +120 -0
  12. package/.zen/src/zh-Hans/1b798c44a4f353e47296ca83d5905e37e6aba3e90bbd9bc3b3d34fc12059a2ca.md +77 -0
  13. package/.zen/src/zh-Hans/1e96be58d76c60056b708eb5bd8b8b81d7b5845d9cfe0b879d85068a5f11df3a.md +189 -0
  14. package/.zen/src/zh-Hans/5ec990146b35e00de2630559126ee07f7cdcddeb23b0e8cab3d85b4181353e26.md +55 -0
  15. package/.zen/src/zh-Hans/6124ea88edec5bde737b26b21f71ecfeffe4e73151784856edf813ee231a4baa.md +1 -0
  16. package/.zen/src/zh-Hans/6ad8db715a1b60613fe934fefb29fa981ecad9b63145593accff144d73b44bde.md +175 -0
  17. package/.zen/src/zh-Hans/80ae9bed74fc6348a7c1fe9f33e86b65f5d919169721f77bcf0e1bc29fbdb4f9.md +63 -0
  18. package/.zen/src/zh-Hans/a1580f71c6c6c1ff4a314be72d410a8507af2f087d56360c7f5048d349c21953.md +48 -0
  19. package/.zen/src/zh-Hans/d49012f98c4367b34034063400e2f7826bf0615952210c82396920172d468e2c.md +107 -0
  20. package/.zen/src/zh-Hans/f0c2799126931ccd113a0c45b1e623870b0d4f4f400becf6dd877da8f1011517.md +41 -0
  21. package/.zen/src/zh-Hans/fdfca9b960d0eaa8b2b96fe988ead7481d2c0b16f66ebc94fb477139b4178cdc.md +65 -0
  22. package/assets/templates/default/layout.html +274 -0
  23. package/dist/ai/extractMetadataFromMarkdown.d.ts +8 -0
  24. package/dist/ai/extractMetadataFromMarkdown.d.ts.map +1 -0
  25. package/dist/ai/extractMetadataFromMarkdown.js +88 -0
  26. package/dist/ai/extractMetadataFromMarkdown.js.map +1 -0
  27. package/dist/ai/translateMarkdown.d.ts +8 -0
  28. package/dist/ai/translateMarkdown.d.ts.map +1 -0
  29. package/dist/ai/translateMarkdown.js +29 -0
  30. package/dist/ai/translateMarkdown.js.map +1 -0
  31. package/dist/build/pipeline.d.ts +6 -0
  32. package/dist/build/pipeline.d.ts.map +1 -0
  33. package/dist/build/pipeline.js +218 -0
  34. package/dist/build/pipeline.js.map +1 -0
  35. package/dist/cli.js +10 -118
  36. package/dist/cli.js.map +1 -1
  37. package/dist/findEntries.d.ts +10 -0
  38. package/dist/findEntries.d.ts.map +1 -0
  39. package/dist/findEntries.js +38 -0
  40. package/dist/findEntries.js.map +1 -0
  41. package/dist/index.d.ts +1 -32
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +1 -35
  44. package/dist/index.js.map +1 -1
  45. package/dist/metadata.d.ts +14 -0
  46. package/dist/metadata.d.ts.map +1 -0
  47. package/dist/metadata.js +78 -0
  48. package/dist/metadata.js.map +1 -0
  49. package/dist/paths.d.ts +6 -0
  50. package/dist/paths.d.ts.map +1 -0
  51. package/dist/paths.js +10 -0
  52. package/dist/paths.js.map +1 -0
  53. package/dist/process/extractMetadataByAI.d.ts +5 -0
  54. package/dist/process/extractMetadataByAI.d.ts.map +1 -0
  55. package/dist/process/extractMetadataByAI.js +31 -0
  56. package/dist/process/extractMetadataByAI.js.map +1 -0
  57. package/dist/process/template.d.ts +5 -0
  58. package/dist/process/template.d.ts.map +1 -0
  59. package/dist/process/template.js +188 -0
  60. package/dist/process/template.js.map +1 -0
  61. package/dist/scan/files.d.ts +7 -0
  62. package/dist/scan/files.d.ts.map +1 -0
  63. package/dist/scan/files.js +54 -0
  64. package/dist/scan/files.js.map +1 -0
  65. package/dist/services/openai.d.ts +41 -0
  66. package/dist/services/openai.d.ts.map +1 -0
  67. package/dist/services/openai.js +54 -0
  68. package/dist/services/openai.js.map +1 -0
  69. package/dist/types.d.ts +16 -67
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/utils/convertMarkdownToHtml.d.ts +7 -0
  72. package/dist/utils/convertMarkdownToHtml.d.ts.map +1 -0
  73. package/dist/utils/convertMarkdownToHtml.js +39 -0
  74. package/dist/utils/convertMarkdownToHtml.js.map +1 -0
  75. package/dist/utils/frontmatter.d.ts +6 -0
  76. package/dist/utils/frontmatter.d.ts.map +1 -0
  77. package/dist/utils/frontmatter.js +22 -0
  78. package/dist/utils/frontmatter.js.map +1 -0
  79. package/docs/deployment/github-pages.md +1 -2
  80. package/docs/guides/best-practices.md +4 -4
  81. package/docs/guides/config.md +0 -5
  82. package/package.json +4 -2
  83. package/src/ai/extractMetadataFromMarkdown.ts +95 -0
  84. package/src/ai/translateMarkdown.ts +29 -0
  85. package/src/build/pipeline.ts +211 -0
  86. package/src/cli.ts +10 -132
  87. package/src/findEntries.ts +37 -0
  88. package/src/index.ts +1 -40
  89. package/src/metadata.ts +44 -0
  90. package/src/paths.ts +7 -0
  91. package/src/process/extractMetadataByAI.ts +29 -0
  92. package/src/process/template.ts +201 -0
  93. package/src/scan/files.ts +17 -0
  94. package/src/services/openai.ts +92 -0
  95. package/src/types.ts +18 -72
  96. package/src/utils/convertMarkdownToHtml.ts +32 -0
  97. package/src/utils/frontmatter.ts +18 -0
  98. package/.zen/translations.json +0 -51
  99. package/dist/ai-client.d.ts +0 -34
  100. package/dist/ai-client.d.ts.map +0 -1
  101. package/dist/ai-client.js +0 -180
  102. package/dist/ai-client.js.map +0 -1
  103. package/dist/ai-processor.d.ts +0 -51
  104. package/dist/ai-processor.d.ts.map +0 -1
  105. package/dist/ai-processor.js +0 -215
  106. package/dist/ai-processor.js.map +0 -1
  107. package/dist/ai-service.d.ts +0 -79
  108. package/dist/ai-service.d.ts.map +0 -1
  109. package/dist/ai-service.js +0 -257
  110. package/dist/ai-service.js.map +0 -1
  111. package/dist/builder.d.ts +0 -70
  112. package/dist/builder.d.ts.map +0 -1
  113. package/dist/builder.js +0 -854
  114. package/dist/builder.js.map +0 -1
  115. package/dist/gitignore.d.ts +0 -41
  116. package/dist/gitignore.d.ts.map +0 -1
  117. package/dist/gitignore.js +0 -202
  118. package/dist/gitignore.js.map +0 -1
  119. package/dist/gitignore.test.d.ts +0 -2
  120. package/dist/gitignore.test.d.ts.map +0 -1
  121. package/dist/gitignore.test.js +0 -309
  122. package/dist/gitignore.test.js.map +0 -1
  123. package/dist/markdown.d.ts +0 -35
  124. package/dist/markdown.d.ts.map +0 -1
  125. package/dist/markdown.js +0 -221
  126. package/dist/markdown.js.map +0 -1
  127. package/dist/navigation.d.ts +0 -46
  128. package/dist/navigation.d.ts.map +0 -1
  129. package/dist/navigation.js +0 -196
  130. package/dist/navigation.js.map +0 -1
  131. package/dist/scanner.d.ts +0 -26
  132. package/dist/scanner.d.ts.map +0 -1
  133. package/dist/scanner.js +0 -190
  134. package/dist/scanner.js.map +0 -1
  135. package/dist/template.d.ts +0 -33
  136. package/dist/template.d.ts.map +0 -1
  137. package/dist/template.js +0 -434
  138. package/dist/template.js.map +0 -1
  139. package/dist/translation-service.d.ts +0 -72
  140. package/dist/translation-service.d.ts.map +0 -1
  141. package/dist/translation-service.js +0 -291
  142. package/dist/translation-service.js.map +0 -1
  143. package/src/ai-client.ts +0 -227
  144. package/src/ai-processor.ts +0 -243
  145. package/src/ai-service.ts +0 -281
  146. package/src/builder.ts +0 -991
  147. package/src/gitignore.test.ts +0 -318
  148. package/src/gitignore.ts +0 -193
  149. package/src/markdown.ts +0 -212
  150. package/src/navigation.ts +0 -237
  151. package/src/scanner.ts +0 -180
  152. package/src/template.ts +0 -425
  153. package/src/translation-service.ts +0 -350
package/dist/scanner.js DELETED
@@ -1,190 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.Scanner = void 0;
37
- const gitignore_1 = require("./gitignore");
38
- const fs = __importStar(require("fs/promises"));
39
- const path = __importStar(require("path"));
40
- const minimatch = __importStar(require("minimatch"));
41
- const crypto = __importStar(require("crypto"));
42
- class Scanner {
43
- constructor(config = {}) {
44
- this.config = config;
45
- }
46
- /**
47
- * 计算文件内容的 sha256 hash
48
- */
49
- async calculateFileHash(filePath) {
50
- try {
51
- const content = await fs.readFile(filePath, 'utf-8');
52
- return crypto.createHash('sha256').update(content).digest('hex');
53
- }
54
- catch (error) {
55
- console.warn(`⚠️ Failed to calculate hash for ${filePath}:`, error);
56
- return '';
57
- }
58
- }
59
- /**
60
- * 扫描目录并生成文件列表
61
- */
62
- async scanDirectory(dirPath) {
63
- const files = [];
64
- // 创建 GitIgnoreProcessor 并加载 .gitignore 文件
65
- const gitignoreProcessor = new gitignore_1.GitIgnoreProcessor(dirPath);
66
- await gitignoreProcessor.loadFromFile();
67
- // 获取 include/exclude 模式
68
- const includePattern = this.config.includePattern || '**/*.md';
69
- const excludePattern = this.config.excludePattern;
70
- const scanDirectory = async (currentPath) => {
71
- const entries = await fs.readdir(currentPath, { withFileTypes: true });
72
- for (const entry of entries) {
73
- const fullPath = path.join(currentPath, entry.name);
74
- // 检查是否应该被 .gitignore 忽略
75
- if (gitignoreProcessor.shouldIgnore(fullPath)) {
76
- continue;
77
- }
78
- // 忽略 .zen 目录(保持向后兼容)
79
- if (entry.name === '.zen') {
80
- continue;
81
- }
82
- if (entry.isDirectory()) {
83
- await scanDirectory(fullPath);
84
- }
85
- else if (entry.isFile()) {
86
- const relativePath = path.relative(dirPath, fullPath);
87
- // 应用 include 模式
88
- if (!minimatch.match([relativePath], includePattern).length) {
89
- continue;
90
- }
91
- // 应用 exclude 模式
92
- if (excludePattern && minimatch.match([relativePath], excludePattern).length > 0) {
93
- continue;
94
- }
95
- const ext = path.extname(entry.name);
96
- const name = path.basename(entry.name, ext);
97
- const hash = await this.calculateFileHash(fullPath);
98
- files.push({
99
- path: relativePath, // 只保存相对路径
100
- name,
101
- ext,
102
- hash,
103
- });
104
- }
105
- }
106
- };
107
- await scanDirectory(dirPath);
108
- return files;
109
- }
110
- /**
111
- * 保存扫描结果到文件
112
- */
113
- async saveScanResult(files, outputPath) {
114
- // 确保输出目录存在
115
- await fs.mkdir(path.dirname(outputPath), { recursive: true });
116
- // 将扫描结果保存为 JSON
117
- const scanResult = {
118
- timestamp: new Date().toISOString(),
119
- files,
120
- };
121
- await fs.writeFile(outputPath, JSON.stringify(scanResult, null, 2), 'utf-8');
122
- }
123
- /**
124
- * 从文件加载扫描结果
125
- */
126
- async loadScanResult(inputPath) {
127
- try {
128
- const content = await fs.readFile(inputPath, 'utf-8');
129
- const scanResult = JSON.parse(content);
130
- return scanResult.files || [];
131
- }
132
- catch (error) {
133
- console.warn(`⚠️ Failed to load scan result from ${inputPath}:`, error);
134
- return [];
135
- }
136
- }
137
- /**
138
- * 检查扫描结果是否过期
139
- */
140
- async isScanResultOutdated(scanResultPath, dirPath) {
141
- try {
142
- // 检查扫描结果文件是否存在
143
- await fs.access(scanResultPath);
144
- // 读取扫描结果的时间戳
145
- const content = await fs.readFile(scanResultPath, 'utf-8');
146
- const scanResult = JSON.parse(content);
147
- const scanTime = new Date(scanResult.timestamp).getTime();
148
- // 检查源目录中是否有文件比扫描时间更新
149
- const gitignoreProcessor = new gitignore_1.GitIgnoreProcessor(dirPath);
150
- await gitignoreProcessor.loadFromFile();
151
- let isOutdated = false;
152
- async function checkDirectory(currentPath) {
153
- const entries = await fs.readdir(currentPath, { withFileTypes: true });
154
- for (const entry of entries) {
155
- const fullPath = path.join(currentPath, entry.name);
156
- // 检查是否应该被 .gitignore 忽略
157
- if (gitignoreProcessor.shouldIgnore(fullPath)) {
158
- continue;
159
- }
160
- // 忽略 .zen 目录
161
- if (entry.name === '.zen') {
162
- continue;
163
- }
164
- if (entry.isDirectory()) {
165
- await checkDirectory(fullPath);
166
- }
167
- else if (entry.isFile()) {
168
- // 检查文件修改时间
169
- const stats = await fs.stat(fullPath);
170
- if (stats.mtime.getTime() > scanTime) {
171
- isOutdated = true;
172
- return; // 提前退出
173
- }
174
- }
175
- if (isOutdated) {
176
- break;
177
- }
178
- }
179
- }
180
- await checkDirectory(dirPath);
181
- return isOutdated;
182
- }
183
- catch (error) {
184
- // 如果扫描结果文件不存在或读取失败,视为过期
185
- return true;
186
- }
187
- }
188
- }
189
- exports.Scanner = Scanner;
190
- //# sourceMappingURL=scanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import { TemplateData, NavigationItem, FileInfo } from './types';
2
- export declare class TemplateEngine {
3
- private defaultTemplate;
4
- /**
5
- * 生成语言切换器 HTML
6
- */
7
- private generateLanguageSwitcher;
8
- /**
9
- * 生成导航 HTML
10
- */
11
- private generateNavigationHtml;
12
- /**
13
- * 简单的模板变量替换
14
- */
15
- private renderTemplate;
16
- /**
17
- * 渲染模板
18
- */
19
- render(data: TemplateData, templatePath?: string): Promise<string>;
20
- /**
21
- * 从文件信息生成模板数据
22
- */
23
- generateTemplateData(fileInfo: FileInfo, navigation: NavigationItem[], lang?: string, availableLangs?: string[]): TemplateData;
24
- /**
25
- * 生成输出文件路径
26
- */
27
- getOutputPath(fileInfo: FileInfo, outDir: string, lang?: string, hash?: string): string;
28
- /**
29
- * 保存渲染结果到文件
30
- */
31
- saveToFile(html: string, outputPath: string): Promise<void>;
32
- }
33
- //# sourceMappingURL=template.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIjE,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe,CAuQhB;IAEP;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0BhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,cAAc;IA6BtB;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBxE;;OAEG;IACH,oBAAoB,CAClB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,cAAc,EAAE,EAC5B,IAAI,CAAC,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,YAAY;IAef;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAYvF;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQlE"}
package/dist/template.js DELETED
@@ -1,434 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.TemplateEngine = void 0;
37
- const fs = __importStar(require("fs/promises"));
38
- const path = __importStar(require("path"));
39
- class TemplateEngine {
40
- constructor() {
41
- this.defaultTemplate = `<!DOCTYPE html>
42
- <html lang="zh-CN">
43
- <head>
44
- <meta charset="UTF-8">
45
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
46
- <title>{{title}}</title>
47
- <style>
48
- * {
49
- margin: 0;
50
- padding: 0;
51
- box-sizing: border-box;
52
- }
53
-
54
- body {
55
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
56
- line-height: 1.6;
57
- color: #333;
58
- background: #f8f9fa;
59
- display: flex;
60
- min-height: 100vh;
61
- }
62
-
63
- .sidebar {
64
- width: 280px;
65
- background: #fff;
66
- border-right: 1px solid #e9ecef;
67
- padding: 2rem 1rem;
68
- overflow-y: auto;
69
- position: fixed;
70
- height: 100vh;
71
- left: 0;
72
- top: 0;
73
- }
74
-
75
- .sidebar-header {
76
- margin-bottom: 2rem;
77
- padding-bottom: 1rem;
78
- border-bottom: 1px solid #e9ecef;
79
- }
80
-
81
- .sidebar-header h1 {
82
- font-size: 1.5rem;
83
- font-weight: 600;
84
- color: #212529;
85
- }
86
-
87
- .sidebar-header p {
88
- color: #6c757d;
89
- font-size: 0.875rem;
90
- margin-top: 0.5rem;
91
- }
92
-
93
- .nav-list {
94
- list-style: none;
95
- }
96
-
97
- .nav-item {
98
- margin-bottom: 0.5rem;
99
- }
100
-
101
- .nav-link {
102
- display: block;
103
- padding: 0.5rem 1rem;
104
- color: #495057;
105
- text-decoration: none;
106
- border-radius: 4px;
107
- transition: all 0.2s;
108
- }
109
-
110
- .nav-link:hover {
111
- background: #e9ecef;
112
- color: #212529;
113
- }
114
-
115
- .nav-link.active {
116
- background: #007bff;
117
- color: white;
118
- }
119
-
120
- .nav-submenu {
121
- list-style: none;
122
- margin-left: 1rem;
123
- margin-top: 0.25rem;
124
- }
125
-
126
- .content {
127
- flex: 1;
128
- margin-left: 280px;
129
- padding: 3rem 4rem;
130
- max-width: 900px;
131
- }
132
-
133
- .content-header {
134
- margin-bottom: 2rem;
135
- padding-bottom: 1rem;
136
- border-bottom: 1px solid #e9ecef;
137
- }
138
-
139
- .content-header h1 {
140
- font-size: 2.5rem;
141
- font-weight: 700;
142
- color: #212529;
143
- margin-bottom: 0.5rem;
144
- }
145
-
146
- .content-header .meta {
147
- color: #6c757d;
148
- font-size: 0.875rem;
149
- }
150
-
151
- .content-body {
152
- font-size: 1.125rem;
153
- line-height: 1.8;
154
- }
155
-
156
- .content-body h1 {
157
- font-size: 2rem;
158
- margin: 2rem 0 1rem;
159
- color: #212529;
160
- }
161
-
162
- .content-body h2 {
163
- font-size: 1.75rem;
164
- margin: 1.75rem 0 0.875rem;
165
- color: #343a40;
166
- }
167
-
168
- .content-body h3 {
169
- font-size: 1.5rem;
170
- margin: 1.5rem 0 0.75rem;
171
- color: #495057;
172
- }
173
-
174
- .content-body p {
175
- margin: 1rem 0;
176
- }
177
-
178
- .content-body ul, .content-body ol {
179
- margin: 1rem 0 1rem 2rem;
180
- }
181
-
182
- .content-body li {
183
- margin: 0.5rem 0;
184
- }
185
-
186
- .content-body blockquote {
187
- border-left: 4px solid #007bff;
188
- padding: 0.5rem 1rem;
189
- margin: 1rem 0;
190
- background: #f8f9fa;
191
- color: #495057;
192
- }
193
-
194
- .content-body code {
195
- background: #f8f9fa;
196
- padding: 0.2rem 0.4rem;
197
- border-radius: 3px;
198
- font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
199
- font-size: 0.875em;
200
- }
201
-
202
- .content-body pre {
203
- background: #f8f9fa;
204
- padding: 1rem;
205
- border-radius: 6px;
206
- overflow-x: auto;
207
- margin: 1rem 0;
208
- }
209
-
210
- .content-body pre code {
211
- background: none;
212
- padding: 0;
213
- }
214
-
215
- .content-body table {
216
- width: 100%;
217
- border-collapse: collapse;
218
- margin: 1rem 0;
219
- }
220
-
221
- .content-body th, .content-body td {
222
- border: 1px solid #dee2e6;
223
- padding: 0.75rem;
224
- text-align: left;
225
- }
226
-
227
- .content-body th {
228
- background: #f8f9fa;
229
- font-weight: 600;
230
- }
231
-
232
- .content-body img {
233
- max-width: 100%;
234
- height: auto;
235
- border-radius: 6px;
236
- margin: 1rem 0;
237
- }
238
-
239
- .content-body a {
240
- color: #007bff;
241
- text-decoration: none;
242
- }
243
-
244
- .content-body a:hover {
245
- text-decoration: underline;
246
- }
247
-
248
- .footer {
249
- margin-top: 3rem;
250
- padding-top: 2rem;
251
- border-top: 1px solid #e9ecef;
252
- color: #6c757d;
253
- font-size: 0.875rem;
254
- text-align: center;
255
- }
256
-
257
- @media (max-width: 768px) {
258
- body {
259
- flex-direction: column;
260
- }
261
-
262
- .sidebar {
263
- width: 100%;
264
- height: auto;
265
- position: static;
266
- border-right: none;
267
- border-bottom: 1px solid #e9ecef;
268
- }
269
-
270
- .content {
271
- margin-left: 0;
272
- padding: 2rem;
273
- }
274
- }
275
- </style>
276
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github.min.css">
277
- </head>
278
- <body>
279
- <nav class="sidebar">
280
- <div class="sidebar-header">
281
- <h1>ZEN Documentation</h1>
282
- <p>A minimalist Markdown documentation site builder</p>
283
- </div>
284
- {{navigation}}
285
- </nav>
286
-
287
- <main class="content">
288
- <header class="content-header">
289
- <h1>{{title}}</h1>
290
- </header>
291
-
292
- <article class="content-body">
293
- {{{content}}}
294
- </article>
295
-
296
- <footer class="footer">
297
- <p>Generated by <strong>ZEN</strong> • <a href="https://github.com/zccz14/ZEN" target="_blank">View on GitHub</a></p>
298
- </footer>
299
- </main>
300
-
301
- <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js"></script>
302
- <script>hljs.highlightAll();</script>
303
- </body>
304
- </html>`;
305
- }
306
- /**
307
- * 生成语言切换器 HTML
308
- */
309
- generateLanguageSwitcher(currentLang, availableLangs) {
310
- const langNames = {
311
- 'zh-Hans': '简体中文',
312
- 'en-US': 'English',
313
- 'ja-JP': '日本語',
314
- 'ko-KR': '한국어',
315
- };
316
- const items = availableLangs
317
- .map(lang => {
318
- const langName = langNames[lang] || lang;
319
- const isCurrent = lang === currentLang;
320
- const activeClass = isCurrent ? 'active' : '';
321
- return `<li class="lang-item ${activeClass}">
322
- <a href="?lang=${lang}" class="lang-link">${langName}</a>
323
- </li>`;
324
- })
325
- .join('');
326
- return `<div class="language-switcher">
327
- <span class="lang-label">Language:</span>
328
- <ul class="lang-list">${items}</ul>
329
- </div>`;
330
- }
331
- /**
332
- * 生成导航 HTML
333
- */
334
- generateNavigationHtml(navigation, currentPath) {
335
- const renderItem = (item) => {
336
- const isActive = currentPath === item.path;
337
- const activeClass = isActive ? 'active' : '';
338
- let html = `<li class="nav-item">`;
339
- html += `<a href="${item.path}" class="nav-link ${activeClass}">${item.title}</a>`;
340
- if (item.children && item.children.length > 0) {
341
- html += `<ul class="nav-submenu">`;
342
- html += item.children.map(child => renderItem(child)).join('');
343
- html += `</ul>`;
344
- }
345
- html += `</li>`;
346
- return html;
347
- };
348
- return `<ul class="nav-list">${navigation.map(item => renderItem(item)).join('')}</ul>`;
349
- }
350
- /**
351
- * 简单的模板变量替换
352
- */
353
- renderTemplate(template, data) {
354
- let result = template;
355
- // 替换导航
356
- const navigationHtml = this.generateNavigationHtml(data.navigation, data.currentPath);
357
- result = result.replace('{{navigation}}', navigationHtml);
358
- // 替换其他变量 - 使用全局替换
359
- result = result.replace(/{{title}}/g, data.title || 'Untitled');
360
- result = result.replace(/{{{content}}}/g, data.content || '');
361
- // 替换元数据变量
362
- if (data.metadata) {
363
- result = result.replace(/{{summary}}/g, data.metadata.summary || '');
364
- result = result.replace(/{{tags}}/g, data.metadata.tags?.join(', ') || '');
365
- result = result.replace(/{{inferred_date}}/g, data.metadata.inferred_date || '');
366
- result = result.replace(/{{inferred_lang}}/g, data.metadata.inferred_lang || '');
367
- }
368
- // 替换语言相关变量
369
- result = result.replace(/{{lang}}/g, data.lang || '');
370
- if (data.availableLangs && data.availableLangs.length > 0 && data.lang) {
371
- const langSwitcher = this.generateLanguageSwitcher(data.lang, data.availableLangs);
372
- result = result.replace('{{language_switcher}}', langSwitcher);
373
- }
374
- return result;
375
- }
376
- /**
377
- * 渲染模板
378
- */
379
- async render(data, templatePath) {
380
- let template = this.defaultTemplate;
381
- if (templatePath) {
382
- try {
383
- template = await fs.readFile(templatePath, 'utf-8');
384
- }
385
- catch (error) {
386
- console.warn(`Failed to load custom template from ${templatePath}, using default template:`, error);
387
- }
388
- }
389
- return this.renderTemplate(template, data);
390
- }
391
- /**
392
- * 从文件信息生成模板数据
393
- */
394
- generateTemplateData(fileInfo, navigation, lang, availableLangs) {
395
- // 优先使用 AI 元数据中的标题,其次使用文件元数据,最后使用文件名
396
- const title = fileInfo.aiMetadata?.title || fileInfo.metadata?.title || fileInfo.name;
397
- return {
398
- title,
399
- content: fileInfo.html || '',
400
- navigation,
401
- metadata: fileInfo.aiMetadata, // 使用完整的 AI 元数据
402
- currentPath: `/${fileInfo.path.replace(/\.md$/, '.html')}`,
403
- lang,
404
- availableLangs,
405
- };
406
- }
407
- /**
408
- * 生成输出文件路径
409
- */
410
- getOutputPath(fileInfo, outDir, lang, hash) {
411
- if (lang && hash) {
412
- // 多语言模式:.zen/dist/{lang}/{hash}.html
413
- return path.join(outDir, lang, `${hash}.html`);
414
- }
415
- else {
416
- // 传统模式:保持目录结构
417
- const htmlFileName = `${fileInfo.name}.html`;
418
- const relativeDir = path.dirname(fileInfo.path);
419
- return path.join(outDir, relativeDir, htmlFileName);
420
- }
421
- }
422
- /**
423
- * 保存渲染结果到文件
424
- */
425
- async saveToFile(html, outputPath) {
426
- // 确保目录存在
427
- const dir = path.dirname(outputPath);
428
- await fs.mkdir(dir, { recursive: true });
429
- // 写入文件
430
- await fs.writeFile(outputPath, html, 'utf-8');
431
- }
432
- }
433
- exports.TemplateEngine = TemplateEngine;
434
- //# sourceMappingURL=template.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}