function escapeHtml(str) {
return String(str).replace(/[&<>"']/g, (c) => ({
'&': '&', '<': '<', '>': '>', '"': '"', "'": ''',
}[c]));
}
function formatPrice(price) {
return price == null ? '—' : `€${Number(price).toFixed(2).replace('.', ',')}`;
}
function renderProductRow(product) {
return `
| ${escapeHtml(product.name)} |
bekijken |
${formatPrice(product.last_price)} |
${product.last_checked_at ? escapeHtml(product.last_checked_at) : '—'} |
${escapeHtml(product.last_check_status || '—')} |
|
`;
}
function renderIndex({ products, message }) {
return `
Korting — prijstracker
Korting — prijstracker
${message ? `${escapeHtml(message)}
` : ''}
| Naam | URL | Prijs | Laatst gecontroleerd | Status | |
${products.map(renderProductRow).join('')}
`;
}
module.exports = { renderIndex, escapeHtml, formatPrice };