@thermal-label/brother-ql-core 0.0.1

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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +23 -0
  3. package/dist/__tests__/devices.test.d.ts +2 -0
  4. package/dist/__tests__/devices.test.d.ts.map +1 -0
  5. package/dist/__tests__/devices.test.js +63 -0
  6. package/dist/__tests__/devices.test.js.map +1 -0
  7. package/dist/__tests__/media.test.d.ts +2 -0
  8. package/dist/__tests__/media.test.d.ts.map +1 -0
  9. package/dist/__tests__/media.test.js +62 -0
  10. package/dist/__tests__/media.test.js.map +1 -0
  11. package/dist/__tests__/protocol.test.d.ts +2 -0
  12. package/dist/__tests__/protocol.test.d.ts.map +1 -0
  13. package/dist/__tests__/protocol.test.js +202 -0
  14. package/dist/__tests__/protocol.test.js.map +1 -0
  15. package/dist/__tests__/status.test.d.ts +2 -0
  16. package/dist/__tests__/status.test.d.ts.map +1 -0
  17. package/dist/__tests__/status.test.js +74 -0
  18. package/dist/__tests__/status.test.js.map +1 -0
  19. package/dist/devices.d.ts +255 -0
  20. package/dist/devices.d.ts.map +1 -0
  21. package/dist/devices.js +260 -0
  22. package/dist/devices.js.map +1 -0
  23. package/dist/index.d.ts +8 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +6 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/media.d.ts +5 -0
  28. package/dist/media.d.ts.map +1 -0
  29. package/dist/media.js +247 -0
  30. package/dist/media.js.map +1 -0
  31. package/dist/protocol.d.ts +17 -0
  32. package/dist/protocol.d.ts.map +1 -0
  33. package/dist/protocol.js +173 -0
  34. package/dist/protocol.js.map +1 -0
  35. package/dist/status.d.ts +4 -0
  36. package/dist/status.d.ts.map +1 -0
  37. package/dist/status.js +61 -0
  38. package/dist/status.js.map +1 -0
  39. package/dist/types.d.ts +69 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +2 -0
  42. package/dist/types.js.map +1 -0
  43. package/package.json +71 -0
  44. package/src/__tests__/devices.test.ts +73 -0
  45. package/src/__tests__/media.test.ts +70 -0
  46. package/src/__tests__/protocol.test.ts +241 -0
  47. package/src/__tests__/status.test.ts +95 -0
  48. package/src/devices.ts +263 -0
  49. package/src/index.ts +22 -0
  50. package/src/media.ts +250 -0
  51. package/src/protocol.ts +213 -0
  52. package/src/status.ts +67 -0
  53. package/src/types.ts +77 -0
