@risleylima/escpos 1.0.0 → 1.0.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.
- package/README.md +67 -51
- package/dist/adapter/index.d.ts +6 -0
- package/dist/adapter/index.d.ts.map +1 -1
- package/dist/adapter/index.js +15 -0
- package/dist/adapter/index.js.map +1 -1
- package/dist/network-adapter/index.d.ts +6 -0
- package/dist/network-adapter/index.d.ts.map +1 -1
- package/dist/network-adapter/index.js +20 -0
- package/dist/network-adapter/index.js.map +1 -1
- package/dist/printer/index.d.ts +29 -2
- package/dist/printer/index.d.ts.map +1 -1
- package/dist/printer/index.js +139 -8
- package/dist/printer/index.js.map +1 -1
- package/dist/printer/profiles/bematech/mp4200th.d.ts.map +1 -1
- package/dist/printer/profiles/bematech/mp4200th.js +58 -1
- package/dist/printer/profiles/bematech/mp4200th.js.map +1 -1
- package/dist/printer/profiles/custom/vkp80iii.d.ts.map +1 -1
- package/dist/printer/profiles/custom/vkp80iii.js +12 -0
- package/dist/printer/profiles/custom/vkp80iii.js.map +1 -1
- package/dist/printer/profiles/default.d.ts.map +1 -1
- package/dist/printer/profiles/default.js +8 -0
- package/dist/printer/profiles/default.js.map +1 -1
- package/dist/printer/profiles/types.d.ts +44 -0
- package/dist/printer/profiles/types.d.ts.map +1 -1
- package/dist/serial-adapter/index.d.ts +10 -0
- package/dist/serial-adapter/index.d.ts.map +1 -1
- package/dist/serial-adapter/index.js +29 -1
- package/dist/serial-adapter/index.js.map +1 -1
- package/dist/usb-adapter/index.d.ts +10 -0
- package/dist/usb-adapter/index.d.ts.map +1 -1
- package/dist/usb-adapter/index.js +93 -19
- package/dist/usb-adapter/index.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@risleylima/escpos)
|
|
4
4
|
[](https://nodejs.org/)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
|
-
[]()
|
|
7
7
|
|
|
8
8
|
**The definitive thermal printing library for Node.js.** — Industrial-grade robustness, O(n) performance, and a fully agnostic architecture.
|
|
9
9
|
|
|
@@ -18,16 +18,16 @@ This library was designed to solve common technical bottlenecks found in traditi
|
|
|
18
18
|
| **Buffer Efficiency** | **O(n)** (Smart chunk accumulation) | O(n²) (Recursive concatenation) |
|
|
19
19
|
| **Event Loop** | **Protected** (Async pixel processing) | Blocked (Synchronous processing) |
|
|
20
20
|
| **State Management** | **Instantiable** (Multi-printer support) | Singletons (Global state limits) |
|
|
21
|
-
| **Protocol Support** | **Modern GS ( k** (QR
|
|
21
|
+
| **Protocol Support** | **Modern GS ( k** (Native QR) | Legacy ESC Z commands |
|
|
22
22
|
| **Connectivity** | **Fully Agnostic** (Interface-based) | Coupled to specific IO |
|
|
23
23
|
|
|
24
24
|
---
|
|
25
25
|
|
|
26
26
|
## 🛠️ Architectural Pillars
|
|
27
27
|
|
|
28
|
-
1. **Transport Agnostic (IO):** The printer core
|
|
28
|
+
1. **Transport Agnostic (IO):** The printer core communicates through an `AdapterLike` abstraction. Use USB, Serial, or Network interchangeably.
|
|
29
29
|
2. **Model Agnostic (Profiles):** Handle manufacturer-specific "quirks" (Epson, Elgin, Bematech, Custom) via a robust Profile system.
|
|
30
|
-
3. **Industrial Reliability:** Built-in mechanisms for `drain` and
|
|
30
|
+
3. **Industrial Reliability:** Built-in mechanisms for `drain` (with timeouts), chunking, and serialized IO to ensure zero data loss under high load.
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
@@ -41,10 +41,7 @@ npm install @risleylima/escpos
|
|
|
41
41
|
|
|
42
42
|
## 🧰 Development Setup
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
- Use `yarn install` for dependency install in this repository.
|
|
46
|
-
- Use `yarn test`, `yarn test:coverage`, and `yarn build` for local workflows.
|
|
47
|
-
|
|
44
|
+
If you are contributing or building from source:
|
|
48
45
|
```bash
|
|
49
46
|
yarn install
|
|
50
47
|
yarn build
|
|
@@ -55,7 +52,7 @@ yarn test
|
|
|
55
52
|
|
|
56
53
|
## ⚡ Quick Start
|
|
57
54
|
|
|
58
|
-
### Network (TCP RAW)
|
|
55
|
+
### Network (TCP RAW)
|
|
59
56
|
```javascript
|
|
60
57
|
import { Network, Printer } from '@risleylima/escpos';
|
|
61
58
|
|
|
@@ -64,13 +61,30 @@ await adapter.connect('10.1.1.50', 9100);
|
|
|
64
61
|
await adapter.open();
|
|
65
62
|
|
|
66
63
|
const printer = new Printer(adapter);
|
|
67
|
-
printer.textln('Hello World').cut();
|
|
64
|
+
printer.textln('Hello Network World').cut();
|
|
65
|
+
|
|
66
|
+
await printer.flush();
|
|
67
|
+
await adapter.close();
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Serial (RS232)
|
|
71
|
+
```javascript
|
|
72
|
+
import { Serial, Printer } from '@risleylima/escpos';
|
|
73
|
+
|
|
74
|
+
const adapter = new Serial();
|
|
75
|
+
// baudRate is optional; if omitted, 9600 is used.
|
|
76
|
+
await adapter.connect('/dev/ttyUSB0', { baudRate: 115200 });
|
|
77
|
+
await adapter.open();
|
|
78
|
+
|
|
79
|
+
const printer = new Printer(adapter);
|
|
80
|
+
printer.textln('Hello Serial World').cut();
|
|
68
81
|
|
|
69
82
|
await printer.flush();
|
|
70
83
|
await adapter.close();
|
|
71
84
|
```
|
|
85
|
+
*Note for Windows: Use paths like `COM1`, `COM2`, etc.*
|
|
72
86
|
|
|
73
|
-
### USB
|
|
87
|
+
### USB Direct
|
|
74
88
|
```javascript
|
|
75
89
|
import { USB, Printer } from '@risleylima/escpos';
|
|
76
90
|
|
|
@@ -79,7 +93,7 @@ await adapter.connect(0x04b8, 0x0202); // VID, PID
|
|
|
79
93
|
await adapter.open();
|
|
80
94
|
|
|
81
95
|
const printer = new Printer(adapter);
|
|
82
|
-
printer.textln('USB
|
|
96
|
+
printer.textln('Hello USB World').cut();
|
|
83
97
|
|
|
84
98
|
await printer.flush();
|
|
85
99
|
await adapter.close();
|
|
@@ -87,45 +101,52 @@ await adapter.close();
|
|
|
87
101
|
|
|
88
102
|
---
|
|
89
103
|
|
|
90
|
-
##
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
## 🔳 QR Code Strategies
|
|
105
|
+
|
|
106
|
+
`printer.qrcode(...)` supports three strategies to ensure compatibility with any printer:
|
|
107
|
+
|
|
108
|
+
- `native`: Sends native `GS ( k` commands. Fast and sharp.
|
|
109
|
+
- `raster`: Generates a bitmask in memory and prints as an image. Works on *any* printer that supports graphics.
|
|
110
|
+
- `auto`: Uses the profile configuration to decide the best path (e.g., Bematech defaults to raster for reliability).
|
|
111
|
+
|
|
112
|
+
```javascript
|
|
113
|
+
printer.qrcode('https://google.com', {
|
|
114
|
+
size: 6,
|
|
115
|
+
level: 'M',
|
|
116
|
+
strategy: 'raster',
|
|
117
|
+
position: 'center'
|
|
118
|
+
});
|
|
104
119
|
```
|
|
105
120
|
|
|
121
|
+
For raster QR, `position` uses standard alignment (`ESC a`). On some generic firmwares alignment may be approximate; use `offsetCols` (in character columns) to fine-tune horizontal placement.
|
|
122
|
+
|
|
106
123
|
---
|
|
107
124
|
|
|
108
|
-
## 🖼️
|
|
125
|
+
## 🖼️ Image Processing
|
|
109
126
|
|
|
110
|
-
- **Formats:** PNG (Indexed/Gray/RGB), BMP (1/4/8/24-bit), JPEG, GIF, and SVG
|
|
111
|
-
- **Non-blocking:**
|
|
127
|
+
- **Supported Formats:** PNG (Adam7/Indexed/Gray/RGB), BMP (1/4/8/24-bit), JPEG, GIF, and **SVG**.
|
|
128
|
+
- **Non-blocking:** Heavy processing yields to the Event Loop, keeping your server responsive.
|
|
129
|
+
- **SVG Excellence:** Automatic transparency flattening over white background.
|
|
112
130
|
|
|
113
131
|
```javascript
|
|
114
132
|
import { Image } from '@risleylima/escpos';
|
|
115
|
-
const image = await Image.load('./logo.
|
|
133
|
+
const image = await Image.load('./logo.svg');
|
|
116
134
|
printer.raster(image);
|
|
117
135
|
```
|
|
118
136
|
|
|
119
137
|
---
|
|
120
138
|
|
|
121
|
-
##
|
|
139
|
+
## 🛟 Recovery API
|
|
122
140
|
|
|
123
|
-
Reliable
|
|
141
|
+
Reliable error handling for production environments:
|
|
124
142
|
|
|
125
143
|
```javascript
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
144
|
+
// Recover transport + printer baseline
|
|
145
|
+
const result = await printer.recover({ checkStatus: true });
|
|
146
|
+
|
|
147
|
+
// If recovery had to clear the buffer, the data is returned for logging/retry
|
|
148
|
+
if (result.discardedBuffer) {
|
|
149
|
+
console.log('Unprinted data:', result.discardedBuffer.length, 'bytes');
|
|
129
150
|
}
|
|
130
151
|
```
|
|
131
152
|
|
|
@@ -133,29 +154,24 @@ if (status[0] & 0x0C) {
|
|
|
133
154
|
|
|
134
155
|
## 🖨️ Profile Support
|
|
135
156
|
|
|
136
|
-
The library uses profiles to handle model-specific commands:
|
|
137
|
-
|
|
138
157
|
- **'default'**: Standard ESC/POS.
|
|
139
|
-
- **'custom-vkp80iii'**:
|
|
140
|
-
- **'bematech-mp4200th'**:
|
|
158
|
+
- **'custom-vkp80iii'**: Custom VKP80III (Special eject/cut flow).
|
|
159
|
+
- **'bematech-mp4200th'**: Optimized for Brazilian market standard.
|
|
141
160
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
- `flush()` is transactional: if adapter write fails, payload is preserved in buffer for retry/recovery.
|
|
149
|
-
- Printer I/O is serialized internally for `flush()`, `close()`, and `getStatus()` to reduce race conditions in concurrent flows.
|
|
150
|
-
- Passing an unknown profile id now fails fast with a descriptive error instead of silently falling back.
|
|
161
|
+
Register your own:
|
|
162
|
+
```javascript
|
|
163
|
+
import { registerProfile } from '@risleylima/escpos';
|
|
164
|
+
registerProfile({ id: 'my-model', name: 'My Model', defaultPaperWidth: 42 });
|
|
165
|
+
```
|
|
151
166
|
|
|
152
167
|
---
|
|
153
168
|
|
|
154
169
|
## ✅ Reliability
|
|
155
170
|
|
|
156
|
-
- **
|
|
157
|
-
- **Strict
|
|
158
|
-
- **Spec-Validated:**
|
|
171
|
+
- **177+ Unit and Integration Tests.**
|
|
172
|
+
- **TypeScript Strict:** Type safety for the entire command set.
|
|
173
|
+
- **Spec-Validated:** Aligned with official Epson and manufacturer manuals.
|
|
174
|
+
- **Transactional flush:** On write failure, the buffer is preserved so you can retry or log; call `printer.recover()` after transport errors before resuming prints.
|
|
159
175
|
|
|
160
176
|
---
|
|
161
177
|
|
package/dist/adapter/index.d.ts
CHANGED
|
@@ -9,6 +9,11 @@ export declare abstract class Adapter extends EventEmitter {
|
|
|
9
9
|
*/
|
|
10
10
|
protected synchronized<T>(task: () => Promise<T>): Promise<T>;
|
|
11
11
|
getState(): AdapterState;
|
|
12
|
+
/**
|
|
13
|
+
* Generic transport recovery hook.
|
|
14
|
+
* Concrete adapters can override with interface-specific behavior.
|
|
15
|
+
*/
|
|
16
|
+
recover(): Promise<boolean>;
|
|
12
17
|
abstract connect(...args: unknown[]): Promise<boolean>;
|
|
13
18
|
abstract open(): Promise<boolean>;
|
|
14
19
|
abstract write(data: Buffer): Promise<boolean>;
|
|
@@ -24,6 +29,7 @@ export type AdapterLike = {
|
|
|
24
29
|
close(options?: {
|
|
25
30
|
timeout?: number;
|
|
26
31
|
}): Promise<boolean>;
|
|
32
|
+
recover?(): Promise<boolean>;
|
|
27
33
|
getState?(): string;
|
|
28
34
|
};
|
|
29
35
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAElH,8BAAsB,OAAQ,SAAQ,YAAY;IAChD,SAAS,CAAC,KAAK,EAAE,YAAY,CAAkB;IAC/C,OAAO,CAAC,WAAW,CAAoC;IAEvD;;;OAGG;cACa,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAMnE,QAAQ,IAAI,YAAY;IAIxB,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IACtD,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9C,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAChE,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;CACxC;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,MAAM,CAAC;CACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAElH,8BAAsB,OAAQ,SAAQ,YAAY;IAChD,SAAS,CAAC,KAAK,EAAE,YAAY,CAAkB;IAC/C,OAAO,CAAC,WAAW,CAAoC;IAEvD;;;OAGG;cACa,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAMnE,QAAQ,IAAI,YAAY;IAIxB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAWjC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IACtD,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9C,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAChE,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;CACxC;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,QAAQ,CAAC,IAAI,MAAM,CAAC;CACrB,CAAC"}
|
package/dist/adapter/index.js
CHANGED
|
@@ -20,6 +20,21 @@ class Adapter extends events_1.EventEmitter {
|
|
|
20
20
|
getState() {
|
|
21
21
|
return this.state;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Generic transport recovery hook.
|
|
25
|
+
* Concrete adapters can override with interface-specific behavior.
|
|
26
|
+
*/
|
|
27
|
+
async recover() {
|
|
28
|
+
return this.synchronized(async () => {
|
|
29
|
+
try {
|
|
30
|
+
await this.close();
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Best-effort close during recovery.
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
23
38
|
}
|
|
24
39
|
exports.Adapter = Adapter;
|
|
25
40
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAItC,MAAsB,OAAQ,SAAQ,qBAAY;IAAlD;;QACY,UAAK,GAAiB,cAAc,CAAC;QACvC,gBAAW,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAItC,MAAsB,OAAQ,SAAQ,qBAAY;IAAlD;;QACY,UAAK,GAAiB,cAAc,CAAC;QACvC,gBAAW,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAqCzD,CAAC;IAnCC;;;OAGG;IACO,KAAK,CAAC,YAAY,CAAI,IAAsB;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CAQF;AAvCD,0BAuCC"}
|
|
@@ -20,5 +20,11 @@ export declare class Network extends Adapter {
|
|
|
20
20
|
disconnect(options?: {
|
|
21
21
|
timeout?: number;
|
|
22
22
|
}): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Network-specific recovery:
|
|
25
|
+
* 1) close current socket
|
|
26
|
+
* 2) reopen using last configured host/port
|
|
27
|
+
*/
|
|
28
|
+
recover(): Promise<boolean>;
|
|
23
29
|
}
|
|
24
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/network-adapter/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,qBAAa,OAAQ,SAAQ,OAAO;IAClC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,OAAO,CAAsC;IAE/C,OAAO,CACX,aAAa,EAAE,MAAM,GAAG,qBAAqB,EAC7C,aAAa,CAAC,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7B,OAAO,CAAC,OAAO,CAAC;IA2Bb,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAsDxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB3C,OAAO,CAAC,UAAU;IAmDZ,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IA4BvB,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BvD,UAAU,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/network-adapter/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,qBAAa,OAAQ,SAAQ,OAAO;IAClC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,OAAO,CAAsC;IAE/C,OAAO,CACX,aAAa,EAAE,MAAM,GAAG,qBAAqB,EAC7C,aAAa,CAAC,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7B,OAAO,CAAC,OAAO,CAAC;IA2Bb,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAsDxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB3C,OAAO,CAAC,UAAU;IAmDZ,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IA4BvB,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BvD,UAAU,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlE;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAgBlC"}
|
|
@@ -258,6 +258,26 @@ class Network extends adapter_1.Adapter {
|
|
|
258
258
|
async disconnect(options) {
|
|
259
259
|
return this.close(options);
|
|
260
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* Network-specific recovery:
|
|
263
|
+
* 1) close current socket
|
|
264
|
+
* 2) reopen using last configured host/port
|
|
265
|
+
*/
|
|
266
|
+
async recover() {
|
|
267
|
+
try {
|
|
268
|
+
await this.close();
|
|
269
|
+
}
|
|
270
|
+
catch (e) {
|
|
271
|
+
debug('close failed during network recover: %s', e.message);
|
|
272
|
+
}
|
|
273
|
+
if (!this.options) {
|
|
274
|
+
this.state = 'DISCONNECTED';
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
278
|
+
await this.open();
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
261
281
|
}
|
|
262
282
|
exports.Network = Network;
|
|
263
283
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/network-adapter/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAC3B,wCAAqC;AAErC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAA8C,CAAC;AAQtG,MAAM,iBAAiB,GAAG,gDAAgD,CAAC;AAC3E,MAAM,0BAA0B,GAAG,KAAK,CAAC;AACzC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,yCAAyC;AAElE,MAAa,OAAQ,SAAQ,iBAAO;IAApC;;QACU,WAAM,GAAsB,IAAI,CAAC;QACjC,YAAO,GAAiC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/network-adapter/index.ts"],"names":[],"mappings":"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"}
|
package/dist/printer/index.d.ts
CHANGED
|
@@ -36,6 +36,24 @@ export interface PresentTicketOptions extends TicketPresentationOptions {
|
|
|
36
36
|
/** When true and model requires explicit cut, send partial cut. Default: true. */
|
|
37
37
|
part?: boolean;
|
|
38
38
|
}
|
|
39
|
+
export interface RecoverOptions {
|
|
40
|
+
/** Run adapter-level recovery hook before printer recovery command. Default: true */
|
|
41
|
+
transport?: boolean;
|
|
42
|
+
/** Request DLE EOT status bytes after recovery. Default: false */
|
|
43
|
+
checkStatus?: boolean;
|
|
44
|
+
/** Optional wait between init and status read. Default: 120ms */
|
|
45
|
+
settleMs?: number;
|
|
46
|
+
/** If true, the current buffer content is NOT cleared during recovery. Default: false */
|
|
47
|
+
keepBuffer?: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface RecoverResult {
|
|
50
|
+
printer?: Buffer;
|
|
51
|
+
offline?: Buffer;
|
|
52
|
+
error?: Buffer;
|
|
53
|
+
paper?: Buffer;
|
|
54
|
+
/** The content of the buffer that was flushed during recovery (if keepBuffer was false). */
|
|
55
|
+
discardedBuffer?: Buffer;
|
|
56
|
+
}
|
|
39
57
|
declare class SpecBuffer {
|
|
40
58
|
private chunks;
|
|
41
59
|
private currentSize;
|
|
@@ -138,9 +156,13 @@ export declare class Printer {
|
|
|
138
156
|
setReverseColors(bool: boolean): this;
|
|
139
157
|
setReverseColorsAlt(bool: boolean): this;
|
|
140
158
|
raw(data: Buffer | string): this;
|
|
159
|
+
private writeNativeQrCode;
|
|
160
|
+
private writeRasterQrCode;
|
|
141
161
|
/**
|
|
142
|
-
*
|
|
143
|
-
*
|
|
162
|
+
* QR Code emission strategy:
|
|
163
|
+
* - native: ESC/POS GS ( k flow.
|
|
164
|
+
* - raster: rendered matrix sent as GS v 0 bitmap.
|
|
165
|
+
* - auto: profile-driven (fallback to raster on native hook failures).
|
|
144
166
|
*/
|
|
145
167
|
qrcode(code: string, options?: QrCodeOptions): this;
|
|
146
168
|
/**
|
|
@@ -153,6 +175,11 @@ export declare class Printer {
|
|
|
153
175
|
* Returns a Buffer with the status byte.
|
|
154
176
|
*/
|
|
155
177
|
getStatus(type?: 'PRINTER' | 'OFFLINE' | 'ERROR' | 'PAPER'): Promise<Buffer>;
|
|
178
|
+
/**
|
|
179
|
+
* Recover transport + generic ESC/POS runtime state.
|
|
180
|
+
* Intended for post-error cleanup before retrying jobs.
|
|
181
|
+
*/
|
|
182
|
+
recover(options?: RecoverOptions): Promise<RecoverResult>;
|
|
156
183
|
}
|
|
157
184
|
export {};
|
|
158
185
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/printer/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAYnD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/printer/index.ts"],"names":[],"mappings":"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"}
|
package/dist/printer/index.js
CHANGED
|
@@ -39,6 +39,7 @@ const commands_types_1 = require("./commands-types");
|
|
|
39
39
|
const profiles_1 = require("./profiles");
|
|
40
40
|
const utils = __importStar(require("./utils"));
|
|
41
41
|
const image_1 = require("./image");
|
|
42
|
+
const qrcodeGenerator = require("qrcode-generator");
|
|
42
43
|
class SpecBuffer {
|
|
43
44
|
constructor(maxSize = 10 * 1024 * 1024) {
|
|
44
45
|
this.currentSize = 0;
|
|
@@ -56,6 +57,11 @@ class SpecBuffer {
|
|
|
56
57
|
prepend(data) {
|
|
57
58
|
if (data.length === 0)
|
|
58
59
|
return;
|
|
60
|
+
if (this.currentSize + data.length > this.maxSize) {
|
|
61
|
+
// In case of prepend during recovery, we might exceed limit if user doesn't clear.
|
|
62
|
+
// We still allow it but emit a warning as it's a critical path.
|
|
63
|
+
console.warn(`[escpos] Warning: Buffer limit exceeded during prepend operation.`);
|
|
64
|
+
}
|
|
59
65
|
this.chunks.unshift(data);
|
|
60
66
|
this.currentSize += data.length;
|
|
61
67
|
}
|
|
@@ -576,7 +582,7 @@ class Printer {
|
|
|
576
582
|
if (buf.length === 0)
|
|
577
583
|
return this;
|
|
578
584
|
try {
|
|
579
|
-
await this.adapter.write(buf);
|
|
585
|
+
await this.enqueueIo(() => this.adapter.write(buf));
|
|
580
586
|
}
|
|
581
587
|
catch (error) {
|
|
582
588
|
// Preserve payload for retry in caller-controlled recovery flows.
|
|
@@ -589,7 +595,7 @@ class Printer {
|
|
|
589
595
|
const buf = this.buffer.flush();
|
|
590
596
|
if (buf.length > 0) {
|
|
591
597
|
try {
|
|
592
|
-
await this.adapter.write(buf);
|
|
598
|
+
await this.enqueueIo(() => this.adapter.write(buf));
|
|
593
599
|
}
|
|
594
600
|
catch (error) {
|
|
595
601
|
this.buffer.prepend(buf);
|
|
@@ -627,17 +633,13 @@ class Printer {
|
|
|
627
633
|
}
|
|
628
634
|
return this;
|
|
629
635
|
}
|
|
630
|
-
|
|
631
|
-
* Modern QR Code implementation using GS ( k.
|
|
632
|
-
* QR sequence (cn=49): fn=65 (model), fn=67 (module size), fn=69 (EC level), fn=80 (store), fn=81 (print).
|
|
633
|
-
*/
|
|
634
|
-
qrcode(code, options = {}) {
|
|
636
|
+
writeNativeQrCode(code, options) {
|
|
635
637
|
const profileBuf = this.profile?.buildQrCode?.(code, options, {
|
|
636
638
|
commands: this.commands,
|
|
637
639
|
});
|
|
638
640
|
if (Buffer.isBuffer(profileBuf)) {
|
|
639
641
|
this.buffer.write(profileBuf);
|
|
640
|
-
return
|
|
642
|
+
return;
|
|
641
643
|
}
|
|
642
644
|
const model = options.model ?? 2;
|
|
643
645
|
const size = options.size ?? 6;
|
|
@@ -658,6 +660,82 @@ class Printer {
|
|
|
658
660
|
this.buffer.write(Buffer.concat([cmd, Buffer.from([pL, pH, 0x31, 0x50, 0x30]), data]));
|
|
659
661
|
// 5. Print QR Code (Function 181)
|
|
660
662
|
this.buffer.write(Buffer.concat([cmd, Buffer.from([0x03, 0x00, 0x31, 0x51, 0x30])]));
|
|
663
|
+
}
|
|
664
|
+
writeRasterQrCode(code, options) {
|
|
665
|
+
const level = (options.level ?? 'M').toUpperCase();
|
|
666
|
+
const dotSize = Math.max(1, Math.min(16, Math.floor(options.size ?? 6)));
|
|
667
|
+
const position = options.position?.toLowerCase();
|
|
668
|
+
const offsetCols = Number.isFinite(Number(options.offsetCols))
|
|
669
|
+
? Math.floor(Number(options.offsetCols))
|
|
670
|
+
: 0;
|
|
671
|
+
const offsetPx = offsetCols * 8;
|
|
672
|
+
const quietZone = 4;
|
|
673
|
+
if (position === 'center')
|
|
674
|
+
this.buffer.write(this.commands.TEXT_FORMAT.TXT_ALIGN_CT);
|
|
675
|
+
else if (position === 'right')
|
|
676
|
+
this.buffer.write(this.commands.TEXT_FORMAT.TXT_ALIGN_RT);
|
|
677
|
+
else if (position === 'left')
|
|
678
|
+
this.buffer.write(this.commands.TEXT_FORMAT.TXT_ALIGN_LT);
|
|
679
|
+
const qr = qrcodeGenerator(0, level);
|
|
680
|
+
qr.addData(code, 'Byte');
|
|
681
|
+
qr.make();
|
|
682
|
+
const modules = qr.getModuleCount();
|
|
683
|
+
const contentPx = (modules + quietZone * 2) * dotSize;
|
|
684
|
+
const extraLeftPx = Math.max(0, -offsetPx);
|
|
685
|
+
const extraRightPx = Math.max(0, offsetPx);
|
|
686
|
+
const canvasPx = contentPx + extraLeftPx + extraRightPx;
|
|
687
|
+
const leftPaddingPx = offsetPx + extraLeftPx;
|
|
688
|
+
const widthBytes = Math.ceil(canvasPx / 8);
|
|
689
|
+
const raster = Buffer.alloc(widthBytes * contentPx);
|
|
690
|
+
for (let y = 0; y < contentPx; y++) {
|
|
691
|
+
const moduleY = Math.floor(y / dotSize) - quietZone;
|
|
692
|
+
for (let x = 0; x < contentPx; x++) {
|
|
693
|
+
const moduleX = Math.floor(x / dotSize) - quietZone;
|
|
694
|
+
const dark = moduleX >= 0 &&
|
|
695
|
+
moduleX < modules &&
|
|
696
|
+
moduleY >= 0 &&
|
|
697
|
+
moduleY < modules &&
|
|
698
|
+
qr.isDark(moduleY, moduleX);
|
|
699
|
+
if (!dark)
|
|
700
|
+
continue;
|
|
701
|
+
const outX = x + leftPaddingPx;
|
|
702
|
+
const index = y * widthBytes + (outX >> 3);
|
|
703
|
+
raster[index] |= 0x80 >> (outX & 0x07);
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
const width = Buffer.allocUnsafe(2);
|
|
707
|
+
width.writeUInt16LE(widthBytes, 0);
|
|
708
|
+
const height = Buffer.allocUnsafe(2);
|
|
709
|
+
height.writeUInt16LE(contentPx, 0);
|
|
710
|
+
this.buffer.write(Buffer.concat([this.commands.GSV0_FORMAT.GSV0_NORMAL, width, height, raster]));
|
|
711
|
+
}
|
|
712
|
+
/**
|
|
713
|
+
* QR Code emission strategy:
|
|
714
|
+
* - native: ESC/POS GS ( k flow.
|
|
715
|
+
* - raster: rendered matrix sent as GS v 0 bitmap.
|
|
716
|
+
* - auto: profile-driven (fallback to raster on native hook failures).
|
|
717
|
+
*/
|
|
718
|
+
qrcode(code, options = {}) {
|
|
719
|
+
const strategy = options.strategy ?? this.profile?.qrCodeStrategy ?? 'native';
|
|
720
|
+
if (strategy === 'raster') {
|
|
721
|
+
this.writeRasterQrCode(code, options);
|
|
722
|
+
return this;
|
|
723
|
+
}
|
|
724
|
+
if (strategy === 'auto') {
|
|
725
|
+
const profileSupportsNative = this.profile?.supportsNativeQrCode ?? true;
|
|
726
|
+
if (!profileSupportsNative) {
|
|
727
|
+
this.writeRasterQrCode(code, options);
|
|
728
|
+
return this;
|
|
729
|
+
}
|
|
730
|
+
try {
|
|
731
|
+
this.writeNativeQrCode(code, options);
|
|
732
|
+
}
|
|
733
|
+
catch {
|
|
734
|
+
this.writeRasterQrCode(code, options);
|
|
735
|
+
}
|
|
736
|
+
return this;
|
|
737
|
+
}
|
|
738
|
+
this.writeNativeQrCode(code, options);
|
|
661
739
|
return this;
|
|
662
740
|
}
|
|
663
741
|
/**
|
|
@@ -665,6 +743,13 @@ class Printer {
|
|
|
665
743
|
* Use `qrcode(...)` for modern GS ( k flow when possible.
|
|
666
744
|
*/
|
|
667
745
|
code2d(code, type = 'QR', level) {
|
|
746
|
+
const profileBuf = this.profile?.buildCode2d?.(code, type, level, {
|
|
747
|
+
commands: this.commands,
|
|
748
|
+
});
|
|
749
|
+
if (Buffer.isBuffer(profileBuf)) {
|
|
750
|
+
this.buffer.write(profileBuf);
|
|
751
|
+
return this;
|
|
752
|
+
}
|
|
668
753
|
const f = this.commands.CODE2D_FORMAT;
|
|
669
754
|
const typeMap = {
|
|
670
755
|
PDF417: f.TYPE_PDF417,
|
|
@@ -698,6 +783,52 @@ class Printer {
|
|
|
698
783
|
return this.adapter.read();
|
|
699
784
|
});
|
|
700
785
|
}
|
|
786
|
+
/**
|
|
787
|
+
* Recover transport + generic ESC/POS runtime state.
|
|
788
|
+
* Intended for post-error cleanup before retrying jobs.
|
|
789
|
+
*/
|
|
790
|
+
async recover(options = {}) {
|
|
791
|
+
return this.enqueueIo(async () => {
|
|
792
|
+
const transport = options.transport !== false;
|
|
793
|
+
const checkStatus = options.checkStatus === true;
|
|
794
|
+
const settleMs = Math.max(0, Math.floor(options.settleMs ?? 120));
|
|
795
|
+
const keepBuffer = options.keepBuffer === true;
|
|
796
|
+
// Drop pending payload on recovery unless keepBuffer is set.
|
|
797
|
+
const discardedBuffer = keepBuffer ? undefined : this.buffer.flush();
|
|
798
|
+
this.currentCodepage = undefined;
|
|
799
|
+
if (transport && typeof this.adapter.recover === 'function') {
|
|
800
|
+
await this.adapter.recover();
|
|
801
|
+
}
|
|
802
|
+
const recoverCmd = this.profile?.buildRecoverCommand?.({ commands: this.commands }) ??
|
|
803
|
+
this.commands.HARDWARE.HW_INIT;
|
|
804
|
+
await this.adapter.write(recoverCmd);
|
|
805
|
+
if (settleMs > 0) {
|
|
806
|
+
await new Promise((resolve) => setTimeout(resolve, settleMs));
|
|
807
|
+
}
|
|
808
|
+
const out = { discardedBuffer };
|
|
809
|
+
if (!checkStatus)
|
|
810
|
+
return out;
|
|
811
|
+
const canRead = typeof this.adapter.read === 'function';
|
|
812
|
+
if (!canRead)
|
|
813
|
+
return out;
|
|
814
|
+
const probe = async (key, n) => {
|
|
815
|
+
try {
|
|
816
|
+
await this.adapter.write(this.commands.STATUS.DLE_EOT(n));
|
|
817
|
+
const res = await this.adapter.read();
|
|
818
|
+
if (key !== 'discardedBuffer')
|
|
819
|
+
out[key] = res;
|
|
820
|
+
}
|
|
821
|
+
catch {
|
|
822
|
+
// Best-effort status probing.
|
|
823
|
+
}
|
|
824
|
+
};
|
|
825
|
+
await probe('printer', this.commands.STATUS.PRINTER);
|
|
826
|
+
await probe('offline', this.commands.STATUS.OFFLINE);
|
|
827
|
+
await probe('error', this.commands.STATUS.ERROR);
|
|
828
|
+
await probe('paper', this.commands.STATUS.PAPER);
|
|
829
|
+
return out;
|
|
830
|
+
});
|
|
831
|
+
}
|
|
701
832
|
}
|
|
702
833
|
exports.Printer = Printer;
|
|
703
834
|
//# sourceMappingURL=index.js.map
|