const fs = require('fs'); const path = require('path'); const badgePath = path.join(__dirname, '..', 'assets', 'spine-badge.png'); let cachedDataUrl = null; function dataUrl() { if (!cachedDataUrl) { cachedDataUrl = 'data:image/png;base64,' + fs.readFileSync(badgePath).toString('base64'); } return cachedDataUrl; } function drawVersion(ctx, width, height, version) { version = String(version || ''); if (version.length > 40 || !/^\d+\.\d+(?:\.\d+)?(?:[-+][a-z0-9][a-z0-9.-]*)?$/i.test(version)) return; const fontSize = Math.max(12, Math.round(Math.min(width, height) * 0.055)); const margin = Math.max(10, Math.round(Math.min(width, height) * 0.03)); ctx.save(); try { ctx.font = '600 ' + fontSize + 'px sans-serif'; ctx.textAlign = 'left'; ctx.textBaseline = 'middle'; const boxHeight = fontSize + 12; const y = height - margin - boxHeight; ctx.fillStyle = 'rgba(0,0,0,0.65)'; ctx.fillRect(margin, y, ctx.measureText(version).width + 16, boxHeight); ctx.fillStyle = '#ffffff'; ctx.fillText(version, margin + 8, y + boxHeight / 2); } finally { ctx.restore(); } } module.exports = { path: badgePath, dataUrl, drawVersion };