diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/http.zig | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/http.zig b/src/http.zig index a732e3fec..1d08a334d 100644 --- a/src/http.zig +++ b/src/http.zig @@ -2635,6 +2635,10 @@ pub const RequestContext = struct { return; } + if (strings.eqlComptime(path, "info")) { + return try ctx.sendBunInfoJSON(); + } + if (strings.eqlComptime(path, "reactfsh-v0.11.0")) { const buffer = @embedFile("react-refresh.js"); ctx.appendHeader("Content-Type", MimeType.javascript.value); @@ -2661,6 +2665,53 @@ pub const RequestContext = struct { return; } + fn sendBunInfoJSON(ctx: *RequestContext) anyerror!void { + const Info = struct { + bun_version: string, + platform: Analytics.GenerateHeader.GeneratePlatform.Platform = undefined, + framework: string = "", + framework_version: string = "", + }; + var info = Info{ + .bun_version = Global.package_json_version, + .platform = Analytics.GenerateHeader.GeneratePlatform.forOS(), + }; + + if (ctx.bundler.options.framework) |framework| { + info.framework = framework.package; + info.framework_version = framework.version; + } + + var expr = try JSON.toAST(ctx.allocator, Info, info); + defer ctx.bundler.resetStore(); + + var buffer_writer = try js_printer.BufferWriter.init(default_allocator); + + var writer = js_printer.BufferPrinter.init(buffer_writer); + defer writer.ctx.buffer.deinit(); + var source = logger.Source.initEmptyFile("info.json"); + _ = try js_printer.printJSON(*js_printer.BufferPrinter, &writer, expr, &source); + const buffer = writer.ctx.written; + + ctx.appendHeader("Content-Type", MimeType.json.value); + ctx.appendHeader("Cache-Control", "public, max-age=3600"); + ctx.appendHeader("Age", "0"); + if (FeatureFlags.strong_etags_for_built_files) { + const did_send = ctx.writeETag(buffer) catch false; + if (did_send) return; + } + + if (buffer.len == 0) { + return try ctx.sendNoContent(); + } + const send_body = ctx.method == .GET; + defer ctx.done(); + try ctx.writeStatus(200); + try ctx.prepareToSendBody(buffer.len, false); + if (!send_body) return; + _ = try ctx.writeSocket(buffer, SOCKET_FLAGS); + } + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-Fetch-Dest pub fn isScriptOrStyleRequest(ctx: *RequestContext) bool { const header_ = ctx.header("Sec-Fetch-Dest") orelse return false; |