package/dist/media.js ADDED
@@ -0,0 +1,247 @@
1
+ import {} from './types.js';
2
+ export const MEDIA = {
3
+ // Continuous length tape
4
+ 257: {
5
+ id: 257,
6
+ name: '12mm continuous',
7
+ type: 'continuous',
8
+ widthMm: 12,
9
+ lengthMm: 0,
10
+ printAreaDots: 106,
11
+ leftMarginPins: 585,
12
+ rightMarginPins: 29,
13
+ },
14
+ 258: {
15
+ id: 258,
16
+ name: '29mm continuous (DK-22210)',
17
+ type: 'continuous',
18
+ widthMm: 29,
19
+ lengthMm: 0,
20
+ printAreaDots: 306,
21
+ leftMarginPins: 408,
22
+ rightMarginPins: 6,
23
+ },
24
+ 264: {
25
+ id: 264,
26
+ name: '38mm continuous (DK-22225)',
27
+ type: 'continuous',
28
+ widthMm: 38,
29
+ lengthMm: 0,
30
+ printAreaDots: 413,
31
+ leftMarginPins: 295,
32
+ rightMarginPins: 12,
33
+ },
34
+ 262: {
35
+ id: 262,
36
+ name: '50mm continuous (DK-22246)',
37
+ type: 'continuous',
38
+ widthMm: 50,
39
+ lengthMm: 0,
40
+ printAreaDots: 554,
41
+ leftMarginPins: 154,
42
+ rightMarginPins: 12,
43
+ },
44
+ 261: {
45
+ id: 261,
46
+ name: '54mm continuous (DK-22214)',
47
+ type: 'continuous',
48
+ widthMm: 54,
49
+ lengthMm: 0,
50
+ printAreaDots: 590,
51
+ leftMarginPins: 130,
52
+ rightMarginPins: 0,
53
+ },
54
+ 259: {
55
+ id: 259,
56
+ name: '62mm continuous (DK-22205)',
57
+ type: 'continuous',
58
+ widthMm: 62,
59
+ lengthMm: 0,
60
+ printAreaDots: 696,
61
+ leftMarginPins: 12,
62
+ rightMarginPins: 12,
63
+ },
64
+ 251: {
65
+ id: 251,
66
+ name: '62mm continuous two-color (DK-22251)',
67
+ type: 'continuous',
68
+ widthMm: 62,
69
+ lengthMm: 0,
70
+ printAreaDots: 696,
71
+ leftMarginPins: 12,
72
+ rightMarginPins: 12,
73
+ twoColorTape: true,
74
+ },
75
+ 260: {
76
+ id: 260,
77
+ name: '102mm continuous (DK-22243)',
78
+ type: 'continuous',
79
+ widthMm: 102,
80
+ lengthMm: 0,
81
+ printAreaDots: 1164,
82
+ leftMarginPins: 76,
83
+ rightMarginPins: 56,
84
+ },
85
+ // Die-cut labels
86
+ 269: {
87
+ id: 269,
88
+ name: '17×54mm die-cut (DK-11204)',
89
+ type: 'die-cut',
90
+ widthMm: 17,
91
+ lengthMm: 54,
92
+ printAreaDots: 165,
93
+ leftMarginPins: 0,
94
+ rightMarginPins: 0,
95
+ dieCutMaskedAreaDots: 566,
96
+ },
97
+ 270: {
98
+ id: 270,
99
+ name: '17×87mm die-cut (DK-11203)',
100
+ type: 'die-cut',
101
+ widthMm: 17,
102
+ lengthMm: 87,
103
+ printAreaDots: 165,
104
+ leftMarginPins: 0,
105
+ rightMarginPins: 0,
106
+ dieCutMaskedAreaDots: 956,
107
+ },
108
+ 370: {
109
+ id: 370,
110
+ name: '23×23mm die-cut',
111
+ type: 'die-cut',
112
+ widthMm: 23,
113
+ lengthMm: 23,
114
+ printAreaDots: 236,
115
+ leftMarginPins: 0,
116
+ rightMarginPins: 0,
117
+ dieCutMaskedAreaDots: 202,
118
+ },
119
+ 271: {
120
+ id: 271,
121
+ name: '29×90mm die-cut (DK-11201)',
122
+ type: 'die-cut',
123
+ widthMm: 29,
124
+ lengthMm: 90,
125
+ printAreaDots: 306,
126
+ leftMarginPins: 0,
127
+ rightMarginPins: 0,
128
+ dieCutMaskedAreaDots: 991,
129
+ },
130
+ 272: {
131
+ id: 272,
132
+ name: '38×90mm die-cut (DK-11218)',
133
+ type: 'die-cut',
134
+ widthMm: 38,
135
+ lengthMm: 90,
136
+ printAreaDots: 413,
137
+ leftMarginPins: 0,
138
+ rightMarginPins: 0,
139
+ dieCutMaskedAreaDots: 991,
140
+ },
141
+ 367: {
142
+ id: 367,
143
+ name: '39×48mm die-cut (DK-11219)',
144
+ type: 'die-cut',
145
+ widthMm: 39,
146
+ lengthMm: 48,
147
+ printAreaDots: 425,
148
+ leftMarginPins: 0,
149
+ rightMarginPins: 0,
150
+ dieCutMaskedAreaDots: 495,
151
+ },
152
+ 374: {
153
+ id: 374,
154
+ name: '52×29mm die-cut',
155
+ type: 'die-cut',
156
+ widthMm: 52,
157
+ lengthMm: 29,
158
+ printAreaDots: 578,
159
+ leftMarginPins: 0,
160
+ rightMarginPins: 0,
161
+ dieCutMaskedAreaDots: 271,
162
+ },
163
+ 274: {
164
+ id: 274,
165
+ name: '62×29mm die-cut (DK-11209)',
166
+ type: 'die-cut',
167
+ widthMm: 62,
168
+ lengthMm: 29,
169
+ printAreaDots: 696,
170
+ leftMarginPins: 0,
171
+ rightMarginPins: 0,
172
+ dieCutMaskedAreaDots: 271,
173
+ },
174
+ 275: {
175
+ id: 275,
176
+ name: '62×100mm die-cut (DK-11202)',
177
+ type: 'die-cut',
178
+ widthMm: 62,
179
+ lengthMm: 100,
180
+ printAreaDots: 696,
181
+ leftMarginPins: 0,
182
+ rightMarginPins: 0,
183
+ dieCutMaskedAreaDots: 1109,
184
+ },
185
+ 365: {
186
+ id: 365,
187
+ name: '102×51mm die-cut (DK-11240)',
188
+ type: 'die-cut',
189
+ widthMm: 102,
190
+ lengthMm: 51,
191
+ printAreaDots: 1164,
192
+ leftMarginPins: 0,
193
+ rightMarginPins: 0,
194
+ dieCutMaskedAreaDots: 526,
195
+ },
196
+ 366: {
197
+ id: 366,
198
+ name: '102×152mm die-cut (DK-11241)',
199
+ type: 'die-cut',
200
+ widthMm: 102,
201
+ lengthMm: 152,
202
+ printAreaDots: 1164,
203
+ leftMarginPins: 0,
204
+ rightMarginPins: 0,
205
+ dieCutMaskedAreaDots: 1660,
206
+ },
207
+ 362: {
208
+ id: 362,
209
+ name: '12mm Ø die-cut',
210
+ type: 'die-cut',
211
+ widthMm: 12,
212
+ lengthMm: 12,
213
+ printAreaDots: 94,
214
+ leftMarginPins: 0,
215
+ rightMarginPins: 0,
216
+ dieCutMaskedAreaDots: 94,
217
+ },
218
+ 363: {
219
+ id: 363,
220
+ name: '24mm Ø die-cut (DK-11221)',
221
+ type: 'die-cut',
222
+ widthMm: 24,
223
+ lengthMm: 24,
224
+ printAreaDots: 236,
225
+ leftMarginPins: 0,
226
+ rightMarginPins: 0,
227
+ dieCutMaskedAreaDots: 236,
228
+ },
229
+ 273: {
230
+ id: 273,
231
+ name: '58mm Ø die-cut (DK-11207)',
232
+ type: 'die-cut',
233
+ widthMm: 58,
234
+ lengthMm: 58,
235
+ printAreaDots: 618,
236
+ leftMarginPins: 0,
237
+ rightMarginPins: 0,
238
+ dieCutMaskedAreaDots: 618,
239
+ },
240
+ };
241
+ export function findMedia(id) {
242
+ return MEDIA[id];
243
+ }
244
+ export function findMediaByWidth(widthMm, type) {
245
+ return Object.values(MEDIA).filter(m => m.widthMm === widthMm && m.type === type);
246
+ }
247
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type MediaDescriptor, type PageData, type JobOptions } from './types.js';
2
+ export declare function buildInvalidate(): Uint8Array;
3
+ export declare function buildStatusRequest(): Uint8Array;
4
+ export declare function buildInitialize(): Uint8Array;
5
+ export declare function buildRasterMode(): Uint8Array;
6
+ export declare function buildStatusNotification(enabled: boolean): Uint8Array;
7
+ export declare function buildPrintInfo(media: MediaDescriptor, rowCount: number, pageIndex: number): Uint8Array;
8
+ export declare function buildVariousMode(autoCut: boolean): Uint8Array;
9
+ export declare function buildExpandedMode(cutAtEnd: boolean, highRes: boolean, twoColor?: boolean): Uint8Array;
10
+ export declare function buildCutEach(n: number): Uint8Array;
11
+ export declare function buildMargin(dots: number): Uint8Array;
12
+ export declare function buildCompression(enabled: boolean): Uint8Array;
13
+ export declare function buildRasterRow(rowBytes: Uint8Array, color: 'black' | 'red', twoColor?: boolean): Uint8Array;
14
+ export declare function buildZeroRow(): Uint8Array;
15
+ export declare function buildPrintCommand(isLastPage: boolean): Uint8Array;
16
+ export declare function encodeJob(pages: PageData[], options?: JobOptions): Uint8Array;
17
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAoB,MAAM,YAAY,CAAC;AAEpG,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAE/C;AAED,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAEpE;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,UAAU,CAsBZ;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAE7D;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,EAChB,QAAQ,UAAQ,GACf,UAAU,CAMZ;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAElD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAE7D;AAKD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,OAAO,GAAG,KAAK,EACtB,QAAQ,UAAQ,GACf,UAAU,CAYZ;AAED,wBAAgB,YAAY,IAAI,UAAU,CAEzC;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAEjE;AA8BD,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAE,UAAe,GAAG,UAAU,CA4EjF"}
@@ -0,0 +1,173 @@
1
+ import { getRow, createBitmap } from '@mbtech-nl/bitmap';
2
+ import {} from './types.js';
3
+ export function buildInvalidate() {
4
+ return new Uint8Array(200);
5
+ }
6
+ export function buildStatusRequest() {
7
+ return new Uint8Array([0x1b, 0x69, 0x53]);
8
+ }
9
+ export function buildInitialize() {
10
+ return new Uint8Array([0x1b, 0x40]);
11
+ }
12
+ export function buildRasterMode() {
13
+ return new Uint8Array([0x1b, 0x69, 0x61, 0x01]);
14
+ }
15
+ export function buildStatusNotification(enabled) {
16
+ return new Uint8Array([0x1b, 0x69, 0x21, enabled ? 0x01 : 0x00]);
17
+ }
18
+ export function buildPrintInfo(media, rowCount, pageIndex) {
19
+ const mediaType = media.type === 'continuous' ? 0x0a : 0x0b;
20
+ // 0xCE is what Python brother_ql uses for QL-820NWB (two-color capable model) regardless of
21
+ // whether the job uses two colors. Single-color models (QL-700 etc.) use 0x8E instead.
22
+ // We always use 0xCE here; callers can override per-device if needed.
23
+ const validFlags = 0xce;
24
+ const buf = new Uint8Array(13);
25
+ buf[0] = 0x1b;
26
+ buf[1] = 0x69;
27
+ buf[2] = 0x7a;
28
+ buf[3] = validFlags;
29
+ buf[4] = mediaType;
30
+ buf[5] = media.widthMm;
31
+ buf[6] = media.lengthMm;
32
+ // rowCount little-endian at bytes 7-8 (offsets 4-5 in param block)
33
+ buf[7] = rowCount & 0xff;
34
+ buf[8] = (rowCount >> 8) & 0xff;
35
+ buf[9] = pageIndex;
36
+ buf[10] = 0x00;
37
+ buf[11] = 0x00;
38
+ buf[12] = 0x00;
39
+ return buf;
40
+ }
41
+ export function buildVariousMode(autoCut) {
42
+ return new Uint8Array([0x1b, 0x69, 0x4d, autoCut ? 0x40 : 0x00]);
43
+ }
44
+ export function buildExpandedMode(cutAtEnd, highRes, twoColor = false) {
45
+ let flags = 0x00;
46
+ if (twoColor)
47
+ flags |= 0x01;
48
+ if (cutAtEnd)
49
+ flags |= 0x08;
50
+ if (highRes)
51
+ flags |= 0x10;
52
+ return new Uint8Array([0x1b, 0x69, 0x4b, flags]);
53
+ }
54
+ export function buildCutEach(n) {
55
+ return new Uint8Array([0x1b, 0x69, 0x41, n & 0xff]);
56
+ }
57
+ export function buildMargin(dots) {
58
+ return new Uint8Array([0x1b, 0x69, 0x64, dots & 0xff, (dots >> 8) & 0xff]);
59
+ }
60
+ export function buildCompression(enabled) {
61
+ return new Uint8Array([0x4d, enabled ? 0x02 : 0x00]);
62
+ }
63
+ // Single-color: [0x67][0x00][len][data]
64
+ // Two-color black: [0x77][0x01][len][data] — interleaved per-row with red
65
+ // Two-color red: [0x77][0x02][len][data]
66
+ export function buildRasterRow(rowBytes, color, twoColor = false) {
67
+ const buf = new Uint8Array(3 + rowBytes.length);
68
+ if (twoColor) {
69
+ buf[0] = 0x77;
70
+ buf[1] = color === 'black' ? 0x01 : 0x02;
71
+ }
72
+ else {
73
+ buf[0] = 0x67;
74
+ buf[1] = 0x00;
75
+ }
76
+ buf[2] = rowBytes.length;
77
+ buf.set(rowBytes, 3);
78
+ return buf;
79
+ }
80
+ export function buildZeroRow() {
81
+ return new Uint8Array([0x5a]);
82
+ }
83
+ export function buildPrintCommand(isLastPage) {
84
+ return new Uint8Array([isLastPage ? 0x1a : 0x0c]);
85
+ }
86
+ // Copy srcWidthPx bits from src (MSB-first packed) into dst at bit offset dstOffsetBits.
87
+ function placeBits(src, srcWidthPx, dst, dstOffsetBits) {
88
+ for (let px = 0; px < srcWidthPx; px++) {
89
+ const srcBit = ((src[px >> 3] ?? 0) >> (7 - (px & 7))) & 1;
90
+ if (srcBit) {
91
+ const dstPx = dstOffsetBits + px;
92
+ const byteIdx = dstPx >> 3;
93
+ if (byteIdx < dst.length)
94
+ dst[byteIdx] = (dst[byteIdx] ?? 0) | (1 << (7 - (dstPx & 7)));
95
+ }
96
+ }
97
+ }
98
+ function concat(...arrays) {
99
+ const total = arrays.reduce((s, a) => s + a.length, 0);
100
+ const out = new Uint8Array(total);
101
+ let offset = 0;
102
+ for (const a of arrays) {
103
+ out.set(a, offset);
104
+ offset += a.length;
105
+ }
106
+ return out;
107
+ }
108
+ export function encodeJob(pages, options = {}) {
109
+ const copies = options.copies ?? 1;
110
+ const chunks = [];
111
+ // Python brother_ql sequence: raster-mode first, then 200-byte invalidate, then init, then
112
+ // raster-mode again (matches observed working sequence for QL-820NWB).
113
+ chunks.push(buildRasterMode());
114
+ chunks.push(buildInvalidate());
115
+ chunks.push(buildInitialize());
116
+ const allPageInstances = [];
117
+ for (let c = 0; c < copies; c++) {
118
+ for (const page of pages) {
119
+ allPageInstances.push(page);
120
+ }
121
+ }
122
+ for (const [i, page] of allPageInstances.entries()) {
123
+ const isLastPage = i === allPageInstances.length - 1;
124
+ const opts = page.options ?? {};
125
+ const autoCut = opts.autoCut ?? true;
126
+ const cutAtEnd = opts.cutAtEnd ?? true;
127
+ const highRes = opts.highResolution ?? false;
128
+ const marginDots = opts.marginDots ?? 35;
129
+ const compress = opts.compress ?? false;
130
+ const { bitmap, media } = page;
131
+ // twoColorTape media (e.g. DK-22251) requires two-color mode even for black-only jobs.
132
+ // Auto-create an empty red plane when the tape demands it but caller didn't supply one.
133
+ const twoColor = page.redBitmap !== undefined || media.twoColorTape === true;
134
+ const redBitmap = page.redBitmap ??
135
+ (media.twoColorTape ? createBitmap(bitmap.widthPx, bitmap.heightPx) : undefined);
136
+ if (twoColor && redBitmap !== undefined) {
137
+ if (bitmap.widthPx !== redBitmap.widthPx || bitmap.heightPx !== redBitmap.heightPx) {
138
+ throw new Error('Two-color bitmaps must have identical dimensions');
139
+ }
140
+ }
141
+ const rowCount = bitmap.heightPx;
142
+ chunks.push(buildRasterMode());
143
+ chunks.push(buildStatusRequest());
144
+ chunks.push(buildPrintInfo(media, rowCount, i));
145
+ chunks.push(buildVariousMode(autoCut));
146
+ chunks.push(buildCutEach(1));
147
+ chunks.push(buildExpandedMode(cutAtEnd, highRes, twoColor));
148
+ chunks.push(buildMargin(marginDots));
149
+ if (compress)
150
+ chunks.push(buildCompression(true));
151
+ // Each raster row must cover the full print head width (derived from media geometry).
152
+ // leftMarginPins + printAreaDots + rightMarginPins = head pin count (720 or 1296).
153
+ const totalPins = media.leftMarginPins + media.printAreaDots + media.rightMarginPins;
154
+ const rowByteLen = Math.ceil(totalPins / 8);
155
+ // Rows interleaved per raster line (matches Python brother_ql behaviour).
156
+ // Two-color: black row then red row for each line. Single-color: black only.
157
+ for (let r = 0; r < rowCount; r++) {
158
+ const blackSrc = getRow(bitmap, r);
159
+ const blackBytes = new Uint8Array(rowByteLen);
160
+ placeBits(blackSrc, bitmap.widthPx, blackBytes, media.leftMarginPins);
161
+ chunks.push(buildRasterRow(blackBytes, 'black', twoColor));
162
+ if (twoColor && redBitmap !== undefined) {
163
+ const redSrc = getRow(redBitmap, r);
164
+ const redBytes = new Uint8Array(rowByteLen);
165
+ placeBits(redSrc, redBitmap.widthPx, redBytes, media.leftMarginPins);
166
+ chunks.push(buildRasterRow(redBytes, 'red', twoColor));
167
+ }
168
+ }
169
+ chunks.push(buildPrintCommand(isLastPage));
170
+ }
171
+ return concat(...chunks);
172
+ }
173
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type PrinterStatus } from './types.js';
2
+ export declare function parseStatus(bytes: Uint8Array): PrinterStatus;
3
+ export declare const STATUS_REQUEST: Uint8Array;
4
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,YAAY,CAAC;AAuBhE,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,CAyC5D;AAED,eAAO,MAAM,cAAc,YAAqC,CAAC"}
package/dist/status.js ADDED
@@ -0,0 +1,61 @@
1
+ import {} from './types.js';
2
+ const ERROR_INFO_1 = {
3
+ 0: 'No media',
4
+ 1: 'End of media',
5
+ 2: 'Cutter jam',
6
+ 3: 'Weak battery',
7
+ 4: 'Printer in use',
8
+ 6: 'High voltage adapter',
9
+ 7: 'Fan motor error',
10
+ };
11
+ const ERROR_INFO_2 = {
12
+ 0: 'Replace media',
13
+ 1: 'Expansion buffer full',
14
+ 2: 'Transmission error',
15
+ 3: 'Communication buffer full',
16
+ 4: 'Cover open',
17
+ 5: 'Cancel key',
18
+ 6: 'Media cannot be fed',
19
+ 7: 'System error',
20
+ };
21
+ export function parseStatus(bytes) {
22
+ if (bytes.length < 32)
23
+ throw new Error(`Status response too short: ${bytes.length.toString()} bytes`);
24
+ // noUncheckedIndexedAccess forces `?? 0` fallbacks that are unreachable after
25
+ // the length check above. DataView avoids the issue: getUint8 returns number.
26
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
27
+ const errors = [];
28
+ const errInfo1 = view.getUint8(8);
29
+ const errInfo2 = view.getUint8(9);
30
+ for (const [bitStr, msg] of Object.entries(ERROR_INFO_1)) {
31
+ if (errInfo1 & (1 << Number(bitStr)))
32
+ errors.push(msg);
33
+ }
34
+ for (const [bitStr, msg] of Object.entries(ERROR_INFO_2)) {
35
+ if (errInfo2 & (1 << Number(bitStr)))
36
+ errors.push(msg);
37
+ }
38
+ const mediaWidthMm = view.getUint8(10);
39
+ const mediaTypeByte = view.getUint8(11);
40
+ const mediaLengthMm = view.getUint8(17);
41
+ let mediaType = null;
42
+ if (mediaTypeByte === 0x0a)
43
+ mediaType = 'continuous';
44
+ else if (mediaTypeByte === 0x0b)
45
+ mediaType = 'die-cut';
46
+ // Status type is at byte 18, not 14. Byte 14 is an undocumented media-type
47
+ // code that carries non-zero values and is not the status type field.
48
+ const statusType = view.getUint8(18);
49
+ const ready = errors.length === 0 && statusType !== 0x02;
50
+ return {
51
+ ready,
52
+ mediaWidthMm,
53
+ mediaLengthMm,
54
+ mediaType,
55
+ errors,
56
+ editorLiteMode: false,
57
+ rawBytes: bytes,
58
+ };
59
+ }
60
+ export const STATUS_REQUEST = new Uint8Array([0x1b, 0x69, 0x53]);
61
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,MAAM,YAAY,CAAC;AAEhE,MAAM,YAAY,GAA2B;IAC3C,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,cAAc;IACjB,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,cAAc;IACjB,CAAC,EAAE,gBAAgB;IACnB,CAAC,EAAE,sBAAsB;IACzB,CAAC,EAAE,iBAAiB;CACrB,CAAC;AAEF,MAAM,YAAY,GAA2B;IAC3C,CAAC,EAAE,eAAe;IAClB,CAAC,EAAE,uBAAuB;IAC1B,CAAC,EAAE,oBAAoB;IACvB,CAAC,EAAE,2BAA2B;IAC9B,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,qBAAqB;IACxB,CAAC,EAAE,cAAc;CAClB,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEjF,8EAA8E;IAC9E,8EAA8E;IAC9E,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAElC,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACzD,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACzD,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAExC,IAAI,SAAS,GAAqB,IAAI,CAAC;IACvC,IAAI,aAAa,KAAK,IAAI;QAAE,SAAS,GAAG,YAAY,CAAC;SAChD,IAAI,aAAa,KAAK,IAAI;QAAE,SAAS,GAAG,SAAS,CAAC;IAEvD,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,KAAK,IAAI,CAAC;IAEzD,OAAO;QACL,KAAK;QACL,YAAY;QACZ,aAAa;QACb,SAAS;QACT,MAAM;QACN,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,KAAK;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { type LabelBitmap } from '@mbtech-nl/bitmap';
2
+ export type MediaType = 'continuous' | 'die-cut';
3
+ export type HeadWidth = 720 | 1296;
4
+ export type ColorMode = 'single' | 'two-color';
5
+ export type NetworkSupport = 'none' | 'wifi' | 'wired' | 'wifi+wired';
6
+ export interface DeviceDescriptor {
7
+ name: string;
8
+ vid: number;
9
+ pid: number;
10
+ headPins: HeadWidth;
11
+ bytesPerRow: number;
12
+ twoColor: boolean;
13
+ network: NetworkSupport;
14
+ bluetooth: boolean;
15
+ autocut: boolean;
16
+ compression: boolean;
17
+ editorLite: boolean;
18
+ massStoragePid?: number;
19
+ }
20
+ export interface MediaDescriptor {
21
+ id: number;
22
+ name: string;
23
+ type: MediaType;
24
+ widthMm: number;
25
+ lengthMm: number;
26
+ printAreaDots: number;
27
+ leftMarginPins: number;
28
+ rightMarginPins: number;
29
+ dieCutMaskedAreaDots?: number;
30
+ /** True for DK-22251 and similar two-color tapes — printer rejects single-color jobs */
31
+ twoColorTape?: boolean;
32
+ }
33
+ export interface PageData {
34
+ bitmap: LabelBitmap;
35
+ redBitmap?: LabelBitmap;
36
+ media: MediaDescriptor;
37
+ options?: PageOptions;
38
+ }
39
+ export interface PageOptions {
40
+ autoCut?: boolean;
41
+ cutAtEnd?: boolean;
42
+ highResolution?: boolean;
43
+ marginDots?: number;
44
+ compress?: boolean;
45
+ }
46
+ export interface JobOptions {
47
+ copies?: number;
48
+ }
49
+ export interface TextPrintOptions extends PageOptions {
50
+ invert?: boolean;
51
+ scaleX?: number;
52
+ scaleY?: number;
53
+ }
54
+ export interface ImagePrintOptions extends PageOptions {
55
+ threshold?: number;
56
+ dither?: boolean;
57
+ invert?: boolean;
58
+ rotate?: 0 | 90 | 180 | 270;
59
+ }
60
+ export interface PrinterStatus {
61
+ ready: boolean;
62
+ mediaWidthMm: number;
63
+ mediaLengthMm: number;
64
+ mediaType: MediaType | null;
65
+ errors: string[];
66
+ editorLiteMode: boolean;
67
+ rawBytes: Uint8Array;
68
+ }
69
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC;AACnC,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAC/C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wFAAwF;IACxF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,UAAU,CAAC;CACtB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ import {} from '@mbtech-nl/bitmap';
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,mBAAmB,CAAC"}