zengen 0.2.5 → 0.3.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.
Files changed (43) hide show
  1. package/.zen/meta.json +18 -0
  2. package/.zen/src/ar-SA/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  3. package/.zen/src/da-DK/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  4. package/.zen/src/de-DE/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  5. package/.zen/src/en-US/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  6. package/.zen/src/es-ES/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  7. package/.zen/src/es-MX/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  8. package/.zen/src/fi-FI/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  9. package/.zen/src/fr-FR/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  10. package/.zen/src/hi-IN/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  11. package/.zen/src/id-ID/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  12. package/.zen/src/it-IT/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  13. package/.zen/src/ja-JP/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  14. package/.zen/src/ko-KR/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  15. package/.zen/src/nl-NL/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  16. package/.zen/src/no-NO/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  17. package/.zen/src/pl-PL/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  18. package/.zen/src/pt-BR/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  19. package/.zen/src/pt-PT/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  20. package/.zen/src/ru-RU/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  21. package/.zen/src/sv-SE/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  22. package/.zen/src/th-TH/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  23. package/.zen/src/tr-TR/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  24. package/.zen/src/uk-UA/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  25. package/.zen/src/vi-VN/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
  26. package/.zen/src/zh-Hans/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +123 -0
  27. package/.zen/src/zh-Hant/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +123 -0
  28. package/assets/templates/default/layout.html +90 -5
  29. package/dist/process/scanSourceFiles.d.ts.map +1 -1
  30. package/dist/process/scanSourceFiles.js +6 -0
  31. package/dist/process/scanSourceFiles.js.map +1 -1
  32. package/dist/process/template.d.ts.map +1 -1
  33. package/dist/process/template.js +2 -3
  34. package/dist/process/template.js.map +1 -1
  35. package/dist/utils/convertMarkdownToHtml.d.ts.map +1 -1
  36. package/dist/utils/convertMarkdownToHtml.js +75 -22
  37. package/dist/utils/convertMarkdownToHtml.js.map +1 -1
  38. package/docs/test-mermaid.md +105 -0
  39. package/package.json +1 -1
  40. package/src/process/scanSourceFiles.ts +8 -0
  41. package/src/process/template.ts +2 -3
  42. package/src/utils/convertMarkdownToHtml.ts +80 -21
  43. package/.github/workflows/version.yml +0 -88
@@ -1,26 +1,15 @@
1
1
  import { marked } from 'marked';
2
2
  import hljs from 'highlight.js';
3
3
 
