diff --git a/src/bake/DevServer.zig b/src/bake/DevServer.zig index 2a6bb81673..609596706a 100644 --- a/src/bake/DevServer.zig +++ b/src/bake/DevServer.zig @@ -6843,7 +6843,7 @@ pub fn putOrOverwriteAsset( ) !void { dev.graph_safety_lock.lock(); defer dev.graph_safety_lock.unlock(); - _ = try dev.assets.replacePath(path.text, contents, &.byExtension(path.name.extWithoutLeadingDot()), content_hash); + _ = try dev.assets.replacePath(path.text, contents, &MimeType.byExtension(path.name.extWithoutLeadingDot()), content_hash); } /// Storage for hashed assets on `/_bun/asset/{hash}.ext` diff --git a/src/bun.js/webcore/blob.zig b/src/bun.js/webcore/blob.zig index c199000e32..757d83bd22 100644 --- a/src/bun.js/webcore/blob.zig +++ b/src/bun.js/webcore/blob.zig @@ -14,7 +14,6 @@ const SystemError = JSC.SystemError; const Output = bun.Output; const MutableString = bun.MutableString; const strings = bun.strings; -const string = bun.string; const default_allocator = bun.default_allocator; const FeatureFlags = bun.FeatureFlags; const ArrayBuffer = @import("../base.zig").ArrayBuffer; @@ -83,7 +82,7 @@ pub const Blob = struct { /// If the blob is contained in Response or Request, this must be null allocator: ?std.mem.Allocator = null, store: ?*Store = null, - content_type: string = "", + content_type:[]const u8 = "", content_type_allocated: bool = false, content_type_was_set: bool = false, @@ -568,7 +567,7 @@ pub const Blob = struct { }; search_params.toString(URLSearchParamsConverter, &converter, URLSearchParamsConverter.convert); var store = Blob.Store.init(converter.buf, allocator); - store.mime_type = MimeType.all.@"application/x-www-form-urlencoded"; + store.mime_type = MimeType.form_urlencoded; var blob = Blob.initWithStore(store, globalThis); blob.content_type = store.mime_type.value; @@ -618,7 +617,7 @@ pub const Blob = struct { return blob; } - pub fn contentType(this: *const Blob) string { + pub fn contentType(this: *const Blob)[]const u8 { return this.content_type; } @@ -4609,7 +4608,7 @@ pub const Blob = struct { } } - var content_type: string = ""; + var content_type:[]const u8 = ""; var content_type_was_allocated = false; if (args_iter.nextEat()) |content_type_| { inner: { diff --git a/src/http/mime_type.zig b/src/http/mime_type.zig index 8cf8b1ac88..89f7365273 100644 --- a/src/http/mime_type.zig +++ b/src/http/mime_type.zig @@ -1,21 +1,13 @@ const std = @import("std"); const bun = @import("root").bun; -const string = bun.string; -const Output = bun.Output; -const Global = bun.Global; -const Environment = bun.Environment; const strings = bun.strings; -const MutableString = bun.MutableString; -const stringZ = bun.stringZ; -const default_allocator = bun.default_allocator; const C = bun.C; -const Loader = @import("../options.zig").Loader; const ComptimeStringMap = bun.ComptimeStringMap; const MimeType = @This(); -value: string, +value: []const u8, category: Category, pub const Map = bun.StringHashMap(MimeType); @@ -89,28 +81,19 @@ pub const Category = enum { } }; -pub const none = MimeType.initComptime("", .none); -pub const other = MimeType.initComptime("application/octet-stream", .other); -pub const css = MimeType.initComptime("text/css;charset=utf-8", .css); -pub const javascript = MimeType.initComptime("text/javascript;charset=utf-8", .javascript); -pub const ico = MimeType.initComptime("image/vnd.microsoft.icon", .image); -pub const html = MimeType.initComptime("text/html;charset=utf-8", .html); -// we transpile json to javascript so that it is importable without import assertions. -pub const json = MimeType.initComptime("application/json;charset=utf-8", .json); +pub const none = MimeType{ .value = "", .category = .none }; +pub const other = MimeType{ .value = "application/octet-stream", .category = .other }; +pub const css = MimeType{ .value = "text/css;charset=utf-8", .category = .css }; +pub const javascript = MimeType{ .value = "text/javascript;charset=utf-8", .category = .javascript }; +pub const ico = MimeType{ .value = "image/vnd.microsoft.icon", .category = .image }; +pub const html = MimeType{ .value = "text/html;charset=utf-8", .category = .html }; +pub const json = MimeType{ .value = "application/json;charset=utf-8", .category = .json }; pub const transpiled_json = javascript; -pub const text = MimeType.initComptime("text/plain;charset=utf-8", .html); -pub const wasm = MimeType.initComptime( - "application/wasm", - .wasm, -); -fn initComptime(comptime str: string, t: Category) MimeType { - return MimeType{ - .value = str, - .category = t, - }; -} +pub const text = MimeType{ .value = "text/plain;charset=utf-8", .category = .html }; // why?? +pub const wasm = MimeType{ .value = "application/wasm", .category = .wasm }; +pub const form_urlencoded = MimeType{ .value = "application/x-www-form-urlencoded", .category = .application }; -pub fn init(str_: string, allocator: ?std.mem.Allocator, allocated: ?*bool) MimeType { +pub fn init(str_: []const u8, allocator: ?std.mem.Allocator, allocated: ?*bool) MimeType { var str = str_; if (std.mem.indexOfScalar(u8, str, '/')) |slash| { const category_ = str[0..slash]; @@ -216,31 +199,16 @@ pub fn init(str_: string, allocator: ?std.mem.Allocator, allocated: ?*bool) Mime }; } -// TODO: improve this -pub fn byLoader(loader: Loader, ext: string) MimeType { - switch (loader) { - .tsx, .ts, .js, .jsx, .json => { - return javascript; - }, - .css => { - return css; - }, - else => { - return byExtension(ext); - }, - } -} - -pub fn byExtension(ext_without_leading_dot: string) MimeType { +pub fn byExtension(ext_without_leading_dot: []const u8) MimeType { return byExtensionNoDefault(ext_without_leading_dot) orelse MimeType.other; } -pub fn byExtensionNoDefault(ext_without_leading_dot: string) ?MimeType { +pub fn byExtensionNoDefault(ext_without_leading_dot: []const u8) ?MimeType { return extensions.get(ext_without_leading_dot); } // this is partially auto-generated -pub const all = struct { +const all = struct { pub const @"application/webassembly" = wasm; pub const @"application/1d-interleaved-parityfec": MimeType = MimeType{ .category = .application, .value = "application/1d-interleaved-parityfec" }; pub const @"application/3gpdash-qoe-report+xml": MimeType = MimeType{ .category = .application, .value = "application/3gpdash-qoe-report+xml" }; @@ -1879,7 +1847,7 @@ pub const all = struct { pub const @"application/x-virtualbox-vmdk": MimeType = MimeType{ .category = .application, .value = "application/x-virtualbox-vmdk" }; pub const @"application/x-wais-source": MimeType = MimeType{ .category = .application, .value = "application/x-wais-source" }; pub const @"application/x-web-app-manifest+json": MimeType = MimeType{ .category = .application, .value = "application/x-web-app-manifest+json" }; - pub const @"application/x-www-form-urlencoded": MimeType = MimeType{ .category = .application, .value = "application/x-www-form-urlencoded;charset=UTF-8" }; + pub const @"application/x-www-form-urlencoded": MimeType = form_urlencoded; pub const @"application/x-x509-ca-cert": MimeType = MimeType{ .category = .application, .value = "application/x-x509-ca-cert" }; pub const @"application/x-x509-ca-ra-cert": MimeType = MimeType{ .category = .application, .value = "application/x-x509-ca-ra-cert" }; pub const @"application/x-x509-next-ca-cert": MimeType = MimeType{ .category = .application, .value = "application/x-x509-next-ca-cert" }; @@ -2537,7 +2505,7 @@ pub fn byName(name: []const u8) MimeType { pub fn deinit(mimeType: MimeType, allocator: std.mem.Allocator) void { allocator.free(mimeType.value); } -pub const extensions = ComptimeStringMap(MimeType, .{ +const extensions = ComptimeStringMap(MimeType, .{ .{ "123", all.@"application/vnd.lotus-1-2-3" }, .{ "1km", all.@"application/vnd.1000minds.decision-model+xml" }, .{ "3dml", all.@"text/vnd.in3d.3dml" }, @@ -3734,13 +3702,13 @@ pub const extensions = ComptimeStringMap(MimeType, .{ .{ "zmm", all.@"application/vnd.handheld-entertainment+xml" }, }); -const IMAGES_HEADERS = .{ - .{ [_]u8{ 0x42, 0x4d }, all.@"image/bmp" }, - .{ [_]u8{ 0xff, 0xd8, 0xff }, all.@"image/jpeg" }, - .{ [_]u8{ 0x49, 0x49, 0x2a, 0x00 }, all.@"image/tiff" }, - .{ [_]u8{ 0x4d, 0x4d, 0x00, 0x2a }, all.@"image/tiff" }, - .{ [_]u8{ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61 }, all.@"image/gif" }, - .{ [_]u8{ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a }, all.@"image/png" }, +const IMAGES_HEADERS = &[_]struct { []const u8, MimeType }{ + .{ &[_]u8{ 0x42, 0x4d }, all.@"image/bmp" }, + .{ &[_]u8{ 0xff, 0xd8, 0xff }, all.@"image/jpeg" }, + .{ &[_]u8{ 0x49, 0x49, 0x2a, 0x00 }, all.@"image/tiff" }, + .{ &[_]u8{ 0x4d, 0x4d, 0x00, 0x2a }, all.@"image/tiff" }, + .{ &[_]u8{ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61 }, all.@"image/gif" }, + .{ &[_]u8{ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a }, all.@"image/png" }, }; pub fn sniff(bytes: []const u8) ?MimeType { if (bytes.len < 2) return null; diff --git a/src/output.zig b/src/output.zig index 6dce0e33bf..b9b3e429ab 100644 --- a/src/output.zig +++ b/src/output.zig @@ -870,7 +870,7 @@ pub const color_map = ComptimeStringMap(string, .{ const RESET: string = "\x1b[0m"; pub fn prettyFmt(comptime fmt: string, comptime is_enabled: bool) [:0]const u8 { if (comptime bun.fast_debug_build_mode) - return fmt; + return fmt ++ "\x00"; comptime var new_fmt: [fmt.len * 4]u8 = undefined; comptime var new_fmt_i: usize = 0;