import QRCode from "qrcode-terminal/vendor/QRCode"; import QRErrorCorrectLevel from "qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel"; const getErrorLevel = (level) => { if (typeof level === "number") { return level; } const normalized = String(level || "M").toUpperCase(); return QRErrorCorrectLevel?.[normalized] ?? QRErrorCorrectLevel.M; }; export const generateQrMatrix = ({ value, errorCorrectionLevel = "M", }) => { if (!value) { throw new Error("generateQrMatrix requires a value"); } const qr = new QRCode(-1, getErrorLevel(errorCorrectionLevel)); qr.addData(value); qr.make(); const size = qr.getModuleCount(); const matrix = new Array(size); for (let row = 0; row < size; row += 1) { matrix[row] = new Array(size); for (let col = 0; col < size; col += 1) { matrix[row][col] = qr.isDark(row, col); } } return { matrix, size }; };