@interfere/next 0.0.0 → 0.0.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.
Files changed (49) hide show
  1. package/package.json +2 -2
  2. package/dist/__tests__/core/debug.test.d.ts +0 -2
  3. package/dist/__tests__/core/debug.test.d.ts.map +0 -1
  4. package/dist/__tests__/core/debug.test.js +0 -277
  5. package/dist/__tests__/core/debug.test.js.map +0 -1
  6. package/dist/__tests__/core/persistence.test.d.ts +0 -2
  7. package/dist/__tests__/core/persistence.test.d.ts.map +0 -1
  8. package/dist/__tests__/core/persistence.test.js +0 -129
  9. package/dist/__tests__/core/persistence.test.js.map +0 -1
  10. package/dist/__tests__/react/provider.test.d.ts +0 -2
  11. package/dist/__tests__/react/provider.test.d.ts.map +0 -1
  12. package/dist/__tests__/react/provider.test.jsx +0 -166
  13. package/dist/__tests__/react/provider.test.jsx.map +0 -1
  14. package/dist/__tests__/session/replay.test.d.ts +0 -2
  15. package/dist/__tests__/session/replay.test.d.ts.map +0 -1
  16. package/dist/__tests__/session/replay.test.js +0 -296
  17. package/dist/__tests__/session/replay.test.js.map +0 -1
  18. package/dist/core/client.test.d.ts +0 -2
  19. package/dist/core/client.test.d.ts.map +0 -1
  20. package/dist/core/client.test.js +0 -373
  21. package/dist/core/client.test.js.map +0 -1
  22. package/dist/core/encoders.test.d.ts +0 -2
  23. package/dist/core/encoders.test.d.ts.map +0 -1
  24. package/dist/core/encoders.test.js +0 -56
  25. package/dist/core/encoders.test.js.map +0 -1
  26. package/dist/next/error-boundary.d.ts +0 -17
  27. package/dist/next/error-boundary.d.ts.map +0 -1
  28. package/dist/next/error-boundary.jsx +0 -32
  29. package/dist/next/error-boundary.jsx.map +0 -1
  30. package/dist/persistence/index.d.ts +0 -5
  31. package/dist/persistence/index.d.ts.map +0 -1
  32. package/dist/persistence/index.js +0 -67
  33. package/dist/persistence/index.js.map +0 -1
  34. package/dist/session/persistence.test.d.ts +0 -2
  35. package/dist/session/persistence.test.d.ts.map +0 -1
  36. package/dist/session/persistence.test.js +0 -129
  37. package/dist/session/persistence.test.js.map +0 -1
  38. package/dist/session/rage-click.test.d.ts +0 -2
  39. package/dist/session/rage-click.test.d.ts.map +0 -1
  40. package/dist/session/rage-click.test.js +0 -124
  41. package/dist/session/rage-click.test.js.map +0 -1
  42. package/dist/session/session-manager.test.d.ts +0 -2
  43. package/dist/session/session-manager.test.d.ts.map +0 -1
  44. package/dist/session/session-manager.test.js +0 -1134
  45. package/dist/session/session-manager.test.js.map +0 -1
  46. package/dist/storage/index.d.ts +0 -5
  47. package/dist/storage/index.d.ts.map +0 -1
  48. package/dist/storage/index.js +0 -67
  49. package/dist/storage/index.js.map +0 -1
