@sythos/js_barcode_universal 1.5.8 → 1.5.10

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 (179) hide show
  1. package/LICENSE +5 -4
  2. package/NOTICE.md +2 -2
  3. package/README.md +61 -13
  4. package/bundle/sythos-barcode.esm.js +11658 -11244
  5. package/bundle/sythos-barcode.js +11658 -11244
  6. package/package.json +10 -3
  7. package/src/index.d.ts +1 -1
  8. package/src/index.js +508 -516
  9. package/src/js/aztec/decoder.js +208 -199
  10. package/src/js/aztec/detector.js +153 -126
  11. package/src/js/aztec/encoder.js +172 -153
  12. package/src/js/aztec/high-level.js +106 -101
  13. package/src/js/aztec/index.js +1 -12
  14. package/src/js/aztec/tables.js +106 -120
  15. package/src/js/aztecrune/decoder.js +76 -85
  16. package/src/js/aztecrune/detector.js +107 -93
  17. package/src/js/aztecrune/encoder.js +50 -68
  18. package/src/js/aztecrune/index.js +1 -16
  19. package/src/js/aztecrune/tables.js +59 -54
  20. package/src/js/compactpdf417/decoder.js +69 -74
  21. package/src/js/compactpdf417/detector.js +74 -75
  22. package/src/js/compactpdf417/encoder.js +68 -81
  23. package/src/js/compactpdf417/index.js +1 -13
  24. package/src/js/compactpdf417/tables.js +71 -80
  25. package/src/js/core/bit-buffer.js +106 -122
  26. package/src/js/core/bit-matrix.js +196 -194
  27. package/src/js/core/errors.js +13 -15
  28. package/src/js/core/galois-field.js +119 -133
  29. package/src/js/core/index.js +2 -19
  30. package/src/js/core/reed-solomon.js +195 -204
  31. package/src/js/databar/codec.js +93 -108
  32. package/src/js/databar/decoder.js +149 -140
  33. package/src/js/databar/encoder.js +47 -55
  34. package/src/js/databar/gs1.js +122 -123
  35. package/src/js/databar/index.js +4 -36
  36. package/src/js/databar/patterns.js +81 -85
  37. package/src/js/databar/tables.js +51 -52
  38. package/src/js/datamatrix/decoder.js +216 -182
  39. package/src/js/datamatrix/detector.js +161 -132
  40. package/src/js/datamatrix/encoder.js +192 -133
  41. package/src/js/datamatrix/index.js +1 -9
  42. package/src/js/datamatrix/tables.js +68 -69
  43. package/src/js/frameqr/decoder.js +102 -125
  44. package/src/js/frameqr/detector.js +101 -94
  45. package/src/js/frameqr/encoder.js +67 -80
  46. package/src/js/frameqr/index.js +1 -10
  47. package/src/js/frameqr/tables.js +145 -163
  48. package/src/js/image/binarizer.js +146 -162
  49. package/src/js/image/grid-sampler.js +63 -79
  50. package/src/js/image/index.js +0 -2
  51. package/src/js/image/luminance.js +129 -140
  52. package/src/js/image/perspective.js +112 -149
  53. package/src/js/micropdf417/compaction.js +64 -65
  54. package/src/js/micropdf417/decoder.js +106 -109
  55. package/src/js/micropdf417/detector.js +73 -70
  56. package/src/js/micropdf417/encoder.js +129 -154
  57. package/src/js/micropdf417/error-correction.js +6 -11
  58. package/src/js/micropdf417/index.js +2 -16
  59. package/src/js/micropdf417/tables.js +112 -99
  60. package/src/js/microqr/decoder.js +177 -182
  61. package/src/js/microqr/detector.js +240 -256
  62. package/src/js/microqr/encoder.js +239 -194
  63. package/src/js/microqr/index.js +0 -2
  64. package/src/js/microqr/tables.js +208 -200
  65. package/src/js/oned/addons.js +167 -191
  66. package/src/js/oned/index.js +27 -58
  67. package/src/js/oned/patterns.js +194 -213
  68. package/src/js/oned/reader.js +1003 -984
  69. package/src/js/oned/writers.js +411 -466
  70. package/src/js/pdf417/compaction.js +315 -222
  71. package/src/js/pdf417/decoder.js +71 -36
  72. package/src/js/pdf417/detector.js +377 -361
  73. package/src/js/pdf417/encoder.js +57 -46
  74. package/src/js/pdf417/error-correction.js +5 -8
  75. package/src/js/pdf417/tables.js +248 -250
  76. package/src/js/qr/decoder.js +311 -347
  77. package/src/js/qr/detector.js +378 -395
  78. package/src/js/qr/encoder.js +514 -599
  79. package/src/js/qr/index.js +0 -2
  80. package/src/js/qr/tables.js +375 -422
  81. package/src/js/render/image-data.js +57 -62
  82. package/src/js/render/index.js +21 -23
  83. package/src/js/render/options.js +82 -90
  84. package/src/js/render/png.js +144 -169
  85. package/src/js/render/svg.js +41 -44
  86. package/src/js/render/webgl.js +103 -109
  87. package/src/js/render/webgpu.js +205 -217
  88. package/src/js/rmqr/decoder.js +161 -53
  89. package/src/js/rmqr/detector.js +73 -41
  90. package/src/js/rmqr/encoder.js +253 -104
  91. package/src/js/rmqr/index.js +1 -5
  92. package/src/js/rmqr/tables.js +108 -85
  93. package/src/ts/aztec/decoder.ts +317 -0
  94. package/src/ts/aztec/detector.ts +224 -0
  95. package/src/ts/aztec/encoder.ts +257 -0
  96. package/src/ts/aztec/high-level.ts +211 -0
  97. package/src/ts/aztec/index.ts +45 -0
  98. package/src/ts/aztec/tables.ts +210 -0
  99. package/src/ts/aztecrune/decoder.ts +155 -0
  100. package/src/ts/aztecrune/detector.ts +166 -0
  101. package/src/ts/aztecrune/encoder.ts +121 -0
  102. package/src/ts/aztecrune/index.ts +49 -0
  103. package/src/ts/aztecrune/tables.ts +137 -0
  104. package/src/ts/compactpdf417/decoder.ts +128 -0
  105. package/src/ts/compactpdf417/detector.ts +139 -0
  106. package/src/ts/compactpdf417/encoder.ts +140 -0
  107. package/src/ts/compactpdf417/index.ts +17 -0
  108. package/src/ts/compactpdf417/tables.ts +173 -0
  109. package/src/ts/core/bit-buffer.ts +174 -0
  110. package/src/ts/core/bit-matrix.ts +241 -0
  111. package/src/ts/core/errors.ts +61 -0
  112. package/src/ts/core/galois-field.ts +207 -0
  113. package/src/ts/core/index.ts +56 -0
  114. package/src/ts/core/reed-solomon.ts +327 -0
  115. package/src/ts/databar/codec.ts +181 -0
  116. package/src/ts/databar/decoder.ts +215 -0
  117. package/src/ts/databar/encoder.ts +96 -0
  118. package/src/ts/databar/gs1.ts +177 -0
  119. package/src/ts/databar/index.ts +68 -0
  120. package/src/ts/databar/patterns.ts +143 -0
  121. package/src/ts/databar/tables.ts +124 -0
  122. package/src/ts/datamatrix/decoder.ts +262 -0
  123. package/src/ts/datamatrix/detector.ts +225 -0
  124. package/src/ts/datamatrix/encoder.ts +191 -0
  125. package/src/ts/datamatrix/index.ts +42 -0
  126. package/src/ts/datamatrix/tables.ts +123 -0
  127. package/src/ts/frameqr/decoder.ts +239 -0
  128. package/src/ts/frameqr/detector.ts +192 -0
  129. package/src/ts/frameqr/encoder.ts +156 -0
  130. package/src/ts/frameqr/index.ts +42 -0
  131. package/src/ts/frameqr/tables.ts +270 -0
  132. package/src/ts/image/binarizer.ts +270 -0
  133. package/src/ts/image/grid-sampler.ts +164 -0
  134. package/src/ts/image/index.ts +40 -0
  135. package/src/ts/image/luminance.ts +196 -0
  136. package/src/ts/image/perspective.ts +195 -0
  137. package/src/ts/index.d.ts +1 -1
  138. package/src/ts/index.ts +790 -0
  139. package/src/ts/micropdf417/compaction.ts +116 -0
  140. package/src/ts/micropdf417/decoder.ts +183 -0
  141. package/src/ts/micropdf417/detector.ts +149 -0
  142. package/src/ts/micropdf417/encoder.ts +209 -0
  143. package/src/ts/micropdf417/error-correction.ts +55 -0
  144. package/src/ts/micropdf417/index.ts +49 -0
  145. package/src/ts/micropdf417/tables.ts +184 -0
  146. package/src/ts/microqr/decoder.ts +245 -0
  147. package/src/ts/microqr/detector.ts +355 -0
  148. package/src/ts/microqr/encoder.ts +269 -0
  149. package/src/ts/microqr/index.ts +36 -0
  150. package/src/ts/microqr/tables.ts +316 -0
  151. package/src/ts/oned/addons.ts +420 -0
  152. package/src/ts/oned/index.ts +106 -0
  153. package/src/ts/oned/patterns.ts +384 -0
  154. package/src/ts/oned/reader.ts +1364 -0
  155. package/src/ts/oned/writers.ts +746 -0
  156. package/src/ts/pdf417/compaction.ts +298 -0
  157. package/src/ts/pdf417/decoder.ts +75 -0
  158. package/src/ts/pdf417/detector.ts +468 -0
  159. package/src/ts/pdf417/encoder.ts +91 -0
  160. package/src/ts/pdf417/error-correction.ts +47 -0
  161. package/src/ts/pdf417/index.ts +6 -0
  162. package/src/ts/pdf417/tables.ts +317 -0
  163. package/src/ts/qr/decoder.ts +575 -0
  164. package/src/ts/qr/detector.ts +630 -0
  165. package/src/ts/qr/encoder.ts +958 -0
  166. package/src/ts/qr/index.ts +44 -0
  167. package/src/ts/qr/tables.ts +737 -0
  168. package/src/ts/render/image-data.ts +125 -0
  169. package/src/ts/render/index.ts +130 -0
  170. package/src/ts/render/options.ts +160 -0
  171. package/src/ts/render/png.ts +295 -0
  172. package/src/ts/render/svg.ts +120 -0
  173. package/src/ts/render/webgl.ts +206 -0
  174. package/src/ts/render/webgpu.ts +369 -0
  175. package/src/ts/rmqr/decoder.ts +101 -0
  176. package/src/ts/rmqr/detector.ts +90 -0
  177. package/src/ts/rmqr/encoder.ts +172 -0
  178. package/src/ts/rmqr/index.ts +37 -0
  179. package/src/ts/rmqr/tables.ts +154 -0
