@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.
- package/dist/es/data/qrAlphaNumeric.js +79 -0
- package/dist/es/data/qrAlphaNumeric.js.map +1 -0
- package/dist/es/data/qrByte8.js +63 -0
- package/dist/es/data/qrByte8.js.map +1 -0
- package/dist/es/data/qrDataBase.js +102 -0
- package/dist/es/data/qrDataBase.js.map +1 -0
- package/dist/es/data/qrNumber.js +73 -0
- package/dist/es/data/qrNumber.js.map +1 -0
- package/dist/es/helpers/bitBuffer.js +79 -0
- package/dist/es/helpers/bitBuffer.js.map +1 -0
- package/dist/es/helpers/mathHelper.js +71 -0
- package/dist/es/helpers/mathHelper.js.map +1 -0
- package/dist/es/helpers/polynomial.js +117 -0
- package/dist/es/helpers/polynomial.js.map +1 -0
- package/dist/es/helpers/qrHelper.js +269 -0
- package/dist/es/helpers/qrHelper.js.map +1 -0
- package/dist/es/helpers/rsBlock.js +293 -0
- package/dist/es/helpers/rsBlock.js.map +1 -0
- package/dist/es/index.js +12 -0
- package/dist/es/index.js.map +1 -0
- package/dist/es/models/IBitmapRendererOptions.js +2 -0
- package/dist/es/models/IBitmapRendererOptions.js.map +1 -0
- package/dist/es/models/IRendererOptions.js +4 -0
- package/dist/es/models/IRendererOptions.js.map +1 -0
- package/dist/es/models/ITextRendererOptions.js +2 -0
- package/dist/es/models/ITextRendererOptions.js.map +1 -0
- package/dist/es/models/errorCorrectLevel.js +26 -0
- package/dist/es/models/errorCorrectLevel.js.map +1 -0
- package/dist/es/models/maskPattern.js +42 -0
- package/dist/es/models/maskPattern.js.map +1 -0
- package/dist/es/models/qrCellData.js +2 -0
- package/dist/es/models/qrCellData.js.map +1 -0
- package/dist/es/models/qrDataMode.js +22 -0
- package/dist/es/models/qrDataMode.js.map +1 -0
- package/dist/es/qr.js +551 -0
- package/dist/es/qr.js.map +1 -0
- package/dist/es/renderers/jpegRenderer.js +80 -0
- package/dist/es/renderers/jpegRenderer.js.map +1 -0
- package/dist/es/renderers/pngRenderer.js +80 -0
- package/dist/es/renderers/pngRenderer.js.map +1 -0
- package/dist/es/renderers/textRenderer.js +65 -0
- package/dist/es/renderers/textRenderer.js.map +1 -0
- package/dist/types/data/qrAlphaNumeric.d.ts +6 -2
- package/dist/types/data/qrByte8.d.ts +2 -2
- package/dist/types/{models → data}/qrDataBase.d.ts +7 -4
- package/dist/types/data/qrNumber.d.ts +6 -2
- package/dist/types/helpers/mathHelper.d.ts +4 -0
- package/dist/types/helpers/polynomial.d.ts +1 -1
- package/dist/types/helpers/qrHelper.d.ts +7 -3
- package/dist/types/helpers/rsBlock.d.ts +5 -1
- package/dist/types/index.d.ts +9 -9
- package/dist/types/models/IBitmapRendererOptions.d.ts +1 -1
- package/dist/types/models/ITextRendererOptions.d.ts +1 -1
- package/dist/types/qr.d.ts +6 -2
- package/dist/types/renderers/jpegRenderer.d.ts +6 -2
- package/dist/types/renderers/pngRenderer.d.ts +6 -2
- package/dist/types/renderers/textRenderer.d.ts +6 -2
- package/docs/changelog.md +296 -0
- package/docs/reference/classes/JpegRenderer.md +8 -0
- package/docs/reference/classes/PngRenderer.md +8 -0
- package/docs/reference/classes/QR.md +8 -0
- package/docs/reference/classes/TextRenderer.md +8 -0
- package/locales/en.json +9 -9
- package/package.json +20 -11
- package/dist/cjs/index.cjs +0 -1999
- package/dist/esm/index.mjs +0 -1993
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr.js","sourceRoot":"","sources":["../../src/qr.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n/* eslint-disable no-bitwise */\n/* eslint-disable no-continue */\n/* eslint-disable no-mixed-operators */\nimport { GeneralError, Is } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport { QRAlphaNumeric } from \"./data/qrAlphaNumeric.js\";\nimport { QRByte8 } from \"./data/qrByte8.js\";\nimport type { QRDataBase } from \"./data/qrDataBase.js\";\nimport { QRNumber } from \"./data/qrNumber.js\";\nimport { BitBuffer } from \"./helpers/bitBuffer.js\";\nimport { MathHelper } from \"./helpers/mathHelper.js\";\nimport { Polynomial } from \"./helpers/polynomial.js\";\nimport { QRHelper } from \"./helpers/qrHelper.js\";\nimport { RSBlock } from \"./helpers/rsBlock.js\";\nimport { ErrorCorrectLevel } from \"./models/errorCorrectLevel.js\";\nimport type { QRCellData } from \"./models/qrCellData.js\";\n\n/**\n * Class to generates QR codes from data.\n * Based on https://github.com/kazuhikoarase/qrcode-generator/ .\n */\nexport class QR {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<QR>();\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _PAD0: number = 0xec;\n\n\t/**\n\t * @internal\n\t */\n\tprivate static readonly _PAD1: number = 0x11;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _typeNumber: number;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _errorCorrectLevel: ErrorCorrectLevel;\n\n\t/**\n\t * @internal\n\t */\n\tprivate readonly _qrData: QRDataBase[];\n\n\t/**\n\t * @internal\n\t */\n\tprivate _modules: QRCellData;\n\n\t/**\n\t * @internal\n\t */\n\tprivate _moduleCount: number;\n\n\t/**\n\t * Create a new instance of QR.\n\t * @param typeNumber 0 to 40, 0 means autodetect.\n\t * @param errorCorrectLevel 'L','M','Q','H'.\n\t * @throws Error if the typeNumber is invalid.\n\t */\n\tconstructor(typeNumber: number = 6, errorCorrectLevel: ErrorCorrectLevel = ErrorCorrectLevel.L) {\n\t\tif (!Is.integer(typeNumber) || typeNumber < 0 || typeNumber > 40) {\n\t\t\tthrow new GeneralError(QR.CLASS_NAME, \"typeNumberRange\", { typeNumber });\n\t\t}\n\t\tthis._typeNumber = typeNumber;\n\t\tthis._errorCorrectLevel = errorCorrectLevel;\n\t\tthis._qrData = [];\n\t\tthis._moduleCount = 0;\n\t\tthis._modules = [];\n\n\t\tMathHelper.initialize();\n\t}\n\n\t/**\n\t * Add text data to the QR Code.\n\t * @param qrData The data to add.\n\t */\n\tpublic addText(qrData: string): void {\n\t\tthis._qrData.push(new QRByte8(qrData));\n\t}\n\n\t/**\n\t * Add number to the QR Code.\n\t * @param qrData The data to add.\n\t */\n\tpublic addNumber(qrData: string): void {\n\t\tthis._qrData.push(new QRNumber(qrData));\n\t}\n\n\t/**\n\t * Add alpha numeric to the QR Code.\n\t * @param qrData The data to add.\n\t */\n\tpublic addAlphaNumeric(qrData: string): void {\n\t\tthis._qrData.push(new QRAlphaNumeric(qrData));\n\t}\n\n\t/**\n\t * Generate the display buffer.\n\t * @returns Boolean buffer of pixels.\n\t */\n\tpublic generate(): QRCellData {\n\t\tthis.autoDetectTypeNumber();\n\n\t\tthis.makeImpl(false, this.getBestMaskPattern());\n\n\t\tconst pixels: QRCellData = [];\n\t\tfor (let y = 0; y < this._moduleCount; y++) {\n\t\t\tfor (let x = 0; x < this._moduleCount; x++) {\n\t\t\t\tpixels[x] = pixels[x] || [];\n\t\t\t\tpixels[x][y] = this.isDark(y, x);\n\t\t\t}\n\t\t}\n\t\treturn pixels;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate isDark(row: number, col: number): boolean | null {\n\t\tif (this._modules[row][col] !== null) {\n\t\t\treturn this._modules[row][col];\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate getBestMaskPattern(): number {\n\t\tlet minLostPoint = 0;\n\t\tlet pattern = 0;\n\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tthis.makeImpl(true, i);\n\n\t\t\tconst lostPoint = this.getLostPoint();\n\n\t\t\tif (i === 0 || minLostPoint > lostPoint) {\n\t\t\t\tminLostPoint = lostPoint;\n\t\t\t\tpattern = i;\n\t\t\t}\n\t\t}\n\n\t\treturn pattern;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate makeImpl(test: boolean, maskPattern: number): void {\n\t\tthis._moduleCount = this._typeNumber * 4 + 17;\n\t\tthis._modules = [];\n\t\tfor (let i = 0; i < this._moduleCount; i++) {\n\t\t\tthis._modules.push([]);\n\t\t\tfor (let j = 0; j < this._moduleCount; j++) {\n\t\t\t\tthis._modules[i].push(null);\n\t\t\t}\n\t\t}\n\n\t\tthis.setupPositionProbePattern(0, 0);\n\t\tthis.setupPositionProbePattern(this._moduleCount - 7, 0);\n\t\tthis.setupPositionProbePattern(0, this._moduleCount - 7);\n\n\t\tthis.setupPositionAdjustPattern();\n\t\tthis.setupTimingPattern();\n\n\t\tthis.setupTypeInfo(test, maskPattern);\n\n\t\tif (this._typeNumber >= 7) {\n\t\t\tthis.setupTypeNumber(test);\n\t\t}\n\n\t\tconst data = this.createData();\n\n\t\tthis.mapData(data, maskPattern);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate mapData(data: number[], maskPattern: number): void {\n\t\tlet inc = -1;\n\t\tlet row = this._moduleCount - 1;\n\t\tlet bitIndex = 7;\n\t\tlet byteIndex = 0;\n\t\tconst maskFunc = QRHelper.getMaskMethod(maskPattern);\n\n\t\tfor (let col = this._moduleCount - 1; col > 0; col -= 2) {\n\t\t\tif (col === 6) {\n\t\t\t\tcol -= 1;\n\t\t\t}\n\n\t\t\tlet flag = true;\n\t\t\twhile (flag) {\n\t\t\t\tfor (let c = 0; c < 2; c++) {\n\t\t\t\t\tif (this._modules[row][col - c] === null) {\n\t\t\t\t\t\tlet dark = false;\n\n\t\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\t\tdark = ((data[byteIndex] >>> bitIndex) & 1) === 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst mask = maskFunc(row, col - c);\n\n\t\t\t\t\t\tif (mask) {\n\t\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._modules[row][col - c] = dark;\n\t\t\t\t\t\tbitIndex -= 1;\n\n\t\t\t\t\t\tif (bitIndex === -1) {\n\t\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trow += inc;\n\n\t\t\t\tif (row < 0 || this._moduleCount <= row) {\n\t\t\t\t\trow -= inc;\n\t\t\t\t\tinc = -inc;\n\t\t\t\t\tflag = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate setupPositionAdjustPattern(): void {\n\t\tconst pos = QRHelper.getPatternPosition(this._typeNumber);\n\n\t\tfor (let i = 0; i < pos.length; i++) {\n\t\t\tfor (let j = 0; j < pos.length; j++) {\n\t\t\t\tconst row = pos[i];\n\t\t\t\tconst col = pos[j];\n\n\t\t\t\tif (this._modules[row][col] !== null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (let r = -2; r <= 2; r++) {\n\t\t\t\t\tfor (let c = -2; c <= 2; c++) {\n\t\t\t\t\t\tif (r === -2 || r === 2 || c === -2 || c === 2 || (r === 0 && c === 0)) {\n\t\t\t\t\t\t\tthis._modules[row + r][col + c] = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._modules[row + r][col + c] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate setupPositionProbePattern(row: number, col: number): void {\n\t\tfor (let r = -1; r <= 7; r++) {\n\t\t\tfor (let c = -1; c <= 7; c++) {\n\t\t\t\tif (\n\t\t\t\t\trow + r <= -1 ||\n\t\t\t\t\tthis._moduleCount <= row + r ||\n\t\t\t\t\tcol + c <= -1 ||\n\t\t\t\t\tthis._moduleCount <= col + c\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n\t\t\t\t\t(c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n\t\t\t\t\t(r >= 2 && r <= 4 && c >= 2 && c <= 4)\n\t\t\t\t) {\n\t\t\t\t\tthis._modules[row + r][col + c] = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis._modules[row + r][col + c] = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate setupTimingPattern(): void {\n\t\tfor (let r = 8; r < this._moduleCount - 8; r++) {\n\t\t\tif (this._modules[r][6] !== null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis._modules[r][6] = r % 2 === 0;\n\t\t}\n\t\tfor (let c = 8; c < this._moduleCount - 8; c++) {\n\t\t\tif (this._modules[6][c] !== null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis._modules[6][c] = c % 2 === 0;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate setupTypeNumber(test: boolean): void {\n\t\tconst bits = QRHelper.getBCHTypeNumber(this._typeNumber);\n\n\t\tfor (let i = 0; i < 18; i++) {\n\t\t\tthis._modules[~~(i / 3)][(i % 3) + this._moduleCount - 8 - 3] =\n\t\t\t\t!test && ((bits >> i) & 1) === 1;\n\t\t}\n\n\t\tfor (let i = 0; i < 18; i++) {\n\t\t\tthis._modules[(i % 3) + this._moduleCount - 8 - 3][~~(i / 3)] =\n\t\t\t\t!test && ((bits >> i) & 1) === 1;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate setupTypeInfo(test: boolean, maskPattern: number): void {\n\t\tconst data = (this._errorCorrectLevel << 3) | maskPattern;\n\t\tconst bits = QRHelper.getBCHTypeInfo(data);\n\n\t\t// vertical\n\t\tfor (let i = 0; i < 15; i++) {\n\t\t\tconst mod = !test && ((bits >> i) & 1) === 1;\n\n\t\t\tif (i < 6) {\n\t\t\t\tthis._modules[i][8] = mod;\n\t\t\t} else if (i < 8) {\n\t\t\t\tthis._modules[i + 1][8] = mod;\n\t\t\t} else {\n\t\t\t\tthis._modules[this._moduleCount - 15 + i][8] = mod;\n\t\t\t}\n\t\t}\n\n\t\t// horizontal\n\t\tfor (let i = 0; i < 15; i++) {\n\t\t\tconst mod = !test && ((bits >> i) & 1) === 1;\n\n\t\t\tif (i < 8) {\n\t\t\t\tthis._modules[8][this._moduleCount - i - 1] = mod;\n\t\t\t} else if (i < 9) {\n\t\t\t\tthis._modules[8][15 - i - 1 + 1] = mod;\n\t\t\t} else {\n\t\t\t\tthis._modules[8][15 - i - 1] = mod;\n\t\t\t}\n\t\t}\n\n\t\t// fixed\n\t\tthis._modules[this._moduleCount - 8][8] = !test;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate getLostPoint(): number {\n\t\tconst moduleCount = this._moduleCount;\n\n\t\tlet lostPoint = 0;\n\n\t\t// LEVEL1\n\n\t\tfor (let row = 0; row < moduleCount; row++) {\n\t\t\tfor (let col = 0; col < moduleCount; col++) {\n\t\t\t\tlet sameCount = 0;\n\t\t\t\tconst dark = this.isDark(row, col);\n\n\t\t\t\tfor (let r = -1; r <= 1; r++) {\n\t\t\t\t\tif (row + r < 0 || moduleCount <= row + r) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let c = -1; c <= 1; c++) {\n\t\t\t\t\t\tif (col + c < 0 || moduleCount <= col + c) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (r === 0 && c === 0) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (dark === this.isDark(row + r, col + c)) {\n\t\t\t\t\t\t\tsameCount++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (sameCount > 5) {\n\t\t\t\t\tlostPoint += 3 + sameCount - 5;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// LEVEL2\n\n\t\tfor (let row = 0; row < moduleCount - 1; row++) {\n\t\t\tfor (let col = 0; col < moduleCount - 1; col++) {\n\t\t\t\tlet count = 0;\n\t\t\t\tif (this.isDark(row, col)) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t\tif (this.isDark(row + 1, col)) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t\tif (this.isDark(row, col + 1)) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t\tif (this.isDark(row + 1, col + 1)) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t\tif (count === 0 || count === 4) {\n\t\t\t\t\tlostPoint += 3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// LEVEL3\n\n\t\tfor (let row = 0; row < moduleCount; row++) {\n\t\t\tfor (let col = 0; col < moduleCount - 6; col++) {\n\t\t\t\tif (\n\t\t\t\t\tthis.isDark(row, col) &&\n\t\t\t\t\t!this.isDark(row, col + 1) &&\n\t\t\t\t\tthis.isDark(row, col + 2) &&\n\t\t\t\t\tthis.isDark(row, col + 3) &&\n\t\t\t\t\tthis.isDark(row, col + 4) &&\n\t\t\t\t\t!this.isDark(row, col + 5) &&\n\t\t\t\t\tthis.isDark(row, col + 6)\n\t\t\t\t) {\n\t\t\t\t\tlostPoint += 40;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let col = 0; col < moduleCount; col++) {\n\t\t\tfor (let row = 0; row < moduleCount - 6; row++) {\n\t\t\t\tif (\n\t\t\t\t\tthis.isDark(row, col) &&\n\t\t\t\t\t!this.isDark(row + 1, col) &&\n\t\t\t\t\tthis.isDark(row + 2, col) &&\n\t\t\t\t\tthis.isDark(row + 3, col) &&\n\t\t\t\t\tthis.isDark(row + 4, col) &&\n\t\t\t\t\t!this.isDark(row + 5, col) &&\n\t\t\t\t\tthis.isDark(row + 6, col)\n\t\t\t\t) {\n\t\t\t\t\tlostPoint += 40;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// LEVEL4\n\n\t\tlet darkCount = 0;\n\n\t\tfor (let col = 0; col < moduleCount; col++) {\n\t\t\tfor (let row = 0; row < moduleCount; row++) {\n\t\t\t\tif (this.isDark(row, col)) {\n\t\t\t\t\tdarkCount++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst ratio = Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;\n\t\tlostPoint += ratio * 10;\n\n\t\treturn lostPoint;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate createData(): number[] {\n\t\tconst rsBlocks: RSBlock[] = RSBlock.getRSBlocks(this._typeNumber, this._errorCorrectLevel);\n\n\t\tconst buffer = new BitBuffer();\n\n\t\tfor (let i = 0; i < this._qrData.length; i++) {\n\t\t\tconst data = this._qrData[i];\n\t\t\tbuffer.put(data.getMode(), 4);\n\t\t\tbuffer.put(data.getLength(), data.getLengthInBits(this._typeNumber));\n\t\t\tdata.write(buffer);\n\t\t}\n\n\t\t// calc max data count\n\t\tlet totalDataCount = 0;\n\t\tfor (let i = 0; i < rsBlocks.length; i++) {\n\t\t\ttotalDataCount += rsBlocks[i].getDataCount();\n\t\t}\n\n\t\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\t\tthrow new GeneralError(QR.CLASS_NAME, \"dataOverflow\", {\n\t\t\t\tlengthInBits: buffer.getLengthInBits(),\n\t\t\t\ttotalDataCount,\n\t\t\t\ttypeNumber: this._typeNumber\n\t\t\t});\n\t\t}\n\n\t\t// end\n\t\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\t\tbuffer.put(0, 4);\n\t\t}\n\n\t\t// padding\n\t\twhile (buffer.getLengthInBits() % 8 !== 0) {\n\t\t\tbuffer.putBit(false);\n\t\t}\n\n\t\t// padding\n\t\tlet flag = true;\n\t\twhile (flag) {\n\t\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbuffer.put(QR._PAD0, 8);\n\n\t\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\t\tflag = false;\n\t\t\t} else {\n\t\t\t\tbuffer.put(QR._PAD1, 8);\n\t\t\t}\n\t\t}\n\n\t\treturn this.createBytes(buffer, rsBlocks);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate createBytes(buffer: BitBuffer, rsBlocks: RSBlock[]): number[] {\n\t\tlet offset = 0;\n\n\t\tlet maxDcCount = 0;\n\t\tlet maxEcCount = 0;\n\n\t\tconst dcData: number[][] = [];\n\t\tconst ecData: number[][] = [];\n\n\t\tfor (let r = 0; r < rsBlocks.length; r++) {\n\t\t\tdcData.push([]);\n\t\t\tecData.push([]);\n\t\t}\n\n\t\tfor (let r = 0; r < rsBlocks.length; r++) {\n\t\t\tconst dcCount = rsBlocks[r].getDataCount();\n\t\t\tconst ecCount = rsBlocks[r].getTotalCount() - dcCount;\n\n\t\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\n\t\t\tdcData[r] = this.createNumArray(dcCount);\n\t\t\tfor (let i = 0; i < dcData[r].length; i++) {\n\t\t\t\tdcData[r][i] = 0xff & buffer.getBuffer()[i + offset];\n\t\t\t}\n\t\t\toffset += dcCount;\n\n\t\t\tconst rsPoly = QRHelper.getErrorCorrectPolynomial(ecCount);\n\t\t\tconst rawPoly = new Polynomial(dcData[r], rsPoly.getLength() - 1);\n\n\t\t\tconst modPoly = rawPoly.mod(rsPoly);\n\t\t\tecData[r] = this.createNumArray(rsPoly.getLength() - 1);\n\t\t\tfor (let i = 0; i < ecData[r].length; i++) {\n\t\t\t\tconst modIndex = i + modPoly.getLength() - ecData[r].length;\n\t\t\t\tecData[r][i] = modIndex >= 0 ? modPoly.getAt(modIndex) : 0;\n\t\t\t}\n\t\t}\n\n\t\tlet totalCodeCount = 0;\n\t\tfor (let i = 0; i < rsBlocks.length; i++) {\n\t\t\ttotalCodeCount += rsBlocks[i].getTotalCount();\n\t\t}\n\n\t\tconst data = this.createNumArray(totalCodeCount);\n\t\tlet index = 0;\n\n\t\tfor (let i = 0; i < maxDcCount; i++) {\n\t\t\tfor (let r = 0; r < rsBlocks.length; r++) {\n\t\t\t\tif (i < dcData[r].length) {\n\t\t\t\t\tdata[index] = dcData[r][i];\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < maxEcCount; i++) {\n\t\t\tfor (let r = 0; r < rsBlocks.length; r++) {\n\t\t\t\tif (i < ecData[r].length) {\n\t\t\t\t\tdata[index] = ecData[r][i];\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate createNumArray(len: number): number[] {\n\t\tconst a: number[] = [];\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\ta.push(0);\n\t\t}\n\t\treturn a;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate autoDetectTypeNumber(): void {\n\t\tif (this._typeNumber === 0) {\n\t\t\tfor (let typeNumber = 1; typeNumber <= 40; typeNumber++) {\n\t\t\t\tconst rsBlocks = RSBlock.getRSBlocks(typeNumber, this._errorCorrectLevel);\n\t\t\t\tconst buffer = new BitBuffer();\n\n\t\t\t\tfor (let i = 0; i < this._qrData.length; i++) {\n\t\t\t\t\tconst data = this._qrData[i];\n\t\t\t\t\tbuffer.put(data.getMode(), 4);\n\t\t\t\t\tbuffer.put(data.getLength(), data.getLengthInBits(typeNumber));\n\t\t\t\t\tdata.write(buffer);\n\t\t\t\t}\n\n\t\t\t\tlet totalDataCount = 0;\n\t\t\t\tfor (let i = 0; i < rsBlocks.length; i++) {\n\t\t\t\t\ttotalDataCount += rsBlocks[i].getDataCount();\n\t\t\t\t}\n\n\t\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8) {\n\t\t\t\t\tthis._typeNumber = typeNumber;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (typeNumber === 40) {\n\t\t\t\t\tthrow new GeneralError(QR.CLASS_NAME, \"typeNumberOverflow\", {\n\t\t\t\t\t\tlengthInBits: buffer.getLengthInBits(),\n\t\t\t\t\t\ttotalDataCount\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Copyright 2024 IOTA Stiftung.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0.
|
|
3
|
+
/* eslint-disable no-mixed-operators */
|
|
4
|
+
import { GeneralError, Guards } from "@twin.org/core";
|
|
5
|
+
import { Color, JpegEncoder } from "@twin.org/image";
|
|
6
|
+
/**
|
|
7
|
+
* Class to render qr data as jpeg.
|
|
8
|
+
*/
|
|
9
|
+
export class JpegRenderer {
|
|
10
|
+
/**
|
|
11
|
+
* Runtime name for the class.
|
|
12
|
+
*/
|
|
13
|
+
static CLASS_NAME = "JpegRenderer";
|
|
14
|
+
/**
|
|
15
|
+
* Render the QR code data as a bitmap.
|
|
16
|
+
* @param cellData The cell data for the QR code.
|
|
17
|
+
* @param options The options for rendering.
|
|
18
|
+
* @returns The bitmap content.
|
|
19
|
+
*/
|
|
20
|
+
static async render(cellData, options) {
|
|
21
|
+
Guards.array(JpegRenderer.CLASS_NAME, "cellData", cellData);
|
|
22
|
+
options = options ?? {};
|
|
23
|
+
options.cellSize = options.cellSize ?? 5;
|
|
24
|
+
options.marginSize = options.marginSize ?? 10;
|
|
25
|
+
Guards.number("IRendererOptions", "options.cellSize", options?.cellSize);
|
|
26
|
+
Guards.number("IRendererOptions", "options.marginSize", options?.marginSize);
|
|
27
|
+
if (options?.cellSize <= 0) {
|
|
28
|
+
throw new GeneralError("IRendererOptions", "cellSizeZero", {
|
|
29
|
+
cellSize: options?.cellSize
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
if (options?.marginSize <= 0) {
|
|
33
|
+
throw new GeneralError("IRendererOptions", "marginSizeZero", {
|
|
34
|
+
marginSize: options?.marginSize
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
const background = Color.coerce(options?.background) ?? Color.fromHex("#FFFFFF");
|
|
38
|
+
const foreground = Color.coerce(options?.foreground) ?? Color.fromHex("#000000");
|
|
39
|
+
const dimensions = cellData.length * options?.cellSize + 2 * options?.marginSize;
|
|
40
|
+
const data = new Uint8Array(dimensions * dimensions * 4);
|
|
41
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
42
|
+
data[i] = background.red();
|
|
43
|
+
data[i + 1] = background.green();
|
|
44
|
+
data[i + 2] = background.blue();
|
|
45
|
+
data[i + 3] = 0xff;
|
|
46
|
+
}
|
|
47
|
+
let dc = options?.marginSize * dimensions * 4;
|
|
48
|
+
for (let x = 0; x < cellData.length; x++) {
|
|
49
|
+
const row = new Uint8Array(dimensions * 4);
|
|
50
|
+
let r = 0;
|
|
51
|
+
for (let i = 0; i < options?.marginSize; i++) {
|
|
52
|
+
row[r++] = background.red();
|
|
53
|
+
row[r++] = background.green();
|
|
54
|
+
row[r++] = background.blue();
|
|
55
|
+
row[r++] = 0xff;
|
|
56
|
+
}
|
|
57
|
+
for (let y = 0; y < cellData[x].length; y++) {
|
|
58
|
+
const colour = cellData[y][x] ? foreground : background;
|
|
59
|
+
for (let c = 0; c < options.cellSize; c++) {
|
|
60
|
+
row[r++] = colour.red();
|
|
61
|
+
row[r++] = colour.green();
|
|
62
|
+
row[r++] = colour.blue();
|
|
63
|
+
row[r++] = 0xff;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
for (let i = 0; i < options.marginSize; i++) {
|
|
67
|
+
row[r++] = background.red();
|
|
68
|
+
row[r++] = background.green();
|
|
69
|
+
row[r++] = background.blue();
|
|
70
|
+
row[r++] = 0xff;
|
|
71
|
+
}
|
|
72
|
+
for (let c = 0; c < options.cellSize; c++) {
|
|
73
|
+
data.set(row, dc);
|
|
74
|
+
dc += row.length;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return new JpegEncoder().encode(dimensions, dimensions, data, 75);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=jpegRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jpegRenderer.js","sourceRoot":"","sources":["../../../src/renderers/jpegRenderer.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, Guards } from \"@twin.org/core\";\nimport { Color, JpegEncoder } from \"@twin.org/image\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IBitmapRendererOptions } from \"../models/IBitmapRendererOptions.js\";\nimport type { IRendererOptions } from \"../models/IRendererOptions.js\";\nimport type { QRCellData } from \"../models/qrCellData.js\";\n\n/**\n * Class to render qr data as jpeg.\n */\nexport class JpegRenderer {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<JpegRenderer>();\n\n\t/**\n\t * Render the QR code data as a bitmap.\n\t * @param cellData The cell data for the QR code.\n\t * @param options The options for rendering.\n\t * @returns The bitmap content.\n\t */\n\tpublic static async render(\n\t\tcellData: QRCellData,\n\t\toptions?: IBitmapRendererOptions\n\t): Promise<Uint8Array> {\n\t\tGuards.array(JpegRenderer.CLASS_NAME, nameof(cellData), cellData);\n\n\t\toptions = options ?? {};\n\t\toptions.cellSize = options.cellSize ?? 5;\n\t\toptions.marginSize = options.marginSize ?? 10;\n\n\t\tGuards.number(nameof<IRendererOptions>(), nameof(options.cellSize), options?.cellSize);\n\t\tGuards.number(nameof<IRendererOptions>(), nameof(options.marginSize), options?.marginSize);\n\n\t\tif (options?.cellSize <= 0) {\n\t\t\tthrow new GeneralError(nameof<IRendererOptions>(), \"cellSizeZero\", {\n\t\t\t\tcellSize: options?.cellSize\n\t\t\t});\n\t\t}\n\t\tif (options?.marginSize <= 0) {\n\t\t\tthrow new GeneralError(nameof<IRendererOptions>(), \"marginSizeZero\", {\n\t\t\t\tmarginSize: options?.marginSize\n\t\t\t});\n\t\t}\n\n\t\tconst background = Color.coerce(options?.background) ?? Color.fromHex(\"#FFFFFF\");\n\t\tconst foreground = Color.coerce(options?.foreground) ?? Color.fromHex(\"#000000\");\n\n\t\tconst dimensions = cellData.length * options?.cellSize + 2 * options?.marginSize;\n\n\t\tconst data = new Uint8Array(dimensions * dimensions * 4);\n\t\tfor (let i = 0; i < data.length; i += 4) {\n\t\t\tdata[i] = background.red();\n\t\t\tdata[i + 1] = background.green();\n\t\t\tdata[i + 2] = background.blue();\n\t\t\tdata[i + 3] = 0xff;\n\t\t}\n\n\t\tlet dc = options?.marginSize * dimensions * 4;\n\t\tfor (let x = 0; x < cellData.length; x++) {\n\t\t\tconst row = new Uint8Array(dimensions * 4);\n\t\t\tlet r = 0;\n\n\t\t\tfor (let i = 0; i < options?.marginSize; i++) {\n\t\t\t\trow[r++] = background.red();\n\t\t\t\trow[r++] = background.green();\n\t\t\t\trow[r++] = background.blue();\n\t\t\t\trow[r++] = 0xff;\n\t\t\t}\n\n\t\t\tfor (let y = 0; y < cellData[x].length; y++) {\n\t\t\t\tconst colour = cellData[y][x] ? foreground : background;\n\t\t\t\tfor (let c = 0; c < options.cellSize; c++) {\n\t\t\t\t\trow[r++] = colour.red();\n\t\t\t\t\trow[r++] = colour.green();\n\t\t\t\t\trow[r++] = colour.blue();\n\t\t\t\t\trow[r++] = 0xff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < options.marginSize; i++) {\n\t\t\t\trow[r++] = background.red();\n\t\t\t\trow[r++] = background.green();\n\t\t\t\trow[r++] = background.blue();\n\t\t\t\trow[r++] = 0xff;\n\t\t\t}\n\n\t\t\tfor (let c = 0; c < options.cellSize; c++) {\n\t\t\t\tdata.set(row, dc);\n\t\t\t\tdc += row.length;\n\t\t\t}\n\t\t}\n\n\t\treturn new JpegEncoder().encode(dimensions, dimensions, data, 75);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Copyright 2024 IOTA Stiftung.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0.
|
|
3
|
+
/* eslint-disable no-mixed-operators */
|
|
4
|
+
import { GeneralError, Guards } from "@twin.org/core";
|
|
5
|
+
import { Color, PngEncoder } from "@twin.org/image";
|
|
6
|
+
/**
|
|
7
|
+
* Class to render qr data as png.
|
|
8
|
+
*/
|
|
9
|
+
export class PngRenderer {
|
|
10
|
+
/**
|
|
11
|
+
* Runtime name for the class.
|
|
12
|
+
*/
|
|
13
|
+
static CLASS_NAME = "PngRenderer";
|
|
14
|
+
/**
|
|
15
|
+
* Render the QR code data as a bitmap.
|
|
16
|
+
* @param cellData The cell data for the QR code.
|
|
17
|
+
* @param options The options for rendering.
|
|
18
|
+
* @returns The bitmap content.
|
|
19
|
+
*/
|
|
20
|
+
static async render(cellData, options) {
|
|
21
|
+
Guards.array(PngRenderer.CLASS_NAME, "cellData", cellData);
|
|
22
|
+
options = options ?? {};
|
|
23
|
+
options.cellSize = options.cellSize ?? 5;
|
|
24
|
+
options.marginSize = options.marginSize ?? 10;
|
|
25
|
+
Guards.number("IRendererOptions", "options.cellSize", options?.cellSize);
|
|
26
|
+
Guards.number("IRendererOptions", "options.marginSize", options?.marginSize);
|
|
27
|
+
if (options?.cellSize <= 0) {
|
|
28
|
+
throw new GeneralError("IRendererOptions", "cellSizeZero", {
|
|
29
|
+
cellSize: options?.cellSize
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
if (options?.marginSize <= 0) {
|
|
33
|
+
throw new GeneralError("IRendererOptions", "marginSizeZero", {
|
|
34
|
+
marginSize: options?.marginSize
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
const background = Color.coerce(options?.background) ?? Color.fromHex("#FFFFFF");
|
|
38
|
+
const foreground = Color.coerce(options?.foreground) ?? Color.fromHex("#000000");
|
|
39
|
+
const dimensions = cellData.length * options?.cellSize + 2 * options?.marginSize;
|
|
40
|
+
const data = new Uint8Array(dimensions * dimensions * 4);
|
|
41
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
42
|
+
data[i] = background.red();
|
|
43
|
+
data[i + 1] = background.green();
|
|
44
|
+
data[i + 2] = background.blue();
|
|
45
|
+
data[i + 3] = background.alpha();
|
|
46
|
+
}
|
|
47
|
+
let dc = options?.marginSize * dimensions * 4;
|
|
48
|
+
for (let x = 0; x < cellData.length; x++) {
|
|
49
|
+
const row = new Uint8Array(dimensions * 4);
|
|
50
|
+
let r = 0;
|
|
51
|
+
for (let i = 0; i < options?.marginSize; i++) {
|
|
52
|
+
row[r++] = background.red();
|
|
53
|
+
row[r++] = background.green();
|
|
54
|
+
row[r++] = background.blue();
|
|
55
|
+
row[r++] = background.alpha();
|
|
56
|
+
}
|
|
57
|
+
for (let y = 0; y < cellData[x].length; y++) {
|
|
58
|
+
const colour = cellData[y][x] ? foreground : background;
|
|
59
|
+
for (let c = 0; c < options?.cellSize; c++) {
|
|
60
|
+
row[r++] = colour.red();
|
|
61
|
+
row[r++] = colour.green();
|
|
62
|
+
row[r++] = colour.blue();
|
|
63
|
+
row[r++] = colour.alpha();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
for (let i = 0; i < options?.marginSize; i++) {
|
|
67
|
+
row[r++] = background.red();
|
|
68
|
+
row[r++] = background.green();
|
|
69
|
+
row[r++] = background.blue();
|
|
70
|
+
row[r++] = background.alpha();
|
|
71
|
+
}
|
|
72
|
+
for (let c = 0; c < options?.cellSize; c++) {
|
|
73
|
+
data.set(row, dc);
|
|
74
|
+
dc += row.length;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return new PngEncoder().encode([data.buffer], dimensions, dimensions);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=pngRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pngRenderer.js","sourceRoot":"","sources":["../../../src/renderers/pngRenderer.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, Guards } from \"@twin.org/core\";\nimport { Color, PngEncoder } from \"@twin.org/image\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IBitmapRendererOptions } from \"../models/IBitmapRendererOptions.js\";\nimport type { IRendererOptions } from \"../models/IRendererOptions.js\";\nimport type { QRCellData } from \"../models/qrCellData.js\";\n\n/**\n * Class to render qr data as png.\n */\nexport class PngRenderer {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<PngRenderer>();\n\n\t/**\n\t * Render the QR code data as a bitmap.\n\t * @param cellData The cell data for the QR code.\n\t * @param options The options for rendering.\n\t * @returns The bitmap content.\n\t */\n\tpublic static async render(\n\t\tcellData: QRCellData,\n\t\toptions?: IBitmapRendererOptions\n\t): Promise<Uint8Array> {\n\t\tGuards.array(PngRenderer.CLASS_NAME, nameof(cellData), cellData);\n\n\t\toptions = options ?? {};\n\t\toptions.cellSize = options.cellSize ?? 5;\n\t\toptions.marginSize = options.marginSize ?? 10;\n\n\t\tGuards.number(nameof<IRendererOptions>(), nameof(options.cellSize), options?.cellSize);\n\t\tGuards.number(nameof<IRendererOptions>(), nameof(options.marginSize), options?.marginSize);\n\n\t\tif (options?.cellSize <= 0) {\n\t\t\tthrow new GeneralError(nameof<IRendererOptions>(), \"cellSizeZero\", {\n\t\t\t\tcellSize: options?.cellSize\n\t\t\t});\n\t\t}\n\t\tif (options?.marginSize <= 0) {\n\t\t\tthrow new GeneralError(nameof<IRendererOptions>(), \"marginSizeZero\", {\n\t\t\t\tmarginSize: options?.marginSize\n\t\t\t});\n\t\t}\n\n\t\tconst background = Color.coerce(options?.background) ?? Color.fromHex(\"#FFFFFF\");\n\t\tconst foreground = Color.coerce(options?.foreground) ?? Color.fromHex(\"#000000\");\n\n\t\tconst dimensions = cellData.length * options?.cellSize + 2 * options?.marginSize;\n\n\t\tconst data = new Uint8Array(dimensions * dimensions * 4);\n\t\tfor (let i = 0; i < data.length; i += 4) {\n\t\t\tdata[i] = background.red();\n\t\t\tdata[i + 1] = background.green();\n\t\t\tdata[i + 2] = background.blue();\n\t\t\tdata[i + 3] = background.alpha();\n\t\t}\n\n\t\tlet dc = options?.marginSize * dimensions * 4;\n\t\tfor (let x = 0; x < cellData.length; x++) {\n\t\t\tconst row = new Uint8Array(dimensions * 4);\n\t\t\tlet r = 0;\n\n\t\t\tfor (let i = 0; i < options?.marginSize; i++) {\n\t\t\t\trow[r++] = background.red();\n\t\t\t\trow[r++] = background.green();\n\t\t\t\trow[r++] = background.blue();\n\t\t\t\trow[r++] = background.alpha();\n\t\t\t}\n\n\t\t\tfor (let y = 0; y < cellData[x].length; y++) {\n\t\t\t\tconst colour = cellData[y][x] ? foreground : background;\n\t\t\t\tfor (let c = 0; c < options?.cellSize; c++) {\n\t\t\t\t\trow[r++] = colour.red();\n\t\t\t\t\trow[r++] = colour.green();\n\t\t\t\t\trow[r++] = colour.blue();\n\t\t\t\t\trow[r++] = colour.alpha();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < options?.marginSize; i++) {\n\t\t\t\trow[r++] = background.red();\n\t\t\t\trow[r++] = background.green();\n\t\t\t\trow[r++] = background.blue();\n\t\t\t\trow[r++] = background.alpha();\n\t\t\t}\n\n\t\t\tfor (let c = 0; c < options?.cellSize; c++) {\n\t\t\t\tdata.set(row, dc);\n\t\t\t\tdc += row.length;\n\t\t\t}\n\t\t}\n\n\t\treturn new PngEncoder().encode([data.buffer], dimensions, dimensions);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Copyright 2024 IOTA Stiftung.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0.
|
|
3
|
+
import { GeneralError, Guards } from "@twin.org/core";
|
|
4
|
+
/**
|
|
5
|
+
* Class to render qr data as text.
|
|
6
|
+
*/
|
|
7
|
+
export class TextRenderer {
|
|
8
|
+
/**
|
|
9
|
+
* Runtime name for the class.
|
|
10
|
+
*/
|
|
11
|
+
static CLASS_NAME = "TextRenderer";
|
|
12
|
+
/**
|
|
13
|
+
* Render the QR code data as text.
|
|
14
|
+
* @param cellData The cell data for the QR code.
|
|
15
|
+
* @param options The options for rendering.
|
|
16
|
+
* @returns The text content.
|
|
17
|
+
*/
|
|
18
|
+
static async render(cellData, options) {
|
|
19
|
+
Guards.array(TextRenderer.CLASS_NAME, "cellData", cellData);
|
|
20
|
+
options = options ?? {};
|
|
21
|
+
options.cellSize = options.cellSize ?? 1;
|
|
22
|
+
options.marginSize = options.marginSize ?? 2;
|
|
23
|
+
Guards.number("IRendererOptions", "options.cellSize", options?.cellSize);
|
|
24
|
+
Guards.number("IRendererOptions", "options.marginSize", options?.marginSize);
|
|
25
|
+
if (options?.cellSize <= 0) {
|
|
26
|
+
throw new GeneralError("IRendererOptions", "cellSizeZero", {
|
|
27
|
+
cellSize: options?.cellSize
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (options?.marginSize <= 0) {
|
|
31
|
+
throw new GeneralError("IRendererOptions", "marginSizeZero", {
|
|
32
|
+
marginSize: options?.marginSize
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
options.onChar = options.onChar ?? "██";
|
|
36
|
+
options.offChar = options.offChar ?? " ";
|
|
37
|
+
const marginSize = options?.marginSize;
|
|
38
|
+
const cellSize = options?.cellSize;
|
|
39
|
+
let text = "";
|
|
40
|
+
for (let m = 0; m < marginSize; m++) {
|
|
41
|
+
text += `${options.offChar.repeat(cellSize * cellData.length)}\r\n`;
|
|
42
|
+
}
|
|
43
|
+
for (let x = 0; x < cellData.length; x++) {
|
|
44
|
+
let line = options.offChar.repeat(marginSize);
|
|
45
|
+
for (let y = 0; y < cellData[x].length; y++) {
|
|
46
|
+
if (cellData[y][x]) {
|
|
47
|
+
line += options.onChar.repeat(cellSize);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
line += options.offChar.repeat(cellSize);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
line += options.offChar.repeat(marginSize);
|
|
54
|
+
line += "\r\n";
|
|
55
|
+
for (let c = 0; c < cellSize; c++) {
|
|
56
|
+
text += line;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
for (let m = 0; m < marginSize; m++) {
|
|
60
|
+
text += `${options.offChar.repeat(cellSize * cellData.length)}\r\n`;
|
|
61
|
+
}
|
|
62
|
+
return text;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=textRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textRenderer.js","sourceRoot":"","sources":["../../../src/renderers/textRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { GeneralError, Guards } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IRendererOptions } from \"../models/IRendererOptions.js\";\nimport type { ITextRendererOptions } from \"../models/ITextRendererOptions.js\";\nimport type { QRCellData } from \"../models/qrCellData.js\";\n\n/**\n * Class to render qr data as text.\n */\nexport class TextRenderer {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<TextRenderer>();\n\n\t/**\n\t * Render the QR code data as text.\n\t * @param cellData The cell data for the QR code.\n\t * @param options The options for rendering.\n\t * @returns The text content.\n\t */\n\tpublic static async render(\n\t\tcellData: QRCellData,\n\t\toptions?: ITextRendererOptions\n\t): Promise<string> {\n\t\tGuards.array(TextRenderer.CLASS_NAME, nameof(cellData), cellData);\n\n\t\toptions = options ?? {};\n\t\toptions.cellSize = options.cellSize ?? 1;\n\t\toptions.marginSize = options.marginSize ?? 2;\n\n\t\tGuards.number(nameof<IRendererOptions>(), nameof(options.cellSize), options?.cellSize);\n\t\tGuards.number(nameof<IRendererOptions>(), nameof(options.marginSize), options?.marginSize);\n\n\t\tif (options?.cellSize <= 0) {\n\t\t\tthrow new GeneralError(nameof<IRendererOptions>(), \"cellSizeZero\", {\n\t\t\t\tcellSize: options?.cellSize\n\t\t\t});\n\t\t}\n\t\tif (options?.marginSize <= 0) {\n\t\t\tthrow new GeneralError(nameof<IRendererOptions>(), \"marginSizeZero\", {\n\t\t\t\tmarginSize: options?.marginSize\n\t\t\t});\n\t\t}\n\n\t\toptions.onChar = options.onChar ?? \"██\";\n\t\toptions.offChar = options.offChar ?? \" \";\n\n\t\tconst marginSize = options?.marginSize;\n\t\tconst cellSize = options?.cellSize;\n\n\t\tlet text = \"\";\n\t\tfor (let m = 0; m < marginSize; m++) {\n\t\t\ttext += `${options.offChar.repeat(cellSize * cellData.length)}\\r\\n`;\n\t\t}\n\t\tfor (let x = 0; x < cellData.length; x++) {\n\t\t\tlet line = options.offChar.repeat(marginSize);\n\t\t\tfor (let y = 0; y < cellData[x].length; y++) {\n\t\t\t\tif (cellData[y][x]) {\n\t\t\t\t\tline += options.onChar.repeat(cellSize);\n\t\t\t\t} else {\n\t\t\t\t\tline += options.offChar.repeat(cellSize);\n\t\t\t\t}\n\t\t\t}\n\t\t\tline += options.offChar.repeat(marginSize);\n\t\t\tline += \"\\r\\n\";\n\n\t\t\tfor (let c = 0; c < cellSize; c++) {\n\t\t\t\ttext += line;\n\t\t\t}\n\t\t}\n\t\tfor (let m = 0; m < marginSize; m++) {\n\t\t\ttext += `${options.offChar.repeat(cellSize * cellData.length)}\\r\\n`;\n\t\t}\n\t\treturn text;\n\t}\n}\n"]}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { QRDataBase } from "./qrDataBase.js";
|
|
2
|
+
import type { BitBuffer } from "../helpers/bitBuffer.js";
|
|
3
3
|
/**
|
|
4
4
|
* QR Data for representing a alpha numeric.
|
|
5
5
|
* Based on https://github.com/kazuhikoarase/qrcode-generator/ .
|
|
6
6
|
*/
|
|
7
7
|
export declare class QRAlphaNumeric extends QRDataBase {
|
|
8
|
+
/**
|
|
9
|
+
* Runtime name for the class.
|
|
10
|
+
*/
|
|
11
|
+
static readonly CLASS_NAME: string;
|
|
8
12
|
/**
|
|
9
13
|
* Create a new instance of QRAlphaNumeric.
|
|
10
14
|
* @param data The data for the qr alpha numeric.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { QRDataBase } from "./qrDataBase.js";
|
|
2
|
+
import type { BitBuffer } from "../helpers/bitBuffer.js";
|
|
3
3
|
/**
|
|
4
4
|
* QR Data for representing a 8 bit data.
|
|
5
5
|
* Based on https://github.com/kazuhikoarase/qrcode-generator/ .
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import type { BitBuffer } from "../helpers/bitBuffer.js";
|
|
2
|
+
import { QRDataMode } from "../models/qrDataMode.js";
|
|
3
3
|
/**
|
|
4
4
|
* Base class for storing QR Data.
|
|
5
5
|
* Based on https://github.com/kazuhikoarase/qrcode-generator/ .
|
|
6
6
|
*/
|
|
7
7
|
export declare abstract class QRDataBase {
|
|
8
|
+
/**
|
|
9
|
+
* Runtime name for the class.
|
|
10
|
+
*/
|
|
11
|
+
static readonly CLASS_NAME: string;
|
|
8
12
|
/**
|
|
9
13
|
* Create a new instance of QRDataBase.
|
|
10
|
-
* @param className The class name for the derived class.
|
|
11
14
|
* @param mode The mode for the data.
|
|
12
15
|
* @param data The data.
|
|
13
16
|
*/
|
|
14
|
-
constructor(
|
|
17
|
+
constructor(mode: QRDataMode, data: string);
|
|
15
18
|
/**
|
|
16
19
|
* Get the data mode.
|
|
17
20
|
* @returns The data mode.
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { QRDataBase } from "./qrDataBase.js";
|
|
2
|
+
import type { BitBuffer } from "../helpers/bitBuffer.js";
|
|
3
3
|
/**
|
|
4
4
|
* QR Data for representing a number.
|
|
5
5
|
* Based on https://github.com/kazuhikoarase/qrcode-generator/ .
|
|
6
6
|
*/
|
|
7
7
|
export declare class QRNumber extends QRDataBase {
|
|
8
|
+
/**
|
|
9
|
+
* Runtime name for the class.
|
|
10
|
+
*/
|
|
11
|
+
static readonly CLASS_NAME: string;
|
|
8
12
|
/**
|
|
9
13
|
* Create a new instance of QRNumber.
|
|
10
14
|
* @param data The data for the qr number.
|
|
@@ -10,7 +10,7 @@ export declare class Polynomial {
|
|
|
10
10
|
*/
|
|
11
11
|
constructor(num: number[], shift?: number);
|
|
12
12
|
/**
|
|
13
|
-
* The
|
|
13
|
+
* The value of the polynomial at given index.
|
|
14
14
|
* @param index The index.
|
|
15
15
|
* @returns The value of the polynomial.
|
|
16
16
|
*/
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { Polynomial } from "./polynomial";
|
|
2
|
-
import { ErrorCorrectLevel } from "../models/errorCorrectLevel";
|
|
3
|
-
import { QRDataMode } from "../models/qrDataMode";
|
|
1
|
+
import { Polynomial } from "./polynomial.js";
|
|
2
|
+
import { ErrorCorrectLevel } from "../models/errorCorrectLevel.js";
|
|
3
|
+
import { QRDataMode } from "../models/qrDataMode.js";
|
|
4
4
|
/**
|
|
5
5
|
* Helper methods for QR generation.
|
|
6
6
|
* Based on https://github.com/kazuhikoarase/qrcode-generator/ .
|
|
7
7
|
*/
|
|
8
8
|
export declare class QRHelper {
|
|
9
|
+
/**
|
|
10
|
+
* Runtime name for the class.
|
|
11
|
+
*/
|
|
12
|
+
static readonly CLASS_NAME: string;
|
|
9
13
|
/**
|
|
10
14
|
* Get the pattern position for the given type number.
|
|
11
15
|
* @param typeNumber The type number to get the pattern for.
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { ErrorCorrectLevel } from "../models/errorCorrectLevel";
|
|
1
|
+
import { ErrorCorrectLevel } from "../models/errorCorrectLevel.js";
|
|
2
2
|
/**
|
|
3
3
|
* Class to represent a RS Block.
|
|
4
4
|
* Based on https://github.com/kazuhikoarase/qrcode-generator/ .
|
|
5
5
|
*/
|
|
6
6
|
export declare class RSBlock {
|
|
7
|
+
/**
|
|
8
|
+
* Runtime name for the class.
|
|
9
|
+
*/
|
|
10
|
+
static readonly CLASS_NAME: string;
|
|
7
11
|
/**
|
|
8
12
|
* Create a new instance of RSBlock.
|
|
9
13
|
* @param totalCount The total count for the block.
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export * from "./models/errorCorrectLevel";
|
|
2
|
-
export * from "./models/IBitmapRendererOptions";
|
|
3
|
-
export * from "./models/IRendererOptions";
|
|
4
|
-
export * from "./models/ITextRendererOptions";
|
|
5
|
-
export * from "./models/qrCellData";
|
|
6
|
-
export * from "./qr";
|
|
7
|
-
export * from "./renderers/jpegRenderer";
|
|
8
|
-
export * from "./renderers/pngRenderer";
|
|
9
|
-
export * from "./renderers/textRenderer";
|
|
1
|
+
export * from "./models/errorCorrectLevel.js";
|
|
2
|
+
export * from "./models/IBitmapRendererOptions.js";
|
|
3
|
+
export * from "./models/IRendererOptions.js";
|
|
4
|
+
export * from "./models/ITextRendererOptions.js";
|
|
5
|
+
export * from "./models/qrCellData.js";
|
|
6
|
+
export * from "./qr.js";
|
|
7
|
+
export * from "./renderers/jpegRenderer.js";
|
|
8
|
+
export * from "./renderers/pngRenderer.js";
|
|
9
|
+
export * from "./renderers/textRenderer.js";
|
package/dist/types/qr.d.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { ErrorCorrectLevel } from "./models/errorCorrectLevel";
|
|
2
|
-
import type { QRCellData } from "./models/qrCellData";
|
|
1
|
+
import { ErrorCorrectLevel } from "./models/errorCorrectLevel.js";
|
|
2
|
+
import type { QRCellData } from "./models/qrCellData.js";
|
|
3
3
|
/**
|
|
4
4
|
* Class to generates QR codes from data.
|
|
5
5
|
* Based on https://github.com/kazuhikoarase/qrcode-generator/ .
|
|
6
6
|
*/
|
|
7
7
|
export declare class QR {
|
|
8
|
+
/**
|
|
9
|
+
* Runtime name for the class.
|
|
10
|
+
*/
|
|
11
|
+
static readonly CLASS_NAME: string;
|
|
8
12
|
/**
|
|
9
13
|
* Create a new instance of QR.
|
|
10
14
|
* @param typeNumber 0 to 40, 0 means autodetect.
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import type { IBitmapRendererOptions } from "../models/IBitmapRendererOptions";
|
|
2
|
-
import type { QRCellData } from "../models/qrCellData";
|
|
1
|
+
import type { IBitmapRendererOptions } from "../models/IBitmapRendererOptions.js";
|
|
2
|
+
import type { QRCellData } from "../models/qrCellData.js";
|
|
3
3
|
/**
|
|
4
4
|
* Class to render qr data as jpeg.
|
|
5
5
|
*/
|
|
6
6
|
export declare class JpegRenderer {
|
|
7
|
+
/**
|
|
8
|
+
* Runtime name for the class.
|
|
9
|
+
*/
|
|
10
|
+
static readonly CLASS_NAME: string;
|
|
7
11
|
/**
|
|
8
12
|
* Render the QR code data as a bitmap.
|
|
9
13
|
* @param cellData The cell data for the QR code.
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import type { IBitmapRendererOptions } from "../models/IBitmapRendererOptions";
|
|
2
|
-
import type { QRCellData } from "../models/qrCellData";
|
|
1
|
+
import type { IBitmapRendererOptions } from "../models/IBitmapRendererOptions.js";
|
|
2
|
+
import type { QRCellData } from "../models/qrCellData.js";
|
|
3
3
|
/**
|
|
4
4
|
* Class to render qr data as png.
|
|
5
5
|
*/
|
|
6
6
|
export declare class PngRenderer {
|
|
7
|
+
/**
|
|
8
|
+
* Runtime name for the class.
|
|
9
|
+
*/
|
|
10
|
+
static readonly CLASS_NAME: string;
|
|
7
11
|
/**
|
|
8
12
|
* Render the QR code data as a bitmap.
|
|
9
13
|
* @param cellData The cell data for the QR code.
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import type { ITextRendererOptions } from "../models/ITextRendererOptions";
|
|
2
|
-
import type { QRCellData } from "../models/qrCellData";
|
|
1
|
+
import type { ITextRendererOptions } from "../models/ITextRendererOptions.js";
|
|
2
|
+
import type { QRCellData } from "../models/qrCellData.js";
|
|
3
3
|
/**
|
|
4
4
|
* Class to render qr data as text.
|
|
5
5
|
*/
|
|
6
6
|
export declare class TextRenderer {
|
|
7
|
+
/**
|
|
8
|
+
* Runtime name for the class.
|
|
9
|
+
*/
|
|
10
|
+
static readonly CLASS_NAME: string;
|
|
7
11
|
/**
|
|
8
12
|
* Render the QR code data as text.
|
|
9
13
|
* @param cellData The cell data for the QR code.
|