diff options
Diffstat (limited to 'src/http.zig')
-rw-r--r-- | src/http.zig | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/http.zig b/src/http.zig index 7d47b82cd..a9b0c14a3 100644 --- a/src/http.zig +++ b/src/http.zig @@ -21,6 +21,7 @@ const OutputFile = Options.OutputFile; const DotEnv = @import("./env_loader.zig"); const mimalloc = @import("./allocators/mimalloc.zig"); const MacroMap = @import("./resolver/package_json.zig").MacroMap; +const Analytics = @import("./analytics/analytics_thread.zig"); pub fn constStrToU8(s: string) []u8 { return @intToPtr([*]u8, @ptrToInt(s.ptr))[0..s.len]; } @@ -544,6 +545,14 @@ pub const RequestContext = struct { return ctx; } + pub inline fn isBrowserNavigation(req: *RequestContext) bool { + if (req.header("Sec-Fetch-Mode")) |mode| { + return strings.eqlComptime(mode.value, "navigate"); + } + + return false; + } + pub fn sendNotFound(req: *RequestContext) !void { std.debug.assert(!req.has_called_done); @@ -2686,6 +2695,7 @@ pub const Server = struct { server.detectTSConfig(); try server.initWatcher(); did_init = true; + Analytics.enqueue(Analytics.EventName.http_start); server.handleConnection(&conn, comptime features); } @@ -2751,6 +2761,9 @@ pub const Server = struct { var req_ctx = &req_ctx_; req_ctx.timer.reset(); + const is_navigation_request = req_ctx_.isBrowserNavigation(); + defer if (is_navigation_request) Analytics.enqueue(Analytics.EventName.http_build); + if (req_ctx.url.needs_redirect) { req_ctx.handleRedirect(req_ctx.url.path) catch |err| { Output.prettyErrorln("<r>[<red>{s}<r>] - <b>{s}<r>: {s}", .{ @errorName(err), req.method, req.path }); |