@@ -27,65 +27,76 @@
27
27
  *
28
28
  * Original work. No code from any other barcode implementation.
29
29
  */
30
-
31
30
  import { BitMatrix } from '../core/bit-matrix.js';
32
31
  import { EncodeError } from '../core/errors.js';
33
32
  import { compactPdf417 } from './compaction.js';
34
33
  import { pdf417ErrorCorrection, pdf417EccLength } from './error-correction.js';
35
34
  import { pdf417PatternForCodeword } from './tables.js';
36
-
37
35
  const START = '81111113';
38
36
  const STOP = '711311121';
39
-
40
37
  function append(matrix, y, x, sequence, height) {
41
- let dark = true;
42
- for (const digit of sequence) {
43
- const width = digit.charCodeAt(0) - 48;
44
- if (dark) matrix.setRegion(x, y, width, height);
45
- x += width; dark = !dark;
46
- }
47
- return x;
38
+ let dark = true;
39
+ for (const digit of sequence) {
40
+ const width = digit.charCodeAt(0) - 48;
41
+ if (dark)
42
+ matrix.setRegion(x, y, width, height);
43
+ x += width;
44
+ dark = !dark;
45
+ }
46
+ return x;
48
47
  }
49
48
  function patternSequence(pattern) { return pattern.toString(2).padStart(17, '0').replace(/0+|1+/g, (run) => String(run.length)); }
