Nodes: ${sanitizedData.statistics.totalNodes}
Edges: ${sanitizedData.statistics.totalEdges}
Cycles: ${sanitizedData.statistics.totalCycles}
` } /** * Exports visualization data as JSON. * * @param data - The visualization data to export * @returns JSON string representation */ export function exportVisualizationJson(data: VisualizationData): string { const sanitizedData = sanitizeVisualizationData(data) return JSON.stringify(sanitizedData, null, 2) } /** * Calculates the approximate size of the generated HTML in bytes. * * @param data - The visualization data * @returns Estimated size in bytes */ export function estimateHtmlSize(data: VisualizationData): number { // Base HTML structure + CSS + D3 library const baseSize = 50000 // ~50KB for D3 and styles // Data size (rough estimate) const dataJson = JSON.stringify(data) const dataSize = dataJson.length * 1.1 // Account for some expansion // Scripts const scriptsSize = 10000 // ~10KB for scripts return Math.ceil(baseSize + dataSize + scriptsSize) } /** * Checks if the data would produce an HTML file within size limits. * * @param data - The visualization data * @param maxSizeBytes - Maximum allowed size in bytes (default: 5MB) * @returns True if within limits */ export function isWithinSizeLimit( data: VisualizationData, maxSizeBytes: number = 5 * 1024 * 1024, ): boolean { return estimateHtmlSize(data) < maxSizeBytes }