38 lines
907 B
JavaScript
38 lines
907 B
JavaScript
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 };
|
|
};
|
|
|