czon 0.1.5 → 0.1.7

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 (61) hide show
  1. package/.prettierignore +4 -1
  2. package/dist/ai/extractMetadataFromMarkdown.js +22 -7
  3. package/dist/ai/extractMetadataFromMarkdown.js.map +1 -1
  4. package/dist/build/pipeline.d.ts.map +1 -1
  5. package/dist/build/pipeline.js +8 -85
  6. package/dist/build/pipeline.js.map +1 -1
  7. package/dist/process/enhanceMarkdownSource.d.ts +5 -0
  8. package/dist/process/enhanceMarkdownSource.d.ts.map +1 -0
  9. package/dist/process/enhanceMarkdownSource.js +64 -0
  10. package/dist/process/enhanceMarkdownSource.js.map +1 -0
  11. package/dist/process/extractMetadataByAI.js +1 -1
  12. package/dist/process/extractMetadataByAI.js.map +1 -1
  13. package/dist/process/processTranslations.d.ts +5 -0
  14. package/dist/process/processTranslations.d.ts.map +1 -0
  15. package/dist/process/processTranslations.js +58 -0
  16. package/dist/process/processTranslations.js.map +1 -0
  17. package/dist/process/template.d.ts +2 -2
  18. package/dist/process/template.d.ts.map +1 -1
  19. package/dist/process/template.js +63 -155
  20. package/dist/process/template.js.map +1 -1
  21. package/dist/ssg/ContentPage.d.ts +9 -0
  22. package/dist/ssg/ContentPage.d.ts.map +1 -0
  23. package/{assets/templates/default/layout.html → dist/ssg/ContentPage.js} +73 -61
  24. package/dist/ssg/ContentPage.js.map +1 -0
  25. package/dist/ssg/RedirectPage.d.ts +6 -0
  26. package/dist/ssg/RedirectPage.d.ts.map +1 -0
  27. package/dist/ssg/RedirectPage.js +24 -0
  28. package/dist/ssg/RedirectPage.js.map +1 -0
  29. package/dist/ssg/app.d.ts +4 -0
  30. package/dist/ssg/app.d.ts.map +1 -0
  31. package/dist/ssg/app.js +44 -0
  32. package/dist/ssg/app.js.map +1 -0
  33. package/dist/ssg/components/LanguageSwitcher.d.ts +8 -0
  34. package/dist/ssg/components/LanguageSwitcher.d.ts.map +1 -0
  35. package/dist/ssg/components/LanguageSwitcher.js +21 -0
  36. package/dist/ssg/components/LanguageSwitcher.js.map +1 -0
  37. package/dist/ssg/components/Navigator.d.ts +7 -0
  38. package/dist/ssg/components/Navigator.d.ts.map +1 -0
  39. package/dist/ssg/components/Navigator.js +17 -0
  40. package/dist/ssg/components/Navigator.js.map +1 -0
  41. package/dist/ssg/components/TagList.d.ts +5 -0
  42. package/dist/ssg/components/TagList.d.ts.map +1 -0
  43. package/dist/ssg/components/TagList.js +12 -0
  44. package/dist/ssg/components/TagList.js.map +1 -0
  45. package/dist/ssg/index.d.ts +3 -0
  46. package/dist/ssg/index.d.ts.map +1 -0
  47. package/dist/ssg/index.js +14 -0
  48. package/dist/ssg/index.js.map +1 -0
  49. package/dist/types.d.ts +33 -0
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/utils/writeFile.d.ts +5 -0
  52. package/dist/utils/writeFile.d.ts.map +1 -1
  53. package/dist/utils/writeFile.js +5 -0
  54. package/dist/utils/writeFile.js.map +1 -1
  55. package/package.json +5 -1
  56. package/tsconfig.json +1 -0
  57. package/.github/workflows/bump-version.yml +0 -112
  58. package/.github/workflows/ci.yml +0 -64
  59. package/.github/workflows/pages.yml +0 -61
  60. package/.github/workflows/publish.yml +0 -81
  61. package/.husky/pre-commit +0 -1
package/.prettierignore CHANGED
@@ -11,4 +11,7 @@ package-lock.json
11
11
 
12
12
  # Ignore Prettier config itself
13
13
  .prettierrc.json
