czon 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/.github/workflows/bump-version.yml +112 -0
  2. package/.github/workflows/ci.yml +64 -0
  3. package/.github/workflows/pages.yml +61 -0
  4. package/.github/workflows/publish.yml +81 -0
  5. package/.husky/pre-commit +1 -0
  6. package/.prettierignore +14 -0
  7. package/.prettierrc.json +11 -0
  8. package/README.md +56 -0
  9. package/assets/templates/default/layout.html +421 -0
  10. package/dist/ai/extractMetadataFromMarkdown.d.ts +8 -0
  11. package/dist/ai/extractMetadataFromMarkdown.d.ts.map +1 -0
  12. package/dist/ai/extractMetadataFromMarkdown.js +88 -0
  13. package/dist/ai/extractMetadataFromMarkdown.js.map +1 -0
  14. package/dist/ai/translateMarkdown.d.ts +8 -0
  15. package/dist/ai/translateMarkdown.d.ts.map +1 -0
  16. package/dist/ai/translateMarkdown.js +60 -0
  17. package/dist/ai/translateMarkdown.js.map +1 -0
  18. package/dist/build/pipeline.d.ts +6 -0
  19. package/dist/build/pipeline.d.ts.map +1 -0
  20. package/dist/build/pipeline.js +180 -0
  21. package/dist/build/pipeline.js.map +1 -0
  22. package/dist/cli.d.ts +3 -0
  23. package/dist/cli.d.ts.map +1 -0
  24. package/dist/cli.js +102 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/findEntries.d.ts +10 -0
  27. package/dist/findEntries.d.ts.map +1 -0
  28. package/dist/findEntries.js +38 -0
  29. package/dist/findEntries.js.map +1 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +4 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/languages.d.ts +2 -0
  35. package/dist/languages.d.ts.map +1 -0
  36. package/dist/languages.js +37 -0
  37. package/dist/languages.js.map +1 -0
  38. package/dist/metadata.d.ts +14 -0
  39. package/dist/metadata.d.ts.map +1 -0
  40. package/dist/metadata.js +78 -0
  41. package/dist/metadata.js.map +1 -0
  42. package/dist/paths.d.ts +6 -0
  43. package/dist/paths.d.ts.map +1 -0
  44. package/dist/paths.js +10 -0
  45. package/dist/paths.js.map +1 -0
  46. package/dist/process/extractMetadataByAI.d.ts +5 -0
  47. package/dist/process/extractMetadataByAI.d.ts.map +1 -0
  48. package/dist/process/extractMetadataByAI.js +31 -0
  49. package/dist/process/extractMetadataByAI.js.map +1 -0
  50. package/dist/process/scanSourceFiles.d.ts +5 -0
  51. package/dist/process/scanSourceFiles.d.ts.map +1 -0
  52. package/dist/process/scanSourceFiles.js +70 -0
  53. package/dist/process/scanSourceFiles.js.map +1 -0
  54. package/dist/process/template.d.ts +5 -0
  55. package/dist/process/template.d.ts.map +1 -0
  56. package/dist/process/template.js +207 -0
  57. package/dist/process/template.js.map +1 -0
  58. package/dist/services/openai.d.ts +41 -0
  59. package/dist/services/openai.d.ts.map +1 -0
  60. package/dist/services/openai.js +54 -0
  61. package/dist/services/openai.js.map +1 -0
  62. package/dist/types.d.ts +35 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +3 -0
  65. package/dist/types.js.map +1 -0
  66. package/dist/utils/convertMarkdownToHtml.d.ts +7 -0
  67. package/dist/utils/convertMarkdownToHtml.d.ts.map +1 -0
  68. package/dist/utils/convertMarkdownToHtml.js +94 -0
  69. package/dist/utils/convertMarkdownToHtml.js.map +1 -0
  70. package/dist/utils/frontmatter.d.ts +6 -0
  71. package/dist/utils/frontmatter.d.ts.map +1 -0
  72. package/dist/utils/frontmatter.js +22 -0
  73. package/dist/utils/frontmatter.js.map +1 -0
  74. package/dist/utils/sha256.d.ts +2 -0
  75. package/dist/utils/sha256.d.ts.map +1 -0
  76. package/dist/utils/sha256.js +7 -0
  77. package/dist/utils/sha256.js.map +1 -0
  78. package/package.json +58 -6
  79. package/tsconfig.json +19 -0
