taro-bluetooth-print 2.12.0 → 2.13.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 (70) hide show
  1. package/CHANGELOG.md +72 -104
  2. package/README.md +11 -8
  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 +7 -0
  7. package/dist/types/adapters/ReactNativeAdapter.d.ts +1 -2
  8. package/dist/types/core/EventEmitter.d.ts +5 -3
  9. package/dist/types/core/index.d.ts +3 -4
  10. package/dist/types/drivers/CpclDriver.d.ts +0 -16
  11. package/dist/types/drivers/ZplDriver.d.ts +0 -16
  12. package/dist/types/drivers/barcode-helpers.d.ts +33 -0
  13. package/dist/types/encoding/gbk-lite.d.ts +1 -1
  14. package/dist/types/factory/PrinterFactory.d.ts +4 -2
  15. package/dist/types/index.d.ts +0 -3
  16. package/dist/types/preview/PreviewRenderer.d.ts +3 -7
  17. package/dist/types/services/CloudPrintManager.d.ts +0 -5
  18. package/dist/types/services/PrintJobManager.d.ts +5 -0
  19. package/dist/types/services/PrintScheduler.d.ts +1 -0
  20. package/dist/types/services/PrintStatistics.d.ts +10 -0
  21. package/dist/types/services/QRCodeDiscoveryService.d.ts +1 -0
  22. package/dist/types/template/engines/TemplateRenderer.d.ts +12 -0
  23. package/dist/types/utils/image.d.ts +2 -0
  24. package/package.json +1 -1
  25. package/src/adapters/BaseAdapter.ts +14 -0
  26. package/src/adapters/ReactNativeAdapter.ts +10 -7
  27. package/src/core/EventEmitter.ts +43 -49
  28. package/src/core/index.ts +3 -9
  29. package/src/device/DeviceManager.ts +6 -10
  30. package/src/device/DiscoveryService.ts +6 -4
  31. package/src/drivers/CpclDriver.ts +2 -22
  32. package/src/drivers/ZplDriver.ts +2 -22
  33. package/src/drivers/barcode-helpers.ts +52 -0
  34. package/src/encoding/gbk-lite.ts +15 -78
  35. package/src/factory/PrinterFactory.ts +4 -2
  36. package/src/index.ts +0 -42
  37. package/src/plugins/PluginManager.ts +2 -3
  38. package/src/preview/PreviewRenderer.ts +59 -69
  39. package/src/services/BatchPrintManager.ts +6 -5
  40. package/src/services/CloudPrintManager.ts +12 -4
  41. package/src/services/ConnectionManager.ts +10 -3
  42. package/src/services/PrintJobManager.ts +13 -10
  43. package/src/services/PrintScheduler.ts +13 -4
  44. package/src/services/PrintStatistics.ts +46 -51
  45. package/src/services/PrinterStatus.ts +2 -1
  46. package/src/services/QRCodeDiscoveryService.ts +7 -2
  47. package/src/services/ScheduledRetryManager.ts +7 -2
  48. package/src/template/engines/TemplateRenderer.ts +78 -55
  49. package/src/utils/errorHandler.ts +4 -4
  50. package/src/utils/image.ts +62 -53
  51. package/dist/types/core/di/Container.d.ts +0 -84
  52. package/dist/types/core/di/Tokens.d.ts +0 -29
  53. package/dist/types/core/di/index.d.ts +0 -3
  54. package/dist/types/core/event/EventBus.d.ts +0 -66
  55. package/dist/types/core/event/index.d.ts +0 -2
  56. package/dist/types/core/plugin/PluginManager.d.ts +0 -64
  57. package/dist/types/core/plugin/index.d.ts +0 -2
  58. package/dist/types/factory/di-factory.d.ts +0 -52
  59. package/dist/types/providers/ServiceProvider.d.ts +0 -56
  60. package/dist/types/providers/index.d.ts +0 -2
  61. package/src/core/di/Container.ts +0 -321
  62. package/src/core/di/Tokens.ts +0 -45
  63. package/src/core/di/index.ts +0 -3
  64. package/src/core/event/EventBus.ts +0 -250
  65. package/src/core/event/index.ts +0 -2
  66. package/src/core/plugin/PluginManager.ts +0 -157
  67. package/src/core/plugin/index.ts +0 -2
  68. package/src/factory/di-factory.ts +0 -61
  69. package/src/providers/ServiceProvider.ts +0 -209
  70. package/src/providers/index.ts +0 -2
