zengen 0.1.35 → 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.
- package/.github/workflows/bump-version.yml +112 -0
- package/.github/workflows/ci.yml +2 -2
- package/.github/workflows/pages.yml +1 -7
- package/.zen/meta.json +155 -0
- package/.zen/src/en-US/01d04f7c17b4a541ead9d759d877b30b403e15b849182a49eb1f62bd29ecd18c.md +120 -0
- package/.zen/src/en-US/1b798c44a4f353e47296ca83d5905e37e6aba3e90bbd9bc3b3d34fc12059a2ca.md +75 -0
- package/.zen/src/en-US/1e96be58d76c60056b708eb5bd8b8b81d7b5845d9cfe0b879d85068a5f11df3a.md +189 -0
- package/.zen/src/en-US/5ec990146b35e00de2630559126ee07f7cdcddeb23b0e8cab3d85b4181353e26.md +53 -0
- package/.zen/src/en-US/6124ea88edec5bde737b26b21f71ecfeffe4e73151784856edf813ee231a4baa.md +11 -0
- package/.zen/src/en-US/80ae9bed74fc6348a7c1fe9f33e86b65f5d919169721f77bcf0e1bc29fbdb4f9.md +61 -0
- package/.zen/src/en-US/f0c2799126931ccd113a0c45b1e623870b0d4f4f400becf6dd877da8f1011517.md +41 -0
- package/.zen/src/en-US/fdfca9b960d0eaa8b2b96fe988ead7481d2c0b16f66ebc94fb477139b4178cdc.md +65 -0
- package/.zen/src/zh-Hans/01d04f7c17b4a541ead9d759d877b30b403e15b849182a49eb1f62bd29ecd18c.md +120 -0
- package/.zen/src/zh-Hans/1b798c44a4f353e47296ca83d5905e37e6aba3e90bbd9bc3b3d34fc12059a2ca.md +77 -0
- package/.zen/src/zh-Hans/1e96be58d76c60056b708eb5bd8b8b81d7b5845d9cfe0b879d85068a5f11df3a.md +189 -0
- package/.zen/src/zh-Hans/5ec990146b35e00de2630559126ee07f7cdcddeb23b0e8cab3d85b4181353e26.md +55 -0
- package/.zen/src/zh-Hans/6124ea88edec5bde737b26b21f71ecfeffe4e73151784856edf813ee231a4baa.md +1 -0
- package/.zen/src/zh-Hans/6ad8db715a1b60613fe934fefb29fa981ecad9b63145593accff144d73b44bde.md +175 -0
- package/.zen/src/zh-Hans/80ae9bed74fc6348a7c1fe9f33e86b65f5d919169721f77bcf0e1bc29fbdb4f9.md +63 -0
- package/.zen/src/zh-Hans/a1580f71c6c6c1ff4a314be72d410a8507af2f087d56360c7f5048d349c21953.md +48 -0
- package/.zen/src/zh-Hans/d49012f98c4367b34034063400e2f7826bf0615952210c82396920172d468e2c.md +107 -0
- package/.zen/src/zh-Hans/f0c2799126931ccd113a0c45b1e623870b0d4f4f400becf6dd877da8f1011517.md +41 -0
- package/.zen/src/zh-Hans/fdfca9b960d0eaa8b2b96fe988ead7481d2c0b16f66ebc94fb477139b4178cdc.md +65 -0
- package/assets/templates/default/layout.html +274 -0
- package/dist/ai/extractMetadataFromMarkdown.d.ts +8 -0
- package/dist/ai/extractMetadataFromMarkdown.d.ts.map +1 -0
- package/dist/ai/extractMetadataFromMarkdown.js +88 -0
- package/dist/ai/extractMetadataFromMarkdown.js.map +1 -0
- package/dist/ai/translateMarkdown.d.ts +8 -0
- package/dist/ai/translateMarkdown.d.ts.map +1 -0
- package/dist/ai/translateMarkdown.js +29 -0
- package/dist/ai/translateMarkdown.js.map +1 -0
- package/dist/build/pipeline.d.ts +6 -0
- package/dist/build/pipeline.d.ts.map +1 -0
- package/dist/build/pipeline.js +218 -0
- package/dist/build/pipeline.js.map +1 -0
- package/dist/cli.js +17 -83
- package/dist/cli.js.map +1 -1
- package/dist/findEntries.d.ts +10 -0
- package/dist/findEntries.d.ts.map +1 -0
- package/dist/findEntries.js +38 -0
- package/dist/findEntries.js.map +1 -0
- package/dist/index.d.ts +1 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -35
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +14 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +78 -0
- package/dist/metadata.js.map +1 -0
- package/dist/paths.d.ts +6 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +10 -0
- package/dist/paths.js.map +1 -0
- package/dist/process/extractMetadataByAI.d.ts +5 -0
- package/dist/process/extractMetadataByAI.d.ts.map +1 -0
- package/dist/process/extractMetadataByAI.js +31 -0
- package/dist/process/extractMetadataByAI.js.map +1 -0
- package/dist/process/template.d.ts +5 -0
- package/dist/process/template.d.ts.map +1 -0
- package/dist/process/template.js +188 -0
- package/dist/process/template.js.map +1 -0
- package/dist/scan/files.d.ts +7 -0
- package/dist/scan/files.d.ts.map +1 -0
- package/dist/scan/files.js +54 -0
- package/dist/scan/files.js.map +1 -0
- package/dist/services/openai.d.ts +41 -0
- package/dist/services/openai.d.ts.map +1 -0
- package/dist/services/openai.js +54 -0
- package/dist/services/openai.js.map +1 -0
- package/dist/types.d.ts +26 -46
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/convertMarkdownToHtml.d.ts +7 -0
- package/dist/utils/convertMarkdownToHtml.d.ts.map +1 -0
- package/dist/utils/convertMarkdownToHtml.js +39 -0
- package/dist/utils/convertMarkdownToHtml.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +6 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +22 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/docs/advanced-usage.md +39 -0
- package/docs/deployment/github-pages.md +1 -2
- package/docs/getting-started.md +26 -0
- package/docs/guides/best-practices.md +4 -117
- package/docs/guides/config.md +0 -238
- package/package.json +5 -2
- package/src/ai/extractMetadataFromMarkdown.ts +95 -0
- package/src/ai/translateMarkdown.ts +29 -0
- package/src/build/pipeline.ts +211 -0
- package/src/cli.ts +18 -94
- package/src/findEntries.ts +37 -0
- package/src/index.ts +1 -40
- package/src/metadata.ts +44 -0
- package/src/paths.ts +7 -0
- package/src/process/extractMetadataByAI.ts +29 -0
- package/src/process/template.ts +201 -0
- package/src/scan/files.ts +17 -0
- package/src/services/openai.ts +92 -0
- package/src/types.ts +29 -47
- package/src/utils/convertMarkdownToHtml.ts +32 -0
- package/src/utils/frontmatter.ts +18 -0
- package/test-multilang.js +44 -0
- package/dist/builder.d.ts +0 -46
- package/dist/builder.d.ts.map +0 -1
- package/dist/builder.js +0 -443
- package/dist/builder.js.map +0 -1
- package/dist/gitignore.d.ts +0 -40
- package/dist/gitignore.d.ts.map +0 -1
- package/dist/gitignore.js +0 -184
- package/dist/gitignore.js.map +0 -1
- package/dist/gitignore.test.d.ts +0 -2
- package/dist/gitignore.test.d.ts.map +0 -1
- package/dist/gitignore.test.js +0 -244
- package/dist/gitignore.test.js.map +0 -1
- package/dist/markdown.d.ts +0 -30
- package/dist/markdown.d.ts.map +0 -1
- package/dist/markdown.js +0 -199
- package/dist/markdown.js.map +0 -1
- package/dist/navigation.d.ts +0 -46
- package/dist/navigation.d.ts.map +0 -1
- package/dist/navigation.js +0 -196
- package/dist/navigation.js.map +0 -1
- package/dist/template.d.ts +0 -29
- package/dist/template.d.ts.map +0 -1
- package/dist/template.js +0 -385
- package/dist/template.js.map +0 -1
- package/docs/ci/github-ci-cd.md +0 -127
- package/docs/guides/api.md +0 -277
- package/src/builder.ts +0 -458
- package/src/gitignore.test.ts +0 -253
- package/src/gitignore.ts +0 -173
- package/src/markdown.ts +0 -184
- package/src/navigation.ts +0 -237
- package/src/template.ts +0 -365
package/dist/cli.js
CHANGED
|
@@ -35,99 +35,37 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
})();
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
37
|
const clipanion_1 = require("clipanion");
|
|
38
|
-
const
|
|
38
|
+
const dotenv_1 = require("dotenv");
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
39
40
|
const path = __importStar(require("path"));
|
|
40
|
-
const
|
|
41
|
-
|
|
41
|
+
const pipeline_1 = require("./build/pipeline");
|
|
42
|
+
// 加载 .env 文件中的环境变量
|
|
43
|
+
(0, dotenv_1.config)();
|
|
42
44
|
// 获取版本号 - 从 package.json 读取
|
|
43
45
|
function getVersion() {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return packageJson.version;
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return '0.1.32';
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// 基础命令类
|
|
54
|
-
class BaseCommand extends clipanion_1.Command {
|
|
55
|
-
async loadConfig(configPath) {
|
|
56
|
-
if (!configPath) {
|
|
57
|
-
return {};
|
|
58
|
-
}
|
|
59
|
-
try {
|
|
60
|
-
const resolvedPath = path.resolve(configPath);
|
|
61
|
-
const configContent = await fs.readFile(resolvedPath, 'utf-8');
|
|
62
|
-
return JSON.parse(configContent);
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
this.context.stderr.write(`❌ Failed to load config file: ${error}\n`);
|
|
66
|
-
throw error;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
getOutDir() {
|
|
70
|
-
const currentDir = process.cwd();
|
|
71
|
-
return path.join(currentDir, '.zen', 'dist');
|
|
72
|
-
}
|
|
46
|
+
const packageJsonPath = path.join(__dirname, '..', 'package.json');
|
|
47
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
48
|
+
return packageJson.version;
|
|
73
49
|
}
|
|
74
50
|
// Build 命令
|
|
75
|
-
class BuildCommand extends
|
|
51
|
+
class BuildCommand extends clipanion_1.Command {
|
|
76
52
|
constructor() {
|
|
77
53
|
super(...arguments);
|
|
78
54
|
this.template = clipanion_1.Option.String('-t,--template');
|
|
79
|
-
this.watch = clipanion_1.Option.Boolean('-w,--watch');
|
|
80
|
-
this.serve = clipanion_1.Option.Boolean('-s,--serve');
|
|
81
|
-
this.port = clipanion_1.Option.String('-p,--port', '3000');
|
|
82
|
-
this.host = clipanion_1.Option.String('--host', 'localhost');
|
|
83
55
|
this.verbose = clipanion_1.Option.Boolean('-v,--verbose');
|
|
84
|
-
this.config = clipanion_1.Option.String('-c,--config');
|
|
85
56
|
this.baseUrl = clipanion_1.Option.String('--base-url');
|
|
86
|
-
this.
|
|
57
|
+
this.lang = clipanion_1.Option.Array('--lang', {
|
|
58
|
+
description: 'Target languages for translation (e.g., en-US, ja-JP)',
|
|
59
|
+
});
|
|
87
60
|
}
|
|
88
61
|
async execute() {
|
|
89
62
|
try {
|
|
90
|
-
|
|
91
|
-
const config = await this.loadConfig(this.config);
|
|
92
|
-
// 强制使用当前目录作为 src 目录,输出到 .zen/dist 目录
|
|
93
|
-
const currentDir = process.cwd();
|
|
94
|
-
const outDir = this.getOutDir();
|
|
95
|
-
// 合并命令行参数和配置
|
|
96
|
-
const buildOptions = {
|
|
97
|
-
srcDir: currentDir,
|
|
98
|
-
outDir: outDir,
|
|
63
|
+
await (0, pipeline_1.buildSite)({
|
|
99
64
|
template: this.template ? path.resolve(this.template) : undefined,
|
|
100
|
-
watch: this.watch,
|
|
101
|
-
serve: this.serve,
|
|
102
|
-
port: parseInt(this.port, 10),
|
|
103
|
-
host: this.host,
|
|
104
65
|
verbose: this.verbose,
|
|
105
|
-
baseUrl: this.baseUrl
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
// 验证配置
|
|
109
|
-
const errors = builder.validateConfig(config);
|
|
110
|
-
if (errors.length > 0) {
|
|
111
|
-
this.context.stderr.write('❌ Configuration errors:\n');
|
|
112
|
-
errors.forEach(error => this.context.stderr.write(` - ${error}\n`));
|
|
113
|
-
return 1;
|
|
114
|
-
}
|
|
115
|
-
// 警告 --serve 选项需要 --watch 选项
|
|
116
|
-
if (this.serve && !this.watch) {
|
|
117
|
-
this.context.stdout.write('⚠️ Warning: --serve option requires --watch option, ignoring --serve\n');
|
|
118
|
-
buildOptions.serve = false;
|
|
119
|
-
}
|
|
120
|
-
// 清理输出目录
|
|
121
|
-
if (this.clean) {
|
|
122
|
-
await builder.clean(buildOptions.outDir);
|
|
123
|
-
}
|
|
124
|
-
// 构建或监听
|
|
125
|
-
if (this.watch) {
|
|
126
|
-
await builder.watch(buildOptions);
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
await builder.build(buildOptions);
|
|
130
|
-
}
|
|
66
|
+
baseUrl: this.baseUrl,
|
|
67
|
+
langs: this.lang,
|
|
68
|
+
});
|
|
131
69
|
return 0;
|
|
132
70
|
}
|
|
133
71
|
catch (error) {
|
|
@@ -145,11 +83,7 @@ BuildCommand.usage = clipanion_1.Command.Usage({
|
|
|
145
83
|
|
|
146
84
|
Examples:
|
|
147
85
|
$ zengen build
|
|
148
|
-
$ zengen build --
|
|
149
|
-
$ zengen build --watch --serve
|
|
150
|
-
$ zengen build --watch --serve --port 8080
|
|
151
|
-
$ zengen build --config zen.config.json
|
|
152
|
-
$ zengen build --clean
|
|
86
|
+
$ zengen build --lang en-US --lang ja-JP (translate to English and Japanese)
|
|
153
87
|
`,
|
|
154
88
|
});
|
|
155
89
|
// 创建 CLI 应用
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAiD;AACjD,mCAAgC;AAChC,uCAAyB;AACzB,2CAA6B;AAC7B,+CAA6C;AAE7C,mBAAmB;AACnB,IAAA,eAAM,GAAE,CAAC;AAET,4BAA4B;AAC5B,SAAS,UAAU;IACjB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,WAAW;AACX,MAAM,YAAa,SAAQ,mBAAO;IAAlC;;QAGE,aAAQ,GAAG,kBAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC1C,YAAO,GAAG,kBAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACzC,YAAO,GAAG,kBAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACtC,SAAI,GAAG,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,uDAAuD;SACrE,CAAC,CAAC;IA6BL,CAAC;IAfC,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,IAAA,oBAAS,EAAC;gBACd,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjE,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,IAAI;aACjB,CAAC,CAAC;YAEH,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC;YACxD,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;;AAnCM,kBAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,AAAd,CAAe;AASpB,kBAAK,GAAG,mBAAO,CAAC,KAAK,CAAC;IAC3B,WAAW,EAAE,mEAAmE;IAChF,OAAO,EAAE;;;;;;;KAOR;CACF,CAAC,AAVU,CAUT;AAmBL,YAAY;AACZ,MAAM,GAAG,GAAG,IAAI,eAAG,CAAC;IAClB,UAAU,EAAE,QAAQ;IACpB,WAAW,EAAE,wDAAwD;IACrE,aAAa,EAAE,UAAU,EAAE;CAC5B,CAAC,CAAC;AAEH,OAAO;AACP,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAE3B,SAAS;AACT,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACjC,GAAG,eAAG,CAAC,cAAc;IACrB,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 使用git命令查找所有Markdown文件
|
|
3
|
+
* 使用git ls-files --others --cached --exclude-standard获取所有文件
|
|
4
|
+
* 然后过滤掉.zen目录和只保留.md文件
|
|
5
|
+
*
|
|
6
|
+
* @param dirPath 要扫描的目录路径
|
|
7
|
+
* @returns Promise<string[]> 返回Markdown文件的相对路径数组
|
|
8
|
+
*/
|
|
9
|
+
export declare const findMarkdownEntries: (dirPath: string) => Promise<string[]>;
|
|
10
|
+
//# sourceMappingURL=findEntries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findEntries.d.ts","sourceRoot":"","sources":["../src/findEntries.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAuB3E,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findMarkdownEntries = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const util_1 = require("util");
|
|
6
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
7
|
+
/**
|
|
8
|
+
* 使用git命令查找所有Markdown文件
|
|
9
|
+
* 使用git ls-files --others --cached --exclude-standard获取所有文件
|
|
10
|
+
* 然后过滤掉.zen目录和只保留.md文件
|
|
11
|
+
*
|
|
12
|
+
* @param dirPath 要扫描的目录路径
|
|
13
|
+
* @returns Promise<string[]> 返回Markdown文件的相对路径数组
|
|
14
|
+
*/
|
|
15
|
+
const findMarkdownEntries = async (dirPath) => {
|
|
16
|
+
try {
|
|
17
|
+
// 使用git命令获取所有文件(包括已跟踪和未跟踪的文件)
|
|
18
|
+
// 在指定的目录下执行git命令
|
|
19
|
+
const { stdout } = await execAsync('git ls-files --others --cached --exclude-standard', {
|
|
20
|
+
cwd: dirPath,
|
|
21
|
+
});
|
|
22
|
+
// 按行分割并过滤
|
|
23
|
+
const files = stdout
|
|
24
|
+
.split('\n')
|
|
25
|
+
.filter(line => line.trim() !== '') // 移除空行
|
|
26
|
+
.filter(file => !file.startsWith('.zen')) // 过滤掉.zen目录下的文件
|
|
27
|
+
.filter(file => file.endsWith('.md')); // 只保留.md文件
|
|
28
|
+
return files;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error('Error finding markdown entries:', error);
|
|
32
|
+
// 如果git命令失败,返回空数组
|
|
33
|
+
// 这可以处理没有git仓库或git不可用的情况
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
exports.findMarkdownEntries = findMarkdownEntries;
|
|
38
|
+
//# sourceMappingURL=findEntries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findEntries.js","sourceRoot":"","sources":["../src/findEntries.ts"],"names":[],"mappings":";;;AAAA,iDAAqC;AACrC,+BAAiC;AAEjC,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAElC;;;;;;;GAOG;AACI,MAAM,mBAAmB,GAAG,KAAK,EAAE,OAAe,EAAqB,EAAE;IAC9E,IAAI,CAAC;QACH,8BAA8B;QAC9B,iBAAiB;QACjB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,mDAAmD,EAAE;YACtF,GAAG,EAAE,OAAO;SACb,CAAC,CAAC;QAEH,UAAU;QACV,MAAM,KAAK,GAAG,MAAM;aACjB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO;aAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB;aACzD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW;QAEpD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QAExD,kBAAkB;QAClB,yBAAyB;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAvBW,QAAA,mBAAmB,uBAuB9B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,33 +1,2 @@
|
|
|
1
|
-
|
|
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;
|
|
1
|
+
import './cli';
|
|
33
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,38 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
var builder_1 = require("./builder");
|
|
5
|
-
Object.defineProperty(exports, "ZenBuilder", { enumerable: true, get: function () { return builder_1.ZenBuilder; } });
|
|
6
|
-
var markdown_1 = require("./markdown");
|
|
7
|
-
Object.defineProperty(exports, "MarkdownConverter", { enumerable: true, get: function () { return markdown_1.MarkdownConverter; } });
|
|
8
|
-
var template_1 = require("./template");
|
|
9
|
-
Object.defineProperty(exports, "TemplateEngine", { enumerable: true, get: function () { return template_1.TemplateEngine; } });
|
|
10
|
-
var navigation_1 = require("./navigation");
|
|
11
|
-
Object.defineProperty(exports, "NavigationGenerator", { enumerable: true, get: function () { return navigation_1.NavigationGenerator; } });
|
|
12
|
-
/**
|
|
13
|
-
* ZEN 文档构建工具
|
|
14
|
-
*
|
|
15
|
-
* 一个极简主义的 Markdown 文档站点生成器
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```typescript
|
|
19
|
-
* import { ZenBuilder } from 'zengen';
|
|
20
|
-
*
|
|
21
|
-
* const builder = new ZenBuilder();
|
|
22
|
-
* await builder.build({
|
|
23
|
-
* srcDir: './docs',
|
|
24
|
-
* outDir: './dist'
|
|
25
|
-
* });
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
const builder_2 = require("./builder");
|
|
29
|
-
const markdown_2 = require("./markdown");
|
|
30
|
-
const template_2 = require("./template");
|
|
31
|
-
const navigation_2 = require("./navigation");
|
|
32
|
-
exports.default = {
|
|
33
|
-
Builder: builder_2.ZenBuilder,
|
|
34
|
-
MarkdownConverter: markdown_2.MarkdownConverter,
|
|
35
|
-
TemplateEngine: template_2.TemplateEngine,
|
|
36
|
-
NavigationGenerator: navigation_2.NavigationGenerator,
|
|
37
|
-
};
|
|
3
|
+
require("./cli");
|
|
38
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,iBAAe"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { MetaDataStore } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* 全局 MetaDataStore 单例
|
|
4
|
+
*/
|
|
5
|
+
export declare const MetaData: MetaDataStore;
|
|
6
|
+
/**
|
|
7
|
+
* 从文件中读取数据,覆盖 store,但是要保持它仍然是同一个对象
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadMetaData(): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* 将 MetaData 写入 store
|
|
12
|
+
*/
|
|
13
|
+
export declare function saveMetaData(): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,aAKtB,CAAC;AAEF;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAalD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAOlD"}
|
package/dist/metadata.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
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.MetaData = void 0;
|
|
37
|
+
exports.loadMetaData = loadMetaData;
|
|
38
|
+
exports.saveMetaData = saveMetaData;
|
|
39
|
+
const fs = __importStar(require("fs/promises"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const paths_1 = require("./paths");
|
|
42
|
+
/**
|
|
43
|
+
* 全局 MetaDataStore 单例
|
|
44
|
+
*/
|
|
45
|
+
exports.MetaData = {
|
|
46
|
+
// 稍后覆盖
|
|
47
|
+
version: '1.0.0',
|
|
48
|
+
options: {},
|
|
49
|
+
files: [],
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* 从文件中读取数据,覆盖 store,但是要保持它仍然是同一个对象
|
|
53
|
+
*/
|
|
54
|
+
async function loadMetaData() {
|
|
55
|
+
try {
|
|
56
|
+
await fs.access(paths_1.ZEN_META_PATH);
|
|
57
|
+
const content = await fs.readFile(paths_1.ZEN_META_PATH, 'utf-8');
|
|
58
|
+
const newData = JSON.parse(content);
|
|
59
|
+
// 使用 Object.assign 保持同一个对象引用
|
|
60
|
+
Object.assign(exports.MetaData, newData);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
// 如果文件不存在,初始化默认值
|
|
64
|
+
exports.MetaData.version = '1.0.0';
|
|
65
|
+
exports.MetaData.files = [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 将 MetaData 写入 store
|
|
70
|
+
*/
|
|
71
|
+
async function saveMetaData() {
|
|
72
|
+
// 确保 .zen 目录存在
|
|
73
|
+
const zenDir = path.dirname(paths_1.ZEN_META_PATH);
|
|
74
|
+
await fs.mkdir(zenDir, { recursive: true });
|
|
75
|
+
// 保存文件
|
|
76
|
+
await fs.writeFile(paths_1.ZEN_META_PATH, JSON.stringify(exports.MetaData, null, 2), 'utf-8');
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,oCAaC;AAKD,oCAOC;AA3CD,gDAAkC;AAClC,2CAA6B;AAC7B,mCAAwC;AAGxC;;GAEG;AACU,QAAA,QAAQ,GAAkB;IACrC,OAAO;IACP,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,EAAE;CACV,CAAC;AAEF;;GAEG;AACI,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,qBAAa,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAa,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEpC,6BAA6B;QAC7B,MAAM,CAAC,MAAM,CAAC,gBAAQ,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iBAAiB;QACjB,gBAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,gBAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY;IAChC,eAAe;IACf,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAa,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,OAAO;IACP,MAAM,EAAE,CAAC,SAAS,CAAC,qBAAa,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,QAAgB,CAAC;AACvC,eAAO,MAAM,OAAO,QAA8B,CAAC;AACnD,eAAO,MAAM,YAAY,QAAwB,CAAC;AAClD,eAAO,MAAM,WAAW,QAAuB,CAAC;AAChD,eAAO,MAAM,aAAa,QAA6B,CAAC"}
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ZEN_META_PATH = exports.ZEN_SRC_DIR = exports.ZEN_DIST_DIR = exports.ZEN_DIR = exports.INPUT_DIR = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
exports.INPUT_DIR = process.cwd();
|
|
6
|
+
exports.ZEN_DIR = (0, path_1.join)(process.cwd(), '.zen');
|
|
7
|
+
exports.ZEN_DIST_DIR = (0, path_1.join)(exports.ZEN_DIR, 'dist');
|
|
8
|
+
exports.ZEN_SRC_DIR = (0, path_1.join)(exports.ZEN_DIR, 'src');
|
|
9
|
+
exports.ZEN_META_PATH = (0, path_1.join)(exports.ZEN_DIR, 'meta.json');
|
|
10
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAEf,QAAA,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC1B,QAAA,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;AACtC,QAAA,YAAY,GAAG,IAAA,WAAI,EAAC,eAAO,EAAE,MAAM,CAAC,CAAC;AACrC,QAAA,WAAW,GAAG,IAAA,WAAI,EAAC,eAAO,EAAE,KAAK,CAAC,CAAC;AACnC,QAAA,aAAa,GAAG,IAAA,WAAI,EAAC,eAAO,EAAE,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractMetadataByAI.d.ts","sourceRoot":"","sources":["../../src/process/extractMetadataByAI.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBzD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractMetadataByAI = extractMetadataByAI;
|
|
4
|
+
const promises_1 = require("fs/promises");
|
|
5
|
+
const extractMetadataFromMarkdown_1 = require("../ai/extractMetadataFromMarkdown");
|
|
6
|
+
const metadata_1 = require("../metadata");
|
|
7
|
+
/**
|
|
8
|
+
* 运行 AI 元数据提取
|
|
9
|
+
*/
|
|
10
|
+
async function extractMetadataByAI() {
|
|
11
|
+
const { files } = metadata_1.MetaData;
|
|
12
|
+
if (metadata_1.MetaData.options.verbose)
|
|
13
|
+
console.log(`🤖 Running AI metadata extraction...`);
|
|
14
|
+
console.log(`🤖 Processing ${files.length} files with AI...`);
|
|
15
|
+
for (const file of files) {
|
|
16
|
+
try {
|
|
17
|
+
if (file.metadata) {
|
|
18
|
+
console.info(`ℹ️ Skipping ${file.path}, already has metadata`);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const content = await (0, promises_1.readFile)(file.path, 'utf-8');
|
|
22
|
+
file.metadata = await (0, extractMetadataFromMarkdown_1.extractMetadataFromMarkdown)(content);
|
|
23
|
+
console.log(`✅ Extracted AI metadata for ${file.path}`, file.metadata.tokens_used);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error(`⚠️ Failed to process file ${file.path}:`, error);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
console.log(`✅ AI processing completed for ${files.length} files`);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=extractMetadataByAI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractMetadataByAI.js","sourceRoot":"","sources":["../../src/process/extractMetadataByAI.ts"],"names":[],"mappings":";;AAOA,kDAqBC;AA5BD,0CAAuC;AACvC,mFAAgF;AAChF,0CAAuC;AAEvC;;GAEG;AACI,KAAK,UAAU,mBAAmB;IACvC,MAAM,EAAE,KAAK,EAAE,GAAG,mBAAQ,CAAC;IAE3B,IAAI,mBAAQ,CAAC,OAAO,CAAC,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,MAAM,mBAAmB,CAAC,CAAC;IAE9D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,wBAAwB,CAAC,CAAC;gBAC/D,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAA,yDAA2B,EAAC,OAAO,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/process/template.ts"],"names":[],"mappings":"AA8JA;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCrD"}
|