plan/react-rewrite #1
@@ -0,0 +1,18 @@
|
||||
import type { AnalyticsAdapter, AnalyticsProps } from "../types.js";
|
||||
import { emitEvent } from "../sink.js";
|
||||
|
||||
export class CtmAdapter implements AnalyticsAdapter {
|
||||
readonly name = "ctm" as const;
|
||||
|
||||
async load(): Promise<void> {
|
||||
// Stub: real CTM script loads in Phase 2A
|
||||
}
|
||||
|
||||
track(event: string, props: AnalyticsProps = {}): void {
|
||||
emitEvent({ kind: "track", name: event, props, provider: this.name, ts: new Date().toISOString() });
|
||||
}
|
||||
|
||||
page(url: string, props: AnalyticsProps = {}): void {
|
||||
emitEvent({ kind: "page", name: url, props, provider: this.name, ts: new Date().toISOString() });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import type { AnalyticsAdapter, AnalyticsProps } from "../types.js";
|
||||
import { emitEvent } from "../sink.js";
|
||||
|
||||
export class DynatraceAdapter implements AnalyticsAdapter {
|
||||
readonly name = "dynatrace" as const;
|
||||
|
||||
async load(): Promise<void> {
|
||||
// Stub: real Dynatrace (Key-Astrom) script loads in Phase 2A
|
||||
}
|
||||
|
||||
track(event: string, props: AnalyticsProps = {}): void {
|
||||
emitEvent({ kind: "track", name: event, props, provider: this.name, ts: new Date().toISOString() });
|
||||
}
|
||||
|
||||
page(url: string, props: AnalyticsProps = {}): void {
|
||||
emitEvent({ kind: "page", name: url, props, provider: this.name, ts: new Date().toISOString() });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import type { AnalyticsAdapter, AnalyticsProps } from "../types.js";
|
||||
import { emitEvent } from "../sink.js";
|
||||
|
||||
export class MetricaAdapter implements AnalyticsAdapter {
|
||||
readonly name = "metrica" as const;
|
||||
|
||||
async load(): Promise<void> {
|
||||
// Stub: real Yandex.Metrica script loads in Phase 2A (after A7 resolves)
|
||||
}
|
||||
|
||||
track(event: string, props: AnalyticsProps = {}): void {
|
||||
emitEvent({ kind: "track", name: event, props, provider: this.name, ts: new Date().toISOString() });
|
||||
}
|
||||
|
||||
page(url: string, props: AnalyticsProps = {}): void {
|
||||
emitEvent({ kind: "page", name: url, props, provider: this.name, ts: new Date().toISOString() });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import type { AnalyticsAdapter, AnalyticsProps } from "../types.js";
|
||||
import { emitEvent } from "../sink.js";
|
||||
|
||||
export class VariocubeAdapter implements AnalyticsAdapter {
|
||||
readonly name = "variocube" as const;
|
||||
|
||||
async load(): Promise<void> {
|
||||
// Stub: real Variocube script loads in Phase 2A
|
||||
}
|
||||
|
||||
track(event: string, props: AnalyticsProps = {}): void {
|
||||
emitEvent({ kind: "track", name: event, props, provider: this.name, ts: new Date().toISOString() });
|
||||
}
|
||||
|
||||
page(url: string, props: AnalyticsProps = {}): void {
|
||||
emitEvent({ kind: "page", name: url, props, provider: this.name, ts: new Date().toISOString() });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user