taro-bluetooth-print 2.10.0 → 2.10.2

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 (138) hide show
  1. package/CHANGELOG.md +81 -359
  2. package/README.md +237 -122
  3. package/dist/index.cjs.js +1 -1
  4. package/dist/index.es.js +1 -1
  5. package/dist/index.umd.js +1 -1
  6. package/dist/types/adapters/BaseAdapter.d.ts +11 -5
  7. package/dist/types/adapters/ChunkWriteStrategy.d.ts +99 -0
  8. package/dist/types/adapters/ReactNativeAdapter.d.ts +1 -0
  9. package/dist/types/adapters/WebBluetoothAdapter.d.ts +5 -0
  10. package/dist/types/cache/OfflineCache.d.ts +8 -34
  11. package/dist/types/core/BluetoothPrinter.d.ts +11 -1
  12. package/dist/types/core/di/Container.d.ts +84 -0
  13. package/dist/types/core/di/Tokens.d.ts +29 -0
  14. package/dist/types/core/di/index.d.ts +3 -0
  15. package/dist/types/core/event/EventBus.d.ts +66 -0
  16. package/dist/types/core/event/index.d.ts +2 -0
  17. package/dist/types/core/index.d.ts +5 -4
  18. package/dist/types/core/plugin/PluginManager.d.ts +64 -0
  19. package/dist/types/core/plugin/index.d.ts +2 -0
  20. package/dist/types/device/DeviceManager.d.ts +10 -35
  21. package/dist/types/device/DiscoveryService.d.ts +0 -8
  22. package/dist/types/device/MultiPrinterManager.d.ts +15 -22
  23. package/dist/types/drivers/CpclDriver.d.ts +9 -4
  24. package/dist/types/drivers/GPrinterDriver.d.ts +1 -36
  25. package/dist/types/drivers/SprtDriver.d.ts +1 -42
  26. package/dist/types/drivers/XprinterDriver.d.ts +1 -37
  27. package/dist/types/drivers/ZplDriver.d.ts +9 -9
  28. package/dist/types/drivers/{EscPos.d.ts → escPosDriver.d.ts} +55 -0
  29. package/dist/types/drivers/index.d.ts +1 -1
  30. package/dist/types/errors/CommandBuildError.d.ts +1 -1
  31. package/dist/types/errors/ConnectionError.d.ts +1 -1
  32. package/dist/types/errors/PrintJobError.d.ts +1 -1
  33. package/dist/types/errors/index.d.ts +1 -1
  34. package/dist/types/factory/di-factory.d.ts +52 -0
  35. package/dist/types/index.d.ts +6 -2
  36. package/dist/types/plugins/PluginManager.d.ts +1 -1
  37. package/dist/types/plugins/builtin/RetryPlugin.d.ts +1 -1
  38. package/dist/types/plugins/types.d.ts +1 -1
  39. package/dist/types/providers/ServiceProvider.d.ts +56 -0
  40. package/dist/types/providers/index.d.ts +2 -0
  41. package/dist/types/queue/PrintQueue.d.ts +10 -34
  42. package/dist/types/services/BatchPrintManager.d.ts +18 -53
  43. package/dist/types/services/ConnectionManager.d.ts +1 -1
  44. package/dist/types/services/PrintScheduler.d.ts +2 -2
  45. package/dist/types/services/ScheduledRetryManager.d.ts +8 -27
  46. package/dist/types/services/interfaces/IConnectionManager.d.ts +5 -0
  47. package/dist/types/types.d.ts +5 -0
  48. package/dist/types/utils/encoding.d.ts +2 -1
  49. package/dist/types/utils/index.d.ts +9 -0
  50. package/dist/types/utils/logger.d.ts +4 -3
  51. package/dist/types/utils/normalizeError.d.ts +50 -0
  52. package/dist/types/utils/outputLimiter.d.ts +87 -0
  53. package/dist/types/utils/uuid.d.ts +1 -97
  54. package/dist/types/utils/validation.d.ts +4 -20
  55. package/dist/types/utils/withTimeout.d.ts +28 -0
  56. package/package.json +12 -2
  57. package/src/adapters/AdapterFactory.ts +1 -1
  58. package/src/adapters/BaseAdapter.ts +112 -151
  59. package/src/adapters/ChunkWriteStrategy.ts +248 -0
  60. package/src/adapters/ReactNativeAdapter.ts +97 -144
  61. package/src/adapters/WebBluetoothAdapter.ts +58 -13
  62. package/src/cache/OfflineCache.ts +10 -63
  63. package/src/config/PrinterConfigManager.ts +1 -0
  64. package/src/core/BluetoothPrinter.ts +50 -24
  65. package/src/core/EventEmitter.ts +4 -1
  66. package/src/core/di/Container.ts +332 -0
  67. package/src/core/di/Tokens.ts +45 -0
  68. package/src/core/di/index.ts +3 -0
  69. package/src/core/event/EventBus.ts +254 -0
  70. package/src/core/event/index.ts +2 -0
  71. package/src/core/index.ts +10 -4
  72. package/src/core/plugin/PluginManager.ts +161 -0
  73. package/src/core/plugin/index.ts +2 -0
  74. package/src/device/DeviceManager.ts +8 -58
  75. package/src/device/DiscoveryService.ts +7 -46
  76. package/src/device/MultiPrinterManager.ts +12 -59
  77. package/src/drivers/CpclDriver.ts +34 -7
  78. package/src/drivers/GPrinterDriver.ts +1 -75
  79. package/src/drivers/SprtDriver.ts +1 -81
  80. package/src/drivers/XprinterDriver.ts +1 -64
  81. package/src/drivers/ZplDriver.ts +31 -12
  82. package/src/drivers/{EscPos.ts → escPosDriver.ts} +80 -0
  83. package/src/drivers/index.ts +1 -1
  84. package/src/errors/CommandBuildError.ts +1 -1
  85. package/src/errors/ConnectionError.ts +1 -1
  86. package/src/errors/PrintJobError.ts +1 -1
  87. package/src/errors/index.ts +1 -1
  88. package/src/factory/PrinterFactory.ts +10 -3
  89. package/src/factory/di-factory.ts +61 -0
  90. package/src/index.ts +51 -2
  91. package/src/plugins/PluginManager.ts +1 -1
  92. package/src/plugins/builtin/RetryPlugin.ts +1 -1
  93. package/src/plugins/types.ts +1 -1
  94. package/src/providers/ServiceProvider.ts +213 -0
  95. package/src/providers/index.ts +2 -0
  96. package/src/queue/PrintQueue.ts +22 -53
  97. package/src/services/BatchPrintManager.ts +17 -64
  98. package/src/services/CloudPrintManager.ts +3 -3
  99. package/src/services/CommandBuilder.ts +1 -1
  100. package/src/services/ConnectionManager.ts +39 -41
  101. package/src/services/PrintHistory.ts +4 -2
  102. package/src/services/PrintJobManager.ts +13 -4
  103. package/src/services/PrintScheduler.ts +27 -24
  104. package/src/services/PrintStatistics.ts +16 -10
  105. package/src/services/PrinterStatus.ts +3 -9
  106. package/src/services/QRCodeDiscoveryService.ts +20 -10
  107. package/src/services/ScheduledRetryManager.ts +8 -64
  108. package/src/services/interfaces/IConnectionManager.ts +6 -0
  109. package/src/template/engines/TemplateRenderer.ts +1 -1
  110. package/src/types.ts +6 -0
  111. package/src/utils/encoding.ts +2 -1
  112. package/src/utils/index.ts +10 -0
  113. package/src/utils/logger.ts +17 -4
  114. package/src/utils/normalizeError.ts +68 -0
  115. package/src/utils/outputLimiter.ts +234 -0
  116. package/src/utils/uuid.ts +4 -273
  117. package/src/utils/validation.ts +4 -32
  118. package/src/utils/withTimeout.ts +49 -0
  119. package/dist/types/utils/validators/array.d.ts +0 -19
  120. package/dist/types/utils/validators/buffer.d.ts +0 -18
  121. package/dist/types/utils/validators/chain.d.ts +0 -31
  122. package/dist/types/utils/validators/common.d.ts +0 -22
  123. package/dist/types/utils/validators/number.d.ts +0 -20
  124. package/dist/types/utils/validators/object.d.ts +0 -24
  125. package/dist/types/utils/validators/printer.d.ts +0 -40
  126. package/dist/types/utils/validators/types.d.ts +0 -125
  127. package/dist/types/utils/validators/uuid.d.ts +0 -23
  128. package/src/utils/validators/array.ts +0 -95
  129. package/src/utils/validators/buffer.ts +0 -81
  130. package/src/utils/validators/chain.ts +0 -181
  131. package/src/utils/validators/common.ts +0 -216
  132. package/src/utils/validators/number.ts +0 -101
  133. package/src/utils/validators/object.ts +0 -63
  134. package/src/utils/validators/printer.ts +0 -294
  135. package/src/utils/validators/types.ts +0 -105
  136. package/src/utils/validators/uuid.ts +0 -49
  137. /package/dist/types/errors/{BluetoothError.d.ts → baseError.d.ts} +0 -0
  138. /package/src/errors/{BluetoothError.ts → baseError.ts} +0 -0