package/CHANGELOG.md CHANGED
@@ -1,8 +1,77 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.13.0] - 2026-05-27
4
+
5
+ ### Changed
6
+
7
+ - **架构精简**: 移除过度工程的 DI 容器系统(Container、Tokens、ServiceProvider、di-factory),约 1,048 行冗余代码
8
+ - **事件系统统一**: 移除冗余的 EventBus,统一使用类型安全的 EventEmitter
9
+ - **插件系统统一**: 移除冗余的 core/plugin PluginManager,保留 plugins/PluginManager
10
+ - **代码重复消除**: 重复率从 0.57% 降至 0%(8 个克隆 → 0 个)
11
+ - TemplateRenderer 提取 `buildTableSeparatorLine` 和 `renderFillLines` 辅助方法
12
+ - CpclDriver/ZplDriver 提取 `barcode-helpers.ts` mixin 模式
13
+ - BaseAdapter 统一重导出共享依赖,消除 ReactNativeAdapter 重复导入
14
+ - PreviewRenderer 合并 handleESC/handleGS 为 `handleControlSequence`
15
+ - gbk-lite.ts 数据去重(582 → 106 条目,减少 81.8%)
16
+ - **类型安全提升**: 类型断言从 124 处降至 73 处
17
+ - EventEmitter 内部存储改用映射类型,消除 10+ 类型断言
18
+ - 消除所有 `as` 类型转换中的不必要断言
19
+ - **错误处理改进**: 修复 6 处空 catch 块,所有异常均记录日志
20
+ - CloudPrintManager、QRCodeDiscoveryService、PrinterStatus、PrintScheduler
21
+ - **魔法数字提取**: 8 个硬编码数字提取为命名常量
22
+ - `DEFAULT_HEARTBEAT_INTERVAL`、`DEFAULT_RECONNECT_INTERVAL`、`DEFAULT_CONNECTION_TIMEOUT`
23
+ - `DEFAULT_RETRY_BASE_DELAY`、`DEFAULT_RETRY_MAX_DELAY`、`MAX_TIMEOUT_MS`
24
+ - **工厂模式简化**: 移除 `PrinterFactory` 对象包装,保留 `createBluetoothPrinter` 和 `createWebBluetoothPrinter` 函数
25
+
26
+ ### Removed
27
+
28
+ - 删除 `src/core/di/` 目录(Container.ts、Tokens.ts、index.ts)
29
+ - 删除 `src/core/event/` 目录(EventBus.ts、index.ts)
30
+ - 删除 `src/core/plugin/` 目录(PluginManager.ts、index.ts)
31
+ - 删除 `src/providers/` 目录(ServiceProvider.ts、index.ts)
32
+ - 删除 `src/factory/di-factory.ts`
33
+ - 删除 5 个对应的测试文件
34
+ - 删除根目录多余报告文档(ARCHITECTURE_ANALYSIS.md、CODE_DUPLICATION_REPORT.md、RELEASE_v2.9.6.md)
35
+
36
+ ### Added
37
+
38
+ - 新增 `src/drivers/barcode-helpers.ts` — 条码便捷方法 mixin
39
+ - BaseAdapter 新增共享依赖重导出
40
+
41
+ ### Testing
42
+
43
+ - 1,102 tests passed, 38 skipped, 0 regressions
44
+ - type-check: 0 errors
45
+ - build: 通过
46
+ - 代码重复率: 0%(jscpd 检测)
47
+
48
+ ### Performance
49
+
50
+ - 源代码: 25,828 行 → 24,687 行(-1,141 行,-4.4%)
51
+ - 源文件: 96 个 → 84 个(-12 个)
52
+ - 构建产物: 631 KB(gzip 231 KB)
53
+
54
+ ---
55
+
56
+ ## [2.12.0] - 2026-05-25
57
+
58
+ ### Changed
59
+
60
+ - **代码质量优化**: 全面消除 ESLint 错误和警告
61
+ - **测试覆盖率提升**: 从 64% 提升至 80.87%
62
+ - **Bug 修复**: sendAudioData 无限循环(catch 块缺少 break)
63
+
64
+ ### Testing
65
+
66
+ - 434 tests passed
67
+ - coverage: 80.87%
68
+
69
+ ---
70
+
3
71
  ## [2.11.0] - 2026-05-04
