@sythos/js_barcode_universal 1.4.1 → 1.5.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.
package/NOTICE.md CHANGED
@@ -106,6 +106,8 @@ date of transcription.
106
106
  | Aztec Rune and Compact PDF417 | ISO/IEC public technical descriptions and ZXing-C++ 3.1.1 were consulted on 2026-08-13. ZXing-C++ was used exclusively as an independent black-box validation tool; no source code or table is copied or shipped. Aztec Rune values were compared exhaustively; Compact PDF417 geometry and payload vectors were compared independently. |
107
107
  | EAN-2 and EAN-5 supplements | ISO/IEC 15420, GS1 public specifications and ZXing-C++ 3.1.1 were consulted on 2026-08-13. The add-on parity, guard and checksum routines are original Sythos code; ZXing-C++ was used only for independent add-on validation. |
108
108
  | GS1 DataBar Omnidirectional and Truncated | ISO/IEC 24724 and public GS1 material were consulted on 2026-08-13. The physical encoder/decoder uses original Sythos arithmetic and was compared bit-for-bit with Zint 2.16.0 and read bidirectionally with ZXing-C++ 3.1.1 as black boxes. No Zint or ZXing source code or table is copied or shipped. Limited, stacked and expanded physical variants remain outside this release. |
109
+ | Code 11 and MSI Plessey image readers | Published format descriptions and the existing Sythos writer tables were used to implement the scanline readers on 2026-08-13. No third-party source code or table is copied or shipped; checksum and start/stop validation remain original Sythos code. |
110
+ | GS1-128 semantic layer | The existing shared GS1 Application Identifier metadata and public GS1 descriptions were reused on 2026-08-13. FNC1 classification and parsing are original Sythos integration code; no third-party decoder is a runtime dependency. |
109
111
 
110
112
  ## Verification log
111
113
 
package/README.md CHANGED
@@ -118,8 +118,8 @@ The `unpkg` and `jsdelivr` fields point at the IIFE bundle, so a CDN needs no in
118
118
 
119
119
  ```html
120
120
  <script src="https://unpkg.com/@sythos/js_barcode_universal"></script>
121
- <script src="https://unpkg.com/@sythos/js_barcode_universal@1.4.1"></script>
122
- <script src="https://cdn.jsdelivr.net/npm/@sythos/js_barcode_universal@1.4.1"></script>
121
+ <script src="https://unpkg.com/@sythos/js_barcode_universal@1.5.1"></script>
122
+ <script src="https://cdn.jsdelivr.net/npm/@sythos/js_barcode_universal@1.5.1"></script>
123
123
  ```
124
124
 
125
125
  Pin the version for anything you ship; the unpinned form resolves to `latest` and will move under
@@ -219,8 +219,8 @@ time.
219
219
  | ITF (Interleaved 2 of 5) | `itf` | 1D | ✅ | ✅ |
220
220
  | ITF-14 | `itf14` | 1D | ✅ | ✅ [^1] |
221
221
  | Codabar | `codabar` | 1D | ✅ | ✅ |
222
- | Code 11 | `code11` | 1D | ✅ | |
223
- | MSI Plessey | `msi` | 1D | ✅ | |
222
+ | Code 11 | `code11` | 1D | ✅ | |
223
+ | MSI Plessey | `msi` | 1D | ✅ | |
224
224
  | Pharmacode | `pharmacode` | 1D | ✅ | — |
225
225
  | QR Code | `qr` | 2D | ✅ | ✅ |
226
226
  | Data Matrix ECC 200 | `datamatrix` | 2D | ✅ | ✅ |
@@ -229,27 +229,40 @@ time.
229
229
  | MicroPDF417 | `micropdf417` | 2D | ✅ | ✅ |
230
230
  | Micro QR Code | `microqr` | 2D | ✅ | ✅ |
231
231
  | rMQR Code | `rmqr` | 2D | ✅ | ✅ |
232
- | FrameQR Code | `frameqr` | 2D | ✅ | ✅ |
232
+ | Sythos Canvas QR profile — not DENSO FrameQR® compatible | `frameqr` | 2D | ✅ | ✅ |
233
233
  | Aztec Rune | `aztecrune` | 2D | ✅ | ✅ |
