@sythos/js_barcode_universal 1.5.6 → 1.5.8

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 (180) hide show
  1. package/NOTICE.md +1 -1
  2. package/README.md +55 -35
  3. package/bundle/sythos-barcode.esm.js +618 -465
  4. package/bundle/sythos-barcode.js +618 -465
  5. package/package.json +90 -24
  6. package/src/index.d.ts +363 -0
  7. package/src/index.js +286 -133
  8. package/src/{aztec → js/aztec}/decoder.js +0 -1
  9. package/src/{aztec → js/aztec}/detector.js +0 -1
  10. package/src/{aztec → js/aztec}/encoder.js +0 -1
  11. package/src/{aztec → js/aztec}/high-level.js +0 -1
  12. package/src/{aztec → js/aztec}/index.js +0 -1
  13. package/src/{aztec → js/aztec}/tables.js +0 -1
  14. package/src/{aztecrune → js/aztecrune}/decoder.js +0 -1
  15. package/src/{aztecrune → js/aztecrune}/detector.js +0 -1
  16. package/src/{aztecrune → js/aztecrune}/encoder.js +0 -1
  17. package/src/{aztecrune → js/aztecrune}/index.js +0 -1
  18. package/src/{aztecrune → js/aztecrune}/tables.js +0 -1
  19. package/src/{compactpdf417 → js/compactpdf417}/decoder.js +0 -1
  20. package/src/{compactpdf417 → js/compactpdf417}/detector.js +0 -1
  21. package/src/{compactpdf417 → js/compactpdf417}/encoder.js +0 -1
  22. package/src/{compactpdf417 → js/compactpdf417}/index.js +0 -5
  23. package/src/{compactpdf417 → js/compactpdf417}/tables.js +0 -1
  24. package/src/{core → js/core}/bit-buffer.js +0 -1
  25. package/src/{core → js/core}/bit-matrix.js +0 -1
  26. package/src/{core → js/core}/errors.js +0 -1
  27. package/src/{core → js/core}/galois-field.js +0 -1
  28. package/src/{core → js/core}/index.js +0 -1
  29. package/src/{core → js/core}/reed-solomon.js +0 -1
  30. package/src/{databar → js/databar}/codec.js +0 -1
  31. package/src/{databar → js/databar}/decoder.js +0 -1
  32. package/src/{databar → js/databar}/encoder.js +0 -1
  33. package/src/{databar → js/databar}/gs1.js +0 -1
  34. package/src/{databar → js/databar}/index.js +0 -1
  35. package/src/{databar → js/databar}/patterns.js +0 -1
  36. package/src/{databar → js/databar}/tables.js +0 -1
  37. package/src/{datamatrix → js/datamatrix}/decoder.js +0 -1
  38. package/src/{datamatrix → js/datamatrix}/detector.js +0 -1
  39. package/src/{datamatrix → js/datamatrix}/encoder.js +0 -1
  40. package/src/{datamatrix → js/datamatrix}/index.js +0 -1
  41. package/src/{datamatrix → js/datamatrix}/tables.js +0 -1
  42. package/src/{frameqr → js/frameqr}/decoder.js +15 -16
  43. package/src/{frameqr → js/frameqr}/detector.js +2 -3
  44. package/src/{frameqr → js/frameqr}/encoder.js +7 -8
  45. package/src/{frameqr → js/frameqr}/index.js +0 -1
  46. package/src/{frameqr → js/frameqr}/tables.js +10 -11
  47. package/src/{image → js/image}/binarizer.js +0 -1
  48. package/src/{image → js/image}/grid-sampler.js +0 -1
  49. package/src/js/image/index.js +40 -0
  50. package/src/{image → js/image}/luminance.js +0 -1
  51. package/src/{image → js/image}/perspective.js +0 -1
  52. package/src/{micropdf417 → js/micropdf417}/compaction.js +0 -1
  53. package/src/{micropdf417 → js/micropdf417}/decoder.js +0 -1
  54. package/src/{micropdf417 → js/micropdf417}/detector.js +0 -1
  55. package/src/{micropdf417 → js/micropdf417}/encoder.js +0 -1
  56. package/src/{micropdf417 → js/micropdf417}/error-correction.js +0 -1
  57. package/src/{micropdf417 → js/micropdf417}/index.js +0 -1
  58. package/src/{micropdf417 → js/micropdf417}/tables.js +0 -1
  59. package/src/{microqr → js/microqr}/decoder.js +0 -1
  60. package/src/{microqr → js/microqr}/detector.js +0 -1
  61. package/src/{microqr → js/microqr}/encoder.js +0 -1
  62. package/src/js/microqr/index.js +36 -0
  63. package/src/{microqr → js/microqr}/tables.js +0 -1
  64. package/src/{oned → js/oned}/addons.js +0 -1
  65. package/src/{oned → js/oned}/index.js +0 -1
  66. package/src/{oned → js/oned}/patterns.js +0 -1
  67. package/src/{oned → js/oned}/reader.js +0 -1
  68. package/src/{oned → js/oned}/writers.js +0 -1
  69. package/src/{pdf417 → js/pdf417}/compaction.js +0 -1
  70. package/src/{pdf417 → js/pdf417}/decoder.js +0 -1
  71. package/src/{pdf417 → js/pdf417}/detector.js +0 -1
  72. package/src/{pdf417 → js/pdf417}/encoder.js +0 -1
  73. package/src/{pdf417 → js/pdf417}/error-correction.js +0 -1
  74. package/src/js/pdf417/index.js +6 -0
  75. package/src/{pdf417 → js/pdf417}/tables.js +0 -1
  76. package/src/{qr → js/qr}/decoder.js +0 -1
  77. package/src/{qr → js/qr}/detector.js +0 -1
  78. package/src/{qr → js/qr}/encoder.js +0 -1
  79. package/src/js/qr/index.js +44 -0
  80. package/src/{qr → js/qr}/tables.js +0 -1
  81. package/src/{render → js/render}/image-data.js +0 -1
  82. package/src/{render → js/render}/index.js +0 -1
  83. package/src/{render → js/render}/options.js +0 -1
  84. package/src/{render → js/render}/png.js +0 -1
  85. package/src/{render → js/render}/svg.js +0 -1
  86. package/src/{render → js/render}/webgl.js +0 -1
  87. package/src/{render → js/render}/webgpu.js +0 -1
  88. package/src/{rmqr → js/rmqr}/decoder.js +0 -1
  89. package/src/{rmqr → js/rmqr}/detector.js +0 -1
  90. package/src/{rmqr → js/rmqr}/encoder.js +0 -1
  91. package/src/{rmqr → js/rmqr}/index.js +0 -1
  92. package/src/{rmqr → js/rmqr}/tables.js +0 -1
  93. package/src/ts/aztec/decoder.d.ts +57 -0
  94. package/src/ts/aztec/detector.d.ts +62 -0
  95. package/src/ts/aztec/encoder.d.ts +94 -0
  96. package/src/ts/aztec/high-level.d.ts +89 -0
  97. package/src/ts/aztec/index.d.ts +35 -0
  98. package/src/ts/aztec/tables.d.ts +144 -0
  99. package/src/ts/aztecrune/decoder.d.ts +56 -0
  100. package/src/ts/aztecrune/detector.d.ts +53 -0
  101. package/src/ts/aztecrune/encoder.d.ts +51 -0
  102. package/src/ts/aztecrune/index.d.ts +35 -0
  103. package/src/ts/aztecrune/tables.d.ts +75 -0
  104. package/src/ts/bundle/sythos-barcode.d.ts +31 -0
  105. package/src/ts/bundle/sythos-barcode.esm.d.ts +31 -0
  106. package/src/ts/compactpdf417/decoder.d.ts +64 -0
  107. package/src/ts/compactpdf417/detector.d.ts +48 -0
  108. package/src/ts/compactpdf417/encoder.d.ts +49 -0
  109. package/src/ts/compactpdf417/index.d.ts +8 -0
  110. package/src/ts/compactpdf417/tables.d.ts +84 -0
  111. package/src/ts/core/bit-buffer.d.ts +78 -0
  112. package/src/ts/core/bit-matrix.d.ts +129 -0
  113. package/src/ts/core/errors.d.ts +57 -0
  114. package/src/ts/core/galois-field.d.ts +141 -0
  115. package/src/ts/core/index.d.ts +40 -0
  116. package/src/ts/core/reed-solomon.d.ts +65 -0
  117. package/src/ts/databar/codec.d.ts +78 -0
  118. package/src/ts/databar/decoder.d.ts +55 -0
  119. package/src/ts/databar/encoder.d.ts +34 -0
  120. package/src/ts/databar/gs1.d.ts +48 -0
  121. package/src/ts/databar/index.d.ts +37 -0
  122. package/src/ts/databar/patterns.d.ts +46 -0
  123. package/src/ts/databar/tables.d.ts +119 -0
  124. package/src/ts/datamatrix/decoder.d.ts +57 -0
  125. package/src/ts/datamatrix/detector.d.ts +59 -0
  126. package/src/ts/datamatrix/encoder.d.ts +36 -0
  127. package/src/ts/datamatrix/index.d.ts +35 -0
  128. package/src/ts/datamatrix/tables.d.ts +88 -0
  129. package/src/ts/frameqr/decoder.d.ts +64 -0
  130. package/src/ts/frameqr/detector.d.ts +96 -0
  131. package/src/ts/frameqr/encoder.d.ts +73 -0
  132. package/src/ts/frameqr/index.d.ts +34 -0
  133. package/src/ts/frameqr/tables.d.ts +123 -0
  134. package/src/ts/image/binarizer.d.ts +85 -0
  135. package/src/ts/image/grid-sampler.d.ts +82 -0
  136. package/src/{image/index.js → ts/image/index.d.ts} +0 -2
  137. package/src/ts/image/luminance.d.ts +112 -0
  138. package/src/ts/image/perspective.d.ts +111 -0
  139. package/src/ts/index.d.ts +363 -0
  140. package/src/ts/micropdf417/compaction.d.ts +38 -0
  141. package/src/ts/micropdf417/decoder.d.ts +57 -0
  142. package/src/ts/micropdf417/detector.d.ts +95 -0
  143. package/src/ts/micropdf417/encoder.d.ts +34 -0
  144. package/src/ts/micropdf417/error-correction.d.ts +38 -0
  145. package/src/ts/micropdf417/index.d.ts +36 -0
  146. package/src/ts/micropdf417/tables.d.ts +73 -0
  147. package/src/ts/microqr/decoder.d.ts +49 -0
  148. package/src/ts/microqr/detector.d.ts +96 -0
  149. package/src/ts/microqr/encoder.d.ts +33 -0
  150. package/src/{microqr/index.js → ts/microqr/index.d.ts} +0 -2
  151. package/src/ts/microqr/tables.d.ts +107 -0
  152. package/src/ts/oned/addons.d.ts +181 -0
  153. package/src/ts/oned/index.d.ts +55 -0
  154. package/src/ts/oned/patterns.d.ts +259 -0
  155. package/src/ts/oned/reader.d.ts +129 -0
  156. package/src/ts/oned/writers.d.ts +218 -0
  157. package/src/ts/pdf417/compaction.d.ts +59 -0
  158. package/src/ts/pdf417/decoder.d.ts +48 -0
  159. package/src/ts/pdf417/detector.d.ts +73 -0
  160. package/src/ts/pdf417/encoder.d.ts +32 -0
  161. package/src/ts/pdf417/error-correction.d.ts +34 -0
  162. package/src/{pdf417/index.js → ts/pdf417/index.d.ts} +0 -1
  163. package/src/ts/pdf417/tables.d.ts +53 -0
  164. package/src/ts/qr/decoder.d.ts +79 -0
  165. package/src/ts/qr/detector.d.ts +93 -0
  166. package/src/ts/qr/encoder.d.ts +166 -0
  167. package/src/{qr/index.js → ts/qr/index.d.ts} +0 -2
  168. package/src/ts/qr/tables.d.ts +291 -0
  169. package/src/ts/render/image-data.d.ts +58 -0
  170. package/src/ts/render/index.d.ts +110 -0
  171. package/src/ts/render/options.d.ts +98 -0
  172. package/src/ts/render/png.d.ts +58 -0
  173. package/src/ts/render/svg.d.ts +46 -0
  174. package/src/ts/render/webgl.d.ts +45 -0
  175. package/src/ts/render/webgpu.d.ts +51 -0
  176. package/src/ts/rmqr/decoder.d.ts +42 -0
  177. package/src/ts/rmqr/detector.d.ts +81 -0
  178. package/src/ts/rmqr/encoder.d.ts +45 -0
  179. package/src/ts/rmqr/index.d.ts +34 -0
  180. package/src/ts/rmqr/tables.d.ts +89 -0
