plan/react-rewrite #1

Merged
gnezim merged 138 commits from plan/react-rewrite into main 2026-04-15 12:21:16 +03:00
4 changed files with 72 additions and 0 deletions
Showing only changes of commit fe31bbfb65 - Show all commits
@@ -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() });
}
}