import { d320faxDriver } from '../drivers/d320fax' import { genericEscDriver } from '../drivers/genericEsc' import { genericTscDriver } from '../drivers/genericTsc' import { gpD320fxDriver } from '../drivers/gpD320fx' import { gpR3Driver } from '../drivers/gpR3' import type { PrinterCandidate, PrinterDriver, ResolvedPrinterCandidate } from '../types/printer' const printerDrivers: PrinterDriver[] = [ gpR3Driver, gpD320fxDriver, d320faxDriver, genericEscDriver, genericTscDriver, ] export function getPrinterDrivers (): PrinterDriver[] { return printerDrivers } export function getPrinterDriverByKey (key?: string): PrinterDriver { return printerDrivers.find(driver => driver.key === key) || genericTscDriver } export function resolvePrinterDriver (device: PrinterCandidate): PrinterDriver { let bestDriver: PrinterDriver = genericTscDriver let bestScore = -1 printerDrivers.forEach((driver) => { const score = driver.matches(device) if (score > bestScore) { bestScore = score bestDriver = driver } }) return bestDriver } export function describePrinterCandidate (device: PrinterCandidate): ResolvedPrinterCandidate { const driver = resolvePrinterDriver(device) return { ...device, driverKey: driver.key, driverName: driver.displayName, protocol: driver.protocol, resolvedType: driver.resolveConnectionType(device), } }