@@ -0,0 +1,180 @@
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.buildSite = buildSite;
37
+ const fs = __importStar(require("fs/promises"));
38
+ const path = __importStar(require("path"));
39
+ const translateMarkdown_1 = require("../ai/translateMarkdown");
40
+ const metadata_1 = require("../metadata");
41
+ const paths_1 = require("../paths");
42
+ const extractMetadataByAI_1 = require("../process/extractMetadataByAI");
43
+ const scanSourceFiles_1 = require("../process/scanSourceFiles");
44
+ const template_1 = require("../process/template");
45
+ const frontmatter_1 = require("../utils/frontmatter");
46
+ /**
47
+ * 验证构建配置
48
+ */
49
+ async function validateConfig(options) {
50
+ const { verbose = false } = options;
51
+ if (verbose) {
52
+ console.log(`🚀 Starting ZEN build...`);
53
+ if (options.langs && options.langs.length > 0) {
54
+ console.log(`🌐 Target languages: ${options.langs.join(', ')}`);
55
+ }
56
+ console.log(`🔍 Verbose mode enabled`);
57
+ }
58
+ metadata_1.MetaData.options = options;
59
+ }
60
+ /**
61
+ * 存储母语文件到 .zen/src
62
+ */
63
+ async function storeNativeFiles() {
64
+ const { options: { verbose }, files, } = metadata_1.MetaData;
65
+ for (const file of metadata_1.MetaData.files) {
66
+ try {
67
+ if (!file.hash)
68
+ throw new Error(`Missing hash`);
69
+ if (!file.metadata?.inferred_lang)
70
+ throw new Error(`Missing inferred language`);
71
+ const filePath = path.join(paths_1.ZEN_SRC_DIR, file.metadata.inferred_lang, file.hash + '.md');
72
+ const originalContent = await fs.readFile(path.join(paths_1.INPUT_DIR, file.path), 'utf-8');
73
+ const enhancedContent = (0, frontmatter_1.updateFrontmatter)(originalContent, {
74
+ title: file.metadata.title,
75
+ summary: file.metadata.summary,
76
+ tags: file.metadata.tags,
77
+ inferred_date: file.metadata.inferred_date,
78
+ inferred_lang: file.metadata.inferred_lang,
79
+ });
80
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
81
+ await fs.writeFile(filePath, enhancedContent, 'utf-8');
82
+ }
83
+ catch (error) {
84
+ console.warn(`⚠️ Failed to store native file ${file.path}:`, error);
85
+ }
86
+ }
87
+ if (verbose && files.length > 0) {
88
+ console.log(`💾 Stored ${files.length} native language files to .zen/src`);
89
+ }
90
+ }
91
+ /**
92
+ * 处理翻译
93
+ */
94
+ async function processTranslations() {
95
+ const { files, options: { langs = [], verbose }, } = metadata_1.MetaData;
96
+ await Promise.all(files.flatMap(async (file) => {
97
+ return Promise.all(langs.map(async (lang) => {
98
+ if (verbose)
99
+ console.info(`📄 Processing file for translation: ${file.path}`);
100
+ if (!file.metadata) {
101
+ console.warn(`⚠️ Missing metadata for file: ${file.path}, skipping translation.`);
102
+ return;
103
+ }
104
+ if (verbose)
105
+ console.log(`🌐 Translating to ${lang}...`);
106
+ // 存储翻译文件到 .zen/src/{lang}
107
+ const sourcePath = path.join(paths_1.ZEN_SRC_DIR, file.metadata.inferred_lang, file.hash + '.md'); // 使用已经加强的母语文件路径
108
+ const targetPath = path.join(paths_1.ZEN_SRC_DIR, lang, file.hash + '.md');
109
+ try {
110
+ const content = await fs.readFile(sourcePath, 'utf-8');
111
+ if (file.metadata.inferred_lang === lang) {
112
+ if (verbose)
113
+ console.log(`ℹ️ Skipping translation for ${file.path}, already in target language`);
114
+ return;
115
+ }
116
+ else {
117
+ // 翻译
118
+ // 先检查是否已经有翻译文件存在
119
+ const exists = await fs.access(targetPath).then(() => true, () => false);
120
+ if (exists) {
121
+ if (verbose)
122
+ console.log(`ℹ️ Translation already exists for ${file.path} in ${lang}`);
123
+ return;
124
+ }
125
+ }
126
+ const translatedContent = await (0, translateMarkdown_1.translateMarkdown)(content, lang);
127
+ await fs.mkdir(path.dirname(targetPath), { recursive: true });
128
+ await fs.writeFile(targetPath, translatedContent, 'utf-8');
129
+ if (verbose)
130
+ console.log(`✅ Translated file saved: ${targetPath}`);
131
+ }
132
+ catch (error) {
133
+ console.error(`❌ Failed to translate to ${lang}:`, error);
134
+ }
135
+ }));
136
+ }));
137
+ }
138
+ /**
139
+ * 构建管道(函数组合)
140
+ */
141
+ async function buildPipeline(options) {
142
+ // 验证配置
143
+ await validateConfig(options);
144
+ // 清理输出目录
145
+ await fs.rm(paths_1.ZEN_DIST_DIR, { recursive: true, force: true });
146
+ // 确保 .zen/.gitignore 文件
147
+ await fs.mkdir(paths_1.ZEN_DIR, { recursive: true });
148
+ await fs.writeFile(path.join(paths_1.ZEN_DIR, '.gitignore'), 'dist\n', 'utf-8');
149
+ // 扫描源文件
150
+ await (0, scanSourceFiles_1.scanSourceFiles)();
151
+ // 运行 AI 元数据提取
152
+ await (0, extractMetadataByAI_1.extractMetadataByAI)();
153
+ // 存储母语文件
154
+ await storeNativeFiles();
155
+ // 处理翻译
156
+ await processTranslations();
157
+ // 渲染模板
158
+ await (0, template_1.renderTemplates)();
159
+ }
160
+ /**
161
+ * 主构建函数
162
+ */
163
+ async function buildSite(options) {
164
+ const startTime = Date.now();
165
+ try {
166
+ await (0, metadata_1.loadMetaData)();
167
+ await buildPipeline(options);
168
+ const endTime = Date.now();
169
+ const duration = ((endTime - startTime) / 1000).toFixed(2);
170
+ console.log(`🎉 Build completed in ${duration}s`);
171
+ }
172
+ catch (error) {
173
+ console.error(`❌ Build failed:`, error);
174
+ throw error;
175
+ }
176
+ finally {
177
+ await (0, metadata_1.saveMetaData)();
178
+ }
179
+ }
180
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/build/pipeline.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,102 @@
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 clipanion_1 = require("clipanion");
38
+ const dotenv_1 = require("dotenv");
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const pipeline_1 = require("./build/pipeline");
42
+ // 加载 .env 文件中的环境变量
43
+ (0, dotenv_1.config)();
44
+ // 获取版本号 - 从 package.json 读取
45
+ function getVersion() {
46
+ const packageJsonPath = path.join(__dirname, '..', 'package.json');
47
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
48
+ return packageJson.version;
49
+ }
50
+ // Build 命令
51
+ class BuildCommand extends clipanion_1.Command {
52
+ constructor() {
53
+ super(...arguments);
54
+ this.template = clipanion_1.Option.String('-t,--template');
55
+ this.verbose = clipanion_1.Option.Boolean('-v,--verbose');
56
+ this.lang = clipanion_1.Option.Array('--lang', {
57
+ description: 'Target languages for translation (e.g., en-US, ja-JP)',
58
+ });
59
+ }
60
+ async execute() {
61
+ try {
62
+ await (0, pipeline_1.buildSite)({
63
+ template: this.template ? path.resolve(this.template) : undefined,
64
+ verbose: this.verbose,
65
+ langs: this.lang,
66
+ });
67
+ return 0;
68
+ }
69
+ catch (error) {
70
+ this.context.stderr.write(`❌ Build failed: ${error}\n`);
71
+ return 1;
72
+ }
73
+ }
74
+ }
75
+ BuildCommand.paths = [['build']];
76
+ BuildCommand.usage = clipanion_1.Command.Usage({
77
+ description: 'Build documentation site from Markdown files in current directory',
78
+ details: `
79
+ This command builds a documentation site from Markdown files in the current directory.
80
+ The output will be placed in the .zen/dist directory.
81
+
82
+ Examples:
83
+ $ zengen build
84
+ $ zengen build --lang en-US --lang ja-JP (translate to English and Japanese)
85
+ `,
86
+ });
87
+ // 创建 CLI 应用
88
+ const cli = new clipanion_1.Cli({
89
+ binaryName: 'zengen',
90
+ binaryLabel: 'ZEN - A minimalist Markdown documentation site builder',
91
+ binaryVersion: getVersion(),
92
+ });
93
+ // 注册命令
94
+ cli.register(BuildCommand);
95
+ // 运行 CLI
96
+ cli.runExit(process.argv.slice(2), {
97
+ ...clipanion_1.Cli.defaultContext,
98
+ stdin: process.stdin,
99
+ stdout: process.stdout,
100
+ stderr: process.stderr,
101
+ });
102
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
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,SAAI,GAAG,kBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,uDAAuD;SACrE,CAAC,CAAC;IA4BL,CAAC;IAdC,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,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;;AAjCM,kBAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,AAAd,CAAe;AAQpB,kBAAK,GAAG,mBAAO,CAAC,KAAK,CAAC;IAC3B,WAAW,EAAE,mEAAmE;IAChF,OAAO,EAAE;;;;;;;KAOR;CACF,CAAC,AAVU,CAUT;AAkBL,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"}
@@ -0,0 +1,2 @@
1
+ import './cli';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("./cli");
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,iBAAe"}
@@ -0,0 +1,2 @@
1
+ export declare const LANGUAGE_NAMES: Record<string, string>;
2
+ //# sourceMappingURL=languages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../src/languages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoCjD,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LANGUAGE_NAMES = void 0;
4
+ exports.LANGUAGE_NAMES = {
5
+ // 现有语言
6
+ 'zh-Hans': '简体中文',
7
+ 'en-US': 'English',
8
+ 'ja-JP': '日本語',
9
+ 'ko-KR': '한국어',
10
+ 'es-ES': 'Español',
11
+ 'fr-FR': 'Français',
12
+ 'de-DE': 'Deutsch',
13
+ 'ru-RU': 'Русский',
14
+ // 补充缺失的项目支持语言
15
+ 'pt-PT': 'Português',
16
+ // 欧洲主要语言
17
+ 'it-IT': 'Italiano',
18
+ 'nl-NL': 'Nederlands',
19
+ 'pl-PL': 'Polski',
20
+ 'sv-SE': 'Svenska',
21
+ 'fi-FI': 'Suomi',
22
+ 'da-DK': 'Dansk',
23
+ 'no-NO': 'Norsk',
24
+ // 亚洲主要语言
25
+ 'zh-Hant': '繁體中文',
26
+ 'hi-IN': 'हिन्दी',
27
+ 'ar-SA': 'العربية',
28
+ 'th-TH': 'ไทย',
29
+ 'vi-VN': 'Tiếng Việt',
30
+ 'id-ID': 'Bahasa Indonesia',
31
+ // 其他重要语言
32
+ 'pt-BR': 'Português (Brasil)',
33
+ 'es-MX': 'Español (México)',
34
+ 'tr-TR': 'Türkçe',
35
+ 'uk-UA': 'Українська',
36
+ };
37
+ //# sourceMappingURL=languages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.js","sourceRoot":"","sources":["../src/languages.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAA2B;IACpD,OAAO;IACP,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAElB,cAAc;IACd,OAAO,EAAE,WAAW;IAEpB,SAAS;IACT,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAEhB,SAAS;IACT,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,kBAAkB;IAE3B,SAAS;IACT,OAAO,EAAE,oBAAoB;IAC7B,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,YAAY;CACtB,CAAC"}
@@ -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"}
@@ -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"}
@@ -0,0 +1,6 @@
1
+ export declare const INPUT_DIR: string;
2
+ export declare const ZEN_DIR: string;
3
+ export declare const ZEN_DIST_DIR: string;
4
+ export declare const ZEN_SRC_DIR: string;
5
+ export declare const ZEN_META_PATH: string;
6
+ //# sourceMappingURL=paths.d.ts.map
@@ -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,5 @@
1
+ /**
2
+ * 运行 AI 元数据提取
3
+ */
4
+ export declare function extractMetadataByAI(): Promise<void>;
5
+ //# sourceMappingURL=extractMetadataByAI.d.ts.map
@@ -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,CAuBzD"}
@@ -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
+ await Promise.all(files.map(async (file) => {
16
+ try {
17
+ if (file.metadata) {
18
+ console.info(`ℹ️ Skipping ${file.path}, already has metadata`);
19
+ return;
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,kDAuBC;AA9BD,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,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;QACrB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,wBAAwB,CAAC,CAAC;gBAC/D,OAAO;YACT,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,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 扫描源文件
3
+ */
4
+ export declare function scanSourceFiles(): Promise<void>;
5
+ //# sourceMappingURL=scanSourceFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanSourceFiles.d.ts","sourceRoot":"","sources":["../../src/process/scanSourceFiles.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAoDrD"}