{"version":3,"sources":["../packages/infrastructure/dashboard/src/state.ts"],"sourcesContent":["import { EventEmitter } from \"node:events\"\n\nimport { z } from \"zod\"\n\nconst MAX_HISTORY = 100\n\nconst MemoryMetricsSchema = z\n  .object({\n    rss: z.number().nonnegative().optional(),\n    heapUsed: z.number().nonnegative().optional(),\n    heapTotal: z.number().nonnegative().optional(),\n  })\n  .passthrough()\n\nconst DashboardMetricsSchema = z\n  .object({\n    generatedAt: z.string().min(1).default(() => new Date().toISOString()),\n    buildMs: z.number().nonnegative().nullable().default(null),\n    scanMs: z.number().nonnegative().nullable().default(null),\n    analyzeMs: z.number().nonnegative().nullable().default(null),\n    compileMs: z.number().nonnegative().nullable().default(null),\n    memoryMb: MemoryMetricsSchema.nullable().default(null),\n    classCount: z.number().int().nonnegative().nullable().default(null),\n    fileCount: z.number().int().nonnegative().nullable().default(null),\n    cssBytes: z.number().int().nonnegative().nullable().default(null),\n    packageCount: z.number().int().nonnegative().nullable().default(null),\n    mode: z.enum([\"idle\", \"jit\", \"build\", \"watch\", \"error\"]).nullable().default(\"idle\"),\n    error: z.string().optional(),\n    lastEventType: z.string().optional(),\n    eventsReceived: z.number().int().nonnegative().optional(),\n    eventsProcessed: z.number().int().nonnegative().optional(),\n    batchesProcessed: z.number().int().nonnegative().optional(),\n    incrementalUpdates: z.number().int().nonnegative().optional(),\n    fullRescans: z.number().int().nonnegative().optional(),\n    skippedLargeFiles: z.number().int().nonnegative().optional(),\n    queueMaxSize: z.number().int().nonnegative().optional(),\n    lastBuildMs: z.number().nonnegative().optional(),\n    avgBuildMs: z.number().nonnegative().optional(),\n  })\n  .passthrough()\n\nfunction createDefaultMetrics() {\n  return DashboardMetricsSchema.parse({})\n}\n\nfunction formatIssues(error: import('zod').ZodError) {\n  return error.issues.map((issue: import('zod').ZodIssue) => `${issue.path.join(\".\") || \"<root>\"}: ${issue.message}`).join(\"; \")\n}\n\nexport const currentMetrics = createDefaultMetrics()\nexport const history: ReturnType<typeof createDefaultMetrics>[] = []\nexport const events = new EventEmitter()\n\nexport function normalizeMetrics(data: Record<string, unknown>) {\n  const parsed = DashboardMetricsSchema.safeParse({\n    ...currentMetrics,\n    ...data,\n  })\n\n  if (parsed.success) {\n    return parsed.data\n  }\n\n  return {\n    ...createDefaultMetrics(),\n    generatedAt: new Date().toISOString(),\n    mode: \"error\",\n    error: formatIssues(parsed.error),\n  }\n}\n\nexport function updateMetrics(data: Record<string, unknown>) {\n  const next = normalizeMetrics(data)\n  Object.assign(currentMetrics, next as object, { generatedAt: new Date().toISOString() })\n  history.push({ ...currentMetrics } as typeof currentMetrics)\n  if (history.length > MAX_HISTORY) history.shift()\n  events.emit(\"update\", currentMetrics)\n  return currentMetrics\n}\n\nexport function resetHistory() {\n  history.length = 0\n  events.emit(\"reset\")\n}\n\nexport function getMetricsSummary() {\n  const issues = []\n\n  if (currentMetrics.error) {\n    issues.push({\n      severity: \"error\",\n      message: currentMetrics.error,\n    })\n  }\n\n  if ((currentMetrics.buildMs ?? 0) > 2000) {\n    issues.push({\n      severity: \"warning\",\n      message: `Build duration is elevated at ${currentMetrics.buildMs}ms.`,\n    })\n  }\n\n  if ((currentMetrics.scanMs ?? 0) > 1000) {\n    issues.push({\n      severity: \"warning\",\n      message: `Scan duration is elevated at ${currentMetrics.scanMs}ms.`,\n    })\n  }\n\n  if ((currentMetrics.memoryMb?.heapUsed ?? 0) > 500) {\n    issues.push({\n      severity: \"warning\",\n      message: `Heap usage is elevated at ${currentMetrics.memoryMb?.heapUsed}MB.`,\n    })\n  }\n\n  const status =\n    currentMetrics.mode === \"error\" || issues.some((issue) => issue.severity === \"error\")\n      ? \"unhealthy\"\n      : issues.some((issue) => issue.severity === \"warning\")\n        ? \"degraded\"\n        : \"healthy\"\n\n  return {\n    workspace: {\n      totalPackages: currentMetrics.packageCount ?? 0,\n      totalFiles: currentMetrics.fileCount ?? 0,\n      totalClasses: currentMetrics.classCount ?? 0,\n      lastScanDurationMs: currentMetrics.scanMs ?? 0,\n      lastBuildDurationMs: currentMetrics.buildMs ?? 0,\n    },\n    cache: {\n      hitRate:\n        (currentMetrics.eventsReceived ?? 0) > 0\n          ? Math.max(\n              0,\n              Math.min(\n                1,\n                (currentMetrics.eventsProcessed ?? 0) / Math.max(currentMetrics.eventsReceived ?? 1, 1)\n              )\n            )\n          : 0,\n      totalEntries: history.length,\n      memoryUsageMb: currentMetrics.memoryMb?.heapUsed ?? 0,\n    },\n    pipeline: {\n      scanDurationMs: currentMetrics.scanMs ?? 0,\n      analyzeDurationMs: currentMetrics.analyzeMs ?? 0,\n      compileDurationMs: currentMetrics.compileMs ?? 0,\n      totalDurationMs:\n        (currentMetrics.scanMs ?? 0) +\n        (currentMetrics.analyzeMs ?? 0) +\n        (currentMetrics.compileMs ?? 0),\n    },\n    health: {\n      status,\n      issues,\n    },\n  }\n}\n"],"mappings":"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","names":[]}