50
49
  function indicators(row, rows, cols, level) {
51
- const group = Math.floor(row / 3), y = Math.floor((rows - 1) / 3), z = level * 3 + (rows - 1) % 3, v = cols - 1;
52
- if (row % 3 === 0) return [30 * group + y, 30 * group + v];
53
- if (row % 3 === 1) return [30 * group + z, 30 * group + y];
54
- return [30 * group + v, 30 * group + z];
50
+ const group = Math.floor(row / 3), y = Math.floor((rows - 1) / 3), z = level * 3 + (rows - 1) % 3, v = cols - 1;
51
+ if (row % 3 === 0)
52
+ return [30 * group + y, 30 * group + v];
53
+ if (row % 3 === 1)
54
+ return [30 * group + z, 30 * group + y];
55
+ return [30 * group + v, 30 * group + z];
55
56
  }
56
57
  function dimensions(needed, level, options) {
57
- for (const [name, value, min, max] of [['rows', options.rows, 3, 90], ['columns', options.columns, 1, 30]]) {
58
- if (value !== undefined && (!Number.isInteger(value) || value < min || value > max)) throw new EncodeError(`PDF417: ${name} must be an integer in ${min}..${max}`);
59
- }
60
- if (options.aspectRatio !== undefined && (!Number.isFinite(options.aspectRatio) || options.aspectRatio <= 0)) throw new EncodeError('PDF417: aspectRatio must be positive');
61
- const ecc = pdf417EccLength(level); let best = null;
62
- for (let rows = options.rows ?? 3; rows <= (options.rows ?? 90); rows++) for (let cols = options.columns ?? 1; cols <= (options.columns ?? 30); cols++) {
63
- if (rows < 3 || rows * cols > 928 || rows * cols - ecc < needed) continue;
64
- const ratio = (69 + cols * 17) / (rows * (options.rowHeight ?? 3));
65
- const score = (rows * cols - ecc - needed) * 10 + Math.abs(ratio - (options.aspectRatio ?? 3));
66
- if (!best || score < best.score) best = { rows, cols, score };
67
- }
68
- if (!best) throw new EncodeError('PDF417: payload does not fit the requested dimensions and error correction level');
69
- return best;
58
+ for (const [name, value, min, max] of [['rows', options.rows, 3, 90], ['columns', options.columns, 1, 30]]) {
59
+ if (value !== undefined && (!Number.isInteger(value) || value < min || value > max))
60
+ throw new EncodeError(`PDF417: ${name} must be an integer in ${min}..${max}`);
61
+ }
62
+ if (options.aspectRatio !== undefined && (!Number.isFinite(options.aspectRatio) || options.aspectRatio <= 0))
63
+ throw new EncodeError('PDF417: aspectRatio must be positive');
64
+ const ecc = pdf417EccLength(level);
65
+ let best = null;
66
+ for (let rows = options.rows ?? 3; rows <= (options.rows ?? 90); rows++)
67
+ for (let cols = options.columns ?? 1; cols <= (options.columns ?? 30); cols++) {
68
+ if (rows < 3 || rows * cols > 928 || rows * cols - ecc < needed)
69
+ continue;
70
+ const ratio = (69 + cols * 17) / (rows * (options.rowHeight ?? 3));
71
+ const score = (rows * cols - ecc - needed) * 10 + Math.abs(ratio - (options.aspectRatio ?? 3));
72
+ if (!best || score < best.score)
73
+ best = { rows, cols, score };
74
+ }
75
+ if (!best)
76
+ throw new EncodeError('PDF417: payload does not fit the requested dimensions and error correction level');
77
+ return best;
70
78
  }