4
72
 
5
73
  ### Changed
74
+
6
75
  - **错误体系统一**: 将 14 处 `throw new Error()` 迁移为 `BluetoothPrintError` + `ErrorCode`,覆盖 ReactNativeAdapter、DeviceManager、PrinterConfigManager、PrinterFactory、PreviewRenderer、PrintQueue、CloudPrintManager、PrintJobManager、PrintScheduler、image.ts
7
76
  - **DiscoveryService.ts**: 移除顶部 3 条 eslint-disable 规则,清理注释代码
8
77
  - **TemplateRenderer.ts**: `itemData: any` → `Record<string, unknown>`,移除 3 处行内 eslint-disable
@@ -10,14 +79,16 @@
10
79
  - **魔数提取**: ChunkWriteStrategy 提取 7 个常量(CHUNK_SIZE_STEP、DELAY_BACKOFF_FACTOR 等),PrintHistory 提取 DEFAULT_MAX_ENTRIES,TemplateRenderer/TemplateEngine 提取 DEFAULT_PAPER_WIDTH
11
80
 
12
81
  ### Added
82
+
13
83
  - 新增 ErrorCode: `QUEUE_FULL`、`QUEUE_JOB_NOT_FOUND`、`PREVIEW_FAILED`
14
84
 
15
85
  ### Testing
86
+
16
87
  - 985 tests passed, 38 skipped, 0 regressions
17
88
  - type-check: 0 errors
18
89
  - lint: 0 errors
19
90
 
20
-
91
+ ---
21
92
 
22
93
  All notable changes to this project will be documented in this file.
23
94
 
@@ -42,106 +113,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
42
113
  - **零 ESLint 警告/错误、零非空断言、零行内 eslint-disable 残留**
43
114
 
44
115
  ---
