zengen 0.1.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.
@@ -0,0 +1,298 @@
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.ZenBuilder = void 0;
37
+ const markdown_1 = require("./markdown");
38
+ const template_1 = require("./template");
39
+ const navigation_1 = require("./navigation");
40
+ const fs = __importStar(require("fs/promises"));
41
+ const path = __importStar(require("path"));
42
+ const chokidar = __importStar(require("chokidar"));
43
+ class ZenBuilder {
44
+ constructor(config = {}) {
45
+ this.config = {};
46
+ this.config = config;
47
+ this.markdownConverter = new markdown_1.MarkdownConverter(config.processors || []);
48
+ this.templateEngine = new template_1.TemplateEngine();
49
+ this.navigationGenerator = new navigation_1.NavigationGenerator();
50
+ }
51
+ /**
52
+ * 构建文档站点
53
+ */
54
+ async build(options) {
55
+ const startTime = Date.now();
56
+ const { srcDir, outDir, template, verbose = false } = options;
57
+ if (verbose) {
58
+ console.log(`🚀 Starting ZEN build...`);
59
+ console.log(`📁 Source: ${srcDir}`);
60
+ console.log(`📁 Output: ${outDir}`);
61
+ }
62
+ // 验证源目录
63
+ try {
64
+ await fs.access(srcDir);
65
+ }
66
+ catch (error) {
67
+ throw new Error(`Source directory does not exist: ${srcDir}`);
68
+ }
69
+ // 确保输出目录存在
70
+ await fs.mkdir(outDir, { recursive: true });
71
+ // 读取并转换 Markdown 文件
72
+ if (verbose)
73
+ console.log(`📄 Reading Markdown files...`);
74
+ const files = await this.markdownConverter.convertDirectory(srcDir);
75
+ if (files.length === 0) {
76
+ console.warn(`⚠️ No Markdown files found in ${srcDir}`);
77
+ return;
78
+ }
79
+ if (verbose)
80
+ console.log(`✅ Found ${files.length} Markdown files`);
81
+ // 生成导航
82
+ if (verbose)
83
+ console.log(`🗺️ Generating navigation...`);
84
+ const navigation = this.navigationGenerator.generate(files);
85
+ // 处理每个文件
86
+ if (verbose)
87
+ console.log(`⚡ Processing files...`);
88
+ let processedCount = 0;
89
+ for (const file of files) {
90
+ try {
91
+ // 生成模板数据
92
+ const templateData = this.templateEngine.generateTemplateData(file, navigation);
93
+ // 渲染模板
94
+ const html = await this.templateEngine.render(templateData, template);
95
+ // 生成输出路径
96
+ const outputPath = this.templateEngine.getOutputPath(file, outDir);
97
+ // 保存文件
98
+ await this.templateEngine.saveToFile(html, outputPath);
99
+ processedCount++;
100
+ if (verbose && processedCount % 10 === 0) {
101
+ console.log(` Processed ${processedCount}/${files.length} files...`);
102
+ }
103
+ }
104
+ catch (error) {
105
+ console.error(`❌ Failed to process ${file.relativePath}:`, error);
106
+ }
107
+ }
108
+ // 生成站点地图
109
+ if (verbose)
110
+ console.log(`🗺️ Generating sitemap...`);
111
+ await this.generateSitemap(files, outDir);
112
+ // 生成导航 JSON 文件
113
+ if (verbose)
114
+ console.log(`📊 Generating navigation data...`);
115
+ await this.generateNavigationJson(files, outDir);
116
+ // 复制静态资源(如果存在)
117
+ await this.copyStaticAssets(srcDir, outDir);
118
+ const duration = Date.now() - startTime;
119
+ if (verbose) {
120
+ console.log(`🎉 Build completed!`);
121
+ console.log(` Files processed: ${processedCount}/${files.length}`);
122
+ console.log(` Duration: ${duration}ms`);
123
+ console.log(` Output directory: ${outDir}`);
124
+ }
125
+ else {
126
+ console.log(`✅ Built ${processedCount} files to ${outDir} in ${duration}ms`);
127
+ }
128
+ }
129
+ /**
130
+ * 监听文件变化并自动重建
131
+ */
132
+ async watch(options) {
133
+ const { srcDir, outDir, template, verbose = false } = options;
134
+ console.log(`👀 Watching for changes in ${srcDir}...`);
135
+ console.log(`Press Ctrl+C to stop watching`);
136
+ // 初始构建
137
+ await this.build(options);
138
+ // 设置文件监听
139
+ const watcher = chokidar.watch(srcDir, {
140
+ ignored: /(^|[\/\\])\../, // 忽略隐藏文件
141
+ persistent: true,
142
+ ignoreInitial: true
143
+ });
144
+ let isBuilding = false;
145
+ let buildQueue = [];
146
+ const debouncedBuild = async () => {
147
+ if (isBuilding) {
148
+ return;
149
+ }
150
+ isBuilding = true;
151
+ const changedFiles = [...buildQueue];
152
+ buildQueue = [];
153
+ try {
154
+ if (verbose) {
155
+ console.log(`\n🔄 Rebuilding due to changes in: ${changedFiles.join(', ')}`);
156
+ }
157
+ else {
158
+ console.log(`\n🔄 Rebuilding...`);
159
+ }
160
+ await this.build(options);
161
+ console.log(`✅ Rebuild complete. Watching for changes...`);
162
+ }
163
+ catch (error) {
164
+ console.error(`❌ Rebuild failed:`, error);
165
+ }
166
+ finally {
167
+ isBuilding = false;
168
+ // 如果队列中有新文件,立即处理
169
+ if (buildQueue.length > 0) {
170
+ setTimeout(debouncedBuild, 100);
171
+ }
172
+ }
173
+ };
174
+ watcher
175
+ .on('add', (filePath) => {
176
+ if (filePath.endsWith('.md')) {
177
+ if (verbose)
178
+ console.log(`📄 File added: ${filePath}`);
179
+ buildQueue.push(filePath);
180
+ setTimeout(debouncedBuild, 300);
181
+ }
182
+ })
183
+ .on('change', (filePath) => {
184
+ if (filePath.endsWith('.md')) {
185
+ if (verbose)
186
+ console.log(`📄 File changed: ${filePath}`);
187
+ buildQueue.push(filePath);
188
+ setTimeout(debouncedBuild, 300);
189
+ }
190
+ })
191
+ .on('unlink', (filePath) => {
192
+ if (filePath.endsWith('.md')) {
193
+ if (verbose)
194
+ console.log(`📄 File removed: ${filePath}`);
195
+ buildQueue.push(filePath);
196
+ setTimeout(debouncedBuild, 300);
197
+ }
198
+ })
199
+ .on('error', (error) => {
200
+ console.error(`❌ Watcher error:`, error);
201
+ });
202
+ // 处理退出信号
203
+ process.on('SIGINT', () => {
204
+ console.log(`\n👋 Stopping watcher...`);
205
+ watcher.close();
206
+ process.exit(0);
207
+ });
208
+ }
209
+ /**
210
+ * 生成站点地图
211
+ */
212
+ async generateSitemap(files, outDir) {
213
+ try {
214
+ const sitemapXml = this.navigationGenerator.generateSitemap(files);
215
+ const sitemapPath = path.join(outDir, 'sitemap.xml');
216
+ await fs.writeFile(sitemapPath, sitemapXml, 'utf-8');
217
+ }
218
+ catch (error) {
219
+ console.warn(`⚠️ Failed to generate sitemap:`, error);
220
+ }
221
+ }
222
+ /**
223
+ * 生成导航 JSON 文件
224
+ */
225
+ async generateNavigationJson(files, outDir) {
226
+ try {
227
+ const navigationJson = this.navigationGenerator.generateJsonNavigation(files);
228
+ const navPath = path.join(outDir, 'navigation.json');
229
+ await fs.writeFile(navPath, navigationJson, 'utf-8');
230
+ }
231
+ catch (error) {
232
+ console.warn(`⚠️ Failed to generate navigation JSON:`, error);
233
+ }
234
+ }
235
+ /**
236
+ * 复制静态资源
237
+ */
238
+ async copyStaticAssets(srcDir, outDir) {
239
+ const staticDir = path.join(srcDir, 'static');
240
+ try {
241
+ await fs.access(staticDir);
242
+ // 简单的递归复制
243
+ async function copyDir(source, target) {
244
+ await fs.mkdir(target, { recursive: true });
245
+ const entries = await fs.readdir(source, { withFileTypes: true });
246
+ for (const entry of entries) {
247
+ const srcPath = path.join(source, entry.name);
248
+ const destPath = path.join(target, entry.name);
249
+ if (entry.isDirectory()) {
250
+ await copyDir(srcPath, destPath);
251
+ }
252
+ else {
253
+ await fs.copyFile(srcPath, destPath);
254
+ }
255
+ }
256
+ }
257
+ await copyDir(staticDir, path.join(outDir, 'static'));
258
+ }
259
+ catch (error) {
260
+ // 静态目录不存在是正常的,忽略错误
261
+ }
262
+ }
263
+ /**
264
+ * 清理输出目录
265
+ */
266
+ async clean(outDir) {
267
+ try {
268
+ await fs.rm(outDir, { recursive: true, force: true });
269
+ console.log(`🧹 Cleaned output directory: ${outDir}`);
270
+ }
271
+ catch (error) {
272
+ console.error(`❌ Failed to clean output directory:`, error);
273
+ }
274
+ }
275
+ /**
276
+ * 验证配置
277
+ */
278
+ validateConfig(config) {
279
+ const errors = [];
280
+ if (config.srcDir && !path.isAbsolute(config.srcDir)) {
281
+ errors.push('srcDir must be an absolute path');
282
+ }
283
+ if (config.outDir && !path.isAbsolute(config.outDir)) {
284
+ errors.push('outDir must be an absolute path');
285
+ }
286
+ if (config.i18n) {
287
+ if (!config.i18n.sourceLang) {
288
+ errors.push('i18n.sourceLang is required');
289
+ }
290
+ if (!config.i18n.targetLangs || config.i18n.targetLangs.length === 0) {
291
+ errors.push('i18n.targetLangs must have at least one language');
292
+ }
293
+ }
294
+ return errors;
295
+ }
296
+ }
297
+ exports.ZenBuilder = ZenBuilder;
298
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,297 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const commander_1 = require("commander");
38
+ const builder_1 = require("./builder");
39
+ const path = __importStar(require("path"));
40
+ const fs = __importStar(require("fs/promises"));
41
+ const program = new commander_1.Command();
42
+ program
43
+ .name('zengen')
44
+ .description('ZEN - A minimalist Markdown documentation site builder')
45
+ .version('0.1.0');
46
+ // 构建命令
47
+ program
48
+ .command('build')
49
+ .description('Build documentation site from Markdown files')
50
+ .argument('<src-dir>', 'Source directory containing Markdown files')
51
+ .option('-o, --out <dir>', 'Output directory for generated HTML', 'dist')
52
+ .option('-t, --template <file>', 'Custom template file')
53
+ .option('-w, --watch', 'Watch for changes and rebuild automatically')
54
+ .option('-v, --verbose', 'Show detailed output')
55
+ .option('-c, --config <file>', 'Configuration file')
56
+ .option('--clean', 'Clean output directory before building')
57
+ .action(async (srcDir, options) => {
58
+ try {
59
+ // 加载配置文件
60
+ let config = {};
61
+ if (options.config) {
62
+ try {
63
+ const configPath = path.resolve(options.config);
64
+ const configContent = await fs.readFile(configPath, 'utf-8');
65
+ config = JSON.parse(configContent);
66
+ }
67
+ catch (error) {
68
+ console.error(`❌ Failed to load config file:`, error);
69
+ process.exit(1);
70
+ }
71
+ }
72
+ // 合并命令行参数和配置
73
+ const buildOptions = {
74
+ srcDir: path.resolve(srcDir),
75
+ outDir: path.resolve(options.out),
76
+ template: options.template ? path.resolve(options.template) : undefined,
77
+ watch: options.watch,
78
+ verbose: options.verbose
79
+ };
80
+ const builder = new builder_1.ZenBuilder(config);
81
+ // 验证配置
82
+ const errors = builder.validateConfig(config);
83
+ if (errors.length > 0) {
84
+ console.error('❌ Configuration errors:');
85
+ errors.forEach(error => console.error(` - ${error}`));
86
+ process.exit(1);
87
+ }
88
+ // 清理输出目录
89
+ if (options.clean) {
90
+ await builder.clean(buildOptions.outDir);
91
+ }
92
+ // 构建或监听
93
+ if (options.watch) {
94
+ await builder.watch(buildOptions);
95
+ }
96
+ else {
97
+ await builder.build(buildOptions);
98
+ }
99
+ }
100
+ catch (error) {
101
+ console.error('❌ Build failed:', error);
102
+ process.exit(1);
103
+ }
104
+ });
105
+ // 清理命令
106
+ program
107
+ .command('clean')
108
+ .description('Clean output directory')
109
+ .argument('<dir>', 'Directory to clean')
110
+ .action(async (dir) => {
111
+ try {
112
+ const builder = new builder_1.ZenBuilder();
113
+ await builder.clean(path.resolve(dir));
114
+ }
115
+ catch (error) {
116
+ console.error('❌ Clean failed:', error);
117
+ process.exit(1);
118
+ }
119
+ });
120
+ // 初始化命令
121
+ program
122
+ .command('init')
123
+ .description('Initialize a new ZEN project')
124
+ .option('-d, --dir <directory>', 'Target directory', '.')
125
+ .action(async (options) => {
126
+ try {
127
+ const targetDir = path.resolve(options.dir);
128
+ // 创建目录结构
129
+ await fs.mkdir(path.join(targetDir, 'docs'), { recursive: true });
130
+ await fs.mkdir(path.join(targetDir, 'static'), { recursive: true });
131
+ // 创建示例文档
132
+ const exampleDoc = `# Welcome to ZEN
133
+
134
+ This is an example documentation page generated by ZEN.
135
+
136
+ ## Getting Started
137
+
138
+ 1. Write your documentation in Markdown format
139
+ 2. Run \`zengen build docs --out dist\`
140
+ 3. Open the generated HTML files in your browser
141
+
142
+ ## Features
143
+
144
+ - **Minimal configuration**: Focus on writing, not configuration
145
+ - **Smart navigation**: Automatic navigation generation
146
+ - **Beautiful templates**: Clean, responsive design
147
+ - **Code highlighting**: Syntax highlighting for code blocks
148
+
149
+ ## Example Code
150
+
151
+ \`\`\`javascript
152
+ // This is a JavaScript example
153
+ console.log('Hello ZEN!');
154
+ \`\`\`
155
+
156
+ ---
157
+
158
+ *Happy documenting!*`;
159
+ await fs.writeFile(path.join(targetDir, 'docs', 'index.md'), exampleDoc, 'utf-8');
160
+ // 创建配置文件
161
+ const config = {
162
+ srcDir: './docs',
163
+ outDir: './dist',
164
+ template: undefined,
165
+ i18n: {
166
+ sourceLang: 'en-US',
167
+ targetLangs: ['zh-CN', 'ja-JP']
168
+ }
169
+ };
170
+ await fs.writeFile(path.join(targetDir, 'zen.config.json'), JSON.stringify(config, null, 2), 'utf-8');
171
+ // 创建 package.json 脚本(如果不存在)
172
+ const packageJsonPath = path.join(targetDir, 'package.json');
173
+ try {
174
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
175
+ if (!packageJson.scripts) {
176
+ packageJson.scripts = {};
177
+ }
178
+ packageJson.scripts.build = 'zengen build docs --out dist';
179
+ packageJson.scripts['build:watch'] = 'zengen build docs --out dist --watch';
180
+ packageJson.scripts.clean = 'zengen clean dist';
181
+ await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8');
182
+ }
183
+ catch (error) {
184
+ // package.json 不存在,创建简单的版本
185
+ const simplePackageJson = {
186
+ name: 'zen-docs',
187
+ version: '1.0.0',
188
+ scripts: {
189
+ build: 'zengen build docs --out dist',
190
+ 'build:watch': 'zengen build docs --out dist --watch',
191
+ clean: 'zengen clean dist'
192
+ }
193
+ };
194
+ await fs.writeFile(packageJsonPath, JSON.stringify(simplePackageJson, null, 2), 'utf-8');
195
+ }
196
+ console.log(`
197
+ 🎉 ZEN project initialized successfully!
198
+
199
+ Next steps:
200
+ 1. Add your Markdown files to the 'docs' directory
201
+ 2. Run 'npm run build' to generate the site
202
+ 3. Run 'npm run build:watch' for development with auto-reload
203
+
204
+ Project structure:
205
+ ${targetDir}/
206
+ ├── docs/ # Your documentation files
207
+ │ └── index.md # Example document
208
+ ├── static/ # Static assets (images, CSS, JS)
209
+ ├── zen.config.json # Configuration file
210
+ └── package.json # npm scripts
211
+
212
+ For more information, visit: https://github.com/yourusername/zen
213
+ `);
214
+ }
215
+ catch (error) {
216
+ console.error('❌ Initialization failed:', error);
217
+ process.exit(1);
218
+ }
219
+ });
220
+ // 信息命令
221
+ program
222
+ .command('info')
223
+ .description('Show information about ZEN')
224
+ .action(() => {
225
+ console.log(`
226
+ 🤖 ZEN - A minimalist Markdown documentation site builder
227
+
228
+ Version: 0.1.0
229
+ Description: Build beautiful documentation sites from Markdown files
230
+
231
+ Features:
232
+ • Minimal configuration required
233
+ • Smart navigation generation
234
+ • Beautiful, responsive templates
235
+ • Code syntax highlighting
236
+ • Watch mode for development
237
+ • Sitemap generation
238
+ • Static asset support
239
+
240
+ Commands:
241
+ build Build documentation site
242
+ clean Clean output directory
243
+ init Initialize new project
244
+ info Show this information
245
+
246
+ Examples:
247
+ $ zengen build ./docs --out ./dist
248
+ $ zengen build ./docs --out ./dist --watch
249
+ $ zengen init --dir ./my-docs
250
+ $ zengen clean ./dist
251
+
252
+ For more help, run: zengen --help
253
+ `);
254
+ });
255
+ // 默认命令(兼容旧格式)
256
+ program
257
+ .argument('[src-dir]', 'Source directory')
258
+ .option('-o, --out <dir>', 'Output directory')
259
+ .option('-t, --template <file>', 'Custom template file')
260
+ .option('-w, --watch', 'Watch for changes')
261
+ .option('-v, --verbose', 'Show detailed output')
262
+ .action(async (srcDir, options) => {
263
+ if (!srcDir) {
264
+ program.help();
265
+ return;
266
+ }
267
+ try {
268
+ const builder = new builder_1.ZenBuilder();
269
+ const buildOptions = {
270
+ srcDir: path.resolve(srcDir),
271
+ outDir: path.resolve(options.out || 'dist'),
272
+ template: options.template ? path.resolve(options.template) : undefined,
273
+ watch: options.watch,
274
+ verbose: options.verbose
275
+ };
276
+ if (options.watch) {
277
+ await builder.watch(buildOptions);
278
+ }
279
+ else {
280
+ await builder.build(buildOptions);
281
+ }
282
+ }
283
+ catch (error) {
284
+ console.error('❌ Build failed:', error);
285
+ process.exit(1);
286
+ }
287
+ });
288
+ // 错误处理
289
+ program.showHelpAfterError();
290
+ program.showSuggestionAfterError();
291
+ // 解析命令行参数
292
+ program.parse(process.argv);
293
+ // 如果没有参数,显示帮助
294
+ if (process.argv.length <= 2) {
295
+ program.help();
296
+ }
297
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export { ZenBuilder } from './builder';
2
+ export { MarkdownConverter } from './markdown';
3
+ export { TemplateEngine } from './template';
4
+ export { NavigationGenerator } from './navigation';
5
+ export type { BuildOptions, FileInfo, NavigationItem, TemplateData, MarkdownProcessor, ZenConfig } from './types';
6
+ /**
7
+ * ZEN 文档构建工具
8
+ *
9
+ * 一个极简主义的 Markdown 文档站点生成器
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { ZenBuilder } from 'zengen';
14
+ *
15
+ * const builder = new ZenBuilder();
16
+ * await builder.build({
17
+ * srcDir: './docs',
18
+ * outDir: './dist'
19
+ * });
20
+ * ```
21
+ */
22
+ import { ZenBuilder } from './builder';
23
+ import { MarkdownConverter } from './markdown';
24
+ import { TemplateEngine } from './template';
25
+ import { NavigationGenerator } from './navigation';
26
+ declare const _default: {
27
+ Builder: typeof ZenBuilder;
28
+ MarkdownConverter: typeof MarkdownConverter;
29
+ TemplateEngine: typeof TemplateEngine;
30
+ NavigationGenerator: typeof NavigationGenerator;
31
+ };
32
+ export default _default;
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACV,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;;;;;;;AAEnD,wBAKE"}