234
234
  | Compact PDF417 | `compactpdf417` | 2D | ✅ | ✅ |
235
- | GS1 DataBar Omnidirectional / Truncated | `gs1databar14` | 1D | ✅ | |
236
- | EAN-2 supplement | `ean2` | 1D | ✅ | |
237
- | EAN-5 supplement | `ean5` | 1D | ✅ | |
238
-
239
- Twenty-eight listed formats are writable and twenty-two are readable. **Code 11, MSI Plessey,
240
- Pharmacode, EAN-2, EAN-5 and GS1 DataBar remain write-only in the generic image pipeline.** PDF417 exposes direct matrix decoding, automatic
235
+ | GS1 DataBar Omnidirectional / Truncated | `gs1databar14` | 1D | ✅ | |
236
+ | EAN-2 supplement | `ean2` | 1D | ✅ | [^2] |
237
+ | EAN-5 supplement | `ean5` | 1D | ✅ | [^2] |
238
+
239
+ Twenty-eight listed formats are writable and twenty-seven are readable (EAN-2 and EAN-5 are
240
+ parent-bound supplements). **Pharmacode remains intentionally write-only in the generic image
241
+ pipeline.** Code 11 and MSI Plessey use the scanline reader; GS1 DataBar uses the
242
+ Omnidirectional/Truncated scanline layer over the verified GTIN decoder. PDF417 exposes direct matrix decoding, automatic
241
243
  camera localization and an assisted quadrilateral sampler through its subpath. Its detector is
242
244
  validated on degraded synthetic photographs and real Pixel 10/Chrome and iPhone 17/Safari camera
243
245
  tests; external black-box vectors from ZXing 3.5.3 and bwip-js also pass in both directions.
244
246
  Text and Numeric vectors are covered bidirectionally; binary byte-for-byte interop remains
245
247
  explicitly unclaimed until a dedicated external byte corpus is added.
246
248
 
247
- [^1]: `gs1128`, `itf14` and `isbn` are sub-variants that share a decoder with their base format, so
248
- they decode under that base id: a GS1-128 comes back as `code128`, an ITF-14 as `itf`, and an ISBN
249
- as `ean13`. The payload is intact either way a GS1-128 *is* a Code 128 with a leading FNC1, an
250
- ITF-14 *is* an ITF fixed at fourteen digits, and an ISBN barcode *is* an EAN-13 with a 978/979
251
- prefix. Match on `result.format === 'code128'` rather than `'gs1128'`, or a
252
- condition on the sub-variant id will silently never fire.
249
+ [^1]: `itf14` and `isbn` share a decoder with their base format, so an ITF-14 comes back as `itf`
250
+ and an ISBN as `ean13`. GS1-128 is classified separately as `gs1128` when its leading FNC1 is
251
+ present and exposes `gs1`, `symbologyIdentifier` and parsed `elements` metadata. The payload is
252
+ intact either way — an ITF-14 is an ITF fixed at fourteen digits, and an ISBN barcode is an EAN-13
253
+ with a 978/979 prefix.
254
+
255
+ [^2]: EAN-2 and EAN-5 are recognized only when attached to a validated EAN-13, EAN-8, UPC-A or
256
+ UPC-E parent; they are not independent generic retail-symbol readers.
257
+
258
+ ### Code 11 and MSI Plessey image reading
259
+
260
+ The generic image pipeline now recognizes Code 11 and MSI Plessey through the existing
261
+ scanline reader. Check-digit validation is opt-in with `decode(image, { checkDigit: true })`;
262
+ without that option the physical grammar is still required, while the literal check character is
263
+ preserved for MSI and reliably stripped for Code 11 when its C/K grammar is unambiguous. The
264
+ reader keeps Pharmacode write-only because its unframed narrow/wide grammar is not safe for
265
+ unrestricted image autodetection.
253
266
 
254
267
  ### Data Matrix ECC 200
255
268
 
@@ -357,9 +370,9 @@ const symbol = encodeRMQR('rMQR SAMPLE', { ecc: 'M' });
357
370
  console.log(decodeRMQR(symbol).text);
