@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.
Files changed (33) hide show
  1. package/README.md +67 -51
  2. package/dist/adapter/index.d.ts +6 -0
  3. package/dist/adapter/index.d.ts.map +1 -1
  4. package/dist/adapter/index.js +15 -0
  5. package/dist/adapter/index.js.map +1 -1
  6. package/dist/network-adapter/index.d.ts +6 -0
  7. package/dist/network-adapter/index.d.ts.map +1 -1
  8. package/dist/network-adapter/index.js +20 -0
  9. package/dist/network-adapter/index.js.map +1 -1
  10. package/dist/printer/index.d.ts +29 -2
  11. package/dist/printer/index.d.ts.map +1 -1
  12. package/dist/printer/index.js +139 -8
  13. package/dist/printer/index.js.map +1 -1
  14. package/dist/printer/profiles/bematech/mp4200th.d.ts.map +1 -1
  15. package/dist/printer/profiles/bematech/mp4200th.js +58 -1
  16. package/dist/printer/profiles/bematech/mp4200th.js.map +1 -1
  17. package/dist/printer/profiles/custom/vkp80iii.d.ts.map +1 -1
  18. package/dist/printer/profiles/custom/vkp80iii.js +12 -0
  19. package/dist/printer/profiles/custom/vkp80iii.js.map +1 -1
  20. package/dist/printer/profiles/default.d.ts.map +1 -1
  21. package/dist/printer/profiles/default.js +8 -0
  22. package/dist/printer/profiles/default.js.map +1 -1
  23. package/dist/printer/profiles/types.d.ts +44 -0
  24. package/dist/printer/profiles/types.d.ts.map +1 -1
  25. package/dist/serial-adapter/index.d.ts +10 -0
  26. package/dist/serial-adapter/index.d.ts.map +1 -1
  27. package/dist/serial-adapter/index.js +29 -1
  28. package/dist/serial-adapter/index.js.map +1 -1
  29. package/dist/usb-adapter/index.d.ts +10 -0
  30. package/dist/usb-adapter/index.d.ts.map +1 -1
  31. package/dist/usb-adapter/index.js +93 -19
  32. package/dist/usb-adapter/index.js.map +1 -1
  33. package/package.json +2 -1
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm version](https://img.shields.io/npm/v/@risleylima/escpos.svg)](https://www.npmjs.com/package/@risleylima/escpos)
4
4
  [![Node.js](https://img.shields.io/node/v/@risleylima/escpos.svg)](https://nodejs.org/)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
- [![Tests](https://img.shields.io/badge/tests-138%20passed-brightgreen.svg)]()
6
+ [![Tests](https://img.shields.io/badge/tests-177%20passed-brightgreen.svg)]()
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 Functions 165/167/169/180/181) | Legacy ESC Z commands |
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 is pure and communicates through an `AdapterLike` abstraction. Use USB, Serial, or Network interchangeably.
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 graceful shutdown to ensure zero data loss.
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
- - **Official package manager:** `yarn`
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) Example
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 Example
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 Printing').cut();
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
- ## 📝 Visual Result Preview
91
-
92
- ```text
93
- ------------------------------------------------
94
- MY STORE
95
- 1024 Engineering Street
96
- ------------------------------------------------
97
- Item 001 $ 10.00
98
- Item 002 $ 20.00
99
- ------------------------------------------------
100
- TOTAL $ 30.00
101
- ------------------------------------------------
102
- [ MODERN QR CODE HERE ]
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
- ## 🖼️ Industrial Image Processing
125
+ ## 🖼️ Image Processing
109
126
 
110
- - **Formats:** PNG (Indexed/Gray/RGB), BMP (1/4/8/24-bit), JPEG, GIF, and SVG.
111
- - **Non-blocking:** Asynchronous decoding with `setImmediate` ensuring your server stays responsive.
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.png');
133
+ const image = await Image.load('./logo.svg');
116
134
  printer.raster(image);
117
135
  ```
118
136
 
119
137
  ---
120
138
 
121
- ## 🔍 Status Monitoring
139
+ ## 🛟 Recovery API
122
140
 
123
- Reliable hardware feedback:
141
+ Reliable error handling for production environments:
124
142
 
125
143
  ```javascript
126
- const status = await printer.getStatus('PAPER');
127
- if (status[0] & 0x0C) {
128
- console.log('Alert: Paper low or out of paper!');
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'**: CUSTOM VKP80III (Uses FS P for advanced cut/eject).
140
- - **'bematech-mp4200th'**: Bematech MP-4200 TH in ESC/POS mode.
158
+ - **'custom-vkp80iii'**: Custom VKP80III (Special eject/cut flow).
159
+ - **'bematech-mp4200th'**: Optimized for Brazilian market standard.
141
160
 
142
- You can also register model profiles at runtime with `registerProfile(...)`, or use an isolated registry with `createProfileRegistry(...)` for multi-tenant applications.
143
-
144
- ---
145
-
146
- ## ⚙️ Reliability and Safety Notes
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
- - **138 Unit and Integration Tests.**
157
- - **Strict TypeScript:** Full type safety for the entire ESC/POS command set.
158
- - **Spec-Validated:** QR Code aligned to ESC/POS GS ( k (Functions 165/167/169/180/181) and industrial connection lifecycles.
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
 
@@ -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"}
@@ -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;IAsBzD,CAAC;IApBC;;;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;CAQF;AAxBD,0BAwBC"}
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;CAGnE"}
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/network-adapter/index.ts"],"names":[],"mappings":"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"}
@@ -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
- * Modern QR Code implementation using GS ( k.
143
- * QR sequence (cn=49): fn=65 (model), fn=67 (module size), fn=69 (EC level), fn=80 (store), fn=81 (print).
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":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/printer/index.ts"],"names":[],"mappings":"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"}
@@ -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 this;
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