4
- // 配置 marked 使用 highlight.js 进行代码高亮
5
- marked.setOptions({
6
- highlight: function (code: string, lang: string) {
7
- if (lang && hljs.getLanguage(lang)) {
8
- try {
9
- return hljs.highlight(code, { language: lang }).value;
10
- } catch (err) {
11
- console.warn(`Failed to highlight code with language ${lang}:`, err);
12
- }
13
- }
14
- return hljs.highlightAuto(code).value;
15
- },
16
- pedantic: false,
17
- gfm: true,
18
- breaks: false,
19
- sanitize: false,
20
- smartLists: true,
21
- smartypants: false,
22
- xhtml: false,
23
- } as any);
4
+ // 辅助函数:转义 HTML 特殊字符
5
+ function escapeHtml(unsafe: string): string {
6
+ return unsafe
7
+ .replace(/&/g, '&')
8
+ .replace(/</g, '&lt;')
9
+ .replace(/>/g, '&gt;')
10
+ .replace(/"/g, '&quot;')
11
+ .replace(/'/g, '&#039;');
12
+ }
24
13
 
25
14
  /**
26
15
  * 将 Markdown 内容转换为 HTML
@@ -28,5 +17,75 @@ marked.setOptions({
28
17
  * @returns 转换后的 HTML 字符串
29
18
  */
30
19
  export const convertMarkdownToHtml = (mdContent: string): string => {
31
- return marked.parse(mdContent) as string;
20
+ // 创建自定义渲染器
21
+ const renderer = new marked.Renderer();
22
+ const originalCodeRenderer = renderer.code;
23
+
24
+ // 重写代码块渲染器以支持 Mermaid - 使用 any 类型绕过类型检查
25
+ (renderer as any).code = function (code: any, language?: string, isEscaped?: boolean) {
26
+ // 在 marked 17+ 中,code 参数是一个对象,包含 text 和 lang 属性
27
+ const codeText = typeof code === 'string' ? code : code?.text || '';
28
+ // 语言信息在 code.lang 中,而不是 language 参数
29
+ const lang = code?.lang || language;
30
+
31
+ // 检测 Mermaid 代码块
32
+ if (lang === 'mermaid') {
33
+ // 生成唯一的 ID 用于图表容器
34
+ const chartId = 'mermaid-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9);
35
+ return `
36
+ <div class="mermaid-diagram" data-mermaid-id="${chartId}">
37
+ <pre class="mermaid">${escapeHtml(codeText)}</pre>
38
+ </div>
39
+ `;
40
+ }
41
+
42
+ // 其他代码块使用原有高亮逻辑
43
+ return (originalCodeRenderer as any).call(this, code, language, isEscaped);
44
+ };
45
+
46
+ // 使用 marked.parse 的同步版本
47
+ // marked 17+ 默认返回 Promise,但我们可以使用 marked.parseSync 或 marked.parse 的同步模式
48
+ // 这里我们使用 marked.parse 并假设它是同步的(对于简单情况)
49
+ try {
50
+ // 尝试同步解析
51
+ const result = marked.parse(mdContent, {
52
+ renderer,
53
+ highlight: function (code: string, lang: string) {
54
+ // 跳过 Mermaid 代码块的高亮
55
+ if (lang === 'mermaid') {
56
+ return code;
57
+ }
58
+
59
+ if (lang && hljs.getLanguage(lang)) {
60
+ try {
61
+ return hljs.highlight(code, { language: lang }).value;
62
+ } catch (err) {
63
+ console.warn(`Failed to highlight code with language ${lang}:`, err);
64
+ }
65
+ }
66
+ return hljs.highlightAuto(code).value;
67
+ },
68
+ pedantic: false,
69
+ gfm: true,
70
+ breaks: false,
71
+ sanitize: false,
72
+ smartLists: true,
73
+ smartypants: false,
74
+ xhtml: false,
75
+ async: false, // 强制同步模式
76
+ } as any);
77
+
78
+ // 如果结果是 Promise,等待它(虽然我们设置了 async: false)
79
+ if (result && typeof result.then === 'function') {
80
+ // 这不应该发生,但如果发生了,返回一个占位符
81
+ console.warn('marked.parse returned a Promise despite async: false');
82
+ return '<!-- Markdown conversion in progress -->';
83
+ }
84
+
85
+ return result as unknown as string;
86
+ } catch (error) {
87
+ console.error('Error converting Markdown to HTML:', error);
88
+ const errorMessage = error instanceof Error ? error.message : String(error);
89
+ return `<div class="error">Error converting Markdown: ${errorMessage}</div>`;
90
+ }
32
91
  };
@@ -1,88 +0,0 @@
1
- name: Version Management
2
-
3
- on:
4
- push:
5
- branches: [main]
6
- paths:
7
- - 'package.json'
8
- - 'src/**'
9
-
10
- jobs:
11
- check-version:
12
- runs-on: ubuntu-latest
13
- outputs:
14
- version_changed: ${{ steps.check.outputs.version_changed }}
15
- new_version: ${{ steps.check.outputs.new_version }}
16
- steps:
17
- - name: Checkout repository
18
- uses: actions/checkout@v4
19
- with:
20
- fetch-depth: 0
21
-
22
- - name: Check if version changed
23
- id: check
24
- run: |
25
- # 获取当前版本
26
- CURRENT_VERSION=$(jq -r '.version' package.json)
27
- echo "Current version: $CURRENT_VERSION"
28
-
29
- # 获取上一个提交的版本
30
- git checkout HEAD~1 package.json 2>/dev/null || true
31
- PREVIOUS_VERSION=$(jq -r '.version' package.json 2>/dev/null || echo "0.0.0")
32
- git checkout HEAD package.json
33
-
34
- echo "Previous version: $PREVIOUS_VERSION"
35
-
36
- if [ "$CURRENT_VERSION" != "$PREVIOUS_VERSION" ]; then
37
- echo "Version changed from $PREVIOUS_VERSION to $CURRENT_VERSION"
38
- echo "version_changed=true" >> $GITHUB_OUTPUT
39
- echo "new_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
40
- else
41
- echo "Version unchanged"
42
- echo "version_changed=false" >> $GITHUB_OUTPUT
43
- echo "new_version=" >> $GITHUB_OUTPUT
44
- fi
45
-
46
- create-release:
47
- needs: check-version
48
- if: needs.check-version.outputs.version_changed == 'true'
49
- runs-on: ubuntu-latest
50
- steps:
51
- - name: Checkout repository
52
- uses: actions/checkout@v4
53
- with:
54
- fetch-depth: 0
55
-
56
- - name: Setup Node.js
57
- uses: actions/setup-node@v4
58
- with:
59
- node-version: '24.x'
60
-
61
- - name: Get version and changelog
62
- id: get_info
63
- run: |
64
- VERSION=$(jq -r '.version' package.json)
65
- echo "version=$VERSION" >> $GITHUB_OUTPUT
66
-
67
- # 尝试获取最近的提交信息作为发布说明
68
- CHANGELOG=$(git log --oneline -n 10 --grep="^feat\|^fix\|^chore\|^docs\|^style\|^refactor\|^test\|^perf" || echo "No significant changes found")
69
- echo "changelog<<EOF" >> $GITHUB_OUTPUT
70
- echo "$CHANGELOG" >> $GITHUB_OUTPUT
71
- echo "EOF" >> $GITHUB_OUTPUT
72
-
73
- - name: Create GitHub Release
74
- uses: softprops/action-gh-release@v1
75
- with:
76
- tag_name: v${{ steps.get_info.outputs.version }}
77
- name: Release v${{ steps.get_info.outputs.version }}
78
- body: |
79
- ## Changes in v${{ steps.get_info.outputs.version }}
80
-
81
- ${{ steps.get_info.outputs.changelog }}
82
-
83
- ### Automated Release
84
- This release was automatically created when the package version was updated.
85
- draft: false
86
- prerelease: false
87
- env:
88
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}