14
- .prettierignore
14
+ .prettierignore
15
+
16
+ # Ignore CZON build artifacts
17
+ .czon
@@ -49,20 +49,29 @@ ${truncatedContent}
49
49
 
50
50
  请提取:
51
51
  1. title: 文档的标题(简洁明了,不超过 30 个字)
52
- 2. summary: 文档摘要(控制在 300 字以内,概括主要内容)
53
- 3. slug: URL 友好别名(使用小写字母、数字和连字符,仅包含英文和数字)
54
- 4. tags: 关键词列表(3-8 个关键词,使用中文或英文)
55
- 5. inferred_date: 文档中隐含的创建日期(如果有的话,格式:YYYY-MM-DD,没有就留空字符串)
56
- 6. inferred_lang: 文档使用的语言代码(例如:zh-Hans 表示简体中文,en-US 表示美式英语)
52
+ 2. slug: URL 友好别名(使用小写字母、数字和连字符,仅包含英文和数字)
53
+ 3. tags: 关键词列表(3-8 个关键词,使用中文或英文)
54
+ 4. description: 文档的简短描述,微摘要(用一句话概括本文核心价值,不超过 100 字符),用于 SEO meta description,社交卡片短描述
55
+ 5. summary: 文档中型摘要(用一段话总结文章,包含关键论点和结论,控制在 300 字以内),用于 邮件推送内容,newsletter 介绍
56
+ 6. inferred_date: 文档中隐含的创建日期(如果有的话,格式:YYYY-MM-DD,没有就留空字符串)
57
+ 7. inferred_lang: 文档使用的语言代码(例如:zh-Hans 表示简体中文,en-US 表示美式英语)
58
+ 8. key_points: 文章的关键要点列表(5-10 个要点,简洁明了)
59
+ 9. audience: 目标读者描述(简短描述,50 字以内)
60
+ 10. short_summary: 文档的超短摘要(用 2-3 句话概括文章主要内容,突出核心观点),用于文章列表页摘要,RSS feed 描述
61
+
57
62
 
58
63
  请严格按照以下 JSON 格式返回,不要包含任何其他文本:
