diff options
Diffstat (limited to 'shared/metrics-8/src/utils/metrics-dev-console/setup-metrics-dev.ts')
| -rw-r--r-- | shared/metrics-8/src/utils/metrics-dev-console/setup-metrics-dev.ts | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/shared/metrics-8/src/utils/metrics-dev-console/setup-metrics-dev.ts b/shared/metrics-8/src/utils/metrics-dev-console/setup-metrics-dev.ts new file mode 100644 index 0000000..fb7def6 --- /dev/null +++ b/shared/metrics-8/src/utils/metrics-dev-console/setup-metrics-dev.ts @@ -0,0 +1,55 @@ +import { isFlushEvent, makeFlushEvent } from './events/flush-event'; +import { makeRecordEvent } from './events/record-event'; +import type { MetricsOptions, FlushEvent, MetricsObject } from './type'; + +/** + * Updates the metrics console by dispatching appropriate events + */ +const updateMetricsConsole = ( + topic: string, + metricsData: MetricsOptions | FlushEvent, +): void => { + let event = null; + const { metricsDevType, ...data } = metricsData ?? ({} as MetricsObject); + + if (isFlushEvent(metricsData)) { + event = makeFlushEvent(metricsData, topic); + } else if (metricsData) { + event = makeRecordEvent(data, topic); + } + + if (event) { + try { + window.dispatchEvent(event); + } catch (e) { + console.error('metric console failed', e); + } + } +}; + +const isMetricsDevConsoleEnabled = () => { + return ( + typeof window !== 'undefined' && + window.localStorage?.getItem('metrics-dev') === 'true' + ); +}; + +/** + * Sends metrics data to the development console if enabled + * @param metricsData - The metrics data to send + * @param topic - The topic/category for the metrics + */ +export const sendToMetricsDevConsole = ( + metricsData: MetricsOptions, + topic: string, +): void => { + if (import.meta.env.APP_SCOPE === 'internal') { + if (isMetricsDevConsoleEnabled()) { + try { + updateMetricsConsole(topic, metricsData); + } catch (error) { + console.warn('Failed to send metrics to dev console:', error); + } + } + } +}; |
