templateRenderer.ts
1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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 }
}),
}
}