59
64
  {
60
65
  "title": "文档标题",
61
- "summary": "文档摘要...",
66
+ "description": "用一句话概括本文核心价值,不超过 100 字符",
67
+ "summary": "中型摘要,用一段话总结文章,包含关键论点和结论",
68
+ "short_summary": "超短摘要,用 2-3 句话概括文章主要内容,突出核心观点",
62
69
  "slug": "URL 友好别名",
63
70
  "tags": ["关键词1", "关键词2", "关键词3"],
64
71
  "inferred_date": "2023-01-01",
65
- "inferred_lang": "zh-Hans"
72
+ "inferred_lang": "zh-Hans",
73
+ "key_points": ["要点1", "要点2", "要点3"],
74
+ "audience": "目标读者描述"
66
75
  }`;
67
76
  }
68
77
  /**
@@ -74,6 +83,12 @@ function parseMetadataResponse(responseContent) {
74
83
  // 验证和清理数据
75
84
  return {
76
85
  title: metadata.title?.trim() || '未命名文档',
86
+ description: metadata.description?.trim() || '',
87
+ short_summary: metadata.short_summary?.trim() || '',
88
+ audience: metadata.audience?.trim() || '',
89
+ key_points: Array.isArray(metadata.key_points)
90
+ ? metadata.key_points.map((point) => point.trim()).filter(Boolean)
91
+ : [],
77
92
  summary: metadata.summary?.trim() || '',
78
93
  slug: metadata.slug?.trim() || '',
79
94
  tags: Array.isArray(metadata.tags)
@@ -1 +1 @@
1
- {"version":3,"file":"extractMetadataFromMarkdown.js","sourceRoot":"","sources":["../../src/ai/extractMetadataFromMarkdown.ts"],"names":[],"mappings":";;AAQA,kEA4BC;AApCD,+CAAqE;AAGrE;;;;GAIG;AACI,KAAK,UAAU,2BAA2B,CAAC,OAAe;IAC/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAoB;QAChC;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EACL,mDAAmD;SACtD;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM;SAChB;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,yBAAgB,EAAC,QAAQ,EAAE;QAChD,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;KACzC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5E,iBAAiB;IACjB,QAAQ,CAAC,WAAW,GAAG;QACrB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;QACpC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB;QAC5C,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;KACnC,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAe;IAC1C,qBAAqB;IACrB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,cAAc;IACjD,MAAM,gBAAgB,GACpB,OAAO,CAAC,MAAM,GAAG,gBAAgB;QAC/B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,aAAa;QACxD,CAAC,CAAC,OAAO,CAAC;IAEd,OAAO;;;;EAIP,gBAAgB;;;;;;;;;;;;;;;;;;;EAmBhB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,eAAuB;IACpD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7C,UAAU;QACV,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO;YACxC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;YACvC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;YACjC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAChE,CAAC,CAAC,EAAE;YACN,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,SAAS;YAC1D,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,SAAS;SAC3D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QACrF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"extractMetadataFromMarkdown.js","sourceRoot":"","sources":["../../src/ai/extractMetadataFromMarkdown.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/build/pipeline.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAmJxC;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBpE"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/build/pipeline.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAiDxC;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBpE"}
@@ -36,13 +36,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.buildSite = buildSite;
37
37
  const fs = __importStar(require("fs/promises"));
38
38
  const path = __importStar(require("path"));
39
- const translateMarkdown_1 = require("../ai/translateMarkdown");
40
39
  const metadata_1 = require("../metadata");
41
40
  const paths_1 = require("../paths");
41
+ const enhanceMarkdownSource_1 = require("../process/enhanceMarkdownSource");
42
42
  const extractMetadataByAI_1 = require("../process/extractMetadataByAI");
43
+ const processTranslations_1 = require("../process/processTranslations");
43
44
  const scanSourceFiles_1 = require("../process/scanSourceFiles");
44
45
  const template_1 = require("../process/template");
45
- const frontmatter_1 = require("../utils/frontmatter");
46
+ const writeFile_1 = require("../utils/writeFile");
46
47
  /**
47
48
  * 验证构建配置
48
49
  */
@@ -57,83 +58,6 @@ async function validateConfig(options) {
57
58
  }
58
59
  metadata_1.MetaData.options = options;
59
60
  }
60
- /**
61
- * 存储母语文件到 .czon/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.CZON_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
- date: file.metadata.inferred_date,
78
- });
79
- await fs.mkdir(path.dirname(filePath), { recursive: true });
80
- await fs.writeFile(filePath, enhancedContent, 'utf-8');
81
- }
82
- catch (error) {
83
- console.warn(`⚠️ Failed to store native file ${file.path}:`, error);
84
- }
85
- }
86
- if (verbose && files.length > 0) {
87
- console.log(`💾 Stored ${files.length} native language files to .czon/src`);
88
- }
89
- }
90
- /**
91
- * 处理翻译
92
- */
93
- async function processTranslations() {
94
- const { files, options: { langs = [], verbose }, } = metadata_1.MetaData;
95
- await Promise.all(files.flatMap(async (file) => {
96
- return Promise.all(langs.map(async (lang) => {
97
- if (verbose)
98
- console.info(`📄 Processing file for translation: ${file.path}`);
99
- if (!file.metadata) {
100
- console.warn(`⚠️ Missing metadata for file: ${file.path}, skipping translation.`);
101
- return;
102
- }
103
- if (verbose)
104
- console.log(`🌐 Translating to ${lang}...`);
105
- // 存储翻译文件到 .czon/src/{lang}
106
- const sourcePath = path.join(paths_1.CZON_SRC_DIR, file.metadata.inferred_lang, file.hash + '.md'); // 使用已经加强的母语文件路径
107
- const targetPath = path.join(paths_1.CZON_SRC_DIR, lang, file.hash + '.md');
108
- try {
109
- const content = await fs.readFile(sourcePath, 'utf-8');
110
- if (file.metadata.inferred_lang === lang) {
111
- if (verbose)
112
- console.log(`ℹ️ Skipping translation for ${file.path}, already in target language`);
113
- return;
114
- }
115
- else {
116
- // 翻译
117
- // 先检查是否已经有翻译文件存在
118
- const exists = await fs.access(targetPath).then(() => true, () => false);
119
- if (exists) {
120
- if (verbose)
121
- console.log(`ℹ️ Translation already exists for ${file.path} in ${lang}`);
122
- return;
123
- }
124
- }
125
- const translatedContent = await (0, translateMarkdown_1.translateMarkdown)(content, lang);
126
- await fs.mkdir(path.dirname(targetPath), { recursive: true });
127
- await fs.writeFile(targetPath, translatedContent, 'utf-8');
128
- if (verbose)
129
- console.log(`✅ Translated file saved: ${targetPath}`);
130
- }
131
- catch (error) {
132
- console.error(`❌ Failed to translate to ${lang}:`, error);
133
- }
134
- }));
135
- }));
136
- }
137
61
  /**
138
62
  * 构建管道(函数组合)
139
63
  */
@@ -143,18 +67,17 @@ async function buildPipeline(options) {
143
67
  // 清理输出目录
144
68
  await fs.rm(paths_1.CZON_DIST_DIR, { recursive: true, force: true });
145
69
  // 确保 .czon/.gitignore 文件
146
- await fs.mkdir(paths_1.CZON_DIR, { recursive: true });
147
- await fs.writeFile(path.join(paths_1.CZON_DIR, '.gitignore'), 'dist\n', 'utf-8');
70
+ await (0, writeFile_1.writeFile)(path.join(paths_1.CZON_DIR, '.gitignore'), 'dist\n');
148
71
  // 扫描源文件
149
72
  await (0, scanSourceFiles_1.scanSourceFiles)();
150
73
  // 运行 AI 元数据提取
151
74
  await (0, extractMetadataByAI_1.extractMetadataByAI)();
152
- // 存储母语文件
153
- await storeNativeFiles();
75
+ // 存储母语文件,并进行内容增强预处理
76
+ await (0, enhanceMarkdownSource_1.storeNativeFiles)();
154
77
  // 处理翻译
155
- await processTranslations();
78
+ await (0, processTranslations_1.processTranslations)();
156
79
  // 渲染模板
157
- await (0, template_1.renderTemplates)();
80
+ await (0, template_1.spiderStaticSiteGenerator)();
158
81
  }
159
82
  /**
160
83
  * 主构建函数
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/build/pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/build/pipeline.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,8BAgBC;AA7ED,gDAAkC;AAClC,2CAA6B;AAC7B,0CAAmE;AACnE,oCAAmD;AACnD,4EAAoE;AACpE,wEAAqE;AACrE,wEAAqE;AACrE,gEAA6D;AAC7D,kDAAgE;AAEhE,kDAA+C;AAE/C;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAAqB;IACjD,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAED,mBAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,OAAqB;IAChD,OAAO;IACP,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAE9B,SAAS;IACT,MAAM,EAAE,CAAC,EAAE,CAAC,qBAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,yBAAyB;IACzB,MAAM,IAAA,qBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,gBAAQ,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE7D,QAAQ;IACR,MAAM,IAAA,iCAAe,GAAE,CAAC;IAExB,cAAc;IACd,MAAM,IAAA,yCAAmB,GAAE,CAAC;IAE5B,oBAAoB;IACpB,MAAM,IAAA,wCAAgB,GAAE,CAAC;IAEzB,OAAO;IACP,MAAM,IAAA,yCAAmB,GAAE,CAAC;IAE5B,OAAO;IACP,MAAM,IAAA,oCAAyB,GAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAAC,OAAqB;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,IAAA,uBAAY,GAAE,CAAC;QACrB,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,GAAG,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,IAAA,uBAAY,GAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 存储母语文件到 .czon/src
3
+ */
4
+ export declare function storeNativeFiles(): Promise<void>;
5
+ //# sourceMappingURL=enhanceMarkdownSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanceMarkdownSource.d.ts","sourceRoot":"","sources":["../../src/process/enhanceMarkdownSource.ts"],"names":[],"mappings":"AAgCA;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCtD"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.storeNativeFiles = storeNativeFiles;
7
+ const promises_1 = require("fs/promises");
8
+ const path_1 = __importDefault(require("path"));
9
+ const metadata_1 = require("../metadata");
10
+ const paths_1 = require("../paths");
11
+ const frontmatter_1 = require("../utils/frontmatter");
12
+ const writeFile_1 = require("../utils/writeFile");
13
+ const replaceInnerLinks = (file, markdownContent) => {
14
+ let content = markdownContent;
15
+ for (const link of file.links) {
16
+ if (URL.canParse(link))
17
+ continue; // 跳过绝对 URL
18
+ const targetPath = path_1.default.resolve('/', path_1.default.dirname(file.path), link).slice(1);
19
+ const targetFile = metadata_1.MetaData.files.find(f => f.path === targetPath);
20
+ if (!targetFile) {
21
+ console.warn(`⚠️ Link target not found for ${link} in file ${file.path}`);
22
+ continue;
23
+ }
24
+ // 替换链接 (使用相对链接)
25
+ const targetLink = `czon://${targetFile.hash}`;
26
+ // 全局替换链接
27
+ const linksRegex = new RegExp(`\\]\\(${link.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\)`, 'g');
28
+ content = content.replace(linksRegex, `](${targetLink})`);
29
+ }
30
+ return content;
31
+ };
32
+ /**
33
+ * 存储母语文件到 .czon/src
34
+ */
35
+ async function storeNativeFiles() {
36
+ const { options: { verbose }, files, } = metadata_1.MetaData;
37
+ for (const file of metadata_1.MetaData.files) {
38
+ try {
39
+ if (!file.hash)
40
+ throw new Error(`Missing hash`);
41
+ if (!file.metadata?.inferred_lang)
42
+ throw new Error(`Missing inferred language`);
43
+ const filePath = path_1.default.join(paths_1.CZON_SRC_DIR, file.metadata.inferred_lang, file.hash + '.md');
44
+ const originalContent = await (0, promises_1.readFile)(path_1.default.join(paths_1.INPUT_DIR, file.path), 'utf-8');
45
+ // 增强 YAML Frontmatter
46
+ const enhancedContent = (0, frontmatter_1.updateFrontmatter)(originalContent, {
47
+ title: file.metadata.title,
48
+ summary: file.metadata.summary,
49
+ tags: file.metadata.tags,
50
+ date: file.metadata.inferred_date,
51
+ });
52
+ // 进行内链接替换, 将相对链接替换为基于 czon://hash 的链接
53
+ const replacedContent = replaceInnerLinks(file, enhancedContent);
54
+ await (0, writeFile_1.writeFile)(filePath, replacedContent);
55
+ }
56
+ catch (error) {
57
+ console.warn(`⚠️ Failed to store native file ${file.path}:`, error);
58
+ }
59
+ }
60
+ if (verbose && files.length > 0) {
61
+ console.log(`💾 Stored ${files.length} native language files to .czon/src`);
62
+ }
63
+ }
64
+ //# sourceMappingURL=enhanceMarkdownSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanceMarkdownSource.js","sourceRoot":"","sources":["../../src/process/enhanceMarkdownSource.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ async function extractMetadataByAI() {
14
14
  console.log(`🤖 Processing ${files.length} files with AI...`);
