@thermal-label/brother-ql-core 0.6.0 → 0.6.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 (53) hide show
  1. package/README.md +3 -3
  2. package/data/devices.json +250 -24
  3. package/data/media.json +12 -12
  4. package/dist/__tests__/devices.test.js +12 -20
  5. package/dist/__tests__/devices.test.js.map +1 -1
  6. package/dist/__tests__/network-status.test.d.ts +2 -0
  7. package/dist/__tests__/network-status.test.d.ts.map +1 -0
  8. package/dist/__tests__/network-status.test.js +132 -0
  9. package/dist/__tests__/network-status.test.js.map +1 -0
  10. package/dist/__tests__/protocol.test.js +103 -0
  11. package/dist/__tests__/protocol.test.js.map +1 -1
  12. package/dist/__tests__/status.test.js +13 -1
  13. package/dist/__tests__/status.test.js.map +1 -1
  14. package/dist/devices.d.ts +31 -5
  15. package/dist/devices.d.ts.map +1 -1
  16. package/dist/devices.generated.d.ts +31 -4
  17. package/dist/devices.generated.d.ts.map +1 -1
  18. package/dist/devices.generated.js +38 -4
  19. package/dist/devices.generated.js.map +1 -1
  20. package/dist/devices.js +0 -12
  21. package/dist/devices.js.map +1 -1
  22. package/dist/index.d.ts +3 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/media.generated.js +24 -24
  27. package/dist/media.generated.js.map +1 -1
  28. package/dist/network-status.d.ts +45 -0
  29. package/dist/network-status.d.ts.map +1 -0
  30. package/dist/network-status.js +140 -0
  31. package/dist/network-status.js.map +1 -0
  32. package/dist/protocol.d.ts.map +1 -1
  33. package/dist/protocol.js +34 -6
  34. package/dist/protocol.js.map +1 -1
  35. package/dist/status.d.ts +5 -3
  36. package/dist/status.d.ts.map +1 -1
  37. package/dist/status.js +21 -6
  38. package/dist/status.js.map +1 -1
  39. package/dist/types.d.ts +5 -1
  40. package/dist/types.d.ts.map +1 -1
  41. package/package.json +2 -2
  42. package/src/__tests__/devices.test.ts +13 -23
  43. package/src/__tests__/network-status.test.ts +165 -0
  44. package/src/__tests__/protocol.test.ts +129 -2
  45. package/src/__tests__/status.test.ts +15 -1
  46. package/src/devices.generated.ts +38 -4
  47. package/src/devices.ts +0 -16
  48. package/src/index.ts +3 -1
  49. package/src/media.generated.ts +24 -24
  50. package/src/network-status.ts +173 -0
  51. package/src/protocol.ts +41 -7
  52. package/src/status.ts +26 -6
  53. package/src/types.ts +5 -1
