hm-doc-tool 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 (40) hide show
  1. package/README.md +230 -0
  2. package/dist/api-client.d.ts +44 -0
  3. package/dist/api-client.js +137 -0
  4. package/dist/common/config.d.ts +11 -0
  5. package/dist/common/config.js +70 -0
  6. package/dist/common/path-generator.d.ts +39 -0
  7. package/dist/common/path-generator.js +192 -0
  8. package/dist/common/tree-formatter.d.ts +19 -0
  9. package/dist/common/tree-formatter.js +129 -0
  10. package/dist/common/tree-processor.d.ts +35 -0
  11. package/dist/common/tree-processor.js +145 -0
  12. package/dist/common/types.d.ts +38 -0
  13. package/dist/common/types.js +5 -0
  14. package/dist/download/downloader.d.ts +46 -0
  15. package/dist/download/downloader.js +251 -0
  16. package/dist/download/index.d.ts +16 -0
  17. package/dist/download/index.js +168 -0
  18. package/dist/download/link-localizer.d.ts +13 -0
  19. package/dist/download/link-localizer.js +116 -0
  20. package/dist/download/markdown-converter.d.ts +1 -0
  21. package/dist/download/markdown-converter.js +96 -0
  22. package/dist/download/summary-generator.d.ts +46 -0
  23. package/dist/download/summary-generator.js +188 -0
  24. package/dist/download/turndown-rules.d.ts +2 -0
  25. package/dist/download/turndown-rules.js +394 -0
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.js +65 -0
  28. package/dist/tree/index.d.ts +11 -0
  29. package/dist/tree/index.js +91 -0
  30. package/dist/wiki/index.d.ts +7 -0
  31. package/dist/wiki/index.js +22 -0
  32. package/dist/wiki/wiki-generator.d.ts +3 -0
  33. package/dist/wiki/wiki-generator.js +357 -0
  34. package/dist/wiki/wiki-types.d.ts +61 -0
  35. package/dist/wiki/wiki-types.js +3 -0
  36. package/dist/wiki/wiki-utils.d.ts +33 -0
  37. package/dist/wiki/wiki-utils.js +180 -0
  38. package/docs_catalog.json +28 -0
  39. package/package.json +29 -0
  40. package/wiki_config.json +198 -0
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadJson = loadJson;
4
+ exports.loadWikiConfig = loadWikiConfig;
5
+ exports.loadAllCatalogData = loadAllCatalogData;
6
+ exports.buildNodeMap = buildNodeMap;
7
+ exports.buildSummaryMap = buildSummaryMap;
8
+ exports.buildSummarySet = buildSummarySet;
9
+ exports.isKitNode = isKitNode;
10
+ exports.findKitNodes = findKitNodes;
11
+ exports.collectLeafNodes = collectLeafNodes;
12
+ exports.sanitizeName = sanitizeName;
13
+ exports.buildPathParts = buildPathParts;
14
+ exports.getKitZhName = getKitZhName;
15
+ exports.getKitKey = getKitKey;
16
+ exports.matchTopic = matchTopic;
17
+ exports.getToday = getToday;
18
+ /** Wiki工具函数 */
19
+ const fs_1 = require("fs");
20
+ const path_1 = require("path");
21
+ const config_js_1 = require("../common/config.js");
22
+ /** 加载JSON文件 */
23
+ function loadJson(filePath) {
24
+ const content = (0, fs_1.readFileSync)(filePath, "utf-8");
25
+ return JSON.parse(content);
26
+ }
27
+ /** 加载Wiki配置 */
28
+ function loadWikiConfig(configPath) {
29
+ return loadJson((0, path_1.resolve)(configPath));
30
+ }
31
+ /** 加载所有Catalog数据 */
32
+ function loadAllCatalogData(inputDir) {
33
+ const catalogConfig = (0, config_js_1.loadDocsCatalogConfig)();
34
+ const docsDirName = inputDir.split(/[\\/]/).pop() || "docs";
35
+ const catalogDataList = [];
36
+ for (const topLevel of catalogConfig) {
37
+ for (const catalog of topLevel.catalogs) {
38
+ const treePath = (0, path_1.resolve)(inputDir, `${catalog.id}_tree.json`);
39
+ const summaryPath = (0, path_1.resolve)(inputDir, `${catalog.id}_summary.json`);
40
+ // 检查文件是否存在,不存在则跳过
41
+ try {
42
+ const tree = loadJson(treePath);
43
+ const summary = loadJson(summaryPath);
44
+ const linkPrefix = `../../${docsDirName}/${topLevel.top_level}/${catalog.name}`;
45
+ catalogDataList.push({
46
+ topLevel: topLevel.top_level,
47
+ catalogId: catalog.id,
48
+ catalogName: catalog.name,
49
+ tree,
50
+ summary,
51
+ linkPrefix,
52
+ });
53
+ }
54
+ catch {
55
+ console.log(`[SKIP] 文件不存在: ${catalog.id}_tree.json 或 ${catalog.id}_summary.json`);
56
+ }
57
+ }
58
+ }
59
+ return catalogDataList;
60
+ }
61
+ /** 构建节点映射表 (nodeId -> node) */
62
+ function buildNodeMap(treeData) {
63
+ const nodeMap = new Map();
64
+ function walk(nodes) {
65
+ for (const node of nodes) {
66
+ nodeMap.set(node.nodeId, node);
67
+ if (node.children) {
68
+ walk(node.children);
69
+ }
70
+ }
71
+ }
72
+ walk(treeData);
73
+ return nodeMap;
74
+ }
75
+ /** 构建摘要映射表 (nodeId -> summary) */
76
+ function buildSummaryMap(summaryData) {
77
+ const map = new Map();
78
+ for (const node of summaryData) {
79
+ if (node.summary) {
80
+ map.set(node.nodeId, node.summary);
81
+ }
82
+ }
83
+ return map;
84
+ }
85
+ /** 构建摘要节点ID集合 */
86
+ function buildSummarySet(summaryData) {
87
+ return new Set(summaryData.map((n) => n.nodeId));
88
+ }
89
+ /** 判断是否为Kit节点 (匹配 "XXX Kit(YYY)" 格式) */
90
+ function isKitNode(node) {
91
+ return /.+ Kit(.+)/.test(node.nodeName);
92
+ }
93
+ /** 查找所有Kit节点 */
94
+ function findKitNodes(treeData) {
95
+ const kits = [];
96
+ function walk(nodes) {
97
+ for (const node of nodes) {
98
+ if (isKitNode(node)) {
99
+ kits.push(node);
100
+ }
101
+ if (node.children) {
102
+ walk(node.children);
103
+ }
104
+ }
105
+ }
106
+ walk(treeData);
107
+ return kits;
108
+ }
109
+ /** 收集叶子节点 */
110
+ function collectLeafNodes(node, summarySet) {
111
+ const leaves = [];
112
+ function walk(n) {
113
+ if (n.isLeaf || !n.children || n.children.length === 0) {
114
+ if (!summarySet || summarySet.has(n.nodeId)) {
115
+ leaves.push(n);
116
+ }
117
+ }
118
+ else {
119
+ for (const child of n.children) {
120
+ walk(child);
121
+ }
122
+ }
123
+ }
124
+ walk(node);
125
+ return leaves;
126
+ }
127
+ /** 清理文件名中的非法字符 */
128
+ function sanitizeName(name) {
129
+ return name.replace(/[<>:"/\\|?*\s]/g, "_");
130
+ }
131
+ /** 构建从根节点到指定节点的路径 */
132
+ function buildPathParts(node, nodeMap, sanitize = true) {
133
+ const parts = [];
134
+ let current = node;
135
+ while (current) {
136
+ let name = current.nodeName;
137
+ if (sanitize) {
138
+ name = sanitizeName(name);
139
+ }
140
+ parts.push(name);
141
+ const parentId = current.parent;
142
+ current = parentId ? nodeMap.get(parentId) : undefined;
143
+ }
144
+ parts.reverse();
145
+ return parts;
146
+ }
147
+ /** 从Kit节点名提取中文描述 */
148
+ function getKitZhName(nodeName) {
149
+ const match = nodeName.match(/Kit((.+?))/);
150
+ return match ? match[1] : "";
151
+ }
152
+ /** 从Kit节点名获取Kit Key */
153
+ function getKitKey(nodeName) {
154
+ const match = nodeName.match(/(.+?) Kit(/);
155
+ if (match) {
156
+ return match[1].replace(/ /g, "_") + "_Kit";
157
+ }
158
+ return "";
159
+ }
160
+ /** 匹配Topic分类 */
161
+ function matchTopic(nodeName, topicCategories) {
162
+ const matched = [];
163
+ for (const [catKey, catInfo] of Object.entries(topicCategories)) {
164
+ for (const pattern of catInfo.patterns) {
165
+ if (nodeName.includes(pattern)) {
166
+ matched.push(catKey);
167
+ break;
168
+ }
169
+ }
170
+ }
171
+ return matched;
172
+ }
173
+ /** 获取当前日期字符串 */
174
+ function getToday() {
175
+ const now = new Date();
176
+ const year = now.getFullYear();
177
+ const month = String(now.getMonth() + 1).padStart(2, "0");
178
+ const day = String(now.getDate()).padStart(2, "0");
179
+ return `${year}-${month}-${day}`;
180
+ }
@@ -0,0 +1,28 @@
1
+ [
2
+ {
3
+ "top_level": "application",
4
+ "catalogs": [
5
+ {
6
+ "id": "harmonyos-guides",
7
+ "name": "指南"
8
+ },
9
+ {
10
+ "id": "harmonyos-references",
11
+ "name": "API参考"
12
+ }
13
+ ]
14
+ },
15
+ {
16
+ "top_level": "atomic",
17
+ "catalogs": [
18
+ {
19
+ "id": "atomic-guides",
20
+ "name": "指南"
21
+ },
22
+ {
23
+ "id": "atomic-references",
24
+ "name": "API参考"
25
+ }
26
+ ]
27
+ }
28
+ ]
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "hm-doc-tool",
3
+ "version": "0.3.0",
4
+ "description": "Download and convert HarmonyOS documentation to Markdown",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "hm-doc": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist/",
11
+ "docs_catalog.json",
12
+ "wiki_config.json",
13
+ "README.md"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "start": "node dist/index.js",
18
+ "refresh": "node scripts/refresh.js"
19
+ },
20
+ "dependencies": {
21
+ "commander": "^12",
22
+ "turndown": "^7.1"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^20",
26
+ "@types/turndown": "^5",
27
+ "typescript": "^5.5.3"
28
+ }
29
+ }
@@ -0,0 +1,198 @@
1
+ {
2
+ "kitCategories": {
3
+ "Ability_Kit": {"zh": "程序框架服务", "desc": "应用模型、UIAbility、ExtensionAbility、页面路由等程序框架能力"},
4
+ "Accessibility_Kit": {"zh": "无障碍服务", "desc": "无障碍辅助功能、屏幕阅读、放大手势等"},
5
+ "Account_Kit": {"zh": "华为账号服务", "desc": "华为账号登录、应用账号管理、分布式账号等"},
6
+ "Accessory_Kit": {"zh": "配件接入服务", "desc": "华为分享生态的基础服务、三方配件接入"},
7
+ "Ads_Kit": {"zh": "广告服务", "desc": "广告展示、贴片广告、激励广告、横幅广告等"},
8
+ "Agent_Framework_Kit": {"zh": "智能体框架服务", "desc": "AI智能体开发框架"},
9
+ "AppGallery_Kit": {"zh": "应用市场服务", "desc": "应用市场集成、商品管理、门店管理等"},
10
+ "App_Linking_Kit": {"zh": "应用链接服务", "desc": "应用链接、深度链接"},
11
+ "Asset_Store_Kit": {"zh": "关键资产存储服务", "desc": "关键资产安全存储"},
12
+ "Audio_Kit": {"zh": "音频服务", "desc": "音频播放、录制、音量管理"},
13
+ "AVCodec_Kit": {"zh": "音视频编解码服务", "desc": "音视频编解码、封装解封装、转码等"},
14
+ "AVSession_Kit": {"zh": "音视频播控服务", "desc": "媒体会话管理、播控中心等"},
15
+ "Background_Tasks_Kit": {"zh": "后台任务开发服务", "desc": "后台任务、长时任务、延迟任务"},
16
+ "Basic_Services_Kit": {"zh": "基础服务", "desc": "基础系统服务"},
17
+ "CANN_Kit": {"zh": "CANN异构计算框架服务", "desc": "CANN异构计算框架、算子开发等"},
18
+ "Calendar_Kit": {"zh": "日历服务", "desc": "日历管理、日程提醒等"},
19
+ "Call_Service_Kit": {"zh": "通话服务", "desc": "通话管理、来电接听"},
20
+ "Camera_Kit": {"zh": "相机服务", "desc": "相机拍照、录像、预览、元数据等"},
21
+ "Car_Kit": {"zh": "车服务", "desc": "车载场景特有能力"},
22
+ "Cloud_Foundation_Kit": {"zh": "云开发服务", "desc": "云函数、云数据库、云存储"},
23
+ "Connectivity_Kit": {"zh": "短距通信服务", "desc": "蓝牙、NFC、Wi-Fi P2P等短距通信"},
24
+ "Contacts_Kit": {"zh": "联系人服务", "desc": "联系人管理、电话号码格式化等"},
25
+ "Content_Embed_Kit": {"zh": "内容嵌入服务", "desc": "内容嵌入与跨应用交互"},
26
+ "Core_File_Kit": {"zh": "文件基础服务", "desc": "文件基础操作、文件访问"},
27
+ "Core_Speech_Kit": {"zh": "基础语音服务", "desc": "基础语音识别与合成能力"},
28
+ "Core_Vision_Kit": {"zh": "基础视觉服务", "desc": "基础视觉识别能力"},
29
+ "Crypto_Architecture_Kit": {"zh": "加解密算法框架服务", "desc": "加解密算法框架"},
30
+ "Data_Augmentation_Kit": {"zh": "数据增强服务", "desc": "数据增强处理"},
31
+ "Data_Protection_Kit": {"zh": "数据保护服务", "desc": "数据加密保护"},
32
+ "Desktop_Extension_Kit": {"zh": "桌面拓展服务", "desc": "桌面拓展开发"},
33
+ "Device_Certificate_Kit": {"zh": "设备证书服务", "desc": "设备证书管理"},
34
+ "Device_Security_Kit": {"zh": "设备安全服务", "desc": "设备安全检测与防护"},
35
+ "Distributed_Service_Kit": {"zh": "分布式管理服务", "desc": "分布式数据、分布式调度"},
36
+ "Driver_Development_Kit": {"zh": "驱动开发服务", "desc": "驱动开发框架"},
37
+ "DRM_Kit": {"zh": "数字版权保护服务", "desc": "DRM数字版权管理与媒体保护"},
38
+ "Enterprise_Data_Guard_Kit": {"zh": "企业数据保护服务", "desc": "企业数据保护与安全"},
39
+ "Enterprise_Space_Kit": {"zh": "企业数字空间服务", "desc": "企业数字空间管理"},
40
+ "Enterprise_Threat_Protection_Kit": {"zh": "企业威胁防护服务", "desc": "企业威胁检测与防护"},
41
+ "FAST_Kit": {"zh": "算法加速服务", "desc": "FAST应用开发框架"},
42
+ "File_Manager_Service_Kit": {"zh": "文件管理服务", "desc": "文件管理器集成"},
43
+ "Form_Kit": {"zh": "卡片开发服务", "desc": "服务卡片开发"},
44
+ "Function_Flow_Runtime_Kit": {"zh": "Function Flow运行时服务", "desc": "函数流运行时框架"},
45
+ "Game_Controller_Kit": {"zh": "游戏控制器服务", "desc": "游戏手柄、控制器支持"},
46
+ "Game_Service_Kit": {"zh": "游戏服务", "desc": "游戏成就、排行榜、存档"},
47
+ "Graphics_Accelerate_Kit": {"zh": "图形加速服务", "desc": "图形渲染加速"},
48
+ "Health_Service_Kit": {"zh": "运动健康服务", "desc": "运动健康数据管理"},
49
+ "IAP_Kit": {"zh": "应用内支付服务", "desc": "应用内支付、商品管理、订单管理等"},
50
+ "Image_Kit": {"zh": "图片处理服务", "desc": "图片编解码、图片处理、码图生成与识别"},
51
+ "IME_Kit": {"zh": "输入法开发服务", "desc": "输入法框架开发"},
52
+ "Input_Kit": {"zh": "多模输入服务", "desc": "触摸屏、键盘、鼠标、手柄等多模输入"},
53
+ "Intents_Kit": {"zh": "意图框架服务", "desc": "意图识别与处理框架"},
54
+ "IPC_Kit": {"zh": "进程间通信服务", "desc": "RPC、IPC进程间通信机制"},
55
+ "Kernel_Enhance_Kit": {"zh": "内核增强能力", "desc": "内核增强功能"},
56
+ "Live_View_Kit": {"zh": "实况窗服务", "desc": "实况窗、动态通知"},
57
+ "Localization_Kit": {"zh": "本地化开发服务", "desc": "国际化、时区、多语言等"},
58
+ "Location_Kit": {"zh": "位置服务", "desc": "GPS定位、地理围栏、位置上报等"},
59
+ "Map_Kit": {"zh": "地图服务", "desc": "地图显示、导航、POI搜索等"},
60
+ "MDM_Kit": {"zh": "企业设备管理服务", "desc": "企业设备管理、策略配置等"},
61
+ "Mechanic_Kit": {"zh": "机械设备管理服务", "desc": "机械设备管理与控制"},
62
+ "Media_Kit": {"zh": "媒体服务", "desc": "媒体播放、录制、转码"},
63
+ "Media_Library_Kit": {"zh": "媒体文件管理服务", "desc": "媒体库访问、相册管理"},
64
+ "MindSpore_Lite_Kit": {"zh": "昇思推理框架服务", "desc": "MindSpore Lite AI推理"},
65
+ "Multimodal_Awareness_Kit": {"zh": "多模态融合感知服务", "desc": "多模态感知融合"},
66
+ "Natural_Language_Kit": {"zh": "自然语言理解服务", "desc": "自然语言处理与理解"},
67
+ "NearLink_Kit": {"zh": "星闪服务", "desc": "星闪短距通信协议"},
68
+ "Network_Boost_Kit": {"zh": "网络加速服务", "desc": "网络加速优化"},
69
+ "Network_Kit": {"zh": "网络服务", "desc": "HTTP、WebSocket、Socket、网络管理等"},
70
+ "Neural_Network_Runtime_Kit": {"zh": "Neural Network运行时服务", "desc": "神经网络运行时"},
71
+ "Notification_Kit": {"zh": "用户通知服务", "desc": "通知管理、消息推送"},
72
+ "Online_Authentication_Kit": {"zh": "在线认证服务", "desc": "在线身份认证"},
73
+ "PDF_Kit": {"zh": "PDF服务", "desc": "PDF文档查看与处理"},
74
+ "Payment_Kit": {"zh": "鸿蒙支付服务", "desc": "华为支付集成"},
75
+ "Pen_Kit": {"zh": "手写笔服务", "desc": "手写笔输入、笔迹预测、手写套件"},
76
+ "Performance_Analysis_Kit": {"zh": "性能分析服务", "desc": "性能分析与调优"},
77
+ "Preview_Kit": {"zh": "文件预览服务", "desc": "文件预览能力"},
78
+ "Push_Kit": {"zh": "推送服务", "desc": "消息推送、通知订阅等"},
79
+ "Reader_Kit": {"zh": "阅读服务", "desc": "电子书阅读相关能力"},
80
+ "Remote_Communication_Kit": {"zh": "远场通信服务", "desc": "远场通信能力"},
81
+ "Ringtone_Kit": {"zh": "铃声服务", "desc": "铃声管理与播放"},
82
+ "Scan_Kit": {"zh": "统一扫码服务", "desc": "二维码/条码扫描与生成"},
83
+ "Scenario_Fusion_Kit": {"zh": "融合场景服务", "desc": "场景融合与编排"},
84
+ "Screen_Time_Guard_Kit": {"zh": "屏幕时间守护服务", "desc": "屏幕使用时间管理"},
85
+ "Sensor_Service_Kit": {"zh": "传感器服务", "desc": "传感器数据访问"},
86
+ "Service_Collaboration_Kit": {"zh": "协同服务", "desc": "跨设备服务协同"},
87
+ "Share_Kit": {"zh": "分享服务", "desc": "系统分享面板、跨应用分享"},
88
+ "Spatial_Recon_Kit": {"zh": "空间建模服务", "desc": "3D空间建模与重建"},
89
+ "Speech_Kit": {"zh": "场景化语音服务", "desc": "语音识别、语音合成等"},
90
+ "Telephony_Kit": {"zh": "蜂窝通信服务", "desc": "通话、短信、蜂窝网络管理等"},
91
+ "Test_Kit": {"zh": "应用测试服务", "desc": "单元测试、UI测试、性能测试等"},
92
+ "UI_Design_Kit": {"zh": "UI设计套件", "desc": "UI设计规范与组件"},
93
+ "Universal_Keystore_Kit": {"zh": "密钥管理服务", "desc": "密钥存储与管理"},
94
+ "User_Authentication_Kit": {"zh": "用户认证服务", "desc": "用户身份认证"},
95
+ "Vision_Kit": {"zh": "场景化视觉服务", "desc": "图像识别、文字识别、目标检测等"},
96
+ "Wallet_Kit": {"zh": "钱包服务", "desc": "华为钱包、卡券管理"},
97
+ "Wear_Engine_Kit": {"zh": "穿戴服务", "desc": "穿戴设备交互"},
98
+ "Weather_Service_Kit": {"zh": "天气服务", "desc": "天气数据查询"},
99
+ "XEngine_Kit": {"zh": "GPU加速引擎服务", "desc": "跨平台渲染引擎"}
100
+ },
101
+ "topicCategories": {
102
+ "ui": {
103
+ "zh": "UI开发",
104
+ "desc": "ArkUI声明式开发、组件、布局、动画、状态管理",
105
+ "patterns": ["UI", "自定义组件", "线性布局", "弹性布局", "栅格", "RelativeContainer", "列表", "网格", "Swiper", "tabs", "Scroll", "Flip", "WaterFlow", "Canvas", "自定义绘制", "XComponent", "装饰器", "状态管理", "@State", "@Prop", "@Link", "@Provide", "@Consume", "@Watch", "@Builder", "@Extend", "@Styles", "@AnimatableExtend", "声明式", "按钮", "文本", "图片", "视频", "Slider", "Rating", "Toggle", "Checkbox", "Radio", "Select", "DatePicker", "TimePicker", "TextPicker", "TextInput", "TextArea", "Search", "Progress", "Loading", "Blank", "Divider", "Badge", "Column", "Row", "Stack", "Flex", "List", "Grid", "AlphabetIndexer", "Navigation", "NavRouter", "NavDestination", "Navigator", "Panel", "Sheet", "半模态", "弹窗", "AlertDialog", "Toast", "ContextMenu", "Popup", "Bind", "拖拽", "手势", "触摸", "按键", "焦点", "鼠标", "_hover", "菜单", "ContextMenu", "Font", "字体", "RichEditor", "富文本", "组件复用", "LazyForEach", "按需加载", "@Reusable", "@Local", "@Param", "@Event", "@Monitor"]
106
+ },
107
+ "web": {
108
+ "zh": "Web开发",
109
+ "desc": "Web组件、WebView、WebGL、网页调试与适配",
110
+ "patterns": ["Web组件", "WebGL", "Web渲染", "Web调试", "Web页面", "WebView", "Web安全", "Web深色", "Web组件嵌套", "Web组件焦点", "Web组件对接", "Web组件支持", "Web组件大小", "ArkWeb", "HTML5", "JavaScript", "CSS", "Web", "W3C", "URL", "Cookie", "UserAgent"]
111
+ },
112
+ "security": {
113
+ "zh": "安全与加密",
114
+ "desc": "密钥管理、证书、加解密、生物认证、权限管理",
115
+ "patterns": ["密钥", "加密", "解密", "签名验签", "签名恢复", "签名_", "证书", "权限", "生物特征", "指纹", "人脸", "安全", "认证", "授权", "访问控制", "对称密钥", "非对称密钥", "ECC", "RSA", "AES", "SM2", "SM3", "SM4", "HMAC", "消息摘要", "Hash", "SHA", "资产", "密钥协商", "公钥", "私钥", "通行密钥", "数字信封", "安全随机", "证书链", "证书CMS", "密钥生成", "密钥导入"]
116
+ },
117
+ "data": {
118
+ "zh": "数据管理",
119
+ "desc": "关系型数据库、分布式数据、数据持久化、数据共享",
120
+ "patterns": ["数据", "数据库", "RDB", "关系型", "分布式数据", "数据持久化", "用户首选项", "KV", "数据共享", "DataShare", "数据导入导出", "标准化数据", "数据分级", "UDMF", "数据同步", "数据备份"]
121
+ },
122
+ "file": {
123
+ "zh": "文件管理",
124
+ "desc": "文件读写、目录管理、文件选择、文件预览",
125
+ "patterns": ["文件", "目录", "FileIO", "文件选择", "文件预览", "文件管理", "应用文件", "用户文件", "分布式文件", "沙箱", "文件拷贝", "文件移动", "文件删除", "压缩", "解压", "Zip"]
126
+ },
127
+ "network": {
128
+ "zh": "网络与通信",
129
+ "desc": "HTTP、Socket、WebSocket、网络管理、连接迁移",
130
+ "patterns": ["网络", "HTTP", "Socket", "WebSocket", "请求", "连接迁移", "MDNS", "网络质量", "NetConnection", "NetManager", "TLS", "证书校验", "网络安全"]
131
+ },
132
+ "media": {
133
+ "zh": "媒体",
134
+ "desc": "音视频播放录制、图片处理、相机、媒体库",
135
+ "patterns": ["媒体", "音视频", "播放", "录制", "AVPlayer", "AVRecorder", "SoundPool", "音频", "视频", "摄像头", "麦克风", "媒体会话", "编解码", "转码", "视频解码", "视频编码", "音频解码", "音频编码", "元数据", "MediaQuery"]
136
+ },
137
+ "graphics": {
138
+ "zh": "图形与3D",
139
+ "desc": "2D/3D图形渲染、OpenGL/Vulkan、光线追踪、AR",
140
+ "patterns": ["图形", "3D", "渲染", "OpenGL", "Vulkan", "Shader", "纹理", "光照", "光线追踪", "反射", "阴影", "粒子", "骨骼", "动画", "AR", "XR", "模型", "材质", "场景", "相机的3D"]
141
+ },
142
+ "app_model": {
143
+ "zh": "应用模型",
144
+ "desc": "应用组件生命周期、Ability、ExtensionAbility、应用配置",
145
+ "patterns": ["应用模型", "UIAbility", "ExtensionAbility", "AbilityStage", "ServiceExtension", "DataShareExtension", "应用配置", "应用组件", "FA模型", "Stage模型", "多HAP", "应用生命周期", "页面路由", "Want", "应用上下文", "Context"]
146
+ },
147
+ "perf": {
148
+ "zh": "性能优化",
149
+ "desc": "性能调优、内存管理、功耗优化、帧率优化",
150
+ "patterns": ["性能", "功耗", "内存", "优化", "帧率", "调优", "Profiler", "Debug", "HiProfiler", "SmartPerf", "trace", "内存泄漏", "卡顿", "流畅度"]
151
+ },
152
+ "test": {
153
+ "zh": "测试与调试",
154
+ "desc": "单元测试、UI测试、调试工具、DevEco测试",
155
+ "patterns": ["测试", "Mock", "单元测试", "UiTest", "测试框架", "调试", "DevEco", "预览", "日志", "HiLog", "hdc"]
156
+ },
157
+ "i18n": {
158
+ "zh": "国际化",
159
+ "desc": "多语言、时区、ICU国际化能力",
160
+ "patterns": ["国际化", "时区", "多语言", "ICU", "Intl", "Resource", "本地化"]
161
+ },
162
+ "notification": {
163
+ "zh": "通知与推送",
164
+ "desc": "通知管理、推送消息、Live View",
165
+ "patterns": ["通知", "推送", "Live", "WantAgent", "提醒"]
166
+ },
167
+ "device": {
168
+ "zh": "设备管理",
169
+ "desc": "设备信息、传感器、屏幕、折叠屏适配",
170
+ "patterns": ["设备", "传感器", "屏幕", "折叠", "振动", "亮灭屏", "设备信息", "系统参数"]
171
+ },
172
+ "distributed": {
173
+ "zh": "分布式",
174
+ "desc": "分布式能力、跨设备协同、设备迁移",
175
+ "patterns": ["分布式", "跨设备", "迁移", "流转", "协同", "设备选择"]
176
+ },
177
+ "ohpm": {
178
+ "zh": "OHPM包管理",
179
+ "desc": "OHPM三方库管理与发布",
180
+ "patterns": ["ohpm", "ohpm-repo"]
181
+ },
182
+ "arkts": {
183
+ "zh": "ArkTS语言",
184
+ "desc": "ArkTS语言特性、Node-API、JSVM、方舟字节码",
185
+ "patterns": ["ArkTS", "TypeScript", "Node-API", "JSVM", "方舟", "字节码", "NAPI", "跨语言"]
186
+ },
187
+ "game": {
188
+ "zh": "游戏服务",
189
+ "desc": "Game Service Kit、游戏开发相关",
190
+ "patterns": ["Game", "游戏"]
191
+ },
192
+ "ai": {
193
+ "zh": "AI与智能",
194
+ "desc": "MindSpore、AI推理、神经网络、大模型",
195
+ "patterns": ["MindSpore", "AI", "神经网络", "推理", "NNO", "大模型", "智能", "模型转换", "CANN"]
196
+ }
197
+ }
198
+ }