zengen 0.1.33 → 0.1.34

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.
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  strategy:
13
13
  matrix:
14
- node-version: [18.x, 20.x, 22.x]
14
+ node-version: [20.x, 22.x, 24.x]
15
15
 
16
16
  steps:
17
17
  - name: Checkout repository
@@ -30,7 +30,7 @@ jobs:
30
30
  - name: Setup Node.js
31
31
  uses: actions/setup-node@v4
32
32
  with:
33
- node-version: '20.x'
33
+ node-version: '24.x'
34
34
  cache: 'npm'
35
35
 
36
36
  - name: Install dependencies
@@ -27,7 +27,7 @@ jobs:
27
27
  - name: Setup Node.js for npm publish
28
28
  uses: actions/setup-node@v4
29
29
  with:
30
- node-version: '20.x'
30
+ node-version: '24.x'
31
31
  registry-url: 'https://registry.npmjs.org'
32
32
  cache: 'npm'
33
33
 
@@ -56,7 +56,7 @@ jobs:
56
56
  - name: Setup Node.js
57
57
  uses: actions/setup-node@v4
58
58
  with:
59
- node-version: '20.x'
59
+ node-version: '24.x'
60
60
 
61
61
  - name: Get version and changelog
62
62
  id: get_info
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gitignore.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.test.d.ts","sourceRoot":"","sources":["../src/gitignore.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,244 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const node_test_1 = require("node:test");
40
+ const node_assert_1 = __importDefault(require("node:assert"));
41
+ const fs = __importStar(require("fs/promises"));
42
+ const path = __importStar(require("path"));
43
+ const gitignore_js_1 = require("./gitignore.js");
44
+ (0, node_test_1.describe)('GitIgnoreProcessor', () => {
45
+ let testDir;
46
+ let gitignorePath;
47
+ (0, node_test_1.beforeEach)(async () => {
48
+ // 创建临时测试目录
49
+ testDir = path.join(__dirname, 'test-temp');
50
+ gitignorePath = path.join(testDir, '.gitignore');
51
+ try {
52
+ await fs.mkdir(testDir, { recursive: true });
53
+ }
54
+ catch (error) {
55
+ // 目录可能已存在
56
+ }
57
+ });
58
+ (0, node_test_1.afterEach)(async () => {
59
+ // 清理测试目录
60
+ try {
61
+ await fs.rm(testDir, { recursive: true, force: true });
62
+ }
63
+ catch (error) {
64
+ // 忽略清理错误
65
+ }
66
+ });
67
+ (0, node_test_1.describe)('constructor', () => {
68
+ (0, node_test_1.it)('应该正确设置baseDir', () => {
69
+ const processor = new gitignore_js_1.GitIgnoreProcessor('/test/dir');
70
+ node_assert_1.default.strictEqual(processor['baseDir'], '/test/dir');
71
+ });
72
+ (0, node_test_1.it)('应该初始化空模式数组', () => {
73
+ const processor = new gitignore_js_1.GitIgnoreProcessor('/test/dir');
74
+ const patterns = processor.getPatterns();
75
+ node_assert_1.default.deepStrictEqual(patterns, []);
76
+ });
77
+ });
78
+ (0, node_test_1.describe)('loadFromFile', () => {
79
+ (0, node_test_1.it)('应该从.gitignore文件加载模式', async () => {
80
+ const gitignoreContent = `
81
+ # 注释行
82
+ node_modules/
83
+ *.log
84
+ dist/
85
+ .DS_Store
86
+ `;
87
+ await fs.writeFile(gitignorePath, gitignoreContent);
88
+ const processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
89
+ await processor.loadFromFile('.gitignore');
90
+ const patterns = processor.getPatterns();
91
+ node_assert_1.default.deepStrictEqual(patterns, ['**/node_modules', '*.log', '**/dist', '**/.DS_Store']);
92
+ });
93
+ (0, node_test_1.it)('当.gitignore文件不存在时应该使用空模式', async () => {
94
+ const processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
95
+ await processor.loadFromFile('non-existent-file');
96
+ const patterns = processor.getPatterns();
97
+ node_assert_1.default.deepStrictEqual(patterns, []);
98
+ });
99
+ (0, node_test_1.it)('应该跳过空行和注释', async () => {
100
+ const gitignoreContent = `
101
+ # 这是一个注释
102
+
103
+ node_modules/
104
+
105
+ # 另一个注释
106
+ *.log
107
+ `;
108
+ await fs.writeFile(gitignorePath, gitignoreContent);
109
+ const processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
110
+ await processor.loadFromFile('.gitignore');
111
+ const patterns = processor.getPatterns();
112
+ node_assert_1.default.deepStrictEqual(patterns, ['**/node_modules', '*.log']);
113
+ });
114
+ (0, node_test_1.it)('应该跳过否定模式', async () => {
115
+ const gitignoreContent = `
116
+ node_modules/
117
+ !node_modules/special/
118
+ *.log
119
+ `;
120
+ await fs.writeFile(gitignorePath, gitignoreContent);
121
+ const processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
122
+ await processor.loadFromFile('.gitignore');
123
+ const patterns = processor.getPatterns();
124
+ node_assert_1.default.deepStrictEqual(patterns, ['**/node_modules', '*.log']);
125
+ });
126
+ });
127
+ (0, node_test_1.describe)('parsePatterns', () => {
128
+ (0, node_test_1.it)('应该正确处理目录模式', () => {
129
+ const processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
130
+ const content = `
131
+ node_modules/
132
+ dist/
133
+ `;
134
+ processor['parsePatterns'](content);
135
+ const patterns = processor.getPatterns();
136
+ node_assert_1.default.deepStrictEqual(patterns, ['**/node_modules', '**/dist']);
137
+ });
138
+ (0, node_test_1.it)('应该正确处理文件扩展名模式', () => {
139
+ const processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
140
+ const content = `
141
+ *.log
142
+ *.tmp
143
+ `;
144
+ processor['parsePatterns'](content);
145
+ const patterns = processor.getPatterns();
146
+ node_assert_1.default.deepStrictEqual(patterns, ['*.log', '*.tmp']);
147
+ });
148
+ (0, node_test_1.it)('应该处理以/开头的模式', () => {
149
+ const processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
150
+ const content = `
151
+ /node_modules
152
+ /dist
153
+ `;
154
+ processor['parsePatterns'](content);
155
+ const patterns = processor.getPatterns();
156
+ node_assert_1.default.deepStrictEqual(patterns, ['node_modules', 'dist']);
157
+ });
158
+ (0, node_test_1.it)('应该处理包含通配符的模式', () => {
159
+ const processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
160
+ const content = `
161
+ **/node_modules
162
+ **/.vscode
163
+ `;
164
+ processor['parsePatterns'](content);
165
+ const patterns = processor.getPatterns();
166
+ node_assert_1.default.deepStrictEqual(patterns, ['**/node_modules', '**/.vscode']);
167
+ });
168
+ });
169
+ (0, node_test_1.describe)('shouldIgnore', () => {
170
+ let processor;
171
+ (0, node_test_1.beforeEach)(() => {
172
+ processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
173
+ });
174
+ (0, node_test_1.it)('应该忽略匹配的文件', () => {
175
+ processor.addPattern('**/*.log');
176
+ processor.addPattern('**/node_modules');
177
+ const logFile = path.join(testDir, 'app.log');
178
+ const nodeModulesFile = path.join(testDir, 'node_modules', 'package.json');
179
+ node_assert_1.default.strictEqual(processor.shouldIgnore(logFile), true);
180
+ node_assert_1.default.strictEqual(processor.shouldIgnore(nodeModulesFile), true);
181
+ });
182
+ (0, node_test_1.it)('不应该忽略不匹配的文件', () => {
183
+ processor.addPattern('**/*.log');
184
+ processor.addPattern('**/node_modules');
185
+ const textFile = path.join(testDir, 'readme.txt');
186
+ const srcFile = path.join(testDir, 'src', 'index.ts');
187
+ node_assert_1.default.strictEqual(processor.shouldIgnore(textFile), false);
188
+ node_assert_1.default.strictEqual(processor.shouldIgnore(srcFile), false);
189
+ });
190
+ (0, node_test_1.it)('当文件在baseDir之外时不应该忽略', () => {
191
+ processor.addPattern('**/*.log');
192
+ const outsideFile = path.join('/outside', 'dir', 'app.log');
193
+ node_assert_1.default.strictEqual(processor.shouldIgnore(outsideFile), false);
194
+ });
195
+ (0, node_test_1.it)('应该正确处理点文件', () => {
196
+ processor.addPattern('**/.DS_Store');
197
+ processor.addPattern('**/.vscode');
198
+ const dsStoreFile = path.join(testDir, '.DS_Store');
199
+ const vscodeFile = path.join(testDir, '.vscode', 'settings.json');
200
+ node_assert_1.default.strictEqual(processor.shouldIgnore(dsStoreFile), true);
201
+ node_assert_1.default.strictEqual(processor.shouldIgnore(vscodeFile), true);
202
+ });
203
+ (0, node_test_1.it)('应该正确处理目录模式', () => {
204
+ processor.addPattern('node_modules/');
205
+ processor.addPattern('dist/');
206
+ const nodeModulesFile = path.join(testDir, 'node_modules', 'package.json');
207
+ const distFile = path.join(testDir, 'dist', 'index.js');
208
+ const srcFile = path.join(testDir, 'src', 'index.ts');
209
+ node_assert_1.default.strictEqual(processor.shouldIgnore(nodeModulesFile), true);
210
+ node_assert_1.default.strictEqual(processor.shouldIgnore(distFile), true);
211
+ node_assert_1.default.strictEqual(processor.shouldIgnore(srcFile), false);
212
+ });
213
+ });
214
+ (0, node_test_1.describe)('addPattern and clearPatterns', () => {
215
+ (0, node_test_1.it)('应该能够添加自定义模式', () => {
216
+ const processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
217
+ processor.addPattern('custom-pattern');
218
+ node_assert_1.default.deepStrictEqual(processor.getPatterns(), ['custom-pattern']);
219
+ processor.addPattern('another-pattern');
220
+ node_assert_1.default.deepStrictEqual(processor.getPatterns(), ['custom-pattern', 'another-pattern']);
221
+ });
222
+ (0, node_test_1.it)('应该能够清除所有模式', () => {
223
+ const processor = new gitignore_js_1.GitIgnoreProcessor(testDir);
224
+ processor.addPattern('pattern1');
225
+ processor.addPattern('pattern2');
226
+ node_assert_1.default.strictEqual(processor.getPatterns().length, 2);
227
+ processor.clearPatterns();
228
+ node_assert_1.default.deepStrictEqual(processor.getPatterns(), []);
229
+ });
230
+ });
231
+ (0, node_test_1.describe)('createGitIgnoreProcessor', () => {
232
+ (0, node_test_1.it)('应该创建处理器并加载.gitignore文件', async () => {
233
+ const gitignoreContent = `
234
+ node_modules/
235
+ *.log
236
+ `;
237
+ await fs.writeFile(gitignorePath, gitignoreContent);
238
+ const processor = await (0, gitignore_js_1.createGitIgnoreProcessor)(testDir);
239
+ const patterns = processor.getPatterns();
240
+ node_assert_1.default.deepStrictEqual(patterns, ['**/node_modules', '*.log']);
241
+ });
242
+ });
243
+ });
244
+ //# sourceMappingURL=gitignore.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.test.js","sourceRoot":"","sources":["../src/gitignore.test.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,6 @@ export declare class MarkdownConverter {
6
6
  * 添加处理器