@@ -0,0 +1,140 @@
1
+ import { findMediaByDimensions, MEDIA } from './media.js';
2
+ const PRINTER_STATE = {
3
+ 1: 'other',
4
+ 2: 'unknown',
5
+ 3: 'idle',
6
+ 4: 'printing',
7
+ 5: 'warmup',
8
+ };
9
+ /** RFC 2790 hrPrinterDetectedErrorState bit names, index = bit. */
10
+ const ERROR_STATE_BITS = [
11
+ 'lowPaper',
12
+ 'noPaper',
13
+ 'lowToner',
14
+ 'noToner',
15
+ 'doorOpen',
16
+ 'jammed',
17
+ 'offline',
18
+ 'serviceRequested',
19
+ 'inputTrayMissing',
20
+ 'outputTrayMissing',
21
+ 'markerSupplyMissing',
22
+ 'outputNearFull',
23
+ 'outputFull',
24
+ 'inputTrayEmpty',
25
+ 'overduePreventMaint',
26
+ ];
27
+ /** Bit → contracts error code + message; unlisted set bits become `system_error`. */
28
+ const ERROR_STATE_CODES = {
29
+ 1: { code: 'no_media', message: 'No media' },
30
+ 4: { code: 'cover_open', message: 'Cover open' },
31
+ 5: { code: 'cutter_jam', message: 'Jammed' },
32
+ 6: { code: 'not_ready', message: 'Offline' },
33
+ 7: { code: 'system_error', message: 'Service requested' },
34
+ 13: { code: 'no_media', message: 'Input tray empty' },
35
+ };
36
+ /** Warning-only bits: reported as a details row, never an error. */
37
+ const ERROR_STATE_WARNINGS = {
38
+ 0: 'Media low',
39
+ };
40
+ function errorStateBit(errorState, bit) {
41
+ const octet = errorState[bit >> 3];
42
+ return octet !== undefined && (octet & (0x80 >> (bit & 7))) !== 0;
43
+ }
44
+ /**
45
+ * Parse the metric half of a Brother `prtInputMediaName`.
46
+ * `"29mm x 90mm / …"` → 29×90 die-cut, `"62mm / …"` → 62 continuous.
47
+ * The `Dia` form is the reference's naming for round labels and is
48
+ * unverified on the wire. Anything else → `undefined`.
49
+ */
50
+ export function parseMediaName(name) {
51
+ const metric = name.split('/')[0] ?? '';
52
+ const m = /^\s*(\d+(?:\.\d+)?)\s*mm(?:\s*(?:[x×]\s*(\d+(?:\.\d+)?)\s*mm|(dia)))?\s*$/i.exec(metric);
53
+ if (!m?.[1])
54
+ return undefined;
55
+ const widthMm = Number(m[1]);
56
+ if (m[3])
57
+ return { widthMm, heightMm: widthMm };
58
+ return m[2] === undefined ? { widthMm } : { widthMm, heightMm: Number(m[2]) };
59
+ }
60
+ function dimToMm(value, unit) {
61
+ if (unit === 3)
62
+ return Math.round(value * 0.00254);
63
+ if (unit === 4)
64
+ return Math.round(value / 1000);
65
+ return undefined;
66
+ }
67
+ /**
68
+ * The name string wins; the Dim OIDs are the fallback. Bench
69
+ * (QL-820NWB, DK-11201): `prtInputDimUnit` = 4 (micrometres) with
70
+ * `2900 × 9000`, which is 1/100 mm, so trusting the unit yields a
71
+ * 3 × 9 mm label. The name is the only value measured to be right.
72
+ */
73
+ function resolveDimensions(input) {
74
+ const parsed = parseMediaName(input.mediaName);
75
+ if (parsed)
76
+ return { widthMm: parsed.widthMm, heightMm: parsed.heightMm ?? 0 };
77
+ const { xFeedDir, feedDir, dimUnit } = input;
78
+ if (xFeedDir === undefined || xFeedDir < 0 || dimUnit === undefined)
79
+ return undefined;
80
+ const widthMm = dimToMm(xFeedDir, dimUnit);
81
+ if (widthMm === undefined)
82
+ return undefined;
83
+ const heightMm = feedDir !== undefined && feedDir >= 0 ? dimToMm(feedDir, dimUnit) : 0;
84
+ return { widthMm, heightMm: heightMm ?? 0 };
85
+ }
86
+ /**
87
+ * Whether a roll of this width and type also exists as a two-colour
88
+ * variant (62 mm continuous: DK-22205 vs DK-22251). Those are
89
+ * indistinguishable over the network, so callers warn.
90
+ */
91
+ export function hasTwoColourSibling(media) {
92
+ return Object.values(MEDIA).some(m => m.palette !== undefined && m.type === media.type && m.widthMm === media.widthMm);
93
+ }
94
+ /**
95
+ * Map Printer-MIB values onto the driver's status. `ready` requires
96
+ * an idle or printing state and no error bits. Two-colour rolls are
97
+ * invisible on every network surface (DK-22251 reads as 62 mm
98
+ * continuous), so the single-colour sibling is resolved and a `warn`
99
+ * row says so.
100
+ */
101
+ export function statusFromPrinterMib(input, engine) {
102
+ const errors = [];
103
+ const details = [
104
+ { label: 'Printer state', value: PRINTER_STATE[input.printerStatus] ?? 'unknown' },
105
+ ];
106
+ for (const [bit, name] of ERROR_STATE_BITS.entries()) {
107
+ if (!errorStateBit(input.errorState, bit))
108
+ continue;
109
+ const warning = ERROR_STATE_WARNINGS[bit];
110
+ if (warning !== undefined) {
111
+ details.push({ label: 'Media', value: warning, severity: 'warn' });
112
+ continue;
113
+ }
114
+ errors.push(ERROR_STATE_CODES[bit] ?? { code: 'system_error', message: name });
115
+ }
116
+ const dims = resolveDimensions(input);
117
+ const detected = dims
118
+ ? findMediaByDimensions(dims.widthMm, dims.heightMm, false, engine)
119
+ : undefined;
120
+ if (detected === undefined) {
121
+ details.push({
122
+ label: 'Media',
123
+ value: `not recognised: ${JSON.stringify(input.mediaName)}`,
124
+ severity: 'warn',
125
+ });
126
+ }
127
+ else if (hasTwoColourSibling(detected)) {
128
+ details.push({ label: 'Two-colour', value: 'not detectable over network', severity: 'warn' });
129
+ }
130
+ const state = input.printerStatus;
131
+ return {
132
+ ready: (state === 3 || state === 4) && errors.length === 0,
133
+ mediaLoaded: detected !== undefined,
134
+ ...(detected === undefined ? {} : { detectedMedia: detected }),
135
+ errors,
136
+ details,
137
+ rawBytes: new Uint8Array(0),
138
+ };
139
+ }
140
+ //# sourceMappingURL=network-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-status.js","sourceRoot":"","sources":["../src/network-status.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAqB1D,MAAM,aAAa,GAA2B;IAC5C,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,QAAQ;CACZ,CAAC;AAEF,mEAAmE;AACnE,MAAM,gBAAgB,GAAG;IACvB,UAAU;IACV,SAAS;IACT,UAAU;IACV,SAAS;IACT,UAAU;IACV,QAAQ;IACR,SAAS;IACT,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,qBAAqB;IACrB,gBAAgB;IAChB,YAAY;IACZ,gBAAgB;IAChB,qBAAqB;CACb,CAAC;AAEX,qFAAqF;AACrF,MAAM,iBAAiB,GAAsD;IAC3E,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE;IAC5C,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE;IAChD,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC5C,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE;IAC5C,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE;IACzD,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE;CACtD,CAAC;AAEF,oEAAoE;AACpE,MAAM,oBAAoB,GAA2B;IACnD,CAAC,EAAE,WAAW;CACf,CAAC;AAEF,SAAS,aAAa,CAAC,UAAsB,EAAE,GAAW;IACxD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACnC,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,CAAC,GAAG,4EAA4E,CAAC,IAAI,CACzF,MAAM,CACP,CAAC;IACF,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAChD,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChF,CAAC;AAED,SAAS,OAAO,CAAC,KAAa,EAAE,IAAY;IAC1C,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;IACnD,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAChD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,KAAuB;IAEvB,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;IAC/E,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC7C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,CAAC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtF,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAqB;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CACrF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAuB,EACvB,MAA6D;IAE7D,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,OAAO,GAAmB;QAC9B,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,SAAS,EAAE;KACnF,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC;YAAE,SAAS;QACpD,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACnE,SAAS;QACX,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI;QACnB,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;QACnE,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,mBAAmB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAC3D,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,6BAA6B,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;IAClC,OAAO;QACL,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1D,WAAW,EAAE,QAAQ,KAAK,SAAS;QACnC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;QAC9D,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;KAC5B,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAAK,EACV,yBAAyB,EACzB,cAAc,EACd,QAAQ,EACR,UAAU,EAGX,MAAM,YAAY,CAAC;AAEpB,wBAAgB,eAAe,CAAC,SAAS,SAAM,GAAG,UAAU,CAE3D;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,cAAc,EACrB,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,EAChB,cAAc,SAAO,GACpB,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;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,kBAAkB,EAAE,oBAKhC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,oBAKhC,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;IACvE,YAAY,CAAC,EAAE,yBAAyB,CAAC;CAC1C,CAAC;AAiLF;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAE,UAAe,GAAG,UAAU,CAEjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,aAAa,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,UAAU,CAGZ"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAAK,EACV,yBAAyB,EACzB,cAAc,EACd,QAAQ,EACR,UAAU,EAGX,MAAM,YAAY,CAAC;AAEpB,wBAAgB,eAAe,CAAC,SAAS,SAAM,GAAG,UAAU,CAE3D;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,cAAc,EACrB,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,EAChB,cAAc,SAAO,GACpB,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;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,kBAAkB,EAAE,oBAKhC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,oBAKhC,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;IACvE,YAAY,CAAC,EAAE,yBAAyB,CAAC;CAC1C,CAAC;AAmNF;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAE,UAAe,GAAG,UAAU,CAEjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,aAAa,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,UAAU,CAGZ"}
package/dist/protocol.js CHANGED
@@ -158,6 +158,21 @@ function resolveEncoderGeometry(media, engine) {
158
158
  }
