@twin.org/qr 0.0.2-next.9 → 0.0.3-next.2

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 (66) hide show
  1. package/dist/es/data/qrAlphaNumeric.js +79 -0
  2. package/dist/es/data/qrAlphaNumeric.js.map +1 -0
  3. package/dist/es/data/qrByte8.js +63 -0
  4. package/dist/es/data/qrByte8.js.map +1 -0
  5. package/dist/es/data/qrDataBase.js +102 -0
  6. package/dist/es/data/qrDataBase.js.map +1 -0
  7. package/dist/es/data/qrNumber.js +73 -0
  8. package/dist/es/data/qrNumber.js.map +1 -0
  9. package/dist/es/helpers/bitBuffer.js +79 -0
  10. package/dist/es/helpers/bitBuffer.js.map +1 -0
  11. package/dist/es/helpers/mathHelper.js +71 -0
  12. package/dist/es/helpers/mathHelper.js.map +1 -0
  13. package/dist/es/helpers/polynomial.js +117 -0
  14. package/dist/es/helpers/polynomial.js.map +1 -0
  15. package/dist/es/helpers/qrHelper.js +269 -0
  16. package/dist/es/helpers/qrHelper.js.map +1 -0
  17. package/dist/es/helpers/rsBlock.js +293 -0
  18. package/dist/es/helpers/rsBlock.js.map +1 -0
  19. package/dist/es/index.js +12 -0
  20. package/dist/es/index.js.map +1 -0
  21. package/dist/es/models/IBitmapRendererOptions.js +2 -0
  22. package/dist/es/models/IBitmapRendererOptions.js.map +1 -0
  23. package/dist/es/models/IRendererOptions.js +4 -0
  24. package/dist/es/models/IRendererOptions.js.map +1 -0
  25. package/dist/es/models/ITextRendererOptions.js +2 -0
  26. package/dist/es/models/ITextRendererOptions.js.map +1 -0
  27. package/dist/es/models/errorCorrectLevel.js +26 -0
  28. package/dist/es/models/errorCorrectLevel.js.map +1 -0
  29. package/dist/es/models/maskPattern.js +42 -0
  30. package/dist/es/models/maskPattern.js.map +1 -0
  31. package/dist/es/models/qrCellData.js +2 -0
  32. package/dist/es/models/qrCellData.js.map +1 -0
  33. package/dist/es/models/qrDataMode.js +22 -0
  34. package/dist/es/models/qrDataMode.js.map +1 -0
  35. package/dist/es/qr.js +551 -0
  36. package/dist/es/qr.js.map +1 -0
  37. package/dist/es/renderers/jpegRenderer.js +80 -0
  38. package/dist/es/renderers/jpegRenderer.js.map +1 -0
  39. package/dist/es/renderers/pngRenderer.js +80 -0
  40. package/dist/es/renderers/pngRenderer.js.map +1 -0
  41. package/dist/es/renderers/textRenderer.js +65 -0
  42. package/dist/es/renderers/textRenderer.js.map +1 -0
  43. package/dist/types/data/qrAlphaNumeric.d.ts +6 -2
  44. package/dist/types/data/qrByte8.d.ts +2 -2
  45. package/dist/types/{models → data}/qrDataBase.d.ts +7 -4
  46. package/dist/types/data/qrNumber.d.ts +6 -2
  47. package/dist/types/helpers/mathHelper.d.ts +4 -0
  48. package/dist/types/helpers/polynomial.d.ts +1 -1
  49. package/dist/types/helpers/qrHelper.d.ts +7 -3
  50. package/dist/types/helpers/rsBlock.d.ts +5 -1
  51. package/dist/types/index.d.ts +9 -9
  52. package/dist/types/models/IBitmapRendererOptions.d.ts +1 -1
  53. package/dist/types/models/ITextRendererOptions.d.ts +1 -1
  54. package/dist/types/qr.d.ts +6 -2
  55. package/dist/types/renderers/jpegRenderer.d.ts +6 -2
  56. package/dist/types/renderers/pngRenderer.d.ts +6 -2
  57. package/dist/types/renderers/textRenderer.d.ts +6 -2
  58. package/docs/changelog.md +296 -0
  59. package/docs/reference/classes/JpegRenderer.md +8 -0
  60. package/docs/reference/classes/PngRenderer.md +8 -0
  61. package/docs/reference/classes/QR.md +8 -0
  62. package/docs/reference/classes/TextRenderer.md +8 -0
  63. package/locales/en.json +9 -9
  64. package/package.json +20 -11
  65. package/dist/cjs/index.cjs +0 -1999
  66. package/dist/esm/index.mjs +0 -1993
