UNPKG

sonarqube-issues-exporter

Version:

Enterprise-level SonarQube issues exporter with TypeScript support for generating comprehensive HTML reports with dark theme

66 lines 2.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.escapeHtml = escapeHtml; exports.formatDate = formatDate; exports.extractFilename = extractFilename; exports.calculateMetrics = calculateMetrics; exports.createProgressBar = createProgressBar; exports.delay = delay; exports.validateUrl = validateUrl; function escapeHtml(str) { return str .replace(/&/g, '&amp;') .replace(/</g, '&lt;') .replace(/>/g, '&gt;') .replace(/"/g, '&quot;') .replace(/'/g, '&#039;'); } function formatDate(date) { const d = typeof date === 'string' ? new Date(date) : date; // Use proper local timezone formatting with full date and time return d.toLocaleString('en-US', { timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone, year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: true, }); } function extractFilename(component) { const parts = component.split(':'); const path = parts.length > 1 ? parts[1] : parts[0]; const filename = path?.split('/').pop(); return filename || path || component; } function calculateMetrics(items, keyExtractors) { const metrics = {}; for (const [metricName, extractor] of Object.entries(keyExtractors)) { metrics[metricName] = {}; for (const item of items) { const key = extractor(item); metrics[metricName][key] = (metrics[metricName][key] || 0) + 1; } } return metrics; } function createProgressBar(current, total, width = 50) { const progress = Math.floor((current / total) * width); const remaining = width - progress; return `[${'='.repeat(progress)}${' '.repeat(remaining)}] ${current}/${total}`; } function delay(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } function validateUrl(url) { try { new URL(url); return true; } catch { return false; } } //# sourceMappingURL=helpers.js.map