{"version":3,"sources":["../src/helpers/RenderTracker.ts","../src/helpers/EventTimeline.ts"],"sourcesContent":["/**\n * RenderTracker — Module-level render count tracking for FormDevTools.\n *\n * Tracks per-field render counts and which fields re-rendered on the last change.\n *\n * Disabled by default. Callers (e.g. FormDevTools) must call `enableRenderTracker()`\n * to opt in. See audit P1-22 — when disabled, `trackRender` is a no-op fast path\n * so there is no hot-path cost / unbounded memory growth.\n */\n\nconst renderCounts: Map<string, number> = new Map();\nlet lastRenderedFields: Set<string> = new Set();\nlet pendingRenderedFields: Set<string> = new Set();\nlet totalFormRenders = 0;\nlet enabled = false;\n\n/** Enable render tracking (e.g. when mounting FormDevTools). */\nexport function enableRenderTracker(): void {\n  enabled = true;\n}\n\n/** Disable render tracking and clear state. */\nexport function disableRenderTracker(): void {\n  enabled = false;\n}\n\n/** Whether tracking is currently enabled. */\nexport function isRenderTrackerEnabled(): boolean {\n  return enabled;\n}\n\n/**\n * Record a render for the given field. Call this from RenderField.\n */\nexport function trackRender(fieldName: string): void {\n  if (!enabled) return;\n  renderCounts.set(fieldName, (renderCounts.get(fieldName) ?? 0) + 1);\n  pendingRenderedFields.add(fieldName);\n}\n\n/**\n * Call once per form render cycle to snapshot which fields rendered.\n */\nexport function flushRenderCycle(): void {\n  lastRenderedFields = pendingRenderedFields;\n  pendingRenderedFields = new Set();\n  totalFormRenders++;\n}\n\n/**\n * Returns the current render counts for all tracked fields.\n */\nexport function getRenderCounts(): Map<string, number> {\n  return new Map(renderCounts);\n}\n\n/**\n * Returns the set of field names that rendered in the last cycle.\n */\nexport function getLastRenderedFields(): Set<string> {\n  return new Set(lastRenderedFields);\n}\n\n/**\n * Returns total form render count.\n */\nexport function getTotalFormRenders(): number {\n  return totalFormRenders;\n}\n\n/**\n * Reset all tracking data.\n */\nexport function resetRenderTracker(): void {\n  renderCounts.clear();\n  lastRenderedFields.clear();\n  pendingRenderedFields.clear();\n  totalFormRenders = 0;\n}\n","/**\n * EventTimeline — Module-level chronological event log for FormDevTools.\n *\n * Logs timestamped events from the rules engine, field changes, and validations.\n *\n * Disabled by default. Callers (e.g. FormDevTools) must call `enableEventTimeline()`\n * to opt in. When disabled, `logEvent` is a no-op fast path. See audit P1-22.\n */\n\nexport type TimelineEventType = \"field_change\" | \"rule_evaluated\" | \"validation_run\" | \"form_submit\";\n\nexport interface ITimelineEvent {\n  timestamp: number;\n  type: TimelineEventType;\n  fieldName: string;\n  details: string;\n}\n\nconst timeline: ITimelineEvent[] = [];\nconst MAX_EVENTS = 500;\nlet enabled = false;\n\n/** Enable event timeline logging. */\nexport function enableEventTimeline(): void {\n  enabled = true;\n}\n\n/** Disable event timeline logging. */\nexport function disableEventTimeline(): void {\n  enabled = false;\n}\n\n/** Whether event timeline logging is enabled. */\nexport function isEventTimelineEnabled(): boolean {\n  return enabled;\n}\n\n/**\n * Log a new event to the timeline.\n */\nexport function logEvent(type: TimelineEventType, fieldName: string, details: string): void {\n  if (!enabled) return;\n  timeline.push({ timestamp: Date.now(), type, fieldName, details });\n  // Keep bounded to avoid unbounded memory growth\n  if (timeline.length > MAX_EVENTS) {\n    timeline.splice(0, timeline.length - MAX_EVENTS);\n  }\n}\n\n/**\n * Returns a copy of the full timeline.\n */\nexport function getTimeline(): ITimelineEvent[] {\n  return [...timeline];\n}\n\n/**\n * Clear all timeline events.\n */\nexport function clearTimeline(): void {\n  timeline.length = 0;\n}\n"],"mappings":";AAUA,IAAM,eAAoC,oBAAI,IAAI;AAClD,IAAI,qBAAkC,oBAAI,IAAI;AAC9C,IAAI,wBAAqC,oBAAI,IAAI;AACjD,IAAI,mBAAmB;AACvB,IAAI,UAAU;AAGP,SAAS,sBAA4B;AAC1C,YAAU;AACZ;AAGO,SAAS,uBAA6B;AAC3C,YAAU;AACZ;AAGO,SAAS,yBAAkC;AAChD,SAAO;AACT;AAKO,SAAS,YAAY,WAAyB;AACnD,MAAI,CAAC,QAAS;AACd,eAAa,IAAI,YAAY,aAAa,IAAI,SAAS,KAAK,KAAK,CAAC;AAClE,wBAAsB,IAAI,SAAS;AACrC;AAKO,SAAS,mBAAyB;AACvC,uBAAqB;AACrB,0BAAwB,oBAAI,IAAI;AAChC;AACF;AAKO,SAAS,kBAAuC;AACrD,SAAO,IAAI,IAAI,YAAY;AAC7B;AAKO,SAAS,wBAAqC;AACnD,SAAO,IAAI,IAAI,kBAAkB;AACnC;AAKO,SAAS,sBAA8B;AAC5C,SAAO;AACT;AAKO,SAAS,qBAA2B;AACzC,eAAa,MAAM;AACnB,qBAAmB,MAAM;AACzB,wBAAsB,MAAM;AAC5B,qBAAmB;AACrB;;;AC5DA,IAAM,WAA6B,CAAC;AACpC,IAAM,aAAa;AACnB,IAAIA,WAAU;AAGP,SAAS,sBAA4B;AAC1C,EAAAA,WAAU;AACZ;AAGO,SAAS,uBAA6B;AAC3C,EAAAA,WAAU;AACZ;AAGO,SAAS,yBAAkC;AAChD,SAAOA;AACT;AAKO,SAAS,SAAS,MAAyB,WAAmB,SAAuB;AAC1F,MAAI,CAACA,SAAS;AACd,WAAS,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,WAAW,QAAQ,CAAC;AAEjE,MAAI,SAAS,SAAS,YAAY;AAChC,aAAS,OAAO,GAAG,SAAS,SAAS,UAAU;AAAA,EACjD;AACF;AAKO,SAAS,cAAgC;AAC9C,SAAO,CAAC,GAAG,QAAQ;AACrB;AAKO,SAAS,gBAAsB;AACpC,WAAS,SAAS;AACpB;","names":["enabled"]}