qr-core 1.0.0

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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +126 -0
  3. package/dist/bench/bench.d.ts +1 -0
  4. package/dist/bench/bench.js +38 -0
  5. package/dist/src/api/index.d.ts +9 -0
  6. package/dist/src/api/index.js +224 -0
  7. package/dist/src/core/bit-buffer.d.ts +11 -0
  8. package/dist/src/core/bit-buffer.js +53 -0
  9. package/dist/src/core/error.d.ts +8 -0
  10. package/dist/src/core/error.js +16 -0
  11. package/dist/src/core/gf.d.ts +4 -0
  12. package/dist/src/core/gf.js +52 -0
  13. package/dist/src/core/rs.d.ts +1 -0
  14. package/dist/src/core/rs.js +60 -0
  15. package/dist/src/encoding/bitstream.d.ts +7 -0
  16. package/dist/src/encoding/bitstream.js +68 -0
  17. package/dist/src/encoding/encoders.d.ts +13 -0
  18. package/dist/src/encoding/encoders.js +54 -0
  19. package/dist/src/encoding/interleave.d.ts +5 -0
  20. package/dist/src/encoding/interleave.js +49 -0
  21. package/dist/src/encoding/segmentation.d.ts +12 -0
  22. package/dist/src/encoding/segmentation.js +43 -0
  23. package/dist/src/index.d.ts +3 -0
  24. package/dist/src/index.js +3 -0
  25. package/dist/src/layout/patterns.d.ts +12 -0
  26. package/dist/src/layout/patterns.js +120 -0
  27. package/dist/src/mapping/zigzag.d.ts +5 -0
  28. package/dist/src/mapping/zigzag.js +28 -0
  29. package/dist/src/mask/patterns.d.ts +6 -0
  30. package/dist/src/mask/patterns.js +13 -0
  31. package/dist/src/mask/penalty.d.ts +5 -0
  32. package/dist/src/mask/penalty.js +173 -0
  33. package/dist/src/mask/selection.d.ts +12 -0
  34. package/dist/src/mask/selection.js +178 -0
  35. package/dist/src/matrix/bit-matrix.d.ts +46 -0
  36. package/dist/src/matrix/bit-matrix.js +139 -0
  37. package/dist/src/spec/bch.d.ts +11 -0
  38. package/dist/src/spec/bch.js +30 -0
  39. package/dist/src/spec/constants.d.ts +40 -0
  40. package/dist/src/spec/constants.js +37 -0
  41. package/dist/src/spec/tables.d.ts +20 -0
  42. package/dist/src/spec/tables.js +1099 -0
  43. package/dist/src/strategies/index.d.ts +3 -0
  44. package/dist/src/strategies/index.js +3 -0
  45. package/dist/src/strategies/mask.d.ts +16 -0
  46. package/dist/src/strategies/mask.js +9 -0
  47. package/dist/src/strategies/segmentation.d.ts +12 -0
  48. package/dist/src/strategies/segmentation.js +41 -0
  49. package/dist/src/strategies/version.d.ts +12 -0
  50. package/dist/src/strategies/version.js +22 -0
  51. package/dist/src/types/index.d.ts +51 -0
  52. package/dist/src/types/index.js +1 -0
  53. package/dist/tests/golden/golden.test.d.ts +1 -0
  54. package/dist/tests/golden/golden.test.js +26 -0
  55. package/dist/tests/unit/api.test.d.ts +1 -0
  56. package/dist/tests/unit/api.test.js +35 -0
  57. package/dist/tests/unit/bit-matrix.test.d.ts +1 -0
  58. package/dist/tests/unit/bit-matrix.test.js +46 -0
  59. package/dist/tests/unit/core.test.d.ts +1 -0
  60. package/dist/tests/unit/core.test.js +88 -0
  61. package/dist/tests/unit/encoding.test.d.ts +1 -0
  62. package/dist/tests/unit/encoding.test.js +63 -0
  63. package/dist/tests/unit/layout.test.d.ts +1 -0
  64. package/dist/tests/unit/layout.test.js +62 -0
  65. package/dist/tests/unit/masking.test.d.ts +1 -0
  66. package/dist/tests/unit/masking.test.js +31 -0
  67. package/package.json +45 -0
