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.
- package/.zen/meta.json +18 -0
- package/.zen/src/ar-SA/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/da-DK/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/de-DE/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/en-US/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/es-ES/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/es-MX/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/fi-FI/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/fr-FR/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/hi-IN/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/id-ID/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/it-IT/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/ja-JP/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/ko-KR/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/nl-NL/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/no-NO/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/pl-PL/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/pt-BR/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/pt-PT/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/ru-RU/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/sv-SE/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/th-TH/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/tr-TR/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/uk-UA/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/vi-VN/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +121 -0
- package/.zen/src/zh-Hans/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +123 -0
- package/.zen/src/zh-Hant/50bf41ac6fd8ec8cd6481fd1114aaf00abed0461fc8e8c81cc0373d38ffa835c.md +123 -0
- package/assets/templates/default/layout.html +90 -5
- package/dist/process/scanSourceFiles.d.ts.map +1 -1
- package/dist/process/scanSourceFiles.js +6 -0
- package/dist/process/scanSourceFiles.js.map +1 -1
- package/dist/process/template.d.ts.map +1 -1
- package/dist/process/template.js +2 -3
- package/dist/process/template.js.map +1 -1
- package/dist/utils/convertMarkdownToHtml.d.ts.map +1 -1
- package/dist/utils/convertMarkdownToHtml.js +75 -22
- package/dist/utils/convertMarkdownToHtml.js.map +1 -1
- package/docs/test-mermaid.md +105 -0
- package/package.json +1 -1
- package/src/process/scanSourceFiles.ts +8 -0
- package/src/process/template.ts +2 -3
- package/src/utils/convertMarkdownToHtml.ts +80 -21
- 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
|
-
//
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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, '<')
|
|
9
|
+
.replace(/>/g, '>')
|
|
10
|
+
.replace(/"/g, '"')
|
|
11
|
+
.replace(/'/g, ''');
|
|
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
|
-
|
|
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 }}
|