45
-
46
- ## [2.10.1] - 2026-05-01
47
-
48
- ### Fixed
49
-
50
- - **npm publish 版本冲突** — `v2.10.0` 因旧 tag 提前发布导致新内容无法覆盖。bump 至 `2.10.1` 重新发布。
51
-
52
- ---
53
-
54
- ## [2.10.0] - 2026-05-01
55
-
56
- ### Added
57
-
58
- - **`ChunkWriteStrategy` 自适应分块写入抽象基类** (#R4)
59
- - Template Method 模式:将 MiniProgramAdapter 与 ReactNativeAdapter 共用的自适应分块写入逻辑提取到统一基类
60
- - 子类仅需实现 `writeSingleChunk()` 平台特定的单块写入操作
61
- - 公共框架包括:自适应分块大小调整、指数退避重试、连接状态周期性检查、单块超时、分块间 BLE 拥塞控制延迟
62
- - `MiniProgramWriteStrategy` — 封装 Taro/微信/支付宝/百度/字节/QQ 小程序 BLE API
63
- - `ReactNativeWriteStrategy` — 封装 react-native-ble-plx,含 withResponse/withoutResponse 降级回退
64
-
65
- - **`withTimeout()` 工具函数集成** (#R5)
66
- - 提取 Promise race + setTimeout 重复模式到 `src/utils/withTimeout.ts`
67
- - 已集成至 `BaseAdapter.connect()`、`ReactNativeAdapter.connect()`、`ConnectionManager.connect()`、`PrinterStatus.queryStatus()`
68
- - 减少约 40 行重复的手动 timer 管理代码,消除遗漏 clearTimeout 的风险
69
-
70
- ### Changed
71
-
72
- - **适配器代码重构**
73
- - `MiniProgramBLEApi.writeBLECharacteristicValue` 参数类型从 `ArrayBuffer` 扩展为 `ArrayBuffer | ArrayBufferLike`,消除 `chunk.buffer` 的类型兼容性 warning
74
- - `ReactNativeAdapter.arrayBufferToBase64` 同理扩展参数类型
75
- - `ChunkWriteStrategy.logger` 类型修正为 `ReturnType<typeof Logger.scope>`,修复 Logger 实例类型不匹配
76
-
77
- ### Fixed
78
-
79
- - **`ChunkWriteStrategy.ts` 缺少 Logger 导入** — 导致 5 个适配器测试失败(TaroAdapter、AlipayAdapter、BaiduAdapter、ByteDanceAdapter、QQAdapter)
80
- - **`chunk.buffer` 类型兼容性** — `Uint8Array.buffer` 返回 `ArrayBufferLike`,原 `ArrayBuffer` 参数类型导致 TypeScript 编译错误
81
-
82
- ### Security
83
-
84
- - `withTimeout()` 统一使用 try/finally 模式的 timer 清理,消除所有手动 `Promise.race` + `setTimeout` 模式中遗漏 `clearTimeout` 的风险
85
-
86
- ---
87
-
88
- ## [2.9.6] - 2026-04-30
89
-
90
- ### Added
91
-
92
- - **`ZplDriver.image()` — ZPL 图像编码实现** (#1)
93
- - 使用 ZPL `^GFA` (Graphic Field) 命令编码 1-bit 黑白位图
94
- - 支持 x/y 定位、字节校验、十六进制数据编码
95
- - 适用于 Zebra ZD420、GT800、ZM400 等标签打印机
96
- - [之前为 TODO 占位方法]
97
-
98
- - **`CpclDriver.downloadLogo()` — CPCL Logo 下载实现** (#2)
99
- - 使用 CPCL `CG` (Compressed Graphic) 命令编码 1-bit 位图
100
- - 宏定义存储 (`! DF`),位图大小自动推断(可选传参)
101
- - 向后兼容:签名保持 `(logoName, bitmap, options?)`
102
- - 适用于 HP IR3222、霍尼韦尔等移动打印机
103
- - [之前为 TODO 占位方法]
104
-
105
- - **单元测试覆盖**
106
- - ZPL 图像编码:链式调用验证 (`^FO` / `^GFA` / `^FS` 命令输出断言)
107
- - ZPL 空 bitmap 边界处理
108
-
109
- ### Fixed
110
-
111
- - **`ConnectionManager` 连接超时 Timer 泄漏** (#3)
112
- - `connect()` 中 `setTimeout` 创建的连接超时 timer 在成功连接后未清理
113
- - 修复:保存 timeoutId 引用,`Promise.race` 成功后显式 `clearTimeout()`
114
-
115
- - **`PrinterStatus` 状态查询超时 Timer 泄漏** (#4)
116
- - `queryStatus()` 中超时 timer 在正常返回后仍驻留至超时触发
117
- - 修复:使用相同 timer 清理模式
118
-
119
- - **`PrintQueue` 重试定时器泄漏** (#5)
120
- - 任务重试 `setTimeout` 未保存引用,`clear()` 时无法清理
121
- - 修复:新增 `retryTimerId` 成员,`clear()` 时自动取消待执行的重试
122
-
123
- ### Changed
124
-
125
- - **README 文档更新**
126
- - 「高级打印」新增 ZPL 图像编码、CPCL Logo 下载条目
127
- - 「打印机驱动」新增功能状态列,明确标注各驱动支持程度
128
- - 「性能指标」测试用例数更新为 879(95.7% 通过率)
129
-
130
- ### Security
131
-
132
- - 消除了所有已识别的 `setTimeout` 泄漏风险点(共 3 处)
133
- - 资源清理路径审计通过:`disconnect` / `destroy` / `clear` 均能正确清理关联定时器
134
-
135
- ---
136
-
137
- ## [2.9.5] - 初始发布
138
-
139
- 初始发布版本,包含完整的跨平台蓝牙打印功能支持。
140
-
141
- ### 核心能力
142
-
143
- - 7 大平台适配器:微信 / 支付宝 / 百度 / 字节跳动 / QQ 小程序 + H5 + React Native
144
- - 8 种打印机驱动:ESC/POS、TSPL、ZPL、CPCL、STAR、佳博、芯烨、思普瑞特
145
- - 完整打印生命周期:扫描 → 连接 → 打印 → 断开
146
- - 丰富的打印特性:图片(Floyd-Steinberg 抖动)、QR/条码(10+ 格式)、模板引擎
147
- - 运维体系:离线缓存、打印队列、多设备管理、历史统计、定时重试、插件系统
package/README.md CHANGED
@@ -51,7 +51,7 @@
51
51
  | 定时重试 | `ScheduledRetryManager` 指数退避策略,进程重启后自动恢复调度 |
52
52
  | 定时调度 | `PrintScheduler` 支持 cron 表达式 / 一次性 / 间隔重复任务 |
53
53
  | 设备发现 | `DiscoveryService` 增强型过滤、排序、RSSI 信号缓存 |
54
- | 插件系统 | DI 容器 + EventBus 事件总线,可扩展架构 |
54
+ | 插件系统 | Hook-based 插件管理器,支持 beforePrint/afterPrint 等钩子 |
55
55
 
56
56
  ---
57
57
 
@@ -272,9 +272,10 @@ try {
272
272
  ┌──────────────────────────────────────────────────┐
273
273
  │ Services (服务层) │
274
274
  │ │
275
- PrintJob · Cache · Queue · History
276
- Statistics · Scheduler · Batch
277
- EventBus · DIContainer · PluginSystem
275
+ ConnectionManager · PrintJobManager
276
+ CommandBuilder · PrintScheduler
277
+ PrintQueue · OfflineCache · PrintHistory
278
+ │ PluginManager (Hook-based) │
278
279
  └──────────────────────────────────────────────────┘
279
280
  ```
280
281
 
@@ -284,12 +285,14 @@ try {
284
285
 
285
286
  | 指标 | 值 |
286
287
  |:-----|:---|
287
- | 包体积(gzip) | **~226 KB**(含全部驱动,无外部依赖) |
288
+ | 包体积(gzip) | **~231 KB**(含全部驱动,无外部依赖) |
288
289
  | Tree-shaking | ✅ 支持,按需引入 |
289
290
  | 编码懒加载 | ✅ 未用到的字符集不进入产物 |
290
- | 测试用例 | ✅ **879** 个测试用例,**879** 通过(95.7%),覆盖阈值 70%+ |
291
- | 架构模式 | Template Method (ChunkWriteStrategy)、EventEmitter 统一、withTimeout 工具函数 |
292
- | 构建工具 | Vite + Vitest |
291
+ | 测试用例 | ✅ **1,102** 个测试用例,全部通过 |
292
+ | 代码重复率 | **0%**(jscpd 检测) |
293
+ | 类型安全 | `any` 暴露,类型断言最小化 |
294
+ | 架构模式 | Template Method (ChunkWriteStrategy)、EventEmitter 类型安全、Mixin 模式 |
295
+ | 构建工具 | Vite + Vitest + TypeScript 严格模式 |
293
296
 
294
297
  ---
295
298