@v-tilt/browser 1.9.0 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all-external-dependencies.js.map +1 -1
- package/dist/array.full.js +1 -1
- package/dist/array.full.js.map +1 -1
- package/dist/array.js +1 -1
- package/dist/array.js.map +1 -1
- package/dist/array.no-external.js +1 -1
- package/dist/array.no-external.js.map +1 -1
- package/dist/autocapture-types.d.ts +119 -0
- package/dist/autocapture-utils.d.ts +85 -0
- package/dist/autocapture.d.ts +41 -0
- package/dist/chat.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/core/capture.d.ts +70 -0
- package/dist/core/feature-manager.d.ts +95 -0
- package/dist/core/identity.d.ts +77 -0
- package/dist/core/index.d.ts +13 -0
- package/dist/core/remote-config.d.ts +50 -0
- package/dist/extensions/chat/chat-wrapper.d.ts +36 -10
- package/dist/extensions/history-autocapture.d.ts +34 -7
- package/dist/extensions/replay/session-recording-wrapper.d.ts +42 -11
- package/dist/extensions/replay/types.d.ts +1 -1
- package/dist/extensions/web-vitals/index.d.ts +7 -0
- package/dist/extensions/web-vitals/web-vitals-manager.d.ts +81 -0
- package/dist/external-scripts-loader.js.map +1 -1
- package/dist/feature.d.ts +231 -0
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/module.d.ts +802 -324
- package/dist/module.js +1 -1
- package/dist/module.js.map +1 -1
- package/dist/module.no-external.d.ts +802 -324
- package/dist/module.no-external.js +1 -1
- package/dist/module.no-external.js.map +1 -1
- package/dist/recorder.js.map +1 -1
- package/dist/server.d.ts +6 -0
- package/dist/types.d.ts +66 -2
- package/dist/utils/event-emitter.d.ts +106 -0
- package/dist/utils/globals.d.ts +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/safewrap.d.ts +101 -0
- package/dist/utils/type-guards.d.ts +70 -0
- package/dist/vtilt.d.ts +66 -336
- package/dist/web-vitals.d.ts +39 -53
- package/dist/web-vitals.js.map +1 -1
- package/package.json +1 -1
package/dist/vtilt.d.ts
CHANGED
|
@@ -1,367 +1,97 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* VTilt SDK - Main Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Privacy-first analytics SDK with modular architecture.
|
|
5
|
+
* This file is a thin orchestrator that delegates to specialized managers:
|
|
6
|
+
*
|
|
7
|
+
* - ConfigManager: Configuration management
|
|
8
|
+
* - SessionManager: Session and window ID management
|
|
9
|
+
* - UserManager: User identity and properties
|
|
10
|
+
* - CaptureManager: Event capture and payload enrichment
|
|
11
|
+
* - IdentityManager: High-level identity operations
|
|
12
|
+
* - RemoteConfigManager: Remote configuration from /decide
|
|
13
|
+
* - FeatureManager: Feature lifecycle management
|
|
14
|
+
*
|
|
15
|
+
* @see docs/tracker/README.md for full documentation
|
|
16
|
+
*/
|
|
17
|
+
import { VTiltConfig, EventPayload, TrackingEvent } from "./types";
|
|
18
|
+
import { SessionManager } from "./session";
|
|
19
|
+
import { UserManager } from "./user-manager";
|
|
20
|
+
import { WebVitalsManager } from "./extensions/web-vitals";
|
|
2
21
|
import { HistoryAutocapture } from "./extensions/history-autocapture";
|
|
22
|
+
import { Autocapture } from "./autocapture";
|
|
3
23
|
import { SessionRecordingWrapper } from "./extensions/replay";
|
|
4
24
|
import { ChatWrapper } from "./extensions/chat/chat-wrapper";
|
|
5
25
|
import { type QueuedRequest } from "./request-queue";
|
|
26
|
+
import { RateLimiter } from "./rate-limiter";
|
|
27
|
+
import { SimpleEventEmitter } from "./utils/event-emitter";
|
|
6
28
|
export declare class VTilt {
|
|
7
|
-
readonly version = "1.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
private userManager;
|
|
11
|
-
private webVitalsManager;
|
|
12
|
-
private requestQueue;
|
|
13
|
-
private retryQueue;
|
|
14
|
-
private rateLimiter;
|
|
29
|
+
readonly version = "1.10.1";
|
|
30
|
+
__loaded: boolean;
|
|
31
|
+
__request_queue: QueuedRequest[];
|
|
15
32
|
historyAutocapture?: HistoryAutocapture;
|
|
33
|
+
autocapture?: Autocapture;
|
|
16
34
|
sessionRecording?: SessionRecordingWrapper;
|
|
17
35
|
chat?: ChatWrapper;
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
|
|
36
|
+
webVitals?: WebVitalsManager;
|
|
37
|
+
private configManager;
|
|
38
|
+
sessionManager: SessionManager;
|
|
39
|
+
userManager: UserManager;
|
|
40
|
+
private _captureManager;
|
|
41
|
+
private _identityManager;
|
|
42
|
+
private _remoteConfigManager;
|
|
43
|
+
private _featureManager;
|
|
44
|
+
private requestQueue;
|
|
45
|
+
private retryQueue;
|
|
46
|
+
rateLimiter: RateLimiter;
|
|
47
|
+
_emitter: SimpleEventEmitter;
|
|
22
48
|
private _has_warned_about_config;
|
|
23
|
-
private _set_once_properties_sent;
|
|
24
|
-
private _remoteConfig;
|
|
25
|
-
/** Person UUID from vt= URL param (manual person tracking link); sent as $vt until backend links distinct_id */
|
|
26
|
-
private _vt_person_uuid;
|
|
27
49
|
constructor(config?: Partial<VTiltConfig>);
|
|
28
|
-
/**
|
|
29
|
-
* Initializes a new instance of the VTilt tracking object.
|
|
30
|
-
*
|
|
31
|
-
* @remarks
|
|
32
|
-
* All new instances are added to the main vt object as sub properties (such as
|
|
33
|
-
* `vt.library_name`) and also returned by this function.
|
|
34
|
-
*
|
|
35
|
-
* @example
|
|
36
|
-
* ```js
|
|
37
|
-
* // basic initialization
|
|
38
|
-
* vt.init('<project_id>', {
|
|
39
|
-
* api_host: '<client_api_host>'
|
|
40
|
-
* })
|
|
41
|
-
* ```
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```js
|
|
45
|
-
* // multiple instances
|
|
46
|
-
* vt.init('<project_id>', {}, 'project1')
|
|
47
|
-
* vt.init('<project_id>', {}, 'project2')
|
|
48
|
-
* ```
|
|
49
|
-
*
|
|
50
|
-
* @public
|
|
51
|
-
*
|
|
52
|
-
* @param projectId - Your VTilt project ID
|
|
53
|
-
* @param config - A dictionary of config options to override
|
|
54
|
-
* @param name - The name for the new VTilt instance that you want created
|
|
55
|
-
*
|
|
56
|
-
* @returns The newly initialized VTilt instance
|
|
57
|
-
*/
|
|
58
50
|
init(projectId: string, config?: Partial<VTiltConfig>, name?: string): VTilt;
|
|
59
|
-
/**
|
|
60
|
-
* Handles the actual initialization logic for a VTilt instance.
|
|
61
|
-
* This internal method should only be called by `init()`.
|
|
62
|
-
*/
|
|
63
51
|
private _init;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
* Stores the value for inclusion in event payload as $vt; removes param from URL via replaceState.
|
|
78
|
-
*/
|
|
79
|
-
private _read_vt_param_from_url;
|
|
80
|
-
/**
|
|
81
|
-
* Load remote config from cache and fetch fresh in background.
|
|
82
|
-
* Uses sessionStorage for per-session caching.
|
|
83
|
-
* Local config always overrides remote config.
|
|
84
|
-
*/
|
|
85
|
-
private _loadRemoteConfig;
|
|
86
|
-
/**
|
|
87
|
-
* Fetch remote config from /decide endpoint.
|
|
88
|
-
* Caches response in localStorage for persistence across sessions.
|
|
89
|
-
*/
|
|
90
|
-
private _fetchRemoteConfig;
|
|
91
|
-
/**
|
|
92
|
-
* Apply remote config to current config.
|
|
93
|
-
* Local config takes precedence over remote.
|
|
94
|
-
* Also triggers feature initialization if settings changed after init.
|
|
95
|
-
*/
|
|
96
|
-
private _applyRemoteConfig;
|
|
97
|
-
/**
|
|
98
|
-
* Returns a string representation of the instance name
|
|
99
|
-
* Used for debugging and logging
|
|
100
|
-
*
|
|
101
|
-
* @internal
|
|
102
|
-
*/
|
|
103
|
-
toString(): string;
|
|
104
|
-
/**
|
|
105
|
-
* Get current domain from location
|
|
106
|
-
* Returns full URL format for consistency with dashboard
|
|
107
|
-
*/
|
|
108
|
-
private getCurrentDomain;
|
|
109
|
-
/**
|
|
110
|
-
* Check if tracking is properly configured
|
|
111
|
-
* Returns true if projectId and token are present, false otherwise
|
|
112
|
-
* Logs a warning only once per instance if not configured
|
|
113
|
-
*/
|
|
114
|
-
private _is_configured;
|
|
115
|
-
/**
|
|
116
|
-
* Build the tracking URL with token in query parameters
|
|
117
|
-
*/
|
|
118
|
-
private buildUrl;
|
|
119
|
-
/**
|
|
120
|
-
* Send HTTP request
|
|
121
|
-
* This is the central entry point for all tracking requests
|
|
122
|
-
* Events are batched and sent every 3 seconds for better performance
|
|
123
|
-
*/
|
|
124
|
-
private sendRequest;
|
|
125
|
-
/**
|
|
126
|
-
* Send a batched request with multiple events
|
|
127
|
-
* Called by RequestQueue when flushing
|
|
128
|
-
* Uses RetryQueue for automatic retry on failure
|
|
129
|
-
*/
|
|
130
|
-
private _send_batched_request;
|
|
131
|
-
/**
|
|
132
|
-
* Send HTTP request and return status code
|
|
133
|
-
* Uses GZip compression for payloads > 1KB
|
|
134
|
-
* Used by RetryQueue for retryable requests
|
|
135
|
-
*/
|
|
136
|
-
private _send_http_request;
|
|
137
|
-
/**
|
|
138
|
-
* Send request using sendBeacon for reliable delivery on page unload
|
|
139
|
-
* Uses GZip compression for payloads > 1KB
|
|
140
|
-
*/
|
|
141
|
-
private _send_beacon_request;
|
|
142
|
-
/**
|
|
143
|
-
* Send a queued request (called after DOM is loaded)
|
|
144
|
-
*/
|
|
145
|
-
_send_retriable_request(item: QueuedRequest): void;
|
|
146
|
-
/**
|
|
147
|
-
* Capture an event
|
|
148
|
-
* Automatically adds common properties to all events
|
|
149
|
-
* ($current_url, $host, $pathname, $referrer, $referring_domain, $browser, $os, $device, $timezone, etc.)
|
|
150
|
-
* Only properties in EVENT_TO_PERSON_PROPERTIES are copied to person properties
|
|
151
|
-
* Also adds title property for $pageview events only
|
|
152
|
-
*
|
|
153
|
-
* @param name - Event name
|
|
154
|
-
* @param payload - Event payload
|
|
155
|
-
* @param options - Optional capture options
|
|
156
|
-
*/
|
|
52
|
+
private _initFeatures;
|
|
53
|
+
private _initHistoryAutocapture;
|
|
54
|
+
private _initAutocapture;
|
|
55
|
+
private _initWebVitals;
|
|
56
|
+
_initSessionRecording(): void;
|
|
57
|
+
_initChat(): void;
|
|
58
|
+
startAutocapture(): void;
|
|
59
|
+
stopAutocapture(): void;
|
|
60
|
+
isAutocaptureActive(): boolean;
|
|
61
|
+
startSessionRecording(): void;
|
|
62
|
+
stopSessionRecording(): void;
|
|
63
|
+
isRecordingActive(): boolean;
|
|
64
|
+
getSessionRecordingId(): string | null;
|
|
157
65
|
capture(name: string, payload: EventPayload, options?: {
|
|
158
66
|
skip_client_rate_limiting?: boolean;
|
|
159
67
|
}): void;
|
|
160
|
-
/**
|
|
161
|
-
* Internal capture method that bypasses rate limiting
|
|
162
|
-
* Used for system events like rate limit warnings
|
|
163
|
-
*/
|
|
164
|
-
private _capture_internal;
|
|
165
|
-
/**
|
|
166
|
-
* Track a custom event (alias for capture)
|
|
167
|
-
*/
|
|
168
68
|
trackEvent(name: string, payload?: EventPayload): void;
|
|
169
|
-
/**
|
|
170
|
-
* Identify a user with property operations
|
|
171
|
-
* Sends $identify event when transitioning from anonymous to identified
|
|
172
|
-
* Event's distinct_id is the previous/anonymous ID, new distinct_id is in payload
|
|
173
|
-
*
|
|
174
|
-
* @example
|
|
175
|
-
* ```js
|
|
176
|
-
* // Basic identify with properties
|
|
177
|
-
* vTilt.identify('user_123',
|
|
178
|
-
* { name: 'John Doe', email: 'john@example.com' }, // $set properties
|
|
179
|
-
* { first_login: new Date().toISOString() } // $set_once properties
|
|
180
|
-
* )
|
|
181
|
-
* ```
|
|
182
|
-
*
|
|
183
|
-
* @example
|
|
184
|
-
* ```js
|
|
185
|
-
* // If no $set is provided, all properties are treated as $set
|
|
186
|
-
* vTilt.identify('user_123', { name: 'John Doe', email: 'john@example.com' })
|
|
187
|
-
* ```
|
|
188
|
-
*/
|
|
189
69
|
identify(newDistinctId?: string, userPropertiesToSet?: Record<string, any>, userPropertiesToSetOnce?: Record<string, any>): void;
|
|
190
|
-
/**
|
|
191
|
-
* Set user properties
|
|
192
|
-
* Sets properties on the person profile associated with the current distinct_id
|
|
193
|
-
*
|
|
194
|
-
* @example
|
|
195
|
-
* ```js
|
|
196
|
-
* // Set properties that can be updated
|
|
197
|
-
* vTilt.setUserProperties({ name: 'John Doe', email: 'john@example.com' })
|
|
198
|
-
* ```
|
|
199
|
-
*
|
|
200
|
-
* @example
|
|
201
|
-
* ```js
|
|
202
|
-
* // Set properties with $set and $set_once operations
|
|
203
|
-
* vTilt.setUserProperties(
|
|
204
|
-
* { name: 'John Doe', last_login: new Date().toISOString() }, // $set properties
|
|
205
|
-
* { first_login: new Date().toISOString() } // $set_once properties
|
|
206
|
-
* )
|
|
207
|
-
* ```
|
|
208
|
-
*
|
|
209
|
-
* @param userPropertiesToSet Optional: Properties to set (can be updated)
|
|
210
|
-
* @param userPropertiesToSetOnce Optional: Properties to set once (preserves first value)
|
|
211
|
-
*/
|
|
212
70
|
setUserProperties(userPropertiesToSet?: Record<string, any>, userPropertiesToSetOnce?: Record<string, any>): void;
|
|
213
|
-
/**
|
|
214
|
-
* Reset user identity (logout)
|
|
215
|
-
* Clears all user data, generates new anonymous ID, resets session
|
|
216
|
-
*
|
|
217
|
-
* @param reset_device_id - If true, also resets device_id. Default: false
|
|
218
|
-
*
|
|
219
|
-
* @example
|
|
220
|
-
* // Reset on user logout
|
|
221
|
-
* vtilt.resetUser()
|
|
222
|
-
*
|
|
223
|
-
* @example
|
|
224
|
-
* // Reset and generate new device ID
|
|
225
|
-
* vtilt.resetUser(true)
|
|
226
|
-
*/
|
|
227
71
|
resetUser(reset_device_id?: boolean): void;
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
*/
|
|
231
|
-
getUserIdentity(): import("./types").UserIdentity;
|
|
232
|
-
/**
|
|
233
|
-
* Get current device ID
|
|
234
|
-
*/
|
|
72
|
+
createAlias(alias: string, original?: string): void;
|
|
73
|
+
getUserIdentity(): Record<string, any>;
|
|
235
74
|
getDeviceId(): string;
|
|
236
|
-
/**
|
|
237
|
-
* Get current user state
|
|
238
|
-
*/
|
|
239
75
|
getUserState(): "anonymous" | "identified";
|
|
240
|
-
/**
|
|
241
|
-
* Create an alias to link two distinct IDs
|
|
242
|
-
* Links anonymous session to account on signup
|
|
243
|
-
*
|
|
244
|
-
* @param alias - A unique identifier that you want to use for this user in the future
|
|
245
|
-
* @param original - The current identifier being used for this user (optional, defaults to current distinct_id)
|
|
246
|
-
*
|
|
247
|
-
* @example
|
|
248
|
-
* // Link anonymous user to account on signup
|
|
249
|
-
* vtilt.createAlias('user_12345')
|
|
250
|
-
*
|
|
251
|
-
* @example
|
|
252
|
-
* // Explicit alias with original ID
|
|
253
|
-
* vtilt.createAlias('user_12345', 'anonymous_abc123')
|
|
254
|
-
*/
|
|
255
|
-
createAlias(alias: string, original?: string): void;
|
|
256
|
-
/**
|
|
257
|
-
* Capture initial pageview with visibility check
|
|
258
|
-
* Note: The capture_pageview config check happens at the call site (in _init)
|
|
259
|
-
*/
|
|
260
|
-
private _capture_initial_pageview;
|
|
261
|
-
/**
|
|
262
|
-
* Get current configuration
|
|
263
|
-
*/
|
|
264
76
|
getConfig(): VTiltConfig;
|
|
265
|
-
/**
|
|
266
|
-
* Get current session ID
|
|
267
|
-
*/
|
|
268
77
|
getSessionId(): string | null;
|
|
269
|
-
/**
|
|
270
|
-
* Get current distinct ID
|
|
271
|
-
*/
|
|
272
78
|
getDistinctId(): string;
|
|
273
|
-
/**
|
|
274
|
-
* Get anonymous ID
|
|
275
|
-
*/
|
|
276
79
|
getAnonymousId(): string;
|
|
277
|
-
|
|
278
|
-
* Update configuration
|
|
279
|
-
*/
|
|
80
|
+
toString(): string;
|
|
280
81
|
updateConfig(config: Partial<VTiltConfig>): void;
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
private
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
*/
|
|
293
|
-
startSessionRecording(): void;
|
|
294
|
-
/**
|
|
295
|
-
* Stop session recording
|
|
296
|
-
*/
|
|
297
|
-
stopSessionRecording(): void;
|
|
298
|
-
/**
|
|
299
|
-
* Check if session recording is active
|
|
300
|
-
*/
|
|
301
|
-
isRecordingActive(): boolean;
|
|
302
|
-
/**
|
|
303
|
-
* Get session recording ID
|
|
304
|
-
*/
|
|
305
|
-
getSessionRecordingId(): string | null;
|
|
306
|
-
/**
|
|
307
|
-
* Initialize chat widget
|
|
308
|
-
*/
|
|
309
|
-
private _initChat;
|
|
310
|
-
/**
|
|
311
|
-
* Build chat config from VTiltConfig
|
|
312
|
-
*/
|
|
313
|
-
private _buildChatConfig;
|
|
314
|
-
/**
|
|
315
|
-
* _execute_array() deals with processing any vTilt function
|
|
316
|
-
* calls that were called before the vTilt library was loaded
|
|
317
|
-
* (and are thus stored in an array so they can be called later)
|
|
318
|
-
*
|
|
319
|
-
* Note: we fire off all the vTilt function calls BEFORE we fire off
|
|
320
|
-
* tracking calls. This is so identify/setUserProperties/updateConfig calls
|
|
321
|
-
* can properly modify early tracking calls.
|
|
322
|
-
*
|
|
323
|
-
* @param {Array} array Array of queued calls in format [methodName, ...args]
|
|
324
|
-
*/
|
|
82
|
+
private _notifyFeaturesOfConfigUpdate;
|
|
83
|
+
buildUrl(): string;
|
|
84
|
+
sendRequest(url: string, event: TrackingEvent, shouldEnqueue?: boolean): void;
|
|
85
|
+
private _is_configured;
|
|
86
|
+
private _send_batched_request;
|
|
87
|
+
private _send_http_request;
|
|
88
|
+
private _send_beacon_request;
|
|
89
|
+
_send_retriable_request(item: QueuedRequest): void;
|
|
90
|
+
private _setup_unload_handler;
|
|
91
|
+
private _start_queue_if_opted_in;
|
|
92
|
+
private _read_vt_param_from_url;
|
|
325
93
|
_execute_array(array: any[]): void;
|
|
326
|
-
/**
|
|
327
|
-
* Called when DOM is loaded - processes queued requests and enables batching
|
|
328
|
-
* Following PostHog's pattern in _dom_loaded()
|
|
329
|
-
*/
|
|
330
94
|
_dom_loaded(): void;
|
|
331
95
|
}
|
|
332
|
-
/**
|
|
333
|
-
* Initialize vTilt as a module
|
|
334
|
-
* Returns an uninitialized vTilt instance that the user must call init() on
|
|
335
|
-
*/
|
|
336
96
|
export declare function init_as_module(): VTilt;
|
|
337
|
-
/**
|
|
338
|
-
* Initialize vTilt from snippet
|
|
339
|
-
* Processes queued calls from the snippet stub and replaces it with real instance
|
|
340
|
-
*
|
|
341
|
-
* The snippet uses some clever tricks to allow deferred loading of array.js (this code)
|
|
342
|
-
*
|
|
343
|
-
* window.vt is an array which the queue of calls made before the lib is loaded
|
|
344
|
-
* It has methods attached to it to simulate the vt object so for instance
|
|
345
|
-
*
|
|
346
|
-
* window.vt.init("projectId", {token: "token", host: "host"})
|
|
347
|
-
* window.vt.trackEvent("my-event", {foo: "bar"})
|
|
348
|
-
*
|
|
349
|
-
* ... will mean that window.vt will look like this:
|
|
350
|
-
* window.vt == [
|
|
351
|
-
* ["trackEvent", "my-event", {foo: "bar"}]
|
|
352
|
-
* ]
|
|
353
|
-
*
|
|
354
|
-
* window.vt._i == [
|
|
355
|
-
* ["projectId", {token: "token", host: "host"}, "vt"]
|
|
356
|
-
* ]
|
|
357
|
-
*
|
|
358
|
-
* If a name is given to the init function then the same as above is true but as a sub-property on the object:
|
|
359
|
-
*
|
|
360
|
-
* window.vt.init("projectId", {token: "token"}, "vt2")
|
|
361
|
-
* window.vt.vt2.trackEvent("my-event", {foo: "bar"})
|
|
362
|
-
*
|
|
363
|
-
* window.vt.vt2 == [
|
|
364
|
-
* ["trackEvent", "my-event", {foo: "bar"}]
|
|
365
|
-
* ]
|
|
366
|
-
*/
|
|
367
97
|
export declare function init_from_snippet(): void;
|
package/dist/web-vitals.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { VTiltConfig, SupportedWebVitalsMetric } from "./types";
|
|
1
|
+
import { VTiltConfig, CapturePerformanceConfig, SupportedWebVitalsMetric } from "./types";
|
|
2
|
+
import type { Feature } from "./feature";
|
|
2
3
|
import { VTilt } from "./vtilt";
|
|
3
4
|
/**
|
|
4
5
|
* Web Vitals Manager
|
|
5
6
|
*
|
|
6
7
|
* Captures Core Web Vitals (LCP, CLS, FCP, INP, TTFB) and sends them
|
|
7
|
-
* as batched $web_vitals events.
|
|
8
|
+
* as batched $web_vitals events. Implements the Feature interface for
|
|
9
|
+
* consistent lifecycle management.
|
|
8
10
|
*
|
|
11
|
+
* Follows PostHog's approach with:
|
|
9
12
|
* 1. Extension pattern - checks for callbacks registered on __VTiltExtensions__
|
|
10
13
|
* 2. Lazy loading - loads web-vitals.js on demand if not bundled
|
|
11
14
|
* 3. Configurable metrics - choose which metrics to capture
|
|
@@ -20,76 +23,59 @@ import { VTilt } from "./vtilt";
|
|
|
20
23
|
* - $pathname: string
|
|
21
24
|
* - $current_url: string
|
|
22
25
|
*/
|
|
23
|
-
export declare class WebVitalsManager {
|
|
24
|
-
|
|
25
|
-
private
|
|
26
|
-
private
|
|
27
|
-
private
|
|
28
|
-
private
|
|
29
|
-
|
|
26
|
+
export declare class WebVitalsManager implements Feature {
|
|
27
|
+
readonly name = "WebVitals";
|
|
28
|
+
private _instance;
|
|
29
|
+
private _buffer;
|
|
30
|
+
private _flushTimer;
|
|
31
|
+
private _isStarted;
|
|
32
|
+
private _config;
|
|
30
33
|
/**
|
|
31
|
-
*
|
|
34
|
+
* Extract web vitals config from VTiltConfig (self-contained)
|
|
32
35
|
*/
|
|
33
|
-
|
|
36
|
+
static extractConfig(config: VTiltConfig): CapturePerformanceConfig;
|
|
37
|
+
constructor(instance: VTilt);
|
|
34
38
|
/**
|
|
35
39
|
* Check if web vitals capture is enabled
|
|
36
40
|
*/
|
|
37
41
|
get isEnabled(): boolean;
|
|
38
42
|
/**
|
|
39
|
-
*
|
|
43
|
+
* Check if capturing has started
|
|
40
44
|
*/
|
|
41
|
-
get
|
|
45
|
+
get isStarted(): boolean;
|
|
42
46
|
/**
|
|
43
|
-
*
|
|
44
|
-
*/
|
|
45
|
-
get flushTimeoutMs(): number;
|
|
46
|
-
/**
|
|
47
|
-
* Get maximum allowed metric value
|
|
48
|
-
*/
|
|
49
|
-
get maxAllowedValue(): number;
|
|
50
|
-
private createEmptyBuffer;
|
|
51
|
-
/**
|
|
52
|
-
* Check if web vitals callbacks are available
|
|
53
|
-
*/
|
|
54
|
-
private getWebVitalsCallbacks;
|
|
55
|
-
/**
|
|
56
|
-
* Start capturing if enabled and callbacks are available
|
|
47
|
+
* Start capturing if enabled
|
|
57
48
|
*/
|
|
58
49
|
startIfEnabled(): void;
|
|
59
50
|
/**
|
|
60
|
-
*
|
|
61
|
-
*/
|
|
62
|
-
private loadWebVitals;
|
|
63
|
-
/**
|
|
64
|
-
* Start capturing web vitals using the provided callbacks
|
|
65
|
-
*/
|
|
66
|
-
private startCapturing;
|
|
67
|
-
/**
|
|
68
|
-
* Get current URL
|
|
69
|
-
*/
|
|
70
|
-
private getCurrentUrl;
|
|
71
|
-
/**
|
|
72
|
-
* Get current pathname
|
|
73
|
-
*/
|
|
74
|
-
private getCurrentPathname;
|
|
75
|
-
/**
|
|
76
|
-
* Add a metric to the buffer
|
|
51
|
+
* Stop capturing (flushes any pending metrics)
|
|
77
52
|
*/
|
|
78
|
-
|
|
53
|
+
stop(): void;
|
|
79
54
|
/**
|
|
80
|
-
*
|
|
55
|
+
* Handle config update
|
|
81
56
|
*/
|
|
82
|
-
|
|
57
|
+
onConfigUpdate(config: VTiltConfig): void;
|
|
83
58
|
/**
|
|
84
|
-
* Get
|
|
59
|
+
* Get the list of metrics to capture
|
|
85
60
|
*/
|
|
86
|
-
|
|
61
|
+
get allowedMetrics(): SupportedWebVitalsMetric[];
|
|
87
62
|
/**
|
|
88
|
-
*
|
|
63
|
+
* Get flush timeout in ms
|
|
89
64
|
*/
|
|
90
|
-
|
|
65
|
+
get flushTimeoutMs(): number;
|
|
91
66
|
/**
|
|
92
|
-
*
|
|
67
|
+
* Get maximum allowed metric value
|
|
93
68
|
*/
|
|
94
|
-
|
|
69
|
+
get maxAllowedValue(): number;
|
|
70
|
+
private _createEmptyBuffer;
|
|
71
|
+
private _getWebVitalsCallbacks;
|
|
72
|
+
private _loadWebVitals;
|
|
73
|
+
private _startCapturing;
|
|
74
|
+
private _getCurrentUrl;
|
|
75
|
+
private _getCurrentPathname;
|
|
76
|
+
private _addToBuffer;
|
|
77
|
+
private _cleanAttribution;
|
|
78
|
+
private _getWindowId;
|
|
79
|
+
private _scheduleFlush;
|
|
80
|
+
private _flush;
|
|
95
81
|
}
|
package/dist/web-vitals.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-vitals.js","sources":["../../../../node_modules/.pnpm/web-vitals@3.5.2/node_modules/web-vitals/dist/web-vitals.js","../src/utils/globals.ts","../src/entrypoints/web-vitals.ts"],"sourcesContent":["var e,n,t,i,r,a=-1,o=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(a=n.timeStamp,e(n))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),i=\"navigate\";a>=0?i=\"back-forward-cache\":t&&(document.prerendering||u()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":t.type&&(i=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return i.observe(Object.assign({type:e,buffered:!0},t||{})),i}}catch(e){}},d=function(e,n,t,i){var r,a;return function(o){n.value>=0&&(o||i)&&((a=n.value-(r||0))||void 0===r)&&(r=n.value,n.delta=a,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){var n=function(n){\"pagehide\"!==n.type&&\"hidden\"!==document.visibilityState||e(n)};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},v=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),o((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},L=[1800,3e3],w=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"FCP\"),a=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(a.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=Math.max(e.startTime-u(),0),r.entries.push(e),t(!0)))}))}));a&&(t=d(e,r,L,n.reportAllChanges),o((function(i){r=f(\"FCP\"),t=d(e,r,L,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,t(!0)}))})))}))},b=[.1,.25],S=function(e,n){n=n||{},w(v((function(){var t,i=f(\"CLS\",0),r=0,a=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=a[0],t=a[a.length-1];r&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(r+=e.value,a.push(e)):(r=e.value,a=[e])}})),r>i.value&&(i.value=r,i.entries=a,t())},u=s(\"layout-shift\",c);u&&(t=d(e,i,b,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),o((function(){r=0,i=f(\"CLS\",0),t=d(e,i,b,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},I=new Date,P=function(i,r){e||(e=r,n=i,t=new Date,k(removeEventListener),F())},F=function(){if(n>=0&&n<t-I){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+n};i.forEach((function(e){e(r)})),i=[]}},M=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){P(e,n),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",t,A),removeEventListener(\"pointercancel\",i,A)};addEventListener(\"pointerup\",t,A),addEventListener(\"pointercancel\",i,A)}(n,e):P(n,e)}},k=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,M,A)}))},D=[100,300],x=function(t,r){r=r||{},C((function(){var a,c=E(),u=f(\"FID\"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),a(!0))},m=function(e){e.forEach(l)},h=s(\"first-input\",m);a=d(t,u,D,r.reportAllChanges),h&&p(v((function(){m(h.takeRecords()),h.disconnect()}))),h&&o((function(){var o;u=f(\"FID\"),a=d(t,u,D,r.reportAllChanges),i=[],n=-1,e=null,k(addEventListener),o=l,i.push(o),F()}))}))},B=0,R=1/0,H=0,N=function(e){e.forEach((function(e){e.interactionId&&(R=Math.min(R,e.interactionId),H=Math.max(H,e.interactionId),B=H?(H-R)/7+1:0)}))},O=function(){return r?B:performance.interactionCount||0},q=function(){\"interactionCount\"in performance||r||(r=s(\"event\",N,{type:\"event\",buffered:!0,durationThreshold:0}))},j=[200,500],_=0,z=function(){return O()-_},G=[],J={},K=function(e){var n=G[G.length-1],t=J[e.interactionId];if(t||G.length<10||e.duration>n.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var i={id:e.interactionId,latency:e.duration,entries:[e]};J[i.id]=i,G.push(i)}G.sort((function(e,n){return n.latency-e.latency})),G.splice(10).forEach((function(e){delete J[e.id]}))}},Q=function(e,n){n=n||{},C((function(){var t;q();var i,r=f(\"INP\"),a=function(e){e.forEach((function(e){(e.interactionId&&K(e),\"first-input\"===e.entryType)&&(!G.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&K(e))}));var n,t=(n=Math.min(G.length-1,Math.floor(z()/50)),G[n]);t&&t.latency!==r.value&&(r.value=t.latency,r.entries=t.entries,i())},c=s(\"event\",a,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});i=d(e,r,j,n.reportAllChanges),c&&(\"PerformanceEventTiming\"in window&&\"interactionId\"in PerformanceEventTiming.prototype&&c.observe({type:\"first-input\",buffered:!0}),p((function(){a(c.takeRecords()),r.value<0&&z()>0&&(r.value=0,r.entries=[]),i(!0)})),o((function(){G=[],_=O(),r=f(\"INP\"),i=d(e,r,j,n.reportAllChanges)})))}))},U=[2500,4e3],V={},W=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"LCP\"),a=function(e){var n=e[e.length-1];n&&n.startTime<i.firstHiddenTime&&(r.value=Math.max(n.startTime-u(),0),r.entries=[n],t())},c=s(\"largest-contentful-paint\",a);if(c){t=d(e,r,U,n.reportAllChanges);var m=v((function(){V[r.id]||(a(c.takeRecords()),c.disconnect(),V[r.id]=!0,t(!0))}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return setTimeout(m,0)}),!0)})),p(m),o((function(i){r=f(\"LCP\"),t=d(e,r,U,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,V[r.id]=!0,t(!0)}))}))}}))},X=[800,1800],Y=function e(n){document.prerendering?C((function(){return e(n)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},Z=function(e,n){n=n||{};var t=f(\"TTFB\"),i=d(e,t,X,n.reportAllChanges);Y((function(){var r=c();if(r){var a=r.responseStart;if(a<=0||a>performance.now())return;t.value=Math.max(a-u(),0),t.entries=[r],i(!0),o((function(){t=f(\"TTFB\",0),(i=d(e,t,X,n.reportAllChanges))(!0)}))}}))};export{b as CLSThresholds,L as FCPThresholds,D as FIDThresholds,j as INPThresholds,U as LCPThresholds,X as TTFBThresholds,S as getCLS,w as getFCP,x as getFID,Q as getINP,W as getLCP,Z as getTTFB,S as onCLS,w as onFCP,x as onFID,Q as onINP,W as onLCP,Z as onTTFB};\n",null,null],"names":["r","a","o","e","addEventListener","n","persisted","timeStamp","c","window","performance","getEntriesByType","u","activationStart","f","t","i","document","prerendering","wasDiscarded","type","replace","name","value","rating","delta","entries","id","concat","Date","now","Math","floor","random","navigationType","s","PerformanceObserver","supportedEntryTypes","includes","Promise","resolve","then","getEntries","observe","Object","assign","buffered","d","l","requestAnimationFrame","p","visibilityState","v","m","h","g","T","y","removeEventListener","E","setTimeout","firstHiddenTime","C","L","w","forEach","disconnect","startTime","max","push","reportAllChanges","b","B","R","H","N","interactionId","min","O","interactionCount","q","durationThreshold","j","_","z","G","J","K","length","duration","latency","sort","splice","U","V","X","Y","readyState","win","undefined","global","globalThis","navigator","location","fetch","XMLHttpRequest","AbortController","userAgent","assignableWindow","vtiltWebVitalsCallbacks","takeRecords","hadRecentInput","onFCP","entryType","some","PerformanceEventTiming","prototype","onTTFB","responseStart","__VTiltExtensions__","webVitalsCallbacks"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"web-vitals.js","sources":["../../../../node_modules/.pnpm/web-vitals@3.5.2/node_modules/web-vitals/dist/web-vitals.js","../src/utils/globals.ts","../src/entrypoints/web-vitals.ts"],"sourcesContent":["var e,n,t,i,r,a=-1,o=function(e){addEventListener(\"pageshow\",(function(n){n.persisted&&(a=n.timeStamp,e(n))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),i=\"navigate\";a>=0?i=\"back-forward-cache\":t&&(document.prerendering||u()>0?i=\"prerender\":document.wasDiscarded?i=\"restore\":t.type&&(i=t.type.replace(/_/g,\"-\")));return{name:e,value:void 0===n?-1:n,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return i.observe(Object.assign({type:e,buffered:!0},t||{})),i}}catch(e){}},d=function(e,n,t,i){var r,a;return function(o){n.value>=0&&(o||i)&&((a=n.value-(r||0))||void 0===r)&&(r=n.value,n.delta=a,n.rating=function(e,n){return e>n[1]?\"poor\":e>n[0]?\"needs-improvement\":\"good\"}(n.value,t),e(n))}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},p=function(e){var n=function(n){\"pagehide\"!==n.type&&\"hidden\"!==document.visibilityState||e(n)};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},v=function(e){var n=!1;return function(t){n||(e(t),n=!0)}},m=-1,h=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){\"hidden\"===document.visibilityState&&m>-1&&(m=\"visibilitychange\"===e.type?e.timeStamp:0,T())},y=function(){addEventListener(\"visibilitychange\",g,!0),addEventListener(\"prerenderingchange\",g,!0)},T=function(){removeEventListener(\"visibilitychange\",g,!0),removeEventListener(\"prerenderingchange\",g,!0)},E=function(){return m<0&&(m=h(),y(),o((function(){setTimeout((function(){m=h(),y()}),0)}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e()}),!0):e()},L=[1800,3e3],w=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"FCP\"),a=s(\"paint\",(function(e){e.forEach((function(e){\"first-contentful-paint\"===e.name&&(a.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=Math.max(e.startTime-u(),0),r.entries.push(e),t(!0)))}))}));a&&(t=d(e,r,L,n.reportAllChanges),o((function(i){r=f(\"FCP\"),t=d(e,r,L,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,t(!0)}))})))}))},b=[.1,.25],S=function(e,n){n=n||{},w(v((function(){var t,i=f(\"CLS\",0),r=0,a=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=a[0],t=a[a.length-1];r&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(r+=e.value,a.push(e)):(r=e.value,a=[e])}})),r>i.value&&(i.value=r,i.entries=a,t())},u=s(\"layout-shift\",c);u&&(t=d(e,i,b,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0)})),o((function(){r=0,i=f(\"CLS\",0),t=d(e,i,b,n.reportAllChanges),l((function(){return t()}))})),setTimeout(t,0))})))},A={passive:!0,capture:!0},I=new Date,P=function(i,r){e||(e=r,n=i,t=new Date,k(removeEventListener),F())},F=function(){if(n>=0&&n<t-I){var r={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+n};i.forEach((function(e){e(r)})),i=[]}},M=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,n){var t=function(){P(e,n),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",t,A),removeEventListener(\"pointercancel\",i,A)};addEventListener(\"pointerup\",t,A),addEventListener(\"pointercancel\",i,A)}(n,e):P(n,e)}},k=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(n){return e(n,M,A)}))},D=[100,300],x=function(t,r){r=r||{},C((function(){var a,c=E(),u=f(\"FID\"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),a(!0))},m=function(e){e.forEach(l)},h=s(\"first-input\",m);a=d(t,u,D,r.reportAllChanges),h&&p(v((function(){m(h.takeRecords()),h.disconnect()}))),h&&o((function(){var o;u=f(\"FID\"),a=d(t,u,D,r.reportAllChanges),i=[],n=-1,e=null,k(addEventListener),o=l,i.push(o),F()}))}))},B=0,R=1/0,H=0,N=function(e){e.forEach((function(e){e.interactionId&&(R=Math.min(R,e.interactionId),H=Math.max(H,e.interactionId),B=H?(H-R)/7+1:0)}))},O=function(){return r?B:performance.interactionCount||0},q=function(){\"interactionCount\"in performance||r||(r=s(\"event\",N,{type:\"event\",buffered:!0,durationThreshold:0}))},j=[200,500],_=0,z=function(){return O()-_},G=[],J={},K=function(e){var n=G[G.length-1],t=J[e.interactionId];if(t||G.length<10||e.duration>n.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var i={id:e.interactionId,latency:e.duration,entries:[e]};J[i.id]=i,G.push(i)}G.sort((function(e,n){return n.latency-e.latency})),G.splice(10).forEach((function(e){delete J[e.id]}))}},Q=function(e,n){n=n||{},C((function(){var t;q();var i,r=f(\"INP\"),a=function(e){e.forEach((function(e){(e.interactionId&&K(e),\"first-input\"===e.entryType)&&(!G.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&K(e))}));var n,t=(n=Math.min(G.length-1,Math.floor(z()/50)),G[n]);t&&t.latency!==r.value&&(r.value=t.latency,r.entries=t.entries,i())},c=s(\"event\",a,{durationThreshold:null!==(t=n.durationThreshold)&&void 0!==t?t:40});i=d(e,r,j,n.reportAllChanges),c&&(\"PerformanceEventTiming\"in window&&\"interactionId\"in PerformanceEventTiming.prototype&&c.observe({type:\"first-input\",buffered:!0}),p((function(){a(c.takeRecords()),r.value<0&&z()>0&&(r.value=0,r.entries=[]),i(!0)})),o((function(){G=[],_=O(),r=f(\"INP\"),i=d(e,r,j,n.reportAllChanges)})))}))},U=[2500,4e3],V={},W=function(e,n){n=n||{},C((function(){var t,i=E(),r=f(\"LCP\"),a=function(e){var n=e[e.length-1];n&&n.startTime<i.firstHiddenTime&&(r.value=Math.max(n.startTime-u(),0),r.entries=[n],t())},c=s(\"largest-contentful-paint\",a);if(c){t=d(e,r,U,n.reportAllChanges);var m=v((function(){V[r.id]||(a(c.takeRecords()),c.disconnect(),V[r.id]=!0,t(!0))}));[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,(function(){return setTimeout(m,0)}),!0)})),p(m),o((function(i){r=f(\"LCP\"),t=d(e,r,U,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,V[r.id]=!0,t(!0)}))}))}}))},X=[800,1800],Y=function e(n){document.prerendering?C((function(){return e(n)})):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},Z=function(e,n){n=n||{};var t=f(\"TTFB\"),i=d(e,t,X,n.reportAllChanges);Y((function(){var r=c();if(r){var a=r.responseStart;if(a<=0||a>performance.now())return;t.value=Math.max(a-u(),0),t.entries=[r],i(!0),o((function(){t=f(\"TTFB\",0),(i=d(e,t,X,n.reportAllChanges))(!0)}))}}))};export{b as CLSThresholds,L as FCPThresholds,D as FIDThresholds,j as INPThresholds,U as LCPThresholds,X as TTFBThresholds,S as getCLS,w as getFCP,x as getFID,Q as getINP,W as getLCP,Z as getTTFB,S as onCLS,w as onFCP,x as onFID,Q as onINP,W as onLCP,Z as onTTFB};\n",null,null],"names":["r","a","o","e","addEventListener","n","persisted","timeStamp","c","window","performance","getEntriesByType","u","activationStart","f","t","i","document","prerendering","wasDiscarded","type","replace","name","value","rating","delta","entries","id","concat","Date","now","Math","floor","random","navigationType","s","PerformanceObserver","supportedEntryTypes","includes","Promise","resolve","then","getEntries","observe","Object","assign","buffered","d","l","requestAnimationFrame","p","visibilityState","v","m","h","g","T","y","removeEventListener","E","setTimeout","firstHiddenTime","C","L","w","forEach","disconnect","startTime","max","push","reportAllChanges","b","B","R","H","N","interactionId","min","O","interactionCount","q","durationThreshold","j","_","z","G","J","K","length","duration","latency","sort","splice","U","V","X","Y","readyState","win","undefined","global","globalThis","navigator","location","fetch","XMLHttpRequest","AbortController","userAgent","assignableWindow","vtiltWebVitalsCallbacks","takeRecords","hadRecentInput","onFCP","entryType","some","PerformanceEventTiming","prototype","onTTFB","responseStart","__VTiltExtensions__","webVitalsCallbacks"],"mappings":"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","x_google_ignoreList":[0]}
|