import type { LabelTemplateData, StructuredEscTemplate, StructuredLabelTemplate, StructuredTscTemplate, } from './types/printer' function resolveTemplateValue (key: string, data: LabelTemplateData): string { const value = data[key] if (value == null) return '' return String(value) } export function applyTemplateData (content: string, data: LabelTemplateData = {}): string { return String(content || '').replace(/\{\{\s*([\w.-]+)\s*\}\}/g, (_, key: string) => resolveTemplateValue(key, data)) } export function resolveTscTemplate ( template: StructuredLabelTemplate, data: LabelTemplateData = {} ): StructuredTscTemplate { if (!template.tsc) { throw new Error(`Template "${template.key}" does not support TSC printers`) } return { ...template.tsc, items: template.tsc.items.map((item) => { if (item.type === 'text') { return { ...item, text: applyTemplateData(item.text, data) } } if (item.type === 'qrcode' || item.type === 'barcode') { return { ...item, value: applyTemplateData(item.value, data) } } return { ...item } }), } } export function resolveEscTemplate ( template: StructuredLabelTemplate, data: LabelTemplateData = {} ): StructuredEscTemplate { if (!template.esc) { throw new Error(`Template "${template.key}" does not support ESC printers`) } return { ...template.esc, items: template.esc.items.map((item) => { if (item.type === 'text') { return { ...item, text: applyTemplateData(item.text, data) } } if (item.type === 'qrcode' || item.type === 'barcode') { return { ...item, value: applyTemplateData(item.value, data) } } return { ...item } }), } }