@@ -0,0 +1,269 @@
1
+ // Copyright 2024 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ /* eslint-disable no-bitwise */
4
+ import { GeneralError } from "@twin.org/core";
5
+ import { MathHelper } from "./mathHelper.js";
6
+ import { Polynomial } from "./polynomial.js";
7
+ import { ErrorCorrectLevel } from "../models/errorCorrectLevel.js";
8
+ import { MaskPattern } from "../models/maskPattern.js";
9
+ import { QRDataMode } from "../models/qrDataMode.js";
10
+ /**
11
+ * Helper methods for QR generation.
12
+ * Based on https://github.com/kazuhikoarase/qrcode-generator/ .
13
+ */
14
+ export class QRHelper {
15
+ /**
16
+ * Runtime name for the class.
17
+ */
18
+ static CLASS_NAME = "QRHelper";
19
+ /**
20
+ * @internal
21
+ */
22
+ static _PATTERN_POSITION_TABLE = [
23
+ [],
24
+ [6, 18],
25
+ [6, 22],
26
+ [6, 26],
27
+ [6, 30],
28
+ [6, 34],
29
+ [6, 22, 38],
30
+ [6, 24, 42],
31
+ [6, 26, 46],
32
+ [6, 28, 50],
33
+ [6, 30, 54],
34
+ [6, 32, 58],
35
+ [6, 34, 62],
36
+ [6, 26, 46, 66],
37
+ [6, 26, 48, 70],
38
+ [6, 26, 50, 74],
39
+ [6, 30, 54, 78],
40
+ [6, 30, 56, 82],
41
+ [6, 30, 58, 86],
42
+ [6, 34, 62, 90],
43
+ [6, 28, 50, 72, 94],
44
+ [6, 26, 50, 74, 98],
45
+ [6, 30, 54, 78, 102],
46
+ [6, 28, 54, 80, 106],
47
+ [6, 32, 58, 84, 110],
48
+ [6, 30, 58, 86, 114],
49
+ [6, 34, 62, 90, 118],
50
+ [6, 26, 50, 74, 98, 122],
51
+ [6, 30, 54, 78, 102, 126],
52
+ [6, 26, 52, 78, 104, 130],
53
+ [6, 30, 56, 82, 108, 134],
54
+ [6, 34, 60, 86, 112, 138],
55
+ [6, 30, 58, 86, 114, 142],
56
+ [6, 34, 62, 90, 118, 146],
57
+ [6, 30, 54, 78, 102, 126, 150],
58
+ [6, 24, 50, 76, 102, 128, 154],
59
+ [6, 28, 54, 80, 106, 132, 158],
60
+ [6, 32, 58, 84, 110, 136, 162],
61
+ [6, 26, 54, 82, 110, 138, 166],
62
+ [6, 30, 58, 86, 114, 142, 170]
63
+ ];
64
+ /**
65
+ * @internal
66
+ */
67
+ static _MAX_LENGTH = [
68
+ [
69
+ [41, 25, 17, 10],
70
+ [34, 20, 14, 8],
71
+ [27, 16, 11, 7],
72
+ [17, 10, 7, 4]
73
+ ],
74
+ [
75
+ [77, 47, 32, 20],
76
+ [63, 38, 26, 16],
77
+ [48, 29, 20, 12],
78
+ [34, 20, 14, 8]
79
+ ],
80
+ [
81
+ [127, 77, 53, 32],
82
+ [101, 61, 42, 26],
83
+ [77, 47, 32, 20],
84
+ [58, 35, 24, 15]
85
+ ],
86
+ [
87
+ [187, 114, 78, 48],
88
+ [149, 90, 62, 38],
89
+ [111, 67, 46, 28],
90
+ [82, 50, 34, 21]
91
+ ],
92
+ [
93
+ [255, 154, 106, 65],
94
+ [202, 122, 84, 52],
95
+ [144, 87, 60, 37],
96
+ [106, 64, 44, 27]
97
+ ],
98
+ [
99
+ [322, 195, 134, 82],
100
+ [255, 154, 106, 65],
101
+ [178, 108, 74, 45],
102
+ [139, 84, 58, 36]
103
+ ],
104
+ [
105
+ [370, 224, 154, 95],
106
+ [293, 178, 122, 75],
107
+ [207, 125, 86, 53],
108
+ [154, 93, 64, 39]
109
+ ],
110
+ [
111
+ [461, 279, 192, 118],
112
+ [365, 221, 152, 93],
113
+ [259, 157, 108, 66],
114
+ [202, 122, 84, 52]
115
+ ],
116
+ [
117
+ [552, 335, 230, 141],
118
+ [432, 262, 180, 111],
119
+ [312, 189, 130, 80],
120
+ [235, 143, 98, 60]
121
+ ],
122
+ [
123
+ [652, 395, 271, 167],
124
+ [513, 311, 213, 131],
125
+ [364, 221, 151, 93],
126
+ [288, 174, 119, 74]
127
+ ]
128
+ ];
129
+ /**
130
+ * @internal
131
+ */
132
+ static _G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
133
+ /**
134
+ * @internal
135
+ */
136
+ static _G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
137
+ /**
138
+ * @internal
139
+ */
140
+ static _G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
141
+ /**
142
+ * Get the pattern position for the given type number.
143
+ * @param typeNumber The type number to get the pattern for.
144
+ * @returns The pattern for the type number.
145
+ */
146
+ static getPatternPosition(typeNumber) {
147
+ return QRHelper._PATTERN_POSITION_TABLE[typeNumber - 1];
148
+ }
149
+ /**
150
+ * Get the max length of the data.
151
+ * @param typeNumber The type number to get the max length for.
152
+ * @param mode The data mode to get data max length for.
153
+ * @param errorCorrectLevel The error correction to get the max length for.
154
+ * @returns The max length.
155
+ * @throws Error with unknown correction level.
156
+ */
157
+ static getMaxLength(typeNumber, mode, errorCorrectLevel) {
158
+ const t = typeNumber - 1;
159
+ let e = 0;
160
+ let m = 0;
161
+ switch (errorCorrectLevel) {
162
+ case ErrorCorrectLevel.L:
163
+ e = 0;
164
+ break;
165
+ case ErrorCorrectLevel.M:
166
+ e = 1;
167
+ break;
168
+ case ErrorCorrectLevel.Q:
169
+ e = 2;
170
+ break;
171
+ case ErrorCorrectLevel.H:
172
+ e = 3;
173
+ break;
174
+ default:
175
+ throw new GeneralError(QRHelper.CLASS_NAME, "correctionLevelRange", { errorCorrectLevel });
176
+ }
177
+ switch (mode) {
178
+ case QRDataMode.Number:
179
+ m = 0;
180
+ break;
181
+ case QRDataMode.AlphaNumeric:
182
+ m = 1;
183
+ break;
184
+ case QRDataMode.Byte8:
185
+ m = 2;
186
+ break;
187
+ default:
188
+ throw new GeneralError(QRHelper.CLASS_NAME, "modeRange", { mode });
189
+ }
190
+ return QRHelper._MAX_LENGTH[t][e][m];
191
+ }
192
+ /**
193
+ * Get the error correction polynomial for the error correct to length.
194
+ * @param errorCorrectLength The error correction length to get the polynomial for.
195
+ * @returns The polynomial for the error correction length.
196
+ */
197
+ static getErrorCorrectPolynomial(errorCorrectLength) {
198
+ let a = new Polynomial([1]);
199
+ for (let i = 0; i < errorCorrectLength; i++) {
200
+ a = a.multiply(new Polynomial([1, MathHelper.gExp(i)]));
201
+ }
202
+ return a;
203
+ }
204
+ /**
205
+ * Get the mask method for the given pattern.
206
+ * @param maskPattern The pattern to get the mask for.
207
+ * @returns The mask method for the pattern.
208
+ * @throws Error with invalid mask.
209
+ */
210
+ static getMaskMethod(maskPattern) {
211
+ switch (maskPattern) {
212
+ case MaskPattern.PATTERN000:
213
+ return (i, j) => (i + j) % 2 === 0;
214
+ case MaskPattern.PATTERN001:
215
+ return (i, j) => i % 2 === 0;
216
+ case MaskPattern.PATTERN010:
217
+ return (i, j) => j % 3 === 0;
218
+ case MaskPattern.PATTERN011:
219
+ return (i, j) => (i + j) % 3 === 0;
220
+ case MaskPattern.PATTERN100:
221
+ return (i, j) => (~~(i / 2) + ~~(j / 3)) % 2 === 0;
222
+ case MaskPattern.PATTERN101:
223
+ return (i, j) => ((i * j) % 2) + ((i * j) % 3) === 0;
224
+ case MaskPattern.PATTERN110:
225
+ return (i, j) => (((i * j) % 2) + ((i * j) % 3)) % 2 === 0;
226
+ case MaskPattern.PATTERN111:
227
+ return (i, j) => (((i * j) % 3) + ((i + j) % 2)) % 2 === 0;
228
+ default:
229
+ throw new GeneralError(QRHelper.CLASS_NAME, "maskPatternRange", { maskPattern });
230
+ }
231
+ }
232
+ /**
233
+ * Get the BCH type info.
234
+ * @param data The data to get the BCH type info for.
235
+ * @returns The type info.
236
+ */
237
+ static getBCHTypeInfo(data) {
238
+ let d = data << 10;
239
+ while (QRHelper.getBCHDigit(d) - QRHelper.getBCHDigit(QRHelper._G15) >= 0) {
240
+ d ^= QRHelper._G15 << (QRHelper.getBCHDigit(d) - QRHelper.getBCHDigit(QRHelper._G15));
241
+ }
242
+ return ((data << 10) | d) ^ QRHelper._G15_MASK;
243
+ }
244
+ /**
245
+ * Get the BCH type number.
246
+ * @param data The data to get the BCH type number for.
247
+ * @returns The type number.
248
+ */
249
+ static getBCHTypeNumber(data) {
250
+ let d = data << 12;
251
+ while (QRHelper.getBCHDigit(d) - QRHelper.getBCHDigit(QRHelper._G18) >= 0) {
252
+ d ^= QRHelper._G18 << (QRHelper.getBCHDigit(d) - QRHelper.getBCHDigit(QRHelper._G18));
253
+ }
254
+ return (data << 12) | d;
255
+ }
256
+ /**
257
+ * @internal
258
+ */
259
+ static getBCHDigit(data) {
260
+ let localData = data;
261
+ let digit = 0;
262
+ while (localData !== 0) {
263
+ digit++;
264
+ localData >>>= 1;
265
+ }
266
+ return digit;
267
+ }
268
+ }
269
+ //# sourceMappingURL=qrHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qrHelper.js","sourceRoot":"","sources":["../../../src/helpers/qrHelper.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,+BAA+B;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACpB;;OAEG;IACI,MAAM,CAAU,UAAU,cAA8B;IAE/D;;OAEG;IACK,MAAM,CAAU,uBAAuB,GAAe;QAC7D,EAAE;QACF,CAAC,CAAC,EAAE,EAAE,CAAC;QACP,CAAC,CAAC,EAAE,EAAE,CAAC;QACP,CAAC,CAAC,EAAE,EAAE,CAAC;QACP,CAAC,CAAC,EAAE,EAAE,CAAC;QACP,CAAC,CAAC,EAAE,EAAE,CAAC;QACP,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QACX,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QACX,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QACX,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QACX,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QACX,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QACX,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QACX,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACf,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACf,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACf,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACf,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACf,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACf,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACf,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QACpB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QACpB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QACpB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QACpB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QACpB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QACxB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;QACzB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;QACzB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;QACzB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;QACzB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;QACzB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;QACzB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAC9B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAC9B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAC9B,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-bitwise */\nimport { GeneralError } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport { MathHelper } from \"./mathHelper.js\";\nimport { Polynomial } from \"./polynomial.js\";\nimport { ErrorCorrectLevel } from \"../models/errorCorrectLevel.js\";\nimport { MaskPattern } from \"../models/maskPattern.js\";\nimport { QRDataMode } from \"../models/qrDataMode.js\";\n\n/**\n * Helper methods for QR generation.\n * Based on https://github.com/kazuhikoarase/qrcode-generator/ .\n */\nexport class QRHelper {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<QRHelper>();\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _PATTERN_POSITION_TABLE: number[][] = [\n\t\t[],\n\t\t[6, 18],\n\t\t[6, 22],\n\t\t[6, 26],\n\t\t[6, 30],\n\t\t[6, 34],\n\t\t[6, 22, 38],\n\t\t[6, 24, 42],\n\t\t[6, 26, 46],\n\t\t[6, 28, 50],\n\t\t[6, 30, 54],\n\t\t[6, 32, 58],\n\t\t[6, 34, 62],\n\t\t[6, 26, 46, 66],\n\t\t[6, 26, 48, 70],\n\t\t[6, 26, 50, 74],\n\t\t[6, 30, 54, 78],\n\t\t[6, 30, 56, 82],\n\t\t[6, 30, 58, 86],\n\t\t[6, 34, 62, 90],\n\t\t[6, 28, 50, 72, 94],\n\t\t[6, 26, 50, 74, 98],\n\t\t[6, 30, 54, 78, 102],\n\t\t[6, 28, 54, 80, 106],\n\t\t[6, 32, 58, 84, 110],\n\t\t[6, 30, 58, 86, 114],\n\t\t[6, 34, 62, 90, 118],\n\t\t[6, 26, 50, 74, 98, 122],\n\t\t[6, 30, 54, 78, 102, 126],\n\t\t[6, 26, 52, 78, 104, 130],\n\t\t[6, 30, 56, 82, 108, 134],\n\t\t[6, 34, 60, 86, 112, 138],\n\t\t[6, 30, 58, 86, 114, 142],\n\t\t[6, 34, 62, 90, 118, 146],\n\t\t[6, 30, 54, 78, 102, 126, 150],\n\t\t[6, 24, 50, 76, 102, 128, 154],\n\t\t[6, 28, 54, 80, 106, 132, 158],\n\t\t[6, 32, 58, 84, 110, 136, 162],\n\t\t[6, 26, 54, 82, 110, 138, 166],\n\t\t[6, 30, 58, 86, 114, 142, 170]\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _MAX_LENGTH: number[][][] = [\n\t\t[\n\t\t\t[41, 25, 17, 10],\n\t\t\t[34, 20, 14, 8],\n\t\t\t[27, 16, 11, 7],\n\t\t\t[17, 10, 7, 4]\n\t\t],\n\t\t[\n\t\t\t[77, 47, 32, 20],\n\t\t\t[63, 38, 26, 16],\n\t\t\t[48, 29, 20, 12],\n\t\t\t[34, 20, 14, 8]\n\t\t],\n\t\t[\n\t\t\t[127, 77, 53, 32],\n\t\t\t[101, 61, 42, 26],\n\t\t\t[77, 47, 32, 20],\n\t\t\t[58, 35, 24, 15]\n\t\t],\n\t\t[\n\t\t\t[187, 114, 78, 48],\n\t\t\t[149, 90, 62, 38],\n\t\t\t[111, 67, 46, 28],\n\t\t\t[82, 50, 34, 21]\n\t\t],\n\t\t[\n\t\t\t[255, 154, 106, 65],\n\t\t\t[202, 122, 84, 52],\n\t\t\t[144, 87, 60, 37],\n\t\t\t[106, 64, 44, 27]\n\t\t],\n\t\t[\n\t\t\t[322, 195, 134, 82],\n\t\t\t[255, 154, 106, 65],\n\t\t\t[178, 108, 74, 45],\n\t\t\t[139, 84, 58, 36]\n\t\t],\n\t\t[\n\t\t\t[370, 224, 154, 95],\n\t\t\t[293, 178, 122, 75],\n\t\t\t[207, 125, 86, 53],\n\t\t\t[154, 93, 64, 39]\n\t\t],\n\t\t[\n\t\t\t[461, 279, 192, 118],\n\t\t\t[365, 221, 152, 93],\n\t\t\t[259, 157, 108, 66],\n\t\t\t[202, 122, 84, 52]\n\t\t],\n\t\t[\n\t\t\t[552, 335, 230, 141],\n\t\t\t[432, 262, 180, 111],\n\t\t\t[312, 189, 130, 80],\n\t\t\t[235, 143, 98, 60]\n\t\t],\n\t\t[\n\t\t\t[652, 395, 271, 167],\n\t\t\t[513, 311, 213, 131],\n\t\t\t[364, 221, 151, 93],\n\t\t\t[288, 174, 119, 74]\n\t\t]\n\t];\n\n\t/**\n\t * @internal\n\t */\n\n\tprivate static readonly _G15: number =\n\t\t(1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _G18: number =\n\t\t(1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _G15_MASK: number =\n\t\t(1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n\t/**\n\t * Get the pattern position for the given type number.\n\t * @param typeNumber The type number to get the pattern for.\n\t * @returns The pattern for the type number.\n\t */\n\tpublic static getPatternPosition(typeNumber: number): number[] {\n\t\treturn QRHelper._PATTERN_POSITION_TABLE[typeNumber - 1];\n\t}\n\n\t/**\n\t * Get the max length of the data.\n\t * @param typeNumber The type number to get the max length for.\n\t * @param mode The data mode to get data max length for.\n\t * @param errorCorrectLevel The error correction to get the max length for.\n\t * @returns The max length.\n\t * @throws Error with unknown correction level.\n\t */\n\tpublic static getMaxLength(\n\t\ttypeNumber: number,\n\t\tmode: QRDataMode,\n\t\terrorCorrectLevel: ErrorCorrectLevel\n\t): number {\n\t\tconst t = typeNumber - 1;\n\t\tlet e = 0;\n\t\tlet m = 0;\n\n\t\tswitch (errorCorrectLevel) {\n\t\t\tcase ErrorCorrectLevel.L:\n\t\t\t\te = 0;\n\t\t\t\tbreak;\n\t\t\tcase ErrorCorrectLevel.M:\n\t\t\t\te = 1;\n\t\t\t\tbreak;\n\t\t\tcase ErrorCorrectLevel.Q:\n\t\t\t\te = 2;\n\t\t\t\tbreak;\n\t\t\tcase ErrorCorrectLevel.H:\n\t\t\t\te = 3;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new GeneralError(QRHelper.CLASS_NAME, \"correctionLevelRange\", { errorCorrectLevel });\n\t\t}\n\n\t\tswitch (mode) {\n\t\t\tcase QRDataMode.Number:\n\t\t\t\tm = 0;\n\t\t\t\tbreak;\n\t\t\tcase QRDataMode.AlphaNumeric:\n\t\t\t\tm = 1;\n\t\t\t\tbreak;\n\t\t\tcase QRDataMode.Byte8:\n\t\t\t\tm = 2;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new GeneralError(QRHelper.CLASS_NAME, \"modeRange\", { mode });\n\t\t}\n\n\t\treturn QRHelper._MAX_LENGTH[t][e][m];\n\t}\n\n\t/**\n\t * Get the error correction polynomial for the error correct to length.\n\t * @param errorCorrectLength The error correction length to get the polynomial for.\n\t * @returns The polynomial for the error correction length.\n\t */\n\tpublic static getErrorCorrectPolynomial(errorCorrectLength: number): Polynomial {\n\t\tlet a = new Polynomial([1]);\n\n\t\tfor (let i = 0; i < errorCorrectLength; i++) {\n\t\t\ta = a.multiply(new Polynomial([1, MathHelper.gExp(i)]));\n\t\t}\n\n\t\treturn a;\n\t}\n\n\t/**\n\t * Get the mask method for the given pattern.\n\t * @param maskPattern The pattern to get the mask for.\n\t * @returns The mask method for the pattern.\n\t * @throws Error with invalid mask.\n\t */\n\tpublic static getMaskMethod(maskPattern: number): (i: number, j: number) => boolean {\n\t\tswitch (maskPattern) {\n\t\t\tcase MaskPattern.PATTERN000:\n\t\t\t\treturn (i: number, j: number) => (i + j) % 2 === 0;\n\t\t\tcase MaskPattern.PATTERN001:\n\t\t\t\treturn (i: number, j: number) => i % 2 === 0;\n\t\t\tcase MaskPattern.PATTERN010:\n\t\t\t\treturn (i: number, j: number) => j % 3 === 0;\n\t\t\tcase MaskPattern.PATTERN011:\n\t\t\t\treturn (i: number, j: number) => (i + j) % 3 === 0;\n\t\t\tcase MaskPattern.PATTERN100:\n\t\t\t\treturn (i: number, j: number) => (~~(i / 2) + ~~(j / 3)) % 2 === 0;\n\t\t\tcase MaskPattern.PATTERN101:\n\t\t\t\treturn (i: number, j: number) => ((i * j) % 2) + ((i * j) % 3) === 0;\n\t\t\tcase MaskPattern.PATTERN110:\n\t\t\t\treturn (i: number, j: number) => (((i * j) % 2) + ((i * j) % 3)) % 2 === 0;\n\t\t\tcase MaskPattern.PATTERN111:\n\t\t\t\treturn (i: number, j: number) => (((i * j) % 3) + ((i + j) % 2)) % 2 === 0;\n\n\t\t\tdefault:\n\t\t\t\tthrow new GeneralError(QRHelper.CLASS_NAME, \"maskPatternRange\", { maskPattern });\n\t\t}\n\t}\n\n\t/**\n\t * Get the BCH type info.\n\t * @param data The data to get the BCH type info for.\n\t * @returns The type info.\n\t */\n\tpublic static getBCHTypeInfo(data: number): number {\n\t\tlet d = data << 10;\n\t\twhile (QRHelper.getBCHDigit(d) - QRHelper.getBCHDigit(QRHelper._G15) >= 0) {\n\t\t\td ^= QRHelper._G15 << (QRHelper.getBCHDigit(d) - QRHelper.getBCHDigit(QRHelper._G15));\n\t\t}\n\t\treturn ((data << 10) | d) ^ QRHelper._G15_MASK;\n\t}\n\n\t/**\n\t * Get the BCH type number.\n\t * @param data The data to get the BCH type number for.\n\t * @returns The type number.\n\t */\n\tpublic static getBCHTypeNumber(data: number): number {\n\t\tlet d = data << 12;\n\t\twhile (QRHelper.getBCHDigit(d) - QRHelper.getBCHDigit(QRHelper._G18) >= 0) {\n\t\t\td ^= QRHelper._G18 << (QRHelper.getBCHDigit(d) - QRHelper.getBCHDigit(QRHelper._G18));\n\t\t}\n\t\treturn (data << 12) | d;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static getBCHDigit(data: number): number {\n\t\tlet localData = data;\n\t\tlet digit = 0;\n\t\twhile (localData !== 0) {\n\t\t\tdigit++;\n\t\t\tlocalData >>>= 1;\n\t\t}\n\t\treturn digit;\n\t}\n}\n"]}
@@ -0,0 +1,293 @@
1
+ // Copyright 2024 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ /* eslint-disable no-mixed-operators */
4
+ import { GeneralError } from "@twin.org/core";
5
+ import { ErrorCorrectLevel } from "../models/errorCorrectLevel.js";
6
+ /**
7
+ * Class to represent a RS Block.
8
+ * Based on https://github.com/kazuhikoarase/qrcode-generator/ .
9
+ */
10
+ export class RSBlock {
11
+ /**
12
+ * Runtime name for the class.
13
+ */
14
+ static CLASS_NAME = "RSBlock";
15
+ /**
16
+ * @internal
17
+ */
18
+ static _RS_BLOCK_TABLE = [
19
+ // L
20
+ // M
21
+ // Q
22
+ // H
23
+ // 1
24
+ [1, 26, 19],
25
+ [1, 26, 16],
26
+ [1, 26, 13],
27
+ [1, 26, 9],
28
+ // 2
29
+ [1, 44, 34],
30
+ [1, 44, 28],
31
+ [1, 44, 22],
32
+ [1, 44, 16],
33
+ // 3
34
+ [1, 70, 55],
35
+ [1, 70, 44],
36
+ [2, 35, 17],
37
+ [2, 35, 13],
38
+ // 4
39
+ [1, 100, 80],
40
+ [2, 50, 32],
41
+ [2, 50, 24],
42
+ [4, 25, 9],
43
+ // 5
44
+ [1, 134, 108],
45
+ [2, 67, 43],
46
+ [2, 33, 15, 2, 34, 16],
47
+ [2, 33, 11, 2, 34, 12],
48
+ // 6
49
+ [2, 86, 68],
50
+ [4, 43, 27],
51
+ [4, 43, 19],
52
+ [4, 43, 15],
53
+ // 7
54
+ [2, 98, 78],
55
+ [4, 49, 31],
56
+ [2, 32, 14, 4, 33, 15],
57
+ [4, 39, 13, 1, 40, 14],
58
+ // 8
59
+ [2, 121, 97],
60
+ [2, 60, 38, 2, 61, 39],
61
+ [4, 40, 18, 2, 41, 19],
62
+ [4, 40, 14, 2, 41, 15],
63
+ // 9
64
+ [2, 146, 116],
65
+ [3, 58, 36, 2, 59, 37],
66
+ [4, 36, 16, 4, 37, 17],
67
+ [4, 36, 12, 4, 37, 13],
68
+ // 10
69
+ [2, 86, 68, 2, 87, 69],
70
+ [4, 69, 43, 1, 70, 44],
71
+ [6, 43, 19, 2, 44, 20],
72
+ [6, 43, 15, 2, 44, 16],
73
+ // 11
74
+ [4, 101, 81],
75
+ [1, 80, 50, 4, 81, 51],
76
+ [4, 50, 22, 4, 51, 23],
77
+ [3, 36, 12, 8, 37, 13],
78
+ // 12
79
+ [2, 116, 92, 2, 117, 93],
80
+ [6, 58, 36, 2, 59, 37],
81
+ [4, 46, 20, 6, 47, 21],
82
+ [7, 42, 14, 4, 43, 15],
83
+ // 13
84
+ [4, 133, 107],
85
+ [8, 59, 37, 1, 60, 38],
86
+ [8, 44, 20, 4, 45, 21],
87
+ [12, 33, 11, 4, 34, 12],
88
+ // 14
89
+ [3, 145, 115, 1, 146, 116],
90
+ [4, 64, 40, 5, 65, 41],
91
+ [11, 36, 16, 5, 37, 17],
92
+ [11, 36, 12, 5, 37, 13],
93
+ // 15
94
+ [5, 109, 87, 1, 110, 88],
95
+ [5, 65, 41, 5, 66, 42],
96
+ [5, 54, 24, 7, 55, 25],
97
+ [11, 36, 12, 7, 37, 13],
98
+ // 16
99
+ [5, 122, 98, 1, 123, 99],
100
+ [7, 73, 45, 3, 74, 46],
101
+ [15, 43, 19, 2, 44, 20],
102
+ [3, 45, 15, 13, 46, 16],
103
+ // 17
104
+ [1, 135, 107, 5, 136, 108],
105
+ [10, 74, 46, 1, 75, 47],
106
+ [1, 50, 22, 15, 51, 23],
107
+ [2, 42, 14, 17, 43, 15],
108
+ // 18
109
+ [5, 150, 120, 1, 151, 121],
110
+ [9, 69, 43, 4, 70, 44],
111
+ [17, 50, 22, 1, 51, 23],
112
+ [2, 42, 14, 19, 43, 15],
113
+ // 19
114
+ [3, 141, 113, 4, 142, 114],
115
+ [3, 70, 44, 11, 71, 45],
116
+ [17, 47, 21, 4, 48, 22],
117
+ [9, 39, 13, 16, 40, 14],
118
+ // 20
119
+ [3, 135, 107, 5, 136, 108],
120
+ [3, 67, 41, 13, 68, 42],
121
+ [15, 54, 24, 5, 55, 25],
122
+ [15, 43, 15, 10, 44, 16],
123
+ // 21
124
+ [4, 144, 116, 4, 145, 117],
125
+ [17, 68, 42],
126
+ [17, 50, 22, 6, 51, 23],
127
+ [19, 46, 16, 6, 47, 17],
128
+ // 22
129
+ [2, 139, 111, 7, 140, 112],
130
+ [17, 74, 46],
131
+ [7, 54, 24, 16, 55, 25],
132
+ [34, 37, 13],
133
+ // 23
134
+ [4, 151, 121, 5, 152, 122],
135
+ [4, 75, 47, 14, 76, 48],
136
+ [11, 54, 24, 14, 55, 25],
137
+ [16, 45, 15, 14, 46, 16],
138
+ // 24
139
+ [6, 147, 117, 4, 148, 118],
140
+ [6, 73, 45, 14, 74, 46],
141
+ [11, 54, 24, 16, 55, 25],
142
+ [30, 46, 16, 2, 47, 17],
143
+ // 25
144
+ [8, 132, 106, 4, 133, 107],
145
+ [8, 75, 47, 13, 76, 48],
146
+ [7, 54, 24, 22, 55, 25],
147
+ [22, 45, 15, 13, 46, 16],
148
+ // 26
149
+ [10, 142, 114, 2, 143, 115],
150
+ [19, 74, 46, 4, 75, 47],
151
+ [28, 50, 22, 6, 51, 23],
152
+ [33, 46, 16, 4, 47, 17],
153
+ // 27
154
+ [8, 152, 122, 4, 153, 123],
155
+ [22, 73, 45, 3, 74, 46],
156
+ [8, 53, 23, 26, 54, 24],
157
+ [12, 45, 15, 28, 46, 16],
158
+ // 28
159
+ [3, 147, 117, 10, 148, 118],
160
+ [3, 73, 45, 23, 74, 46],
161
+ [4, 54, 24, 31, 55, 25],
162
+ [11, 45, 15, 31, 46, 16],
163
+ // 29
164
+ [7, 146, 116, 7, 147, 117],
165
+ [21, 73, 45, 7, 74, 46],
166
+ [1, 53, 23, 37, 54, 24],
167
+ [19, 45, 15, 26, 46, 16],
168
+ // 30
169
+ [5, 145, 115, 10, 146, 116],
170
+ [19, 75, 47, 10, 76, 48],
171
+ [15, 54, 24, 25, 55, 25],
172
+ [23, 45, 15, 25, 46, 16],
173
+ // 31
174
+ [13, 145, 115, 3, 146, 116],
175
+ [2, 74, 46, 29, 75, 47],
176
+ [42, 54, 24, 1, 55, 25],
177
+ [23, 45, 15, 28, 46, 16],
178
+ // 32
179
+ [17, 145, 115],
180
+ [10, 74, 46, 23, 75, 47],
181
+ [10, 54, 24, 35, 55, 25],
182
+ [19, 45, 15, 35, 46, 16],
183
+ // 33
184
+ [17, 145, 115, 1, 146, 116],
185
+ [14, 74, 46, 21, 75, 47],
186
+ [29, 54, 24, 19, 55, 25],
187
+ [11, 45, 15, 46, 46, 16],
188
+ // 34
189
+ [13, 145, 115, 6, 146, 116],
190
+ [14, 74, 46, 23, 75, 47],
191
+ [44, 54, 24, 7, 55, 25],
192
+ [59, 46, 16, 1, 47, 17],
193
+ // 35
194
+ [12, 151, 121, 7, 152, 122],
195
+ [12, 75, 47, 26, 76, 48],
196
+ [39, 54, 24, 14, 55, 25],
197
+ [22, 45, 15, 41, 46, 16],
198
+ // 36
199
+ [6, 151, 121, 14, 152, 122],
200
+ [6, 75, 47, 34, 76, 48],
201
+ [46, 54, 24, 10, 55, 25],
202
+ [2, 45, 15, 64, 46, 16],
203
+ // 37
204
+ [17, 152, 122, 4, 153, 123],
205
+ [29, 74, 46, 14, 75, 47],
206
+ [49, 54, 24, 10, 55, 25],
207
+ [24, 45, 15, 46, 46, 16],
208
+ // 38
209
+ [4, 152, 122, 18, 153, 123],
210
+ [13, 74, 46, 32, 75, 47],
211
+ [48, 54, 24, 14, 55, 25],
212
+ [42, 45, 15, 32, 46, 16],
213
+ // 39
214
+ [20, 147, 117, 4, 148, 118],
215
+ [40, 75, 47, 7, 76, 48],
216
+ [43, 54, 24, 22, 55, 25],
217
+ [10, 45, 15, 67, 46, 16],
218
+ // 40
219
+ [19, 148, 118, 6, 149, 119],
220
+ [18, 75, 47, 31, 76, 48],
221
+ [34, 54, 24, 34, 55, 25],
222
+ [20, 45, 15, 61, 46, 16]
223
+ ];
224
+ /**
225
+ * @internal
226
+ */
227
+ _totalCount;
228
+ /**
229
+ * @internal
230
+ */
231
+ _dataCount;
232
+ /**
233
+ * Create a new instance of RSBlock.
234
+ * @param totalCount The total count for the block.
235
+ * @param dataCount The data count for the block.
236
+ */
237
+ constructor(totalCount, dataCount) {
238
+ this._totalCount = totalCount;
239
+ this._dataCount = dataCount;
240
+ }
241
+ /**
242
+ * Get RS Blocks for the type number and error correct level.
243
+ * @param typeNumber The type number.
244
+ * @param errorCorrectLevel The error correct level.
245
+ * @returns The RS Blocks.
246
+ */
247
+ static getRSBlocks(typeNumber, errorCorrectLevel) {
248
+ const rsBlock = RSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
249
+ const length = rsBlock.length / 3;
250
+ const list = [];
251
+ for (let i = 0; i < length; i++) {
252
+ const count = rsBlock[i * 3 + 0];
253
+ const totalCount = rsBlock[i * 3 + 1];
254
+ const dataCount = rsBlock[i * 3 + 2];
255
+ for (let j = 0; j < count; j++) {
256
+ list.push(new RSBlock(totalCount, dataCount));
257
+ }
258
+ }
259
+ return list;
260
+ }
261
+ /**
262
+ * @internal
263
+ */
264
+ static getRsBlockTable(typeNumber, errorCorrectLevel) {
265
+ switch (errorCorrectLevel) {
266
+ case ErrorCorrectLevel.L:
267
+ return RSBlock._RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
268
+ case ErrorCorrectLevel.M:
269
+ return RSBlock._RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
270
+ case ErrorCorrectLevel.Q:
271
+ return RSBlock._RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
272
+ case ErrorCorrectLevel.H:
273
+ return RSBlock._RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
274
+ default:
275
+ }
276
+ throw new GeneralError(RSBlock.CLASS_NAME, "correctionLevelRange", { errorCorrectLevel });
277
+ }
278
+ /**
279
+ * Get the data count of the block.
280
+ * @returns The data count.
281
+ */
282
+ getDataCount() {
283
+ return this._dataCount;
284
+ }
285
+ /**
286
+ * Get the total count of blocks.
287
+ * @returns The total count.
288
+ */
289
+ getTotalCount() {
290
+ return this._totalCount;
291
+ }
292
+ }
293
+ //# sourceMappingURL=rsBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsBlock.js","sourceRoot":"","sources":["../../../src/helpers/rsBlock.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-mixed-operators */\nimport { GeneralError } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport { ErrorCorrectLevel } from \"../models/errorCorrectLevel.js\";\n\n/**\n * Class to represent a RS Block.\n * Based on https://github.com/kazuhikoarase/qrcode-generator/ .\n */\nexport class RSBlock {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<RSBlock>();\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _RS_BLOCK_TABLE: number[][] = [\n\t\t// L\n\t\t// M\n\t\t// Q\n\t\t// H\n\t\t// 1\n\t\t[1, 26, 19],\n\t\t[1, 26, 16],\n\t\t[1, 26, 13],\n\t\t[1, 26, 9],\n\n\t\t// 2\n\t\t[1, 44, 34],\n\t\t[1, 44, 28],\n\t\t[1, 44, 22],\n\t\t[1, 44, 16],\n\n\t\t// 3\n\t\t[1, 70, 55],\n\t\t[1, 70, 44],\n\t\t[2, 35, 17],\n\t\t[2, 35, 13],\n\n\t\t// 4\n\t\t[1, 100, 80],\n\t\t[2, 50, 32],\n\t\t[2, 50, 24],\n\t\t[4, 25, 9],\n\n\t\t// 5\n\t\t[1, 134, 108],\n\t\t[2, 67, 43],\n\t\t[2, 33, 15, 2, 34, 16],\n\t\t[2, 33, 11, 2, 34, 12],\n\n\t\t// 6\n\t\t[2, 86, 68],\n\t\t[4, 43, 27],\n\t\t[4, 43, 19],\n\t\t[4, 43, 15],\n\n\t\t// 7\n\t\t[2, 98, 78],\n\t\t[4, 49, 31],\n\t\t[2, 32, 14, 4, 33, 15],\n\t\t[4, 39, 13, 1, 40, 14],\n\n\t\t// 8\n\t\t[2, 121, 97],\n\t\t[2, 60, 38, 2, 61, 39],\n\t\t[4, 40, 18, 2, 41, 19],\n\t\t[4, 40, 14, 2, 41, 15],\n\n\t\t// 9\n\t\t[2, 146, 116],\n\t\t[3, 58, 36, 2, 59, 37],\n\t\t[4, 36, 16, 4, 37, 17],\n\t\t[4, 36, 12, 4, 37, 13],\n\n\t\t// 10\n\t\t[2, 86, 68, 2, 87, 69],\n\t\t[4, 69, 43, 1, 70, 44],\n\t\t[6, 43, 19, 2, 44, 20],\n\t\t[6, 43, 15, 2, 44, 16],\n\n\t\t// 11\n\t\t[4, 101, 81],\n\t\t[1, 80, 50, 4, 81, 51],\n\t\t[4, 50, 22, 4, 51, 23],\n\t\t[3, 36, 12, 8, 37, 13],\n\n\t\t// 12\n\t\t[2, 116, 92, 2, 117, 93],\n\t\t[6, 58, 36, 2, 59, 37],\n\t\t[4, 46, 20, 6, 47, 21],\n\t\t[7, 42, 14, 4, 43, 15],\n\n\t\t// 13\n\t\t[4, 133, 107],\n\t\t[8, 59, 37, 1, 60, 38],\n\t\t[8, 44, 20, 4, 45, 21],\n\t\t[12, 33, 11, 4, 34, 12],\n\n\t\t// 14\n\t\t[3, 145, 115, 1, 146, 116],\n\t\t[4, 64, 40, 5, 65, 41],\n\t\t[11, 36, 16, 5, 37, 17],\n\t\t[11, 36, 12, 5, 37, 13],\n\n\t\t// 15\n\t\t[5, 109, 87, 1, 110, 88],\n\t\t[5, 65, 41, 5, 66, 42],\n\t\t[5, 54, 24, 7, 55, 25],\n\t\t[11, 36, 12, 7, 37, 13],\n\n\t\t// 16\n\t\t[5, 122, 98, 1, 123, 99],\n\t\t[7, 73, 45, 3, 74, 46],\n\t\t[15, 43, 19, 2, 44, 20],\n\t\t[3, 45, 15, 13, 46, 16],\n\n\t\t// 17\n\t\t[1, 135, 107, 5, 136, 108],\n\t\t[10, 74, 46, 1, 75, 47],\n\t\t[1, 50, 22, 15, 51, 23],\n\t\t[2, 42, 14, 17, 43, 15],\n\n\t\t// 18\n\t\t[5, 150, 120, 1, 151, 121],\n\t\t[9, 69, 43, 4, 70, 44],\n\t\t[17, 50, 22, 1, 51, 23],\n\t\t[2, 42, 14, 19, 43, 15],\n\n\t\t// 19\n\t\t[3, 141, 113, 4, 142, 114],\n\t\t[3, 70, 44, 11, 71, 45],\n\t\t[17, 47, 21, 4, 48, 22],\n\t\t[9, 39, 13, 16, 40, 14],\n\n\t\t// 20\n\t\t[3, 135, 107, 5, 136, 108],\n\t\t[3, 67, 41, 13, 68, 42],\n\t\t[15, 54, 24, 5, 55, 25],\n\t\t[15, 43, 15, 10, 44, 16],\n\n\t\t// 21\n\t\t[4, 144, 116, 4, 145, 117],\n\t\t[17, 68, 42],\n\t\t[17, 50, 22, 6, 51, 23],\n\t\t[19, 46, 16, 6, 47, 17],\n\n\t\t// 22\n\t\t[2, 139, 111, 7, 140, 112],\n\t\t[17, 74, 46],\n\t\t[7, 54, 24, 16, 55, 25],\n\t\t[34, 37, 13],\n\n\t\t// 23\n\t\t[4, 151, 121, 5, 152, 122],\n\t\t[4, 75, 47, 14, 76, 48],\n\t\t[11, 54, 24, 14, 55, 25],\n\t\t[16, 45, 15, 14, 46, 16],\n\n\t\t// 24\n\t\t[6, 147, 117, 4, 148, 118],\n\t\t[6, 73, 45, 14, 74, 46],\n\t\t[11, 54, 24, 16, 55, 25],\n\t\t[30, 46, 16, 2, 47, 17],\n\n\t\t// 25\n\t\t[8, 132, 106, 4, 133, 107],\n\t\t[8, 75, 47, 13, 76, 48],\n\t\t[7, 54, 24, 22, 55, 25],\n\t\t[22, 45, 15, 13, 46, 16],\n\n\t\t// 26\n\t\t[10, 142, 114, 2, 143, 115],\n\t\t[19, 74, 46, 4, 75, 47],\n\t\t[28, 50, 22, 6, 51, 23],\n\t\t[33, 46, 16, 4, 47, 17],\n\n\t\t// 27\n\t\t[8, 152, 122, 4, 153, 123],\n\t\t[22, 73, 45, 3, 74, 46],\n\t\t[8, 53, 23, 26, 54, 24],\n\t\t[12, 45, 15, 28, 46, 16],\n\n\t\t// 28\n\t\t[3, 147, 117, 10, 148, 118],\n\t\t[3, 73, 45, 23, 74, 46],\n\t\t[4, 54, 24, 31, 55, 25],\n\t\t[11, 45, 15, 31, 46, 16],\n\n\t\t// 29\n\t\t[7, 146, 116, 7, 147, 117],\n\t\t[21, 73, 45, 7, 74, 46],\n\t\t[1, 53, 23, 37, 54, 24],\n\t\t[19, 45, 15, 26, 46, 16],\n\n\t\t// 30\n\t\t[5, 145, 115, 10, 146, 116],\n\t\t[19, 75, 47, 10, 76, 48],\n\t\t[15, 54, 24, 25, 55, 25],\n\t\t[23, 45, 15, 25, 46, 16],\n\n\t\t// 31\n\t\t[13, 145, 115, 3, 146, 116],\n\t\t[2, 74, 46, 29, 75, 47],\n\t\t[42, 54, 24, 1, 55, 25],\n\t\t[23, 45, 15, 28, 46, 16],\n\n\t\t// 32\n\t\t[17, 145, 115],\n\t\t[10, 74, 46, 23, 75, 47],\n\t\t[10, 54, 24, 35, 55, 25],\n\t\t[19, 45, 15, 35, 46, 16],\n\n\t\t// 33\n\t\t[17, 145, 115, 1, 146, 116],\n\t\t[14, 74, 46, 21, 75, 47],\n\t\t[29, 54, 24, 19, 55, 25],\n\t\t[11, 45, 15, 46, 46, 16],\n\n\t\t// 34\n\t\t[13, 145, 115, 6, 146, 116],\n\t\t[14, 74, 46, 23, 75, 47],\n\t\t[44, 54, 24, 7, 55, 25],\n\t\t[59, 46, 16, 1, 47, 17],\n\n\t\t// 35\n\t\t[12, 151, 121, 7, 152, 122],\n\t\t[12, 75, 47, 26, 76, 48],\n\t\t[39, 54, 24, 14, 55, 25],\n\t\t[22, 45, 15, 41, 46, 16],\n\n\t\t// 36\n\t\t[6, 151, 121, 14, 152, 122],\n\t\t[6, 75, 47, 34, 76, 48],\n\t\t[46, 54, 24, 10, 55, 25],\n\t\t[2, 45, 15, 64, 46, 16],\n\n\t\t// 37\n\t\t[17, 152, 122, 4, 153, 123],\n\t\t[29, 74, 46, 14, 75, 47],\n\t\t[49, 54, 24, 10, 55, 25],\n\t\t[24, 45, 15, 46, 46, 16],\n\n\t\t// 38\n\t\t[4, 152, 122, 18, 153, 123],\n\t\t[13, 74, 46, 32, 75, 47],\n\t\t[48, 54, 24, 14, 55, 25],\n\t\t[42, 45, 15, 32, 46, 16],\n\n\t\t// 39\n\t\t[20, 147, 117, 4, 148, 118],\n\t\t[40, 75, 47, 7, 76, 48],\n\t\t[43, 54, 24, 22, 55, 25],\n\t\t[10, 45, 15, 67, 46, 16],\n\n\t\t// 40\n\t\t[19, 148, 118, 6, 149, 119],\n\t\t[18, 75, 47, 31, 76, 48],\n\t\t[34, 54, 24, 34, 55, 25],\n\t\t[20, 45, 15, 61, 46, 16]\n\t];\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _totalCount: number;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _dataCount: number;\n\n\t/**\n\t * Create a new instance of RSBlock.\n\t * @param totalCount The total count for the block.\n\t * @param dataCount The data count for the block.\n\t */\n\tconstructor(totalCount: number, dataCount: number) {\n\t\tthis._totalCount = totalCount;\n\t\tthis._dataCount = dataCount;\n\t}\n\n\t/**\n\t * Get RS Blocks for the type number and error correct level.\n\t * @param typeNumber The type number.\n\t * @param errorCorrectLevel The error correct level.\n\t * @returns The RS Blocks.\n\t */\n\tpublic static getRSBlocks(typeNumber: number, errorCorrectLevel: ErrorCorrectLevel): RSBlock[] {\n\t\tconst rsBlock = RSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\tconst length = rsBlock.length / 3;\n\n\t\tconst list: RSBlock[] = [];\n\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst count = rsBlock[i * 3 + 0];\n\t\t\tconst totalCount = rsBlock[i * 3 + 1];\n\t\t\tconst dataCount = rsBlock[i * 3 + 2];\n\n\t\t\tfor (let j = 0; j < count; j++) {\n\t\t\t\tlist.push(new RSBlock(totalCount, dataCount));\n\t\t\t}\n\t\t}\n\n\t\treturn list;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate static getRsBlockTable(\n\t\ttypeNumber: number,\n\t\terrorCorrectLevel: ErrorCorrectLevel\n\t): number[] {\n\t\tswitch (errorCorrectLevel) {\n\t\t\tcase ErrorCorrectLevel.L:\n\t\t\t\treturn RSBlock._RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\t\t\tcase ErrorCorrectLevel.M:\n\t\t\t\treturn RSBlock._RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\t\t\tcase ErrorCorrectLevel.Q:\n\t\t\t\treturn RSBlock._RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\t\t\tcase ErrorCorrectLevel.H:\n\t\t\t\treturn RSBlock._RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\t\t\tdefault:\n\t\t}\n\n\t\tthrow new GeneralError(RSBlock.CLASS_NAME, \"correctionLevelRange\", { errorCorrectLevel });\n\t}\n\n\t/**\n\t * Get the data count of the block.\n\t * @returns The data count.\n\t */\n\tpublic getDataCount(): number {\n\t\treturn this._dataCount;\n\t}\n\n\t/**\n\t * Get the total count of blocks.\n\t * @returns The total count.\n\t */\n\tpublic getTotalCount(): number {\n\t\treturn this._totalCount;\n\t}\n}\n"]}
@@ -0,0 +1,12 @@
1
+ // Copyright 2024 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ export * from "./models/errorCorrectLevel.js";
4
+ export * from "./models/IBitmapRendererOptions.js";
5
+ export * from "./models/IRendererOptions.js";
6
+ export * from "./models/ITextRendererOptions.js";
7
+ export * from "./models/qrCellData.js";
8
+ export * from "./qr.js";
9
+ export * from "./renderers/jpegRenderer.js";
10
+ export * from "./renderers/pngRenderer.js";
11
+ export * from "./renderers/textRenderer.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nexport * from \"./models/errorCorrectLevel.js\";\nexport * from \"./models/IBitmapRendererOptions.js\";\nexport * from \"./models/IRendererOptions.js\";\nexport * from \"./models/ITextRendererOptions.js\";\nexport * from \"./models/qrCellData.js\";\nexport * from \"./qr.js\";\nexport * from \"./renderers/jpegRenderer.js\";\nexport * from \"./renderers/pngRenderer.js\";\nexport * from \"./renderers/textRenderer.js\";\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IBitmapRendererOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBitmapRendererOptions.js","sourceRoot":"","sources":["../../../src/models/IBitmapRendererOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { Color } from \"@twin.org/image\";\nimport type { IRendererOptions } from \"./IRendererOptions.js\";\n\n/**\n * Options for rendering.\n */\nexport interface IBitmapRendererOptions extends IRendererOptions {\n\t/**\n\t * Background color.\n\t */\n\tbackground?: Color | string;\n\n\t/**\n\t * Foreground color.\n\t */\n\tforeground?: Color | string;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ // Copyright 2024 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ export {};
4
+ //# sourceMappingURL=IRendererOptions.js.map