UNPKG

@stackmemoryai/stackmemory

Version:

Project-scoped memory for AI coding tools. Durable context across sessions with MCP integration, frames, smart retrieval, Claude Code skills, and automatic hooks.

63 lines (62 loc) 2 kB
import { fileURLToPath as __fileURLToPath } from 'url'; import { dirname as __pathDirname } from 'path'; const __filename = __fileURLToPath(import.meta.url); const __dirname = __pathDirname(__filename); function formatBytes(bytes) { if (bytes === 0) return "0 B"; const k = 1024; const sizes = ["B", "KB", "MB", "GB", "TB"]; const i = Math.floor(Math.log(bytes) / Math.log(k)); return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}`; } function formatDuration(ms) { if (ms < 1e3) return `${ms}ms`; const seconds = Math.floor(ms / 1e3); const minutes = Math.floor(seconds / 60); const hours = Math.floor(minutes / 60); const days = Math.floor(hours / 24); if (days > 0) { return `${days}d ${hours % 24}h`; } if (hours > 0) { return `${hours}h ${minutes % 60}m`; } if (minutes > 0) { return `${minutes}m ${seconds % 60}s`; } return `${seconds}s`; } function formatRelativeTime(timestamp) { const now = Date.now(); const diff = now - timestamp; const minutes = Math.floor(diff / 6e4); const hours = Math.floor(minutes / 60); const days = Math.floor(hours / 24); if (days > 0) return `${days} day${days > 1 ? "s" : ""} ago`; if (hours > 0) return `${hours} hour${hours > 1 ? "s" : ""} ago`; if (minutes > 0) return `${minutes} minute${minutes > 1 ? "s" : ""} ago`; return "just now"; } function truncate(str, maxLength) { if (str.length <= maxLength) return str; return str.substring(0, maxLength - 3) + "..."; } function formatPercent(value, total) { if (total === 0) return "0%"; return `${(value / total * 100).toFixed(1)}%`; } function createProgressBar(value, max, width = 20) { const percent = Math.min(value / max, 1); const filled = Math.floor(percent * width); const empty = width - filled; return "\u2588".repeat(filled) + "\u2591".repeat(empty); } export { createProgressBar, formatBytes, formatDuration, formatPercent, formatRelativeTime, truncate }; //# sourceMappingURL=formatting.js.map