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.
- package/CHANGELOG.md +72 -104
- package/README.md +11 -8
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/types/adapters/BaseAdapter.d.ts +7 -0
- package/dist/types/adapters/ReactNativeAdapter.d.ts +1 -2
- package/dist/types/core/EventEmitter.d.ts +5 -3
- package/dist/types/core/index.d.ts +3 -4
- package/dist/types/drivers/CpclDriver.d.ts +0 -16
- package/dist/types/drivers/ZplDriver.d.ts +0 -16
- package/dist/types/drivers/barcode-helpers.d.ts +33 -0
- package/dist/types/encoding/gbk-lite.d.ts +1 -1
- package/dist/types/factory/PrinterFactory.d.ts +4 -2
- package/dist/types/index.d.ts +0 -3
- package/dist/types/preview/PreviewRenderer.d.ts +3 -7
- package/dist/types/services/CloudPrintManager.d.ts +0 -5
- package/dist/types/services/PrintJobManager.d.ts +5 -0
- package/dist/types/services/PrintScheduler.d.ts +1 -0
- package/dist/types/services/PrintStatistics.d.ts +10 -0
- package/dist/types/services/QRCodeDiscoveryService.d.ts +1 -0
- package/dist/types/template/engines/TemplateRenderer.d.ts +12 -0
- package/dist/types/utils/image.d.ts +2 -0
- package/package.json +1 -1
- package/src/adapters/BaseAdapter.ts +14 -0
- package/src/adapters/ReactNativeAdapter.ts +10 -7
- package/src/core/EventEmitter.ts +43 -49
- package/src/core/index.ts +3 -9
- package/src/device/DeviceManager.ts +6 -10
- package/src/device/DiscoveryService.ts +6 -4
- package/src/drivers/CpclDriver.ts +2 -22
- package/src/drivers/ZplDriver.ts +2 -22
- package/src/drivers/barcode-helpers.ts +52 -0
- package/src/encoding/gbk-lite.ts +15 -78
- package/src/factory/PrinterFactory.ts +4 -2
- package/src/index.ts +0 -42
- package/src/plugins/PluginManager.ts +2 -3
- package/src/preview/PreviewRenderer.ts +59 -69
- package/src/services/BatchPrintManager.ts +6 -5
- package/src/services/CloudPrintManager.ts +12 -4
- package/src/services/ConnectionManager.ts +10 -3
- package/src/services/PrintJobManager.ts +13 -10
- package/src/services/PrintScheduler.ts +13 -4
- package/src/services/PrintStatistics.ts +46 -51
- package/src/services/PrinterStatus.ts +2 -1
- package/src/services/QRCodeDiscoveryService.ts +7 -2
- package/src/services/ScheduledRetryManager.ts +7 -2
- package/src/template/engines/TemplateRenderer.ts +78 -55
- package/src/utils/errorHandler.ts +4 -4
- package/src/utils/image.ts +62 -53
- package/dist/types/core/di/Container.d.ts +0 -84
- package/dist/types/core/di/Tokens.d.ts +0 -29
- package/dist/types/core/di/index.d.ts +0 -3
- package/dist/types/core/event/EventBus.d.ts +0 -66
- package/dist/types/core/event/index.d.ts +0 -2
- package/dist/types/core/plugin/PluginManager.d.ts +0 -64
- package/dist/types/core/plugin/index.d.ts +0 -2
- package/dist/types/factory/di-factory.d.ts +0 -52
- package/dist/types/providers/ServiceProvider.d.ts +0 -56
- package/dist/types/providers/index.d.ts +0 -2
- package/src/core/di/Container.ts +0 -321
- package/src/core/di/Tokens.ts +0 -45
- package/src/core/di/index.ts +0 -3
- package/src/core/event/EventBus.ts +0 -250
- package/src/core/event/index.ts +0 -2
- package/src/core/plugin/PluginManager.ts +0 -157
- package/src/core/plugin/index.ts +0 -2
- package/src/factory/di-factory.ts +0 -61
- package/src/providers/ServiceProvider.ts +0 -209
- 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
|
-
| 插件系统 |
|
|
54
|
+
| 插件系统 | Hook-based 插件管理器,支持 beforePrint/afterPrint 等钩子 |
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
@@ -272,9 +272,10 @@ try {
|
|
|
272
272
|
┌──────────────────────────────────────────────────┐
|
|
273
273
|
│ Services (服务层) │
|
|
274
274
|
│ │
|
|
275
|
-
│
|
|
276
|
-
│
|
|
277
|
-
│
|
|
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) | **~
|
|
288
|
+
| 包体积(gzip) | **~231 KB**(含全部驱动,无外部依赖) |
|
|
288
289
|
| Tree-shaking | ✅ 支持,按需引入 |
|
|
289
290
|
| 编码懒加载 | ✅ 未用到的字符集不进入产物 |
|
|
290
|
-
| 测试用例 | ✅ **
|
|
291
|
-
|
|
|
292
|
-
|
|
|
291
|
+
| 测试用例 | ✅ **1,102** 个测试用例,全部通过 |
|
|
292
|
+
| 代码重复率 | ✅ **0%**(jscpd 检测) |
|
|
293
|
+
| 类型安全 | ✅ 零 `any` 暴露,类型断言最小化 |
|
|
294
|
+
| 架构模式 | Template Method (ChunkWriteStrategy)、EventEmitter 类型安全、Mixin 模式 |
|
|
295
|
+
| 构建工具 | Vite + Vitest + TypeScript 严格模式 |
|
|
293
296
|
|
|
294
297
|
---
|
|
295
298
|
|