71
-
72
79
  export function encodePDF417(value, options = {}) {
73
- const level = options.eccLevel ?? 2, rowHeight = options.rowHeight ?? 3;
74
- if (!Number.isInteger(rowHeight) || rowHeight < 3) throw new EncodeError('PDF417: rowHeight must be an integer of at least 3');
75
- const payload = compactPdf417(value, { compaction: options.compaction });
76
- const { rows, cols } = dimensions(payload.length + 1, level, { ...options, rowHeight });
77
- const eccLength = pdf417EccLength(level), dataLength = rows * cols - eccLength;
78
- const data = [dataLength, ...payload]; while (data.length < dataLength) data.push(900);
79
- const codewords = data.concat(pdf417ErrorCorrection(data, level));
80
- const matrix = new BitMatrix(69 + cols * 17, rows * rowHeight);
81
- for (let row = 0; row < rows; row++) {
82
- const y = row * rowHeight, cluster = (row % 3) * 3, [left, right] = indicators(row, rows, cols, level);
83
- let x = append(matrix, y, 0, START, rowHeight);
84
- x = append(matrix, y, x, patternSequence(pdf417PatternForCodeword(left, cluster)), rowHeight);
85
- for (let col = 0; col < cols; col++) x = append(matrix, y, x, patternSequence(pdf417PatternForCodeword(codewords[row * cols + col], cluster)), rowHeight);
86
- x = append(matrix, y, x, patternSequence(pdf417PatternForCodeword(right, cluster)), rowHeight);
87
- append(matrix, y, x, STOP, rowHeight);
88
- }
89
- matrix.pdf417 = { rows, columns: cols, eccLevel: level, rowHeight, codewords };
90
- return matrix;
80
+ const level = options.eccLevel ?? 2, rowHeight = options.rowHeight ?? 3;
81
+ if (!Number.isInteger(rowHeight) || rowHeight < 3)
82
+ throw new EncodeError('PDF417: rowHeight must be an integer of at least 3');
83
+ const payload = compactPdf417(value, { compaction: options.compaction });
84
+ const { rows, cols } = dimensions(payload.length + 1, level, { ...options, rowHeight });
85
+ const eccLength = pdf417EccLength(level), dataLength = rows * cols - eccLength;
86
+ const data = [dataLength, ...payload];
87
+ while (data.length < dataLength)
88
+ data.push(900);
89
+ const codewords = data.concat(pdf417ErrorCorrection(data, level));
90
+ const matrix = new BitMatrix(69 + cols * 17, rows * rowHeight);
91
+ for (let row = 0; row < rows; row++) {
92
+ const y = row * rowHeight, cluster = (row % 3) * 3, [left, right] = indicators(row, rows, cols, level);
93
+ let x = append(matrix, y, 0, START, rowHeight);
94
+ x = append(matrix, y, x, patternSequence(pdf417PatternForCodeword(left, cluster)), rowHeight);
95
+ for (let col = 0; col < cols; col++)
96
+ x = append(matrix, y, x, patternSequence(pdf417PatternForCodeword(codewords[row * cols + col], cluster)), rowHeight);
97
+ x = append(matrix, y, x, patternSequence(pdf417PatternForCodeword(right, cluster)), rowHeight);
98
+ append(matrix, y, x, STOP, rowHeight);
99
+ }
100
+ matrix.pdf417 = { rows, columns: cols, eccLevel: level, rowHeight, codewords };
101
+ return matrix;
91
102
  }