@@ -1,129 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from "vitest";
2
- import { InterferePersistence } from "./persistence.js";
3
- // Test constants
4
- const TEST_NUMBER_VALUE = 42;
5
- const TEST_STRING_VALUE = "testValue";
6
- // Mock storage for testing
7
- const createMockStorage = () => {
8
- const store = {};
9
- return {
10
- _is_supported: () => true,
11
- _parse: (key) => {
12
- const value = store[key];
13
- return value ? JSON.parse(value) : null;
14
- },
15
- _set: (key, value) => {
16
- store[key] = JSON.stringify(value);
17
- },
18
- _remove: (key) => {
19
- delete store[key];
20
- },
21
- };
22
- };
23
- describe("InterferePersistence", () => {
24
- let mockStorage;
25
- let persistence;
26
- beforeEach(() => {
27
- mockStorage = createMockStorage();
28
- persistence = new InterferePersistence({ persistence: "localStorage" }, "test-surface", false, { customStorage: mockStorage });
29
- });
30
- describe("property management", () => {
31
- it("should set and get properties", () => {
32
- persistence.setProperty("testKey", TEST_STRING_VALUE);
33
- expect(persistence.getProperty("testKey")).toBe(TEST_STRING_VALUE);
34
- });
35
- it("should return typed properties", () => {
36
- persistence.setProperty("number", TEST_NUMBER_VALUE);
37
- const value = persistence.getProperty("number");
38
- expect(value).toBe(TEST_NUMBER_VALUE);
39
- });
40
- it("should remove individual properties", () => {
41
- persistence.setProperty("key1", "value1");
42
- persistence.setProperty("key2", "value2");
43
- persistence.removeProp("key1");
44
- expect(persistence.getProperty("key1")).toBeUndefined();
45
- expect(persistence.getProperty("key2")).toBe("value2");
46
- });
47
- it("should get all properties as immutable copy", () => {
48
- persistence.setProperty("key1", "value1");
49
- persistence.setProperty("key2", "value2");
50
- const props = persistence.getAllProperties();
51
- expect(props).toEqual({ key1: "value1", key2: "value2" });
52
- // Should be immutable - modifying the returned object shouldn't affect internal state
53
- const modifiableProps = props;
54
- modifiableProps.key3 = "value3";
55
- expect(persistence.getProperty("key3")).toBeUndefined();
56
- });
57
- });
58
- describe("register method", () => {
59
- it("should register new properties", () => {
60
- const result = persistence.register({
61
- key1: "value1",
62
- key2: TEST_NUMBER_VALUE,
63
- });
64
- expect(result).toBe(true);
65
- expect(persistence.getProperty("key1")).toBe("value1");
66
- expect(persistence.getProperty("key2")).toBe(TEST_NUMBER_VALUE);
67
- });
68
- it("should detect changes with shallow equality by default", () => {
69
- const obj1 = { nested: "value" };
70
- const obj2 = { nested: "value" };
71
- persistence.register({ testObj: obj1 });
72
- const result = persistence.register({ testObj: obj2 });
73
- // Should detect change even though content is same (shallow equality)
74
- expect(result).toBe(true);
75
- });
76
- it("should use deep equality when enabled", () => {
77
- const deepPersistence = new InterferePersistence({ persistence: "localStorage" }, "test-surface-deep", false, { customStorage: mockStorage, useDeepEquality: true });
78
- const obj1 = { nested: "value" };
79
- const obj2 = { nested: "value" };
80
- deepPersistence.register({ testObj: obj1 });
81
- const result = deepPersistence.register({ testObj: obj2 });
82
- // Should not detect change with deep equality
83
- expect(result).toBe(false);
84
- });
85
- it("should return false when no changes detected", () => {
86
- persistence.register({ key1: "value1" });
87
- const result = persistence.register({ key1: "value1" });
88
- expect(result).toBe(false);
89
- });
90
- });
91
- describe("disabled state", () => {
92
- it("should not save when disabled", () => {
93
- persistence.setDisabled(true);
94
- persistence.setProperty("key", "value");
95
- // Create new instance to check if data was persisted
96
- const newPersistence = new InterferePersistence({ persistence: "localStorage" }, "test-surface", false, { customStorage: mockStorage });
97
- expect(newPersistence.getProperty("key")).toBeUndefined();
98
- });
99
- it("should only save on enable if props exist", () => {
100
- const spySet = vi.spyOn(mockStorage, "_set");
101
- // Enable with no props
102
- persistence.setDisabled(false);
103
- expect(spySet).not.toHaveBeenCalled();
104
- // Add props then enable
105
- persistence.setProperty("key", "value");
106
- persistence.setDisabled(true);
107
- persistence.setDisabled(false);
108
- expect(spySet).toHaveBeenCalled();
109
- });
110
- });
111
- describe("backward compatibility", () => {
112
- it("should support deprecated unregister method", () => {
113
- persistence.setProperty("key", "value");
114
- persistence.unregister("key");
115
- expect(persistence.getProperty("key")).toBeUndefined();
116
- });
117
- });
118
- describe("initialization optimization", () => {
119
- it("should not build storage when disabled", () => {
120
- const disabledPersistence = new InterferePersistence({ persistence: "localStorage" }, "test-surface", true // disabled
121
- );
122
- // Should not throw even without custom storage
123
- expect(() => {
124
- disabledPersistence.setProperty("key", "value");
125
- }).not.toThrow();
126
- });
127
- });
128
- });
129
- //# sourceMappingURL=persistence.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persistence.test.js","sourceRoot":"","sources":["../../src/session/persistence.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=rage-click.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rage-click.test.d.ts","sourceRoot":"","sources":["../../src/session/rage-click.test.ts"],"names":[],"mappings":""}
@@ -1,124 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import RageClick from "./rage-click.js";
3
- // Test constants
4
- const TEST_X = 100;
5
- const TEST_Y = 100;
6
- const SMALL_OFFSET = 5;
7
- const LARGE_OFFSET = 50;
8
- const VERY_LARGE_OFFSET = 100;
9
- const SHORT_DELAY = 100;
10
- const MEDIUM_DELAY = 200;
11
- const LONG_DELAY = 300;
12
- const VERY_LONG_DELAY = 400;
13
- const VERY_LATE_DELAY = 1500;
14
- const MUCH_LATER_DELAY = 3000;
15
- const CUSTOM_TIMEOUT = 500;
16
- const CUSTOM_RADIUS = 50;
17
- const CUSTOM_COUNT = 2;
18
- const CUSTOM_OFFSET_X = 40;
19
- const CUSTOM_OFFSET_Y = 30;
20
- const MAX_TEXT_TEST_LENGTH = 150;
21
- const EXPECTED_TRUNCATED_LENGTH = 100;
22
- describe("RageClick", () => {
23
- it("should detect rage click with default settings", () => {
24
- const detector = new RageClick();
25
- const baseTime = Date.now();
26
- // First two clicks should not trigger
27
- expect(detector.isRageClick(TEST_X, TEST_Y, baseTime)).toBe(false);
28
- expect(detector.isRageClick(TEST_X + SMALL_OFFSET, TEST_Y + SMALL_OFFSET, baseTime + SHORT_DELAY)).toBe(false);
29
- // Third click should trigger rage click
30
- expect(detector.isRageClick(TEST_X - SMALL_OFFSET, TEST_Y - SMALL_OFFSET, baseTime + MEDIUM_DELAY)).toBe(true);
31
- });
32
- it("should not detect rage click if clicks are too far apart", () => {
33
- const detector = new RageClick();
34
- const baseTime = Date.now();
35
- // Clicks outside the radius threshold (default 30px)
36
- expect(detector.isRageClick(TEST_X, TEST_Y, baseTime)).toBe(false);
37
- expect(detector.isRageClick(TEST_X + LARGE_OFFSET, TEST_Y, baseTime + SHORT_DELAY)).toBe(false);
38
- expect(detector.isRageClick(TEST_X, TEST_Y + LARGE_OFFSET, baseTime + MEDIUM_DELAY)).toBe(false);
39
- // Should not trigger even with more clicks
40
- expect(detector.isRageClick(TEST_X + VERY_LARGE_OFFSET, TEST_Y, baseTime + LONG_DELAY)).toBe(false);
41
- });
42
- it("should not detect rage click if clicks are too slow", () => {
43
- const detector = new RageClick();
44
- const baseTime = Date.now();
45
- // Spread clicks over a longer time period so they don't form a rage click
46
- expect(detector.isRageClick(TEST_X, TEST_Y, baseTime)).toBe(false);
47
- expect(detector.isRageClick(TEST_X + SMALL_OFFSET, TEST_Y + SMALL_OFFSET, baseTime + VERY_LATE_DELAY)).toBe(false); // Gap too large
48
- expect(detector.isRageClick(TEST_X - SMALL_OFFSET, TEST_Y - SMALL_OFFSET, baseTime + MUCH_LATER_DELAY)).toBe(false); // Gap too large
49
- });
50
- it("should respect custom configuration", () => {
51
- const detector = new RageClick({
52
- rageClickCount: CUSTOM_COUNT, // Only need 2 clicks
53
- rageClickTimeoutMs: CUSTOM_TIMEOUT, // Within 500ms
54
- rageClickRadiusPx: CUSTOM_RADIUS, // Within 50px
55
- });
56
- const baseTime = Date.now();
57
- // First click
58
- expect(detector.isRageClick(TEST_X, TEST_Y, baseTime)).toBe(false);
59
- // Second click within custom thresholds should trigger
60
- expect(detector.isRageClick(TEST_X + CUSTOM_OFFSET_X, TEST_Y + CUSTOM_OFFSET_Y, baseTime + VERY_LONG_DELAY)).toBe(true);
61
- });
62
- it("should reset after detecting rage click", () => {
63
- const detector = new RageClick();
64
- const baseTime = Date.now();
65
- // Trigger first rage click
66
- expect(detector.isRageClick(TEST_X, TEST_Y, baseTime)).toBe(false);
67
- expect(detector.isRageClick(TEST_X + SMALL_OFFSET, TEST_Y + SMALL_OFFSET, baseTime + SHORT_DELAY)).toBe(false);
68
- expect(detector.isRageClick(TEST_X - SMALL_OFFSET, TEST_Y - SMALL_OFFSET, baseTime + MEDIUM_DELAY)).toBe(true);
69
- // Should reset and require 3 new clicks
70
- expect(detector.isRageClick(TEST_X, TEST_Y, baseTime + LONG_DELAY)).toBe(false);
71
- expect(detector.isRageClick(TEST_X + SMALL_OFFSET, TEST_Y + SMALL_OFFSET, baseTime + VERY_LONG_DELAY)).toBe(false);
72
- expect(detector.isRageClick(TEST_X - SMALL_OFFSET, TEST_Y - SMALL_OFFSET, baseTime + CUSTOM_TIMEOUT)).toBe(true);
73
- });
74
- it("should filter out old clicks", () => {
75
- const detector = new RageClick();
76
- const baseTime = Date.now();
77
- // Add some old clicks
78
- expect(detector.isRageClick(TEST_X, TEST_Y, baseTime)).toBe(false);
79
- expect(detector.isRageClick(TEST_X + SMALL_OFFSET, TEST_Y + SMALL_OFFSET, baseTime + SHORT_DELAY)).toBe(false);
80
- // Wait longer than timeout, then add new clicks
81
- const laterTime = baseTime + VERY_LATE_DELAY; // After timeout window
82
- expect(detector.isRageClick(TEST_X, TEST_Y, laterTime)).toBe(false);
83
- expect(detector.isRageClick(TEST_X + SMALL_OFFSET, TEST_Y + SMALL_OFFSET, laterTime + SHORT_DELAY)).toBe(false);
84
- expect(detector.isRageClick(TEST_X - SMALL_OFFSET, TEST_Y - SMALL_OFFSET, laterTime + MEDIUM_DELAY)).toBe(true);
85
- });
86
- it("should extract element information correctly", () => {
87
- const detector = new RageClick();
88
- // Mock DOM element
89
- const mockElement = {
90
- tagName: "BUTTON",
91
- className: "test-class",
92
- id: "test-id",
93
- innerText: "Click me!",
94
- getAttribute: (attr) => attr === "aria-label" ? "Test Button" : null,
95
- };
96
- const elementInfo = detector.getElementInfo(mockElement);
97
- expect(elementInfo).toEqual({
98
- tagName: "button",
99
- className: "test-class",
100
- id: "test-id",
101
- text: "Click me!",
102
- ariaLabel: "Test Button",
103
- });
104
- });
105
- it("should handle null element gracefully", () => {
106
- const detector = new RageClick();
107
- const elementInfo = detector.getElementInfo(null);
108
- expect(elementInfo).toEqual({});
109
- });
110
- it("should truncate long text", () => {
111
- const detector = new RageClick();
112
- // Mock element with long text
113
- const longText = "a".repeat(MAX_TEXT_TEST_LENGTH);
114
- const mockElement = {
115
- tagName: "DIV",
116
- innerText: longText,
117
- getAttribute: () => null,
118
- };
119
- const elementInfo = detector.getElementInfo(mockElement);
120
- expect(elementInfo.text).toHaveLength(EXPECTED_TRUNCATED_LENGTH);
121
- expect(elementInfo.text).toBe("a".repeat(EXPECTED_TRUNCATED_LENGTH));
122
- });
123
- });
124
- //# sourceMappingURL=rage-click.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rage-click.test.js","sourceRoot":"","sources":["../../src/session/rage-click.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=session-manager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.test.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.test.ts"],"names":[],"mappings":""}