358
371
  ```
359
372
 
360
- ### FrameQR Code
373
+ ### Sythos Canvas QR profile
361
374
 
362
- `frameqr` is an explicitly scoped, non-certified FrameQR Code profile: it reserves a bounded
375
+ `frameqr` is an explicitly scoped, non-certified Sythos Canvas QR profile not DENSO FrameQR® compatible. It reserves a bounded
363
376
  square, circle or diamond artwork canvas inside an ECC-H QR Model 2 symbol. It is **not** a native
364
377
  DENSO FrameQR encoder or decoder, and the package makes no DENSO interoperability claim. The
365
378
  profile can be read from clean rendered rasters and is exposed through the normal `encode`/`decode`
@@ -390,22 +403,22 @@ source or table is shipped.
390
403
  Numeric compaction. It has a clean raster detector and direct matrix decoder.
391
404
 
392
405
  EAN-2 and EAN-5 are writable supplements exposed by the `oned` subpath and by
393
- the generic `ean2` and `ean5` format IDs. They are intentionally not generic
394
- standalone camera-reader formats; use the composition helpers with an EAN/UPC
395
- base symbol.
406
+ the generic `ean2` and `ean5` format IDs. The image reader recognizes them only
407
+ when attached to a validated EAN/UPC parent; use the composition helpers with
408
+ an EAN/UPC base symbol.
396
409
 
397
410
  ### GS1 DataBar
398
411
 
399
412
  The `databar` subpath exposes original GS1 GTIN/AI codecs plus physical
400
- Omnidirectional and Truncated writers and clean-matrix decoders. Four GTIN
413
+ Omnidirectional and Truncated writers, scanline readers and clean-matrix decoders. Four GTIN
401
414
  vectors were compared bit-for-bit with Zint 2.16.0 as a black box. Limited,
402
415
  Stacked, Stacked Omnidirectional and Expanded physical layouts remain planned;
403
416
  their data-layer helpers do not imply complete scanner support.
404
417
 
405
418
  ### Not implemented
406
419
 
407
- GS1 DataBar physical support currently covers Omnidirectional and Truncated writing plus clean
408
- matrix decoding; Limited, Stacked and Expanded physical layouts remain planned. MaxiCode is
420
+ GS1 DataBar physical support currently covers Omnidirectional and Truncated writing plus
421
+ scanline and clean-matrix decoding; Limited, Stacked and Expanded physical layouts remain planned. MaxiCode is
409
422
  not implemented. Data Matrix ECC
410
423
  200 is implemented for its classic square and rectangular symbols;
411
424
  DMRE remains outside the current scope. See [`PLAN.md`](PLAN.md) for the remaining symbologies.
@@ -609,16 +622,16 @@ MIT © 2026 Sythos (https://www.sythos.net). Every source file carries the heade
609
622
 
610
623
  **The implementation is original Sythos work.** No third-party barcode source code is copied into
611
624
  or shipped by this package. The symbologies are implemented from published descriptions of the
612
- formats and from original Sythos data structures. MicroPDF417, Micro QR, rMQR and the FrameQR
613
- Code carry provenance and pending legal review in `NOTICE.md`. Independent
625
+ formats and from original Sythos data structures. MicroPDF417, Micro QR, rMQR and the Sythos
626
+ Canvas QR profile carry provenance and pending legal review in `NOTICE.md`. Independent
614
627
  implementations and public technical material may be consulted for engineering review or
615
628
  black-box verification; no third-party source code is copied or shipped. The distributed package has no runtime third-party
616
629
  dependencies. See [`NOTICE.md`](NOTICE.md) and the per-format files in [`licenses/`](licenses/).
617
630
 
618
631
  Public DENSO FrameQR material was consulted only to document the compatibility boundary. ZXing
619
632
  was used only as an independent black-box validation tool; no ZXing source code or tables are
620
- copied or shipped. The FrameQR Code profile does not claim native DENSO FrameQR
621
- interoperability or co-author attribution.
633
+ copied or shipped. The Sythos Canvas QR profile is not DENSO FrameQR® compatible and does not
634
+ claim native DENSO interoperability or co-author attribution.
622
635
 
623
636
  **Trademark is not licence.** QR Code® is a registered trademark of DENSO WAVE; Aztec Code,
624
637
  MaxiCode and GS1 DataBar are likewise marks of their owners. A trademark does not restrict