@sythos/js_barcode_universal 1.5.8 → 1.5.9

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 +17 -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,7 +27,6 @@
27
27
  *
28
28
  * Original work. No code from any other barcode implementation.
29
29
  */
30
-
31
30
  /**
32
31
  * Finite field arithmetic.
33
32
  *
@@ -56,150 +55,137 @@
56
55
  *
57
56
  * @module core/galois-field
58
57
  */
59
-
60
58
  export class GaloisField {
61
- /**
62
- * @param {object} opts
63
- * @param {number} opts.size Field order: 2^m for binary, p for prime.
64
- * @param {boolean} [opts.prime] True for a prime field (mod arithmetic).
65
- * @param {number} [opts.primitive] Primitive polynomial, binary fields only.
66
- * @param {number} [opts.generator] Multiplicative generator. Defaults to 2
67
- * for binary fields (x), and must be given explicitly for prime fields.
68
- * @param {string} [opts.name]
69
- */
70
- constructor({ size, prime = false, primitive = 0, generator = 2, name = '' }) {
71
- this.size = size;
72
- this.prime = prime;
73
- this.primitive = primitive;
74
- this.generator = generator;
75
- this.name = name || (prime ? `GF(${size})` : `GF(2^${Math.log2(size)})`);
76
-
77
- /** Multiplicative order: every non-zero element is generator^i for some i < order. */
78
- this.order = size - 1;
79
-
80
- const exp = new Int32Array(this.order * 2);
81
- const log = new Int32Array(size).fill(-1);
82
-
83
- let x = 1;
84
- for (let i = 0; i < this.order; i++) {
85
- exp[i] = x;
86
- log[x] = i;
87
- if (prime) {
88
- x = (x * generator) % size;
89
- } else {
90
- x <<= 1;
91
- if (x >= size) x ^= primitive;
92
- }
59
+ /**
60
+ * @param {object} opts
61
+ * @param {number} opts.size Field order: 2^m for binary, p for prime.
62
+ * @param {boolean} [opts.prime] True for a prime field (mod arithmetic).
63
+ * @param {number} [opts.primitive] Primitive polynomial, binary fields only.
64
+ * @param {number} [opts.generator] Multiplicative generator. Defaults to 2
65
+ * for binary fields (x), and must be given explicitly for prime fields.
66
+ * @param {string} [opts.name]
67
+ */
68
+ constructor({ size, prime = false, primitive = 0, generator = 2, name = '' }) {
69
+ this.size = size;
70
+ this.prime = prime;
71
+ this.primitive = primitive;
72
+ this.generator = generator;
73
+ this.name = name || (prime ? `GF(${size})` : `GF(2^${Math.log2(size)})`);
74
+ /** Multiplicative order: every non-zero element is generator^i for some i < order. */
75
+ this.order = size - 1;
76
+ const exp = new Int32Array(this.order * 2);
77
+ const log = new Int32Array(size).fill(-1);
78
+ let x = 1;
79
+ for (let i = 0; i < this.order; i++) {
80
+ exp[i] = x;
81
+ log[x] = i;
82
+ if (prime) {
83
+ x = (x * generator) % size;
84
+ }
85
+ else {
86
+ x <<= 1;
87
+ if (x >= size)
88
+ x ^= primitive;
89
+ }
90
+ }
91
+ // Wrapped copy lets mul() skip a modulo on the common path.
92
+ for (let i = 0; i < this.order; i++)
93
+ exp[this.order + i] = exp[i];
94
+ // A short cycle still returns to 1 after `order` steps whenever its length
95
+ // divides `order`, so "did we end at 1" does not detect a bad generator.
96
+ // The reliable test is coverage: a true generator visits every non-zero
97
+ // element exactly once, leaving no -1 in the log table.
98
+ for (let v = 1; v < size; v++) {
99
+ if (log[v] === -1) {
100
+ throw new Error(`${this.name}: generator ${generator} does not generate the ` +
101
+ `multiplicative group (element ${v} is unreachable). ` +
102
+ (prime ? 'Choose a primitive root.' : 'Check the primitive polynomial.'));
103
+ }
104
+ }
105
+ this.expTable = exp;
106
+ this.logTable = log;
93
107
  }
94
- // Wrapped copy lets mul() skip a modulo on the common path.
95
- for (let i = 0; i < this.order; i++) exp[this.order + i] = exp[i];
96
-
97
- // A short cycle still returns to 1 after `order` steps whenever its length
98
- // divides `order`, so "did we end at 1" does not detect a bad generator.
99
- // The reliable test is coverage: a true generator visits every non-zero
100
- // element exactly once, leaving no -1 in the log table.
101
- for (let v = 1; v < size; v++) {
102
- if (log[v] === -1) {
103
- throw new Error(
104
- `${this.name}: generator ${generator} does not generate the ` +
105
- `multiplicative group (element ${v} is unreachable). ` +
106
- (prime ? 'Choose a primitive root.' : 'Check the primitive polynomial.')
107
- );
108
- }
108
+ /** Additive identity is 0 and multiplicative identity is 1 in every field here. */
109
+ get zero() { return 0; }
110
+ get one() { return 1; }
111
+ /**
112
+ * a + b.
113
+ * @param {number} a @param {number} b @returns {number}
114
+ */
115
+ add(a, b) {
116
+ return this.prime ? (a + b) % this.size : a ^ b;
117
+ }
118
+ /**
119
+ * a - b. Distinct from add() in prime fields — see the module note.
120
+ * @param {number} a @param {number} b @returns {number}
121
+ */
122
+ sub(a, b) {
123
+ return this.prime ? (a - b + this.size) % this.size : a ^ b;
124
+ }
125
+ /**
126
+ * -a.
127
+ * @param {number} a @returns {number}
128
+ */
129
+ neg(a) {
130
+ return this.prime ? (this.size - a) % this.size : a;
131
+ }
132
+ /**
133
+ * a * b.
134
+ * @param {number} a @param {number} b @returns {number}
135
+ */
136
+ mul(a, b) {
137
+ if (a === 0 || b === 0)
138
+ return 0;
139
+ return this.expTable[this.logTable[a] + this.logTable[b]];
140
+ }
141
+ /**
142
+ * a / b.
143
+ * @param {number} a @param {number} b @returns {number}
144
+ */
145
+ div(a, b) {
146
+ if (b === 0)
147
+ throw new Error(`${this.name}: division by zero`);
148
+ if (a === 0)
149
+ return 0;
150
+ return this.expTable[this.logTable[a] - this.logTable[b] + this.order];
151
+ }
152
+ /**
153
+ * 1 / a.
154
+ * @param {number} a @returns {number}
155
+ */
156
+ inv(a) {
157
+ if (a === 0)
158
+ throw new Error(`${this.name}: zero has no inverse`);
159
+ return this.expTable[this.order - this.logTable[a]];
160
+ }
161
+ /**
162
+ * generator^i, for any integer i (negative included).
163
+ * @param {number} i @returns {number}
164
+ */
165
+ exp(i) {
166
+ let k = i % this.order;
167
+ if (k < 0)
168
+ k += this.order;
169
+ return this.expTable[k];
170
+ }
171
+ /**
172
+ * Discrete log base generator.
173
+ * @param {number} a @returns {number}
174
+ */
175
+ log(a) {
176
+ if (a === 0)
177
+ throw new Error(`${this.name}: log of zero`);
178
+ return this.logTable[a];
109
179
  }
110
-
111
- this.expTable = exp;
112
- this.logTable = log;
113
- }
114
-
115
- /** Additive identity is 0 and multiplicative identity is 1 in every field here. */
116
- get zero() { return 0; }
117
- get one() { return 1; }
118
-
119
- /**
120
- * a + b.
121
- * @param {number} a @param {number} b @returns {number}
122
- */
123
- add(a, b) {
124
- return this.prime ? (a + b) % this.size : a ^ b;
125
- }
126
-
127
- /**
128
- * a - b. Distinct from add() in prime fields — see the module note.
129
- * @param {number} a @param {number} b @returns {number}
130
- */
131
- sub(a, b) {
132
- return this.prime ? (a - b + this.size) % this.size : a ^ b;
133
- }
134
-
135
- /**
136
- * -a.
137
- * @param {number} a @returns {number}
138
- */
139
- neg(a) {
140
- return this.prime ? (this.size - a) % this.size : a;
141
- }
142
-
143
- /**
144
- * a * b.
145
- * @param {number} a @param {number} b @returns {number}
146
- */
147
- mul(a, b) {
148
- if (a === 0 || b === 0) return 0;
149
- return this.expTable[this.logTable[a] + this.logTable[b]];
150
- }
151
-
152
- /**
153
- * a / b.
154
- * @param {number} a @param {number} b @returns {number}
155
- */
156
- div(a, b) {
157
- if (b === 0) throw new Error(`${this.name}: division by zero`);
158
- if (a === 0) return 0;
159
- return this.expTable[this.logTable[a] - this.logTable[b] + this.order];
160
- }
161
-
162
- /**
163
- * 1 / a.
164
- * @param {number} a @returns {number}
165
- */
166
- inv(a) {
167
- if (a === 0) throw new Error(`${this.name}: zero has no inverse`);
168
- return this.expTable[this.order - this.logTable[a]];
169
- }
170
-
171
- /**
172
- * generator^i, for any integer i (negative included).
173
- * @param {number} i @returns {number}
174
- */
175
- exp(i) {
176
- let k = i % this.order;
177
- if (k < 0) k += this.order;
178
- return this.expTable[k];
179
- }
180
-
181
- /**
182
- * Discrete log base generator.
183
- * @param {number} a @returns {number}
184
- */
185
- log(a) {
186
- if (a === 0) throw new Error(`${this.name}: log of zero`);
187
- return this.logTable[a];
188
- }
189
180
  }
190
-
191
181
  /** QR Code, Data Matrix uses its own — see below. x^8 + x^4 + x^3 + x^2 + 1 */
192
182
  export const GF256_QR = new GaloisField({ size: 256, primitive: 0x011d, name: 'GF(256)/QR' });
193
-
194
183
  /** Data Matrix ECC200. x^8 + x^5 + x^3 + x^2 + 1 */
195
184
  export const GF256_DM = new GaloisField({ size: 256, primitive: 0x012d, name: 'GF(256)/DataMatrix' });
196
-
197
185
  /** Aztec's eight-bit data field is algebraically identical to Data Matrix's. */
198
186
  export const GF256_AZTEC = GF256_DM;
199
-
200
187
  /** PDF417. Prime field; 3 is a primitive root modulo 929. */
201
188
  export const GF929 = new GaloisField({ size: 929, prime: true, generator: 3, name: 'GF(929)' });
202
-
203
189
  /** Aztec, by layer count. */
204
190
  export const GF16 = new GaloisField({ size: 16, primitive: 0x13, name: 'GF(16)' });
205
191
  export const GF64 = new GaloisField({ size: 64, primitive: 0x43, name: 'GF(64)' });
@@ -27,30 +27,13 @@
27
27
  *
28
28
  * Original work. No code from any other barcode implementation.
29
29
  */
30
-
31
30
  /**
32
31
  * Core primitives, re-exported.
33
32
  *
34
33
  * @module core
35
34
  */
36
-
37
35
  export { BitMatrix } from './bit-matrix.js';
38
36
  export { BitWriter, BitReader } from './bit-buffer.js';
39
- export {
40
- GaloisField,
41
- GF256_QR,
42
- GF256_DM,
43
- GF929,
44
- GF16,
45
- GF64,
46
- GF1024,
47
- GF4096,
48
- } from './galois-field.js';
37
+ export { GaloisField, GF256_QR, GF256_DM, GF929, GF16, GF64, GF1024, GF4096, } from './galois-field.js';
49
38
  export { rsEncode, rsDecode, generatorPoly } from './reed-solomon.js';
50
- export {
51
- BarcodeError,
52
- EncodeError,
53
- NotFoundError,
54
- FormatError,
55
- ChecksumError,
56
- } from './errors.js';
39
+ export { BarcodeError, EncodeError, NotFoundError, FormatError, ChecksumError, } from './errors.js';