genericEsc.ts 1.11 KB
import { buildEscPosLabelData, buildEscPosTestPrintData } from '../protocols/escPosBuilder'
import type { PrinterCandidate, PrinterDriver } from '../types/printer'

const GENERIC_ESC_KEYWORDS = [
  'printer', 'print', 'esc', 'escpos', 'pos', 'receipt', 'ticket',
]

function scoreByKeywords (device: PrinterCandidate, keywords: string[]): number {
  const text = `${device.name || ''} ${device.deviceId || ''}`.toLowerCase()
  let score = 0
  keywords.forEach((keyword) => {
    if (text.includes(keyword)) score += 8
  })
  return score
}

export const genericEscDriver: PrinterDriver = {
  key: 'generic-esc',
  brand: 'Generic',
  model: 'ESC/POS',
  displayName: 'Generic ESC/POS Printer',
  protocol: 'esc',
  preferredBleMtu: 20,
  imageMaxWidthDots: 384,
  imageDpi: 203,
  keywords: GENERIC_ESC_KEYWORDS,
  matches (device) {
    return scoreByKeywords(device, GENERIC_ESC_KEYWORDS)
  },
  resolveConnectionType (device) {
    return device.type === 'ble' ? 'ble' : 'classic'
  },
  buildTestPrintData () {
    return buildEscPosTestPrintData()
  },
  buildLabelData (payload) {
    return buildEscPosLabelData(payload)
  },
}