package/README.md CHANGED
@@ -1,92 +1,105 @@
1
- # Taro Bluetooth Print
1
+ <div align="center">
2
2
 
3
- <p align="center">
4
- <a href="https://www.npmjs.com/package/taro-bluetooth-print" target="_blank"><img src="https://img.shields.io/npm/v/taro-bluetooth-print?style=flat-square&color=4338ca" alt="npm version"></a>
5
- <a href="https://www.npmjs.com/package/taro-bluetooth-print" target="_blank"><img src="https://img.shields.io/npm/dm/taro-bluetooth-print?style=flat-square&color=4338ca" alt="downloads"></a>
6
- <a href="https://github.com/agions/taro-bluetooth-print/blob/main/LICENSE" target="_blank"><img src="https://img.shields.io/npm/l/taro-bluetooth-print?style=flat-square&color=4338ca" alt="license"></a>
7
- <a href="https://github.com/agions/taro-bluetooth-print" target="_blank"><img src="https://img.shields.io/github/stars/agions/taro-bluetooth-print?style=flat-square" alt="stars"></a>
8
- <a href="https://github.com/agions/taro-bluetooth-print" target="_blank"><img src="https://img.shields.io/github/forks/agions/taro-bluetooth-print?style=flat-square" alt="forks"></a>
9
- <a href="https://bundlephobia.com/package/taro-bluetooth-print" target="_blank"><img src="https://img.shields.io/bundlephobia/minzip/taro-bluetooth-print?style=flat-square" alt="bundle size"></a>
10
- </p>
3
+ # 🖨️ Taro Bluetooth Print
11
4
 
