wechat-emojis 1.0.2 → 2.0.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 (97) hide show
  1. package/README.md +82 -19
  2. package/assets/animal//345/217/221/346/212/226.png +0 -0
  3. package/assets/animal//347/214/252/345/244/264.png +0 -0
  4. package/assets/animal//350/267/263/350/267/263.png +0 -0
  5. package/assets/animal//350/275/254/345/234/210.png +0 -0
  6. package/assets/blessing//347/210/206/347/253/271.png +0 -0
  7. package/assets/blessing//347/231/274.png +0 -0
  8. package/assets/blessing//347/244/274/347/211/251.png +0 -0
  9. package/assets/face/Emm.png +0 -0
  10. package/assets/face//344/272/262/344/272/262.png +0 -0
  11. package/assets/face//345/201/267/347/254/221.png +0 -0
  12. package/assets/face//345/202/262/346/205/242.png +0 -0
  13. package/assets/face//345/206/215/350/247/201.png +0 -0
  14. package/assets/face//345/212/240/346/262/271.png +0 -0
  15. package/assets/face//345/217/221/345/221/206.png +0 -0
  16. package/assets/face//345/217/221/346/200/222.png +0 -0
  17. package/assets/face//345/217/257/346/200/234.png +0 -0
  18. package/assets/face//345/217/263/345/223/274/345/223/274.png +0 -0
  19. package/assets/face//345/217/271/346/260/224.png +0 -0
  20. package/assets/face//345/220/220.png +0 -0
  21. package/assets/face//345/221/262/347/211/231.png +0 -0
  22. package/assets/face//345/222/222/351/252/202.png +0 -0
  23. package/assets/face//345/223/207.png +0 -0
  24. package/assets/face//345/230/230.png +0 -0
  25. package/assets/face//345/230/277/345/223/210.png +0 -0
  26. package/assets/face//345/233/247.png +0 -0
  27. package/assets/face//345/233/260.png +0 -0
  28. package/assets/face//345/235/217/347/254/221.png +0 -0
  29. package/assets/face//345/244/247/345/223/255.png +0 -0
  30. package/assets/face//345/244/251/345/225/212.png +0 -0
  31. package/assets/face//345/245/270/347/254/221.png +0 -0
  32. package/assets/face//345/247/224/345/261/210.png +0 -0
  33. package/assets/face//345/256/263/347/276/236.png +0 -0
  34. package/assets/face//345/260/264/345/260/254.png +0 -0
  35. package/assets/face//345/276/256/347/254/221.png +0 -0
  36. package/assets/face//345/277/253/345/223/255/344/272/206.png +0 -0
  37. package/assets/face//346/201/220/346/203/247.png +0 -0
  38. package/assets/face//346/202/240/351/227/262.png +0 -0
  39. package/assets/face//346/203/212/346/201/220.png +0 -0
  40. package/assets/face//346/203/212/350/256/266.png +0 -0
  41. package/assets/face//346/204/211/345/277/253.png +0 -0
  42. package/assets/face//346/206/250/347/254/221.png +0 -0
  43. package/assets/face//346/211/223/350/204/270.png +0 -0
  44. package/assets/face//346/212/223/347/213/202.png +0 -0
  45. package/assets/face//346/212/240/351/274/273.png +0 -0
  46. package/assets/face//346/222/207/345/230/264.png +0 -0
  47. package/assets/face//346/223/246/346/261/227.png +0 -0
  48. package/assets/face//346/225/262/346/211/223.png +0 -0
  49. package/assets/face//346/227/240/350/257/255.png +0 -0
  50. package/assets/face//346/227/272/346/237/264.png +0 -0
  51. package/assets/face//346/231/225.png +0 -0
  52. package/assets/face//346/265/201/346/263/252.png +0 -0
  53. package/assets/face//347/226/221/351/227/256.png +0 -0
  54. package/assets/face//347/231/275/347/234/274.png +0 -0
  55. package/assets/face//347/232/261/347/234/211.png +0 -0
  56. package/assets/face//347/235/241.png +0 -0
  57. package/assets/face//347/244/276/344/274/232/347/244/276/344/274/232.png +0 -0
  58. package/assets/face//350/200/266.png +0 -0
  59. package/assets/face//350/204/270/347/272/242.png +0 -0
  60. package/assets/face//350/211/262.png +0 -0
  61. package/assets/face//350/213/246/346/266/251.png +0 -0
  62. package/assets/face//350/243/202/345/274/200.png +0 -0
  63. package/assets/face//350/256/251/346/210/221/347/234/213/347/234/213.png +0 -0
  64. package/assets/face//350/260/203/347/232/256.png +0 -0
  65. package/assets/face//351/227/255/345/230/264.png +0 -0
  66. package/assets/face//351/232/276/350/277/207.png +0 -0
  67. package/assets/face//351/252/267/351/253/205.png +0 -0
  68. package/assets/face//351/274/223/346/216/214.png +0 -0
  69. package/assets/gesture/OK.png +0 -0
  70. package/assets/gesture//345/213/276/345/274/225.png +0 -0
  71. package/assets/gesture//345/220/210/345/215/201.png +0 -0
  72. package/assets/gesture//345/274/261.png +0 -0
  73. package/assets/gesture//346/212/261/346/213/263.png +0 -0
  74. package/assets/gesture//346/213/245/346/212/261.png +0 -0
  75. package/assets/gesture//346/213/263/345/244/264.png +0 -0
  76. package/assets/gesture//346/217/241/346/211/213.png +0 -0
  77. package/assets/gesture//350/203/234/345/210/251.png +0 -0
  78. package/assets/other//344/276/277/344/276/277.png +0 -0
  79. package/assets/other//345/207/213/350/260/242.png +0 -0
  80. package/assets/other//345/222/226/345/225/241.png +0 -0
  81. package/assets/other//345/225/244/351/205/222.png +0 -0
  82. package/assets/other//345/230/264/345/224/207.png +0 -0
  83. package/assets/other//345/244/252/351/230/263.png +0 -0
  84. package/assets/other//345/277/203/347/242/216.png +0 -0
  85. package/assets/other//346/234/210/344/272/256.png +0 -0
  86. package/assets/other//347/202/270/345/274/271.png +0 -0
  87. package/assets/other//347/210/261/345/277/203.png +0 -0
  88. package/assets/other//347/216/253/347/221/260.png +0 -0
  89. package/assets/other//350/217/234/345/210/200.png +0 -0
  90. package/assets/other//350/233/213/347/263/225.png +0 -0
  91. package/dist/index.d.ts +162 -0
  92. package/{API.md → docs/API.md} +4 -4
  93. package/docs/NPM_USAGE.md +223 -0
  94. package/{REACT_USAGE.md → docs/REACT_USAGE.md} +3 -4
  95. package/package.json +22 -14
  96. package/wechatEmoji.ts +0 -364
  97. /package/{wechatEmoji.js → dist/index.js} +0 -0
