@tracelog/lib 0.9.0 → 0.11.0
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/README.md +128 -361
- package/dist/browser/tracelog.esm.js +1371 -937
- package/dist/browser/tracelog.esm.js.map +1 -1
- package/dist/browser/tracelog.js +2 -2
- package/dist/browser/tracelog.js.map +1 -1
- package/dist/cjs/app.d.ts +2 -0
- package/dist/cjs/app.d.ts.map +1 -1
- package/dist/cjs/app.js +5 -0
- package/dist/cjs/app.js.map +1 -1
- package/dist/cjs/constants/config.constants.d.ts +27 -1
- package/dist/cjs/constants/config.constants.d.ts.map +1 -1
- package/dist/cjs/constants/config.constants.js +47 -3
- package/dist/cjs/constants/config.constants.js.map +1 -1
- package/dist/cjs/constants/error.constants.d.ts +15 -0
- package/dist/cjs/constants/error.constants.d.ts.map +1 -1
- package/dist/cjs/constants/error.constants.js +19 -1
- package/dist/cjs/constants/error.constants.js.map +1 -1
- package/dist/cjs/handlers/click.handler.d.ts +17 -0
- package/dist/cjs/handlers/click.handler.d.ts.map +1 -1
- package/dist/cjs/handlers/click.handler.js +96 -5
- package/dist/cjs/handlers/click.handler.js.map +1 -1
- package/dist/cjs/handlers/error.handler.d.ts +7 -0
- package/dist/cjs/handlers/error.handler.d.ts.map +1 -1
- package/dist/cjs/handlers/error.handler.js +35 -0
- package/dist/cjs/handlers/error.handler.js.map +1 -1
- package/dist/cjs/handlers/page-view.handler.d.ts +1 -0
- package/dist/cjs/handlers/page-view.handler.d.ts.map +1 -1
- package/dist/cjs/handlers/page-view.handler.js +11 -0
- package/dist/cjs/handlers/page-view.handler.js.map +1 -1
- package/dist/cjs/handlers/performance.handler.js +5 -5
- package/dist/cjs/handlers/performance.handler.js.map +1 -1
- package/dist/cjs/handlers/viewport.handler.d.ts +44 -0
- package/dist/cjs/handlers/viewport.handler.d.ts.map +1 -0
- package/dist/cjs/handlers/viewport.handler.js +286 -0
- package/dist/cjs/handlers/viewport.handler.js.map +1 -0
- package/dist/cjs/managers/event.manager.d.ts +23 -3
- package/dist/cjs/managers/event.manager.d.ts.map +1 -1
- package/dist/cjs/managers/event.manager.js +166 -10
- package/dist/cjs/managers/event.manager.js.map +1 -1
- package/dist/cjs/managers/sender.manager.d.ts.map +1 -1
- package/dist/cjs/managers/sender.manager.js +12 -0
- package/dist/cjs/managers/sender.manager.js.map +1 -1
- package/dist/cjs/types/config.types.d.ts +9 -0
- package/dist/cjs/types/config.types.d.ts.map +1 -1
- package/dist/cjs/types/config.types.js.map +1 -1
- package/dist/cjs/types/event.types.d.ts +4 -1
- package/dist/cjs/types/event.types.d.ts.map +1 -1
- package/dist/cjs/types/event.types.js +1 -0
- package/dist/cjs/types/event.types.js.map +1 -1
- package/dist/cjs/types/viewport.types.d.ts +82 -0
- package/dist/cjs/types/viewport.types.d.ts.map +1 -0
- package/dist/cjs/types/viewport.types.js +3 -0
- package/dist/cjs/types/viewport.types.js.map +1 -0
- package/dist/cjs/utils/network/url.utils.d.ts +2 -1
- package/dist/cjs/utils/network/url.utils.d.ts.map +1 -1
- package/dist/cjs/utils/network/url.utils.js +6 -2
- package/dist/cjs/utils/network/url.utils.js.map +1 -1
- package/dist/cjs/utils/validations/config-validations.utils.d.ts.map +1 -1
- package/dist/cjs/utils/validations/config-validations.utils.js +91 -0
- package/dist/cjs/utils/validations/config-validations.utils.js.map +1 -1
- package/dist/esm/app.d.ts +2 -0
- package/dist/esm/app.d.ts.map +1 -1
- package/dist/esm/app.js +5 -0
- package/dist/esm/app.js.map +1 -1
- package/dist/esm/constants/config.constants.d.ts +27 -1
- package/dist/esm/constants/config.constants.d.ts.map +1 -1
- package/dist/esm/constants/config.constants.js +45 -1
- package/dist/esm/constants/config.constants.js.map +1 -1
- package/dist/esm/constants/error.constants.d.ts +15 -0
- package/dist/esm/constants/error.constants.d.ts.map +1 -1
- package/dist/esm/constants/error.constants.js +18 -0
- package/dist/esm/constants/error.constants.js.map +1 -1
- package/dist/esm/handlers/click.handler.d.ts +17 -0
- package/dist/esm/handlers/click.handler.d.ts.map +1 -1
- package/dist/esm/handlers/click.handler.js +97 -6
- package/dist/esm/handlers/click.handler.js.map +1 -1
- package/dist/esm/handlers/error.handler.d.ts +7 -0
- package/dist/esm/handlers/error.handler.d.ts.map +1 -1
- package/dist/esm/handlers/error.handler.js +36 -1
- package/dist/esm/handlers/error.handler.js.map +1 -1
- package/dist/esm/handlers/page-view.handler.d.ts +1 -0
- package/dist/esm/handlers/page-view.handler.d.ts.map +1 -1
- package/dist/esm/handlers/page-view.handler.js +11 -0
- package/dist/esm/handlers/page-view.handler.js.map +1 -1
- package/dist/esm/handlers/performance.handler.js +5 -5
- package/dist/esm/handlers/performance.handler.js.map +1 -1
- package/dist/esm/handlers/viewport.handler.d.ts +44 -0
- package/dist/esm/handlers/viewport.handler.d.ts.map +1 -0
- package/dist/esm/handlers/viewport.handler.js +282 -0
- package/dist/esm/handlers/viewport.handler.js.map +1 -0
- package/dist/esm/managers/event.manager.d.ts +23 -3
- package/dist/esm/managers/event.manager.d.ts.map +1 -1
- package/dist/esm/managers/event.manager.js +167 -11
- package/dist/esm/managers/event.manager.js.map +1 -1
- package/dist/esm/managers/sender.manager.d.ts.map +1 -1
- package/dist/esm/managers/sender.manager.js +13 -1
- package/dist/esm/managers/sender.manager.js.map +1 -1
- package/dist/esm/types/config.types.d.ts +9 -0
- package/dist/esm/types/config.types.d.ts.map +1 -1
- package/dist/esm/types/config.types.js.map +1 -1
- package/dist/esm/types/event.types.d.ts +4 -1
- package/dist/esm/types/event.types.d.ts.map +1 -1
- package/dist/esm/types/event.types.js +1 -0
- package/dist/esm/types/event.types.js.map +1 -1
- package/dist/esm/types/viewport.types.d.ts +82 -0
- package/dist/esm/types/viewport.types.d.ts.map +1 -0
- package/dist/esm/types/viewport.types.js +2 -0
- package/dist/esm/types/viewport.types.js.map +1 -0
- package/dist/esm/utils/network/url.utils.d.ts +2 -1
- package/dist/esm/utils/network/url.utils.d.ts.map +1 -1
- package/dist/esm/utils/network/url.utils.js +6 -2
- package/dist/esm/utils/network/url.utils.js.map +1 -1
- package/dist/esm/utils/validations/config-validations.utils.d.ts.map +1 -1
- package/dist/esm/utils/validations/config-validations.utils.js +92 -1
- package/dist/esm/utils/validations/config-validations.utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ErrorHandler = void 0;
|
|
4
4
|
const state_manager_1 = require("../managers/state.manager");
|
|
5
5
|
const types_1 = require("../types");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
6
7
|
const error_constants_1 = require("../constants/error.constants");
|
|
7
8
|
/**
|
|
8
9
|
* Simplified error handler for tracking JavaScript errors and unhandled promise rejections
|
|
@@ -12,6 +13,9 @@ class ErrorHandler extends state_manager_1.StateManager {
|
|
|
12
13
|
constructor(eventManager) {
|
|
13
14
|
super();
|
|
14
15
|
this.recentErrors = new Map();
|
|
16
|
+
this.errorBurstCounter = 0;
|
|
17
|
+
this.burstWindowStart = 0;
|
|
18
|
+
this.burstBackoffUntil = 0;
|
|
15
19
|
this.handleError = (event) => {
|
|
16
20
|
if (!this.shouldSample()) {
|
|
17
21
|
return;
|
|
@@ -58,8 +62,39 @@ class ErrorHandler extends state_manager_1.StateManager {
|
|
|
58
62
|
window.removeEventListener('error', this.handleError);
|
|
59
63
|
window.removeEventListener('unhandledrejection', this.handleRejection);
|
|
60
64
|
this.recentErrors.clear();
|
|
65
|
+
this.errorBurstCounter = 0;
|
|
66
|
+
this.burstWindowStart = 0;
|
|
67
|
+
this.burstBackoffUntil = 0;
|
|
61
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Checks sampling rate and burst detection (Phase 3)
|
|
71
|
+
* Returns false if in cooldown period after burst detection
|
|
72
|
+
*/
|
|
62
73
|
shouldSample() {
|
|
74
|
+
const now = Date.now();
|
|
75
|
+
// Check if in backoff period (Phase 3)
|
|
76
|
+
if (now < this.burstBackoffUntil) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
// Reset burst counter if window expired
|
|
80
|
+
if (now - this.burstWindowStart > error_constants_1.ERROR_BURST_WINDOW_MS) {
|
|
81
|
+
this.errorBurstCounter = 0;
|
|
82
|
+
this.burstWindowStart = now;
|
|
83
|
+
}
|
|
84
|
+
// Increment burst counter
|
|
85
|
+
this.errorBurstCounter++;
|
|
86
|
+
// Trigger backoff if burst threshold exceeded
|
|
87
|
+
if (this.errorBurstCounter > error_constants_1.ERROR_BURST_THRESHOLD) {
|
|
88
|
+
this.burstBackoffUntil = now + error_constants_1.ERROR_BURST_BACKOFF_MS;
|
|
89
|
+
(0, utils_1.log)('warn', 'Error burst detected - entering cooldown', {
|
|
90
|
+
data: {
|
|
91
|
+
errorsInWindow: this.errorBurstCounter,
|
|
92
|
+
cooldownMs: error_constants_1.ERROR_BURST_BACKOFF_MS,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
// Normal sampling logic
|
|
63
98
|
const config = this.get('config');
|
|
64
99
|
const samplingRate = config?.errorSampling ?? error_constants_1.DEFAULT_ERROR_SAMPLING_RATE;
|
|
65
100
|
return Math.random() < samplingRate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.handler.js","sourceRoot":"","sources":["../../../src/handlers/error.handler.ts"],"names":[],"mappings":";;;AACA,6DAAyD;AACzD,oCAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"error.handler.js","sourceRoot":"","sources":["../../../src/handlers/error.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ export declare class PageViewHandler extends StateManager {
|
|
|
5
5
|
private readonly onTrack;
|
|
6
6
|
private originalPushState?;
|
|
7
7
|
private originalReplaceState?;
|
|
8
|
+
private lastPageViewTime;
|
|
8
9
|
constructor(eventManager: EventManager, onTrack: () => void);
|
|
9
10
|
startTracking(): void;
|
|
10
11
|
stopTracking(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-view.handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/page-view.handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"page-view.handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/page-view.handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IAErC,OAAO,CAAC,iBAAiB,CAAC,CAAkC;IAC5D,OAAO,CAAC,oBAAoB,CAAC,CAAqC;IAClE,OAAO,CAAC,gBAAgB,CAAK;gBAEjB,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,IAAI;IAO3D,aAAa,IAAI,IAAI;IAUrB,YAAY,IAAI,IAAI;IAepB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CA+B/B;IAEF,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,mBAAmB;CAoB5B"}
|
|
@@ -4,15 +4,24 @@ exports.PageViewHandler = void 0;
|
|
|
4
4
|
const types_1 = require("../types");
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
6
|
const state_manager_1 = require("../managers/state.manager");
|
|
7
|
+
const config_constants_1 = require("../constants/config.constants");
|
|
7
8
|
class PageViewHandler extends state_manager_1.StateManager {
|
|
8
9
|
constructor(eventManager, onTrack) {
|
|
9
10
|
super();
|
|
11
|
+
this.lastPageViewTime = 0;
|
|
10
12
|
this.trackCurrentPage = () => {
|
|
11
13
|
const rawUrl = window.location.href;
|
|
12
14
|
const normalizedUrl = (0, utils_1.normalizeUrl)(rawUrl, this.get('config').sensitiveQueryParams);
|
|
13
15
|
if (this.get('pageUrl') === normalizedUrl) {
|
|
14
16
|
return;
|
|
15
17
|
}
|
|
18
|
+
// Throttle: Prevent rapid navigation spam
|
|
19
|
+
const now = Date.now();
|
|
20
|
+
const throttleMs = this.get('config').pageViewThrottleMs ?? config_constants_1.DEFAULT_PAGE_VIEW_THROTTLE_MS;
|
|
21
|
+
if (now - this.lastPageViewTime < throttleMs) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this.lastPageViewTime = now;
|
|
16
25
|
this.onTrack();
|
|
17
26
|
const fromUrl = this.get('pageUrl');
|
|
18
27
|
this.set('pageUrl', normalizedUrl);
|
|
@@ -43,6 +52,7 @@ class PageViewHandler extends state_manager_1.StateManager {
|
|
|
43
52
|
if (this.originalReplaceState) {
|
|
44
53
|
window.history.replaceState = this.originalReplaceState;
|
|
45
54
|
}
|
|
55
|
+
this.lastPageViewTime = 0;
|
|
46
56
|
}
|
|
47
57
|
patchHistory(method) {
|
|
48
58
|
const original = window.history[method];
|
|
@@ -60,6 +70,7 @@ class PageViewHandler extends state_manager_1.StateManager {
|
|
|
60
70
|
trackInitialPageView() {
|
|
61
71
|
const normalizedUrl = (0, utils_1.normalizeUrl)(window.location.href, this.get('config').sensitiveQueryParams);
|
|
62
72
|
const pageViewData = this.extractPageViewData();
|
|
73
|
+
this.lastPageViewTime = Date.now();
|
|
63
74
|
this.eventManager.track({
|
|
64
75
|
type: types_1.EventType.PAGE_VIEW,
|
|
65
76
|
page_url: normalizedUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-view.handler.js","sourceRoot":"","sources":["../../../src/handlers/page-view.handler.ts"],"names":[],"mappings":";;;AAAA,oCAAmD;AACnD,oCAAwC;AACxC,6DAAyD;
|
|
1
|
+
{"version":3,"file":"page-view.handler.js","sourceRoot":"","sources":["../../../src/handlers/page-view.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -117,11 +117,11 @@ class PerformanceHandler extends state_manager_1.StateManager {
|
|
|
117
117
|
const value = Number(metric.value.toFixed(constants_1.PRECISION_TWO_DECIMALS));
|
|
118
118
|
this.sendVital({ type, value });
|
|
119
119
|
};
|
|
120
|
-
onLCP(report('LCP'));
|
|
121
|
-
onCLS(report('CLS'));
|
|
122
|
-
onFCP(report('FCP'));
|
|
123
|
-
onTTFB(report('TTFB'));
|
|
124
|
-
onINP(report('INP'));
|
|
120
|
+
onLCP(report('LCP'), { reportAllChanges: false });
|
|
121
|
+
onCLS(report('CLS'), { reportAllChanges: false });
|
|
122
|
+
onFCP(report('FCP'), { reportAllChanges: false });
|
|
123
|
+
onTTFB(report('TTFB'), { reportAllChanges: false });
|
|
124
|
+
onINP(report('INP'), { reportAllChanges: false });
|
|
125
125
|
}
|
|
126
126
|
catch (error) {
|
|
127
127
|
(0, utils_1.log)('warn', 'Failed to load web-vitals library, using fallback', { error });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performance.handler.js","sourceRoot":"","sources":["../../../src/handlers/performance.handler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"performance.handler.js","sourceRoot":"","sources":["../../../src/handlers/performance.handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6DAAyD;AACzD,oCAAmD;AACnD,4CAAoG;AACpG,oCAA+B;AAI/B,MAAa,kBAAmB,SAAQ,4BAAY;IASlD,YAAY,YAA0B;QACpC,KAAK,EAAE,CAAC;QARO,kBAAa,GAA6B,IAAI,GAAG,EAAE,CAAC;QAEpD,cAAS,GAA0B,EAAE,CAAC;QAC/C,uBAAkB,GAAG,CAAC,CAAC;QAEd,oBAAe,GAAG,iCAAqB,CAAC;QAIvD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,YAAY;QACV,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACpC,IAAI,CAAC;gBACH,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAA,WAAG,EAAC,MAAM,EAAE,2CAA2C,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACtG,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAEO,wBAAwB;QAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,WAAW,CACd,0BAA0B,EAC1B,CAAC,IAAI,EAAE,EAAE;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAA2D,CAAC;YAEnG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kCAAsB,CAAC,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC,EACD,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE,EACpD,IAAI,CACL,CAAC;QAEF,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAE1C,IAAI,CAAC,WAAW,CACd,cAAc,EACd,CAAC,IAAI,EAAE,EAAE;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAErC,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;gBAC3B,QAAQ,GAAG,CAAC,CAAC;gBACb,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAwB,CAAC;YAExD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;oBAClC,SAAS;gBACX,CAAC;gBAED,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,QAAQ,IAAI,KAAK,CAAC;YACpB,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,kCAAsB,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC,EACD,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CACzC,CAAC;QAEF,IAAI,CAAC,WAAW,CACd,OAAO,EACP,CAAC,IAAI,EAAE,EAAE;YACP,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gBACtC,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;oBAC5C,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,kCAAsB,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClG,CAAC;YACH,CAAC;QACH,CAAC,EACD,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EACjC,IAAI,CACL,CAAC;QAEF,IAAI,CAAC,WAAW,CACd,OAAO,EACP,CAAC,IAAI,EAAE,EAAE;YACP,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAA0D,CAAC;YAE1F,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;gBAChE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC/B,CAAC;YAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,kCAAsB,CAAC,CAAC,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC,EACD,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAClC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,wDAAa,YAAY,GAAC,CAAC;YAE1E,MAAM,MAAM,GACV,CAAC,IAAkB,EAAE,EAAE,CACvB,CAAC,MAAyB,EAAQ,EAAE;gBAClC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,kCAAsB,CAAC,CAAC,CAAC;gBACnE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAClC,CAAC,CAAC;YAEJ,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;YACpD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,WAAG,EAAC,MAAM,EAAE,mDAAmD,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5E,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAA4C,CAAC;YAErG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC;YAE/B,kEAAkE;YAClE,kCAAkC;YAClC,yBAAyB;YACzB,0CAA0C;YAC1C,iDAAiD;YACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,kCAAsB,CAAC,CAAC,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,WAAG,EAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,WAAW,CACd,UAAU,EACV,CAAC,IAAI,EAAE,EAAE;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAiC,CAAC;YAEjE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,kCAAsB,CAAC,CAAC,CAAC;gBACxE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEvB,IAAI,GAAG,GAAG,IAAI,CAAC,kBAAkB,IAAI,iCAAqB,EAAE,CAAC;oBAC3D,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;wBAChD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;oBAC5C,CAAC;oBACD,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC,EACD,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CACrC,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,MAA6C;QAC7D,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAErC,kDAAkD;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,WAAW,GAAG,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAErD,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;YAED,2DAA2D;YAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAEO,aAAa,CAAC,IAAkB,EAAE,KAAa;QACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAA,WAAG,EAAC,MAAM,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACtB,IAAI,EAAE,iBAAS,CAAC,UAAU;YAC1B,UAAU,EAAE;gBACV,IAAI;gBACJ,KAAK;aACN;SACF,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAA4C,CAAC;YAErG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,IAAI,CAAC;YACd,CAAC;YAED,4EAA4E;YAC5E,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvD,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,WAAG,EAAC,MAAM,EAAE,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,IAAY;QACtC,IAAI,OAAO,mBAAmB,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAC7D,MAAM,SAAS,GAAG,mBAAmB,CAAC,mBAAmB,CAAC;QAC1D,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAEO,WAAW,CACjB,IAAY,EACZ,EAA+B,EAC/B,OAAiC,EACjC,IAAI,GAAG,KAAK;QAEZ,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACrD,IAAI,CAAC;oBACH,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACrB,CAAC;gBAAC,OAAO,aAAa,EAAE,CAAC;oBACvB,IAAA,WAAG,EAAC,MAAM,EAAE,0BAA0B,EAAE;wBACtC,KAAK,EAAE,aAAa;wBACpB,IAAI,EAAE,EAAE,IAAI,EAAE;qBACf,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC;wBACH,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACxB,CAAC;oBAAC,MAAM,CAAC;wBACP,uCAAuC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAEjD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,WAAG,EAAC,MAAM,EAAE,uCAAuC,EAAE;gBACnD,KAAK;gBACL,IAAI,EAAE,EAAE,IAAI,EAAE;aACf,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,IAAkB,EAAE,KAAc;QACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,IAAA,WAAG,EAAC,MAAM,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAjTD,gDAiTC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { EventManager } from '../managers/event.manager';
|
|
2
|
+
import { StateManager } from '../managers/state.manager';
|
|
3
|
+
/**
|
|
4
|
+
* Handles viewport visibility tracking using IntersectionObserver API.
|
|
5
|
+
* Fires events when elements become visible for a minimum dwell time.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ViewportHandler extends StateManager {
|
|
8
|
+
private readonly eventManager;
|
|
9
|
+
private readonly trackedElements;
|
|
10
|
+
private observer;
|
|
11
|
+
private mutationObserver;
|
|
12
|
+
private mutationDebounceTimer;
|
|
13
|
+
private config;
|
|
14
|
+
constructor(eventManager: EventManager);
|
|
15
|
+
/**
|
|
16
|
+
* Starts tracking viewport visibility for configured elements
|
|
17
|
+
*/
|
|
18
|
+
startTracking(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Stops tracking and cleans up resources
|
|
21
|
+
*/
|
|
22
|
+
stopTracking(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Query and observe all elements matching configured elements
|
|
25
|
+
*/
|
|
26
|
+
private observeElements;
|
|
27
|
+
/**
|
|
28
|
+
* Handles intersection events from IntersectionObserver
|
|
29
|
+
*/
|
|
30
|
+
private readonly handleIntersection;
|
|
31
|
+
/**
|
|
32
|
+
* Fires a viewport visible event
|
|
33
|
+
*/
|
|
34
|
+
private fireViewportEvent;
|
|
35
|
+
/**
|
|
36
|
+
* Sets up MutationObserver to detect dynamically added elements
|
|
37
|
+
*/
|
|
38
|
+
private setupMutationObserver;
|
|
39
|
+
/**
|
|
40
|
+
* Cleans up tracking for removed DOM nodes
|
|
41
|
+
*/
|
|
42
|
+
private cleanupRemovedNodes;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=viewport.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport.handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/viewport.handler.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAezD;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IACtE,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,MAAM,CAA+B;gBAEjC,YAAY,EAAE,YAAY;IAKtC;;OAEG;IACH,aAAa,IAAI,IAAI;IAyCrB;;OAEG;IACH,YAAY,IAAI,IAAI;IA4BpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyDvB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CA+BjC;IAEF;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4CzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8C7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CA8B5B"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ViewportHandler = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const state_manager_1 = require("../managers/state.manager");
|
|
6
|
+
const types_1 = require("../types");
|
|
7
|
+
const utils_1 = require("../utils");
|
|
8
|
+
/**
|
|
9
|
+
* Handles viewport visibility tracking using IntersectionObserver API.
|
|
10
|
+
* Fires events when elements become visible for a minimum dwell time.
|
|
11
|
+
*/
|
|
12
|
+
class ViewportHandler extends state_manager_1.StateManager {
|
|
13
|
+
constructor(eventManager) {
|
|
14
|
+
super();
|
|
15
|
+
this.trackedElements = new Map();
|
|
16
|
+
this.observer = null;
|
|
17
|
+
this.mutationObserver = null;
|
|
18
|
+
this.mutationDebounceTimer = null;
|
|
19
|
+
this.config = null;
|
|
20
|
+
/**
|
|
21
|
+
* Handles intersection events from IntersectionObserver
|
|
22
|
+
*/
|
|
23
|
+
this.handleIntersection = (entries) => {
|
|
24
|
+
if (!this.config)
|
|
25
|
+
return;
|
|
26
|
+
const minDwellTime = this.config.minDwellTime ?? 1000;
|
|
27
|
+
for (const entry of entries) {
|
|
28
|
+
const tracked = this.trackedElements.get(entry.target);
|
|
29
|
+
if (!tracked)
|
|
30
|
+
continue;
|
|
31
|
+
if (entry.isIntersecting) {
|
|
32
|
+
// Element became visible
|
|
33
|
+
if (tracked.startTime === null) {
|
|
34
|
+
tracked.startTime = performance.now();
|
|
35
|
+
// Set timer to fire event after minDwellTime
|
|
36
|
+
tracked.timeoutId = window.setTimeout(() => {
|
|
37
|
+
this.fireViewportEvent(tracked, entry.intersectionRatio);
|
|
38
|
+
}, minDwellTime);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// Element became hidden
|
|
43
|
+
if (tracked.startTime !== null) {
|
|
44
|
+
// Clear timer if element hidden before minDwellTime elapsed
|
|
45
|
+
if (tracked.timeoutId !== null) {
|
|
46
|
+
window.clearTimeout(tracked.timeoutId);
|
|
47
|
+
tracked.timeoutId = null;
|
|
48
|
+
}
|
|
49
|
+
tracked.startTime = null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
this.eventManager = eventManager;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Starts tracking viewport visibility for configured elements
|
|
58
|
+
*/
|
|
59
|
+
startTracking() {
|
|
60
|
+
// Get viewport config from state
|
|
61
|
+
const config = this.get('config');
|
|
62
|
+
this.config = config.viewport ?? null;
|
|
63
|
+
if (!this.config?.elements || this.config.elements.length === 0) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Set defaults
|
|
67
|
+
const threshold = this.config.threshold ?? 0.5;
|
|
68
|
+
const minDwellTime = this.config.minDwellTime ?? 1000;
|
|
69
|
+
if (threshold < 0 || threshold > 1) {
|
|
70
|
+
(0, utils_1.log)('warn', 'ViewportHandler: Invalid threshold, must be between 0 and 1');
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
if (minDwellTime < 0) {
|
|
74
|
+
(0, utils_1.log)('warn', 'ViewportHandler: Invalid minDwellTime, must be non-negative');
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Check IntersectionObserver support
|
|
78
|
+
if (typeof IntersectionObserver === 'undefined') {
|
|
79
|
+
(0, utils_1.log)('warn', 'ViewportHandler: IntersectionObserver not supported in this browser');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Create observer
|
|
83
|
+
this.observer = new IntersectionObserver(this.handleIntersection, {
|
|
84
|
+
threshold,
|
|
85
|
+
});
|
|
86
|
+
// Find and observe all matching elements
|
|
87
|
+
this.observeElements();
|
|
88
|
+
// Set up MutationObserver to detect dynamically added elements
|
|
89
|
+
this.setupMutationObserver();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Stops tracking and cleans up resources
|
|
93
|
+
*/
|
|
94
|
+
stopTracking() {
|
|
95
|
+
// Disconnect observers
|
|
96
|
+
if (this.observer) {
|
|
97
|
+
this.observer.disconnect();
|
|
98
|
+
this.observer = null;
|
|
99
|
+
}
|
|
100
|
+
if (this.mutationObserver) {
|
|
101
|
+
this.mutationObserver.disconnect();
|
|
102
|
+
this.mutationObserver = null;
|
|
103
|
+
}
|
|
104
|
+
// Clear debounce timer
|
|
105
|
+
if (this.mutationDebounceTimer !== null) {
|
|
106
|
+
window.clearTimeout(this.mutationDebounceTimer);
|
|
107
|
+
this.mutationDebounceTimer = null;
|
|
108
|
+
}
|
|
109
|
+
// Clear all timers and tracked elements
|
|
110
|
+
for (const tracked of this.trackedElements.values()) {
|
|
111
|
+
if (tracked.timeoutId !== null) {
|
|
112
|
+
window.clearTimeout(tracked.timeoutId);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
this.trackedElements.clear();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Query and observe all elements matching configured elements
|
|
119
|
+
*/
|
|
120
|
+
observeElements() {
|
|
121
|
+
if (!this.config || !this.observer)
|
|
122
|
+
return;
|
|
123
|
+
const maxTrackedElements = this.config.maxTrackedElements ?? constants_1.DEFAULT_VIEWPORT_MAX_TRACKED_ELEMENTS;
|
|
124
|
+
let totalTracked = this.trackedElements.size;
|
|
125
|
+
for (const elementConfig of this.config.elements) {
|
|
126
|
+
try {
|
|
127
|
+
const elements = document.querySelectorAll(elementConfig.selector);
|
|
128
|
+
for (const element of Array.from(elements)) {
|
|
129
|
+
// Check max limit (Phase 3)
|
|
130
|
+
if (totalTracked >= maxTrackedElements) {
|
|
131
|
+
(0, utils_1.log)('warn', 'ViewportHandler: Maximum tracked elements reached', {
|
|
132
|
+
data: {
|
|
133
|
+
limit: maxTrackedElements,
|
|
134
|
+
selector: elementConfig.selector,
|
|
135
|
+
message: 'Some elements will not be tracked. Consider more specific selectors.',
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
return; // Stop tracking more elements
|
|
139
|
+
}
|
|
140
|
+
// Skip if element has data-tlog-ignore attribute
|
|
141
|
+
if (element.hasAttribute(`${constants_1.HTML_DATA_ATTR_PREFIX}-ignore`)) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
// Skip if already tracked
|
|
145
|
+
if (this.trackedElements.has(element)) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
// Track and observe element with identifiers
|
|
149
|
+
this.trackedElements.set(element, {
|
|
150
|
+
element,
|
|
151
|
+
selector: elementConfig.selector,
|
|
152
|
+
id: elementConfig.id,
|
|
153
|
+
name: elementConfig.name,
|
|
154
|
+
startTime: null,
|
|
155
|
+
timeoutId: null,
|
|
156
|
+
lastFiredTime: null,
|
|
157
|
+
});
|
|
158
|
+
this.observer?.observe(element);
|
|
159
|
+
totalTracked++;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
(0, utils_1.log)('warn', `ViewportHandler: Invalid selector "${elementConfig.selector}"`, { error });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
(0, utils_1.log)('debug', 'ViewportHandler: Elements tracked', {
|
|
167
|
+
data: { count: totalTracked, limit: maxTrackedElements },
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Fires a viewport visible event
|
|
172
|
+
*/
|
|
173
|
+
fireViewportEvent(tracked, visibilityRatio) {
|
|
174
|
+
if (tracked.startTime === null)
|
|
175
|
+
return;
|
|
176
|
+
const dwellTime = Math.round(performance.now() - tracked.startTime);
|
|
177
|
+
// Check data-tlog-ignore again (element might have changed)
|
|
178
|
+
if (tracked.element.hasAttribute('data-tlog-ignore')) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Check cooldown period to prevent repeated events from carousels/sticky elements
|
|
182
|
+
const cooldownPeriod = this.config?.cooldownPeriod ?? constants_1.DEFAULT_VIEWPORT_COOLDOWN_PERIOD;
|
|
183
|
+
const now = Date.now();
|
|
184
|
+
if (tracked.lastFiredTime !== null && now - tracked.lastFiredTime < cooldownPeriod) {
|
|
185
|
+
(0, utils_1.log)('debug', 'ViewportHandler: Event suppressed by cooldown period', {
|
|
186
|
+
data: {
|
|
187
|
+
selector: tracked.selector,
|
|
188
|
+
cooldownRemaining: cooldownPeriod - (now - tracked.lastFiredTime),
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
tracked.startTime = null;
|
|
192
|
+
tracked.timeoutId = null;
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
const eventData = {
|
|
196
|
+
selector: tracked.selector,
|
|
197
|
+
dwellTime,
|
|
198
|
+
visibilityRatio,
|
|
199
|
+
...(tracked.id !== undefined && { id: tracked.id }),
|
|
200
|
+
...(tracked.name !== undefined && { name: tracked.name }),
|
|
201
|
+
};
|
|
202
|
+
this.eventManager.track({
|
|
203
|
+
type: types_1.EventType.VIEWPORT_VISIBLE,
|
|
204
|
+
viewport_data: eventData,
|
|
205
|
+
});
|
|
206
|
+
// Reset tracking state after firing event and record timestamp
|
|
207
|
+
tracked.startTime = null;
|
|
208
|
+
tracked.timeoutId = null;
|
|
209
|
+
tracked.lastFiredTime = now;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Sets up MutationObserver to detect dynamically added elements
|
|
213
|
+
*/
|
|
214
|
+
setupMutationObserver() {
|
|
215
|
+
if (!this.config || typeof MutationObserver === 'undefined') {
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
// Check if document.body exists
|
|
219
|
+
if (!document.body) {
|
|
220
|
+
(0, utils_1.log)('warn', 'ViewportHandler: document.body not available, skipping MutationObserver setup');
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
this.mutationObserver = new MutationObserver((mutations) => {
|
|
224
|
+
let hasAddedNodes = false;
|
|
225
|
+
// Check what changed
|
|
226
|
+
for (const mutation of mutations) {
|
|
227
|
+
if (mutation.type === 'childList') {
|
|
228
|
+
if (mutation.addedNodes.length > 0) {
|
|
229
|
+
hasAddedNodes = true;
|
|
230
|
+
}
|
|
231
|
+
if (mutation.removedNodes.length > 0) {
|
|
232
|
+
// Clean up removed nodes immediately
|
|
233
|
+
this.cleanupRemovedNodes(mutation.removedNodes);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Debounce re-observing for added nodes (batch multiple mutations)
|
|
238
|
+
if (hasAddedNodes) {
|
|
239
|
+
if (this.mutationDebounceTimer !== null) {
|
|
240
|
+
window.clearTimeout(this.mutationDebounceTimer);
|
|
241
|
+
}
|
|
242
|
+
this.mutationDebounceTimer = window.setTimeout(() => {
|
|
243
|
+
this.observeElements();
|
|
244
|
+
this.mutationDebounceTimer = null;
|
|
245
|
+
}, constants_1.VIEWPORT_MUTATION_DEBOUNCE_MS);
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
// Observe the entire document for added/removed nodes
|
|
249
|
+
this.mutationObserver.observe(document.body, {
|
|
250
|
+
childList: true,
|
|
251
|
+
subtree: true,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Cleans up tracking for removed DOM nodes
|
|
256
|
+
*/
|
|
257
|
+
cleanupRemovedNodes(removedNodes) {
|
|
258
|
+
removedNodes.forEach((node) => {
|
|
259
|
+
if (node.nodeType !== 1)
|
|
260
|
+
return; // 1 = ELEMENT_NODE
|
|
261
|
+
const element = node;
|
|
262
|
+
const tracked = this.trackedElements.get(element);
|
|
263
|
+
if (tracked) {
|
|
264
|
+
// Clear pending timer
|
|
265
|
+
if (tracked.timeoutId !== null) {
|
|
266
|
+
window.clearTimeout(tracked.timeoutId);
|
|
267
|
+
}
|
|
268
|
+
// Unobserve and remove from tracking
|
|
269
|
+
this.observer?.unobserve(element);
|
|
270
|
+
this.trackedElements.delete(element);
|
|
271
|
+
}
|
|
272
|
+
// Also check descendants
|
|
273
|
+
const descendants = Array.from(this.trackedElements.keys()).filter((el) => element.contains(el));
|
|
274
|
+
descendants.forEach((el) => {
|
|
275
|
+
const descendantTracked = this.trackedElements.get(el);
|
|
276
|
+
if (descendantTracked && descendantTracked.timeoutId !== null) {
|
|
277
|
+
window.clearTimeout(descendantTracked.timeoutId);
|
|
278
|
+
}
|
|
279
|
+
this.observer?.unobserve(el);
|
|
280
|
+
this.trackedElements.delete(el);
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
exports.ViewportHandler = ViewportHandler;
|
|
286
|
+
//# sourceMappingURL=viewport.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport.handler.js","sourceRoot":"","sources":["../../../src/handlers/viewport.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,14 +9,16 @@ export declare class EventManager extends StateManager {
|
|
|
9
9
|
private readonly emitter;
|
|
10
10
|
private eventsQueue;
|
|
11
11
|
private pendingEventsBuffer;
|
|
12
|
-
private
|
|
13
|
-
private lastEventTime;
|
|
12
|
+
private readonly recentEventFingerprints;
|
|
14
13
|
private sendIntervalId;
|
|
15
14
|
private rateLimitCounter;
|
|
16
15
|
private rateLimitWindowStart;
|
|
16
|
+
private readonly perEventRateLimits;
|
|
17
|
+
private sessionEventCounts;
|
|
18
|
+
private lastSessionId;
|
|
17
19
|
constructor(storeManager: StorageManager, googleAnalytics?: GoogleAnalyticsIntegration | null, emitter?: Emitter | null);
|
|
18
20
|
recoverPersistedEvents(): Promise<void>;
|
|
19
|
-
track({ type, page_url, from_page_url, scroll_data, click_data, custom_event, web_vitals, error_data, session_end_reason, }: Partial<EventData>): void;
|
|
21
|
+
track({ type, page_url, from_page_url, scroll_data, click_data, custom_event, web_vitals, error_data, session_end_reason, viewport_data, }: Partial<EventData>): void;
|
|
20
22
|
stop(): void;
|
|
21
23
|
flushImmediately(): Promise<boolean>;
|
|
22
24
|
flushImmediatelySync(): boolean;
|
|
@@ -27,7 +29,16 @@ export declare class EventManager extends StateManager {
|
|
|
27
29
|
private sendEventsQueue;
|
|
28
30
|
private buildEventsPayload;
|
|
29
31
|
private buildEventPayload;
|
|
32
|
+
/**
|
|
33
|
+
* Checks if event is a duplicate using time-based cache
|
|
34
|
+
* Tracks recent event fingerprints with timestamp-based cleanup
|
|
35
|
+
*/
|
|
30
36
|
private isDuplicateEvent;
|
|
37
|
+
/**
|
|
38
|
+
* Prunes old fingerprints from cache based on timestamp
|
|
39
|
+
* Removes entries older than 10x the duplicate threshold (5 seconds)
|
|
40
|
+
*/
|
|
41
|
+
private pruneOldFingerprints;
|
|
31
42
|
private createEventFingerprint;
|
|
32
43
|
private createEventSignature;
|
|
33
44
|
private addToQueue;
|
|
@@ -35,6 +46,15 @@ export declare class EventManager extends StateManager {
|
|
|
35
46
|
private handleGoogleAnalyticsIntegration;
|
|
36
47
|
private shouldSample;
|
|
37
48
|
private checkRateLimit;
|
|
49
|
+
/**
|
|
50
|
+
* Checks per-event-name rate limiting to prevent infinite loops in user code
|
|
51
|
+
* Tracks timestamps per event name and limits to maxSameEventPerMinute per minute
|
|
52
|
+
*/
|
|
53
|
+
private checkPerEventRateLimit;
|
|
54
|
+
/**
|
|
55
|
+
* Gets the per-session limit for a specific event type (Phase 3)
|
|
56
|
+
*/
|
|
57
|
+
private getTypeLimitForEvent;
|
|
38
58
|
private removeProcessedEvents;
|
|
39
59
|
private emitEvent;
|
|
40
60
|
private emitEventsQueue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.manager.d.ts","sourceRoot":"","sources":["../../../src/managers/event.manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event.manager.d.ts","sourceRoot":"","sources":["../../../src/managers/event.manager.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAoC,SAAS,EAAmB,MAAM,UAAU,CAAC;AACxF,OAAO,EAAyB,OAAO,EAAmB,MAAM,UAAU,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAE1F,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IACpE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IAEzC,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,mBAAmB,CAA4B;IACvD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA6B;IACrE,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoC;IACvE,OAAO,CAAC,kBAAkB,CAUxB;IACF,OAAO,CAAC,aAAa,CAAuB;gBAG1C,YAAY,EAAE,cAAc,EAC5B,eAAe,GAAE,0BAA0B,GAAG,IAAW,EACzD,OAAO,GAAE,OAAO,GAAG,IAAW;IAS1B,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB7C,KAAK,CAAC,EACJ,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,aAAa,GACd,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IA2J5B,IAAI,IAAI,IAAI;IAyBN,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1C,oBAAoB,IAAI,OAAO;IAI/B,cAAc,IAAI,MAAM;IAIxB,kBAAkB,IAAI,IAAI;IAsB1B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,WAAW;YAmCL,eAAe;IAsB7B,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,iBAAiB;IAwBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,sBAAsB;IA4B9B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,gCAAgC;IAUxC,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,cAAc;IAgBtB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAyB9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,eAAe;CAKxB"}
|