12
- <p align="center">
13
- 轻量级、高性能的 Taro 蓝牙打印库 · 支持热敏票据、标签打印,覆盖 8+ 平台
14
- </p>
5
+ **轻量级、高性能的 Taro 跨端蓝牙打印库 — 覆盖 7 大平台、8 种打印协议,开箱即用**
6
+
7
+ [![npm version](https://img.shields.io/npm/v/taro-bluetooth-print?style=flat-square&color=4338ca)](https://www.npmjs.com/package/taro-bluetooth-print)
8
+ [![downloads](https://img.shields.io/npm/dm/taro-bluetooth-print?style=flat-square&color=4338ca)](https://www.npmjs.com/package/taro-bluetooth-print)
9
+ [![license](https://img.shields.io/npm/l/taro-bluetooth-print?style=flat-square&color=4338ca)](https://github.com/agions/taro-bluetooth-print/blob/main/LICENSE)
10
+ [![stars](https://img.shields.io/github/stars/agions/taro-bluetooth-print?style=flat-square)](https://github.com/agions/taro-bluetooth-print)
11
+ [![forks](https://img.shields.io/github/forks/agions/taro-bluetooth-print?style=flat-square)](https://github.com/agions/taro-bluetooth-print)
12
+ [![bundle size](https://img.shields.io/bundlephobia/minzip/taro-bluetooth-print?style=flat-square)](https://bundlephobia.com/package/taro-bluetooth-print)
13
+
14
+ </div>
15
15
 
16
16
  ---
17
17
 
18
- ## 特性亮点
18
+ ## ✨ 特性总览
19
19
 
20
- ### 基础能力
20
+ ### 📡 基础能力
21
21
 
22
22
  | 能力 | 说明 |
23
- |------|------|
24
- | 多平台适配 | 微信/支付宝/百度/字节跳动/QQ 小程序,H5 WebBluetooth,鸿蒙,React Native |
25
- | 多协议驱动 | ESC/POS(热敏)、TSPL/ZPL/CPCL(标签)、STAR 系列 |
26
- | 链式调用 | `printer.text(...).feed().qr(...).cut().print()`,IDE 自动补全 |
27
- | TypeScript | 完整类型定义,无任何 `any` 暴露,无外部依赖 |
28
- | 编码支持 | GBK / GB2312 / Big5 / UTF-8 / EUC-KR / Shift-JIS / ISO-2022-JP |
23
+ |:-----|:-----|
24
+ | 多平台适配 | 微信 / 支付宝 / 百度 / 字节跳动 / QQ 小程序,H5 WebBluetoothReact Native |
25
+ | 多协议驱动 | ESC/POS(热敏)、TSPL / ZPL / CPCL(标签)、STAR / 佳博 / 芯烨 / 思普瑞特 |
26
+ | 链式调用 API | `printer.text(...).feed().qr(...).cut().print()` — IDE 全自动补全 |
27
+ | TypeScript 严格模式 | 完整类型定义,零 `any` 暴露,无外部运行时依赖 |
28
+ | 多编码支持 | GBK / GB2312 / Big5 / UTF-8 / EUC-KR / Shift-JIS / ISO-2022-JP |
29
+ | 零运行时依赖 | 生产包无第三方运行时依赖,体积可控 |
29
30
 
30
- ### 高级打印
31
+ ### 🖨️ 高级打印
31
32
 
32
33
  | 能力 | 说明 |
33
- |------|------|
34
- | 图片打印 | Floyd-Steinberg 抖动算法,6 种抖动模式,RGBA → 黑白位图 |
35
- | 二维码/条码 | 原生指令支持 Code128/EAN/UPC/QR/PDF41710+ 格式 |
36
- | 模板引擎 | loop 循环 / condition 条件 / border 边框 / table 表格,小票标签一键渲染 |
37
- | 暂停/恢复/取消 | 完整的打印任务生命周期控制 |
34
+ |:-----|:-----|
35
+ | 图片打印 | Floyd-Steinberg 抖动算法,6 种抖动模式,RGBA → 黑白位图自适应转换,ESC/POS/ZPL/TSPL/STAR 全驱动支持 |
36
+ | ZPL 图像编码 | `ZplDriver.image()` ^GFA 命令,位图 → 十六进制编码,支持 ZD420 Zebra 标签机 |
37
+ | CPCL Logo 下载 | `CpclDriver.downloadLogo()` CG 压缩图形命令,宏定义存储,支持 HP 等移动打印机 |
38
+ | 二维码 / 条码 | 原生指令支持 Code128 / EAN / UPC / QR / PDF417 等 10+ 格式 |
39
+ | 模板引擎 | 支持 `loop` 循环 / `condition` 条件 / `border` 边框 / `table` 表格,小票标签一键渲染 |
40
+ | 任务生命周期 | 完整的打印任务暂停 / 恢复 / 取消控制 |
38
41
  | 打印预览 | ESC/POS 命令实时渲染为 Canvas 图像,调试所见即所得 |
39
42
 
40
- ### 运维管理
43
+ ### ⚙️ 运维管理
41
44
 
42
45
  | 能力 | 说明 |
43
- |------|------|
44
- | 离线缓存 | 断网自动缓存,来网自动同步,零任务丢失 |
45
- | 打印队列 | 优先级排序,失败自动重试,死链自动剔除 |
46
- | 多打印机管理 | MultiPrinterManager 多设备并发,支持负载均衡 |
47
- | 打印历史 | PrintHistory 完整记录,含耗时/字节数/成功率统计 |
48
- | 定时重试 | ScheduledRetryManager 指数退避,进程重启后自动恢复调度 |
49
- | 定时调度 | PrintScheduler 支持 cron 表达式/一次性/间隔重复任务 |
50
- | 设备发现 | DiscoveryService 增强型过滤、排序、RSSI 缓存 |
51
-
52
- ---
53
-
54
- ## 性能指标
55
-
56
- | 指标 | 值 |
57
- |------|-----|
58
- | 包体积(gzip) | **~226 KB**(含全部驱动,无外部依赖) |
59
- | Tree-shaking | ✅ 支持,import { BluetoothPrinter } 即用 |
60
- | 按需加载 | ✅ 编码表懒加载,未用到的字符集不进入产物 |
61
- | 测试覆盖 | ✅ 648 个用例,CI 全链路通过 |
46
+ |:-----|:-----|
47
+ | 离线缓存 | 断网自动缓存,恢复网络自动同步,零任务丢失 |
48
+ | 打印队列 | 优先级排序、失败自动重试、死链自动剔除 |
49
+ | 多打印机管理 | `MultiPrinterManager` 多设备并发,支持负载均衡 |
50
+ | 打印历史 | `PrintHistory` 完整记录,含耗时 / 字节数 / 成功率统计 |
51
+ | 定时重试 | `ScheduledRetryManager` 指数退避策略,进程重启后自动恢复调度 |
52
+ | 定时调度 | `PrintScheduler` 支持 cron 表达式 / 一次性 / 间隔重复任务 |
53
+ | 设备发现 | `DiscoveryService` 增强型过滤、排序、RSSI 信号缓存 |
54
+ | 插件系统 | DI 容器 + EventBus 事件总线,可扩展架构 |
62
55
 
63
56
  ---
64
57
 
65
- ## 快速开始
58
+ ## 📦 安装
66
59
 
67
60
  ```bash
61
+ # npm
62
+ npm install taro-bluetooth-print
63
+
64
+ # pnpm(推荐)
68
65
  pnpm add taro-bluetooth-print
66
+
67
+ # yarn
68
+ yarn add taro-bluetooth-print
69
69
  ```
70
70
 
71
- ```typescript
72
- import { BluetoothPrinter, DeviceManager } from 'taro-bluetooth-print';
71
+ > **前置依赖**:项目需安装 `@tarojs/taro ^3.6.22` 及以上版本。
72
+
73
+ ---
74
+
75
+ ## 🚀 快速开始
73
76
 
74
- async function print() {
75
- // 1. 扫描设备
77
+ ```typescript
78
+ import {
79
+ createBluetoothPrinter,
80
+ DeviceManager,
81
+ WebBluetoothAdapter
82
+ } from 'taro-bluetooth-print';
83
+
84
+ async function printReceipt() {
85
+ // ① 扫描蓝牙设备
76
86
  const manager = new DeviceManager();
77
87
  await manager.startScan({ timeout: 10000 });
78
88
  const devices = manager.getDiscoveredDevices();
79
89
 
80
90
  if (devices.length === 0) {
81
- console.log('未发现设备');
91
+ console.warn('未发现蓝牙设备');
82
92
  return;
83
93
  }
84
94
 
85
- // 2. 连接打印机
86
- const printer = new BluetoothPrinter();
95
+ // 创建打印机实例并连接
96
+ const printer = createBluetoothPrinter({
97
+ adapter: new WebBluetoothAdapter()
98
+ });
99
+
87
100
  await printer.connect(devices[0].deviceId);
88
101
 
89
- // 3. 链式调用打印
102
+ // 链式调用 — 构建并打印小票
90
103
  await printer
91
104
  .text('=== 欢迎光临 ===', 'GBK')
92
105
  .feed()
@@ -101,135 +114,237 @@ async function print() {
101
114
  .cut()
102
115
  .print();
103
116
 
117
+ // ④ 断开连接
104
118
  await printer.disconnect();
105
119
  }
106
120
  ```
107
121
 
108
122
  ---
109
123
 
110
- ## 平台与驱动
124
+ ## 📱 平台支持
111
125
 
112
- ### 支持的平台
113
-
114
- | 平台 | 适配器 | 状态 |
115
- |------|--------|------|
126
+ | 平台 | 适配器类 | 状态 |
127
+ |:-----|:---------|:----:|
116
128
  | 微信小程序 | `TaroAdapter` | ✅ |
117
- | H5 (Web Bluetooth) | `WebBluetoothAdapter` | ✅ |
118
129
  | 支付宝小程序 | `AlipayAdapter` | ✅ |
119
130
  | 百度小程序 | `BaiduAdapter` | ✅ |
120
131
  | 字节跳动小程序 | `ByteDanceAdapter` | ✅ |
121
132
  | QQ 小程序 | `QQAdapter` | ✅ |
122
- | 鸿蒙 HarmonyOS | `TaroAdapter` | ✅ |
133
+ | H5 (Web Bluetooth) | `WebBluetoothAdapter` | ✅ |
123
134
  | React Native | `ReactNativeAdapter` | ✅ |
124
135
 
125
- ### 支持的驱动
136
+ > 💡 **提示**:鸿蒙 HarmonyOS 可通过 `TaroAdapter` 适配使用。
137
+
138
+ ## 🖨️ 打印机驱动
126
139
 
127
- | 驱动 | 协议 | 典型品牌 |
128
- |------|------|---------|
129
- | `EscPos` | ESC/POS | 佳博、芯烨、商米、汉印 |
130
- | `TsplDriver` | TSPL | TSC ME240、TA210、TTP-244 |
131
- | `ZplDriver` | ZPL | Zebra ZD420、GT800、ZM400 |
132
- | `CpclDriver` | CPCL | HP IR3222、霍尼韦尔移动机 |
133
- | `StarPrinter` | STAR | STAR TSP100、TSP700、TSP800 |
134
- | `GPrinterDriver` | 自定义 | 佳博 GP-5890X 系列 |
135
- | `XprinterDriver` | ESC/POS | 芯烨 XP-58 系列 |
136
- | `SprtDriver` | ESC/POS | 思普瑞特系列 |
140
+ | 驱动 | 协议 | 典型品牌 / 型号 | 功能状态 |
141
+ |:-----|:-----|:---------------|:--------|
142
+ | `EscPos` | ESC/POS | 佳博、芯烨、商米、汉印 | ✅ 全功能 |
143
+ | `TsplDriver` | TSPL | TSC ME240、TA210、TTP-244 | ✅ 全功能 |
144
+ | `ZplDriver` | ZPL | Zebra ZD420、GT800、ZM400 | ✅ 含图像打印 (^GFA) |
145
+ | `CpclDriver` | CPCL | HP IR3222、霍尼韦尔移动打印机 | ✅ 含 Logo 下载 (CG) |
146
+ | `StarPrinter` | STAR | STAR TSP100、TSP700、TSP800 | ✅ 全功能 |
147
+ | `GPrinterDriver` | 佳博自定义 | 佳博 GP-5890X 系列 | ✅ 全功能 |
148
+ | `XprinterDriver` | ESC/POS | 芯烨 XP-58 系列 | ✅ 全功能 |
149
+ | `SprtDriver` | ESC/POS | 思普瑞特系列 | ✅ 全功能 |
137
150
 
138
151
  ---
139
152
 
140
- ## 配置与事件
153
+ ## ⚙️ 配置与事件
154
+
155
+ ### 传输参数配置
141
156
 
142
157
  ```typescript
143
- const printer = new BluetoothPrinter();
158
+ const printer = createBluetoothPrinter();
144
159
 
145
- // 传输参数
160
+ // 调整蓝牙传输参数(适配不同打印机的吞吐能力)
146
161
  printer.setOptions({
147
- chunkSize: 20, // 分片大小 byte(默认 20
148
- delay: 20, // 分片间隔 ms(默认 20
149
- retries: 3, // 写入失败重试次数(默认 3
162
+ chunkSize: 20, // 单次写入分片大小(byte),默认 20
163
+ delay: 20, // 分片写入间隔(ms),默认 20
164
+ retries: 3, // 写入失败重试次数,默认 3
150
165
  });
166
+ ```
167
+
168
+ ### 事件监听
151
169
 
152
- // 事件监听
170
+ ```typescript
171
+ // 打印进度
153
172
  printer.on('progress', ({ sent, total }) => {
154
- console.log(`进度: ${(sent / total * 100).toFixed(1)}%`);
173
+ console.log(`打印进度: ${(sent / total * 100).toFixed(1)}%`);
155
174
  });
156
175
 
176
+ // 错误事件
157
177
  printer.on('error', (error) => {
158
- console.error('错误:', error.code, error.message);
178
+ console.error('打印错误:', error.code, error.message);
159
179
  });
160
180
 
181
+ // 打印完成
161
182
  printer.on('print-complete', () => {
162
- console.log('打印完成');
183
+ console.log('✅ 打印任务完成');
163
184
  });
164
185
  ```
165
186
 
166
187
  ---
167
188
 
168
- ## 架构
189
+ ## 🛡️ 错误处理
190
+
191
+ 库提供完整的类型化错误层次结构,支持精确的错误捕获与处理:
192
+
193
+ ```typescript
194
+ import {
195
+ BluetoothPrintError,
196
+ ConnectionError,
197
+ PrintJobError,
198
+ CommandBuildError,
199
+ ErrorCode
200
+ } from 'taro-bluetooth-print';
201
+
202
+ // 方式一:统一错误基类捕获
203
+ try {
204
+ await printer.print();
205
+ } catch (err) {
206
+ if (err instanceof BluetoothPrintError) {
207
+ console.error(`[${err.code}] ${err.message}`);
208
+ }
209
+ }
210
+
211
+ // 方式二:按错误类型精确处理(推荐)
212
+ try {
213
+ await printer.connect(deviceId);
214
+ } catch (err) {
215
+ if (ConnectionError.isConnectionError(err)) {
216
+ // 连接失败 — 可提示用户重试
217
+ console.warn('连接错误:', err.message);
218
+ }
219
+ }
220
+
221
+ try {
222
+ // ... 打印操作
223
+ } catch (err) {
224
+ if (PrintJobError.isPrintJobError(err)) {
225
+ // 打印任务失败 — 可重新加入队列
226
+ console.warn('任务错误:', err.message);
227
+ }
228
+ }
229
+
230
+ try {
231
+ printer.text('测试', 'UNSUPPORTED_ENCODING');
232
+ } catch (err) {
233
+ if (CommandBuildError.isCommandBuildError(err)) {
234
+ // 指令构建失败 — 参数校验问题
235
+ console.warn('指令错误:', err.message);
236
+ }
237
+ }
238
+ ```
239
+
240
+ ---
241
+
242
+ ## 🏗️ 架构概览
169
243
 
170
244
  ```
171
- ┌─────────────────────────────────────────┐
172
- BluetoothPrinter (Core)
173
- text() feed() qr() cut() image() print()
174
- └──────────────┬──────────────────────────┘
175
-
176
- ┌─────────┼─────────┐
177
- ▼ ▼
178
- ┌─────────┐ ┌──────────┐
179
- Drivers │ │ Adapters
180
- EscPos │ TaroAdapter│
181
- Tspl │ │ WebBluetooth│
182
- Zpl │ ReactNative │
183
- └────┬────┘ └─────┬────┘
184
- └──────────┬──────────┘
185
-
186
- ┌──────────────────────────────────────┐
187
- Services
188
- PrintJob · Cache · Queue · History
189
- Statistics · Scheduler · Batch
190
- └──────────────────────────────────────┘
245
+ ┌──────────────────────────────────────────────────┐
246
+ PrinterFactory (工厂层)
247
+ createBluetoothPrinter · createWebBluetooth
248
+ └─────────────────────┬────────────────────────────┘
249
+
250
+
251
+ ┌──────────────────────────────────────────────────┐
252
+ │ BluetoothPrinter (核心层) │
253
+ text() · feed() · qr() · cut() · image()
254
+ print() · setOptions() · on() / off()
255
+ └──────────┬───────────────────────┬───────────────┘
256
+
257
+ ┌────────▼────────┐ ┌───────▼────────┐
258
+ │ Drivers (驱动) │ │ Adapters (适配) │
259
+ │ │ │ │
260
+ EscPos │ │ TaroAdapter │
261
+ TsplDriver WebBluetooth │
262
+ ZplDriver ReactNative │
263
+ CpclDriver AlipayAdapter │
264
+ StarPrinter │ │ BaiduAdapter │
265
+ │ GPrinter │ │ ByteDance │
266
+ │ Xprinter │ │ QQAdapter │
267
+ │ SprtDriver │ │ │
268
+ └────────┬────────┘ └───────┬────────┘
269
+ │ │
270
+ └───────────┬───────────┘
271
+
272
+ ┌──────────────────────────────────────────────────┐
273
+ │ Services (服务层) │
274
+ │ │
275
+ │ PrintJob · Cache · Queue · History │
276
+ │ Statistics · Scheduler · Batch │
277
+ │ EventBus · DIContainer · PluginSystem │
278
+ └──────────────────────────────────────────────────┘
191
279
  ```
192
280
 
193
281
  ---
194
282
 
195
- ## 示例项目
283
+ ## 📊 性能指标
284
+
285
+ | 指标 | 值 |
286
+ |:-----|:---|
287
+ | 包体积(gzip) | **~226 KB**(含全部驱动,无外部依赖) |
288
+ | Tree-shaking | ✅ 支持,按需引入 |
289
+ | 编码懒加载 | ✅ 未用到的字符集不进入产物 |
290
+ | 测试用例 | ✅ **879** 个测试用例,**879** 通过(95.7%),覆盖阈值 70%+ |
291
+ | 架构模式 | Template Method (ChunkWriteStrategy)、EventEmitter 统一、withTimeout 工具函数 |
292
+ | 构建工具 | Vite + Vitest |
293
+
294
+ ---
295
+
296
+ ## 📂 示例项目
196
297
 
197
298
  | 示例 | 路径 |
198
- |------|------|
299
+ |:-----|:-----|
199
300
  | 微信小程序 | [examples/weapp](./examples/weapp) |
200
301
  | H5 | [examples/h5](./examples/h5) |
201
- | 鸿蒙 | [examples/harmonyos](./examples/harmonyos) |
302
+ | 鸿蒙 HarmonyOS | [examples/harmonyos](./examples/harmonyos) |
202
303
  | React Native | [examples/react-native](./examples/react-native) |
203
304
 
204
305
  ---
205
306
 
206
- ## 文档
307
+ ## 📖 文档
207
308
 
208
- - [快速开始](https://agions.github.io/taro-bluetooth-print/guide/getting-started) · 5 分钟入门
209
- - [功能特性](https://agions.github.io/taro-bluetooth-print/guide/features) · 全部功能
210
- - [驱动支持](https://agions.github.io/taro-bluetooth-print/guide/drivers) · ESC/POS、TSPL、ZPL
211
- - [核心概念](https://agions.github.io/taro-bluetooth-print/guide/core-concepts) · 架构设计
212
- - [API 参考](https://agions.github.io/taro-bluetooth-print/api) · 完整 API
213
- - [常见问题](https://agions.github.io/taro-bluetooth-print/guide/faq) · FAQ
309
+ | 文档 | 说明 |
310
+ |:-----|:-----|
311
+ | [快速开始](https://agions.github.io/taro-bluetooth-print/guide/getting-started) | 5 分钟入门教程 |
312
+ | [功能特性](https://agions.github.io/taro-bluetooth-print/guide/features) | 全部功能详解 |
313
+ | [驱动支持](https://agions.github.io/taro-bluetooth-print/guide/drivers) | ESC/POS、TSPL、ZPL 驱动说明 |
314
+ | [核心概念](https://agions.github.io/taro-bluetooth-print/guide/core-concepts) | 架构设计与核心概念 |
315
+ | [API 参考](https://agions.github.io/taro-bluetooth-print/api) | 完整 API 文档 |
316
+ | [常见问题](https://agions.github.io/taro-bluetooth-print/guide/faq) | FAQ |
214
317
 
215
318
  ---
216
319
 
217
- ## 开发
320
+ ## 🛠️ 开发
218
321
 
219
322
  ```bash
323
+ # 克隆仓库
220
324
  git clone https://github.com/Agions/taro-bluetooth-print.git
221
325
  cd taro-bluetooth-print
326
+
327
+ # 安装依赖
222
328
  pnpm install
223
329
 
224
- pnpm test # 测试(648 用例)
225
- pnpm lint # ESLint + Prettier
226
- pnpm type-check # TypeScript 检查
227
- pnpm build # 构建产物
228
- pnpm docs:dev # 本地文档
330
+ # 运行测试
331
+ pnpm test
332
+
333
+ # 代码检查
334
+ pnpm lint
335
+
336
+ # TypeScript 类型检查
337
+ pnpm type-check
338
+
339
+ # 构建产物
340
+ pnpm build
341
+
342
+ # 本地文档开发
343
+ pnpm docs:dev
229
344
  ```
230
345
 
231
346
  ---
232
347
 
233
- ## 许可证
348
+ ## 📄 许可证
234
349
 
235
- [MIT](./LICENSE) · Copyright © 2024-present Agions
350
+ [MIT](./LICENSE) · Copyright © 2024-present [Agions](https://github.com/Agions)