@@ -27,21 +27,18 @@
27
27
  *
28
28
  * Original work. No code from any other barcode implementation.
29
29
  */
30
-
31
30
  import { EncodeError } from '../core/errors.js';
32
31
  import { GF929 } from '../core/galois-field.js';
33
32
  import { rsDecode, rsEncode } from '../core/reed-solomon.js';
34
-
35
33
  export function pdf417EccLength(level) {
36
- if (!Number.isInteger(level) || level < 0 || level > 8) throw new EncodeError('PDF417: error correction level must be in 0..8');
37
- return 1 << (level + 1);
34
+ if (!Number.isInteger(level) || level < 0 || level > 8)
35
+ throw new EncodeError('PDF417: error correction level must be in 0..8');
36
+ return 1 << (level + 1);
38
37
  }
39
-
40
38
  export function pdf417ErrorCorrection(data, level) {
41
- return rsEncode(data, pdf417EccLength(level), GF929, 1);
39
+ return rsEncode(data, pdf417EccLength(level), GF929, 1);
42
40
  }
43
-
44
41
  /** Correct PDF417 codewords, optionally marking unreadable codewords as erasures. */
45
42
  export function pdf417CorrectErrors(codewords, level, erasures = []) {
46
- return rsDecode(codewords, pdf417EccLength(level), GF929, 1, erasures);
43
+ return rsDecode(codewords, pdf417EccLength(level), GF929, 1, erasures);
47
44
  }