@@ -17,60 +17,16 @@ export default {
17
17
}
18
18
} ;
19
19
20
- function enableAnalytics ( router ) {
20
+ async function enableAnalytics ( router ) {
21
21
if ( typeof location === "undefined" || location . origin !== "https://observablehq.com" ) return ;
22
-
22
+ const { pageLoad , routeChanged } = await import ( "https://events.observablehq.com/client.js" ) ;
23
23
let pageLoaded ;
24
- let queue : any [ ] | null = [ ] ;
25
- let user ;
26
-
27
24
watch ( router . route , ( ) => {
28
25
if ( pageLoaded ) {
29
- emit ( {
30
- type : "routeChanged" ,
31
- event_version : 2 ,
32
- data : { } ,
33
- tags : { }
34
- } ) ;
26
+ routeChanged ( ) ;
35
27
} else {
36
- emit ( {
37
- type : "pageLoad" ,
38
- event_version : 1 ,
39
- data : { referrer : document . referrer . replace ( / \? .* / , "" ) } ,
40
- tags : { }
41
- } ) ;
28
+ pageLoad ( ) ;
42
29
pageLoaded = true ;
43
30
}
44
31
} ) ;
45
-
46
- fetch ( "https://api.observablehq.com/user" , { credentials : "include" } )
47
- . then ( ( response ) => ( response . ok ? response . json ( ) : null ) )
48
- . then (
49
- ( u ) => ( user = u ) ,
50
- ( ) => ( user = null )
51
- )
52
- . then ( ( ) => ( sendEvents ( queue ) , ( queue = null ) ) ) ;
53
-
54
- function emit ( event ) {
55
- event . time = new Date ( ) . toISOString ( ) ;
56
- event . location = `${ location . origin } ${ location . pathname } ${ location . search } ` ; // drop hash
57
- if ( queue ) queue . push ( event ) ;
58
- else sendEvents ( [ event ] ) ;
59
- }
60
-
61
- function sendEvents ( events ) {
62
- if ( ! events . length ) return ;
63
- navigator . sendBeacon (
64
- "https://events.observablehq.com/beacon-events" ,
65
- JSON . stringify ( {
66
- events : events . map ( ( event ) => ( {
67
- ...event ,
68
- release : null ,
69
- user_id : user ?. id ?? null ,
70
- user_agent : navigator . userAgent
71
- } ) ) ,
72
- send_time : new Date ( ) . toISOString ( )
73
- } )
74
- ) ;
75
- }
76
- }
32
+ }
0 commit comments