@technoapple/ga4 1.0.4 → 1.1.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/.github/workflows/node.js.yml +31 -31
- package/.prettierignore +1 -1
- package/LICENSE +21 -21
- package/README.md +386 -48
- package/REQUIREMENTS.md +548 -0
- package/babel.config.js +5 -5
- package/build/main/ga4/ga4.d.ts +13 -0
- package/build/main/ga4/ga4.js +24 -1
- package/build/main/helpers/debounce.d.ts +5 -0
- package/build/main/helpers/debounce.js +23 -0
- package/build/main/helpers/delegate.d.ts +8 -0
- package/build/main/helpers/delegate.js +37 -0
- package/build/main/helpers/dom-ready.d.ts +1 -0
- package/build/main/helpers/dom-ready.js +13 -0
- package/build/main/helpers/parse-url.d.ts +11 -0
- package/build/main/helpers/parse-url.js +32 -0
- package/build/main/helpers/session.d.ts +4 -0
- package/build/main/helpers/session.js +50 -0
- package/build/main/index.d.ts +9 -0
- package/build/main/index.js +19 -2
- package/build/main/plugins/clean-url-tracker.d.ts +17 -0
- package/build/main/plugins/clean-url-tracker.js +105 -0
- package/build/main/plugins/event-tracker.d.ts +27 -0
- package/build/main/plugins/event-tracker.js +76 -0
- package/build/main/plugins/impression-tracker.d.ts +32 -0
- package/build/main/plugins/impression-tracker.js +202 -0
- package/build/main/plugins/index.d.ts +8 -0
- package/build/main/plugins/index.js +20 -0
- package/build/main/plugins/media-query-tracker.d.ts +20 -0
- package/build/main/plugins/media-query-tracker.js +96 -0
- package/build/main/plugins/outbound-form-tracker.d.ts +17 -0
- package/build/main/plugins/outbound-form-tracker.js +55 -0
- package/build/main/plugins/outbound-link-tracker.d.ts +19 -0
- package/build/main/plugins/outbound-link-tracker.js +63 -0
- package/build/main/plugins/page-visibility-tracker.d.ts +24 -0
- package/build/main/plugins/page-visibility-tracker.js +93 -0
- package/build/main/plugins/url-change-tracker.d.ts +20 -0
- package/build/main/plugins/url-change-tracker.js +76 -0
- package/build/main/types/plugins.d.ts +78 -0
- package/build/main/types/plugins.js +3 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/docs/examples/react.md +95 -0
- package/docs/examples/vanilla.md +65 -0
- package/docs/examples/vue.md +87 -0
- package/jest.config.ts +195 -195
- package/package.json +56 -56
- package/src/dataLayer.ts +85 -85
- package/src/ga4/ga4.ts +69 -40
- package/src/ga4/ga4option.ts +4 -4
- package/src/ga4/index.ts +4 -4
- package/src/helpers/debounce.ts +28 -0
- package/src/helpers/delegate.ts +51 -0
- package/src/helpers/dom-ready.ts +7 -0
- package/src/helpers/parse-url.ts +37 -0
- package/src/helpers/session.ts +39 -0
- package/src/index.ts +34 -7
- package/src/plugins/clean-url-tracker.ts +112 -0
- package/src/plugins/event-tracker.ts +90 -0
- package/src/plugins/impression-tracker.ts +230 -0
- package/src/plugins/index.ts +8 -0
- package/src/plugins/media-query-tracker.ts +116 -0
- package/src/plugins/outbound-form-tracker.ts +65 -0
- package/src/plugins/outbound-link-tracker.ts +72 -0
- package/src/plugins/page-visibility-tracker.ts +104 -0
- package/src/plugins/url-change-tracker.ts +84 -0
- package/src/types/dataLayer.ts +9 -9
- package/src/types/global.ts +12 -12
- package/src/types/gtag.ts +259 -259
- package/src/types/plugins.ts +98 -0
- package/src/util.ts +18 -18
- package/test/dataLayer.spec.ts +55 -55
- package/test/ga4.spec.ts +36 -36
- package/tsconfig.json +28 -28
- package/tsconfig.module.json +11 -11
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PageVisibilityTracker = void 0;
|
|
4
|
+
const session_1 = require("../helpers/session");
|
|
5
|
+
/**
|
|
6
|
+
* Tracks how long a page is in the visible state vs. hidden (background tab).
|
|
7
|
+
*
|
|
8
|
+
* Sends a `page_visibility` event each time the visibility state changes,
|
|
9
|
+
* reporting how long the page was in the previous state.
|
|
10
|
+
* Optionally sends a new `page_view` when the page becomes visible
|
|
11
|
+
* again after the session timeout has elapsed.
|
|
12
|
+
*/
|
|
13
|
+
class PageVisibilityTracker {
|
|
14
|
+
send;
|
|
15
|
+
sendInitialPageview;
|
|
16
|
+
sessionTimeout;
|
|
17
|
+
eventName;
|
|
18
|
+
hitFilter;
|
|
19
|
+
lastChangeTime;
|
|
20
|
+
isVisible;
|
|
21
|
+
boundVisibilityChange;
|
|
22
|
+
boundBeforeUnload;
|
|
23
|
+
constructor(send, options) {
|
|
24
|
+
this.send = send;
|
|
25
|
+
this.sendInitialPageview = options?.sendInitialPageview ?? false;
|
|
26
|
+
this.sessionTimeout = options?.sessionTimeout ?? 30;
|
|
27
|
+
this.eventName = options?.eventName ?? 'page_visibility';
|
|
28
|
+
this.hitFilter = options?.hitFilter;
|
|
29
|
+
this.lastChangeTime = Date.now();
|
|
30
|
+
this.isVisible = document.visibilityState === 'visible';
|
|
31
|
+
this.boundVisibilityChange = this.onVisibilityChange.bind(this);
|
|
32
|
+
this.boundBeforeUnload = this.onBeforeUnload.bind(this);
|
|
33
|
+
document.addEventListener('visibilitychange', this.boundVisibilityChange);
|
|
34
|
+
window.addEventListener('beforeunload', this.boundBeforeUnload);
|
|
35
|
+
(0, session_1.updateSessionTimestamp)('pageVisibility');
|
|
36
|
+
if (this.sendInitialPageview && this.isVisible) {
|
|
37
|
+
this.send('page_view', {
|
|
38
|
+
page_path: location.pathname,
|
|
39
|
+
page_location: location.href,
|
|
40
|
+
page_title: document.title,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
onVisibilityChange() {
|
|
45
|
+
const now = Date.now();
|
|
46
|
+
const duration = now - this.lastChangeTime;
|
|
47
|
+
const previousState = this.isVisible ? 'visible' : 'hidden';
|
|
48
|
+
let params = {
|
|
49
|
+
visibility_state: previousState,
|
|
50
|
+
visibility_duration: duration,
|
|
51
|
+
page_path: location.pathname,
|
|
52
|
+
};
|
|
53
|
+
if (this.hitFilter) {
|
|
54
|
+
const filtered = this.hitFilter(params);
|
|
55
|
+
if (filtered === null) {
|
|
56
|
+
this.lastChangeTime = now;
|
|
57
|
+
this.isVisible = document.visibilityState === 'visible';
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
params = filtered;
|
|
61
|
+
}
|
|
62
|
+
this.send(this.eventName, params);
|
|
63
|
+
// If page becomes visible again, check session expiry
|
|
64
|
+
if (document.visibilityState === 'visible' && !this.isVisible) {
|
|
65
|
+
if ((0, session_1.isSessionExpired)('pageVisibility', this.sessionTimeout)) {
|
|
66
|
+
this.send('page_view', {
|
|
67
|
+
page_path: location.pathname,
|
|
68
|
+
page_location: location.href,
|
|
69
|
+
page_title: document.title,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
(0, session_1.updateSessionTimestamp)('pageVisibility');
|
|
73
|
+
}
|
|
74
|
+
this.lastChangeTime = now;
|
|
75
|
+
this.isVisible = document.visibilityState === 'visible';
|
|
76
|
+
}
|
|
77
|
+
onBeforeUnload() {
|
|
78
|
+
if (this.isVisible) {
|
|
79
|
+
const duration = Date.now() - this.lastChangeTime;
|
|
80
|
+
this.send(this.eventName, {
|
|
81
|
+
visibility_state: 'visible',
|
|
82
|
+
visibility_duration: duration,
|
|
83
|
+
page_path: location.pathname,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
remove() {
|
|
88
|
+
document.removeEventListener('visibilitychange', this.boundVisibilityChange);
|
|
89
|
+
window.removeEventListener('beforeunload', this.boundBeforeUnload);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.PageVisibilityTracker = PageVisibilityTracker;
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS12aXNpYmlsaXR5LXRyYWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9wYWdlLXZpc2liaWxpdHktdHJhY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxnREFBOEU7QUFFOUU7Ozs7Ozs7R0FPRztBQUNILE1BQWEscUJBQXFCO0lBQ3RCLElBQUksQ0FBZTtJQUNuQixtQkFBbUIsQ0FBVTtJQUM3QixjQUFjLENBQVM7SUFDdkIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsQ0FBNkM7SUFDdEQsY0FBYyxDQUFTO0lBQ3ZCLFNBQVMsQ0FBVTtJQUNuQixxQkFBcUIsQ0FBYTtJQUNsQyxpQkFBaUIsQ0FBYTtJQUV0QyxZQUFZLElBQWtCLEVBQUUsT0FBc0M7UUFDbEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sRUFBRSxtQkFBbUIsSUFBSSxLQUFLLENBQUM7UUFDakUsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLElBQUksaUJBQWlCLENBQUM7UUFDekQsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsU0FBUyxDQUFDO1FBRXBDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUM7UUFFeEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMxRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhFLElBQUEsZ0NBQXNCLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV6QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNuQixTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQzVCLGFBQWEsRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDNUIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxLQUFLO2FBQzdCLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDM0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFNUQsSUFBSSxNQUFNLEdBQTRCO1lBQ2xDLGdCQUFnQixFQUFFLGFBQWE7WUFDL0IsbUJBQW1CLEVBQUUsUUFBUTtZQUM3QixTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVE7U0FDL0IsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUM7Z0JBQ3hELE9BQU87YUFDVjtZQUNELE1BQU0sR0FBRyxRQUFRLENBQUM7U0FDckI7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEMsc0RBQXNEO1FBQ3RELElBQUksUUFBUSxDQUFDLGVBQWUsS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNELElBQUksSUFBQSwwQkFBZ0IsRUFBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNuQixTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQzVCLGFBQWEsRUFBRSxRQUFRLENBQUMsSUFBSTtvQkFDNUIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxLQUFLO2lCQUM3QixDQUFDLENBQUM7YUFDTjtZQUNELElBQUEsZ0NBQXNCLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUM7SUFDNUQsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDdEIsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsbUJBQW1CLEVBQUUsUUFBUTtnQkFDN0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRO2FBQy9CLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDRixRQUFRLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDN0UsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2RSxDQUFDO0NBQ0o7QUE1RkQsc0RBNEZDIn0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { GA4Plugin, SendFunction, UrlChangeTrackerOptions } from '../types/plugins';
|
|
2
|
+
/**
|
|
3
|
+
* Automatically tracks URL changes in Single Page Applications.
|
|
4
|
+
*
|
|
5
|
+
* Intercepts `history.pushState()`, optionally `history.replaceState()`,
|
|
6
|
+
* and `popstate` events, sending a `page_view` event for each navigation.
|
|
7
|
+
*/
|
|
8
|
+
export declare class UrlChangeTracker implements GA4Plugin {
|
|
9
|
+
private send;
|
|
10
|
+
private trackReplaceState;
|
|
11
|
+
private shouldTrackUrlChange?;
|
|
12
|
+
private hitFilter?;
|
|
13
|
+
private currentPath;
|
|
14
|
+
private originalPushState;
|
|
15
|
+
private originalReplaceState;
|
|
16
|
+
private boundPopState;
|
|
17
|
+
constructor(send: SendFunction, options?: UrlChangeTrackerOptions);
|
|
18
|
+
private onUrlChange;
|
|
19
|
+
remove(): void;
|
|
20
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UrlChangeTracker = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Automatically tracks URL changes in Single Page Applications.
|
|
6
|
+
*
|
|
7
|
+
* Intercepts `history.pushState()`, optionally `history.replaceState()`,
|
|
8
|
+
* and `popstate` events, sending a `page_view` event for each navigation.
|
|
9
|
+
*/
|
|
10
|
+
class UrlChangeTracker {
|
|
11
|
+
send;
|
|
12
|
+
trackReplaceState;
|
|
13
|
+
shouldTrackUrlChange;
|
|
14
|
+
hitFilter;
|
|
15
|
+
currentPath;
|
|
16
|
+
originalPushState;
|
|
17
|
+
originalReplaceState;
|
|
18
|
+
boundPopState;
|
|
19
|
+
constructor(send, options) {
|
|
20
|
+
this.send = send;
|
|
21
|
+
this.trackReplaceState = options?.trackReplaceState ?? false;
|
|
22
|
+
this.shouldTrackUrlChange = options?.shouldTrackUrlChange;
|
|
23
|
+
this.hitFilter = options?.hitFilter;
|
|
24
|
+
this.currentPath = location.pathname + location.search;
|
|
25
|
+
this.originalPushState = history.pushState;
|
|
26
|
+
this.originalReplaceState = history.replaceState;
|
|
27
|
+
this.boundPopState = this.onUrlChange.bind(this);
|
|
28
|
+
// Monkey-patch history.pushState
|
|
29
|
+
const self = this;
|
|
30
|
+
history.pushState = function (...args) {
|
|
31
|
+
self.originalPushState.apply(history, args);
|
|
32
|
+
self.onUrlChange();
|
|
33
|
+
};
|
|
34
|
+
// Optionally monkey-patch history.replaceState
|
|
35
|
+
if (this.trackReplaceState) {
|
|
36
|
+
history.replaceState = function (...args) {
|
|
37
|
+
self.originalReplaceState.apply(history, args);
|
|
38
|
+
self.onUrlChange();
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
window.addEventListener('popstate', this.boundPopState);
|
|
42
|
+
}
|
|
43
|
+
onUrlChange() {
|
|
44
|
+
// Use setTimeout to ensure the URL has been updated
|
|
45
|
+
setTimeout(() => {
|
|
46
|
+
const newPath = location.pathname + location.search;
|
|
47
|
+
const shouldTrack = this.shouldTrackUrlChange
|
|
48
|
+
? this.shouldTrackUrlChange(newPath, this.currentPath)
|
|
49
|
+
: newPath !== this.currentPath;
|
|
50
|
+
if (!shouldTrack)
|
|
51
|
+
return;
|
|
52
|
+
this.currentPath = newPath;
|
|
53
|
+
let params = {
|
|
54
|
+
page_path: location.pathname,
|
|
55
|
+
page_title: document.title,
|
|
56
|
+
page_location: location.href,
|
|
57
|
+
};
|
|
58
|
+
if (this.hitFilter) {
|
|
59
|
+
const filtered = this.hitFilter(params);
|
|
60
|
+
if (filtered === null)
|
|
61
|
+
return;
|
|
62
|
+
params = filtered;
|
|
63
|
+
}
|
|
64
|
+
this.send('page_view', params);
|
|
65
|
+
}, 0);
|
|
66
|
+
}
|
|
67
|
+
remove() {
|
|
68
|
+
window.removeEventListener('popstate', this.boundPopState);
|
|
69
|
+
history.pushState = this.originalPushState;
|
|
70
|
+
if (this.trackReplaceState) {
|
|
71
|
+
history.replaceState = this.originalReplaceState;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.UrlChangeTracker = UrlChangeTracker;
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWNoYW5nZS10cmFja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BsdWdpbnMvdXJsLWNoYW5nZS10cmFja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOzs7OztHQUtHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFDakIsSUFBSSxDQUFlO0lBQ25CLGlCQUFpQixDQUFVO0lBQzNCLG9CQUFvQixDQUFtRDtJQUN2RSxTQUFTLENBQXdDO0lBQ2pELFdBQVcsQ0FBUztJQUNwQixpQkFBaUIsQ0FBdUI7SUFDeEMsb0JBQW9CLENBQTBCO0lBQzlDLGFBQWEsQ0FBYTtJQUVsQyxZQUFZLElBQWtCLEVBQUUsT0FBaUM7UUFDN0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxLQUFLLENBQUM7UUFDN0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQztRQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUM7UUFFcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDdkQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqRCxpQ0FBaUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsVUFBVSxHQUFHLElBQXNDO1lBQ25FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUM7UUFFRiwrQ0FBK0M7UUFDL0MsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsT0FBTyxDQUFDLFlBQVksR0FBRyxVQUFVLEdBQUcsSUFBeUM7Z0JBQ3pFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDO1NBQ0w7UUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU8sV0FBVztRQUNmLG9EQUFvRDtRQUNwRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBRXBELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0I7Z0JBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3RELENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUVuQyxJQUFJLENBQUMsV0FBVztnQkFBRSxPQUFPO1lBRXpCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1lBRTNCLElBQUksTUFBTSxHQUE0QjtnQkFDbEMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRO2dCQUM1QixVQUFVLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQzFCLGFBQWEsRUFBRSxRQUFRLENBQUMsSUFBSTthQUMvQixDQUFDO1lBRUYsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLFFBQVEsS0FBSyxJQUFJO29CQUFFLE9BQU87Z0JBQzlCLE1BQU0sR0FBRyxRQUFRLENBQUM7YUFDckI7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsTUFBTTtRQUNGLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNELE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzNDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1NBQ3BEO0lBQ0wsQ0FBQztDQUNKO0FBM0VELDRDQTJFQyJ9
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export type SendFunction = (eventName: string, params: Record<string, unknown>) => void;
|
|
2
|
+
export interface GA4Plugin {
|
|
3
|
+
remove(): void;
|
|
4
|
+
}
|
|
5
|
+
export interface EventTrackerOptions {
|
|
6
|
+
events?: string[];
|
|
7
|
+
attributePrefix?: string;
|
|
8
|
+
hitFilter?: (params: Record<string, unknown>, element: Element, event: Event) => Record<string, unknown> | null;
|
|
9
|
+
}
|
|
10
|
+
export interface OutboundLinkTrackerOptions {
|
|
11
|
+
events?: string[];
|
|
12
|
+
linkSelector?: string;
|
|
13
|
+
shouldTrackOutboundLink?: (link: Element, parseUrl: (url: string) => {
|
|
14
|
+
hostname: string;
|
|
15
|
+
protocol: string;
|
|
16
|
+
href: string;
|
|
17
|
+
}) => boolean;
|
|
18
|
+
eventName?: string;
|
|
19
|
+
attributePrefix?: string;
|
|
20
|
+
hitFilter?: (params: Record<string, unknown>, element: Element, event: Event) => Record<string, unknown> | null;
|
|
21
|
+
}
|
|
22
|
+
export interface OutboundFormTrackerOptions {
|
|
23
|
+
formSelector?: string;
|
|
24
|
+
shouldTrackOutboundForm?: (form: HTMLFormElement, parseUrl: (url: string) => {
|
|
25
|
+
hostname: string;
|
|
26
|
+
protocol: string;
|
|
27
|
+
href: string;
|
|
28
|
+
}) => boolean;
|
|
29
|
+
eventName?: string;
|
|
30
|
+
hitFilter?: (params: Record<string, unknown>, element: Element, event: Event) => Record<string, unknown> | null;
|
|
31
|
+
}
|
|
32
|
+
export interface PageVisibilityTrackerOptions {
|
|
33
|
+
sendInitialPageview?: boolean;
|
|
34
|
+
sessionTimeout?: number;
|
|
35
|
+
timeZone?: string;
|
|
36
|
+
eventName?: string;
|
|
37
|
+
hitFilter?: (params: Record<string, unknown>) => Record<string, unknown> | null;
|
|
38
|
+
}
|
|
39
|
+
export interface UrlChangeTrackerOptions {
|
|
40
|
+
shouldTrackUrlChange?: (newPath: string, oldPath: string) => boolean;
|
|
41
|
+
trackReplaceState?: boolean;
|
|
42
|
+
hitFilter?: (params: Record<string, unknown>) => Record<string, unknown> | null;
|
|
43
|
+
}
|
|
44
|
+
export interface ImpressionElementConfig {
|
|
45
|
+
id: string;
|
|
46
|
+
threshold?: number;
|
|
47
|
+
trackFirstImpressionOnly?: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface ImpressionTrackerOptions {
|
|
50
|
+
elements?: Array<string | ImpressionElementConfig>;
|
|
51
|
+
rootMargin?: string;
|
|
52
|
+
attributePrefix?: string;
|
|
53
|
+
eventName?: string;
|
|
54
|
+
hitFilter?: (params: Record<string, unknown>, element: Element) => Record<string, unknown> | null;
|
|
55
|
+
}
|
|
56
|
+
export interface CleanUrlTrackerOptions {
|
|
57
|
+
stripQuery?: boolean;
|
|
58
|
+
queryParamsAllowlist?: string[];
|
|
59
|
+
queryParamsDenylist?: string[];
|
|
60
|
+
trailingSlash?: 'add' | 'remove';
|
|
61
|
+
urlFilter?: (url: string) => string;
|
|
62
|
+
}
|
|
63
|
+
export interface MediaQueryDefinitionItem {
|
|
64
|
+
name: string;
|
|
65
|
+
media: string;
|
|
66
|
+
}
|
|
67
|
+
export interface MediaQueryDefinition {
|
|
68
|
+
name: string;
|
|
69
|
+
dimensionIndex?: number;
|
|
70
|
+
items: MediaQueryDefinitionItem[];
|
|
71
|
+
}
|
|
72
|
+
export interface MediaQueryTrackerOptions {
|
|
73
|
+
definitions?: MediaQueryDefinition[];
|
|
74
|
+
changeTemplate?: (oldValue: string, newValue: string) => string;
|
|
75
|
+
changeTimeout?: number;
|
|
76
|
+
eventName?: string;
|
|
77
|
+
hitFilter?: (params: Record<string, unknown>) => Record<string, unknown> | null;
|
|
78
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90eXBlcy9wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/types/datalayer.ts","../src/datalayer.ts","../src/ga4/ga4option.ts","../src/types/gtag.ts","../src/types/global.ts","../src/ga4/ga4.ts","../src/ga4/index.ts","../src/index.ts","../src/util.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts"],"fileInfos":[{"version":"6a6b471e7e43e15ef6f8fe617a22ce4ecb0e34efa6c3dfcfe7cebd392bcca9d2","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"fcd3ecc9f764f06f4d5c467677f4f117f6abf49dee6716283aa204ff1162498b","affectsGlobalScope":true},{"version":"f296963760430fb65b4e5d91f0ed770a91c6e77455bacf8fa23a1501654ede0e","affectsGlobalScope":true},{"version":"5114a95689b63f96b957e00216bc04baf9e1a1782aa4d8ee7e5e9acbf768e301","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"b7e9f95a7387e3f66be0ed6db43600c49cec33a3900437ce2fd350d9b7cb16f2","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"4505cd6a0299cff3e39ddf9230f2fa71f51876c1499d6410437092678f4e84e6","signature":"c27bbc52e3f861f48cb5967ae5291c81017e22ac4c98a5ce309bfccd1bc9552f"},{"version":"eb2942624701841575b56359147e7ea33e6ca581e09d4c721faa9a7c93835818","signature":"bbd1a681210a08104676bd8e6f7f150691e47ff8eda7c4ffe05918a1d5817ce2"},{"version":"7443e1a6295df9ee39c9a5767b35ce1d541b2df5f73342a35f9b03702ef3696c","signature":"18702c5a5b1261e42757524b7d389aec3f1908f2f54fd0b04cba5ed0b6d5f6c1"},{"version":"16999cd3ff740d294f6e24055da2fb2b44feaacf936dbf5b91ca7ed7d10b529d","signature":"c327ab63d0f885684f6073fbda0336cb514d8dbbea80e210136e73353586bb21"},{"version":"ef2b57bf4bcc97f7f2c402b171e3883d278fd68ff1c1f5c5afa32d314bd079e5","signature":"83bb03806cdc796898d2c59cabc02d847b77256fc60f2a816cdea1733e403931","affectsGlobalScope":true},{"version":"ee17c63b9fc3a5d026a438bab500eba0eef32d36f36dbe739e1d60dd4c664be7","signature":"d068f287ab997e5fe33244d347378f7eb137731353f1c791722c60a5af73ef58"},{"version":"a1552f2ab1a7225f25e54b15af03a040ec5d07e67a5c3d5bd56d9ec13062d5af","signature":"ad2e67574fad659d6ac13584f527547d8eb99610c877c79a7bead55983f01b5e"},{"version":"89c30775f6ceed8dcdd43a4ce3e2274a7ae7277a2eeb8ea630602233d39090b2","signature":"b4fd030c4dedf1e2a2ed45ca09a731a4b266d931b9758406046cbc117934f42c"},{"version":"7dc733f749f435afdb7f0cc5ed617d54e692694948a06e058ab23616dc55f308","signature":"b94a542f623be983f86a1ac91139ed9fbb46728bcf70282eca6b5073b567328e"},"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"f749812878fecfa53cfc13b36e5d35086fb6377983a9df44175da83ccc23af1f","affectsGlobalScope":true},"7d2e3fea24c712c99c03ad8f556abedbfe105f87f1be10b95dbd409d24bc05a3",{"version":"211e3f15fbced4ab4be19f49ffa990b9ff20d749d33b65ff753be691e7616239","affectsGlobalScope":true},"374ca798f244e464346f14301dc2a8b4b111af1a83b49fffef5906c338a1f922","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","e596c9bb2f29a2699fdd4ae89139612652245192f67f45617c5a4b20832aaae9","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","1cdcfc1f624d6c08aa12c73935f6e13f095919cd99edf95752951796eb225729","216717f17c095cde1dc19375e1ab3af0a4a485355860c077a4f9d6ea59fab5b5","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"00dee7cdca8b8420c47ea4a31a34b8e8294013ebc4f463fd941e867e7bf05029","affectsGlobalScope":true},"80473bd0dd90ca1e166514c2dfead9d5803f9c51418864ca35abbeec6e6847e1","1c84b46267610a34028edfd0d035509341751262bac1062857f3c8df7aff7153","3bd1b21f21d18995315d232c5c7e868651e109396f3ca48fa8ab15f57a20d911","a3d541d303ee505053f5dcbf9fafb65cac3d5631037501cd616195863a6c5740","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true},"bcebb922784739bdb34c18ee51095d25a92b560c78ccd2eaacd6bd00f7443d83","7ee6ed878c4528215c82b664fe0cfe80e8b4da6c0d4cc80869367868774db8b1","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"0715e4cd28ad471b2a93f3e552ff51a3ae423417a01a10aa1d3bc7c6b95059d6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","4f3fdeba4e28e21aa719c081b8dc8f91d47e12e773389b9d35679c08151c9d37","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","f69ff39996a61a0dd10f4bce73272b52e8024a4d58b13ab32bf4712909d0a2b7",{"version":"3c4ba1dd9b12ffa284b565063108f2f031d150ea15b8fafbdc17f5d2a07251f3","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","1422cd9e705adcc09088fda85a900c2b70e3ad36ea85846f68bd1a884cdf4e2b","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"a73ae8c0e62103bb9e21bb6538700881bf135b9a8b125b857ec68edfa0da4ed3","affectsGlobalScope":true},{"version":"e1c1b2fbe236bf7ee3e342eeae7e20efb8988a0ac7da1cbbfa2c1f66b76c3423","affectsGlobalScope":true},"868831cab82b65dfe1d68180e898af1f2101e89ba9b754d1db6fb8cc2fac1921","0fe8985a28f82c450a04a6edf1279d7181c0893f37da7d2a27f8efd4fd5edb03","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"52120bb7e4583612225bdf08e7c12559548170f11e660d33a33623bae9bbdbba","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a6dd3dba8e665ac43d279e0fdf5219edda0eed69b5e9a5061f46cd6a65c4f7a1"],"root":[[45,53]],"options":{"declaration":true,"esModuleInterop":true,"inlineSourceMap":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./main","rootDir":"../src","strict":true,"target":9},"fileIdsList":[[54,100],[57,100],[58,63,91,100],[59,70,71,78,88,99,100],[59,60,70,78,100],[61,100],[62,63,71,79,100],[63,88,96,100],[64,66,70,78,100],[65,100],[66,67,100],[70,100],[68,70,100],[70,71,72,88,99,100],[70,71,72,85,88,91,100],[100,104],[100],[66,73,78,88,99,100],[70,71,73,74,78,88,96,99,100],[73,75,88,96,99,100],[54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106],[70,76,100],[77,99,100],[66,70,78,88,100],[79,100],[80,100],[57,81,100],[82,98,100,104],[83,100],[84,100],[70,85,86,100],[85,87,100,102],[58,70,88,89,90,91,100],[58,88,90,100],[88,89,100],[91,100],[92,100],[70,94,95,100],[94,95,100],[63,78,88,96,100],[97,100],[78,98,100],[58,73,84,99,100],[63,100],[88,100,101],[100,102],[100,103],[58,63,70,72,81,88,99,100,102,104],[88,100,105],[45,100],[45,47,48,49,100],[50,100],[46,51,100],[45,48,100],[47,48],[50],[46,50],[45,48]],"referencedMap":[[54,1],[55,1],[57,2],[58,3],[59,4],[60,5],[61,6],[62,7],[63,8],[64,9],[65,10],[66,11],[67,11],[69,12],[68,13],[70,12],[71,14],[72,15],[56,16],[106,17],[73,18],[74,19],[75,20],[107,21],[76,22],[77,23],[78,24],[79,25],[80,26],[81,27],[82,28],[83,29],[84,30],[85,31],[86,31],[87,32],[88,33],[90,34],[89,35],[91,36],[92,37],[93,17],[94,38],[95,39],[96,40],[97,41],[98,42],[99,43],[100,44],[101,45],[102,46],[103,47],[104,48],[105,49],[43,17],[44,17],[8,17],[10,17],[9,17],[2,17],[11,17],[12,17],[13,17],[14,17],[15,17],[16,17],[17,17],[18,17],[3,17],[4,17],[22,17],[19,17],[20,17],[21,17],[23,17],[24,17],[25,17],[5,17],[26,17],[27,17],[28,17],[29,17],[6,17],[33,17],[30,17],[31,17],[32,17],[34,17],[7,17],[35,17],[40,17],[41,17],[36,17],[37,17],[38,17],[39,17],[1,17],[42,17],[46,50],[50,51],[47,17],[51,52],[52,53],[45,17],[49,54],[48,17],[53,17]],"exportedModulesMap":[[54,1],[55,1],[57,2],[58,3],[59,4],[60,5],[61,6],[62,7],[63,8],[64,9],[65,10],[66,11],[67,11],[69,12],[68,13],[70,12],[71,14],[72,15],[56,16],[106,17],[73,18],[74,19],[75,20],[107,21],[76,22],[77,23],[78,24],[79,25],[80,26],[81,27],[82,28],[83,29],[84,30],[85,31],[86,31],[87,32],[88,33],[90,34],[89,35],[91,36],[92,37],[93,17],[94,38],[95,39],[96,40],[97,41],[98,42],[99,43],[100,44],[101,45],[102,46],[103,47],[104,48],[105,49],[43,17],[44,17],[8,17],[10,17],[9,17],[2,17],[11,17],[12,17],[13,17],[14,17],[15,17],[16,17],[17,17],[18,17],[3,17],[4,17],[22,17],[19,17],[20,17],[21,17],[23,17],[24,17],[25,17],[5,17],[26,17],[27,17],[28,17],[29,17],[6,17],[33,17],[30,17],[31,17],[32,17],[34,17],[7,17],[35,17],[40,17],[41,17],[36,17],[37,17],[38,17],[39,17],[1,17],[42,17],[50,55],[51,56],[52,57],[49,58]],"semanticDiagnosticsPerFile":[54,55,57,58,59,60,61,62,63,64,65,66,67,69,68,70,71,72,56,106,73,74,75,107,76,77,78,79,80,81,82,83,84,85,86,87,88,90,89,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,43,44,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,46,50,47,51,52,45,49,48,53]},"version":"5.0.4"}
|
|
1
|
+
{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/types/datalayer.ts","../src/datalayer.ts","../src/ga4/ga4option.ts","../src/types/gtag.ts","../src/types/plugins.ts","../src/types/global.ts","../src/ga4/ga4.ts","../src/ga4/index.ts","../src/helpers/delegate.ts","../src/plugins/event-tracker.ts","../src/helpers/parse-url.ts","../src/plugins/outbound-link-tracker.ts","../src/plugins/outbound-form-tracker.ts","../src/helpers/session.ts","../src/plugins/page-visibility-tracker.ts","../src/plugins/url-change-tracker.ts","../src/helpers/dom-ready.ts","../src/plugins/impression-tracker.ts","../src/plugins/clean-url-tracker.ts","../src/helpers/debounce.ts","../src/plugins/media-query-tracker.ts","../src/index.ts","../src/util.ts","../src/plugins/index.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts"],"fileInfos":[{"version":"6a6b471e7e43e15ef6f8fe617a22ce4ecb0e34efa6c3dfcfe7cebd392bcca9d2","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"fcd3ecc9f764f06f4d5c467677f4f117f6abf49dee6716283aa204ff1162498b","affectsGlobalScope":true},{"version":"f296963760430fb65b4e5d91f0ed770a91c6e77455bacf8fa23a1501654ede0e","affectsGlobalScope":true},{"version":"5114a95689b63f96b957e00216bc04baf9e1a1782aa4d8ee7e5e9acbf768e301","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"b7e9f95a7387e3f66be0ed6db43600c49cec33a3900437ce2fd350d9b7cb16f2","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"9da5b9c5bc8aa5043c6b1d7d5255490f436f700ce4322ae9161be0b101766a82","signature":"c27bbc52e3f861f48cb5967ae5291c81017e22ac4c98a5ce309bfccd1bc9552f"},{"version":"b5bd2d3f3c8dc813976382dd444d589d7fa6cbd0c9c3d546bd7a5e09ed97b15b","signature":"bbd1a681210a08104676bd8e6f7f150691e47ff8eda7c4ffe05918a1d5817ce2"},{"version":"113df1d01e65950478f0fd5f9d98b9e7b7fe1363d8f11395e8942cf3be9ef69a","signature":"18702c5a5b1261e42757524b7d389aec3f1908f2f54fd0b04cba5ed0b6d5f6c1"},{"version":"2e1b284e57cc4707f43bcf8294d1ee4fbb7f42f40901dea9dd3ac2bcf316583f","signature":"c327ab63d0f885684f6073fbda0336cb514d8dbbea80e210136e73353586bb21"},{"version":"9c6f9bc9aa4412eea9311d1c41b3259072d842edcfcc2e82ce36748b61b27deb","signature":"a06a00467e466e041674adb8a43f60c1afecc657a4f12cd6b2f09131a64b8252"},{"version":"617d6d0ddb962f188c1690cf83e7b8d46e52662983560a96c34dca56ae1eeaba","signature":"83bb03806cdc796898d2c59cabc02d847b77256fc60f2a816cdea1733e403931","affectsGlobalScope":true},{"version":"036eda34aa53ac26be7c4ea6af096fa046fe7c2bdb8b037f848d12d7178cc310","signature":"74f216a65fcc499722cfcfdd30e0575c06c53ec20664a57075d3deb50e36012c"},{"version":"65aca6ae98586a3865243fc2e89e3cc21b66a07e19133e94c1d86c3b5d8d43d1","signature":"ad2e67574fad659d6ac13584f527547d8eb99610c877c79a7bead55983f01b5e"},{"version":"df0e1c3264505516dcf6f18236419e6c9793d9747f0b2053b1a96eed27260357","signature":"fceb7628f4f3f667b4bb2cf282a23a4f094f595223881734bb67dc21f7c5b47e"},{"version":"dd03073cc59e2b65af94f4586934bcf1a46b44f6130082b9ab75126b4a7ada77","signature":"a352fd0adf5cd7f90ab0e24eeb319ae84e09e34f60425ce01e742299e4c876bc"},{"version":"eaefe10ad0e710e7c73138dabd28df2223c9fd266383b33191da42ab8acc2267","signature":"5f367d89ff6e3eca35ca5b099b92643fc7059b6307d2bdf99cd0865b41c7fd0f"},{"version":"a9b5b330ece3364b5e2654c7cac14d57f61a455ab90c776a7a0b8d7e9a5ad93d","signature":"89cc670fdf3bf9343793099c8749fbd3ad9ae61c1240305288386218cbb6a1d7"},{"version":"88387f49bbc3f741828f2ecfdf17410d6402a3b23d64551d41358080581118ed","signature":"3d6722593d3d982ebe66493778dd58688a3fea3cf9818d759982cd2b34ccb75f"},{"version":"7b1224b23f089289c17fac23029ed30781c45775f71e48c1cc8ffaf4a5516e9d","signature":"61e12a731602d77be7532fce46ec6f3743f5fccc1cf2927515db7a565c2e8e57"},{"version":"cbb3c37c6944e1fcb47b741405fc87b4f39461b481d46b68840e9006fc6ec363","signature":"afeca58b65ef4bb44a995d542ce585e270ae5cb0973de5e21cd8eb7ab2569b5a"},{"version":"5eb6ff261fa05696102ee9f93439e65b2847b8133ec7d0ba68db063dc0756d6f","signature":"4a9049272ba5f196e65ec9bc58a28eb40840c15ef8418300a3ee155898853aaa"},{"version":"d9228610f211f39337aadb9af14a64c094d2611b8299636fb8c7009d7411b2bb","signature":"dd5702b6710e976502e859129a92882a9b7e1ebc6797171721f3ccd2a6c9abc8"},{"version":"376aa5ccdbb6c8f083d3db79b2ec0d62ebb351007612e0be0fbc2a919417603c","signature":"004e87829e78b5d4a21b4070f2b2ed8bcaa608c06960f4409ca452cf268b5f72"},{"version":"47e4b70a35d3c4452dba8d7afb42aa10ceef614735028a86a0af1a249532efe6","signature":"dbbd6dbc43a087f55d020f87419fa71d14717afc8648b804f146956ce165fd96"},{"version":"474e7c5cc60679670e7046a4899c520370abcb59576ad718bdebbd0fea54a523","signature":"05203779cd0c1d8727b812128057741c04d89f9ecb585a343fe35aeb402981a5"},{"version":"cf4bbbcf90e0d15b8574e035fa93d2339782b90f6500cae8314e32ee278f124d","signature":"37e8d6ec4ccb6d5ab6d6ff6ff321d456c25c03fb0af9e658cd18125b905209b6"},{"version":"6267cf6c8cc85605609dbfbae1c1523b88292d2b21f086516f26965cd7f1a36e","signature":"dcf0495af6fcf42a6220fa42c8af25b20297beecf463825afbaa1124bcde8e6d"},{"version":"5bc6485455a4146ce1d55ad489e23881afb4382948ff86ccd43fe34b0446d41d","signature":"b94a542f623be983f86a1ac91139ed9fbb46728bcf70282eca6b5073b567328e"},{"version":"33e15facf0f857fc31a4e071c0476cbf129dbeb83d11c410d8290fbac6f5640b","signature":"f3587974a89f3d5ec6827c0e3411fdf12c163761e99653599074930c0c8ef279"},"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"f749812878fecfa53cfc13b36e5d35086fb6377983a9df44175da83ccc23af1f","affectsGlobalScope":true},"7d2e3fea24c712c99c03ad8f556abedbfe105f87f1be10b95dbd409d24bc05a3",{"version":"211e3f15fbced4ab4be19f49ffa990b9ff20d749d33b65ff753be691e7616239","affectsGlobalScope":true},"374ca798f244e464346f14301dc2a8b4b111af1a83b49fffef5906c338a1f922","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","e596c9bb2f29a2699fdd4ae89139612652245192f67f45617c5a4b20832aaae9","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","1cdcfc1f624d6c08aa12c73935f6e13f095919cd99edf95752951796eb225729","216717f17c095cde1dc19375e1ab3af0a4a485355860c077a4f9d6ea59fab5b5","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"00dee7cdca8b8420c47ea4a31a34b8e8294013ebc4f463fd941e867e7bf05029","affectsGlobalScope":true},"80473bd0dd90ca1e166514c2dfead9d5803f9c51418864ca35abbeec6e6847e1","1c84b46267610a34028edfd0d035509341751262bac1062857f3c8df7aff7153","3bd1b21f21d18995315d232c5c7e868651e109396f3ca48fa8ab15f57a20d911","a3d541d303ee505053f5dcbf9fafb65cac3d5631037501cd616195863a6c5740","8d3c583a07e0c37e876908c2d5da575019f689df8d9fa4c081d99119d53dba22","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e630e5528e899219ae319e83bef54bf3bcb91b01d76861ecf881e8e614b167f0","affectsGlobalScope":true},"bcebb922784739bdb34c18ee51095d25a92b560c78ccd2eaacd6bd00f7443d83","7ee6ed878c4528215c82b664fe0cfe80e8b4da6c0d4cc80869367868774db8b1","b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30",{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true},{"version":"0715e4cd28ad471b2a93f3e552ff51a3ae423417a01a10aa1d3bc7c6b95059d6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","4f3fdeba4e28e21aa719c081b8dc8f91d47e12e773389b9d35679c08151c9d37","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","f69ff39996a61a0dd10f4bce73272b52e8024a4d58b13ab32bf4712909d0a2b7",{"version":"3c4ba1dd9b12ffa284b565063108f2f031d150ea15b8fafbdc17f5d2a07251f3","affectsGlobalScope":true},"e10177274a35a9d07c825615340b2fcde2f610f53f3fb40269fd196b4288dda6","1422cd9e705adcc09088fda85a900c2b70e3ad36ea85846f68bd1a884cdf4e2b","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"a73ae8c0e62103bb9e21bb6538700881bf135b9a8b125b857ec68edfa0da4ed3","affectsGlobalScope":true},{"version":"e1c1b2fbe236bf7ee3e342eeae7e20efb8988a0ac7da1cbbfa2c1f66b76c3423","affectsGlobalScope":true},"868831cab82b65dfe1d68180e898af1f2101e89ba9b754d1db6fb8cc2fac1921","0fe8985a28f82c450a04a6edf1279d7181c0893f37da7d2a27f8efd4fd5edb03","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa",{"version":"52120bb7e4583612225bdf08e7c12559548170f11e660d33a33623bae9bbdbba","affectsGlobalScope":true},"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a6dd3dba8e665ac43d279e0fdf5219edda0eed69b5e9a5061f46cd6a65c4f7a1"],"root":[[45,68]],"options":{"declaration":true,"esModuleInterop":true,"inlineSourceMap":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./main","rootDir":"../src","strict":true,"target":9},"fileIdsList":[[69,115],[72,115],[73,78,106,115],[74,85,86,93,103,114,115],[74,75,85,93,115],[76,115],[77,78,86,94,115],[78,103,111,115],[79,81,85,93,115],[80,115],[81,82,115],[85,115],[83,85,115],[85,86,87,103,114,115],[85,86,87,100,103,106,115],[115,119],[115],[81,88,93,103,114,115],[85,86,88,89,93,103,111,114,115],[88,90,103,111,114,115],[69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121],[85,91,115],[92,114,115],[81,85,93,103,115],[94,115],[95,115],[72,96,115],[97,113,115,119],[98,115],[99,115],[85,100,101,115],[100,102,115,117],[73,85,103,104,105,106,115],[73,103,105,115],[103,104,115],[106,115],[107,115],[85,109,110,115],[109,110,115],[78,93,103,111,115],[112,115],[93,113,115],[73,88,99,114,115],[78,115],[103,115,116],[115,117],[115,118],[73,78,85,87,96,103,114,115,117,119],[103,115,120],[45,115],[45,47,48,49,50,115],[51,115],[46,49,52,54,56,57,59,60,62,63,65,115],[49,115],[49,53,115],[49,61,115],[54,56,57,59,60,62,63,65,115],[49,64,115],[49,53,55,115],[49,58,115],[45,48,115],[47,48,49],[51],[46,49,51,54,56,57,59,60,62,63,65],[49],[54,56,57,59,60,62,63,65],[45,48]],"referencedMap":[[69,1],[70,1],[72,2],[73,3],[74,4],[75,5],[76,6],[77,7],[78,8],[79,9],[80,10],[81,11],[82,11],[84,12],[83,13],[85,12],[86,14],[87,15],[71,16],[121,17],[88,18],[89,19],[90,20],[122,21],[91,22],[92,23],[93,24],[94,25],[95,26],[96,27],[97,28],[98,29],[99,30],[100,31],[101,31],[102,32],[103,33],[105,34],[104,35],[106,36],[107,37],[108,17],[109,38],[110,39],[111,40],[112,41],[113,42],[114,43],[115,44],[116,45],[117,46],[118,47],[119,48],[120,49],[43,17],[44,17],[8,17],[10,17],[9,17],[2,17],[11,17],[12,17],[13,17],[14,17],[15,17],[16,17],[17,17],[18,17],[3,17],[4,17],[22,17],[19,17],[20,17],[21,17],[23,17],[24,17],[25,17],[5,17],[26,17],[27,17],[28,17],[29,17],[6,17],[33,17],[30,17],[31,17],[32,17],[34,17],[7,17],[35,17],[40,17],[41,17],[36,17],[37,17],[38,17],[39,17],[1,17],[42,17],[46,50],[51,51],[47,17],[52,52],[64,17],[53,17],[61,17],[55,17],[58,17],[66,53],[63,54],[54,55],[62,56],[68,57],[65,58],[57,59],[56,59],[59,60],[60,54],[45,17],[50,61],[48,17],[49,17],[67,17]],"exportedModulesMap":[[69,1],[70,1],[72,2],[73,3],[74,4],[75,5],[76,6],[77,7],[78,8],[79,9],[80,10],[81,11],[82,11],[84,12],[83,13],[85,12],[86,14],[87,15],[71,16],[121,17],[88,18],[89,19],[90,20],[122,21],[91,22],[92,23],[93,24],[94,25],[95,26],[96,27],[97,28],[98,29],[99,30],[100,31],[101,31],[102,32],[103,33],[105,34],[104,35],[106,36],[107,37],[108,17],[109,38],[110,39],[111,40],[112,41],[113,42],[114,43],[115,44],[116,45],[117,46],[118,47],[119,48],[120,49],[43,17],[44,17],[8,17],[10,17],[9,17],[2,17],[11,17],[12,17],[13,17],[14,17],[15,17],[16,17],[17,17],[18,17],[3,17],[4,17],[22,17],[19,17],[20,17],[21,17],[23,17],[24,17],[25,17],[5,17],[26,17],[27,17],[28,17],[29,17],[6,17],[33,17],[30,17],[31,17],[32,17],[34,17],[7,17],[35,17],[40,17],[41,17],[36,17],[37,17],[38,17],[39,17],[1,17],[42,17],[51,62],[52,63],[66,64],[63,65],[54,65],[62,65],[68,66],[65,65],[57,65],[56,65],[59,65],[60,65],[50,67]],"semanticDiagnosticsPerFile":[69,70,72,73,74,75,76,77,78,79,80,81,82,84,83,85,86,87,71,121,88,89,90,122,91,92,93,94,95,96,97,98,99,100,101,102,103,105,104,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,43,44,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,46,51,47,52,64,53,61,55,58,66,63,54,62,68,65,57,56,59,60,45,50,48,49,67]},"version":"5.0.4"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# React Integration Guide
|
|
2
|
+
|
|
3
|
+
This guide shows a safe integration pattern for React applications.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @technoapple/ga4
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 1) Initialize once
|
|
12
|
+
|
|
13
|
+
Create a small analytics module and initialize GA4 exactly once.
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
// src/analytics.ts
|
|
17
|
+
import {
|
|
18
|
+
ga4,
|
|
19
|
+
EventTracker,
|
|
20
|
+
OutboundLinkTracker,
|
|
21
|
+
UrlChangeTracker,
|
|
22
|
+
} from '@technoapple/ga4';
|
|
23
|
+
|
|
24
|
+
let initialized = false;
|
|
25
|
+
|
|
26
|
+
export function initAnalytics() {
|
|
27
|
+
if (initialized) return;
|
|
28
|
+
initialized = true;
|
|
29
|
+
|
|
30
|
+
ga4.init({ targetId: 'G-XXXXXXX' });
|
|
31
|
+
|
|
32
|
+
ga4.use(EventTracker);
|
|
33
|
+
ga4.use(OutboundLinkTracker);
|
|
34
|
+
ga4.use(UrlChangeTracker, { trackReplaceState: true });
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export { ga4 };
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Call it in your app entry.
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
// src/main.tsx or src/index.tsx
|
|
44
|
+
import React from 'react';
|
|
45
|
+
import ReactDOM from 'react-dom/client';
|
|
46
|
+
import App from './App';
|
|
47
|
+
import { initAnalytics } from './analytics';
|
|
48
|
+
|
|
49
|
+
initAnalytics();
|
|
50
|
+
|
|
51
|
+
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
52
|
+
<React.StrictMode>
|
|
53
|
+
<App />
|
|
54
|
+
</React.StrictMode>
|
|
55
|
+
);
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 2) Send custom events
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
import { ga4 } from './analytics';
|
|
62
|
+
|
|
63
|
+
export function BuyButton() {
|
|
64
|
+
return (
|
|
65
|
+
<button
|
|
66
|
+
onClick={() => {
|
|
67
|
+
ga4.send('purchase_click', {
|
|
68
|
+
sku: 'plan_pro',
|
|
69
|
+
source: 'pricing_page',
|
|
70
|
+
});
|
|
71
|
+
}}
|
|
72
|
+
>
|
|
73
|
+
Buy now
|
|
74
|
+
</button>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 3) Optional cleanup (micro-frontend or test environments)
|
|
80
|
+
|
|
81
|
+
In most SPAs, analytics lives for the app lifetime. If your host mounts/unmounts React apps, clean up listeners:
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
import { ga4 } from './analytics';
|
|
85
|
+
|
|
86
|
+
export function disposeAnalytics() {
|
|
87
|
+
ga4.removeAll();
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## React-specific notes
|
|
92
|
+
|
|
93
|
+
- React Strict Mode can double-invoke lifecycle flows in development. The `initialized` guard prevents duplicate plugin registration.
|
|
94
|
+
- If your router already emits page views, avoid duplicate tracking with `UrlChangeTracker`.
|
|
95
|
+
- Register plugins after `ga4.init(...)`.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Vanilla JavaScript Integration Guide
|
|
2
|
+
|
|
3
|
+
Use this setup for plain JavaScript or TypeScript browser apps.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @technoapple/ga4
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic setup
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import {
|
|
15
|
+
ga4,
|
|
16
|
+
EventTracker,
|
|
17
|
+
OutboundLinkTracker,
|
|
18
|
+
UrlChangeTracker,
|
|
19
|
+
} from '@technoapple/ga4';
|
|
20
|
+
|
|
21
|
+
ga4.init({ targetId: 'G-XXXXXXX' });
|
|
22
|
+
|
|
23
|
+
ga4.use(EventTracker);
|
|
24
|
+
ga4.use(OutboundLinkTracker);
|
|
25
|
+
ga4.use(UrlChangeTracker, { trackReplaceState: true });
|
|
26
|
+
|
|
27
|
+
// Custom event
|
|
28
|
+
ga4.send('app_loaded', {
|
|
29
|
+
app_name: 'marketing_site',
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Declarative tracking in HTML
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<button
|
|
37
|
+
data-ga4-on="click"
|
|
38
|
+
data-ga4-event-name="cta_click"
|
|
39
|
+
data-ga4-cta-name="hero_primary"
|
|
40
|
+
>
|
|
41
|
+
Get Started
|
|
42
|
+
</button>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
With `EventTracker`, this emits:
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
gtag('event', 'cta_click', {
|
|
49
|
+
cta_name: 'hero_primary',
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Cleanup (if needed)
|
|
54
|
+
|
|
55
|
+
If the page shell hot-swaps modules or widgets, remove listeners before re-initializing:
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
ga4.removeAll();
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Notes
|
|
62
|
+
|
|
63
|
+
- Initialize once at app startup.
|
|
64
|
+
- Register plugins after `ga4.init(...)`.
|
|
65
|
+
- Avoid duplicate page-view logic if another script already tracks history changes.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Vue Integration Guide
|
|
2
|
+
|
|
3
|
+
This guide shows a safe integration pattern for Vue 3 applications.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @technoapple/ga4
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 1) Create an analytics plugin
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
// src/plugins/analytics.ts
|
|
15
|
+
import type { App } from 'vue';
|
|
16
|
+
import {
|
|
17
|
+
ga4,
|
|
18
|
+
EventTracker,
|
|
19
|
+
OutboundLinkTracker,
|
|
20
|
+
UrlChangeTracker,
|
|
21
|
+
} from '@technoapple/ga4';
|
|
22
|
+
|
|
23
|
+
let initialized = false;
|
|
24
|
+
|
|
25
|
+
export default {
|
|
26
|
+
install(_app: App) {
|
|
27
|
+
if (initialized) return;
|
|
28
|
+
initialized = true;
|
|
29
|
+
|
|
30
|
+
ga4.init({ targetId: 'G-XXXXXXX' });
|
|
31
|
+
|
|
32
|
+
ga4.use(EventTracker);
|
|
33
|
+
ga4.use(OutboundLinkTracker);
|
|
34
|
+
ga4.use(UrlChangeTracker, { trackReplaceState: true });
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { ga4 };
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Register it in app bootstrap:
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
// src/main.ts
|
|
45
|
+
import { createApp } from 'vue';
|
|
46
|
+
import App from './App.vue';
|
|
47
|
+
import analytics from './plugins/analytics';
|
|
48
|
+
|
|
49
|
+
createApp(App)
|
|
50
|
+
.use(analytics)
|
|
51
|
+
.mount('#app');
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 2) Send custom events
|
|
55
|
+
|
|
56
|
+
```vue
|
|
57
|
+
<script setup lang="ts">
|
|
58
|
+
import { ga4 } from '@/plugins/analytics';
|
|
59
|
+
|
|
60
|
+
function onStartTrial() {
|
|
61
|
+
ga4.send('start_trial_click', {
|
|
62
|
+
plan: 'pro',
|
|
63
|
+
placement: 'hero',
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
<template>
|
|
69
|
+
<button @click="onStartTrial">Start trial</button>
|
|
70
|
+
</template>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 3) Optional cleanup (embedded Vue app)
|
|
74
|
+
|
|
75
|
+
If your Vue app is mounted/unmounted by another host shell, clean up listeners when disposing the app:
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
import { ga4 } from '@/plugins/analytics';
|
|
79
|
+
|
|
80
|
+
ga4.removeAll();
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Vue-specific notes
|
|
84
|
+
|
|
85
|
+
- Keep initialization in one plugin/module to avoid duplicate listeners.
|
|
86
|
+
- If you already send page views in router hooks, avoid double page-view tracking with `UrlChangeTracker`.
|
|
87
|
+
- Register plugins after `ga4.init(...)`.
|