@interfere/react 0.0.1 → 0.0.2-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.mts +15 -0
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +75 -0
- package/dist/client.mjs.map +1 -0
- package/dist/core/events/event-registry.d.mts +23 -0
- package/dist/core/events/event-registry.d.mts.map +1 -0
- package/dist/core/events/event-registry.mjs +32 -0
- package/dist/core/events/event-registry.mjs.map +1 -0
- package/dist/core/events/plugin-event-types.d.mts +92 -0
- package/dist/core/events/plugin-event-types.d.mts.map +1 -0
- package/dist/core/events/plugin-event-types.mjs +25 -0
- package/dist/core/events/plugin-event-types.mjs.map +1 -0
- package/dist/core/plugins/dom-utils.d.mts +9 -0
- package/dist/core/plugins/dom-utils.d.mts.map +1 -0
- package/dist/core/plugins/dom-utils.mjs +25 -0
- package/dist/core/plugins/dom-utils.mjs.map +1 -0
- package/dist/core/plugins/impl/ai-summary.d.mts +6 -0
- package/dist/core/plugins/impl/ai-summary.d.mts.map +1 -0
- package/dist/core/plugins/impl/ai-summary.mjs +122 -0
- package/dist/core/plugins/impl/ai-summary.mjs.map +1 -0
- package/dist/core/plugins/impl/errors.d.mts +9 -0
- package/dist/core/plugins/impl/errors.d.mts.map +1 -0
- package/dist/core/plugins/impl/errors.mjs +153 -0
- package/dist/core/plugins/impl/errors.mjs.map +1 -0
- package/dist/core/plugins/impl/page-events.d.mts +15 -0
- package/dist/core/plugins/impl/page-events.d.mts.map +1 -0
- package/dist/core/plugins/impl/page-events.mjs +131 -0
- package/dist/core/plugins/impl/page-events.mjs.map +1 -0
- package/dist/core/plugins/impl/rage-click.d.mts +6 -0
- package/dist/core/plugins/impl/rage-click.d.mts.map +1 -0
- package/dist/core/plugins/impl/rage-click.mjs +53 -0
- package/dist/core/plugins/impl/rage-click.mjs.map +1 -0
- package/dist/core/plugins/impl/replay.d.mts +9 -0
- package/dist/core/plugins/impl/replay.d.mts.map +1 -0
- package/dist/core/plugins/impl/replay.mjs +144 -0
- package/dist/core/plugins/impl/replay.mjs.map +1 -0
- package/dist/core/plugins/impl/server-tracing.d.mts +7 -0
- package/dist/core/plugins/impl/server-tracing.d.mts.map +1 -0
- package/dist/core/plugins/impl/server-tracing.mjs +160 -0
- package/dist/core/plugins/impl/server-tracing.mjs.map +1 -0
- package/dist/core/plugins/plugin-event-system.d.mts +47 -0
- package/dist/core/plugins/plugin-event-system.d.mts.map +1 -0
- package/dist/core/plugins/plugin-event-system.mjs +75 -0
- package/dist/core/plugins/plugin-event-system.mjs.map +1 -0
- package/dist/core/plugins/plugin-loader.d.mts +22 -0
- package/dist/core/plugins/plugin-loader.d.mts.map +1 -0
- package/dist/core/plugins/plugin-loader.mjs +142 -0
- package/dist/core/plugins/plugin-loader.mjs.map +1 -0
- package/dist/core/runtime/config.d.mts +14 -0
- package/dist/core/runtime/config.d.mts.map +1 -0
- package/dist/core/runtime/config.mjs +39 -0
- package/dist/core/runtime/config.mjs.map +1 -0
- package/dist/core/runtime/context.d.mts +25 -0
- package/dist/core/runtime/context.d.mts.map +1 -0
- package/dist/core/runtime/context.mjs +48 -0
- package/dist/core/runtime/context.mjs.map +1 -0
- package/dist/core/runtime/ingest-target.d.mts +10 -0
- package/dist/core/runtime/ingest-target.d.mts.map +1 -0
- package/dist/core/runtime/ingest-target.mjs +15 -0
- package/dist/core/runtime/ingest-target.mjs.map +1 -0
- package/dist/core/schemas.d.mts +85 -0
- package/dist/core/schemas.d.mts.map +1 -0
- package/dist/core/schemas.mjs +1 -0
- package/dist/effect/build-envelope.d.mts +9 -0
- package/dist/effect/build-envelope.d.mts.map +1 -0
- package/dist/effect/build-envelope.mjs +29 -0
- package/dist/effect/build-envelope.mjs.map +1 -0
- package/dist/effect/errors.d.mts +36 -0
- package/dist/effect/errors.d.mts.map +1 -0
- package/dist/effect/errors.mjs +10 -0
- package/dist/effect/errors.mjs.map +1 -0
- package/dist/effect/layers/config.layer.d.mts +13 -0
- package/dist/effect/layers/config.layer.d.mts.map +1 -0
- package/dist/effect/layers/config.layer.mjs +21 -0
- package/dist/effect/layers/config.layer.mjs.map +1 -0
- package/dist/effect/layers/context.layer.d.mts +12 -0
- package/dist/effect/layers/context.layer.d.mts.map +1 -0
- package/dist/effect/layers/context.layer.mjs +14 -0
- package/dist/effect/layers/context.layer.mjs.map +1 -0
- package/dist/effect/layers/http.layer.d.mts +21 -0
- package/dist/effect/layers/http.layer.d.mts.map +1 -0
- package/dist/effect/layers/http.layer.mjs +113 -0
- package/dist/effect/layers/http.layer.mjs.map +1 -0
- package/dist/effect/layers/queue.layer.d.mts +30 -0
- package/dist/effect/layers/queue.layer.d.mts.map +1 -0
- package/dist/effect/layers/queue.layer.mjs +232 -0
- package/dist/effect/layers/queue.layer.mjs.map +1 -0
- package/dist/effect/layers/session.layer.d.mts +26 -0
- package/dist/effect/layers/session.layer.d.mts.map +1 -0
- package/dist/effect/layers/session.layer.mjs +126 -0
- package/dist/effect/layers/session.layer.mjs.map +1 -0
- package/dist/effect/layers/storage.layer.d.mts +19 -0
- package/dist/effect/layers/storage.layer.d.mts.map +1 -0
- package/dist/effect/layers/storage.layer.mjs +200 -0
- package/dist/effect/layers/storage.layer.mjs.map +1 -0
- package/dist/effect/layers/tracer.layer.d.mts +9 -0
- package/dist/effect/layers/tracer.layer.d.mts.map +1 -0
- package/dist/effect/layers/tracer.layer.mjs +11 -0
- package/dist/effect/layers/tracer.layer.mjs.map +1 -0
- package/dist/effect/runtime-services.d.mts +22 -0
- package/dist/effect/runtime-services.d.mts.map +1 -0
- package/dist/effect/runtime-services.mjs +76 -0
- package/dist/effect/runtime-services.mjs.map +1 -0
- package/dist/effect/tags.d.mts +50 -0
- package/dist/effect/tags.d.mts.map +1 -0
- package/dist/effect/tags.mjs +7 -0
- package/dist/effect/tags.mjs.map +1 -0
- package/dist/hooks/use-runtime-and-plugins.d.mts +7 -0
- package/dist/hooks/use-runtime-and-plugins.d.mts.map +1 -0
- package/dist/hooks/use-runtime-and-plugins.mjs +153 -0
- package/dist/hooks/use-runtime-and-plugins.mjs.map +1 -0
- package/dist/hooks/use-session.d.mts +40 -0
- package/dist/hooks/use-session.d.mts.map +1 -0
- package/dist/hooks/use-session.mjs +96 -0
- package/dist/hooks/use-session.mjs.map +1 -0
- package/dist/package.mjs +100 -0
- package/dist/package.mjs.map +1 -0
- package/dist/provider.d.mts +17 -0
- package/dist/provider.d.mts.map +1 -0
- package/dist/provider.mjs +26 -0
- package/dist/provider.mjs.map +1 -0
- package/dist/server/auth.d.mts +11 -0
- package/dist/server/auth.d.mts.map +1 -0
- package/dist/server/auth.mjs +36 -0
- package/dist/server/auth.mjs.map +1 -0
- package/dist/server/capture.d.mts +18 -0
- package/dist/server/capture.d.mts.map +1 -0
- package/dist/server/capture.mjs +105 -0
- package/dist/server/capture.mjs.map +1 -0
- package/package.json +60 -27
- package/dist/__tests__/client.test.d.ts +0 -2
- package/dist/__tests__/client.test.d.ts.map +0 -1
- package/dist/__tests__/client.test.js +0 -447
- package/dist/__tests__/client.test.js.map +0 -1
- package/dist/__tests__/lib/core/error-handlers.test.d.ts +0 -2
- package/dist/__tests__/lib/core/error-handlers.test.d.ts.map +0 -1
- package/dist/__tests__/lib/core/error-handlers.test.js +0 -596
- package/dist/__tests__/lib/core/error-handlers.test.js.map +0 -1
- package/dist/__tests__/lib/core/event-queue.test.d.ts +0 -2
- package/dist/__tests__/lib/core/event-queue.test.d.ts.map +0 -1
- package/dist/__tests__/lib/core/event-queue.test.js +0 -290
- package/dist/__tests__/lib/core/event-queue.test.js.map +0 -1
- package/dist/__tests__/lib/core/runtime.test.d.ts +0 -2
- package/dist/__tests__/lib/core/runtime.test.d.ts.map +0 -1
- package/dist/__tests__/lib/core/runtime.test.js +0 -133
- package/dist/__tests__/lib/core/runtime.test.js.map +0 -1
- package/dist/__tests__/lib/core/session-manager.test.d.ts +0 -2
- package/dist/__tests__/lib/core/session-manager.test.d.ts.map +0 -1
- package/dist/__tests__/lib/core/session-manager.test.js +0 -356
- package/dist/__tests__/lib/core/session-manager.test.js.map +0 -1
- package/dist/__tests__/provider.test.d.ts +0 -2
- package/dist/__tests__/provider.test.d.ts.map +0 -1
- package/dist/__tests__/provider.test.js +0 -143
- package/dist/__tests__/provider.test.js.map +0 -1
- package/dist/client.d.ts +0 -78
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -219
- package/dist/client.js.map +0 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -5
- package/dist/index.js.map +0 -1
- package/dist/lib/core/error-handlers.d.ts +0 -14
- package/dist/lib/core/error-handlers.d.ts.map +0 -1
- package/dist/lib/core/error-handlers.js +0 -191
- package/dist/lib/core/error-handlers.js.map +0 -1
- package/dist/lib/core/event-queue.d.ts +0 -90
- package/dist/lib/core/event-queue.d.ts.map +0 -1
- package/dist/lib/core/event-queue.js +0 -286
- package/dist/lib/core/event-queue.js.map +0 -1
- package/dist/lib/core/runtime.d.ts +0 -7
- package/dist/lib/core/runtime.d.ts.map +0 -1
- package/dist/lib/core/runtime.js +0 -16
- package/dist/lib/core/runtime.js.map +0 -1
- package/dist/lib/core/session-manager.d.ts +0 -96
- package/dist/lib/core/session-manager.d.ts.map +0 -1
- package/dist/lib/core/session-manager.js +0 -431
- package/dist/lib/core/session-manager.js.map +0 -1
- package/dist/lib/persistence/storage.d.ts +0 -5
- package/dist/lib/persistence/storage.d.ts.map +0 -1
- package/dist/lib/persistence/storage.js +0 -67
- package/dist/lib/persistence/storage.js.map +0 -1
- package/dist/lib/session/rage-click.d.ts +0 -2
- package/dist/lib/session/rage-click.d.ts.map +0 -1
- package/dist/lib/session/rage-click.js +0 -51
- package/dist/lib/session/rage-click.js.map +0 -1
- package/dist/lib/session/replay.d.ts +0 -3
- package/dist/lib/session/replay.d.ts.map +0 -1
- package/dist/lib/session/replay.js +0 -106
- package/dist/lib/session/replay.js.map +0 -1
- package/dist/lib/session/session-summary.d.ts +0 -3
- package/dist/lib/session/session-summary.d.ts.map +0 -1
- package/dist/lib/session/session-summary.js +0 -79
- package/dist/lib/session/session-summary.js.map +0 -1
- package/dist/provider.d.ts +0 -76
- package/dist/provider.d.ts.map +0 -1
- package/dist/provider.js +0 -138
- package/dist/provider.js.map +0 -1
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { EventQueue } from "../../../lib/core/event-queue.js";
|
|
3
|
-
// Test constants
|
|
4
|
-
const FLUSH_TIMEOUT = 100;
|
|
5
|
-
const MAX_QUEUE_SIZE = 10;
|
|
6
|
-
const BATCH_SIZE = 3;
|
|
7
|
-
const RETRY_DELAY_BASE = 1000;
|
|
8
|
-
const RETRY_MULTIPLIER = 2;
|
|
9
|
-
const MAX_RETRIES = 3;
|
|
10
|
-
const EVENTS_OVER_LIMIT = 15;
|
|
11
|
-
const EVENTS_OVER_BATCH = 5;
|
|
12
|
-
describe("EventQueue", () => {
|
|
13
|
-
let eventQueue;
|
|
14
|
-
let onFlush;
|
|
15
|
-
let originalNavigator;
|
|
16
|
-
beforeEach(() => {
|
|
17
|
-
// Clear all mocks
|
|
18
|
-
vi.clearAllMocks();
|
|
19
|
-
// Mock localStorage
|
|
20
|
-
const localStorageMock = {
|
|
21
|
-
getItem: vi.fn(),
|
|
22
|
-
setItem: vi.fn(),
|
|
23
|
-
removeItem: vi.fn(),
|
|
24
|
-
clear: vi.fn(),
|
|
25
|
-
length: 0,
|
|
26
|
-
key: vi.fn(),
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(window, "localStorage", {
|
|
29
|
-
value: localStorageMock,
|
|
30
|
-
writable: true,
|
|
31
|
-
});
|
|
32
|
-
// Mock navigator.onLine
|
|
33
|
-
originalNavigator = global.navigator;
|
|
34
|
-
Object.defineProperty(global, "navigator", {
|
|
35
|
-
value: { onLine: true },
|
|
36
|
-
writable: true,
|
|
37
|
-
});
|
|
38
|
-
// Create onFlush mock
|
|
39
|
-
onFlush = vi.fn().mockResolvedValue(undefined);
|
|
40
|
-
// Create EventQueue instance
|
|
41
|
-
eventQueue = new EventQueue(onFlush, {
|
|
42
|
-
maxRetries: 3,
|
|
43
|
-
batchSize: BATCH_SIZE,
|
|
44
|
-
batchTimeout: FLUSH_TIMEOUT,
|
|
45
|
-
maxQueueSize: MAX_QUEUE_SIZE,
|
|
46
|
-
enableCompression: false,
|
|
47
|
-
enableOfflineQueue: true,
|
|
48
|
-
storageKey: "test_event_queue",
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
afterEach(() => {
|
|
52
|
-
// Clean up
|
|
53
|
-
eventQueue.destroy();
|
|
54
|
-
vi.clearAllTimers();
|
|
55
|
-
// Restore navigator
|
|
56
|
-
if (originalNavigator) {
|
|
57
|
-
Object.defineProperty(global, "navigator", {
|
|
58
|
-
value: originalNavigator,
|
|
59
|
-
writable: true,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
describe("initialization", () => {
|
|
64
|
-
it("should initialize with default config", () => {
|
|
65
|
-
const queue = new EventQueue(onFlush);
|
|
66
|
-
expect(queue.getQueueSize()).toBe(0);
|
|
67
|
-
expect(queue.isOnlineStatus()).toBe(true);
|
|
68
|
-
queue.destroy();
|
|
69
|
-
});
|
|
70
|
-
it("should load persisted events on initialization", () => {
|
|
71
|
-
const persistedEvents = [
|
|
72
|
-
{
|
|
73
|
-
id: "test_1",
|
|
74
|
-
type: "custom",
|
|
75
|
-
payload: { test: true },
|
|
76
|
-
timestamp: Date.now(),
|
|
77
|
-
retryCount: 0,
|
|
78
|
-
windowId: "win_test",
|
|
79
|
-
},
|
|
80
|
-
];
|
|
81
|
-
vi.mocked(localStorage.getItem).mockReturnValue(JSON.stringify(persistedEvents));
|
|
82
|
-
const queue = new EventQueue(onFlush, {
|
|
83
|
-
enableOfflineQueue: true,
|
|
84
|
-
storageKey: "test_queue",
|
|
85
|
-
});
|
|
86
|
-
expect(localStorage.getItem).toHaveBeenCalledWith("test_queue");
|
|
87
|
-
expect(queue.getQueueSize()).toBe(1);
|
|
88
|
-
queue.destroy();
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
describe("adding events", () => {
|
|
92
|
-
it("should add event to queue", () => {
|
|
93
|
-
eventQueue.add("custom", { data: "test" });
|
|
94
|
-
expect(eventQueue.getQueueSize()).toBe(1);
|
|
95
|
-
});
|
|
96
|
-
it("should set window ID on events", () => {
|
|
97
|
-
eventQueue.setWindowId("test_window_id");
|
|
98
|
-
eventQueue.add("custom", { data: "test" });
|
|
99
|
-
// Trigger immediate flush
|
|
100
|
-
eventQueue.flush();
|
|
101
|
-
expect(onFlush).toHaveBeenCalled();
|
|
102
|
-
const events = onFlush.mock.calls[0]?.[0] ?? [];
|
|
103
|
-
expect(events[0].windowId).toBe("test_window_id");
|
|
104
|
-
});
|
|
105
|
-
it("should limit queue size", () => {
|
|
106
|
-
// Add more events than max queue size
|
|
107
|
-
for (let i = 0; i < EVENTS_OVER_LIMIT; i++) {
|
|
108
|
-
eventQueue.add("custom", { index: i });
|
|
109
|
-
}
|
|
110
|
-
// Queue should be limited to maxQueueSize
|
|
111
|
-
expect(eventQueue.getQueueSize()).toBeLessThanOrEqual(MAX_QUEUE_SIZE);
|
|
112
|
-
});
|
|
113
|
-
it("should persist events when offline", () => {
|
|
114
|
-
// Set offline
|
|
115
|
-
Object.defineProperty(global.navigator, "onLine", {
|
|
116
|
-
value: false,
|
|
117
|
-
writable: true,
|
|
118
|
-
});
|
|
119
|
-
const offlineQueue = new EventQueue(onFlush, {
|
|
120
|
-
enableOfflineQueue: true,
|
|
121
|
-
storageKey: "offline_test",
|
|
122
|
-
});
|
|
123
|
-
offlineQueue.add("custom", { offline: true });
|
|
124
|
-
expect(localStorage.setItem).toHaveBeenCalled();
|
|
125
|
-
offlineQueue.destroy();
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
describe("flushing events", () => {
|
|
129
|
-
it("should flush events immediately", async () => {
|
|
130
|
-
eventQueue.add("custom", { data: "test1" });
|
|
131
|
-
eventQueue.add("custom", { data: "test2" });
|
|
132
|
-
await eventQueue.flush();
|
|
133
|
-
expect(onFlush).toHaveBeenCalledTimes(1);
|
|
134
|
-
expect(onFlush).toHaveBeenCalledWith(expect.arrayContaining([
|
|
135
|
-
expect.objectContaining({
|
|
136
|
-
type: "custom",
|
|
137
|
-
payload: { data: "test1" },
|
|
138
|
-
}),
|
|
139
|
-
expect.objectContaining({
|
|
140
|
-
type: "custom",
|
|
141
|
-
payload: { data: "test2" },
|
|
142
|
-
}),
|
|
143
|
-
]));
|
|
144
|
-
expect(eventQueue.getQueueSize()).toBe(0);
|
|
145
|
-
});
|
|
146
|
-
it("should batch events according to batchSize", async () => {
|
|
147
|
-
// Add more events than batch size
|
|
148
|
-
for (let i = 0; i < EVENTS_OVER_BATCH; i++) {
|
|
149
|
-
eventQueue.add("custom", { index: i });
|
|
150
|
-
}
|
|
151
|
-
await eventQueue.flush();
|
|
152
|
-
// Should only flush batchSize events
|
|
153
|
-
expect(onFlush).toHaveBeenCalledWith(expect.arrayContaining([
|
|
154
|
-
expect.objectContaining({ payload: { index: 0 } }),
|
|
155
|
-
expect.objectContaining({ payload: { index: 1 } }),
|
|
156
|
-
expect.objectContaining({ payload: { index: 2 } }),
|
|
157
|
-
]));
|
|
158
|
-
// After first flush, queue continues to flush remaining events
|
|
159
|
-
// Wait for auto-flush to complete
|
|
160
|
-
await new Promise((resolve) => setTimeout(resolve, FLUSH_TIMEOUT + 10));
|
|
161
|
-
// All events should eventually be flushed
|
|
162
|
-
expect(eventQueue.getQueueSize()).toBe(0);
|
|
163
|
-
});
|
|
164
|
-
it("should not flush when offline", async () => {
|
|
165
|
-
Object.defineProperty(global.navigator, "onLine", {
|
|
166
|
-
value: false,
|
|
167
|
-
writable: true,
|
|
168
|
-
});
|
|
169
|
-
const offlineQueue = new EventQueue(onFlush, {
|
|
170
|
-
enableOfflineQueue: true,
|
|
171
|
-
});
|
|
172
|
-
offlineQueue.add("custom", { data: "test" });
|
|
173
|
-
await offlineQueue.flush();
|
|
174
|
-
expect(onFlush).not.toHaveBeenCalled();
|
|
175
|
-
expect(offlineQueue.getQueueSize()).toBe(1);
|
|
176
|
-
offlineQueue.destroy();
|
|
177
|
-
});
|
|
178
|
-
it("should auto-flush after timeout", async () => {
|
|
179
|
-
vi.useFakeTimers();
|
|
180
|
-
eventQueue.add("custom", { data: "test" });
|
|
181
|
-
// Fast-forward past flush timeout
|
|
182
|
-
vi.advanceTimersByTime(FLUSH_TIMEOUT + 1);
|
|
183
|
-
// Allow promises to resolve
|
|
184
|
-
await vi.runAllTimersAsync();
|
|
185
|
-
expect(onFlush).toHaveBeenCalled();
|
|
186
|
-
vi.useRealTimers();
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe("retry logic", () => {
|
|
190
|
-
it("should retry failed events", async () => {
|
|
191
|
-
vi.useFakeTimers();
|
|
192
|
-
// Make onFlush fail first time, succeed second time
|
|
193
|
-
onFlush
|
|
194
|
-
.mockRejectedValueOnce(new Error("Network error"))
|
|
195
|
-
.mockResolvedValue(undefined);
|
|
196
|
-
eventQueue.add("custom", { data: "test" });
|
|
197
|
-
// Try to flush (will fail)
|
|
198
|
-
await eventQueue.flush();
|
|
199
|
-
// Fast-forward past retry delay (1 second for first retry)
|
|
200
|
-
vi.advanceTimersByTime(RETRY_DELAY_BASE + 1);
|
|
201
|
-
// Allow timers to execute
|
|
202
|
-
await vi.runAllTimersAsync();
|
|
203
|
-
// Event should be retried and succeed
|
|
204
|
-
expect(onFlush).toHaveBeenCalledTimes(2);
|
|
205
|
-
vi.useRealTimers();
|
|
206
|
-
});
|
|
207
|
-
it("should drop events after max retries", async () => {
|
|
208
|
-
vi.useFakeTimers();
|
|
209
|
-
// Make onFlush always fail
|
|
210
|
-
onFlush.mockRejectedValue(new Error("Persistent error"));
|
|
211
|
-
eventQueue.add("custom", { data: "test" });
|
|
212
|
-
// Try to flush (will fail)
|
|
213
|
-
await eventQueue.flush();
|
|
214
|
-
// Simulate multiple retry attempts
|
|
215
|
-
for (let i = 0; i < MAX_RETRIES; i++) {
|
|
216
|
-
const delay = RETRY_DELAY_BASE * RETRY_MULTIPLIER ** i; // Exponential backoff
|
|
217
|
-
vi.advanceTimersByTime(delay + 1);
|
|
218
|
-
await vi.runAllTimersAsync();
|
|
219
|
-
}
|
|
220
|
-
// Event should be dropped after max retries
|
|
221
|
-
expect(eventQueue.getQueueSize()).toBe(0);
|
|
222
|
-
vi.useRealTimers();
|
|
223
|
-
});
|
|
224
|
-
});
|
|
225
|
-
describe("online/offline handling", () => {
|
|
226
|
-
it("should handle going offline", () => {
|
|
227
|
-
eventQueue.add("custom", { data: "test" });
|
|
228
|
-
// Simulate going offline
|
|
229
|
-
const offlineEvent = new Event("offline");
|
|
230
|
-
window.dispatchEvent(offlineEvent);
|
|
231
|
-
expect(eventQueue.isOnlineStatus()).toBe(false);
|
|
232
|
-
// Should save to storage
|
|
233
|
-
expect(localStorage.setItem).toHaveBeenCalled();
|
|
234
|
-
});
|
|
235
|
-
it("should handle coming back online", () => {
|
|
236
|
-
// Start offline
|
|
237
|
-
Object.defineProperty(global.navigator, "onLine", {
|
|
238
|
-
value: false,
|
|
239
|
-
writable: true,
|
|
240
|
-
});
|
|
241
|
-
const queue = new EventQueue(onFlush, {
|
|
242
|
-
enableOfflineQueue: true,
|
|
243
|
-
});
|
|
244
|
-
queue.add("custom", { data: "test" });
|
|
245
|
-
// Come back online
|
|
246
|
-
Object.defineProperty(global.navigator, "onLine", {
|
|
247
|
-
value: true,
|
|
248
|
-
writable: true,
|
|
249
|
-
});
|
|
250
|
-
const onlineEvent = new Event("online");
|
|
251
|
-
window.dispatchEvent(onlineEvent);
|
|
252
|
-
expect(queue.isOnlineStatus()).toBe(true);
|
|
253
|
-
queue.destroy();
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
describe("cleanup", () => {
|
|
257
|
-
it("should clean up resources on destroy", () => {
|
|
258
|
-
vi.useFakeTimers();
|
|
259
|
-
eventQueue.add("custom", { data: "test" });
|
|
260
|
-
// Destroy should save pending events
|
|
261
|
-
eventQueue.destroy();
|
|
262
|
-
expect(localStorage.setItem).toHaveBeenCalled();
|
|
263
|
-
// Should not flush after destroy
|
|
264
|
-
vi.advanceTimersByTime(FLUSH_TIMEOUT + 1);
|
|
265
|
-
expect(onFlush).not.toHaveBeenCalled();
|
|
266
|
-
vi.useRealTimers();
|
|
267
|
-
});
|
|
268
|
-
it("should remove event listeners on destroy", () => {
|
|
269
|
-
const removeEventListenerSpy = vi.spyOn(window, "removeEventListener");
|
|
270
|
-
eventQueue.destroy();
|
|
271
|
-
expect(removeEventListenerSpy).toHaveBeenCalledWith("online", expect.any(Function));
|
|
272
|
-
expect(removeEventListenerSpy).toHaveBeenCalledWith("offline", expect.any(Function));
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
describe("compression", () => {
|
|
276
|
-
it("should handle compression when enabled", async () => {
|
|
277
|
-
const compressedQueue = new EventQueue(onFlush, {
|
|
278
|
-
enableCompression: true,
|
|
279
|
-
batchSize: 2,
|
|
280
|
-
});
|
|
281
|
-
compressedQueue.add("custom", { data: "test1" });
|
|
282
|
-
compressedQueue.add("custom", { data: "test2" });
|
|
283
|
-
await compressedQueue.flush();
|
|
284
|
-
// Compression is a mock implementation, just ensure it doesn't break
|
|
285
|
-
expect(onFlush).toHaveBeenCalled();
|
|
286
|
-
compressedQueue.destroy();
|
|
287
|
-
});
|
|
288
|
-
});
|
|
289
|
-
});
|
|
290
|
-
//# sourceMappingURL=event-queue.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event-queue.test.js","sourceRoot":"","sources":["../../../../src/__tests__/lib/core/event-queue.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/lib/core/runtime.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
2
|
-
import { detectRuntime, isClient } from "../../../lib/core/runtime.js";
|
|
3
|
-
describe("Runtime Detection", () => {
|
|
4
|
-
describe("isClient()", () => {
|
|
5
|
-
it("should return true when window is defined", () => {
|
|
6
|
-
// jsdom provides window object by default
|
|
7
|
-
expect(isClient()).toBe(true);
|
|
8
|
-
});
|
|
9
|
-
it("should return false when window is undefined", () => {
|
|
10
|
-
// Store original window reference
|
|
11
|
-
const originalWindow = global.window;
|
|
12
|
-
try {
|
|
13
|
-
// @ts-expect-error - Temporarily removing window for testing
|
|
14
|
-
global.window = undefined;
|
|
15
|
-
expect(isClient()).toBe(false);
|
|
16
|
-
}
|
|
17
|
-
finally {
|
|
18
|
-
// Restore window
|
|
19
|
-
global.window = originalWindow;
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
describe("detectRuntime()", () => {
|
|
24
|
-
// Store original global values
|
|
25
|
-
let originalWindow;
|
|
26
|
-
let originalEdgeRuntime;
|
|
27
|
-
beforeEach(() => {
|
|
28
|
-
// Save original values
|
|
29
|
-
originalWindow = global.window;
|
|
30
|
-
originalEdgeRuntime = Reflect.get(globalThis, "EdgeRuntime");
|
|
31
|
-
});
|
|
32
|
-
afterEach(() => {
|
|
33
|
-
// Restore original values
|
|
34
|
-
global.window = originalWindow;
|
|
35
|
-
if (originalEdgeRuntime !== undefined) {
|
|
36
|
-
Reflect.set(globalThis, "EdgeRuntime", originalEdgeRuntime);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
Reflect.deleteProperty(globalThis, "EdgeRuntime");
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
it("should detect 'client' runtime when window is defined", () => {
|
|
43
|
-
// jsdom provides window by default
|
|
44
|
-
const runtime = detectRuntime();
|
|
45
|
-
expect(runtime).toBe("client");
|
|
46
|
-
expect(runtime).toBe("client");
|
|
47
|
-
});
|
|
48
|
-
it("should detect 'edge' runtime when EdgeRuntime is present", () => {
|
|
49
|
-
// Remove window to simulate non-browser environment
|
|
50
|
-
// @ts-expect-error - Temporarily removing window for testing
|
|
51
|
-
global.window = undefined;
|
|
52
|
-
// Add EdgeRuntime marker
|
|
53
|
-
Reflect.set(globalThis, "EdgeRuntime", { version: "test" });
|
|
54
|
-
const runtime = detectRuntime();
|
|
55
|
-
expect(runtime).toBe("edge");
|
|
56
|
-
expect(runtime).toBe("edge");
|
|
57
|
-
});
|
|
58
|
-
it("should detect 'server' runtime when neither window nor EdgeRuntime exist", () => {
|
|
59
|
-
// Remove window to simulate non-browser environment
|
|
60
|
-
// @ts-expect-error - Temporarily removing window for testing
|
|
61
|
-
global.window = undefined;
|
|
62
|
-
// Ensure EdgeRuntime doesn't exist
|
|
63
|
-
Reflect.deleteProperty(globalThis, "EdgeRuntime");
|
|
64
|
-
const runtime = detectRuntime();
|
|
65
|
-
expect(runtime).toBe("server");
|
|
66
|
-
expect(runtime).toBe("server");
|
|
67
|
-
});
|
|
68
|
-
it("should prioritize 'client' over 'edge' when both markers exist", () => {
|
|
69
|
-
// Window exists (provided by jsdom)
|
|
70
|
-
// Add EdgeRuntime marker as well
|
|
71
|
-
Reflect.set(globalThis, "EdgeRuntime", { version: "test" });
|
|
72
|
-
// Client should take precedence
|
|
73
|
-
const runtime = detectRuntime();
|
|
74
|
-
expect(runtime).toBe("client");
|
|
75
|
-
});
|
|
76
|
-
it("should handle EdgeRuntime with different values", () => {
|
|
77
|
-
// @ts-expect-error - Temporarily removing window for testing
|
|
78
|
-
global.window = undefined;
|
|
79
|
-
// Test with different EdgeRuntime values
|
|
80
|
-
const edgeRuntimeValues = [
|
|
81
|
-
{},
|
|
82
|
-
{ version: "1.0.0" },
|
|
83
|
-
true,
|
|
84
|
-
"edge",
|
|
85
|
-
// biome-ignore lint/style/noMagicNumbers: Test value
|
|
86
|
-
123,
|
|
87
|
-
null,
|
|
88
|
-
];
|
|
89
|
-
for (const value of edgeRuntimeValues) {
|
|
90
|
-
Reflect.set(globalThis, "EdgeRuntime", value);
|
|
91
|
-
expect(detectRuntime()).toBe("edge");
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
it("should be deterministic and return consistent results", () => {
|
|
95
|
-
// Multiple calls should return the same result
|
|
96
|
-
const firstCall = detectRuntime();
|
|
97
|
-
const secondCall = detectRuntime();
|
|
98
|
-
const thirdCall = detectRuntime();
|
|
99
|
-
expect(firstCall).toBe(secondCall);
|
|
100
|
-
expect(secondCall).toBe(thirdCall);
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
describe("Type Safety", () => {
|
|
104
|
-
it("should return values that match the Runtime type", () => {
|
|
105
|
-
const runtime = detectRuntime();
|
|
106
|
-
const validRuntimes = ["client", "server", "edge"];
|
|
107
|
-
expect(validRuntimes).toContain(runtime);
|
|
108
|
-
});
|
|
109
|
-
it("should have exhaustive runtime detection", () => {
|
|
110
|
-
// This test ensures all Runtime types are handled
|
|
111
|
-
const checkExhaustive = (runtime) => {
|
|
112
|
-
switch (runtime) {
|
|
113
|
-
case "client":
|
|
114
|
-
return "browser";
|
|
115
|
-
case "server":
|
|
116
|
-
return "node";
|
|
117
|
-
case "edge":
|
|
118
|
-
return "edge";
|
|
119
|
-
default: {
|
|
120
|
-
// This should never be reached if Runtime type is exhaustive
|
|
121
|
-
const _exhaustive = runtime;
|
|
122
|
-
throw new Error(`Unhandled runtime: ${_exhaustive}`);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
// Test all possible runtime values
|
|
127
|
-
expect(() => checkExhaustive("client")).not.toThrow();
|
|
128
|
-
expect(() => checkExhaustive("server")).not.toThrow();
|
|
129
|
-
expect(() => checkExhaustive("edge")).not.toThrow();
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
//# sourceMappingURL=runtime.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.test.js","sourceRoot":"","sources":["../../../../src/__tests__/lib/core/runtime.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/lib/core/session-manager.test.ts"],"names":[],"mappings":""}
|