// Die drei Scan-Funktionen, die der Nutzer vor dem Scannen waehlt. Reines // Modul ohne Browser-Zugriff (kein window/document/navigator) - einzige // Quelle fuer Kennung, Beschriftung, Codearten und Verhalten je Funktion. // Sowohl die Auswahl-Oberflaeche als auch main.js lesen ausschliesslich von // hier - es darf keine zweite Stelle geben, an der Codearten oder // Beschriftungen stehen. // // Funktion 2 ("2D-Code") deckt die praktisch vorkommenden zweidimensionalen // Codearten ab: die QR-Varianten (QRCode, MicroQRCode, RMQRCode) sowie // DataMatrix, Aztec und PDF417. Grund: Die 2D-Codes auf den eigenen // RAM-Etiketten sind DataMatrix, nicht QR - eine auf QR beschraenkte Funktion // faende auf dieser Ware nichts. Die Kennung heisst weiterhin `qrcode`, siehe // Kommentar dort. /** * @typedef {object} ScanMode * @property {string} id Kennung, intern verwendet (main.js, Speicherung der Wahl). * @property {string} label Deutsche Beschriftung fuer die Oberflaeche. * @property {string[]} barcodeFormats An decodeBarcodes() zu uebergebende * Codearten (zxing-wasm-Formatnamen). Leer, wenn die Funktion keine * Barcode-Dekodierung nutzt. * @property {boolean} continuousSearch Ob waehrend die Kamera laeuft * fortwaehrend nach Codes gesucht wird (statt nur auf Knopfdruck). * @property {boolean} useOcr Ob die Texterkennung (Tesseract) genutzt wird. */ /** @type {ScanMode[]} */ export const SCAN_MODES = [ { id: 'barcode', label: 'Strichcode', // Eindimensionale Codes, wie sie auf Teilenummern-Etiketten vorkommen. barcodeFormats: ['Code128', 'Code39', 'Code93', 'ITF', 'EAN13', 'EAN8', 'UPCA', 'UPCE', 'Codabar'], continuousSearch: true, useOcr: false, }, { // Kennung bleibt aus historischen Gruenden `qrcode`, obwohl die Funktion // inzwischen alle 2D-Codearten liest (nicht mehr nur QR) - Umbenennung // nicht vorgenommen, da `qrcode` an mehreren Stellen durchgereicht wird. id: 'qrcode', label: '2D-Code', // QR-Varianten plus DataMatrix, Aztec, PDF417 - siehe Kommentar am Kopf. barcodeFormats: ['QRCode', 'MicroQRCode', 'RMQRCode', 'DataMatrix', 'Aztec', 'PDF417'], continuousSearch: true, useOcr: false, }, { id: 'ocr', label: 'Text erkennen', // Keine Codes - allein die Texterkennung, auf Knopfdruck. barcodeFormats: [], continuousSearch: false, useOcr: true, }, ]; /** * Liefert die Funktion zu einer Kennung. * @param {string} id * @returns {ScanMode} * @throws {Error} wenn die Kennung keiner der drei Funktionen entspricht - * ein Programmfehler (main.js darf nie eine fremde Kennung durchreichen), * kein regulaerer Ausgang. */ export function getScanMode(id) { const mode = SCAN_MODES.find((candidate) => candidate.id === id); if (!mode) { throw new Error(`Unbekannte Scan-Funktion: ${id}`); } return mode; }