15
15
  await Promise.all(files.map(async (file) => {
16
16
  try {
17
- if (file.metadata && file.metadata.slug) {
17
+ if (file.metadata && file.metadata.slug && file.metadata.short_summary) {
18
18
  console.info(`ℹ️ Skipping ${file.path}, already has metadata`);
19
19
  return;
20
20
  }
@@ -1 +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,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,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"}
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,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;gBACvE,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 processTranslations(): Promise<void>;
5
+ //# sourceMappingURL=processTranslations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processTranslations.d.ts","sourceRoot":"","sources":["../../src/process/processTranslations.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDzD"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.processTranslations = processTranslations;
7
+ const promises_1 = require("fs/promises");
8
+ const path_1 = __importDefault(require("path"));
9
+ const translateMarkdown_1 = require("../ai/translateMarkdown");
10
+ const metadata_1 = require("../metadata");
11
+ const paths_1 = require("../paths");
12
+ const sha256_1 = require("../utils/sha256");
13
+ const writeFile_1 = require("../utils/writeFile");
14
+ /**
15
+ * 处理翻译
16
+ */
17
+ async function processTranslations() {
18
+ const { files, options: { langs = [], verbose }, } = metadata_1.MetaData;
19
+ await Promise.all(files.flatMap(async (file) => {
20
+ return Promise.all(langs.map(async (lang) => {
21
+ if (verbose)
22
+ console.info(`📄 Processing file for translation: ${file.path}`);
23
+ if (!file.metadata) {
24
+ console.warn(`⚠️ Missing metadata for file: ${file.path}, skipping translation.`);
25
+ return;
26
+ }
27
+ if (verbose)
28
+ console.log(`🌐 Translating to ${lang}...`);
29
+ // 存储翻译文件到 .czon/src/{lang}
30
+ const sourcePath = path_1.default.join(paths_1.CZON_SRC_DIR, file.metadata.inferred_lang, file.hash + '.md'); // 使用已经加强的母语文件路径
31
+ const targetPath = path_1.default.join(paths_1.CZON_SRC_DIR, lang, file.hash + '.md');
32
+ try {
33
+ const content = await (0, promises_1.readFile)(sourcePath, 'utf-8');
34
+ if (file.metadata.inferred_lang === lang) {
35
+ if (verbose)
36
+ console.log(`ℹ️ Skipping translation for ${file.path}, already in target language`);
37
+ return;
38
+ }
39
+ const hash = (0, sha256_1.sha256)(content);
40
+ if (hash === file.nativeMarkdownHash) {
41
+ if (verbose)
42
+ console.info(`ℹ️ Content unchanged for ${file.path}, skipping translation.`);
43
+ return;
44
+ }
45
+ const translatedContent = await (0, translateMarkdown_1.translateMarkdown)(content, lang);
46
+ await (0, writeFile_1.writeFile)(targetPath, translatedContent);
47
+ // 存储已增强内容的哈希值
48
+ file.nativeMarkdownHash = hash;
49
+ if (verbose)
50
+ console.log(`✅ Translated file saved: ${targetPath}`);
51
+ }
52
+ catch (error) {
53
+ console.error(`❌ Failed to translate to ${lang}:`, error);
54
+ }
55
+ }));
56
+ }));
57
+ }
58
+ //# sourceMappingURL=processTranslations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processTranslations.js","sourceRoot":"","sources":["../../src/process/processTranslations.ts"],"names":[],"mappings":";;;;;AAWA,kDAuDC;AAlED,0CAAuC;AACvC,gDAAwB;AACxB,+DAA4D;AAC5D,0CAAuC;AACvC,oCAAwC;AACxC,4CAAyC;AACzC,kDAA+C;AAE/C;;GAEG;AACI,KAAK,UAAU,mBAAmB;IACvC,MAAM,EACJ,KAAK,EACL,OAAO,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,OAAO,EAAE,GACjC,GAAG,mBAAQ,CAAC;IAEb,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,OAAO,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;QACzB,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;YACrB,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,uCAAuC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9E,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,IAAI,yBAAyB,CAAC,CAAC;gBAClF,OAAO;YACT,CAAC;YACD,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,KAAK,CAAC,CAAC;YACzD,2BAA2B;YAC3B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAC1B,oBAAY,EACZ,IAAI,CAAC,QAAQ,CAAC,aAAa,EAC3B,IAAI,CAAC,IAAI,GAAG,KAAK,CAClB,CAAC,CAAC,gBAAgB;YACnB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,oBAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;YAEpE,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;oBACzC,IAAI,OAAO;wBACT,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,IAAI,8BAA8B,CAAC,CAAC;oBACtF,OAAO;gBACT,CAAC;gBAED,MAAM,IAAI,GAAG,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;gBAE7B,IAAI,IAAI,KAAK,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACrC,IAAI,OAAO;wBACT,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,IAAI,yBAAyB,CAAC,CAAC;oBAC/E,OAAO;gBACT,CAAC;gBAED,MAAM,iBAAiB,GAAG,MAAM,IAAA,qCAAiB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAEjE,MAAM,IAAA,qBAAS,EAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBAE/C,cAAc;gBACd,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;gBAE/B,IAAI,OAAO;oBAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 渲染模板并保存文件
2
+ * 使用简单的爬虫抓取生成的站点页面
3
3
  */
4
- export declare function renderTemplates(): Promise<void>;
4
+ export declare const spiderStaticSiteGenerator: () => Promise<void>;
5
5
  //# sourceMappingURL=template.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/process/template.ts"],"names":[],"mappings":"AAmLA;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAyCrD"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/process/template.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,eAAO,MAAM,yBAAyB,qBA4ErC,CAAC"}