159
159
  return resolveTapeGeometry(media, engine);
160
160
  }
161
+ /**
162
+ * Page length for die-cut media: `dieCutMaskedAreaDots` is the
163
+ * reference's "print area length" (§2.3.2(b) column 4) at 300 dpi;
164
+ * `doubleRows` is set when the caller supplied 600 dpi rows (QL
165
+ * high-res, where the encoder does not duplicate lines).
166
+ */
167
+ function resolveDieCutRows(media, doubleRows) {
168
+ if (media.type !== 'die-cut')
169
+ return undefined;
170
+ const area = media.dieCutMaskedAreaDots;
171
+ if (typeof area !== 'number') {
172
+ throw new Error(`die-cut media ${media.id.toString()} (${media.name}) has no dieCutMaskedAreaDots; page length unknown`);
173
+ }
174
+ return { rows: doubleRows ? area * 2 : area, highRes: doubleRows };
175
+ }
161
176
  function encodeRasterJob(pages, options, ctx) {
162
177
  const { config, engine, deviceName } = ctx;
163
178
  const copies = options.copies ?? 1;
@@ -195,7 +210,18 @@ function encodeRasterJob(pages, options, ctx) {
195
210
  // Per §7.3: PT high-res doubles the feed margin and duplicates
196
211
  // each raster line. QL high-res leaves both untouched.
197
212
  const baseMargin = opts.marginDots ?? config.feedMarginDots;
198
- const marginDots = config.duplicateRasterLines && highRes ? baseMargin * 2 : baseMargin;
213
+ const feedMargin = config.duplicateRasterLines && highRes ? baseMargin * 2 : baseMargin;
214
+ // Die-cut pages are fixed-length (reference §2.3.3 / §2.3.4): the
215
+ // printer cuts at raster count + margin, not at the gap, so the page
216
+ // is always the print-area length with `ESC i d` 0 and the bitmap
217
+ // sits centred in it. Continuous pages are the bitmap's own height.
218
+ const dieCut = resolveDieCutRows(media, highRes && !config.duplicateRasterLines);
219
+ const rowCount = dieCut?.rows ?? bitmap.heightPx;
220
+ const marginDots = dieCut ? 0 : feedMargin;
221
+ if (dieCut && bitmap.heightPx > rowCount) {
222
+ throw new Error(`Bitmap is ${bitmap.heightPx.toString()} rows but ${media.name} prints exactly ${rowCount.toString()}${dieCut.highRes ? ' (high-res)' : ''}; resize the image`);
223
+ }
224
+ const padTop = dieCut ? Math.floor((rowCount - bitmap.heightPx) / 2) : 0;
199
225
  // Multi-ink media (e.g. DK-22251) requires two-color mode even for black-only jobs.
200
226
  // Auto-create an empty red plane when the tape demands it but caller didn't supply one.
201
227
  const multiInk = media.palette !== undefined;
@@ -206,7 +232,6 @@ function encodeRasterJob(pages, options, ctx) {
206
232
  throw new Error('Two-color bitmaps must have identical dimensions');
207
233
  }
208
234
  }
209
- const rowCount = bitmap.heightPx;
210
235
  chunks.push(buildRasterMode());
211
236
  chunks.push(buildStatusRequest());
212
237
  chunks.push(buildPrintInfo(media, rowCount, i));
@@ -230,18 +255,21 @@ function encodeRasterJob(pages, options, ctx) {
230
255
  // Per §7.3: PT high-res duplicates each raster line. QL doesn't.
231
256
  const duplicate = config.duplicateRasterLines && highRes;
232
257
  for (let r = 0; r < rowCount; r++) {
233
- const blackSrc = getRow(bitmap, r);
258
+ // Rows outside the bitmap (die-cut padding) stay blank.
259
+ const src = r - padTop;
260
+ const inBitmap = src >= 0 && src < bitmap.heightPx;
234
261
  const blackBytes = new Uint8Array(rowByteLen);
235
- placeBits(blackSrc, bitmap.widthPx, blackBytes, leftMarginPins);
262
+ if (inBitmap)
263
+ placeBits(getRow(bitmap, src), bitmap.widthPx, blackBytes, leftMarginPins);
236
264
  const blackPayload = compress ? packBits(blackBytes) : blackBytes;
237
265
  const blackChunk = buildRasterRow(blackPayload, 'black', twoColor);
238
266
  chunks.push(blackChunk);
239
267
  if (duplicate)
240
268
  chunks.push(blackChunk);
241
269
  if (twoColor && redBitmap !== undefined) {
242
- const redSrc = getRow(redBitmap, r);
243
270
  const redBytes = new Uint8Array(rowByteLen);
244
- placeBits(redSrc, redBitmap.widthPx, redBytes, leftMarginPins);
271
+ if (inBitmap)
272
+ placeBits(getRow(redBitmap, src), redBitmap.widthPx, redBytes, leftMarginPins);
245
273
  const redPayload = compress ? packBits(redBytes) : redBytes;
246
274
  const redChunk = buildRasterRow(redPayload, 'red', twoColor);
247
275
  chunks.push(redChunk);
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
package/dist/status.d.ts CHANGED
@@ -5,6 +5,8 @@ export declare const STATUS_REQUEST: Uint8Array;
5
5
  * Parse a Brother QL 32-byte status response.
6
6
  *
7
7
  * Fields:
8
+ * byte 3 — series code (`'4'` for QL-800/810W/820NWB)
9
+ * byte 4 — model code (`'8'` QL-800, `'9'` QL-810W, `'A'` QL-820NWB)
8
10
  * byte 8 — error info 1 (bit mask, see ERROR_INFO_1)
9
11
  * byte 9 — error info 2 (bit mask, see ERROR_INFO_2)
10
12
  * byte 10 — media width (mm)
@@ -20,9 +22,9 @@ export declare const STATUS_REQUEST: Uint8Array;
20
22
  * `findMediaByDimensions`.
21
23
  *
22
24
  * `details` carries the contracts-standard `StatusDetail[]` diagnostic
23
- * rows the harness renders verbatim: the print phase (always present)
24
- * and the head-cooling notification (only when the printer reports
25
- * one).
25
+ * rows the harness renders verbatim: the model code and the print
26
+ * phase (always present) and the head-cooling notification (only when
27
+ * the printer reports one).
26
28
  */
27
29
  export declare function parseStatus(bytes: Uint8Array, engine?: Pick<PrintEngine, 'headDots' | 'mediaCompatibility'>): BrotherQLStatus;
28
30
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,0BAA0B,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,eAAO,MAAM,cAAc,YAAqC,CAAC;AAyBjE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,oBAAoB,CAAC,GAC5D,eAAe,CAqCjB"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,0BAA0B,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,eAAO,MAAM,cAAc,YAAqC,CAAC;AAyBjE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,oBAAoB,CAAC,GAC5D,eAAe,CAsCjB"}
package/dist/status.js CHANGED
@@ -25,6 +25,8 @@ const ERROR_INFO_2 = [
25
25
  * Parse a Brother QL 32-byte status response.
26
26
  *
27
27
  * Fields:
28
+ * byte 3 — series code (`'4'` for QL-800/810W/820NWB)
29
+ * byte 4 — model code (`'8'` QL-800, `'9'` QL-810W, `'A'` QL-820NWB)
28
30
  * byte 8 — error info 1 (bit mask, see ERROR_INFO_1)
29
31
  * byte 9 — error info 2 (bit mask, see ERROR_INFO_2)
30
32
  * byte 10 — media width (mm)
@@ -40,15 +42,16 @@ const ERROR_INFO_2 = [
40
42
  * `findMediaByDimensions`.
41
43
  *
42
44
  * `details` carries the contracts-standard `StatusDetail[]` diagnostic
43
- * rows the harness renders verbatim: the print phase (always present)
44
- * and the head-cooling notification (only when the printer reports
45
- * one).
45
+ * rows the harness renders verbatim: the model code and the print
46
+ * phase (always present) and the head-cooling notification (only when
47
+ * the printer reports one).
46
48
  */
47
49
  export function parseStatus(bytes, engine) {
48
50
  if (bytes.length < 32) {
49
51
  throw new Error(`Status response too short: ${bytes.length.toString()} bytes`);
50
52
  }
51
53
  const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
54
+ const modelCode = formatModelCode(view.getUint8(3), view.getUint8(4));
52
55
  const errInfo1 = view.getUint8(8);
53
56
  const errInfo2 = view.getUint8(9);
54
57
  const mediaWidthMm = view.getUint8(10);
@@ -76,14 +79,26 @@ export function parseStatus(bytes, engine) {
76
79
  mediaLoaded,
77
80
  ...(detected === undefined ? {} : { detectedMedia: detected }),
78
81
  errors,
79
- details: buildStatusDetails(phaseType, notification),
82
+ details: buildStatusDetails(modelCode, phaseType, notification),
80
83
  rawBytes: bytes,
81
84
  };
82
85
  }
86
+ /**
87
+ * Bytes 3/4 as Brother prints them in the reference (ASCII, e.g. `4A`
88
+ * for the QL-820NWB); hex for anything unprintable. Informational
89
+ * only: the USB/serial model signal a serial-port identify can use.
90
+ */
91
+ function formatModelCode(series, model) {
92
+ const printable = (b) => b >= 0x21 && b <= 0x7e;
93
+ return printable(series) && printable(model)
94
+ ? String.fromCharCode(series, model)
95
+ : `0x${series.toString(16).padStart(2, '0')} 0x${model.toString(16).padStart(2, '0')}`;
96
+ }
83
97
  /**
84
98
  * Build the contracts-standard `StatusDetail[]` rows for a parsed
85
99
  * Brother QL status.
86
100
  *
101
+ * - The model-code row (bytes 3/4) is always emitted.
87
102
  * - The print-phase row (byte 19) is always emitted — it is the most
88
103
  * useful "is the device doing anything" signal for a stuck report.
89
104
  * - The head-cooling row (byte 22) is emitted only when the printer
@@ -91,8 +106,8 @@ export function parseStatus(bytes, engine) {
91
106
  * normal idle status stays uncluttered. "Cooling started" is a
92
107
  * `warn` (printing is paused), "cooling finished" is plain `info`.
93
108
  */
94
- function buildStatusDetails(phaseType, notification) {
95
- const details = [];
109
+ function buildStatusDetails(modelCode, phaseType, notification) {
110
+ const details = [{ label: 'Model code', value: modelCode }];
96
111
  details.push({
97
112
  label: 'Print phase',
98
113
  value: phaseType === 0x01 ? 'printing' : 'receiving',
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -98,7 +98,11 @@ export interface BrotherQLMedia extends MediaDescriptor {
98
98
  printableDots?: number;
99
99
  leftMarginPins?: number;
100
100
  rightMarginPins?: number;
101
- /** Die-cut masked area in dots (registration windows). */
101
+ /**
102
+ * Die-cut page length in dots at 300 dpi: the reference's "print area
103
+ * length" (§2.3.2(b) column 4). The encoder sends exactly this many
104
+ * rows for die-cut media; see DECISIONS D20.
105
+ */
102
106
  dieCutMaskedAreaDots?: number;
103
107
  }
104
108
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACd,MAAM,0BAA0B,CAAC;AAElC,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;AAE/C;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAEhE;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IACxE,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CACxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB;;;;OAIG;IACH,UAAU,EAAE,UAAU,CAAC;IACvB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,YAAY,CAAC;QAAC,IAAI,CAAC,EAAE,YAAY,CAAA;KAAE,CAAC;IAC1D,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC;AAE5C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,cAAc,CAAC;IACtB,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;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACd,MAAM,0BAA0B,CAAC;AAElC,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;AAE/C;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAEhE;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IACxE,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CACxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB;;;;OAIG;IACH,UAAU,EAAE,UAAU,CAAC;IACvB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,YAAY,CAAC;QAAC,IAAI,CAAC,EAAE,YAAY,CAAA;KAAE,CAAC;IAC1D,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC;AAE5C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,cAAc,CAAC;IACtB,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;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thermal-label/brother-ql-core",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "Protocol encoding, device registry, and media registry for Brother QL label printers",
5
5
  "keywords": [
6
6
  "brother",
@@ -56,7 +56,7 @@
56
56
  },
57
57
  "dependencies": {
58
58
  "@mbtech-nl/bitmap": "^1.3.0",
59
- "@thermal-label/contracts": "^0.6.0"
59
+ "@thermal-label/contracts": "^0.6.2"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@mbtech-nl/tsconfig": "^1.1.0",
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect } from 'vitest';
2
- import { DEVICES, findDevice, getUsbIds, isMassStorageMode } from '../devices.js';
2
+ import { DEVICES, findDevice } from '../devices.js';
3
3
 
4
4
  describe('findDevice', () => {
5
5
  it('returns correct entry for QL-820NWBc (PID shared with QL-820NWB)', () => {
@@ -33,27 +33,6 @@ describe('findDevice', () => {
33
33
  });
34
34
  });
35
35
 
36
- describe('isMassStorageMode', () => {
37
- it('returns true for 0x20a9 (QL-1100 mass storage)', () => {
38
- expect(isMassStorageMode(0x20a9)).toBe(true);
39
- });
40
-
41
- it('returns true for 0x20aa (QL-1110NWB mass storage)', () => {
42
- expect(isMassStorageMode(0x20aa)).toBe(true);
43
- });
44
-
45
- it('returns true for 0x20ac (QL-1115NWB mass storage)', () => {
46
- expect(isMassStorageMode(0x20ac)).toBe(true);
47
- });
48
-
49
- it('returns false for all printer-class PIDs', () => {
50
- for (const dev of Object.values(DEVICES)) {
51
- const ids = getUsbIds(dev);
52
- if (ids) expect(isMassStorageMode(ids.pid)).toBe(false);
53
- }
54
- });
55
- });
56
-
57
36
  describe('Device registry invariants', () => {
58
37
  it('every two-color device has a 720-dot engine', () => {
59
38
  for (const dev of Object.values(DEVICES)) {
@@ -77,6 +56,18 @@ describe('Device registry invariants', () => {
77
56
  }
78
57
  });
79
58
 
59
+ it('modelNames, where set, includes the marketing name and only distinct wire names', () => {
60
+ for (const dev of Object.values(DEVICES)) {
61
+ if (dev.modelNames === undefined) continue;
62
+ expect(dev.modelNames).toContain(dev.name);
63
+ expect(new Set(dev.modelNames).size).toBe(dev.modelNames.length);
64
+ }
65
+ });
66
+
67
+ it('QL-820NWBc reports itself as QL-820NWB on the wire', () => {
68
+ expect(DEVICES.QL_820NWBc.modelNames).toEqual(['QL-820NWB', 'QL-820NWBc']);
69
+ });
70
+
80
71
  it('every device declares a USB transport with hex-string vid+pid', () => {
81
72
  for (const dev of Object.values(DEVICES)) {
82
73
  expect(dev.transports.usb).toBeDefined();
@@ -164,7 +155,6 @@ describe('PT-* device entries', () => {
164
155
  const dev = DEVICES.PT_P750W;
165
156
  expect(dev.transports.usb?.pid).toBe('0x2062');
166
157
  expect(dev.capabilities?.massStoragePid).toBe('0x2065');
167
- expect(isMassStorageMode(0x2065)).toBe(true);
168
158
  });
169
159
 
170
160
  it('PT-P910BT declares bluetooth-spp transport', () => {