7
7
  */
8
8
  addProcessor(processor: MarkdownProcessor): void;
9
- /**
10
- * 解析 YAML frontmatter
11
- */
12
- private parseFrontmatter;
13
9
  /**
14
10
  * 从内容中提取标题
15
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA2BtD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAA2B;gBAEjC,UAAU,GAAE,iBAAiB,EAAO;IAIhD;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAIhD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiCpD;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAiB1D;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiBhF;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CA6C7D"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA0BtD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAA2B;gBAEjC,UAAU,GAAE,iBAAiB,EAAO;IAIhD;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAIhD;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IA+BpD;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAiB1D;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiBhF;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CA6C7D"}
package/dist/markdown.js CHANGED
@@ -41,7 +41,6 @@ const marked_1 = require("marked");
41
41
  const highlight_js_1 = __importDefault(require("highlight.js"));
42
42
  const fs = __importStar(require("fs/promises"));
43
43
  const path = __importStar(require("path"));
44
- const yaml = __importStar(require("yaml"));
45
44
  const gitignore_1 = require("./gitignore");
46
45
  // 配置 marked 使用 highlight.js 进行代码高亮
47
46
  marked_1.marked.setOptions({
@@ -75,25 +74,6 @@ class MarkdownConverter {
75
74
  addProcessor(processor) {
76
75
  this.processors.push(processor);
77
76
  }
78
- /**
79
- * 解析 YAML frontmatter
80
- */
81
- parseFrontmatter(content) {
82
- const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n/;
83
- const match = content.match(frontmatterRegex);
84
- if (!match) {
85
- return { metadata: {}, content };
86
- }
87
- try {
88
- const metadata = yaml.parse(match[1]) || {};
89
- const remainingContent = content.slice(match[0].length);
90
- return { metadata, content: remainingContent };
91
- }
92
- catch (error) {
93
- console.warn('Failed to parse frontmatter:', error);
94
- return { metadata: {}, content };
95
- }
96
- }
97
77
  /**
98
78
  * 从内容中提取标题
99
79
  */