package/README.md CHANGED
@@ -1,6 +1,62 @@
1
1
  # 微信表情包
2
2
 
3
- 完整的微信内置表情资源库,包含 109 个高清 PNG 图片和类型安全的 TypeScript API。
3
+ 完整的微信内置表情资源库,包含 109 个 100×100 PNG 图片和类型安全的 TypeScript API,全部图片合计 690.3 KB。
4
+
5
+ ## 在线浏览
6
+
7
+ [https://xxk8.github.io/wechat-emojis/](https://xxk8.github.io/wechat-emojis/)
8
+
9
+ 网站是纯静态的:`index.html` 由 `site/index.template.html`、`site/app.ts` 和 `src/index.ts` 生成,表情图片直接复用 `assets/`。视觉与交互规范记录在仓库的 `design.md`。
10
+
11
+ ```bash
12
+ npm run build:site # 重新生成 index.html(含内联的页面脚本)
13
+ npm run check:site # 校验表情数量、资源引用和页面结构
14
+ ```
15
+
16
+ 修改表情映射或 `site/` 下的模板、样式、脚本后,重新运行 `build:site` 并提交 `index.html`。GitHub Pages 直接从 `main` 分支根目录发布,不需要构建流水线。
17
+
18
+ ### 全部源码为 TypeScript
19
+
20
+ 仓库里没有手写的 `.js` / `.mjs`:`src/`、`scripts/`、`site/app.ts` 都是 TypeScript。脚本由 Node 的类型剥离直接运行,不产出中间文件;页面脚本由构建时用 esbuild 编译并内联进 `index.html`,所以站点没有额外的 JS 请求。
21
+
22
+ 运行脚本需要 **Node.js ≥ 22.6**(类型剥离);已发布的 npm 包本身仍支持 Node 14+,因为消费者只用 `dist/` 与 PNG。
23
+
24
+ ```bash
25
+ npm run typecheck:scripts # 校验 scripts/ 与 site/app.ts 的类型
26
+ ```
27
+
28
+ 迁移细节与取舍记录在仓库的 `docs/TYPESCRIPT.md`。
29
+
30
+ ### npm 包里装的是什么
31
+
32
+ 只装运行时需要的东西,网站源码不随包发布:
33
+
34
+ | 内容 | 路径 |
35
+ | --- | --- |
36
+ | 运行时 | `dist/index.js`、`dist/index.d.ts` |
37
+ | 表情资源 | `assets/**/*.png`(109 张) |
38
+ | 使用文档 | `docs/API.md`、`docs/NPM_USAGE.md`、`docs/REACT_USAGE.md` |
39
+ | 包说明 | `README.md`、`package.json` |
40
+
41
+ **不会**包含 `site/`、`scripts/`、`src/`、`examples/`、`index.html`、`design.md`、`docs/TYPESCRIPT.md`、`tsconfig*`、`.github/`。白名单在 `package.json` 的 `files` 字段,已显式列到单个文件而不是通配目录。
42
+
43
+ ```bash
44
+ npm run check:package # 实际跑 npm pack,断言包内没有开发文件与死链
45
+ ```
46
+
47
+ #### 从本地目录安装时的注意
48
+
49
+ `files` 字段只作用于 `npm pack` / `publish`。如果直接 `npm install ../wechat-emojis` 指向本地仓库,npm 会以**软链接**把整个仓库接进项目(包括 `site/`、`scripts/`、`index.html`)。这是 npm 对本地路径的固有行为。
50
+
51
+ 要拿到与发布版一致的内容:
52
+
53
+ ```bash
54
+ npm install ../wechat-emojis --install-links # 按 files 白名单打包后安装
55
+ # 或者先打包再装
56
+ npm pack ../wechat-emojis && npm install ./wechat-emojis-2.0.0.tgz
57
+ ```
58
+
59
+ 从 npm registry 或 Git 地址安装不受此影响,实际内容仍是上表那 116 个文件。
4
60
 
5
61
  ## 功能特性
6
62
 
@@ -9,7 +65,7 @@
9
65
  - 🚀 **即插即用** - 支持 React、Vue、Angular 等主流框架
10
66
  - 📦 **多种导入方式** - ES6 模块、CommonJS、直接文件引用
11
67
  - 🔍 **强大 API** - 搜索、分类、随机获取等功能
12
- - 📱 **高质量图片** - PNG 格式,适合各种显示场景
68
+ - 📱 **统一尺寸** - 全部 PNG 都是 100×100 透明背景,整套 690.3 KB
13
69
  - 📚 **详细文档** - 完整 API 文档和使用示例
14
70
 
15
71
  ## 快速开始
@@ -34,7 +90,7 @@ cp -r node_modules/wechat-emojis/assets/* public/assets/
34
90
  import { getEmojiPath, getEmojisByCategory, EmojiCategory, searchEmojis } from 'wechat-emojis';
35
91
 
36
92
  // 或者从本地导入
37
- // import { getEmojiPath, getEmojisByCategory, EmojiCategory, searchEmojis } from './wechatEmoji';
93
+ // import { getEmojiPath, getEmojisByCategory, EmojiCategory, searchEmojis } from './src';
38
94
 
39
95
  // 获取单个表情
40
96
  const smilePath = getEmojiPath('微笑'); // 'assets/face/微笑.png'
@@ -50,18 +106,22 @@ const laughEmojis = searchEmojis('笑'); // 包含"笑"的所有表情
50
106
 
51
107
  ```text
52
108
  wechat-emojis/
109
+ ├── index.html # GitHub Pages 站点(由 scripts/build-site.ts 生成)
110
+ ├── design.md # 站点设计规范与检查清单
111
+ ├── site/ # 站点模板、品牌样式、页面样式与 app.ts
112
+ ├── src/
113
+ │ └── index.ts # TypeScript API模块(源码)
114
+ ├── dist/ # 构建产物(npm run build 生成,含 index.js 和 index.d.ts)
53
115
  ├── assets/ # 表情图片资源 (109个PNG文件)
54
116
  │ ├── face/ # 人脸表情 (75个)
55
117
  │ ├── gesture/ # 手势表情 (10个)
56
118
  │ ├── animal/ # 动物表情 (4个)
57
119
  │ ├── blessing/ # 祝福表情 (7个)
58
120
  │ └── other/ # 其他表情 (13个)
59
- ├── wechatEmoji.ts # TypeScript API模块
60
- ├── wechatEmoji.js # 编译后的JavaScript文件
61
- ├── data.js # 基础数据文件
62
- ├── example.ts # 使用示例
63
- ├── API.md # 详细API文档
64
- └── tsconfig.json # TypeScript配置
121
+ ├── examples/ # 使用示例(TypeScript 和 React)
122
+ ├── docs/ # API.md、REACT_USAGE.md、NPM_USAGE.md
123
+ ├── scripts/ # 资源校验、站点生成、站点检查与图片优化脚本(全部 .ts)
124
+ └── tsconfig.json # TypeScript配置
65
125
  ```
66
126
 
67
127
  ## 使用指南
@@ -189,22 +249,25 @@ interface EmojiInfo {
189
249
 
190
250
  ## 技术要求
191
251
 
192
- - **TypeScript**: 4.0+ (可选,用于类型检查)
193
- - **Node.js**: 12+ (用于编译,可选)
252
+ - **TypeScript**: 5.9+(仓库开发需要;使用包时可选用任意 4.0+)
253
+ - **Node.js**: 消费者 14+;运行本仓库的脚本需要 22.6+(类型剥离)
194
254
  - **浏览器**: 支持 ES2017+ 的现代浏览器
195
255
  - **框架**: React 16+, Vue 3+, Angular 12+ 或原生 JavaScript
196
256
 
197
257
  ## 编译和构建
198
258
 
199
259
  ```bash
200
- # 编译 TypeScript
201
- npx tsc wechatEmoji.ts --target es2017 --module commonjs
260
+ # 编译到 dist/(同时生成 index.d.ts)
261
+ npm run build
262
+
263
+ # 仅做类型检查
264
+ npm run typecheck
202
265
 
203
- # 或使用配置文件
204
- npx tsc
266
+ # 构建、类型检查、校验 assets 与表情映射,并检查发布包内容
267
+ npm test
205
268
 
206
- # 生成类型声明文件
207
- npx tsc --declaration
269
+ # 重新生成静态站点并校验
270
+ npm run build:site && npm run check:site
208
271
  ```
209
272
 
210
273
  ## 常见问题
@@ -246,6 +309,6 @@ const customPath = getEmojiPath('微笑')?.replace('assets/', 'my-assets/');
246
309
  # 请我喝杯茶 | buy me a cup of tea
247
310
 
248
311
  <div style="display: flex; justify-content: center; gap: 20px;">
249
- <img src="public/images/alipay.png" alt="支付宝" width="300" />
250
- <img src="public/images/wechat.png" alt="微信" width="300" />
312
+ <img src="docs/images/alipay.png" alt="支付宝" width="300" />
313
+ <img src="docs/images/wechat.png" alt="微信" width="300" />
251
314
  </div>
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,162 @@
1
+ /**
2
+ * 微信表情包 TypeScript 模块
3
+ * 提供类型安全的表情访问和图片路径获取功能
4
+ */
5
+ /**
6
+ * 表情类别枚举
7
+ */
8
+ export declare enum EmojiCategory {
9
+ /** 人脸表情 */
10
+ FACE = "face",
11
+ /** 手势表情 */
12
+ GESTURE = "gesture",
13
+ /** 动物表情 */
14
+ ANIMAL = "animal",
15
+ /** 祝福表情 */
16
+ BLESSING = "blessing",
17
+ /** 其他表情 */
18
+ OTHER = "other"
19
+ }
20
+ /**
21
+ * 表情信息接口
22
+ */
23
+ export interface EmojiInfo {
24
+ /** 表情名称 */
25
+ name: string;
26
+ /** 表情类别 */
27
+ category: EmojiCategory;
28
+ /** 图片文件路径 */
29
+ path: string;
30
+ /** 英文名称(可选) */
31
+ englishName?: string;
32
+ }
33
+ /**
34
+ * 表情名称类型
35
+ */
36
+ export type EmojiName = '微笑' | '撇嘴' | '色' | '发呆' | '得意' | '流泪' | '害羞' | '闭嘴' | '睡' | '大哭' | '尴尬' | '发怒' | '调皮' | '呲牙' | '惊讶' | '难过' | '囧' | '抓狂' | '吐' | '偷笑' | '愉快' | '白眼' | '傲慢' | '困' | '惊恐' | '憨笑' | '悠闲' | '咒骂' | '疑问' | '嘘' | '晕' | '衰' | '骷髅' | '敲打' | '再见' | '擦汗' | '抠鼻' | '鼓掌' | '坏笑' | '右哼哼' | '鄙视' | '委屈' | '快哭了' | '阴险' | '亲亲' | '可怜' | '笑脸' | '生病' | '脸红' | '破涕为笑' | '恐惧' | '失望' | '无语' | '嘿哈' | '捂脸' | '机智' | '皱眉' | '耶' | '吃瓜' | '加油' | '汗' | '天啊' | 'Emm' | '社会社会' | '旺柴' | '好的' | '打脸' | '哇' | '翻白眼' | '666' | '让我看看' | '叹气' | '苦涩' | '裂开' | '奸笑' | '握手' | '胜利' | '抱拳' | '勾引' | '拳头' | 'OK' | '合十' | '强' | '拥抱' | '弱' | '猪头' | '跳跳' | '发抖' | '转圈' | '庆祝' | '礼物' | '红包' | '發' | '福' | '烟花' | '爆竹' | '嘴唇' | '爱心' | '心碎' | '啤酒' | '咖啡' | '蛋糕' | '凋谢' | '菜刀' | '炸弹' | '便便' | '太阳' | '月亮' | '玫瑰';
37
+ /**
38
+ * 按类别分组的表情数据
39
+ */
40
+ export declare const EMOJI_CATEGORIES: {
41
+ readonly face: EmojiInfo[];
42
+ readonly gesture: EmojiInfo[];
43
+ readonly animal: EmojiInfo[];
44
+ readonly blessing: EmojiInfo[];
45
+ readonly other: EmojiInfo[];
46
+ };
47
+ /**
48
+ * 获取表情图片路径
49
+ * @param name 表情名称
50
+ * @returns 图片路径,如果表情不存在则返回 null
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const path = getEmojiPath('微笑'); // 'assets/face/微笑.png'
55
+ * const invalidPath = getEmojiPath('不存在'); // null
56
+ * ```
57
+ */
58
+ export declare function getEmojiPath(name: EmojiName): string | null;
59
+ /**
60
+ * 获取表情信息
61
+ * @param name 表情名称
62
+ * @returns 表情信息对象,如果表情不存在则返回 null
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const emoji = getEmojiInfo('微笑');
67
+ * // { name: '微笑', category: EmojiCategory.FACE, path: 'assets/face/微笑.png' }
68
+ * ```
69
+ */
70
+ export declare function getEmojiInfo(name: EmojiName): EmojiInfo | null;
71
+ /**
72
+ * 根据类别获取表情列表
73
+ * @param category 表情类别
74
+ * @returns 该类别下的所有表情信息
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * const faceEmojis = getEmojisByCategory(EmojiCategory.FACE);
79
+ * ```
80
+ */
81
+ export declare function getEmojisByCategory(category: EmojiCategory): EmojiInfo[];
82
+ /**
83
+ * 获取所有表情信息
84
+ * @returns 所有表情的信息数组
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * const allEmojis = getAllEmojis();
89
+ * console.log(`总共有 ${allEmojis.length} 个表情`);
90
+ * ```
91
+ */
92
+ export declare function getAllEmojis(): EmojiInfo[];
93
+ /**
94
+ * 搜索表情
95
+ * @param keyword 搜索关键词
96
+ * @returns 匹配的表情信息数组
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * const results = searchEmojis('笑');
101
+ * // 返回包含 '微笑', '偷笑', '坏笑' 等的表情
102
+ * ```
103
+ */
104
+ export declare function searchEmojis(keyword: string): EmojiInfo[];
105
+ /**
106
+ * 检查表情是否存在
107
+ * @param name 表情名称
108
+ * @returns 是否存在该表情
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * const exists = hasEmoji('微笑'); // true
113
+ * const notExists = hasEmoji('不存在的表情'); // false
114
+ * ```
115
+ */
116
+ export declare function hasEmoji(name: EmojiName): boolean;
117
+ /**
118
+ * 获取表情名称列表
119
+ * @param category 可选的类别筛选
120
+ * @returns 表情名称数组
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * const allNames = getEmojiNames();
125
+ * const faceNames = getEmojiNames(EmojiCategory.FACE);
126
+ * ```
127
+ */
128
+ export declare function getEmojiNames(category?: EmojiCategory): string[];
129
+ /**
130
+ * 随机获取表情
131
+ * @param category 可选的类别筛选
132
+ * @returns 随机表情信息
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * const randomEmoji = getRandomEmoji();
137
+ * const randomFaceEmoji = getRandomEmoji(EmojiCategory.FACE);
138
+ * ```
139
+ */
140
+ export declare function getRandomEmoji(category?: EmojiCategory): EmojiInfo;
141
+ /**
142
+ * 默认导出对象,包含所有主要功能
143
+ */
144
+ declare const WeChatEmojis: {
145
+ readonly EmojiCategory: typeof EmojiCategory;
146
+ readonly EMOJI_CATEGORIES: {
147
+ readonly face: EmojiInfo[];
148
+ readonly gesture: EmojiInfo[];
149
+ readonly animal: EmojiInfo[];
150
+ readonly blessing: EmojiInfo[];
151
+ readonly other: EmojiInfo[];
152
+ };
153
+ readonly getEmojiPath: typeof getEmojiPath;
154
+ readonly getEmojiInfo: typeof getEmojiInfo;
155
+ readonly getEmojisByCategory: typeof getEmojisByCategory;
156
+ readonly getAllEmojis: typeof getAllEmojis;
157
+ readonly searchEmojis: typeof searchEmojis;
158
+ readonly hasEmoji: typeof hasEmoji;
159
+ readonly getEmojiNames: typeof getEmojiNames;
160
+ readonly getRandomEmoji: typeof getRandomEmoji;
161
+ };
162
+ export default WeChatEmojis;
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## 概述
4
4
 
5
- `wechatEmoji.ts` 提供了完整的 TypeScript 支持,让你可以类型安全地访问微信表情包资源。
5
+ `src/index.ts` 提供了完整的 TypeScript 支持,让你可以类型安全地访问微信表情包资源。
6
6
 
7
7
  ## 安装和使用
8
8
 
@@ -36,17 +36,17 @@ import WeChatEmojis, {
36
36
  getEmojiPath,
37
37
  getEmojisByCategory,
38
38
  searchEmojis
39
- } from './wechatEmoji';
39
+ } from './src';
40
40
  ```
41
41
 
42
42
  ### 3. 编译后使用 JavaScript
43
43
 
44
44
  ```bash
45
45
  # 编译 TypeScript
46
- npx tsc wechatEmoji.ts --target es2017 --module commonjs
46
+ npm run build
47
47
 
48
48
  # 在 Node.js 中使用
49
- const { getEmojiPath, EmojiCategory } = require('./wechatEmoji.js');
49
+ const { getEmojiPath, EmojiCategory } = require('./dist/index.js');
50
50
  ```
51
51
 
52
52
  ## API 参考