package/NOTICE.md CHANGED
@@ -96,7 +96,7 @@ Records any constant table whose values were transcribed from a documented
96
96
  source rather than generated by `tools/`. Each entry names the source and the
97
97
  date of transcription.
98
98
 
99
- | PDF417 pattern ordering | AIM USS-PDF417 public reference ([reference copy](https://www.expresscorp.com/uploads/specifications/44/USS-PDF-417.pdf)), Appendix H / Table H1, transcribed for `src/pdf417/tables.js`; accessed 2026-08-11. The reference copy is attributed here; its copyright and redistribution terms remain under legal review. |
99
+ | PDF417 pattern ordering | AIM USS-PDF417 public reference ([reference copy](https://www.expresscorp.com/uploads/specifications/44/USS-PDF-417.pdf)), Appendix H / Table H1, transcribed for `src/js/pdf417/tables.js`; accessed 2026-08-11. The reference copy is attributed here; its copyright and redistribution terms remain under legal review. |
100
100
  | PDF417 black-box verification | ZXing Java 3.5.3 and bwip-js 4.5.1 were invoked as external black boxes on 2026-08-11 for bidirectional Text/Numeric/UTF-8 vectors. Their source and tables are not shipped. |
101
101
  | PDF417 device evidence | User-provided 6/6 continuous-camera attestations on Pixel 10/Android 17/Chrome and iPhone 17/Safari, including printed Brother MFC-L2710DW symbols, low light/flash, blur and motion; recorded as user evidence, not independently captured by this repository. |
102
102
  | MicroPDF417 technical and provenance review | [ISO/IEC 24728:2006](https://www.iso.org/standard/38838.html), [Wikipedia overview](https://en.wikipedia.org/wiki/MicroPDF417), [US 6,047,892 record](https://patents.google.com/patent/US6047892A/en) and its [direct PDF](https://patentimages.storage.googleapis.com/0a/79/f5/e8d374043414f3/US6047892.pdf) were consulted on 2026-08-11. ZXing-C++, Zint and bwip-js were consulted for implementation/review or black-box validation. No third-party source code is copied or shipped; normative/public values are represented in original Sythos data structures, with provenance and legal review pending. |
package/README.md CHANGED
@@ -1,16 +1,10 @@
1
1
  # Sythos Barcode Suite and SDK
2
2
 
3
- Read and write barcodes in JavaScript.
3
+ Read and write barcodes in JavaScript and TypeScript.
4
4
 
5
- [![npm](https://img.shields.io/npm/v/@sythos/js_barcode_universal.svg)](https://www.npmjs.com/package/@sythos/js_barcode_universal)
6
- [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
7
- [![Runtime dependencies: 0](https://img.shields.io/badge/runtime%20dependencies-0-brightgreen.svg)](package.json)
8
- [![ESM](https://img.shields.io/badge/ESM-supported-3178C6.svg?logo=javascript&logoColor=white)](https://nodejs.org/api/esm.html)
9
- [![Node](https://img.shields.io/node/v/%40sythos%2Fjs_barcode_universal.svg)](https://www.npmjs.com/package/@sythos/js_barcode_universal)
5
+ [![npm](https://img.shields.io/npm/v/@sythos/js_barcode_universal.svg)](https://www.npmjs.com/package/@sythos/js_barcode_universal) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Runtime dependencies: 0](https://img.shields.io/badge/runtime%20dependencies-0-brightgreen.svg)](package.json) [![ESM](https://img.shields.io/badge/ESM-supported-3178C6.svg?logo=javascript&logoColor=white)](https://nodejs.org/api/esm.html) ![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white)
10
6
 
11
- [![npm downloads](https://img.shields.io/npm/dm/%40sythos%2Fjs_barcode_universal.svg?label=npm%20downloads)](https://www.npmjs.com/package/@sythos/js_barcode_universal)
12
- [![GitHub last commit](https://img.shields.io/github/last-commit/Sythos/JS_Barcode_Universal.svg)](https://github.com/Sythos/JS_Barcode_Universal/commits/main/)
13
- [![GitHub issues](https://img.shields.io/github/issues/Sythos/JS_Barcode_Universal.svg)](https://github.com/Sythos/JS_Barcode_Universal/issues)
7
+ [![npm downloads](https://img.shields.io/npm/dm/%40sythos%2Fjs_barcode_universal.svg?label=npm%20downloads)](https://www.npmjs.com/package/@sythos/js_barcode_universal) [![GitHub last commit](https://img.shields.io/github/last-commit/Sythos/JS_Barcode_Universal.svg)](https://github.com/Sythos/JS_Barcode_Universal/commits/main/) [![GitHub issues](https://img.shields.io/github/issues/Sythos/JS_Barcode_Universal.svg)](https://github.com/Sythos/JS_Barcode_Universal/issues) [![Node](https://img.shields.io/node/v/%40sythos%2Fjs_barcode_universal.svg)](https://www.npmjs.com/package/@sythos/js_barcode_universal)
14
8
 
15
9
  Original Sythos implementation, zero runtime dependencies, MIT. It runs unmodified in Node, in browsers
16
10
  (including Safari on iOS) and in web workers. The core requires no canvas, no filesystem and no
@@ -118,8 +112,8 @@ The `unpkg` and `jsdelivr` fields point at the IIFE bundle, so a CDN needs no in
118
112
 
119
113
  ```html
120
114
  <script src="https://unpkg.com/@sythos/js_barcode_universal"></script>
121
- <script src="https://unpkg.com/@sythos/js_barcode_universal@1.5.6"></script>
122
- <script src="https://cdn.jsdelivr.net/npm/@sythos/js_barcode_universal@1.5.6"></script>
115
+ <script src="https://unpkg.com/@sythos/js_barcode_universal@1.5.8"></script>
116
+ <script src="https://cdn.jsdelivr.net/npm/@sythos/js_barcode_universal@1.5.8"></script>
123
117
  ```
124
118
 
125
119
  Pin the version for anything you ship; the unpinned form resolves to `latest` and will move under
@@ -168,7 +162,17 @@ toPNG(ean, { scale: 3, barHeight: 80 }).then((bytes) => {
168
162
  ### 4. The source directly
169
163
 
170
164
  [`src/index.js`](src/index.js) is plain ESM with JSDoc types and no build step of its own. Import
171
- it and let your bundler tree-shake; the package is marked side-effect free.
165
+ it and let your bundler tree-shake; the package is marked side-effect free. The source layout is
166
+ deliberately explicit:
167
+
168
+ - `src/index.js` is the stable public facade.
169
+ - `src/index.d.ts` is the public TypeScript declaration facade for the top-level entry point.
170
+ - `src/js/` contains the zero-dependency JavaScript runtime modules, including format subpaths.
171
+ - `src/ts/` contains the shipped machine-readable TypeScript declaration modules for the format
172
+ subpaths. These declarations describe the JavaScript runtime and do not add a runtime dependency.
173
+
174
+ The package subpath exports therefore pair runtime modules under `src/js/` with their declaration
175
+ counterparts under `src/ts/`; direct source imports should continue to use the facade above.
172
176
 
173
177
  ```js
174
178
  import { encode, decode, toImageData, listFormats } from './src/index.js';
@@ -205,11 +209,14 @@ decode(frame, { formats, profile: 'camera', tryHarder: true })
205
209
  ```
206
210
 
207
211
  The profile requires a compatible quiet zone and the same complete 1D symbol on at least two
208
- scan samples. It retries only the two quarter-turn orientations needed for 1D symbols when the
209
- native orientation has no validated read. Code 11 and MSI require a verified check digit in this
210
- profile; other formats retain their own structural and checksum validation. A frame without a
211
- validated barcode still returns `[]`. No partial, structurally inconsistent or low-confidence value is
212
- emitted to the caller.
212
+ scan samples. It evaluates the eight fixed in-plane orientations `0°`, `45°`, `90°`, `135°`,
213
+ `180°`, `225°`, `270°` and `315°` when the native orientation has no validated read. The same
214
+ orientation set is available to the supported 2D detector passes in the strict camera profile.
215
+ Code 11 and MSI require a verified check digit in this profile; other formats retain their own
216
+ structural and checksum validation. A frame without a validated barcode still returns `[]`. No
217
+ partial, structurally inconsistent or low-confidence value is emitted to the caller. This is a
218
+ finite in-plane retry policy, not a guarantee for arbitrary perspective, curved media, severe
219
+ occlusion or multi-symbol scenes.
213
220
 
214
221
  Camera-profile 1D results add `confidence` (0–1), `bounds`, `rotation`, and
215
222
  `quality: { quietZone, checksum, rows, consistency }`. `bounds` is reported in the raster
@@ -300,9 +307,9 @@ console.log(result.text, result.gs1); // 0101234567890128 true
300
307
 
301
308
  Binary content is accepted as a `Uint8Array` with `encoding: 'base256'`. The current high-level
302
309
  decoder handles ASCII and Base256 codewords; C40, Text, X12 and EDIFACT input symbols are not yet
303
- decoded. The current detector accepts axis-aligned square or rectangular symbols; the normal
304
- `decode(image, { formats: ['datamatrix'] })` pipeline also retries quarter-turn rotations.
305
- Arbitrary-angle and perspective-skewed Data Matrix photographs are not yet guaranteed.
310
+ decoded. The current detector accepts axis-aligned square or rectangular symbols; with
311
+ `profile: 'camera'`, the decode pipeline evaluates the eight fixed in-plane orientations at 45°
312
+ steps. Arbitrary perspective and perspective-skewed Data Matrix photographs are not yet guaranteed.
306
313
 
307
314
  ### Aztec Code
308
315
 
@@ -320,9 +327,9 @@ const result = decodeAztec(symbol);
320
327
  console.log(result.text); // Greetings My Lord Sythos 👋
321
328
  ```
322
329
 
323
- The image detector handles rotation, inverted polarity and quadrilateral sampling around the
324
- central bull’s-eye. Severe photographic perspective remains an interoperability and robustness
325
- gate rather than a guaranteed capability.
330
+ The image detector handles the eight fixed camera-profile orientations, inverted polarity and
331
+ quadrilateral sampling around the central bull’s-eye. Severe photographic perspective remains an
332
+ interoperability and robustness gate rather than a guaranteed capability.
326
333
 
327
334
  ### PDF417 (writer, matrix decoder and camera reader)
328
335
 
@@ -330,8 +337,8 @@ gate rather than a guaranteed capability.
330
337
  (UTF-8), ECC levels 0–8, row-height inference and Reed–Solomon erasure correction. The direct
331
338
  matrix decoder is available from `@sythos/js_barcode_universal/pdf417`.
332
339
 
333
- The image helper handles clean module-aligned raster symbols, integer scale, right-angle
334
- rotations, automatic perspective estimation, mild blur/noise and an application-supplied
340
+ The image helper handles clean module-aligned raster symbols, integer scale, fixed 45°-step
341
+ camera orientations, automatic perspective estimation, mild blur/noise and an application-supplied
335
342
  quadrilateral. Results expose `bytes` and ordered `segments` for byte-preserving payloads. Real
336
343
  device validation covers Pixel 10/Chrome and iPhone 17/Safari with printed symbols and continuous
337
344
  camera capture. Extreme glare, severe occlusion, curved media and multi-symbol scenes remain
@@ -357,17 +364,18 @@ const symbol = encodeMicroPDF417('MICRO PDF417', { compaction: 'text' });
357
364
  console.log(decodeMicroPDF417(symbol).text);
358
365
  ```
359
366
 
360
- The detector accepts clean, integer-scaled raster symbols and quarter-turn rotations. Arbitrary
361
- perspective, severe photographic degradation and multi-symbol scenes are not yet claimed as
362
- robust capabilities.
367
+ The detector accepts clean, integer-scaled raster symbols and the eight fixed camera-profile
368
+ orientations. Arbitrary perspective, severe photographic degradation and multi-symbol scenes are
369
+ not yet claimed as robust capabilities.
363
370
 
364
371
  ### Micro QR Code
365
372
 
366
373
  `microqr` implements the M1–M4 family with Numeric, Alphanumeric, ISO-8859-1 Byte and Kanji
367
374
  payloads, BCH format protection, the four Micro QR masks and Reed–Solomon correction. M1 is
368
375
  detection-only. ECI, FNC1/GS1 and Structured Append are intentionally outside the current API.
369
- The detector accepts clean scaled rasters, quarter-turns, inverted polarity and mild projective
370
- sampling, and rejects normal QR Model 2 symbols.
376
+ The detector accepts clean scaled rasters, the eight fixed camera-profile orientations, inverted
377
+ polarity and mild projective sampling, and rejects normal QR Model 2 symbols. Arbitrary perspective
378
+ and curved-media robustness are not claimed.
371
379
 
372
380
  ```js
373
381
  import { encodeMicroQR, decodeMicroQR } from '@sythos/js_barcode_universal/microqr';
@@ -379,8 +387,9 @@ console.log(decodeMicroQR(symbol).text);
379
387
  ### rMQR Code
380
388
 
381
389
  `rmqr` implements all 32 standard rectangular geometries, M/H ECC, Numeric, Alphanumeric, Byte,
382
- Kanji and ECI payloads. The detector accepts clean integer-scaled rasters, quiet zones and
383
- quarter-turns; arbitrary photographic perspective and multi-symbol scenes are not claimed.
390
+ Kanji and ECI payloads. The detector accepts clean integer-scaled rasters, quiet zones and the
391
+ eight fixed camera-profile orientations; arbitrary photographic perspective and multi-symbol
392
+ scenes are not claimed.
384
393
 
385
394
  ```js
386
395
  import { encodeRMQR, decodeRMQR } from '@sythos/js_barcode_universal/rmqr';
@@ -414,7 +423,7 @@ exports the QR symbol without embedding the remote artwork.
414
423
  ### Aztec Rune, Compact PDF417 and EAN supplements
415
424
 
416
425
  `aztecrune` implements the fixed 11×11 Rune values 0–255 with clean raster
417
- detection, inversion and quarter-turn handling. Its matrices were compared
426
+ detection, inversion and the eight fixed camera-profile orientations. Its matrices were compared
418
427
  exhaustively with ZXing-C++ as an independent black-box runtime; no ZXing
419
428
  source or table is shipped.
420
429
 
@@ -602,8 +611,8 @@ Luminance conversion flattens the image to greyscale. Binarization turns that in
602
611
  either globally or with a hybrid local threshold that survives uneven lighting. Detection locates
603
612
  a symbol and its corners in that bit plane. Detectors that recover four perspective-aware corners
604
613
  (currently QR) sample the symbol back through a perspective transform. Data Matrix currently uses
605
- an axis-aligned bounding box plus quarter-turn retries. Error correction repairs what the camera
606
- lost. Only then is the payload decoded.
614
+ an axis-aligned bounding box; the strict camera profile evaluates the eight fixed in-plane
615
+ orientations before error correction repairs what the camera lost. Only then is the payload decoded.
607
616
 
608
617
  **Reed–Solomon is generic over the finite field.** The `GaloisField` class is constructed with a
609
618
  field order and a primitive polynomial rather than hard-coding GF(256), which is what lets one
@@ -705,6 +714,17 @@ See [`AI_USAGE.md`](./AI_USAGE.md) for additional machine-oriented guidance.
705
714
 
706
715
  ---
707
716
 
717
+ ## Contributor
718
+
719
+ **Tristan Jacob** ([Tristan-GPT](https://github.com/Tristan-GPT)) — **TypeScript implementation**.
720
+
721
+ Tristan added the machine-readable TypeScript declaration layer across the SDK, covering the
722
+ format-specific APIs, subpath exports and decoder result shapes. It is a welcome bit of type safety
723
+ for a deliberately broad JavaScript API — fewer guesses, better autocomplete, and a
724
+ much friendlier path for TypeScript users.
725
+
726
+ ---
727
+
708
728
  ## Contributing and roadmap
709
729
 
710
730
  [`PLAN.md`](PLAN.md) is the live status document: what is shipped, what is next, and the ground