@@ -114,7 +94,7 @@ class MarkdownConverter {
114
94
  * 转换 Markdown 文件
115
95
  */
116
96
  async convert(fileInfo) {
117
- let { content, metadata } = this.parseFrontmatter(fileInfo.content);
97
+ let content = fileInfo.content;
118
98
  // 应用前置处理器
119
99
  for (const processor of this.processors) {
120
100
  if (processor.beforeParse) {
@@ -129,15 +109,13 @@ class MarkdownConverter {
129
109
  html = await processor.afterParse(html, fileInfo);
130
110
  }
131
111
  }
132
- // 提取标题(如果 metadata 中没有)
133
- if (!metadata.title) {
134
- metadata.title = this.extractTitle(content);
135
- }
112
+ // 提取标题
113
+ const title = this.extractTitle(content);
136
114
  return {
137
115
  ...fileInfo,
138
116
  content,
139
117
  html,
140
- metadata,
118
+ metadata: { title }, // 只保留标题作为 metadata
141
119
  };
142
120
  }
143
121
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAW;IAIhC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE;IAc7C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4D3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE;IAejD;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;IA4BrF;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAyB5D;;OAEG;IACH,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM;CAIlD"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAW;IAIhC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE;IAc7C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+D3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE;IAejD;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;IA4BrF;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAsB5D;;OAEG;IACH,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM;CAIlD"}
@@ -36,8 +36,10 @@ class NavigationGenerator {
36
36
  const isMarkdownFile = part.endsWith('.md');
37
37
  // 如果是 Markdown 文件,移除扩展名
38
38
  const displayName = isMarkdownFile ? part.replace(/\.md$/, '') : part;
39
- // 生成标题(使用文件名或 metadata 中的标题)
40
- const title = file.metadata?.title || this.formatTitle(displayName);
39
+ // 生成标题(对于 Markdown 文件优先使用提取的标题)
40
+ const title = isMarkdownFile && file.metadata?.title
41
+ ? file.metadata.title
42
+ : this.formatTitle(displayName);
41
43
  // 生成路径
42
44
  const rawPath = isMarkdownFile
43
45
  ? `/${file.relativePath.replace(/\.md$/, '.html')}`
@@ -108,7 +110,7 @@ class NavigationGenerator {
108
110
  generateFlat(files) {
109
111
  return files
110
112
  .map(file => {
111
- const title = file.metadata?.title || this.formatTitle(file.name);
113
+ const title = file.metadata?.title || this.formatTitle(file.name); // 优先使用提取的标题
112
114
  const rawPath = `/${file.relativePath.replace(/\.md$/, '.html')}`;
113
115
  const itemPath = this.generatePath(rawPath);
114
116
  return {
@@ -168,9 +170,7 @@ class NavigationGenerator {
168
170
  const urls = files
169
171
  .map(file => {
170
172
  const path = `/${file.relativePath.replace(/\.md$/, '.html')}`;
171
- const lastmod = file.metadata?.last_modified ||
172
- file.metadata?.date ||
173
- new Date().toISOString().split('T')[0];
173
+ const lastmod = new Date().toISOString().split('T')[0];
174
174
  return ` <url>
175
175
  <loc>${effectiveBaseUrl}${path}</loc>
176
176
  <lastmod>${lastmod}</lastmod>
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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,CA6QhB;IAEP;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAiCtB;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBxE;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,YAAY;IAUpF;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAMzD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQlE"}
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,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBxE;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,YAAY;IAUpF;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAMzD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQlE"}
package/dist/template.js CHANGED
@@ -287,12 +287,6 @@ class TemplateEngine {
287
287
  <main class="content">
288
288
  <header class="content-header">
289
289
  <h1>{{title}}</h1>
290
- {{#if metadata}}
291
- <div class="meta">
292
- {{#if metadata.author}}By {{metadata.author}} • {{/if}}
293
- {{#if metadata.date}}{{metadata.date}}{{/if}}
294
- </div>
295
- {{/if}}
296
290
  </header>
297
291
 
298
292
  <article class="content-body">
@@ -336,25 +330,9 @@ class TemplateEngine {
336
330
  // 替换导航
337
331
  const navigationHtml = this.generateNavigationHtml(data.navigation, data.currentPath);
338
332
  result = result.replace('{{navigation}}', navigationHtml);
339
- // 替换其他变量
340
- result = result.replace('{{title}}', data.title || 'Untitled');
341
- result = result.replace('{{{content}}}', data.content || '');
342
- // 处理 metadata
343
- if (data.metadata) {
344
- // 简单的 metadata 替换逻辑
345
- for (const [key, value] of Object.entries(data.metadata)) {
346
- const placeholder = `{{metadata.${key}}}`;
347
- if (result.includes(placeholder)) {
348
- result = result.replace(new RegExp(placeholder, 'g'), String(value));
349
- }
350
- }
351
- // 替换 metadata 对象为 JSON(如果需要)
352
- if (result.includes('{{metadata}}')) {
353
- result = result.replace('{{metadata}}', JSON.stringify(data.metadata));
354
- }
355
- }
356
- // 移除未使用的 metadata 占位符
357
- result = result.replace(/\{\{metadata\.[^}]*\}\}/g, '');
333
+ // 替换其他变量 - 使用全局替换
334
+ result = result.replace(/{{title}}/g, data.title || 'Untitled');
335
+ result = result.replace(/{{{content}}}/g, data.content || '');
358
336
  return result;
359
337
  }
360
338
  /**
@@ -377,7 +355,7 @@ class TemplateEngine {
377
355
  */
378
356
  generateTemplateData(fileInfo, navigation) {
379
357
  return {
380
- title: fileInfo.metadata?.title || fileInfo.name,
358
+ title: fileInfo.metadata?.title || fileInfo.name, // 优先使用提取的标题,如果没有则使用文件名
381
359
  content: fileInfo.html || '',
382
360
  navigation,
383
361
  metadata: fileInfo.metadata,
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -16,7 +16,9 @@ export interface FileInfo {
16
16
  ext: string;
17
17
  content: string;
18
18
  html?: string;
19
- metadata?: Record<string, any>;
19
+ metadata?: {
20
+ title: string;
21
+ };
20
22
  }
21
23
  export interface NavigationItem {
22
24
  title: string;
@@ -27,7 +29,9 @@ export interface TemplateData {
27
29
  title: string;
28
30
  content: string;
29
31
  navigation: NavigationItem[];
30
- metadata?: Record<string, any>;
32
+ metadata?: {
33
+ title: string;
34
+ };
31
35
  currentPath?: string;
32
36
  }
33
37
  export interface MarkdownProcessor {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5E,UAAU,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5E,UAAU,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zengen",
3
- "version": "0.1.33",
3
+ "version": "0.1.34",
4
4
  "description": "ZEN - A minimalist Markdown documentation site builder",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,7 +10,7 @@
10
10
  "scripts": {
11
11
  "build": "npx rimraf dist && tsc",
12
12
  "dev": "ts-node src/cli.ts",
13
- "test": "npm run test:types && npm run test:build && npm run test:cli",
13
+ "test": "npm run build && node --test dist/**/*.test.js",
14
14
  "test:types": "tsc --noEmit",
15
15
  "test:build": "npm run build && test -f dist/index.js && test -f dist/cli.js",
16
16
  "test:cli": "node -e \"const pkg = require('./package.json'); console.log('Package:', pkg.name, 'v' + pkg.version)\"",
@@ -57,7 +57,6 @@
57
57
  "express": "^4.21.2",
58
58
  "highlight.js": "^11.11.1",
59
59
  "marked": "^17.0.1",
60
- "minimatch": "^10.1.1",
61
- "yaml": "^1.10.2"
60
+ "minimatch": "^10.1.1"
62
61
  }
63
62
  }
@@ -0,0 +1,253 @@
1
+ import { describe, it, beforeEach, afterEach } from 'node:test';
2
+ import assert from 'node:assert';
3
+ import * as fs from 'fs/promises';
4
+ import * as path from 'path';
5
+ import { GitIgnoreProcessor, createGitIgnoreProcessor } from './gitignore.js';
6
+
7
+ describe('GitIgnoreProcessor', () => {
8
+ let testDir: string;
9
+ let gitignorePath: string;
10
+
11
+ beforeEach(async () => {
12
+ // 创建临时测试目录
13
+ testDir = path.join(__dirname, 'test-temp');
14
+ gitignorePath = path.join(testDir, '.gitignore');
15
+
16
+ try {
17
+ await fs.mkdir(testDir, { recursive: true });
18
+ } catch (error) {
19
+ // 目录可能已存在
20
+ }
21
+ });
22
+
23
+ afterEach(async () => {
24
+ // 清理测试目录
25
+ try {
26
+ await fs.rm(testDir, { recursive: true, force: true });
27
+ } catch (error) {
28
+ // 忽略清理错误
29
+ }
30
+ });
31
+
32
+ describe('constructor', () => {
33
+ it('应该正确设置baseDir', () => {
34
+ const processor = new GitIgnoreProcessor('/test/dir');
35
+ assert.strictEqual(processor['baseDir'], '/test/dir');
36
+ });
37
+
38
+ it('应该初始化空模式数组', () => {
39
+ const processor = new GitIgnoreProcessor('/test/dir');
40
+ const patterns = processor.getPatterns();
41
+ assert.deepStrictEqual(patterns, []);
42
+ });
43
+ });
44
+
45
+ describe('loadFromFile', () => {
46
+ it('应该从.gitignore文件加载模式', async () => {
47
+ const gitignoreContent = `
48
+ # 注释行
49
+ node_modules/
50
+ *.log
51
+ dist/
52
+ .DS_Store
53
+ `;
54
+ await fs.writeFile(gitignorePath, gitignoreContent);
55
+
56
+ const processor = new GitIgnoreProcessor(testDir);
57
+ await processor.loadFromFile('.gitignore');
58
+
59
+ const patterns = processor.getPatterns();
60
+ assert.deepStrictEqual(patterns, ['**/node_modules', '*.log', '**/dist', '**/.DS_Store']);
61
+ });
62
+
63
+ it('当.gitignore文件不存在时应该使用空模式', async () => {
64
+ const processor = new GitIgnoreProcessor(testDir);
65
+ await processor.loadFromFile('non-existent-file');
66
+
67
+ const patterns = processor.getPatterns();
68
+ assert.deepStrictEqual(patterns, []);
69
+ });
70
+
71
+ it('应该跳过空行和注释', async () => {
72
+ const gitignoreContent = `
73
+ # 这是一个注释
74
+
75
+ node_modules/
76
+
77
+ # 另一个注释
78
+ *.log
79
+ `;
80
+ await fs.writeFile(gitignorePath, gitignoreContent);
81
+
82
+ const processor = new GitIgnoreProcessor(testDir);
83
+ await processor.loadFromFile('.gitignore');
84
+
85
+ const patterns = processor.getPatterns();
86
+ assert.deepStrictEqual(patterns, ['**/node_modules', '*.log']);
87
+ });
88
+
89
+ it('应该跳过否定模式', async () => {
90
+ const gitignoreContent = `
91
+ node_modules/
92
+ !node_modules/special/
93
+ *.log
94
+ `;
95
+ await fs.writeFile(gitignorePath, gitignoreContent);
96
+
97
+ const processor = new GitIgnoreProcessor(testDir);
98
+ await processor.loadFromFile('.gitignore');
99
+
100
+ const patterns = processor.getPatterns();
101
+ assert.deepStrictEqual(patterns, ['**/node_modules', '*.log']);
102
+ });
103
+ });
104
+
105
+ describe('parsePatterns', () => {
106
+ it('应该正确处理目录模式', () => {
107
+ const processor = new GitIgnoreProcessor(testDir);
108
+ const content = `
109
+ node_modules/
110
+ dist/
111
+ `;
112
+ processor['parsePatterns'](content);
113
+
114
+ const patterns = processor.getPatterns();
115
+ assert.deepStrictEqual(patterns, ['**/node_modules', '**/dist']);
116
+ });
117
+
118
+ it('应该正确处理文件扩展名模式', () => {
119
+ const processor = new GitIgnoreProcessor(testDir);
120
+ const content = `
121
+ *.log
122
+ *.tmp
123
+ `;
124
+ processor['parsePatterns'](content);
125
+
126
+ const patterns = processor.getPatterns();
127
+ assert.deepStrictEqual(patterns, ['*.log', '*.tmp']);
128
+ });
129
+
130
+ it('应该处理以/开头的模式', () => {
131
+ const processor = new GitIgnoreProcessor(testDir);
132
+ const content = `
133
+ /node_modules
134
+ /dist
135
+ `;
136
+ processor['parsePatterns'](content);
137
+
138
+ const patterns = processor.getPatterns();
139
+ assert.deepStrictEqual(patterns, ['node_modules', 'dist']);
140
+ });
141
+
142
+ it('应该处理包含通配符的模式', () => {
143
+ const processor = new GitIgnoreProcessor(testDir);
144
+ const content = `
145
+ **/node_modules
146
+ **/.vscode
147
+ `;
148
+ processor['parsePatterns'](content);
149
+
150
+ const patterns = processor.getPatterns();
151
+ assert.deepStrictEqual(patterns, ['**/node_modules', '**/.vscode']);
152
+ });
153
+ });
154
+
155
+ describe('shouldIgnore', () => {
156
+ let processor: GitIgnoreProcessor;
157
+
158
+ beforeEach(() => {
159
+ processor = new GitIgnoreProcessor(testDir);
160
+ });
161
+
162
+ it('应该忽略匹配的文件', () => {
163
+ processor.addPattern('**/*.log');
164
+ processor.addPattern('**/node_modules');
165
+
166
+ const logFile = path.join(testDir, 'app.log');
167
+ const nodeModulesFile = path.join(testDir, 'node_modules', 'package.json');
168
+
169
+ assert.strictEqual(processor.shouldIgnore(logFile), true);
170
+ assert.strictEqual(processor.shouldIgnore(nodeModulesFile), true);
171
+ });
172
+
173
+ it('不应该忽略不匹配的文件', () => {
174
+ processor.addPattern('**/*.log');
175
+ processor.addPattern('**/node_modules');
176
+
177
+ const textFile = path.join(testDir, 'readme.txt');
178
+ const srcFile = path.join(testDir, 'src', 'index.ts');
179
+
180
+ assert.strictEqual(processor.shouldIgnore(textFile), false);
181
+ assert.strictEqual(processor.shouldIgnore(srcFile), false);
182
+ });
183
+
184
+ it('当文件在baseDir之外时不应该忽略', () => {
185
+ processor.addPattern('**/*.log');
186
+
187
+ const outsideFile = path.join('/outside', 'dir', 'app.log');
188
+ assert.strictEqual(processor.shouldIgnore(outsideFile), false);
189
+ });
190
+
191
+ it('应该正确处理点文件', () => {
192
+ processor.addPattern('**/.DS_Store');
193
+ processor.addPattern('**/.vscode');
194
+
195
+ const dsStoreFile = path.join(testDir, '.DS_Store');
196
+ const vscodeFile = path.join(testDir, '.vscode', 'settings.json');
197
+
198
+ assert.strictEqual(processor.shouldIgnore(dsStoreFile), true);
199
+ assert.strictEqual(processor.shouldIgnore(vscodeFile), true);
200
+ });
201
+
202
+ it('应该正确处理目录模式', () => {
203
+ processor.addPattern('node_modules/');
204
+ processor.addPattern('dist/');
205
+
206
+ const nodeModulesFile = path.join(testDir, 'node_modules', 'package.json');
207
+ const distFile = path.join(testDir, 'dist', 'index.js');
208
+ const srcFile = path.join(testDir, 'src', 'index.ts');
209
+
210
+ assert.strictEqual(processor.shouldIgnore(nodeModulesFile), true);
211
+ assert.strictEqual(processor.shouldIgnore(distFile), true);
212
+ assert.strictEqual(processor.shouldIgnore(srcFile), false);
213
+ });
214
+ });
215
+
216
+ describe('addPattern and clearPatterns', () => {
217
+ it('应该能够添加自定义模式', () => {
218
+ const processor = new GitIgnoreProcessor(testDir);
219
+
220
+ processor.addPattern('custom-pattern');
221
+ assert.deepStrictEqual(processor.getPatterns(), ['custom-pattern']);
222
+
223
+ processor.addPattern('another-pattern');
224
+ assert.deepStrictEqual(processor.getPatterns(), ['custom-pattern', 'another-pattern']);
225
+ });
226
+
227
+ it('应该能够清除所有模式', () => {
228
+ const processor = new GitIgnoreProcessor(testDir);
229
+
230
+ processor.addPattern('pattern1');
231
+ processor.addPattern('pattern2');
232
+ assert.strictEqual(processor.getPatterns().length, 2);
233
+
234
+ processor.clearPatterns();
235
+ assert.deepStrictEqual(processor.getPatterns(), []);
236
+ });
237
+ });
238
+
239
+ describe('createGitIgnoreProcessor', () => {
240
+ it('应该创建处理器并加载.gitignore文件', async () => {
241
+ const gitignoreContent = `
242
+ node_modules/
243
+ *.log
244
+ `;
245
+ await fs.writeFile(gitignorePath, gitignoreContent);
246
+
247
+ const processor = await createGitIgnoreProcessor(testDir);
248
+ const patterns = processor.getPatterns();
249
+
250
+ assert.deepStrictEqual(patterns, ['**/node_modules', '*.log']);
251
+ });
252
+ });
253
+ });
package/src/markdown.ts CHANGED
@@ -3,7 +3,6 @@ import hljs from 'highlight.js';
3
3
  import { FileInfo, MarkdownProcessor } from './types';
4
4
  import * as fs from 'fs/promises';
5
5
  import * as path from 'path';
6
- import * as yaml from 'yaml';
7
6
  import { GitIgnoreProcessor } from './gitignore';
8
7
 
9
8
  // 配置 marked 使用 highlight.js 进行代码高亮
@@ -41,30 +40,6 @@ export class MarkdownConverter {
41
40
  this.processors.push(processor);
42
41
  }
43
42
 
44
- /**
45
- * 解析 YAML frontmatter
46
- */
47
- private parseFrontmatter(content: string): {
48
- metadata: Record<string, any>;
49
- content: string;
50
- } {
51
- const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n/;
52
- const match = content.match(frontmatterRegex);
53
-
54
- if (!match) {
55
- return { metadata: {}, content };
56
- }
57
-
58
- try {
59
- const metadata = yaml.parse(match[1]) || {};
60
- const remainingContent = content.slice(match[0].length);
61
- return { metadata, content: remainingContent };
62
- } catch (error) {
63
- console.warn('Failed to parse frontmatter:', error);
64
- return { metadata: {}, content };
65
- }
66
- }
67
-
68
43
  /**
69
44
  * 从内容中提取标题
70
45
  */
@@ -88,7 +63,7 @@ export class MarkdownConverter {
88
63
  * 转换 Markdown 文件
89
64
  */
90
65
  async convert(fileInfo: FileInfo): Promise<FileInfo> {
91
- let { content, metadata } = this.parseFrontmatter(fileInfo.content);
66
+ let content = fileInfo.content;
92
67
 
93
68
  // 应用前置处理器
94
69
  for (const processor of this.processors) {
@@ -107,16 +82,14 @@ export class MarkdownConverter {
107
82
  }
108
83
  }
109
84
 
110
- // 提取标题(如果 metadata 中没有)
111
- if (!metadata.title) {
112
- metadata.title = this.extractTitle(content);
113
- }
85
+ // 提取标题
86
+ const title = this.extractTitle(content);
114
87
 
115
88
  return {
116
89
  ...fileInfo,
117
90
  content,
118
91
  html,
119
- metadata,
92
+ metadata: { title }, // 只保留标题作为 metadata
120
93
  };
121
94
  }
122
95
 
package/src/navigation.ts CHANGED
@@ -47,8 +47,11 @@ export class NavigationGenerator {
47
47
  // 如果是 Markdown 文件,移除扩展名
48
48
  const displayName = isMarkdownFile ? part.replace(/\.md$/, '') : part;
49
49
 
50
- // 生成标题(使用文件名或 metadata 中的标题)
51
- const title = file.metadata?.title || this.formatTitle(displayName);
50
+ // 生成标题(对于 Markdown 文件优先使用提取的标题)
51
+ const title =
52
+ isMarkdownFile && file.metadata?.title
53
+ ? file.metadata.title
54
+ : this.formatTitle(displayName);
52
55
 
53
56
  // 生成路径
54
57
  const rawPath = isMarkdownFile
@@ -133,7 +136,7 @@ export class NavigationGenerator {
133
136
  generateFlat(files: FileInfo[]): NavigationItem[] {
134
137
  return files
135
138
  .map(file => {
136
- const title = file.metadata?.title || this.formatTitle(file.name);
139
+ const title = file.metadata?.title || this.formatTitle(file.name); // 优先使用提取的标题
137
140
  const rawPath = `/${file.relativePath.replace(/\.md$/, '.html')}`;
138
141
  const itemPath = this.generatePath(rawPath);
139
142
 
@@ -207,10 +210,7 @@ export class NavigationGenerator {
207
210
  const urls = files
208
211
  .map(file => {
209
212
  const path = `/${file.relativePath.replace(/\.md$/, '.html')}`;
210
- const lastmod =
211
- file.metadata?.last_modified ||
212
- file.metadata?.date ||
213
- new Date().toISOString().split('T')[0];
213
+ const lastmod = new Date().toISOString().split('T')[0];
214
214
 
215
215
  return ` <url>
216
216
  <loc>${effectiveBaseUrl}${path}</loc>
package/src/template.ts CHANGED
@@ -252,12 +252,6 @@ export class TemplateEngine {
252
252
  <main class="content">
253
253
  <header class="content-header">
254
254
  <h1>{{title}}</h1>
255
- {{#if metadata}}
256
- <div class="meta">
257
- {{#if metadata.author}}By {{metadata.author}} • {{/if}}
258
- {{#if metadata.date}}{{metadata.date}}{{/if}}
259
- </div>
260
- {{/if}}
261
255
  </header>
262
256
 
263
257
  <article class="content-body">
@@ -308,28 +302,9 @@ export class TemplateEngine {
308
302
  const navigationHtml = this.generateNavigationHtml(data.navigation, data.currentPath);
309
303
  result = result.replace('{{navigation}}', navigationHtml);
310
304
 
311
- // 替换其他变量
312
- result = result.replace('{{title}}', data.title || 'Untitled');
313
- result = result.replace('{{{content}}}', data.content || '');
314
-
315
- // 处理 metadata
316
- if (data.metadata) {
317
- // 简单的 metadata 替换逻辑
318
- for (const [key, value] of Object.entries(data.metadata)) {
319
- const placeholder = `{{metadata.${key}}}`;
320
- if (result.includes(placeholder)) {
321
- result = result.replace(new RegExp(placeholder, 'g'), String(value));
322
- }
323
- }
324
-
325
- // 替换 metadata 对象为 JSON(如果需要)
326
- if (result.includes('{{metadata}}')) {
327
- result = result.replace('{{metadata}}', JSON.stringify(data.metadata));
328
- }
329
- }
330
-
331
- // 移除未使用的 metadata 占位符
332
- result = result.replace(/\{\{metadata\.[^}]*\}\}/g, '');
305
+ // 替换其他变量 - 使用全局替换
306
+ result = result.replace(/{{title}}/g, data.title || 'Untitled');
307
+ result = result.replace(/{{{content}}}/g, data.content || '');
333
308
 
334
309
  return result;
335
310
  }
@@ -359,7 +334,7 @@ export class TemplateEngine {
359
334
  */
360
335
  generateTemplateData(fileInfo: FileInfo, navigation: NavigationItem[]): TemplateData {
361
336
  return {
362
- title: fileInfo.metadata?.title || fileInfo.name,
337
+ title: fileInfo.metadata?.title || fileInfo.name, // 优先使用提取的标题,如果没有则使用文件名
363
338
  content: fileInfo.html || '',
364
339
  navigation,
365
340
  metadata: fileInfo.metadata,
package/src/types.ts CHANGED
@@ -17,7 +17,7 @@ export interface FileInfo {
17
17
  ext: string;
18
18
  content: string;
19
19
  html?: string;
20
- metadata?: Record<string, any>;
20
+ metadata?: { title: string }; // 简化,只保留标题
21
21
  }
22
22
 
23
23
  export interface NavigationItem {
@@ -30,7 +30,7 @@ export interface TemplateData {
30
30
  title: string;
31
31
  content: string;
32
32
  navigation: NavigationItem[];
33
- metadata?: Record<string, any>;
33
+ metadata?: { title: string }; // 简化,只保留标题
34
34
  currentPath?: string;
35
35
  }
36
36