@@ -0,0 +1,1099 @@
1
+ /**
2
+ * Alignment pattern center coordinates for each version (1-40)
3
+ */
4
+ export const ALIGNMENT_PATTERN_POSITIONS = [
5
+ [],
6
+ [],
7
+ [6, 18],
8
+ [6, 22],
9
+ [6, 26],
10
+ [6, 30],
11
+ [6, 34],
12
+ [6, 22, 38],
13
+ [6, 24, 42],
14
+ [6, 26, 46],
15
+ [6, 28, 50],
16
+ [6, 30, 54],
17
+ [6, 32, 58],
18
+ [6, 34, 62],
19
+ [6, 26, 46, 66],
20
+ [6, 26, 48, 70],
21
+ [6, 26, 50, 74],
22
+ [6, 30, 54, 78],
23
+ [6, 30, 56, 82],
24
+ [6, 30, 58, 86],
25
+ [6, 34, 62, 90],
26
+ [6, 28, 50, 72, 94],
27
+ [6, 26, 50, 74, 98],
28
+ [6, 30, 54, 78, 102],
29
+ [6, 28, 54, 80, 106],
30
+ [6, 32, 58, 84, 110],
31
+ [6, 30, 58, 86, 114],
32
+ [6, 34, 62, 90, 118],
33
+ [6, 26, 50, 74, 98, 122],
34
+ [6, 30, 54, 78, 102, 126],
35
+ [6, 26, 52, 78, 104, 130],
36
+ [6, 30, 56, 82, 108, 134],
37
+ [6, 34, 60, 86, 112, 138],
38
+ [6, 30, 58, 86, 114, 142],
39
+ [6, 34, 62, 90, 118, 146],
40
+ [6, 30, 54, 78, 102, 126, 150],
41
+ [6, 24, 50, 76, 102, 128, 154],
42
+ [6, 28, 54, 80, 106, 132, 158],
43
+ [6, 32, 58, 84, 110, 136, 162],
44
+ [6, 26, 54, 82, 110, 138, 166],
45
+ [6, 30, 58, 86, 114, 142, 170],
46
+ ];
47
+ /**
48
+ * ECC capacity table for V1 and V2.
49
+ */
50
+ // Full ECC table for versions 1-40
51
+ export const ECC_TABLE = {
52
+ 1: {
53
+ L: {
54
+ totalCodewords: 26,
55
+ eccPerBlock: 7,
56
+ group1: { numBlocks: 1, dataCodewords: 19 },
57
+ group2: { numBlocks: 0, dataCodewords: 0 },
58
+ },
59
+ M: {
60
+ totalCodewords: 26,
61
+ eccPerBlock: 10,
62
+ group1: { numBlocks: 1, dataCodewords: 16 },
63
+ group2: { numBlocks: 0, dataCodewords: 0 },
64
+ },
65
+ Q: {
66
+ totalCodewords: 26,
67
+ eccPerBlock: 13,
68
+ group1: { numBlocks: 1, dataCodewords: 13 },
69
+ group2: { numBlocks: 0, dataCodewords: 0 },
70
+ },
71
+ H: {
72
+ totalCodewords: 26,
73
+ eccPerBlock: 17,
74
+ group1: { numBlocks: 1, dataCodewords: 9 },
75
+ group2: { numBlocks: 0, dataCodewords: 0 },
76
+ },
77
+ },
78
+ 2: {
79
+ L: {
80
+ totalCodewords: 44,
81
+ eccPerBlock: 10,
82
+ group1: { numBlocks: 1, dataCodewords: 34 },
83
+ group2: { numBlocks: 0, dataCodewords: 0 },
84
+ },
85
+ M: {
86
+ totalCodewords: 44,
87
+ eccPerBlock: 16,
88
+ group1: { numBlocks: 1, dataCodewords: 28 },
89
+ group2: { numBlocks: 0, dataCodewords: 0 },
90
+ },
91
+ Q: {
92
+ totalCodewords: 44,
93
+ eccPerBlock: 22,
94
+ group1: { numBlocks: 1, dataCodewords: 22 },
95
+ group2: { numBlocks: 0, dataCodewords: 0 },
96
+ },
97
+ H: {
98
+ totalCodewords: 44,
99
+ eccPerBlock: 28,
100
+ group1: { numBlocks: 1, dataCodewords: 16 },
101
+ group2: { numBlocks: 0, dataCodewords: 0 },
102
+ },
103
+ },
104
+ 3: {
105
+ L: {
106
+ totalCodewords: 70,
107
+ eccPerBlock: 15,
108
+ group1: { numBlocks: 1, dataCodewords: 55 },
109
+ group2: { numBlocks: 0, dataCodewords: 0 },
110
+ },
111
+ M: {
112
+ totalCodewords: 70,
113
+ eccPerBlock: 26,
114
+ group1: { numBlocks: 1, dataCodewords: 44 },
115
+ group2: { numBlocks: 0, dataCodewords: 0 },
116
+ },
117
+ Q: {
118
+ totalCodewords: 70,
119
+ eccPerBlock: 18,
120
+ group1: { numBlocks: 2, dataCodewords: 17 },
121
+ group2: { numBlocks: 0, dataCodewords: 0 },
122
+ },
123
+ H: {
124
+ totalCodewords: 70,
125
+ eccPerBlock: 22,
126
+ group1: { numBlocks: 2, dataCodewords: 13 },
127
+ group2: { numBlocks: 0, dataCodewords: 0 },
128
+ },
129
+ },
130
+ 4: {
131
+ L: {
132
+ totalCodewords: 100,
133
+ eccPerBlock: 20,
134
+ group1: { numBlocks: 1, dataCodewords: 80 },
135
+ group2: { numBlocks: 0, dataCodewords: 0 },
136
+ },
137
+ M: {
138
+ totalCodewords: 100,
139
+ eccPerBlock: 18,
140
+ group1: { numBlocks: 2, dataCodewords: 32 },
141
+ group2: { numBlocks: 0, dataCodewords: 0 },
142
+ },
143
+ Q: {
144
+ totalCodewords: 100,
145
+ eccPerBlock: 26,
146
+ group1: { numBlocks: 2, dataCodewords: 24 },
147
+ group2: { numBlocks: 0, dataCodewords: 0 },
148
+ },
149
+ H: {
150
+ totalCodewords: 100,
151
+ eccPerBlock: 16,
152
+ group1: { numBlocks: 4, dataCodewords: 9 },
153
+ group2: { numBlocks: 0, dataCodewords: 0 },
154
+ },
155
+ },
156
+ 5: {
157
+ L: {
158
+ totalCodewords: 134,
159
+ eccPerBlock: 26,
160
+ group1: { numBlocks: 1, dataCodewords: 108 },
161
+ group2: { numBlocks: 0, dataCodewords: 0 },
162
+ },
163
+ M: {
164
+ totalCodewords: 134,
165
+ eccPerBlock: 24,
166
+ group1: { numBlocks: 2, dataCodewords: 43 },
167
+ group2: { numBlocks: 0, dataCodewords: 0 },
168
+ },
169
+ Q: {
170
+ totalCodewords: 134,
171
+ eccPerBlock: 18,
172
+ group1: { numBlocks: 2, dataCodewords: 15 },
173
+ group2: { numBlocks: 2, dataCodewords: 16 },
174
+ },
175
+ H: {
176
+ totalCodewords: 134,
177
+ eccPerBlock: 22,
178
+ group1: { numBlocks: 2, dataCodewords: 11 },
179
+ group2: { numBlocks: 2, dataCodewords: 12 },
180
+ },
181
+ },
182
+ 6: {
183
+ L: {
184
+ totalCodewords: 172,
185
+ eccPerBlock: 18,
186
+ group1: { numBlocks: 2, dataCodewords: 68 },
187
+ group2: { numBlocks: 0, dataCodewords: 0 },
188
+ },
189
+ M: {
190
+ totalCodewords: 172,
191
+ eccPerBlock: 16,
192
+ group1: { numBlocks: 4, dataCodewords: 27 },
193
+ group2: { numBlocks: 0, dataCodewords: 0 },
194
+ },
195
+ Q: {
196
+ totalCodewords: 172,
197
+ eccPerBlock: 24,
198
+ group1: { numBlocks: 4, dataCodewords: 19 },
199
+ group2: { numBlocks: 0, dataCodewords: 0 },
200
+ },
201
+ H: {
202
+ totalCodewords: 172,
203
+ eccPerBlock: 28,
204
+ group1: { numBlocks: 4, dataCodewords: 15 },
205
+ group2: { numBlocks: 0, dataCodewords: 0 },
206
+ },
207
+ },
208
+ 7: {
209
+ L: {
210
+ totalCodewords: 196,
211
+ eccPerBlock: 20,
212
+ group1: { numBlocks: 2, dataCodewords: 78 },
213
+ group2: { numBlocks: 0, dataCodewords: 0 },
214
+ },
215
+ M: {
216
+ totalCodewords: 196,
217
+ eccPerBlock: 18,
218
+ group1: { numBlocks: 4, dataCodewords: 31 },
219
+ group2: { numBlocks: 0, dataCodewords: 0 },
220
+ },
221
+ Q: {
222
+ totalCodewords: 196,
223
+ eccPerBlock: 18,
224
+ group1: { numBlocks: 2, dataCodewords: 14 },
225
+ group2: { numBlocks: 4, dataCodewords: 15 },
226
+ },
227
+ H: {
228
+ totalCodewords: 196,
229
+ eccPerBlock: 26,
230
+ group1: { numBlocks: 4, dataCodewords: 13 },
231
+ group2: { numBlocks: 1, dataCodewords: 14 },
232
+ },
233
+ },
234
+ 8: {
235
+ L: {
236
+ totalCodewords: 242,
237
+ eccPerBlock: 24,
238
+ group1: { numBlocks: 2, dataCodewords: 97 },
239
+ group2: { numBlocks: 0, dataCodewords: 0 },
240
+ },
241
+ M: {
242
+ totalCodewords: 242,
243
+ eccPerBlock: 22,
244
+ group1: { numBlocks: 2, dataCodewords: 38 },
245
+ group2: { numBlocks: 2, dataCodewords: 39 },
246
+ },
247
+ Q: {
248
+ totalCodewords: 242,
249
+ eccPerBlock: 22,
250
+ group1: { numBlocks: 4, dataCodewords: 18 },
251
+ group2: { numBlocks: 2, dataCodewords: 19 },
252
+ },
253
+ H: {
254
+ totalCodewords: 242,
255
+ eccPerBlock: 26,
256
+ group1: { numBlocks: 4, dataCodewords: 14 },
257
+ group2: { numBlocks: 2, dataCodewords: 15 },
258
+ },
259
+ },
260
+ 9: {
261
+ L: {
262
+ totalCodewords: 292,
263
+ eccPerBlock: 30,
264
+ group1: { numBlocks: 2, dataCodewords: 116 },
265
+ group2: { numBlocks: 0, dataCodewords: 0 },
266
+ },
267
+ M: {
268
+ totalCodewords: 292,
269
+ eccPerBlock: 22,
270
+ group1: { numBlocks: 3, dataCodewords: 36 },
271
+ group2: { numBlocks: 2, dataCodewords: 37 },
272
+ },
273
+ Q: {
274
+ totalCodewords: 292,
275
+ eccPerBlock: 20,
276
+ group1: { numBlocks: 4, dataCodewords: 16 },
277
+ group2: { numBlocks: 4, dataCodewords: 17 },
278
+ },
279
+ H: {
280
+ totalCodewords: 292,
281
+ eccPerBlock: 24,
282
+ group1: { numBlocks: 4, dataCodewords: 12 },
283
+ group2: { numBlocks: 4, dataCodewords: 13 },
284
+ },
285
+ },
286
+ 10: {
287
+ L: {
288
+ totalCodewords: 346,
289
+ eccPerBlock: 18,
290
+ group1: { numBlocks: 2, dataCodewords: 68 },
291
+ group2: { numBlocks: 2, dataCodewords: 69 },
292
+ },
293
+ M: {
294
+ totalCodewords: 346,
295
+ eccPerBlock: 26,
296
+ group1: { numBlocks: 4, dataCodewords: 43 },
297
+ group2: { numBlocks: 1, dataCodewords: 44 },
298
+ },
299
+ Q: {
300
+ totalCodewords: 346,
301
+ eccPerBlock: 24,
302
+ group1: { numBlocks: 6, dataCodewords: 19 },
303
+ group2: { numBlocks: 2, dataCodewords: 20 },
304
+ },
305
+ H: {
306
+ totalCodewords: 346,
307
+ eccPerBlock: 28,
308
+ group1: { numBlocks: 6, dataCodewords: 15 },
309
+ group2: { numBlocks: 2, dataCodewords: 16 },
310
+ },
311
+ },
312
+ 11: {
313
+ L: {
314
+ totalCodewords: 404,
315
+ eccPerBlock: 20,
316
+ group1: { numBlocks: 4, dataCodewords: 81 },
317
+ group2: { numBlocks: 0, dataCodewords: 0 },
318
+ },
319
+ M: {
320
+ totalCodewords: 404,
321
+ eccPerBlock: 30,
322
+ group1: { numBlocks: 1, dataCodewords: 50 },
323
+ group2: { numBlocks: 4, dataCodewords: 51 },
324
+ },
325
+ Q: {
326
+ totalCodewords: 404,
327
+ eccPerBlock: 28,
328
+ group1: { numBlocks: 4, dataCodewords: 22 },
329
+ group2: { numBlocks: 4, dataCodewords: 23 },
330
+ },
331
+ H: {
332
+ totalCodewords: 404,
333
+ eccPerBlock: 24,
334
+ group1: { numBlocks: 3, dataCodewords: 12 },
335
+ group2: { numBlocks: 8, dataCodewords: 13 },
336
+ },
337
+ },
338
+ 12: {
339
+ L: {
340
+ totalCodewords: 466,
341
+ eccPerBlock: 24,
342
+ group1: { numBlocks: 2, dataCodewords: 92 },
343
+ group2: { numBlocks: 2, dataCodewords: 93 },
344
+ },
345
+ M: {
346
+ totalCodewords: 466,
347
+ eccPerBlock: 22,
348
+ group1: { numBlocks: 6, dataCodewords: 36 },
349
+ group2: { numBlocks: 2, dataCodewords: 37 },
350
+ },
351
+ Q: {
352
+ totalCodewords: 466,
353
+ eccPerBlock: 26,
354
+ group1: { numBlocks: 4, dataCodewords: 20 },
355
+ group2: { numBlocks: 6, dataCodewords: 21 },
356
+ },
357
+ H: {
358
+ totalCodewords: 466,
359
+ eccPerBlock: 28,
360
+ group1: { numBlocks: 7, dataCodewords: 14 },
361
+ group2: { numBlocks: 4, dataCodewords: 15 },
362
+ },
363
+ },
364
+ 13: {
365
+ L: {
366
+ totalCodewords: 532,
367
+ eccPerBlock: 26,
368
+ group1: { numBlocks: 4, dataCodewords: 107 },
369
+ group2: { numBlocks: 0, dataCodewords: 0 },
370
+ },
371
+ M: {
372
+ totalCodewords: 532,
373
+ eccPerBlock: 22,
374
+ group1: { numBlocks: 8, dataCodewords: 37 },
375
+ group2: { numBlocks: 1, dataCodewords: 38 },
376
+ },
377
+ Q: {
378
+ totalCodewords: 532,
379
+ eccPerBlock: 24,
380
+ group1: { numBlocks: 8, dataCodewords: 20 },
381
+ group2: { numBlocks: 4, dataCodewords: 21 },
382
+ },
383
+ H: {
384
+ totalCodewords: 532,
385
+ eccPerBlock: 22,
386
+ group1: { numBlocks: 12, dataCodewords: 11 },
387
+ group2: { numBlocks: 4, dataCodewords: 12 },
388
+ },
389
+ },
390
+ 14: {
391
+ L: {
392
+ totalCodewords: 581,
393
+ eccPerBlock: 30,
394
+ group1: { numBlocks: 3, dataCodewords: 115 },
395
+ group2: { numBlocks: 1, dataCodewords: 116 },
396
+ },
397
+ M: {
398
+ totalCodewords: 581,
399
+ eccPerBlock: 24,
400
+ group1: { numBlocks: 4, dataCodewords: 40 },
401
+ group2: { numBlocks: 5, dataCodewords: 41 },
402
+ },
403
+ Q: {
404
+ totalCodewords: 581,
405
+ eccPerBlock: 20,
406
+ group1: { numBlocks: 11, dataCodewords: 16 },
407
+ group2: { numBlocks: 5, dataCodewords: 17 },
408
+ },
409
+ H: {
410
+ totalCodewords: 581,
411
+ eccPerBlock: 24,
412
+ group1: { numBlocks: 11, dataCodewords: 12 },
413
+ group2: { numBlocks: 5, dataCodewords: 13 },
414
+ },
415
+ },
416
+ 15: {
417
+ L: {
418
+ totalCodewords: 655,
419
+ eccPerBlock: 22,
420
+ group1: { numBlocks: 5, dataCodewords: 87 },
421
+ group2: { numBlocks: 1, dataCodewords: 88 },
422
+ },
423
+ M: {
424
+ totalCodewords: 655,
425
+ eccPerBlock: 24,
426
+ group1: { numBlocks: 5, dataCodewords: 41 },
427
+ group2: { numBlocks: 5, dataCodewords: 42 },
428
+ },
429
+ Q: {
430
+ totalCodewords: 655,
431
+ eccPerBlock: 30,
432
+ group1: { numBlocks: 5, dataCodewords: 24 },
433
+ group2: { numBlocks: 7, dataCodewords: 25 },
434
+ },
435
+ H: {
436
+ totalCodewords: 655,
437
+ eccPerBlock: 24,
438
+ group1: { numBlocks: 11, dataCodewords: 12 },
439
+ group2: { numBlocks: 7, dataCodewords: 13 },
440
+ },
441
+ },
442
+ 16: {
443
+ L: {
444
+ totalCodewords: 733,
445
+ eccPerBlock: 24,
446
+ group1: { numBlocks: 5, dataCodewords: 98 },
447
+ group2: { numBlocks: 1, dataCodewords: 99 },
448
+ },
449
+ M: {
450
+ totalCodewords: 733,
451
+ eccPerBlock: 28,
452
+ group1: { numBlocks: 7, dataCodewords: 45 },
453
+ group2: { numBlocks: 3, dataCodewords: 46 },
454
+ },
455
+ Q: {
456
+ totalCodewords: 733,
457
+ eccPerBlock: 24,
458
+ group1: { numBlocks: 15, dataCodewords: 19 },
459
+ group2: { numBlocks: 2, dataCodewords: 20 },
460
+ },
461
+ H: {
462
+ totalCodewords: 733,
463
+ eccPerBlock: 30,
464
+ group1: { numBlocks: 3, dataCodewords: 15 },
465
+ group2: { numBlocks: 13, dataCodewords: 16 },
466
+ },
467
+ },
468
+ 17: {
469
+ L: {
470
+ totalCodewords: 815,
471
+ eccPerBlock: 28,
472
+ group1: { numBlocks: 1, dataCodewords: 107 },
473
+ group2: { numBlocks: 5, dataCodewords: 108 },
474
+ },
475
+ M: {
476
+ totalCodewords: 815,
477
+ eccPerBlock: 28,
478
+ group1: { numBlocks: 10, dataCodewords: 46 },
479
+ group2: { numBlocks: 1, dataCodewords: 47 },
480
+ },
481
+ Q: {
482
+ totalCodewords: 815,
483
+ eccPerBlock: 28,
484
+ group1: { numBlocks: 1, dataCodewords: 22 },
485
+ group2: { numBlocks: 15, dataCodewords: 23 },
486
+ },
487
+ H: {
488
+ totalCodewords: 815,
489
+ eccPerBlock: 28,
490
+ group1: { numBlocks: 2, dataCodewords: 14 },
491
+ group2: { numBlocks: 17, dataCodewords: 15 },
492
+ },
493
+ },
494
+ 18: {
495
+ L: {
496
+ totalCodewords: 901,
497
+ eccPerBlock: 30,
498
+ group1: { numBlocks: 5, dataCodewords: 120 },
499
+ group2: { numBlocks: 1, dataCodewords: 121 },
500
+ },
501
+ M: {
502
+ totalCodewords: 901,
503
+ eccPerBlock: 26,
504
+ group1: { numBlocks: 9, dataCodewords: 43 },
505
+ group2: { numBlocks: 4, dataCodewords: 44 },
506
+ },
507
+ Q: {
508
+ totalCodewords: 901,
509
+ eccPerBlock: 28,
510
+ group1: { numBlocks: 17, dataCodewords: 22 },
511
+ group2: { numBlocks: 1, dataCodewords: 23 },
512
+ },
513
+ H: {
514
+ totalCodewords: 901,
515
+ eccPerBlock: 28,
516
+ group1: { numBlocks: 2, dataCodewords: 14 },
517
+ group2: { numBlocks: 19, dataCodewords: 15 },
518
+ },
519
+ },
520
+ 19: {
521
+ L: {
522
+ totalCodewords: 991,
523
+ eccPerBlock: 28,
524
+ group1: { numBlocks: 3, dataCodewords: 113 },
525
+ group2: { numBlocks: 4, dataCodewords: 114 },
526
+ },
527
+ M: {
528
+ totalCodewords: 991,
529
+ eccPerBlock: 26,
530
+ group1: { numBlocks: 3, dataCodewords: 44 },
531
+ group2: { numBlocks: 11, dataCodewords: 45 },
532
+ },
533
+ Q: {
534
+ totalCodewords: 991,
535
+ eccPerBlock: 26,
536
+ group1: { numBlocks: 17, dataCodewords: 21 },
537
+ group2: { numBlocks: 4, dataCodewords: 22 },
538
+ },
539
+ H: {
540
+ totalCodewords: 991,
541
+ eccPerBlock: 26,
542
+ group1: { numBlocks: 9, dataCodewords: 13 },
543
+ group2: { numBlocks: 16, dataCodewords: 14 },
544
+ },
545
+ },
546
+ 20: {
547
+ L: {
548
+ totalCodewords: 1085,
549
+ eccPerBlock: 28,
550
+ group1: { numBlocks: 3, dataCodewords: 107 },
551
+ group2: { numBlocks: 5, dataCodewords: 108 },
552
+ },
553
+ M: {
554
+ totalCodewords: 1085,
555
+ eccPerBlock: 26,
556
+ group1: { numBlocks: 3, dataCodewords: 41 },
557
+ group2: { numBlocks: 13, dataCodewords: 42 },
558
+ },
559
+ Q: {
560
+ totalCodewords: 1085,
561
+ eccPerBlock: 30,
562
+ group1: { numBlocks: 15, dataCodewords: 24 },
563
+ group2: { numBlocks: 5, dataCodewords: 25 },
564
+ },
565
+ H: {
566
+ totalCodewords: 1085,
567
+ eccPerBlock: 28,
568
+ group1: { numBlocks: 15, dataCodewords: 15 },
569
+ group2: { numBlocks: 10, dataCodewords: 16 },
570
+ },
571
+ },
572
+ 21: {
573
+ L: {
574
+ totalCodewords: 1156,
575
+ eccPerBlock: 28,
576
+ group1: { numBlocks: 4, dataCodewords: 116 },
577
+ group2: { numBlocks: 4, dataCodewords: 117 },
578
+ },
579
+ M: {
580
+ totalCodewords: 1156,
581
+ eccPerBlock: 26,
582
+ group1: { numBlocks: 17, dataCodewords: 42 },
583
+ group2: { numBlocks: 0, dataCodewords: 0 },
584
+ },
585
+ Q: {
586
+ totalCodewords: 1156,
587
+ eccPerBlock: 28,
588
+ group1: { numBlocks: 17, dataCodewords: 22 },
589
+ group2: { numBlocks: 6, dataCodewords: 23 },
590
+ },
591
+ H: {
592
+ totalCodewords: 1156,
593
+ eccPerBlock: 30,
594
+ group1: { numBlocks: 19, dataCodewords: 16 },
595
+ group2: { numBlocks: 6, dataCodewords: 17 },
596
+ },
597
+ },
598
+ 22: {
599
+ L: {
600
+ totalCodewords: 1258,
601
+ eccPerBlock: 28,
602
+ group1: { numBlocks: 2, dataCodewords: 111 },
603
+ group2: { numBlocks: 7, dataCodewords: 112 },
604
+ },
605
+ M: {
606
+ totalCodewords: 1258,
607
+ eccPerBlock: 28,
608
+ group1: { numBlocks: 17, dataCodewords: 46 },
609
+ group2: { numBlocks: 0, dataCodewords: 0 },
610
+ },
611
+ Q: {
612
+ totalCodewords: 1258,
613
+ eccPerBlock: 30,
614
+ group1: { numBlocks: 7, dataCodewords: 24 },
615
+ group2: { numBlocks: 16, dataCodewords: 25 },
616
+ },
617
+ H: {
618
+ totalCodewords: 1258,
619
+ eccPerBlock: 24,
620
+ group1: { numBlocks: 34, dataCodewords: 13 },
621
+ group2: { numBlocks: 0, dataCodewords: 0 },
622
+ },
623
+ },
624
+ 23: {
625
+ L: {
626
+ totalCodewords: 1364,
627
+ eccPerBlock: 30,
628
+ group1: { numBlocks: 4, dataCodewords: 121 },
629
+ group2: { numBlocks: 5, dataCodewords: 122 },
630
+ },
631
+ M: {
632
+ totalCodewords: 1364,
633
+ eccPerBlock: 28,
634
+ group1: { numBlocks: 4, dataCodewords: 47 },
635
+ group2: { numBlocks: 14, dataCodewords: 48 },
636
+ },
637
+ Q: {
638
+ totalCodewords: 1364,
639
+ eccPerBlock: 30,
640
+ group1: { numBlocks: 11, dataCodewords: 24 },
641
+ group2: { numBlocks: 14, dataCodewords: 25 },
642
+ },
643
+ H: {
644
+ totalCodewords: 1364,
645
+ eccPerBlock: 30,
646
+ group1: { numBlocks: 16, dataCodewords: 15 },
647
+ group2: { numBlocks: 14, dataCodewords: 16 },
648
+ },
649
+ },
650
+ 24: {
651
+ L: {
652
+ totalCodewords: 1474,
653
+ eccPerBlock: 30,
654
+ group1: { numBlocks: 6, dataCodewords: 117 },
655
+ group2: { numBlocks: 4, dataCodewords: 118 },
656
+ },
657
+ M: {
658
+ totalCodewords: 1474,
659
+ eccPerBlock: 28,
660
+ group1: { numBlocks: 6, dataCodewords: 45 },
661
+ group2: { numBlocks: 14, dataCodewords: 46 },
662
+ },
663
+ Q: {
664
+ totalCodewords: 1474,
665
+ eccPerBlock: 30,
666
+ group1: { numBlocks: 11, dataCodewords: 24 },
667
+ group2: { numBlocks: 16, dataCodewords: 25 },
668
+ },
669
+ H: {
670
+ totalCodewords: 1474,
671
+ eccPerBlock: 30,
672
+ group1: { numBlocks: 30, dataCodewords: 16 },
673
+ group2: { numBlocks: 2, dataCodewords: 17 },
674
+ },
675
+ },
676
+ 25: {
677
+ L: {
678
+ totalCodewords: 1588,
679
+ eccPerBlock: 26,
680
+ group1: { numBlocks: 8, dataCodewords: 106 },
681
+ group2: { numBlocks: 4, dataCodewords: 107 },
682
+ },
683
+ M: {
684
+ totalCodewords: 1588,
685
+ eccPerBlock: 28,
686
+ group1: { numBlocks: 8, dataCodewords: 47 },
687
+ group2: { numBlocks: 13, dataCodewords: 48 },
688
+ },
689
+ Q: {
690
+ totalCodewords: 1588,
691
+ eccPerBlock: 30,
692
+ group1: { numBlocks: 7, dataCodewords: 24 },
693
+ group2: { numBlocks: 22, dataCodewords: 25 },
694
+ },
695
+ H: {
696
+ totalCodewords: 1588,
697
+ eccPerBlock: 30,
698
+ group1: { numBlocks: 22, dataCodewords: 15 },
699
+ group2: { numBlocks: 13, dataCodewords: 16 },
700
+ },
701
+ },
702
+ 26: {
703
+ L: {
704
+ totalCodewords: 1706,
705
+ eccPerBlock: 28,
706
+ group1: { numBlocks: 10, dataCodewords: 114 },
707
+ group2: { numBlocks: 2, dataCodewords: 115 },
708
+ },
709
+ M: {
710
+ totalCodewords: 1706,
711
+ eccPerBlock: 28,
712
+ group1: { numBlocks: 19, dataCodewords: 46 },
713
+ group2: { numBlocks: 4, dataCodewords: 47 },
714
+ },
715
+ Q: {
716
+ totalCodewords: 1706,
717
+ eccPerBlock: 28,
718
+ group1: { numBlocks: 28, dataCodewords: 22 },
719
+ group2: { numBlocks: 6, dataCodewords: 23 },
720
+ },
721
+ H: {
722
+ totalCodewords: 1706,
723
+ eccPerBlock: 30,
724
+ group1: { numBlocks: 33, dataCodewords: 16 },
725
+ group2: { numBlocks: 4, dataCodewords: 17 },
726
+ },
727
+ },
728
+ 27: {
729
+ L: {
730
+ totalCodewords: 1828,
731
+ eccPerBlock: 30,
732
+ group1: { numBlocks: 8, dataCodewords: 122 },
733
+ group2: { numBlocks: 4, dataCodewords: 123 },
734
+ },
735
+ M: {
736
+ totalCodewords: 1828,
737
+ eccPerBlock: 28,
738
+ group1: { numBlocks: 22, dataCodewords: 45 },
739
+ group2: { numBlocks: 3, dataCodewords: 46 },
740
+ },
741
+ Q: {
742
+ totalCodewords: 1828,
743
+ eccPerBlock: 30,
744
+ group1: { numBlocks: 8, dataCodewords: 23 },
745
+ group2: { numBlocks: 26, dataCodewords: 24 },
746
+ },
747
+ H: {
748
+ totalCodewords: 1828,
749
+ eccPerBlock: 30,
750
+ group1: { numBlocks: 12, dataCodewords: 15 },
751
+ group2: { numBlocks: 28, dataCodewords: 16 },
752
+ },
753
+ },
754
+ 28: {
755
+ L: {
756
+ totalCodewords: 1921,
757
+ eccPerBlock: 30,
758
+ group1: { numBlocks: 3, dataCodewords: 117 },
759
+ group2: { numBlocks: 10, dataCodewords: 118 },
760
+ },
761
+ M: {
762
+ totalCodewords: 1921,
763
+ eccPerBlock: 28,
764
+ group1: { numBlocks: 3, dataCodewords: 45 },
765
+ group2: { numBlocks: 23, dataCodewords: 46 },
766
+ },
767
+ Q: {
768
+ totalCodewords: 1921,
769
+ eccPerBlock: 30,
770
+ group1: { numBlocks: 4, dataCodewords: 24 },
771
+ group2: { numBlocks: 31, dataCodewords: 25 },
772
+ },
773
+ H: {
774
+ totalCodewords: 1921,
775
+ eccPerBlock: 30,
776
+ group1: { numBlocks: 11, dataCodewords: 15 },
777
+ group2: { numBlocks: 31, dataCodewords: 16 },
778
+ },
779
+ },
780
+ 29: {
781
+ L: {
782
+ totalCodewords: 2051,
783
+ eccPerBlock: 30,
784
+ group1: { numBlocks: 7, dataCodewords: 116 },
785
+ group2: { numBlocks: 7, dataCodewords: 117 },
786
+ },
787
+ M: {
788
+ totalCodewords: 2051,
789
+ eccPerBlock: 28,
790
+ group1: { numBlocks: 21, dataCodewords: 45 },
791
+ group2: { numBlocks: 7, dataCodewords: 46 },
792
+ },
793
+ Q: {
794
+ totalCodewords: 2051,
795
+ eccPerBlock: 30,
796
+ group1: { numBlocks: 1, dataCodewords: 23 },
797
+ group2: { numBlocks: 37, dataCodewords: 24 },
798
+ },
799
+ H: {
800
+ totalCodewords: 2051,
801
+ eccPerBlock: 30,
802
+ group1: { numBlocks: 19, dataCodewords: 15 },
803
+ group2: { numBlocks: 26, dataCodewords: 16 },
804
+ },
805
+ },
806
+ 30: {
807
+ L: {
808
+ totalCodewords: 2185,
809
+ eccPerBlock: 30,
810
+ group1: { numBlocks: 5, dataCodewords: 115 },
811
+ group2: { numBlocks: 10, dataCodewords: 116 },
812
+ },
813
+ M: {
814
+ totalCodewords: 2185,
815
+ eccPerBlock: 28,
816
+ group1: { numBlocks: 19, dataCodewords: 47 },
817
+ group2: { numBlocks: 10, dataCodewords: 48 },
818
+ },
819
+ Q: {
820
+ totalCodewords: 2185,
821
+ eccPerBlock: 30,
822
+ group1: { numBlocks: 15, dataCodewords: 24 },
823
+ group2: { numBlocks: 25, dataCodewords: 25 },
824
+ },
825
+ H: {
826
+ totalCodewords: 2185,
827
+ eccPerBlock: 30,
828
+ group1: { numBlocks: 23, dataCodewords: 15 },
829
+ group2: { numBlocks: 25, dataCodewords: 16 },
830
+ },
831
+ },
832
+ 31: {
833
+ L: {
834
+ totalCodewords: 2323,
835
+ eccPerBlock: 30,
836
+ group1: { numBlocks: 13, dataCodewords: 115 },
837
+ group2: { numBlocks: 3, dataCodewords: 116 },
838
+ },
839
+ M: {
840
+ totalCodewords: 2323,
841
+ eccPerBlock: 28,
842
+ group1: { numBlocks: 2, dataCodewords: 46 },
843
+ group2: { numBlocks: 29, dataCodewords: 47 },
844
+ },
845
+ Q: {
846
+ totalCodewords: 2323,
847
+ eccPerBlock: 30,
848
+ group1: { numBlocks: 42, dataCodewords: 24 },
849
+ group2: { numBlocks: 1, dataCodewords: 25 },
850
+ },
851
+ H: {
852
+ totalCodewords: 2323,
853
+ eccPerBlock: 30,
854
+ group1: { numBlocks: 23, dataCodewords: 15 },
855
+ group2: { numBlocks: 28, dataCodewords: 16 },
856
+ },
857
+ },
858
+ 32: {
859
+ L: {
860
+ totalCodewords: 2465,
861
+ eccPerBlock: 30,
862
+ group1: { numBlocks: 17, dataCodewords: 115 },
863
+ group2: { numBlocks: 0, dataCodewords: 0 },
864
+ },
865
+ M: {
866
+ totalCodewords: 2465,
867
+ eccPerBlock: 28,
868
+ group1: { numBlocks: 10, dataCodewords: 46 },
869
+ group2: { numBlocks: 23, dataCodewords: 47 },
870
+ },
871
+ Q: {
872
+ totalCodewords: 2465,
873
+ eccPerBlock: 30,
874
+ group1: { numBlocks: 10, dataCodewords: 24 },
875
+ group2: { numBlocks: 35, dataCodewords: 25 },
876
+ },
877
+ H: {
878
+ totalCodewords: 2465,
879
+ eccPerBlock: 30,
880
+ group1: { numBlocks: 19, dataCodewords: 15 },
881
+ group2: { numBlocks: 35, dataCodewords: 16 },
882
+ },
883
+ },
884
+ 33: {
885
+ L: {
886
+ totalCodewords: 2611,
887
+ eccPerBlock: 30,
888
+ group1: { numBlocks: 17, dataCodewords: 115 },
889
+ group2: { numBlocks: 1, dataCodewords: 116 },
890
+ },
891
+ M: {
892
+ totalCodewords: 2611,
893
+ eccPerBlock: 28,
894
+ group1: { numBlocks: 14, dataCodewords: 46 },
895
+ group2: { numBlocks: 21, dataCodewords: 47 },
896
+ },
897
+ Q: {
898
+ totalCodewords: 2611,
899
+ eccPerBlock: 30,
900
+ group1: { numBlocks: 29, dataCodewords: 24 },
901
+ group2: { numBlocks: 19, dataCodewords: 25 },
902
+ },
903
+ H: {
904
+ totalCodewords: 2611,
905
+ eccPerBlock: 30,
906
+ group1: { numBlocks: 11, dataCodewords: 15 },
907
+ group2: { numBlocks: 46, dataCodewords: 16 },
908
+ },
909
+ },
910
+ 34: {
911
+ L: {
912
+ totalCodewords: 2761,
913
+ eccPerBlock: 30,
914
+ group1: { numBlocks: 13, dataCodewords: 115 },
915
+ group2: { numBlocks: 6, dataCodewords: 116 },
916
+ },
917
+ M: {
918
+ totalCodewords: 2761,
919
+ eccPerBlock: 28,
920
+ group1: { numBlocks: 14, dataCodewords: 46 },
921
+ group2: { numBlocks: 23, dataCodewords: 47 },
922
+ },
923
+ Q: {
924
+ totalCodewords: 2761,
925
+ eccPerBlock: 30,
926
+ group1: { numBlocks: 44, dataCodewords: 24 },
927
+ group2: { numBlocks: 7, dataCodewords: 25 },
928
+ },
929
+ H: {
930
+ totalCodewords: 2761,
931
+ eccPerBlock: 30,
932
+ group1: { numBlocks: 59, dataCodewords: 16 },
933
+ group2: { numBlocks: 1, dataCodewords: 17 },
934
+ },
935
+ },
936
+ 35: {
937
+ L: {
938
+ totalCodewords: 2915,
939
+ eccPerBlock: 30,
940
+ group1: { numBlocks: 12, dataCodewords: 121 },
941
+ group2: { numBlocks: 7, dataCodewords: 122 },
942
+ },
943
+ M: {
944
+ totalCodewords: 2915,
945
+ eccPerBlock: 28,
946
+ group1: { numBlocks: 12, dataCodewords: 47 },
947
+ group2: { numBlocks: 26, dataCodewords: 48 },
948
+ },
949
+ Q: {
950
+ totalCodewords: 2915,
951
+ eccPerBlock: 30,
952
+ group1: { numBlocks: 39, dataCodewords: 24 },
953
+ group2: { numBlocks: 14, dataCodewords: 25 },
954
+ },
955
+ H: {
956
+ totalCodewords: 2915,
957
+ eccPerBlock: 30,
958
+ group1: { numBlocks: 22, dataCodewords: 15 },
959
+ group2: { numBlocks: 41, dataCodewords: 16 },
960
+ },
961
+ },
962
+ 36: {
963
+ L: {
964
+ totalCodewords: 3073,
965
+ eccPerBlock: 30,
966
+ group1: { numBlocks: 6, dataCodewords: 121 },
967
+ group2: { numBlocks: 14, dataCodewords: 122 },
968
+ },
969
+ M: {
970
+ totalCodewords: 3073,
971
+ eccPerBlock: 28,
972
+ group1: { numBlocks: 6, dataCodewords: 47 },
973
+ group2: { numBlocks: 34, dataCodewords: 48 },
974
+ },
975
+ Q: {
976
+ totalCodewords: 3073,
977
+ eccPerBlock: 30,
978
+ group1: { numBlocks: 46, dataCodewords: 24 },
979
+ group2: { numBlocks: 10, dataCodewords: 25 },
980
+ },
981
+ H: {
982
+ totalCodewords: 3073,
983
+ eccPerBlock: 30,
984
+ group1: { numBlocks: 2, dataCodewords: 15 },
985
+ group2: { numBlocks: 64, dataCodewords: 16 },
986
+ },
987
+ },
988
+ 37: {
989
+ L: {
990
+ totalCodewords: 3235,
991
+ eccPerBlock: 30,
992
+ group1: { numBlocks: 17, dataCodewords: 122 },
993
+ group2: { numBlocks: 4, dataCodewords: 123 },
994
+ },
995
+ M: {
996
+ totalCodewords: 3235,
997
+ eccPerBlock: 28,
998
+ group1: { numBlocks: 29, dataCodewords: 46 },
999
+ group2: { numBlocks: 14, dataCodewords: 47 },
1000
+ },
1001
+ Q: {
1002
+ totalCodewords: 3235,
1003
+ eccPerBlock: 30,
1004
+ group1: { numBlocks: 49, dataCodewords: 24 },
1005
+ group2: { numBlocks: 10, dataCodewords: 25 },
1006
+ },
1007
+ H: {
1008
+ totalCodewords: 3235,
1009
+ eccPerBlock: 30,
1010
+ group1: { numBlocks: 24, dataCodewords: 15 },
1011
+ group2: { numBlocks: 46, dataCodewords: 16 },
1012
+ },
1013
+ },
1014
+ 38: {
1015
+ L: {
1016
+ totalCodewords: 3401,
1017
+ eccPerBlock: 30,
1018
+ group1: { numBlocks: 4, dataCodewords: 122 },
1019
+ group2: { numBlocks: 18, dataCodewords: 123 },
1020
+ },
1021
+ M: {
1022
+ totalCodewords: 3401,
1023
+ eccPerBlock: 28,
1024
+ group1: { numBlocks: 13, dataCodewords: 46 },
1025
+ group2: { numBlocks: 32, dataCodewords: 47 },
1026
+ },
1027
+ Q: {
1028
+ totalCodewords: 3401,
1029
+ eccPerBlock: 30,
1030
+ group1: { numBlocks: 48, dataCodewords: 24 },
1031
+ group2: { numBlocks: 14, dataCodewords: 25 },
1032
+ },
1033
+ H: {
1034
+ totalCodewords: 3401,
1035
+ eccPerBlock: 30,
1036
+ group1: { numBlocks: 42, dataCodewords: 15 },
1037
+ group2: { numBlocks: 32, dataCodewords: 16 },
1038
+ },
1039
+ },
1040
+ 39: {
1041
+ L: {
1042
+ totalCodewords: 3571,
1043
+ eccPerBlock: 30,
1044
+ group1: { numBlocks: 20, dataCodewords: 117 },
1045
+ group2: { numBlocks: 4, dataCodewords: 118 },
1046
+ },
1047
+ M: {
1048
+ totalCodewords: 3571,
1049
+ eccPerBlock: 28,
1050
+ group1: { numBlocks: 40, dataCodewords: 47 },
1051
+ group2: { numBlocks: 7, dataCodewords: 48 },
1052
+ },
1053
+ Q: {
1054
+ totalCodewords: 3571,
1055
+ eccPerBlock: 30,
1056
+ group1: { numBlocks: 43, dataCodewords: 24 },
1057
+ group2: { numBlocks: 22, dataCodewords: 25 },
1058
+ },
1059
+ H: {
1060
+ totalCodewords: 3571,
1061
+ eccPerBlock: 30,
1062
+ group1: { numBlocks: 10, dataCodewords: 15 },
1063
+ group2: { numBlocks: 67, dataCodewords: 16 },
1064
+ },
1065
+ },
1066
+ 40: {
1067
+ L: {
1068
+ totalCodewords: 3745,
1069
+ eccPerBlock: 30,
1070
+ group1: { numBlocks: 19, dataCodewords: 127 },
1071
+ group2: { numBlocks: 6, dataCodewords: 128 },
1072
+ },
1073
+ M: {
1074
+ totalCodewords: 3745,
1075
+ eccPerBlock: 28,
1076
+ group1: { numBlocks: 18, dataCodewords: 47 },
1077
+ group2: { numBlocks: 31, dataCodewords: 48 },
1078
+ },
1079
+ Q: {
1080
+ totalCodewords: 3745,
1081
+ eccPerBlock: 30,
1082
+ group1: { numBlocks: 34, dataCodewords: 24 },
1083
+ group2: { numBlocks: 34, dataCodewords: 25 },
1084
+ },
1085
+ H: {
1086
+ totalCodewords: 3745,
1087
+ eccPerBlock: 30,
1088
+ group1: { numBlocks: 20, dataCodewords: 15 },
1089
+ group2: { numBlocks: 61, dataCodewords: 16 },
1090
+ },
1091
+ },
1092
+ };
1093
+ export function getDataCapacity(version, ecc) {
1094
+ const info = ECC_TABLE[version]?.[ecc];
1095
+ if (!info)
1096
+ return 0;
1097
+ return (info.group1.numBlocks * info.group1.dataCodewords +
1098
+ info.group2.numBlocks * info.group2.dataCodewords);
1099
+ }