@thermal-label/brother-ql-web 0.4.0 → 0.6.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/README.md CHANGED
@@ -75,6 +75,43 @@ Wraps an already-obtained `USBDevice`. The caller is responsible for opening and
75
75
  - Secure context (`https://` or `localhost`)
76
76
  - User gesture required to call `requestPrinter()`
77
77
 
78
+ ## Supported hardware
79
+
80
+ <!-- HARDWARE_TABLE:START -->
81
+
82
+ **24 devices** — 1 verified · 0 partial · 17 expected · 0 unsupported · 6 unverified
83
+
84
+ | Model | Key | USB PID | Transports | Status |
85
+ | ---------------------------------------------------------------------------- | ------------ | ------- | ---------------- | ------------- |
86
+ | [PT-E550W](https://thermal-label.github.io/hardware/brother-ql/pt-e550w) | `PT_E550W` | 0x2060 | USB, TCP | ⏳ unverified |
87
+ | [PT-P750W](https://thermal-label.github.io/hardware/brother-ql/pt-p750w) | `PT_P750W` | 0x2062 | USB, TCP | ⏳ unverified |
88
+ | [PT-P900](https://thermal-label.github.io/hardware/brother-ql/pt-p900) | `PT_P900` | 0x2083 | USB | ⏳ unverified |
89
+ | [PT-P900W](https://thermal-label.github.io/hardware/brother-ql/pt-p900w) | `PT_P900W` | 0x2085 | USB, TCP | ⏳ unverified |
90
+ | [PT-P910BT](https://thermal-label.github.io/hardware/brother-ql/pt-p910bt) | `PT_P910BT` | 0x20c7 | USB, BT SPP | ⏳ unverified |
91
+ | [PT-P950NW](https://thermal-label.github.io/hardware/brother-ql/pt-p950nw) | `PT_P950NW` | 0x2086 | USB, TCP | ⏳ unverified |
92
+ | [QL-500](https://thermal-label.github.io/hardware/brother-ql/ql-500) | `QL_500` | 0x2013 | USB | 🔄 expected |
93
+ | [QL-550](https://thermal-label.github.io/hardware/brother-ql/ql-550) | `QL_550` | 0x2016 | USB | 🔄 expected |
94
+ | [QL-560](https://thermal-label.github.io/hardware/brother-ql/ql-560) | `QL_560` | 0x2018 | USB | 🔄 expected |
95
+ | [QL-570](https://thermal-label.github.io/hardware/brother-ql/ql-570) | `QL_570` | 0x2019 | USB | 🔄 expected |
96
+ | [QL-580N](https://thermal-label.github.io/hardware/brother-ql/ql-580n) | `QL_580N` | 0x201b | USB, TCP | 🔄 expected |
97
+ | [QL-600](https://thermal-label.github.io/hardware/brother-ql/ql-600) | `QL_600` | 0x2100 | USB | 🔄 expected |
98
+ | [QL-650TD](https://thermal-label.github.io/hardware/brother-ql/ql-650td) | `QL_650TD` | 0x201c | USB | 🔄 expected |
99
+ | [QL-700](https://thermal-label.github.io/hardware/brother-ql/ql-700) | `QL_700` | 0x2042 | USB | 🔄 expected |
100
+ | [QL-710W](https://thermal-label.github.io/hardware/brother-ql/ql-710w) | `QL_710W` | 0x2044 | USB, TCP | 🔄 expected |
101
+ | [QL-720NW](https://thermal-label.github.io/hardware/brother-ql/ql-720nw) | `QL_720NW` | 0x2045 | USB, TCP | 🔄 expected |
102
+ | [QL-800](https://thermal-label.github.io/hardware/brother-ql/ql-800) | `QL_800` | 0x209b | USB | 🔄 expected |
103
+ | [QL-810W](https://thermal-label.github.io/hardware/brother-ql/ql-810w) | `QL_810W` | 0x209c | USB, TCP | 🔄 expected |
104
+ | [QL-820NWBc](https://thermal-label.github.io/hardware/brother-ql/ql-820nwbc) | `QL_820NWBc` | 0x209d | USB, TCP, BT SPP | ✅ verified |
105
+ | [QL-1050](https://thermal-label.github.io/hardware/brother-ql/ql-1050) | `QL_1050` | 0x2027 | USB | 🔄 expected |
106
+ | [QL-1060N](https://thermal-label.github.io/hardware/brother-ql/ql-1060n) | `QL_1060N` | 0x2028 | USB, TCP | 🔄 expected |
107
+ | [QL-1100](https://thermal-label.github.io/hardware/brother-ql/ql-1100) | `QL_1100` | 0x20a7 | USB | 🔄 expected |
108
+ | [QL-1110NWB](https://thermal-label.github.io/hardware/brother-ql/ql-1110nwb) | `QL_1110NWB` | 0x20a8 | USB, TCP | 🔄 expected |
109
+ | [QL-1115NWB](https://thermal-label.github.io/hardware/brother-ql/ql-1115nwb) | `QL_1115NWB` | 0x20ab | USB, TCP | 🔄 expected |
110
+
111
+ Click any model to open its detail page on the docs site, where engines, supported media, and verification reports live. The same data backs the [interactive cross-driver table](https://thermal-label.github.io/hardware/).
112
+
113
+ <!-- HARDWARE_TABLE:END -->
114
+
78
115
  ## License
79
116
 
80
117
  MIT © Mannes Brak
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=printer-read-loop.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printer-read-loop.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/printer-read-loop.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,173 @@
1
+ import { afterEach, describe, expect, it, vi } from 'vitest';
2
+ import { findDevice } from '@thermal-label/brother-ql-core';
3
+ import { WebBrotherQLPrinter } from '../printer.js';
4
+ class ScriptedTransport {
5
+ connected = true;
6
+ writes = [];
7
+ /** FIFO of scripted read outcomes; the last entry repeats once drained. */
8
+ script;
9
+ constructor(script) {
10
+ this.script = script;
11
+ }
12
+ write(data) {
13
+ this.writes.push(Uint8Array.from(data));
14
+ return Promise.resolve();
15
+ }
16
+ read() {
17
+ const outcome = this.script.length > 1 ? this.script.shift() : this.script[0];
18
+ if (outcome.kind === 'throw')
19
+ return Promise.reject(outcome.error);
20
+ if (outcome.kind === 'frame')
21
+ return Promise.resolve(outcome.bytes);
22
+ // 'hang' — never resolves; the read loop's while-guard exits on close.
23
+ return new Promise(() => {
24
+ /* intentionally never settles */
25
+ });
26
+ }
27
+ close() {
28
+ this.connected = false;
29
+ return Promise.resolve();
30
+ }
31
+ }
32
+ function transportClosedError() {
33
+ const err = new Error('Transport closed');
34
+ err.name = 'TransportClosedError';
35
+ return err;
36
+ }
37
+ /** A well-formed 32-byte QL status frame with continuous 62 mm media loaded. */
38
+ function statusFrame() {
39
+ const bytes = new Uint8Array(32);
40
+ bytes[10] = 62; // media width mm
41
+ bytes[11] = 0x0a; // continuous media type
42
+ return bytes;
43
+ }
44
+ const QL_DEVICE = findDevice(0x04f9, 0x209d);
45
+ describe('WebBrotherQLPrinter read loop — defensive branches', () => {
46
+ afterEach(() => {
47
+ vi.restoreAllMocks();
48
+ });
49
+ it('exits the read loop silently when read() rejects with TransportClosedError', async () => {
50
+ const transport = new ScriptedTransport([{ kind: 'throw', error: transportClosedError() }]);
51
+ const warn = vi.spyOn(console, 'warn').mockImplementation(() => {
52
+ /* suppress */
53
+ });
54
+ const printer = new WebBrotherQLPrinter(QL_DEVICE, transport);
55
+ // Give the loop a few microtask turns to hit the catch and return.
56
+ await new Promise(r => setTimeout(r, 20));
57
+ // A clean close → no backoff warning emitted.
58
+ expect(warn).not.toHaveBeenCalled();
59
+ await printer.close();
60
+ });
61
+ it('backs off and retries after a transient (non-close) read error', async () => {
62
+ // First read throws a generic I/O error, then the pipe recovers and
63
+ // delivers a real status frame; the loop must survive the throw and
64
+ // keep reading.
65
+ const transport = new ScriptedTransport([
66
+ { kind: 'throw', error: new Error('USB pipe stalled') },
67
+ { kind: 'frame', bytes: statusFrame() },
68
+ { kind: 'hang' },
69
+ ]);
70
+ const warn = vi.spyOn(console, 'warn').mockImplementation(() => {
71
+ /* suppress */
72
+ });
73
+ const printer = new WebBrotherQLPrinter(QL_DEVICE, transport);
74
+ // READ_LOOP_BACKOFF_MS is 100 ms — wait past it so the retry lands.
75
+ await new Promise(r => setTimeout(r, 250));
76
+ expect(warn).toHaveBeenCalledWith('[brother-ql-web] status read error, backing off:', expect.any(Error));
77
+ // The recovered frame is parsed without throwing — read() was
78
+ // re-entered after the backoff, proving the loop did not exit.
79
+ expect(transport.writes).toHaveLength(0);
80
+ await printer.close();
81
+ });
82
+ it('skips frames shorter than the 32-byte status size without parsing', async () => {
83
+ const transport = new ScriptedTransport([
84
+ { kind: 'frame', bytes: new Uint8Array(8) },
85
+ { kind: 'hang' },
86
+ ]);
87
+ const printer = new WebBrotherQLPrinter(QL_DEVICE, transport);
88
+ // No throw, no warning — the length guard drops the short frame and
89
+ // the loop continues to the next (hanging) read.
90
+ const warn = vi.spyOn(console, 'warn').mockImplementation(() => {
91
+ /* suppress */
92
+ });
93
+ await new Promise(r => setTimeout(r, 50));
94
+ expect(warn).not.toHaveBeenCalled();
95
+ await printer.close();
96
+ });
97
+ });
98
+ describe('WebBrotherQLPrinter read loop — parseStatus failure', () => {
99
+ afterEach(() => {
100
+ vi.restoreAllMocks();
101
+ vi.resetModules();
102
+ vi.doUnmock('@thermal-label/brother-ql-core');
103
+ });
104
+ it('logs and continues when parseStatus throws on a full-length frame', async () => {
105
+ // parseStatus only rejects sub-32-byte frames in the real impl, and
106
+ // the read loop's length guard already filters those — so a parse
107
+ // failure on a full-length frame can only be induced by mocking the
108
+ // core export. This drives the parse-failure catch with a real error.
109
+ vi.resetModules();
110
+ const actual = await vi.importActual('@thermal-label/brother-ql-core');
111
+ const parseStatus = vi.fn().mockImplementation(() => {
112
+ throw new Error('corrupt status frame');
113
+ });
114
+ vi.doMock('@thermal-label/brother-ql-core', () => ({
115
+ ...actual,
116
+ parseStatus,
117
+ }));
118
+ const { WebBrotherQLPrinter: MockedPrinter } = await import('../printer.js');
119
+ const transport = new ScriptedTransport([
120
+ { kind: 'frame', bytes: statusFrame() },
121
+ { kind: 'hang' },
122
+ ]);
123
+ const warn = vi.spyOn(console, 'warn').mockImplementation(() => {
124
+ /* suppress */
125
+ });
126
+ const printer = new MockedPrinter(QL_DEVICE, transport);
127
+ await new Promise(r => setTimeout(r, 50));
128
+ expect(parseStatus).toHaveBeenCalled();
129
+ expect(warn).toHaveBeenCalledWith('[brother-ql-web] failed to parse status frame:', expect.any(Error));
130
+ await printer.close();
131
+ });
132
+ });
133
+ describe('WebBrotherQLPrinter getStatus() — timeout and steady-state paths', () => {
134
+ it('rejects and re-arms the preamble when no status frame arrives in time', async () => {
135
+ vi.useFakeTimers();
136
+ try {
137
+ // The transport never produces a frame, so nextStatusFrame's
138
+ // timeout fires and getStatus() rethrows after flipping
139
+ // parserReady back to false.
140
+ const transport = new ScriptedTransport([{ kind: 'hang' }]);
141
+ const printer = new WebBrotherQLPrinter(QL_DEVICE, transport);
142
+ const pending = printer.getStatus();
143
+ const assertion = expect(pending).rejects.toThrow(/did not respond to status request/);
144
+ // STATUS_RESPONSE_TIMEOUT_MS is 1500 ms.
145
+ await vi.advanceTimersByTimeAsync(1600);
146
+ await assertion;
147
+ // First (failed) attempt wrote the preamble (invalidate + init)
148
+ // ahead of ESC iS — three writes total.
149
+ expect(transport.writes).toHaveLength(3);
150
+ await printer.close();
151
+ }
152
+ finally {
153
+ vi.useRealTimers();
154
+ }
155
+ });
156
+ it('skips the preamble on the second poll once the parser is confirmed ready', async () => {
157
+ // A transport that answers every read with a fresh status frame —
158
+ // the read loop hands each one to whichever getStatus() is awaiting.
159
+ const transport = new ScriptedTransport([{ kind: 'frame', bytes: statusFrame() }]);
160
+ const printer = new WebBrotherQLPrinter(QL_DEVICE, transport);
161
+ const first = await printer.getStatus();
162
+ expect(first.detectedMedia?.id).toBe(259);
163
+ const afterFirst = transport.writes.length;
164
+ const second = await printer.getStatus();
165
+ expect(second.detectedMedia?.id).toBe(259);
166
+ // First call sent invalidate + init + ESC iS (3 writes). With
167
+ // parserReady now true, the second call sends only the bare ESC iS.
168
+ expect(afterFirst).toBe(3);
169
+ expect(transport.writes.length - afterFirst).toBe(1);
170
+ await printer.close();
171
+ });
172
+ });
173
+ //# sourceMappingURL=printer-read-loop.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printer-read-loop.test.js","sourceRoot":"","sources":["../../src/__tests__/printer-read-loop.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,52 @@
1
+ /* eslint-disable @typescript-eslint/no-deprecated -- intentionally exercises the deprecated per-transport factories during plan-10 transition */
1
2
  import { describe, expect, it, vi } from 'vitest';
2
3
  import { MediaNotSpecifiedError } from '@thermal-label/contracts';
3
- import { DEVICES, MEDIA } from '@thermal-label/brother-ql-core';
4
- import { fromUSBDevice, requestPrinter } from '../printer.js';
4
+ import { DEVICES, MEDIA, findDevice } from '@thermal-label/brother-ql-core';
5
+ import { fromUSBDevice, fromUSBDeviceAll, requestPrinter, requestPrintersUsbLegacy, WebBrotherQLPrinter, } from '../printer.js';
5
6
  import { createMockUSBDevice } from './webusb-mock.js';
7
+ /**
8
+ * Fake `Transport` recording write order. Each ESC iS write (1B 69 53)
9
+ * queues a 32-byte status frame the persistent read loop drains.
10
+ * `write()` does an async hop so an unserialised concurrent caller
11
+ * could interleave.
12
+ */
13
+ class RecordingTransport {
14
+ writes = [];
15
+ connected = true;
16
+ frames = [];
17
+ waiter;
18
+ async write(data) {
19
+ const isStatusReq = data[0] === 0x1b && data[1] === 0x69 && data[2] === 0x53;
20
+ this.writes.push({ firstByte: data[0], isStatusReq });
21
+ await Promise.resolve();
22
+ await Promise.resolve();
23
+ if (isStatusReq)
24
+ this.enqueue(new Uint8Array(32));
25
+ }
26
+ enqueue(frame) {
27
+ if (this.waiter) {
28
+ const w = this.waiter;
29
+ this.waiter = undefined;
30
+ w(frame);
31
+ }
32
+ else {
33
+ this.frames.push(frame);
34
+ }
35
+ }
36
+ read() {
37
+ const next = this.frames.shift();
38
+ if (next)
39
+ return Promise.resolve(next);
40
+ return new Promise(resolve => {
41
+ this.waiter = resolve;
42
+ });
43
+ }
44
+ close() {
45
+ this.connected = false;
46
+ this.waiter?.(new Uint8Array(0));
47
+ return Promise.resolve();
48
+ }
49
+ }
6
50
  function solidRgba(width, height) {
7
51
  return { width, height, data: new Uint8Array(width * height * 4).fill(0) };
8
52
  }
@@ -90,12 +134,50 @@ describe('WebBrotherQLPrinter', () => {
90
134
  const totalBypass = bypassDevice.__transfers.reduce((acc, t) => acc + t.data.length, 0);
91
135
  expect(totalAuto).toBeGreaterThan(totalBypass);
92
136
  });
93
- // See node printer.test.ts for the same helper — searches for a 3-byte
94
- // raster-row header (opcode, colour, LEN=90).
137
+ /**
138
+ * TIFF-style PackBits row decoder inverse of `pack-bits.ts`'s
139
+ * `packBits`. The web driver prints with `compress: true`, so encoded
140
+ * raster rows carry a PackBits-compressed payload; decoding restores
141
+ * the flat 90-byte head-aligned row the assertions inspect.
142
+ */
143
+ function unpackBits(input) {
144
+ const out = [];
145
+ let i = 0;
146
+ while (i < input.length) {
147
+ const header = (input[i] << 24) >> 24; // interpret as signed int8
148
+ i += 1;
149
+ if (header >= 0) {
150
+ // Literal run: the next `header + 1` bytes follow verbatim.
151
+ for (let n = 0; n <= header; n++)
152
+ out.push(input[i + n]);
153
+ i += header + 1;
154
+ }
155
+ else if (header !== -128) {
156
+ // Repeat run: the next byte repeated `1 - header` times.
157
+ const value = input[i];
158
+ i += 1;
159
+ for (let n = 0; n < 1 - header; n++)
160
+ out.push(value);
161
+ }
162
+ }
163
+ return new Uint8Array(out);
164
+ }
165
+ // Find the first raster row of a given (opcode, colour) in the encoded
166
+ // job and return its decoded payload. The web driver enables PackBits
167
+ // compression (WebBrotherQLPrinter.print sets `compress: true`), so the
168
+ // row's LEN byte is the *compressed* length — read it, slice that many
169
+ // bytes, then PackBits-decode back to the flat 90-byte (720-pin head)
170
+ // raster row. The node printer.test.ts helper scans for an
171
+ // uncompressed LEN=90 row because the node driver does not compress.
95
172
  function firstRasterRow(bytes, opcode, colour) {
96
- for (let i = 0; i < bytes.length - 3 - 90; i++) {
97
- if (bytes[i] === opcode && bytes[i + 1] === colour && bytes[i + 2] === 90) {
98
- return bytes.slice(i + 3, i + 3 + 90);
173
+ for (let i = 0; i < bytes.length - 3; i++) {
174
+ if (bytes[i] === opcode && bytes[i + 1] === colour) {
175
+ const len = bytes[i + 2];
176
+ if (i + 3 + len > bytes.length)
177
+ continue;
178
+ const row = unpackBits(bytes.slice(i + 3, i + 3 + len));
179
+ if (row.length === 90)
180
+ return row;
99
181
  }
100
182
  }
101
183
  throw new Error(`no raster row with opcode 0x${opcode.toString(16)} colour 0x${colour.toString(16)}`);
@@ -112,6 +194,24 @@ describe('WebBrotherQLPrinter', () => {
112
194
  expect(row[3]).toBe(0x10);
113
195
  expect(row[1]).toBe(0x00);
114
196
  });
197
+ it('serialises getStatus() behind an in-flight print() via WriteSerializer (plan 15 A4)', async () => {
198
+ const transport = new RecordingTransport();
199
+ const device = findDevice(0x04f9, 0x209d);
200
+ const printer = new WebBrotherQLPrinter(device, transport);
201
+ // Kick a print and fire a status poll before it resolves.
202
+ const printDone = printer.print(solidRgba(696, 120), MEDIA[251]);
203
+ const statusDone = printer.getStatus();
204
+ await Promise.all([printDone, statusDone]);
205
+ // getStatus() issues the only ESC iS write. With the shared
206
+ // WriteSerializer it must land strictly after every print chunk
207
+ // write — no status request spliced into the raster stream.
208
+ const statusReqIdx = transport.writes.findIndex(w => w.isStatusReq);
209
+ expect(statusReqIdx).toBeGreaterThan(0);
210
+ expect(statusReqIdx).toBe(transport.writes.length - 1);
211
+ // Every preceding write is a print chunk (not a status request).
212
+ expect(transport.writes.slice(0, statusReqIdx).some(w => w.isStatusReq)).toBe(false);
213
+ await printer.close();
214
+ });
115
215
  it('print() splits the job into ≤1 KB OUT-pipe chunks (firmware flow-control)', async () => {
116
216
  const device = createMockUSBDevice({ productId: 0x209d });
117
217
  const printer = await fromUSBDevice(device);
@@ -167,9 +267,46 @@ describe('WebBrotherQLPrinter', () => {
167
267
  const printer = await fromUSBDevice(device);
168
268
  const status = await printer.getStatus();
169
269
  expect(status.rawBytes.length).toBe(32);
170
- expect(status.editorLiteMode).toBe(false);
171
270
  expect(status.detectedMedia?.id).toBe(259);
172
271
  });
272
+ it('onStatus delivers status frames via the contracts polling shim', async () => {
273
+ const bytes = new Uint8Array(32);
274
+ bytes[10] = 62;
275
+ bytes[11] = 0x0a;
276
+ const device = createMockUSBDevice({ productId: 0x209d, statusBytes: bytes });
277
+ const printer = await fromUSBDevice(device);
278
+ const received = [];
279
+ const unsubscribe = printer.onStatus(s => {
280
+ if (s.detectedMedia)
281
+ received.push(s.detectedMedia.id);
282
+ });
283
+ // The shim kicks an immediate getStatus(); give the read loop a tick
284
+ // to deliver the ESC iS response frame.
285
+ await new Promise(r => setTimeout(r, 30));
286
+ unsubscribe();
287
+ await printer.close();
288
+ expect(received).toContain(259);
289
+ });
290
+ it('onStatus stops delivering after unsubscribe', async () => {
291
+ const bytes = new Uint8Array(32);
292
+ bytes[10] = 62;
293
+ bytes[11] = 0x0a;
294
+ const device = createMockUSBDevice({ productId: 0x209d, statusBytes: bytes });
295
+ const printer = await fromUSBDevice(device);
296
+ let count = 0;
297
+ const unsubscribe = printer.onStatus(() => {
298
+ count += 1;
299
+ });
300
+ await new Promise(r => setTimeout(r, 30));
301
+ const afterFirst = count;
302
+ unsubscribe();
303
+ await new Promise(r => setTimeout(r, 30));
304
+ // The 4 s poll interval never elapses inside the test window, so any
305
+ // further call after unsubscribe would be a leaked timer.
306
+ expect(afterFirst).toBeGreaterThanOrEqual(1);
307
+ expect(count).toBe(afterFirst);
308
+ await printer.close();
309
+ });
173
310
  it('throws for unknown USB devices', async () => {
174
311
  const device = createMockUSBDevice({ vendorId: 0x1234, productId: 0x5678 });
175
312
  await expect(fromUSBDevice(device)).rejects.toThrow('Unsupported USB device');
@@ -191,5 +328,66 @@ describe('requestPrinter', () => {
191
328
  expect(pids).toContain(parseInt(d.transports.usb.pid, 16));
192
329
  }
193
330
  });
331
+ it('forwards a caller-supplied filter list to navigator.usb.requestDevice', async () => {
332
+ const device = createMockUSBDevice({ vendorId: 0x04f9, productId: 0x209d });
333
+ const requestDevice = vi.fn(() => Promise.resolve(device));
334
+ Object.defineProperty(globalThis, 'navigator', {
335
+ value: { usb: { requestDevice } },
336
+ configurable: true,
337
+ });
338
+ const filters = [{ vendorId: 0x04f9 }];
339
+ const printer = await requestPrinter({ filters });
340
+ expect(printer.family).toBe('brother-ql');
341
+ const call = requestDevice.mock.calls[0][0];
342
+ expect(call.filters).toBe(filters);
343
+ });
344
+ });
345
+ describe('requestPrintersUsbLegacy (deprecated USB-only factory)', () => {
346
+ it('returns a 1-key adapter map keyed by the device primary engine role', async () => {
347
+ const device = createMockUSBDevice({ productId: 0x209d });
348
+ const requestDevice = vi.fn(() => Promise.resolve(device));
349
+ Object.defineProperty(globalThis, 'navigator', {
350
+ value: { usb: { requestDevice } },
351
+ configurable: true,
352
+ });
353
+ const printers = await requestPrintersUsbLegacy();
354
+ const roles = Object.keys(printers);
355
+ expect(roles).toHaveLength(1);
356
+ const expectedRole = findDevice(0x04f9, 0x209d).engines[0].role;
357
+ expect(roles[0]).toBe(expectedRole);
358
+ expect(printers[roles[0]].family).toBe('brother-ql');
359
+ // Default filters cover every registered VID/PID.
360
+ const call = requestDevice.mock.calls[0][0];
361
+ expect(call.filters.length).toBeGreaterThan(0);
362
+ await printers[roles[0]].close();
363
+ });
364
+ it('forwards a caller-supplied filter list', async () => {
365
+ const device = createMockUSBDevice({ productId: 0x209d });
366
+ const requestDevice = vi.fn(() => Promise.resolve(device));
367
+ Object.defineProperty(globalThis, 'navigator', {
368
+ value: { usb: { requestDevice } },
369
+ configurable: true,
370
+ });
371
+ const filters = [{ vendorId: 0x04f9 }];
372
+ await requestPrintersUsbLegacy({ filters });
373
+ const call = requestDevice.mock.calls[0][0];
374
+ expect(call.filters).toBe(filters);
375
+ });
376
+ });
377
+ describe('fromUSBDeviceAll (deprecated USBDevice wrapper)', () => {
378
+ it('wraps an already-selected USBDevice into a 1-key adapter map', async () => {
379
+ const device = createMockUSBDevice({ productId: 0x209d });
380
+ const printers = await fromUSBDeviceAll(device);
381
+ const roles = Object.keys(printers);
382
+ expect(roles).toHaveLength(1);
383
+ const expectedRole = findDevice(0x04f9, 0x209d).engines[0].role;
384
+ expect(roles[0]).toBe(expectedRole);
385
+ expect(printers[roles[0]].model).toBe('QL-820NWBc');
386
+ await printers[roles[0]].close();
387
+ });
388
+ it('throws for an unknown USB device VID/PID', async () => {
389
+ const device = createMockUSBDevice({ vendorId: 0x1234, productId: 0x5678 });
390
+ await expect(fromUSBDeviceAll(device)).rejects.toThrow('Unsupported USB device');
391
+ });
194
392
  });
195
393
  //# sourceMappingURL=printer.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"printer.test.js","sourceRoot":"","sources":["../../src/__tests__/printer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printer.test.js","sourceRoot":"","sources":["../../src/__tests__/printer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=request-printers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-printers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/request-printers.test.ts"],"names":[],"mappings":""}