diff options
| -rw-r--r-- | examples/bun/ssl.ts | 15 | ||||
| -rw-r--r-- | src/bundler/entry_points.zig | 12 | ||||
| -rw-r--r-- | src/bunfig.zig | 12 | ||||
| -rw-r--r-- | src/comptime_string_map.zig | 8 | ||||
| -rw-r--r-- | src/deps/uws.zig | 4 | ||||
| -rw-r--r-- | src/http/mime_type.zig | 2453 | ||||
| -rw-r--r-- | src/http/websocket.zig | 4 | ||||
| -rw-r--r-- | src/javascript/jsc/api/bun.zig | 39 | ||||
| -rw-r--r-- | src/javascript/jsc/api/html_rewriter.zig | 31 | ||||
| -rw-r--r-- | src/javascript/jsc/api/server.zig | 389 | ||||
| -rw-r--r-- | src/javascript/jsc/bindings/bindings.zig | 7 | ||||
| -rw-r--r-- | src/javascript/jsc/webcore/response.zig | 211 | ||||
| -rw-r--r-- | src/jsc.zig | 3 | ||||
| -rw-r--r-- | src/runtime.version | 2 | ||||
| -rw-r--r-- | src/runtime/hmr.ts | 20 | ||||
| -rw-r--r-- | types/src/bun.d.ts | 544 | 
16 files changed, 2172 insertions, 1582 deletions
| diff --git a/examples/bun/ssl.ts b/examples/bun/ssl.ts new file mode 100644 index 000000000..c3e73bd84 --- /dev/null +++ b/examples/bun/ssl.ts @@ -0,0 +1,15 @@ +import { resolve } from "path"; + +const development = process.env.NODE_ENV !== "production"; +export default { +  fetch(req: Request) { +    Bun.file; +    return new Response(Bun.file(resolve(req.url.substring(1)))); +  }, + +  //   hostname: "0.0.0.0", +  //   port: parseInt(process.env.PORT || "443", 10), +  //   keyFile: process.env.SSL_KEY_FILE || "./key.pem", +  //   certFile: process.env.SSL_CERTIFICATE_FILE || "./cert.pem", +  development, +} as Bun.Serve; diff --git a/src/bundler/entry_points.zig b/src/bundler/entry_points.zig index 252cfd9b1..6c9e7a278 100644 --- a/src/bundler/entry_points.zig +++ b/src/bundler/entry_points.zig @@ -189,8 +189,16 @@ pub const ServerEntryPoint = struct {              \\if ('default' in start && "__internalIsCommonJSNamespace" in globalThis && __internalIsCommonJSNamespace(start)) {{              \\  entryNamespace = start.default();              \\}} -            \\if(typeof entryNamespace?.default?.fetch === 'function') Bun.startServer(entryNamespace.default.fetch); -            \\if(typeof entryNamespace?.default?.cli === 'function') Bun.startServer(entryNamespace.default.cli); +            \\if (typeof entryNamespace?.then === 'function') {{ +            \\   entryNamespace = entryNamespace.then((entryNamespace) => {{ +            \\      if(typeof entryNamespace?.default?.fetch === 'function')  {{ +            \\        Bun.serve(entryNamespace.default); +            \\      }} +            \\   }}, reportError); +            \\}} else if (typeof entryNamespace?.default?.fetch === 'function') {{ +            \\   Bun.serve(entryNamespace); +            \\}} +            \\          ,              .{                  dir_to_use, diff --git a/src/bunfig.zig b/src/bunfig.zig index 4298a2b26..2592f91db 100644 --- a/src/bunfig.zig +++ b/src/bunfig.zig @@ -148,6 +148,18 @@ pub const Bunfig = struct {                  this.bunfig.origin = try expr.data.e_string.string(allocator);              } +            if (comptime cmd == .RunCommand or cmd == .AutoCommand) { +                if (json.get("serve")) |expr| { +                    if (expr.get("port")) |port| { +                        try this.expect(port, .e_number); +                        this.bunfig.port = port.data.e_number.toU16(); +                        if (this.bunfig.port.? == 0) { +                            this.bunfig.port = 3000; +                        } +                    } +                } +            } +              if (comptime cmd == .DevCommand or cmd == .AutoCommand) {                  if (json.get("dev")) |expr| {                      if (expr.get("disableBunJS")) |disable| { diff --git a/src/comptime_string_map.zig b/src/comptime_string_map.zig index bae2fce8a..b4cc733e1 100644 --- a/src/comptime_string_map.zig +++ b/src/comptime_string_map.zig @@ -16,7 +16,7 @@ pub fn ComptimeStringMapWithKeyType(comptime KeyType: type, comptime V: type, co      };      const precomputed = comptime blk: { -        @setEvalBranchQuota(2000); +        @setEvalBranchQuota(99999);          var sorted_kvs: [kvs_list.len]KV = undefined;          const lenAsc = (struct { @@ -47,7 +47,10 @@ pub fn ComptimeStringMapWithKeyType(comptime KeyType: type, comptime V: type, co          var len_indexes: [max_len + 1]usize = undefined;          var len: usize = 0;          var i: usize = 0; +          while (len <= max_len) : (len += 1) { +            @setEvalBranchQuota(99999); +              // find the first keyword len == len              while (len > sorted_kvs[i].key.len) {                  i += 1; @@ -73,7 +76,10 @@ pub fn ComptimeStringMapWithKeyType(comptime KeyType: type, comptime V: type, co          pub fn getWithLength(str: []const KeyType, comptime len: usize) ?V {              const end = comptime brk: {                  var i = len_indexes[len]; +                @setEvalBranchQuota(99999); +                  while (i < kvs.len and kvs[i].key.len == len) : (i += 1) {} +                  break :brk i;              }; diff --git a/src/deps/uws.zig b/src/deps/uws.zig index 2769373f5..4fb544136 100644 --- a/src/deps/uws.zig +++ b/src/deps/uws.zig @@ -396,10 +396,10 @@ pub fn NewApp(comptime ssl: bool) type {          pub fn getNativeHandle(app: *ThisApp) ?*anyopaque {              return uws_get_native_handle(ssl_flag, app);          } -        pub fn removeServerName(app: *ThisApp, hostname_pattern: [:0]const u8) void { +        pub fn removeServerName(app: *ThisApp, hostname_pattern: [*:0]const u8) void {              return uws_remove_server_name(ssl_flag, @ptrCast(*uws_app_t, app), hostname_pattern);          } -        pub fn addServerName(app: *ThisApp, hostname_pattern: [:0]const u8) void { +        pub fn addServerName(app: *ThisApp, hostname_pattern: [*:0]const u8) void {              return uws_add_server_name(ssl_flag, @ptrCast(*uws_app_t, app), hostname_pattern);          }          pub fn addServerNameWithOptions(app: *ThisApp, hostname_pattern: [:0]const u8, opts: us_socket_context_options_t) void { diff --git a/src/http/mime_type.zig b/src/http/mime_type.zig index 3d7c16c85..5818c88ea 100644 --- a/src/http/mime_type.zig +++ b/src/http/mime_type.zig @@ -41,9 +41,11 @@ pub const Category = enum {      video,      javascript,      wasm, +    application, +    model, +    message,      @"x-conference",      @"x-shader", -    @"x-shader",      @"chemical",      @"multipart", @@ -162,11 +164,16 @@ pub fn byLoader(loader: Loader, ext: string) MimeType {  }  pub fn byExtension(ext: string) MimeType { -    return all.extensions.get(ext) orelse MimeType.other; +    return byExtensionNoDefault(ext) orelse MimeType.other; +} + +pub fn byExtensionNoDefault(ext: string) ?MimeType { +    return extensions.get(ext);  }  // this is partially auto-generated  pub 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" };      pub const @"application/3gpp-ims+xml": MimeType = MimeType{ .category = .@"application", .value = "application/3gpp-ims+xml" }; @@ -2455,1231 +2462,1219 @@ pub const all = struct {  };  pub 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" }, -    .{ .@"3ds", all.@"image/x-3ds" }, -    .{ .@"3g2", all.@"video/3gpp2" }, -    .{ .@"3gp", all.@"video/3gpp" }, -    .{ .@"3gpp", all.@"audio/3gpp" }, -    .{ .@"3gpp", all.@"video/3gpp" }, -    .{ .@"3mf", all.@"model/3mf" }, -    .{ .@"7z", all.@"application/x-7z-compressed" }, -    .{ .@"aab", all.@"application/x-authorware-bin" }, -    .{ .@"aac", all.@"audio/x-aac" }, -    .{ .@"aam", all.@"application/x-authorware-map" }, -    .{ .@"aas", all.@"application/x-authorware-seg" }, -    .{ .@"abw", all.@"application/x-abiword" }, -    .{ .@"ac", all.@"application/pkix-attr-cert" }, -    .{ .@"ac", all.@"application/vnd.nokia.n-gage.ac+xml" }, -    .{ .@"acc", all.@"application/vnd.americandynamics.acc" }, -    .{ .@"ace", all.@"application/x-ace-compressed" }, -    .{ .@"acu", all.@"application/vnd.acucobol" }, -    .{ .@"acutc", all.@"application/vnd.acucorp" }, -    .{ .@"adp", all.@"audio/adpcm" }, -    .{ .@"aep", all.@"application/vnd.audiograph" }, -    .{ .@"afm", all.@"application/x-font-type1" }, -    .{ .@"afp", all.@"application/vnd.ibm.modcap" }, -    .{ .@"age", all.@"application/vnd.age" }, -    .{ .@"ahead", all.@"application/vnd.ahead.space" }, -    .{ .@"ai", all.@"application/postscript" }, -    .{ .@"aif", all.@"audio/x-aiff" }, -    .{ .@"aifc", all.@"audio/x-aiff" }, -    .{ .@"aiff", all.@"audio/x-aiff" }, -    .{ .@"air", all.@"application/vnd.adobe.air-application-installer-package+zip" }, -    .{ .@"ait", all.@"application/vnd.dvb.ait" }, -    .{ .@"ami", all.@"application/vnd.amiga.ami" }, -    .{ .@"amr", all.@"audio/amr" }, -    .{ .@"apk", all.@"application/vnd.android.package-archive" }, -    .{ .@"apng", all.@"image/apng" }, -    .{ .@"appcache", all.@"text/cache-manifest" }, -    .{ .@"application", all.@"application/x-ms-application" }, -    .{ .@"apr", all.@"application/vnd.lotus-approach" }, -    .{ .@"arc", all.@"application/x-freearc" }, -    .{ .@"arj", all.@"application/x-arj" }, -    .{ .@"asc", all.@"application/pgp-keys" }, -    .{ .@"asc", all.@"application/pgp-signature" }, -    .{ .@"asf", all.@"video/x-ms-asf" }, -    .{ .@"asm", all.@"text/x-asm" }, -    .{ .@"aso", all.@"application/vnd.accpac.simply.aso" }, -    .{ .@"asx", all.@"video/x-ms-asf" }, -    .{ .@"atc", all.@"application/vnd.acucorp" }, -    .{ .@"atom", all.@"application/atom+xml" }, -    .{ .@"atomcat", all.@"application/atomcat+xml" }, -    .{ .@"atomdeleted", all.@"application/atomdeleted+xml" }, -    .{ .@"atomsvc", all.@"application/atomsvc+xml" }, -    .{ .@"atx", all.@"application/vnd.antix.game-component" }, -    .{ .@"au", all.@"audio/basic" }, -    .{ .@"avci", all.@"image/avci" }, -    .{ .@"avcs", all.@"image/avcs" }, -    .{ .@"avi", all.@"video/x-msvideo" }, -    .{ .@"avif", all.@"image/avif" }, -    .{ .@"aw", all.@"application/applixware" }, -    .{ .@"azf", all.@"application/vnd.airzip.filesecure.azf" }, -    .{ .@"azs", all.@"application/vnd.airzip.filesecure.azs" }, -    .{ .@"azv", all.@"image/vnd.airzip.accelerator.azv" }, -    .{ .@"azw", all.@"application/vnd.amazon.ebook" }, -    .{ .@"b16", all.@"image/vnd.pco.b16" }, -    .{ .@"bat", all.@"application/x-msdownload" }, -    .{ .@"bcpio", all.@"application/x-bcpio" }, -    .{ .@"bdf", all.@"application/x-font-bdf" }, -    .{ .@"bdm", all.@"application/vnd.syncml.dm+wbxml" }, -    .{ .@"bdoc", all.@"application/bdoc" }, -    .{ .@"bdoc", all.@"application/x-bdoc" }, -    .{ .@"bed", all.@"application/vnd.realvnc.bed" }, -    .{ .@"bh2", all.@"application/vnd.fujitsu.oasysprs" }, -    .{ .@"bin", all.@"application/octet-stream" }, -    .{ .@"blb", all.@"application/x-blorb" }, -    .{ .@"blorb", all.@"application/x-blorb" }, -    .{ .@"bmi", all.@"application/vnd.bmi" }, -    .{ .@"bmml", all.@"application/vnd.balsamiq.bmml+xml" }, -    .{ .@"bmp", all.@"image/bmp" }, -    .{ .@"bmp", all.@"image/x-ms-bmp" }, -    .{ .@"book", all.@"application/vnd.framemaker" }, -    .{ .@"box", all.@"application/vnd.previewsystems.box" }, -    .{ .@"boz", all.@"application/x-bzip2" }, -    .{ .@"bpk", all.@"application/octet-stream" }, -    .{ .@"bsp", all.@"model/vnd.valve.source.compiled-map" }, -    .{ .@"btif", all.@"image/prs.btif" }, -    .{ .@"buffer", all.@"application/octet-stream" }, -    .{ .@"bz", all.@"application/x-bzip" }, -    .{ .@"bz2", all.@"application/x-bzip2" }, -    .{ .@"c", all.@"text/x-c" }, -    .{ .@"c11amc", all.@"application/vnd.cluetrust.cartomobile-config" }, -    .{ .@"c11amz", all.@"application/vnd.cluetrust.cartomobile-config-pkg" }, -    .{ .@"c4d", all.@"application/vnd.clonk.c4group" }, -    .{ .@"c4f", all.@"application/vnd.clonk.c4group" }, -    .{ .@"c4g", all.@"application/vnd.clonk.c4group" }, -    .{ .@"c4p", all.@"application/vnd.clonk.c4group" }, -    .{ .@"c4u", all.@"application/vnd.clonk.c4group" }, -    .{ .@"cab", all.@"application/vnd.ms-cab-compressed" }, -    .{ .@"caf", all.@"audio/x-caf" }, -    .{ .@"cap", all.@"application/vnd.tcpdump.pcap" }, -    .{ .@"car", all.@"application/vnd.curl.car" }, -    .{ .@"cat", all.@"application/vnd.ms-pki.seccat" }, -    .{ .@"cb7", all.@"application/x-cbr" }, -    .{ .@"cba", all.@"application/x-cbr" }, -    .{ .@"cbr", all.@"application/x-cbr" }, -    .{ .@"cbt", all.@"application/x-cbr" }, -    .{ .@"cbz", all.@"application/x-cbr" }, -    .{ .@"cc", all.@"text/x-c" }, -    .{ .@"cco", all.@"application/x-cocoa" }, -    .{ .@"cct", all.@"application/x-director" }, -    .{ .@"ccxml", all.@"application/ccxml+xml" }, -    .{ .@"cdbcmsg", all.@"application/vnd.contact.cmsg" }, -    .{ .@"cdf", all.@"application/x-netcdf" }, -    .{ .@"cdfx", all.@"application/cdfx+xml" }, -    .{ .@"cdkey", all.@"application/vnd.mediastation.cdkey" }, -    .{ .@"cdmia", all.@"application/cdmi-capability" }, -    .{ .@"cdmic", all.@"application/cdmi-container" }, -    .{ .@"cdmid", all.@"application/cdmi-domain" }, -    .{ .@"cdmio", all.@"application/cdmi-object" }, -    .{ .@"cdmiq", all.@"application/cdmi-queue" }, -    .{ .@"cdx", all.@"chemical/x-cdx" }, -    .{ .@"cdxml", all.@"application/vnd.chemdraw+xml" }, -    .{ .@"cdy", all.@"application/vnd.cinderella" }, -    .{ .@"cer", all.@"application/pkix-cert" }, -    .{ .@"cfs", all.@"application/x-cfs-compressed" }, -    .{ .@"cgm", all.@"image/cgm" }, -    .{ .@"chat", all.@"application/x-chat" }, -    .{ .@"chm", all.@"application/vnd.ms-htmlhelp" }, -    .{ .@"chrt", all.@"application/vnd.kde.kchart" }, -    .{ .@"cif", all.@"chemical/x-cif" }, -    .{ .@"cii", all.@"application/vnd.anser-web-certificate-issue-initiation" }, -    .{ .@"cil", all.@"application/vnd.ms-artgalry" }, -    .{ .@"cjs", all.@"application/javascript" }, -    .{ .@"cla", all.@"application/vnd.claymore" }, -    .{ .@"class", all.@"application/java-vm" }, -    .{ .@"clkk", all.@"application/vnd.crick.clicker.keyboard" }, -    .{ .@"clkp", all.@"application/vnd.crick.clicker.palette" }, -    .{ .@"clkt", all.@"application/vnd.crick.clicker.template" }, -    .{ .@"clkw", all.@"application/vnd.crick.clicker.wordbank" }, -    .{ .@"clkx", all.@"application/vnd.crick.clicker" }, -    .{ .@"clp", all.@"application/x-msclip" }, -    .{ .@"cmc", all.@"application/vnd.cosmocaller" }, -    .{ .@"cmdf", all.@"chemical/x-cmdf" }, -    .{ .@"cml", all.@"chemical/x-cml" }, -    .{ .@"cmp", all.@"application/vnd.yellowriver-custom-menu" }, -    .{ .@"cmx", all.@"image/x-cmx" }, -    .{ .@"cod", all.@"application/vnd.rim.cod" }, -    .{ .@"coffee", all.@"text/coffeescript" }, -    .{ .@"com", all.@"application/x-msdownload" }, -    .{ .@"conf", all.@"text/plain" }, -    .{ .@"cpio", all.@"application/x-cpio" }, -    .{ .@"cpl", all.@"application/cpl+xml" }, -    .{ .@"cpp", all.@"text/x-c" }, -    .{ .@"cpt", all.@"application/mac-compactpro" }, -    .{ .@"crd", all.@"application/x-mscardfile" }, -    .{ .@"crl", all.@"application/pkix-crl" }, -    .{ .@"crt", all.@"application/x-x509-ca-cert" }, -    .{ .@"crx", all.@"application/x-chrome-extension" }, -    .{ .@"cryptonote", all.@"application/vnd.rig.cryptonote" }, -    .{ .@"csh", all.@"application/x-csh" }, -    .{ .@"csl", all.@"application/vnd.citationstyles.style+xml" }, -    .{ .@"csml", all.@"chemical/x-csml" }, -    .{ .@"csp", all.@"application/vnd.commonspace" }, -    .{ .@"css", all.@"text/css" }, -    .{ .@"cst", all.@"application/x-director" }, -    .{ .@"csv", all.@"text/csv" }, -    .{ .@"cts", all.@"application/javascript" }, -    .{ .@"cu", all.@"application/cu-seeme" }, -    .{ .@"curl", all.@"text/vnd.curl" }, -    .{ .@"cww", all.@"application/prs.cww" }, -    .{ .@"cxt", all.@"application/x-director" }, -    .{ .@"cxx", all.@"text/x-c" }, -    .{ .@"dae", all.@"model/vnd.collada+xml" }, -    .{ .@"daf", all.@"application/vnd.mobius.daf" }, -    .{ .@"dart", all.@"application/vnd.dart" }, -    .{ .@"dataless", all.@"application/vnd.fdsn.seed" }, -    .{ .@"davmount", all.@"application/davmount+xml" }, -    .{ .@"dbf", all.@"application/vnd.dbf" }, -    .{ .@"dbk", all.@"application/docbook+xml" }, -    .{ .@"dcr", all.@"application/x-director" }, -    .{ .@"dcurl", all.@"text/vnd.curl.dcurl" }, -    .{ .@"dd2", all.@"application/vnd.oma.dd2+xml" }, -    .{ .@"ddd", all.@"application/vnd.fujixerox.ddd" }, -    .{ .@"ddf", all.@"application/vnd.syncml.dmddf+xml" }, -    .{ .@"dds", all.@"image/vnd.ms-dds" }, -    .{ .@"deb", all.@"application/octet-stream" }, -    .{ .@"deb", all.@"application/x-debian-package" }, -    .{ .@"def", all.@"text/plain" }, -    .{ .@"deploy", all.@"application/octet-stream" }, -    .{ .@"der", all.@"application/x-x509-ca-cert" }, -    .{ .@"dfac", all.@"application/vnd.dreamfactory" }, -    .{ .@"dgc", all.@"application/x-dgc-compressed" }, -    .{ .@"dic", all.@"text/x-c" }, -    .{ .@"dir", all.@"application/x-director" }, -    .{ .@"dis", all.@"application/vnd.mobius.dis" }, -    .{ .@"disposition-notification", all.@"message/disposition-notification" }, -    .{ .@"dist", all.@"application/octet-stream" }, -    .{ .@"distz", all.@"application/octet-stream" }, -    .{ .@"djv", all.@"image/vnd.djvu" }, -    .{ .@"djvu", all.@"image/vnd.djvu" }, -    .{ .@"dll", all.@"application/octet-stream" }, -    .{ .@"dll", all.@"application/x-msdownload" }, -    .{ .@"dmg", all.@"application/octet-stream" }, -    .{ .@"dmg", all.@"application/x-apple-diskimage" }, -    .{ .@"dmp", all.@"application/vnd.tcpdump.pcap" }, -    .{ .@"dms", all.@"application/octet-stream" }, -    .{ .@"dna", all.@"application/vnd.dna" }, -    .{ .@"doc", all.@"application/msword" }, -    .{ .@"docm", all.@"application/vnd.ms-word.document.macroenabled.12" }, -    .{ .@"docx", all.@"application/vnd.openxmlformats-officedocument.wordprocessingml.document" }, -    .{ .@"dot", all.@"application/msword" }, -    .{ .@"dotm", all.@"application/vnd.ms-word.template.macroenabled.12" }, -    .{ .@"dotx", all.@"application/vnd.openxmlformats-officedocument.wordprocessingml.template" }, -    .{ .@"dp", all.@"application/vnd.osgi.dp" }, -    .{ .@"dpg", all.@"application/vnd.dpgraph" }, -    .{ .@"dra", all.@"audio/vnd.dra" }, -    .{ .@"drle", all.@"image/dicom-rle" }, -    .{ .@"dsc", all.@"text/prs.lines.tag" }, -    .{ .@"dssc", all.@"application/dssc+der" }, -    .{ .@"dtb", all.@"application/x-dtbook+xml" }, -    .{ .@"dtd", all.@"application/xml-dtd" }, -    .{ .@"dts", all.@"audio/vnd.dts" }, -    .{ .@"dtshd", all.@"audio/vnd.dts.hd" }, -    .{ .@"dump", all.@"application/octet-stream" }, -    .{ .@"dvb", all.@"video/vnd.dvb.file" }, -    .{ .@"dvi", all.@"application/x-dvi" }, -    .{ .@"dwd", all.@"application/atsc-dwd+xml" }, -    .{ .@"dwf", all.@"model/vnd.dwf" }, -    .{ .@"dwg", all.@"image/vnd.dwg" }, -    .{ .@"dxf", all.@"image/vnd.dxf" }, -    .{ .@"dxp", all.@"application/vnd.spotfire.dxp" }, -    .{ .@"dxr", all.@"application/x-director" }, -    .{ .@"ear", all.@"application/java-archive" }, -    .{ .@"ecelp4800", all.@"audio/vnd.nuera.ecelp4800" }, -    .{ .@"ecelp7470", all.@"audio/vnd.nuera.ecelp7470" }, -    .{ .@"ecelp9600", all.@"audio/vnd.nuera.ecelp9600" }, -    .{ .@"ecma", all.@"application/ecmascript" }, -    .{ .@"edm", all.@"application/vnd.novadigm.edm" }, -    .{ .@"edx", all.@"application/vnd.novadigm.edx" }, -    .{ .@"efif", all.@"application/vnd.picsel" }, -    .{ .@"ei6", all.@"application/vnd.pg.osasli" }, -    .{ .@"elc", all.@"application/octet-stream" }, -    .{ .@"emf", all.@"application/x-msmetafile" }, -    .{ .@"emf", all.@"image/emf" }, -    .{ .@"eml", all.@"message/rfc822" }, -    .{ .@"emma", all.@"application/emma+xml" }, -    .{ .@"emotionml", all.@"application/emotionml+xml" }, -    .{ .@"emz", all.@"application/x-msmetafile" }, -    .{ .@"eol", all.@"audio/vnd.digital-winds" }, -    .{ .@"eot", all.@"application/vnd.ms-fontobject" }, -    .{ .@"eps", all.@"application/postscript" }, -    .{ .@"epub", all.@"application/epub+zip" }, -    .{ .@"es", all.@"application/ecmascript" }, -    .{ .@"es3", all.@"application/vnd.eszigno3+xml" }, -    .{ .@"esa", all.@"application/vnd.osgi.subsystem" }, -    .{ .@"esf", all.@"application/vnd.epson.esf" }, -    .{ .@"et3", all.@"application/vnd.eszigno3+xml" }, -    .{ .@"etx", all.@"text/x-setext" }, -    .{ .@"eva", all.@"application/x-eva" }, -    .{ .@"evy", all.@"application/x-envoy" }, -    .{ .@"exe", all.@"application/octet-stream" }, -    .{ .@"exe", all.@"application/x-msdos-program" }, -    .{ .@"exe", all.@"application/x-msdownload" }, -    .{ .@"exi", all.@"application/exi" }, -    .{ .@"exp", all.@"application/express" }, -    .{ .@"exr", all.@"image/aces" }, -    .{ .@"ext", all.@"application/vnd.novadigm.ext" }, -    .{ .@"ez", all.@"application/andrew-inset" }, -    .{ .@"ez2", all.@"application/vnd.ezpix-album" }, -    .{ .@"ez3", all.@"application/vnd.ezpix-package" }, -    .{ .@"f", all.@"text/x-fortran" }, -    .{ .@"f4v", all.@"video/x-f4v" }, -    .{ .@"f77", all.@"text/x-fortran" }, -    .{ .@"f90", all.@"text/x-fortran" }, -    .{ .@"fbs", all.@"image/vnd.fastbidsheet" }, -    .{ .@"fcdt", all.@"application/vnd.adobe.formscentral.fcdt" }, -    .{ .@"fcs", all.@"application/vnd.isac.fcs" }, -    .{ .@"fdf", all.@"application/vnd.fdf" }, -    .{ .@"fdt", all.@"application/fdt+xml" }, -    .{ .@"fe_launch", all.@"application/vnd.denovo.fcselayout-link" }, -    .{ .@"fg5", all.@"application/vnd.fujitsu.oasysgp" }, -    .{ .@"fgd", all.@"application/x-director" }, -    .{ .@"fh", all.@"image/x-freehand" }, -    .{ .@"fh4", all.@"image/x-freehand" }, -    .{ .@"fh5", all.@"image/x-freehand" }, -    .{ .@"fh7", all.@"image/x-freehand" }, -    .{ .@"fhc", all.@"image/x-freehand" }, -    .{ .@"fig", all.@"application/x-xfig" }, -    .{ .@"fits", all.@"image/fits" }, -    .{ .@"flac", all.@"audio/x-flac" }, -    .{ .@"fli", all.@"video/x-fli" }, -    .{ .@"flo", all.@"application/vnd.micrografx.flo" }, -    .{ .@"flv", all.@"video/x-flv" }, -    .{ .@"flw", all.@"application/vnd.kde.kivio" }, -    .{ .@"flx", all.@"text/vnd.fmi.flexstor" }, -    .{ .@"fly", all.@"text/vnd.fly" }, -    .{ .@"fm", all.@"application/vnd.framemaker" }, -    .{ .@"fnc", all.@"application/vnd.frogans.fnc" }, -    .{ .@"fo", all.@"application/vnd.software602.filler.form+xml" }, -    .{ .@"for", all.@"text/x-fortran" }, -    .{ .@"fpx", all.@"image/vnd.fpx" }, -    .{ .@"frame", all.@"application/vnd.framemaker" }, -    .{ .@"fsc", all.@"application/vnd.fsc.weblaunch" }, -    .{ .@"fst", all.@"image/vnd.fst" }, -    .{ .@"ftc", all.@"application/vnd.fluxtime.clip" }, -    .{ .@"fti", all.@"application/vnd.anser-web-funds-transfer-initiation" }, -    .{ .@"fvt", all.@"video/vnd.fvt" }, -    .{ .@"fxp", all.@"application/vnd.adobe.fxp" }, -    .{ .@"fxpl", all.@"application/vnd.adobe.fxp" }, -    .{ .@"fzs", all.@"application/vnd.fuzzysheet" }, -    .{ .@"g2w", all.@"application/vnd.geoplan" }, -    .{ .@"g3", all.@"image/g3fax" }, -    .{ .@"g3w", all.@"application/vnd.geospace" }, -    .{ .@"gac", all.@"application/vnd.groove-account" }, -    .{ .@"gam", all.@"application/x-tads" }, -    .{ .@"gbr", all.@"application/rpki-ghostbusters" }, -    .{ .@"gca", all.@"application/x-gca-compressed" }, -    .{ .@"gdl", all.@"model/vnd.gdl" }, -    .{ .@"gdoc", all.@"application/vnd.google-apps.document" }, -    .{ .@"ged", all.@"text/vnd.familysearch.gedcom" }, -    .{ .@"geo", all.@"application/vnd.dynageo" }, -    .{ .@"geojson", all.@"application/geo+json" }, -    .{ .@"gex", all.@"application/vnd.geometry-explorer" }, -    .{ .@"ggb", all.@"application/vnd.geogebra.file" }, -    .{ .@"ggt", all.@"application/vnd.geogebra.tool" }, -    .{ .@"ghf", all.@"application/vnd.groove-help" }, -    .{ .@"gif", all.@"image/gif" }, -    .{ .@"gim", all.@"application/vnd.groove-identity-message" }, -    .{ .@"glb", all.@"model/gltf-binary" }, -    .{ .@"gltf", all.@"model/gltf+json" }, -    .{ .@"gml", all.@"application/gml+xml" }, -    .{ .@"gmx", all.@"application/vnd.gmx" }, -    .{ .@"gnumeric", all.@"application/x-gnumeric" }, -    .{ .@"gph", all.@"application/vnd.flographit" }, -    .{ .@"gpx", all.@"application/gpx+xml" }, -    .{ .@"gqf", all.@"application/vnd.grafeq" }, -    .{ .@"gqs", all.@"application/vnd.grafeq" }, -    .{ .@"gram", all.@"application/srgs" }, -    .{ .@"gramps", all.@"application/x-gramps-xml" }, -    .{ .@"gre", all.@"application/vnd.geometry-explorer" }, -    .{ .@"grv", all.@"application/vnd.groove-injector" }, -    .{ .@"grxml", all.@"application/srgs+xml" }, -    .{ .@"gsf", all.@"application/x-font-ghostscript" }, -    .{ .@"gsheet", all.@"application/vnd.google-apps.spreadsheet" }, -    .{ .@"gslides", all.@"application/vnd.google-apps.presentation" }, -    .{ .@"gtar", all.@"application/x-gtar" }, -    .{ .@"gtm", all.@"application/vnd.groove-tool-message" }, -    .{ .@"gtw", all.@"model/vnd.gtw" }, -    .{ .@"gv", all.@"text/vnd.graphviz" }, -    .{ .@"gxf", all.@"application/gxf" }, -    .{ .@"gxt", all.@"application/vnd.geonext" }, -    .{ .@"gz", all.@"application/gzip" }, -    .{ .@"h", all.@"text/x-c" }, -    .{ .@"h261", all.@"video/h261" }, -    .{ .@"h263", all.@"video/h263" }, -    .{ .@"h264", all.@"video/h264" }, -    .{ .@"hal", all.@"application/vnd.hal+xml" }, -    .{ .@"hbci", all.@"application/vnd.hbci" }, -    .{ .@"hbs", all.@"text/x-handlebars-template" }, -    .{ .@"hdd", all.@"application/x-virtualbox-hdd" }, -    .{ .@"hdf", all.@"application/x-hdf" }, -    .{ .@"heic", all.@"image/heic" }, -    .{ .@"heics", all.@"image/heic-sequence" }, -    .{ .@"heif", all.@"image/heif" }, -    .{ .@"heifs", all.@"image/heif-sequence" }, -    .{ .@"hej2", all.@"image/hej2k" }, -    .{ .@"held", all.@"application/atsc-held+xml" }, -    .{ .@"hh", all.@"text/x-c" }, -    .{ .@"hjson", all.@"application/hjson" }, -    .{ .@"hlp", all.@"application/winhlp" }, -    .{ .@"hpgl", all.@"application/vnd.hp-hpgl" }, -    .{ .@"hpid", all.@"application/vnd.hp-hpid" }, -    .{ .@"hps", all.@"application/vnd.hp-hps" }, -    .{ .@"hqx", all.@"application/mac-binhex40" }, -    .{ .@"hsj2", all.@"image/hsj2" }, -    .{ .@"htc", all.@"text/x-component" }, -    .{ .@"htke", all.@"application/vnd.kenameaapp" }, -    .{ .@"htm", all.@"text/html" }, -    .{ .@"html", all.@"text/html" }, -    .{ .@"hvd", all.@"application/vnd.yamaha.hv-dic" }, -    .{ .@"hvp", all.@"application/vnd.yamaha.hv-voice" }, -    .{ .@"hvs", all.@"application/vnd.yamaha.hv-script" }, -    .{ .@"i2g", all.@"application/vnd.intergeo" }, -    .{ .@"icc", all.@"application/vnd.iccprofile" }, -    .{ .@"ice", all.@"x-conference/x-cooltalk" }, -    .{ .@"icm", all.@"application/vnd.iccprofile" }, -    .{ .@"ico", all.@"image/vnd.microsoft.icon" }, -    .{ .@"ico", all.@"image/x-icon" }, -    .{ .@"ics", all.@"text/calendar" }, -    .{ .@"ief", all.@"image/ief" }, -    .{ .@"ifb", all.@"text/calendar" }, -    .{ .@"ifm", all.@"application/vnd.shana.informed.formdata" }, -    .{ .@"iges", all.@"model/iges" }, -    .{ .@"igl", all.@"application/vnd.igloader" }, -    .{ .@"igm", all.@"application/vnd.insors.igm" }, -    .{ .@"igs", all.@"model/iges" }, -    .{ .@"igx", all.@"application/vnd.micrografx.igx" }, -    .{ .@"iif", all.@"application/vnd.shana.informed.interchange" }, -    .{ .@"img", all.@"application/octet-stream" }, -    .{ .@"imp", all.@"application/vnd.accpac.simply.imp" }, -    .{ .@"ims", all.@"application/vnd.ms-ims" }, -    .{ .@"in", all.@"text/plain" }, -    .{ .@"ini", all.@"text/plain" }, -    .{ .@"ink", all.@"application/inkml+xml" }, -    .{ .@"inkml", all.@"application/inkml+xml" }, -    .{ .@"install", all.@"application/x-install-instructions" }, -    .{ .@"iota", all.@"application/vnd.astraea-software.iota" }, -    .{ .@"ipfix", all.@"application/ipfix" }, -    .{ .@"ipk", all.@"application/vnd.shana.informed.package" }, -    .{ .@"irm", all.@"application/vnd.ibm.rights-management" }, -    .{ .@"irp", all.@"application/vnd.irepository.package+xml" }, -    .{ .@"iso", all.@"application/octet-stream" }, -    .{ .@"iso", all.@"application/x-iso9660-image" }, -    .{ .@"itp", all.@"application/vnd.shana.informed.formtemplate" }, -    .{ .@"its", all.@"application/its+xml" }, -    .{ .@"ivp", all.@"application/vnd.immervision-ivp" }, -    .{ .@"ivu", all.@"application/vnd.immervision-ivu" }, -    .{ .@"jad", all.@"text/vnd.sun.j2me.app-descriptor" }, -    .{ .@"jade", all.@"text/jade" }, -    .{ .@"jam", all.@"application/vnd.jam" }, -    .{ .@"jar", all.@"application/java-archive" }, -    .{ .@"jardiff", all.@"application/x-java-archive-diff" }, -    .{ .@"java", all.@"text/x-java-source" }, -    .{ .@"jhc", all.@"image/jphc" }, -    .{ .@"jisp", all.@"application/vnd.jisp" }, -    .{ .@"jls", all.@"image/jls" }, -    .{ .@"jlt", all.@"application/vnd.hp-jlyt" }, -    .{ .@"jng", all.@"image/x-jng" }, -    .{ .@"jnlp", all.@"application/x-java-jnlp-file" }, -    .{ .@"joda", all.@"application/vnd.joost.joda-archive" }, -    .{ .@"jp2", all.@"image/jp2" }, -    .{ .@"jpe", all.@"image/jpeg" }, -    .{ .@"jpeg", all.@"image/jpeg" }, -    .{ .@"jpf", all.@"image/jpx" }, -    .{ .@"jpg", all.@"image/jpeg" }, -    .{ .@"jpg2", all.@"image/jp2" }, -    .{ .@"jpgm", all.@"video/jpm" }, -    .{ .@"jpgv", all.@"video/jpeg" }, -    .{ .@"jph", all.@"image/jph" }, -    .{ .@"jpm", all.@"image/jpm" }, -    .{ .@"jpm", all.@"video/jpm" }, -    .{ .@"jpx", all.@"image/jpx" }, -    .{ .@"js", all.@"application/javascript" }, -    .{ .@"json", all.@"application/json" }, -    .{ .@"json5", all.@"application/json5" }, -    .{ .@"jsonld", all.@"application/ld+json" }, -    .{ .@"jsonml", all.@"application/jsonml+json" }, -    .{ .@"jsx", all.@"text/jsx" }, -    .{ .@"jxr", all.@"image/jxr" }, -    .{ .@"jxra", all.@"image/jxra" }, -    .{ .@"jxrs", all.@"image/jxrs" }, -    .{ .@"jxs", all.@"image/jxs" }, -    .{ .@"jxsc", all.@"image/jxsc" }, -    .{ .@"jxsi", all.@"image/jxsi" }, -    .{ .@"jxss", all.@"image/jxss" }, -    .{ .@"kar", all.@"audio/midi" }, -    .{ .@"karbon", all.@"application/vnd.kde.karbon" }, -    .{ .@"kdbx", all.@"application/x-keepass2" }, -    .{ .@"key", all.@"application/vnd.apple.keynote" }, -    .{ .@"key", all.@"application/x-iwork-keynote-sffkey" }, -    .{ .@"kfo", all.@"application/vnd.kde.kformula" }, -    .{ .@"kia", all.@"application/vnd.kidspiration" }, -    .{ .@"kml", all.@"application/vnd.google-earth.kml+xml" }, -    .{ .@"kmz", all.@"application/vnd.google-earth.kmz" }, -    .{ .@"kne", all.@"application/vnd.kinar" }, -    .{ .@"knp", all.@"application/vnd.kinar" }, -    .{ .@"kon", all.@"application/vnd.kde.kontour" }, -    .{ .@"kpr", all.@"application/vnd.kde.kpresenter" }, -    .{ .@"kpt", all.@"application/vnd.kde.kpresenter" }, -    .{ .@"kpxx", all.@"application/vnd.ds-keypoint" }, -    .{ .@"ksp", all.@"application/vnd.kde.kspread" }, -    .{ .@"ktr", all.@"application/vnd.kahootz" }, -    .{ .@"ktx", all.@"image/ktx" }, -    .{ .@"ktx2", all.@"image/ktx2" }, -    .{ .@"ktz", all.@"application/vnd.kahootz" }, -    .{ .@"kwd", all.@"application/vnd.kde.kword" }, -    .{ .@"kwt", all.@"application/vnd.kde.kword" }, -    .{ .@"lasxml", all.@"application/vnd.las.las+xml" }, -    .{ .@"latex", all.@"application/x-latex" }, -    .{ .@"lbd", all.@"application/vnd.llamagraphics.life-balance.desktop" }, -    .{ .@"lbe", all.@"application/vnd.llamagraphics.life-balance.exchange+xml" }, -    .{ .@"les", all.@"application/vnd.hhe.lesson-player" }, -    .{ .@"less", all.@"text/less" }, -    .{ .@"lgr", all.@"application/lgr+xml" }, -    .{ .@"lha", all.@"application/x-lzh-compressed" }, -    .{ .@"link66", all.@"application/vnd.route66.link66+xml" }, -    .{ .@"list", all.@"text/plain" }, -    .{ .@"list3820", all.@"application/vnd.ibm.modcap" }, -    .{ .@"listafp", all.@"application/vnd.ibm.modcap" }, -    .{ .@"litcoffee", all.@"text/coffeescript" }, -    .{ .@"lnk", all.@"application/x-ms-shortcut" }, -    .{ .@"log", all.@"text/plain" }, -    .{ .@"lostxml", all.@"application/lost+xml" }, -    .{ .@"lrf", all.@"application/octet-stream" }, -    .{ .@"lrm", all.@"application/vnd.ms-lrm" }, -    .{ .@"ltf", all.@"application/vnd.frogans.ltf" }, -    .{ .@"lua", all.@"text/x-lua" }, -    .{ .@"luac", all.@"application/x-lua-bytecode" }, -    .{ .@"lvp", all.@"audio/vnd.lucent.voice" }, -    .{ .@"lwp", all.@"application/vnd.lotus-wordpro" }, -    .{ .@"lzh", all.@"application/x-lzh-compressed" }, -    .{ .@"m13", all.@"application/x-msmediaview" }, -    .{ .@"m14", all.@"application/x-msmediaview" }, -    .{ .@"m1v", all.@"video/mpeg" }, -    .{ .@"m21", all.@"application/mp21" }, -    .{ .@"m2a", all.@"audio/mpeg" }, -    .{ .@"m2v", all.@"video/mpeg" }, -    .{ .@"m3a", all.@"audio/mpeg" }, -    .{ .@"m3u", all.@"audio/x-mpegurl" }, -    .{ .@"m3u8", all.@"application/vnd.apple.mpegurl" }, -    .{ .@"m4a", all.@"audio/mp4" }, -    .{ .@"m4a", all.@"audio/x-m4a" }, -    .{ .@"m4p", all.@"application/mp4" }, -    .{ .@"m4s", all.@"video/iso.segment" }, -    .{ .@"m4u", all.@"video/vnd.mpegurl" }, -    .{ .@"m4v", all.@"video/x-m4v" }, -    .{ .@"ma", all.@"application/mathematica" }, -    .{ .@"mads", all.@"application/mads+xml" }, -    .{ .@"maei", all.@"application/mmt-aei+xml" }, -    .{ .@"mag", all.@"application/vnd.ecowin.chart" }, -    .{ .@"maker", all.@"application/vnd.framemaker" }, -    .{ .@"man", all.@"text/troff" }, -    .{ .@"manifest", all.@"text/cache-manifest" }, -    .{ .@"map", all.@"application/json" }, -    .{ .@"mar", all.@"application/octet-stream" }, -    .{ .@"markdown", all.@"text/markdown" }, -    .{ .@"mathml", all.@"application/mathml+xml" }, -    .{ .@"mb", all.@"application/mathematica" }, -    .{ .@"mbk", all.@"application/vnd.mobius.mbk" }, -    .{ .@"mbox", all.@"application/mbox" }, -    .{ .@"mc1", all.@"application/vnd.medcalcdata" }, -    .{ .@"mcd", all.@"application/vnd.mcd" }, -    .{ .@"mcurl", all.@"text/vnd.curl.mcurl" }, -    .{ .@"md", all.@"text/markdown" }, -    .{ .@"mdb", all.@"application/x-msaccess" }, -    .{ .@"mdi", all.@"image/vnd.ms-modi" }, -    .{ .@"mdx", all.@"text/mdx" }, -    .{ .@"me", all.@"text/troff" }, -    .{ .@"mesh", all.@"model/mesh" }, -    .{ .@"meta4", all.@"application/metalink4+xml" }, -    .{ .@"metalink", all.@"application/metalink+xml" }, -    .{ .@"mets", all.@"application/mets+xml" }, -    .{ .@"mfm", all.@"application/vnd.mfmp" }, -    .{ .@"mft", all.@"application/rpki-manifest" }, -    .{ .@"mgp", all.@"application/vnd.osgeo.mapguide.package" }, -    .{ .@"mgz", all.@"application/vnd.proteus.magazine" }, -    .{ .@"mid", all.@"audio/midi" }, -    .{ .@"midi", all.@"audio/midi" }, -    .{ .@"mie", all.@"application/x-mie" }, -    .{ .@"mif", all.@"application/vnd.mif" }, -    .{ .@"mime", all.@"message/rfc822" }, -    .{ .@"mj2", all.@"video/mj2" }, -    .{ .@"mjp2", all.@"video/mj2" }, -    .{ .@"mjs", all.@"application/javascript" }, -    .{ .@"mk3d", all.@"video/x-matroska" }, -    .{ .@"mka", all.@"audio/x-matroska" }, -    .{ .@"mkd", all.@"text/x-markdown" }, -    .{ .@"mks", all.@"video/x-matroska" }, -    .{ .@"mkv", all.@"video/x-matroska" }, -    .{ .@"mlp", all.@"application/vnd.dolby.mlp" }, -    .{ .@"mmd", all.@"application/vnd.chipnuts.karaoke-mmd" }, -    .{ .@"mmf", all.@"application/vnd.smaf" }, -    .{ .@"mml", all.@"text/mathml" }, -    .{ .@"mmr", all.@"image/vnd.fujixerox.edmics-mmr" }, -    .{ .@"mng", all.@"video/x-mng" }, -    .{ .@"mny", all.@"application/x-msmoney" }, -    .{ .@"mobi", all.@"application/x-mobipocket-ebook" }, -    .{ .@"mods", all.@"application/mods+xml" }, -    .{ .@"mov", all.@"video/quicktime" }, -    .{ .@"movie", all.@"video/x-sgi-movie" }, -    .{ .@"mp2", all.@"audio/mpeg" }, -    .{ .@"mp21", all.@"application/mp21" }, -    .{ .@"mp2a", all.@"audio/mpeg" }, -    .{ .@"mp3", all.@"audio/mp3" }, -    .{ .@"mp3", all.@"audio/mpeg" }, -    .{ .@"mp4", all.@"video/mp4" }, -    .{ .@"mp4a", all.@"audio/mp4" }, -    .{ .@"mp4s", all.@"application/mp4" }, -    .{ .@"mp4v", all.@"video/mp4" }, -    .{ .@"mpc", all.@"application/vnd.mophun.certificate" }, -    .{ .@"mpd", all.@"application/dash+xml" }, -    .{ .@"mpe", all.@"video/mpeg" }, -    .{ .@"mpeg", all.@"video/mpeg" }, -    .{ .@"mpf", all.@"application/media-policy-dataset+xml" }, -    .{ .@"mpg", all.@"video/mpeg" }, -    .{ .@"mpg4", all.@"video/mp4" }, -    .{ .@"mpga", all.@"audio/mpeg" }, -    .{ .@"mpkg", all.@"application/vnd.apple.installer+xml" }, -    .{ .@"mpm", all.@"application/vnd.blueice.multipass" }, -    .{ .@"mpn", all.@"application/vnd.mophun.application" }, -    .{ .@"mpp", all.@"application/dash-patch+xml" }, -    .{ .@"mpp", all.@"application/vnd.ms-project" }, -    .{ .@"mpt", all.@"application/vnd.ms-project" }, -    .{ .@"mpy", all.@"application/vnd.ibm.minipay" }, -    .{ .@"mqy", all.@"application/vnd.mobius.mqy" }, -    .{ .@"mrc", all.@"application/marc" }, -    .{ .@"mrcx", all.@"application/marcxml+xml" }, -    .{ .@"ms", all.@"text/troff" }, -    .{ .@"mscml", all.@"application/mediaservercontrol+xml" }, -    .{ .@"mseed", all.@"application/vnd.fdsn.mseed" }, -    .{ .@"mseq", all.@"application/vnd.mseq" }, -    .{ .@"msf", all.@"application/vnd.epson.msf" }, -    .{ .@"msg", all.@"application/vnd.ms-outlook" }, -    .{ .@"msh", all.@"model/mesh" }, -    .{ .@"msi", all.@"application/octet-stream" }, -    .{ .@"msi", all.@"application/x-msdownload" }, -    .{ .@"msl", all.@"application/vnd.mobius.msl" }, -    .{ .@"msm", all.@"application/octet-stream" }, -    .{ .@"msp", all.@"application/octet-stream" }, -    .{ .@"msty", all.@"application/vnd.muvee.style" }, -    .{ .@"mtl", all.@"model/mtl" }, -    .{ .@"mts", all.@"application/javascript" }, -    .{ .@"mts", all.@"model/vnd.mts" }, -    .{ .@"mtsx", all.@"application/javascript" }, -    .{ .@"mus", all.@"application/vnd.musician" }, -    .{ .@"musd", all.@"application/mmt-usd+xml" }, -    .{ .@"musicxml", all.@"application/vnd.recordare.musicxml+xml" }, -    .{ .@"mvb", all.@"application/x-msmediaview" }, -    .{ .@"mvt", all.@"application/vnd.mapbox-vector-tile" }, -    .{ .@"mwf", all.@"application/vnd.mfer" }, -    .{ .@"mxf", all.@"application/mxf" }, -    .{ .@"mxl", all.@"application/vnd.recordare.musicxml" }, -    .{ .@"mxmf", all.@"audio/mobile-xmf" }, -    .{ .@"mxml", all.@"application/xv+xml" }, -    .{ .@"mxs", all.@"application/vnd.triscape.mxs" }, -    .{ .@"mxu", all.@"video/vnd.mpegurl" }, -    .{ .@"n-gage", all.@"application/vnd.nokia.n-gage.symbian.install" }, -    .{ .@"n3", all.@"text/n3" }, -    .{ .@"nb", all.@"application/mathematica" }, -    .{ .@"nbp", all.@"application/vnd.wolfram.player" }, -    .{ .@"nc", all.@"application/x-netcdf" }, -    .{ .@"ncx", all.@"application/x-dtbncx+xml" }, -    .{ .@"nfo", all.@"text/x-nfo" }, -    .{ .@"ngdat", all.@"application/vnd.nokia.n-gage.data" }, -    .{ .@"nitf", all.@"application/vnd.nitf" }, -    .{ .@"nlu", all.@"application/vnd.neurolanguage.nlu" }, -    .{ .@"nml", all.@"application/vnd.enliven" }, -    .{ .@"nnd", all.@"application/vnd.noblenet-directory" }, -    .{ .@"nns", all.@"application/vnd.noblenet-sealer" }, -    .{ .@"nnw", all.@"application/vnd.noblenet-web" }, -    .{ .@"npx", all.@"image/vnd.net-fpx" }, -    .{ .@"nq", all.@"application/n-quads" }, -    .{ .@"nsc", all.@"application/x-conference" }, -    .{ .@"nsf", all.@"application/vnd.lotus-notes" }, -    .{ .@"nt", all.@"application/n-triples" }, -    .{ .@"ntf", all.@"application/vnd.nitf" }, -    .{ .@"numbers", all.@"application/vnd.apple.numbers" }, -    .{ .@"numbers", all.@"application/x-iwork-numbers-sffnumbers" }, -    .{ .@"nzb", all.@"application/x-nzb" }, -    .{ .@"oa2", all.@"application/vnd.fujitsu.oasys2" }, -    .{ .@"oa3", all.@"application/vnd.fujitsu.oasys3" }, -    .{ .@"oas", all.@"application/vnd.fujitsu.oasys" }, -    .{ .@"obd", all.@"application/x-msbinder" }, -    .{ .@"obgx", all.@"application/vnd.openblox.game+xml" }, -    .{ .@"obj", all.@"application/x-tgif" }, -    .{ .@"obj", all.@"model/obj" }, -    .{ .@"oda", all.@"application/oda" }, -    .{ .@"odb", all.@"application/vnd.oasis.opendocument.database" }, -    .{ .@"odc", all.@"application/vnd.oasis.opendocument.chart" }, -    .{ .@"odf", all.@"application/vnd.oasis.opendocument.formula" }, -    .{ .@"odft", all.@"application/vnd.oasis.opendocument.formula-template" }, -    .{ .@"odg", all.@"application/vnd.oasis.opendocument.graphics" }, -    .{ .@"odi", all.@"application/vnd.oasis.opendocument.image" }, -    .{ .@"odm", all.@"application/vnd.oasis.opendocument.text-master" }, -    .{ .@"odp", all.@"application/vnd.oasis.opendocument.presentation" }, -    .{ .@"ods", all.@"application/vnd.oasis.opendocument.spreadsheet" }, -    .{ .@"odt", all.@"application/vnd.oasis.opendocument.text" }, -    .{ .@"oga", all.@"audio/ogg" }, -    .{ .@"ogex", all.@"model/vnd.opengex" }, -    .{ .@"ogg", all.@"audio/ogg" }, -    .{ .@"ogv", all.@"video/ogg" }, -    .{ .@"ogx", all.@"application/ogg" }, -    .{ .@"omdoc", all.@"application/omdoc+xml" }, -    .{ .@"onepkg", all.@"application/onenote" }, -    .{ .@"onetmp", all.@"application/onenote" }, -    .{ .@"onetoc", all.@"application/onenote" }, -    .{ .@"onetoc2", all.@"application/onenote" }, -    .{ .@"opf", all.@"application/oebps-package+xml" }, -    .{ .@"opml", all.@"text/x-opml" }, -    .{ .@"oprc", all.@"application/vnd.palm" }, -    .{ .@"opus", all.@"audio/ogg" }, -    .{ .@"org", all.@"application/vnd.lotus-organizer" }, -    .{ .@"org", all.@"text/x-org" }, -    .{ .@"osf", all.@"application/vnd.yamaha.openscoreformat" }, -    .{ .@"osfpvg", all.@"application/vnd.yamaha.openscoreformat.osfpvg+xml" }, -    .{ .@"osm", all.@"application/vnd.openstreetmap.data+xml" }, -    .{ .@"otc", all.@"application/vnd.oasis.opendocument.chart-template" }, -    .{ .@"otf", all.@"font/otf" }, -    .{ .@"otg", all.@"application/vnd.oasis.opendocument.graphics-template" }, -    .{ .@"oth", all.@"application/vnd.oasis.opendocument.text-web" }, -    .{ .@"oti", all.@"application/vnd.oasis.opendocument.image-template" }, -    .{ .@"otp", all.@"application/vnd.oasis.opendocument.presentation-template" }, -    .{ .@"ots", all.@"application/vnd.oasis.opendocument.spreadsheet-template" }, -    .{ .@"ott", all.@"application/vnd.oasis.opendocument.text-template" }, -    .{ .@"ova", all.@"application/x-virtualbox-ova" }, -    .{ .@"ovf", all.@"application/x-virtualbox-ovf" }, -    .{ .@"owl", all.@"application/rdf+xml" }, -    .{ .@"oxps", all.@"application/oxps" }, -    .{ .@"oxt", all.@"application/vnd.openofficeorg.extension" }, -    .{ .@"p", all.@"text/x-pascal" }, -    .{ .@"p10", all.@"application/pkcs10" }, -    .{ .@"p12", all.@"application/x-pkcs12" }, -    .{ .@"p7b", all.@"application/x-pkcs7-certificates" }, -    .{ .@"p7c", all.@"application/pkcs7-mime" }, -    .{ .@"p7m", all.@"application/pkcs7-mime" }, -    .{ .@"p7r", all.@"application/x-pkcs7-certreqresp" }, -    .{ .@"p7s", all.@"application/pkcs7-signature" }, -    .{ .@"p8", all.@"application/pkcs8" }, -    .{ .@"pac", all.@"application/x-ns-proxy-autoconfig" }, -    .{ .@"pages", all.@"application/vnd.apple.pages" }, -    .{ .@"pages", all.@"application/x-iwork-pages-sffpages" }, -    .{ .@"pas", all.@"text/x-pascal" }, -    .{ .@"paw", all.@"application/vnd.pawaafile" }, -    .{ .@"pbd", all.@"application/vnd.powerbuilder6" }, -    .{ .@"pbm", all.@"image/x-portable-bitmap" }, -    .{ .@"pcap", all.@"application/vnd.tcpdump.pcap" }, -    .{ .@"pcf", all.@"application/x-font-pcf" }, -    .{ .@"pcl", all.@"application/vnd.hp-pcl" }, -    .{ .@"pclxl", all.@"application/vnd.hp-pclxl" }, -    .{ .@"pct", all.@"image/x-pict" }, -    .{ .@"pcurl", all.@"application/vnd.curl.pcurl" }, -    .{ .@"pcx", all.@"image/vnd.zbrush.pcx" }, -    .{ .@"pcx", all.@"image/x-pcx" }, -    .{ .@"pdb", all.@"application/vnd.palm" }, -    .{ .@"pdb", all.@"application/x-pilot" }, -    .{ .@"pde", all.@"text/x-processing" }, -    .{ .@"pdf", all.@"application/pdf" }, -    .{ .@"pem", all.@"application/x-x509-ca-cert" }, -    .{ .@"pfa", all.@"application/x-font-type1" }, -    .{ .@"pfb", all.@"application/x-font-type1" }, -    .{ .@"pfm", all.@"application/x-font-type1" }, -    .{ .@"pfr", all.@"application/font-tdpfr" }, -    .{ .@"pfx", all.@"application/x-pkcs12" }, -    .{ .@"pgm", all.@"image/x-portable-graymap" }, -    .{ .@"pgn", all.@"application/x-chess-pgn" }, -    .{ .@"pgp", all.@"application/pgp-encrypted" }, -    .{ .@"php", all.@"application/x-httpd-php" }, -    .{ .@"pic", all.@"image/x-pict" }, -    .{ .@"pkg", all.@"application/octet-stream" }, -    .{ .@"pki", all.@"application/pkixcmp" }, -    .{ .@"pkipath", all.@"application/pkix-pkipath" }, -    .{ .@"pkpass", all.@"application/vnd.apple.pkpass" }, -    .{ .@"pl", all.@"application/x-perl" }, -    .{ .@"plb", all.@"application/vnd.3gpp.pic-bw-large" }, -    .{ .@"plc", all.@"application/vnd.mobius.plc" }, -    .{ .@"plf", all.@"application/vnd.pocketlearn" }, -    .{ .@"pls", all.@"application/pls+xml" }, -    .{ .@"pm", all.@"application/x-perl" }, -    .{ .@"pml", all.@"application/vnd.ctc-posml" }, -    .{ .@"png", all.@"image/png" }, -    .{ .@"pnm", all.@"image/x-portable-anymap" }, -    .{ .@"portpkg", all.@"application/vnd.macports.portpkg" }, -    .{ .@"pot", all.@"application/vnd.ms-powerpoint" }, -    .{ .@"potm", all.@"application/vnd.ms-powerpoint.template.macroenabled.12" }, -    .{ .@"potx", all.@"application/vnd.openxmlformats-officedocument.presentationml.template" }, -    .{ .@"ppam", all.@"application/vnd.ms-powerpoint.addin.macroenabled.12" }, -    .{ .@"ppd", all.@"application/vnd.cups-ppd" }, -    .{ .@"ppm", all.@"image/x-portable-pixmap" }, -    .{ .@"pps", all.@"application/vnd.ms-powerpoint" }, -    .{ .@"ppsm", all.@"application/vnd.ms-powerpoint.slideshow.macroenabled.12" }, -    .{ .@"ppsx", all.@"application/vnd.openxmlformats-officedocument.presentationml.slideshow" }, -    .{ .@"ppt", all.@"application/vnd.ms-powerpoint" }, -    .{ .@"pptm", all.@"application/vnd.ms-powerpoint.presentation.macroenabled.12" }, -    .{ .@"pptx", all.@"application/vnd.openxmlformats-officedocument.presentationml.presentation" }, -    .{ .@"pqa", all.@"application/vnd.palm" }, -    .{ .@"prc", all.@"application/x-mobipocket-ebook" }, -    .{ .@"prc", all.@"application/x-pilot" }, -    .{ .@"prc", all.@"model/prc" }, -    .{ .@"pre", all.@"application/vnd.lotus-freelance" }, -    .{ .@"prf", all.@"application/pics-rules" }, -    .{ .@"provx", all.@"application/provenance+xml" }, -    .{ .@"ps", all.@"application/postscript" }, -    .{ .@"psb", all.@"application/vnd.3gpp.pic-bw-small" }, -    .{ .@"psd", all.@"image/vnd.adobe.photoshop" }, -    .{ .@"psf", all.@"application/x-font-linux-psf" }, -    .{ .@"pskcxml", all.@"application/pskc+xml" }, -    .{ .@"pti", all.@"image/prs.pti" }, -    .{ .@"ptid", all.@"application/vnd.pvi.ptid1" }, -    .{ .@"pub", all.@"application/x-mspublisher" }, -    .{ .@"pvb", all.@"application/vnd.3gpp.pic-bw-var" }, -    .{ .@"pwn", all.@"application/vnd.3m.post-it-notes" }, -    .{ .@"pya", all.@"audio/vnd.ms-playready.media.pya" }, -    .{ .@"pyv", all.@"video/vnd.ms-playready.media.pyv" }, -    .{ .@"qam", all.@"application/vnd.epson.quickanime" }, -    .{ .@"qbo", all.@"application/vnd.intu.qbo" }, -    .{ .@"qfx", all.@"application/vnd.intu.qfx" }, -    .{ .@"qps", all.@"application/vnd.publishare-delta-tree" }, -    .{ .@"qt", all.@"video/quicktime" }, -    .{ .@"qwd", all.@"application/vnd.quark.quarkxpress" }, -    .{ .@"qwt", all.@"application/vnd.quark.quarkxpress" }, -    .{ .@"qxb", all.@"application/vnd.quark.quarkxpress" }, -    .{ .@"qxd", all.@"application/vnd.quark.quarkxpress" }, -    .{ .@"qxl", all.@"application/vnd.quark.quarkxpress" }, -    .{ .@"qxt", all.@"application/vnd.quark.quarkxpress" }, -    .{ .@"ra", all.@"audio/x-pn-realaudio" }, -    .{ .@"ra", all.@"audio/x-realaudio" }, -    .{ .@"ram", all.@"audio/x-pn-realaudio" }, -    .{ .@"raml", all.@"application/raml+yaml" }, -    .{ .@"rapd", all.@"application/route-apd+xml" }, -    .{ .@"rar", all.@"application/vnd.rar" }, -    .{ .@"rar", all.@"application/x-rar-compressed" }, -    .{ .@"ras", all.@"image/x-cmu-raster" }, -    .{ .@"rcprofile", all.@"application/vnd.ipunplugged.rcprofile" }, -    .{ .@"rdf", all.@"application/rdf+xml" }, -    .{ .@"rdz", all.@"application/vnd.data-vision.rdz" }, -    .{ .@"relo", all.@"application/p2p-overlay+xml" }, -    .{ .@"rep", all.@"application/vnd.businessobjects" }, -    .{ .@"res", all.@"application/x-dtbresource+xml" }, -    .{ .@"rgb", all.@"image/x-rgb" }, -    .{ .@"rif", all.@"application/reginfo+xml" }, -    .{ .@"rip", all.@"audio/vnd.rip" }, -    .{ .@"ris", all.@"application/x-research-info-systems" }, -    .{ .@"rl", all.@"application/resource-lists+xml" }, -    .{ .@"rlc", all.@"image/vnd.fujixerox.edmics-rlc" }, -    .{ .@"rld", all.@"application/resource-lists-diff+xml" }, -    .{ .@"rm", all.@"application/vnd.rn-realmedia" }, -    .{ .@"rmi", all.@"audio/midi" }, -    .{ .@"rmp", all.@"audio/x-pn-realaudio-plugin" }, -    .{ .@"rms", all.@"application/vnd.jcp.javame.midlet-rms" }, -    .{ .@"rmvb", all.@"application/vnd.rn-realmedia-vbr" }, -    .{ .@"rnc", all.@"application/relax-ng-compact-syntax" }, -    .{ .@"rng", all.@"application/xml" }, -    .{ .@"roa", all.@"application/rpki-roa" }, -    .{ .@"roff", all.@"text/troff" }, -    .{ .@"rp9", all.@"application/vnd.cloanto.rp9" }, -    .{ .@"rpm", all.@"application/x-redhat-package-manager" }, -    .{ .@"rpss", all.@"application/vnd.nokia.radio-presets" }, -    .{ .@"rpst", all.@"application/vnd.nokia.radio-preset" }, -    .{ .@"rq", all.@"application/sparql-query" }, -    .{ .@"rs", all.@"application/rls-services+xml" }, -    .{ .@"rsat", all.@"application/atsc-rsat+xml" }, -    .{ .@"rsd", all.@"application/rsd+xml" }, -    .{ .@"rsheet", all.@"application/urc-ressheet+xml" }, -    .{ .@"rss", all.@"application/rss+xml" }, -    .{ .@"rtf", all.@"application/rtf" }, -    .{ .@"rtf", all.@"text/rtf" }, -    .{ .@"rtx", all.@"text/richtext" }, -    .{ .@"run", all.@"application/x-makeself" }, -    .{ .@"rusd", all.@"application/route-usd+xml" }, -    .{ .@"s", all.@"text/x-asm" }, -    .{ .@"s3m", all.@"audio/s3m" }, -    .{ .@"saf", all.@"application/vnd.yamaha.smaf-audio" }, -    .{ .@"sass", all.@"text/x-sass" }, -    .{ .@"sbml", all.@"application/sbml+xml" }, -    .{ .@"sc", all.@"application/vnd.ibm.secure-container" }, -    .{ .@"scd", all.@"application/x-msschedule" }, -    .{ .@"scm", all.@"application/vnd.lotus-screencam" }, -    .{ .@"scq", all.@"application/scvp-cv-request" }, -    .{ .@"scs", all.@"application/scvp-cv-response" }, -    .{ .@"scss", all.@"text/x-scss" }, -    .{ .@"scurl", all.@"text/vnd.curl.scurl" }, -    .{ .@"sda", all.@"application/vnd.stardivision.draw" }, -    .{ .@"sdc", all.@"application/vnd.stardivision.calc" }, -    .{ .@"sdd", all.@"application/vnd.stardivision.impress" }, -    .{ .@"sdkd", all.@"application/vnd.solent.sdkm+xml" }, -    .{ .@"sdkm", all.@"application/vnd.solent.sdkm+xml" }, -    .{ .@"sdp", all.@"application/sdp" }, -    .{ .@"sdw", all.@"application/vnd.stardivision.writer" }, -    .{ .@"sea", all.@"application/x-sea" }, -    .{ .@"see", all.@"application/vnd.seemail" }, -    .{ .@"seed", all.@"application/vnd.fdsn.seed" }, -    .{ .@"sema", all.@"application/vnd.sema" }, -    .{ .@"semd", all.@"application/vnd.semd" }, -    .{ .@"semf", all.@"application/vnd.semf" }, -    .{ .@"senmlx", all.@"application/senml+xml" }, -    .{ .@"sensmlx", all.@"application/sensml+xml" }, -    .{ .@"ser", all.@"application/java-serialized-object" }, -    .{ .@"setpay", all.@"application/set-payment-initiation" }, -    .{ .@"setreg", all.@"application/set-registration-initiation" }, -    .{ .@"sfd-hdstx", all.@"application/vnd.hydrostatix.sof-data" }, -    .{ .@"sfs", all.@"application/vnd.spotfire.sfs" }, -    .{ .@"sfv", all.@"text/x-sfv" }, -    .{ .@"sgi", all.@"image/sgi" }, -    .{ .@"sgl", all.@"application/vnd.stardivision.writer-global" }, -    .{ .@"sgm", all.@"text/sgml" }, -    .{ .@"sgml", all.@"text/sgml" }, -    .{ .@"sh", all.@"application/x-sh" }, -    .{ .@"shar", all.@"application/x-shar" }, -    .{ .@"shex", all.@"text/shex" }, -    .{ .@"shf", all.@"application/shf+xml" }, -    .{ .@"shtml", all.@"text/html" }, -    .{ .@"sid", all.@"image/x-mrsid-image" }, -    .{ .@"sieve", all.@"application/sieve" }, -    .{ .@"sig", all.@"application/pgp-signature" }, -    .{ .@"sil", all.@"audio/silk" }, -    .{ .@"silo", all.@"model/mesh" }, -    .{ .@"sis", all.@"application/vnd.symbian.install" }, -    .{ .@"sisx", all.@"application/vnd.symbian.install" }, -    .{ .@"sit", all.@"application/x-stuffit" }, -    .{ .@"sitx", all.@"application/x-stuffitx" }, -    .{ .@"siv", all.@"application/sieve" }, -    .{ .@"skd", all.@"application/vnd.koan" }, -    .{ .@"skm", all.@"application/vnd.koan" }, -    .{ .@"skp", all.@"application/vnd.koan" }, -    .{ .@"skt", all.@"application/vnd.koan" }, -    .{ .@"sldm", all.@"application/vnd.ms-powerpoint.slide.macroenabled.12" }, -    .{ .@"sldx", all.@"application/vnd.openxmlformats-officedocument.presentationml.slide" }, -    .{ .@"slim", all.@"text/slim" }, -    .{ .@"slm", all.@"text/slim" }, -    .{ .@"sls", all.@"application/route-s-tsid+xml" }, -    .{ .@"slt", all.@"application/vnd.epson.salt" }, -    .{ .@"sm", all.@"application/vnd.stepmania.stepchart" }, -    .{ .@"smf", all.@"application/vnd.stardivision.math" }, -    .{ .@"smi", all.@"application/smil+xml" }, -    .{ .@"smil", all.@"application/smil+xml" }, -    .{ .@"smv", all.@"video/x-smv" }, -    .{ .@"smzip", all.@"application/vnd.stepmania.package" }, -    .{ .@"snd", all.@"audio/basic" }, -    .{ .@"snf", all.@"application/x-font-snf" }, -    .{ .@"so", all.@"application/octet-stream" }, -    .{ .@"spc", all.@"application/x-pkcs7-certificates" }, -    .{ .@"spdx", all.@"text/spdx" }, -    .{ .@"spf", all.@"application/vnd.yamaha.smaf-phrase" }, -    .{ .@"spl", all.@"application/x-futuresplash" }, -    .{ .@"spot", all.@"text/vnd.in3d.spot" }, -    .{ .@"spp", all.@"application/scvp-vp-response" }, -    .{ .@"spq", all.@"application/scvp-vp-request" }, -    .{ .@"spx", all.@"audio/ogg" }, -    .{ .@"sql", all.@"application/x-sql" }, -    .{ .@"src", all.@"application/x-wais-source" }, -    .{ .@"srt", all.@"application/x-subrip" }, -    .{ .@"sru", all.@"application/sru+xml" }, -    .{ .@"srx", all.@"application/sparql-results+xml" }, -    .{ .@"ssdl", all.@"application/ssdl+xml" }, -    .{ .@"sse", all.@"application/vnd.kodak-descriptor" }, -    .{ .@"ssf", all.@"application/vnd.epson.ssf" }, -    .{ .@"ssml", all.@"application/ssml+xml" }, -    .{ .@"st", all.@"application/vnd.sailingtracker.track" }, -    .{ .@"stc", all.@"application/vnd.sun.xml.calc.template" }, -    .{ .@"std", all.@"application/vnd.sun.xml.draw.template" }, -    .{ .@"stf", all.@"application/vnd.wt.stf" }, -    .{ .@"sti", all.@"application/vnd.sun.xml.impress.template" }, -    .{ .@"stk", all.@"application/hyperstudio" }, -    .{ .@"stl", all.@"application/vnd.ms-pki.stl" }, -    .{ .@"stl", all.@"model/stl" }, -    .{ .@"stpx", all.@"model/step+xml" }, -    .{ .@"stpxz", all.@"model/step-xml+zip" }, -    .{ .@"stpz", all.@"model/step+zip" }, -    .{ .@"str", all.@"application/vnd.pg.format" }, -    .{ .@"stw", all.@"application/vnd.sun.xml.writer.template" }, -    .{ .@"styl", all.@"text/stylus" }, -    .{ .@"stylus", all.@"text/stylus" }, -    .{ .@"sub", all.@"image/vnd.dvb.subtitle" }, -    .{ .@"sub", all.@"text/vnd.dvb.subtitle" }, -    .{ .@"sus", all.@"application/vnd.sus-calendar" }, -    .{ .@"susp", all.@"application/vnd.sus-calendar" }, -    .{ .@"sv4cpio", all.@"application/x-sv4cpio" }, -    .{ .@"sv4crc", all.@"application/x-sv4crc" }, -    .{ .@"svc", all.@"application/vnd.dvb.service" }, -    .{ .@"svd", all.@"application/vnd.svd" }, -    .{ .@"svg", all.@"image/svg+xml" }, -    .{ .@"svgz", all.@"image/svg+xml" }, -    .{ .@"swa", all.@"application/x-director" }, -    .{ .@"swf", all.@"application/x-shockwave-flash" }, -    .{ .@"swi", all.@"application/vnd.aristanetworks.swi" }, -    .{ .@"swidtag", all.@"application/swid+xml" }, -    .{ .@"sxc", all.@"application/vnd.sun.xml.calc" }, -    .{ .@"sxd", all.@"application/vnd.sun.xml.draw" }, -    .{ .@"sxg", all.@"application/vnd.sun.xml.writer.global" }, -    .{ .@"sxi", all.@"application/vnd.sun.xml.impress" }, -    .{ .@"sxm", all.@"application/vnd.sun.xml.math" }, -    .{ .@"sxw", all.@"application/vnd.sun.xml.writer" }, -    .{ .@"t", all.@"text/troff" }, -    .{ .@"t3", all.@"application/x-t3vm-image" }, -    .{ .@"t38", all.@"image/t38" }, -    .{ .@"taglet", all.@"application/vnd.mynfc" }, -    .{ .@"tao", all.@"application/vnd.tao.intent-module-archive" }, -    .{ .@"tap", all.@"image/vnd.tencent.tap" }, -    .{ .@"tar", all.@"application/x-tar" }, -    .{ .@"tcap", all.@"application/vnd.3gpp2.tcap" }, -    .{ .@"tcl", all.@"application/x-tcl" }, -    .{ .@"td", all.@"application/urc-targetdesc+xml" }, -    .{ .@"teacher", all.@"application/vnd.smart.teacher" }, -    .{ .@"tei", all.@"application/tei+xml" }, -    .{ .@"teicorpus", all.@"application/tei+xml" }, -    .{ .@"tex", all.@"application/x-tex" }, -    .{ .@"texi", all.@"application/x-texinfo" }, -    .{ .@"texinfo", all.@"application/x-texinfo" }, -    .{ .@"text", all.@"text/plain" }, -    .{ .@"tfi", all.@"application/thraud+xml" }, -    .{ .@"tfm", all.@"application/x-tex-tfm" }, -    .{ .@"tfx", all.@"image/tiff-fx" }, -    .{ .@"tga", all.@"image/x-tga" }, -    .{ .@"thmx", all.@"application/vnd.ms-officetheme" }, -    .{ .@"tif", all.@"image/tiff" }, -    .{ .@"tiff", all.@"image/tiff" }, -    .{ .@"tk", all.@"application/x-tcl" }, -    .{ .@"tmo", all.@"application/vnd.tmobile-livetv" }, -    .{ .@"toml", all.@"application/toml" }, -    .{ .@"torrent", all.@"application/x-bittorrent" }, -    .{ .@"tpl", all.@"application/vnd.groove-tool-template" }, -    .{ .@"tpt", all.@"application/vnd.trid.tpt" }, -    .{ .@"tr", all.@"text/troff" }, -    .{ .@"tra", all.@"application/vnd.trueapp" }, -    .{ .@"trig", all.@"application/trig" }, -    .{ .@"trm", all.@"application/x-msterminal" }, -    .{ .@"ts", all.@"application/javascript" }, -    .{ .@"ts", all.@"video/mp2t" }, -    .{ .@"tsd", all.@"application/timestamped-data" }, -    .{ .@"tsv", all.@"text/tab-separated-values" }, -    .{ .@"tsx", all.@"application/javascript" }, -    .{ .@"ttc", all.@"font/collection" }, -    .{ .@"ttf", all.@"font/ttf" }, -    .{ .@"ttl", all.@"text/turtle" }, -    .{ .@"ttml", all.@"application/ttml+xml" }, -    .{ .@"twd", all.@"application/vnd.simtech-mindmapper" }, -    .{ .@"twds", all.@"application/vnd.simtech-mindmapper" }, -    .{ .@"txd", all.@"application/vnd.genomatix.tuxedo" }, -    .{ .@"txf", all.@"application/vnd.mobius.txf" }, -    .{ .@"txt", all.@"text/plain" }, -    .{ .@"u32", all.@"application/x-authorware-bin" }, -    .{ .@"u3d", all.@"model/u3d" }, -    .{ .@"u8dsn", all.@"message/global-delivery-status" }, -    .{ .@"u8hdr", all.@"message/global-headers" }, -    .{ .@"u8mdn", all.@"message/global-disposition-notification" }, -    .{ .@"u8msg", all.@"message/global" }, -    .{ .@"ubj", all.@"application/ubjson" }, -    .{ .@"udeb", all.@"application/x-debian-package" }, -    .{ .@"ufd", all.@"application/vnd.ufdl" }, -    .{ .@"ufdl", all.@"application/vnd.ufdl" }, -    .{ .@"ulx", all.@"application/x-glulx" }, -    .{ .@"umj", all.@"application/vnd.umajin" }, -    .{ .@"unityweb", all.@"application/vnd.unity" }, -    .{ .@"uoml", all.@"application/vnd.uoml+xml" }, -    .{ .@"uri", all.@"text/uri-list" }, -    .{ .@"uris", all.@"text/uri-list" }, -    .{ .@"urls", all.@"text/uri-list" }, -    .{ .@"usdz", all.@"model/vnd.usdz+zip" }, -    .{ .@"ustar", all.@"application/x-ustar" }, -    .{ .@"utz", all.@"application/vnd.uiq.theme" }, -    .{ .@"uu", all.@"text/x-uuencode" }, -    .{ .@"uva", all.@"audio/vnd.dece.audio" }, -    .{ .@"uvd", all.@"application/vnd.dece.data" }, -    .{ .@"uvf", all.@"application/vnd.dece.data" }, -    .{ .@"uvg", all.@"image/vnd.dece.graphic" }, -    .{ .@"uvh", all.@"video/vnd.dece.hd" }, -    .{ .@"uvi", all.@"image/vnd.dece.graphic" }, -    .{ .@"uvm", all.@"video/vnd.dece.mobile" }, -    .{ .@"uvp", all.@"video/vnd.dece.pd" }, -    .{ .@"uvs", all.@"video/vnd.dece.sd" }, -    .{ .@"uvt", all.@"application/vnd.dece.ttml+xml" }, -    .{ .@"uvu", all.@"video/vnd.uvvu.mp4" }, -    .{ .@"uvv", all.@"video/vnd.dece.video" }, -    .{ .@"uvva", all.@"audio/vnd.dece.audio" }, -    .{ .@"uvvd", all.@"application/vnd.dece.data" }, -    .{ .@"uvvf", all.@"application/vnd.dece.data" }, -    .{ .@"uvvg", all.@"image/vnd.dece.graphic" }, -    .{ .@"uvvh", all.@"video/vnd.dece.hd" }, -    .{ .@"uvvi", all.@"image/vnd.dece.graphic" }, -    .{ .@"uvvm", all.@"video/vnd.dece.mobile" }, -    .{ .@"uvvp", all.@"video/vnd.dece.pd" }, -    .{ .@"uvvs", all.@"video/vnd.dece.sd" }, -    .{ .@"uvvt", all.@"application/vnd.dece.ttml+xml" }, -    .{ .@"uvvu", all.@"video/vnd.uvvu.mp4" }, -    .{ .@"uvvv", all.@"video/vnd.dece.video" }, -    .{ .@"uvvx", all.@"application/vnd.dece.unspecified" }, -    .{ .@"uvvz", all.@"application/vnd.dece.zip" }, -    .{ .@"uvx", all.@"application/vnd.dece.unspecified" }, -    .{ .@"uvz", all.@"application/vnd.dece.zip" }, -    .{ .@"vbox-extpack", all.@"application/x-virtualbox-vbox-extpack" }, -    .{ .@"vbox", all.@"application/x-virtualbox-vbox" }, -    .{ .@"vcard", all.@"text/vcard" }, -    .{ .@"vcd", all.@"application/x-cdlink" }, -    .{ .@"vcf", all.@"text/x-vcard" }, -    .{ .@"vcg", all.@"application/vnd.groove-vcard" }, -    .{ .@"vcs", all.@"text/x-vcalendar" }, -    .{ .@"vcx", all.@"application/vnd.vcx" }, -    .{ .@"vdi", all.@"application/x-virtualbox-vdi" }, -    .{ .@"vds", all.@"model/vnd.sap.vds" }, -    .{ .@"vhd", all.@"application/x-virtualbox-vhd" }, -    .{ .@"vis", all.@"application/vnd.visionary" }, -    .{ .@"viv", all.@"video/vnd.vivo" }, -    .{ .@"vmdk", all.@"application/x-virtualbox-vmdk" }, -    .{ .@"vob", all.@"video/x-ms-vob" }, -    .{ .@"vor", all.@"application/vnd.stardivision.writer" }, -    .{ .@"vox", all.@"application/x-authorware-bin" }, -    .{ .@"vrml", all.@"model/vrml" }, -    .{ .@"vsd", all.@"application/vnd.visio" }, -    .{ .@"vsf", all.@"application/vnd.vsf" }, -    .{ .@"vss", all.@"application/vnd.visio" }, -    .{ .@"vst", all.@"application/vnd.visio" }, -    .{ .@"vsw", all.@"application/vnd.visio" }, -    .{ .@"vtf", all.@"image/vnd.valve.source.texture" }, -    .{ .@"vtt", all.@"text/vtt" }, -    .{ .@"vtu", all.@"model/vnd.vtu" }, -    .{ .@"vxml", all.@"application/voicexml+xml" }, -    .{ .@"w3d", all.@"application/x-director" }, -    .{ .@"wad", all.@"application/x-doom" }, -    .{ .@"wadl", all.@"application/vnd.sun.wadl+xml" }, -    .{ .@"war", all.@"application/java-archive" }, -    .{ .@"wasm", wasm }, -    .{ .@"wav", all.@"audio/wav" }, -    .{ .@"wav", all.@"audio/wave" }, -    .{ .@"wav", all.@"audio/x-wav" }, -    .{ .@"wax", all.@"audio/x-ms-wax" }, -    .{ .@"wbmp", all.@"image/vnd.wap.wbmp" }, -    .{ .@"wbs", all.@"application/vnd.criticaltools.wbs+xml" }, -    .{ .@"wbxml", all.@"application/vnd.wap.wbxml" }, -    .{ .@"wcm", all.@"application/vnd.ms-works" }, -    .{ .@"wdb", all.@"application/vnd.ms-works" }, -    .{ .@"wdp", all.@"image/vnd.ms-photo" }, -    .{ .@"weba", all.@"audio/webm" }, -    .{ .@"webapp", all.@"application/x-web-app-manifest+json" }, -    .{ .@"webm", all.@"video/webm" }, -    .{ .@"webmanifest", all.@"application/manifest+json" }, -    .{ .@"webp", all.@"image/webp" }, -    .{ .@"wg", all.@"application/vnd.pmi.widget" }, -    .{ .@"wgt", all.@"application/widget" }, -    .{ .@"wif", all.@"application/watcherinfo+xml" }, -    .{ .@"wks", all.@"application/vnd.ms-works" }, -    .{ .@"wm", all.@"video/x-ms-wm" }, -    .{ .@"wma", all.@"audio/x-ms-wma" }, -    .{ .@"wmd", all.@"application/x-ms-wmd" }, -    .{ .@"wmf", all.@"application/x-msmetafile" }, -    .{ .@"wmf", all.@"image/wmf" }, -    .{ .@"wml", all.@"text/vnd.wap.wml" }, -    .{ .@"wmlc", all.@"application/vnd.wap.wmlc" }, -    .{ .@"wmls", all.@"text/vnd.wap.wmlscript" }, -    .{ .@"wmlsc", all.@"application/vnd.wap.wmlscriptc" }, -    .{ .@"wmv", all.@"video/x-ms-wmv" }, -    .{ .@"wmx", all.@"video/x-ms-wmx" }, -    .{ .@"wmz", all.@"application/x-ms-wmz" }, -    .{ .@"wmz", all.@"application/x-msmetafile" }, -    .{ .@"woff", all.@"font/woff" }, -    .{ .@"woff2", all.@"font/woff2" }, -    .{ .@"wpd", all.@"application/vnd.wordperfect" }, -    .{ .@"wpl", all.@"application/vnd.ms-wpl" }, -    .{ .@"wps", all.@"application/vnd.ms-works" }, -    .{ .@"wqd", all.@"application/vnd.wqd" }, -    .{ .@"wri", all.@"application/x-mswrite" }, -    .{ .@"wrl", all.@"model/vrml" }, -    .{ .@"wsc", all.@"message/vnd.wfa.wsc" }, -    .{ .@"wsdl", all.@"application/wsdl+xml" }, -    .{ .@"wspolicy", all.@"application/wspolicy+xml" }, -    .{ .@"wtb", all.@"application/vnd.webturbo" }, -    .{ .@"wvx", all.@"video/x-ms-wvx" }, -    .{ .@"x_b", all.@"model/vnd.parasolid.transmit.binary" }, -    .{ .@"x_t", all.@"model/vnd.parasolid.transmit.text" }, -    .{ .@"x32", all.@"application/x-authorware-bin" }, -    .{ .@"x3d", all.@"model/x3d+xml" }, -    .{ .@"x3db", all.@"model/x3d+binary" }, -    .{ .@"x3db", all.@"model/x3d+fastinfoset" }, -    .{ .@"x3dbz", all.@"model/x3d+binary" }, -    .{ .@"x3dv", all.@"model/x3d-vrml" }, -    .{ .@"x3dv", all.@"model/x3d+vrml" }, -    .{ .@"x3dvz", all.@"model/x3d+vrml" }, -    .{ .@"x3dz", all.@"model/x3d+xml" }, -    .{ .@"xaml", all.@"application/xaml+xml" }, -    .{ .@"xap", all.@"application/x-silverlight-app" }, -    .{ .@"xar", all.@"application/vnd.xara" }, -    .{ .@"xav", all.@"application/xcap-att+xml" }, -    .{ .@"xbap", all.@"application/x-ms-xbap" }, -    .{ .@"xbd", all.@"application/vnd.fujixerox.docuworks.binder" }, -    .{ .@"xbm", all.@"image/x-xbitmap" }, -    .{ .@"xca", all.@"application/xcap-caps+xml" }, -    .{ .@"xcs", all.@"application/calendar+xml" }, -    .{ .@"xdf", all.@"application/xcap-diff+xml" }, -    .{ .@"xdm", all.@"application/vnd.syncml.dm+xml" }, -    .{ .@"xdp", all.@"application/vnd.adobe.xdp+xml" }, -    .{ .@"xdssc", all.@"application/dssc+xml" }, -    .{ .@"xdw", all.@"application/vnd.fujixerox.docuworks" }, -    .{ .@"xel", all.@"application/xcap-el+xml" }, -    .{ .@"xenc", all.@"application/xenc+xml" }, -    .{ .@"xer", all.@"application/patch-ops-error+xml" }, -    .{ .@"xfdf", all.@"application/vnd.adobe.xfdf" }, -    .{ .@"xfdl", all.@"application/vnd.xfdl" }, -    .{ .@"xht", all.@"application/xhtml+xml" }, -    .{ .@"xhtml", all.@"application/xhtml+xml" }, -    .{ .@"xhvml", all.@"application/xv+xml" }, -    .{ .@"xif", all.@"image/vnd.xiff" }, -    .{ .@"xla", all.@"application/vnd.ms-excel" }, -    .{ .@"xlam", all.@"application/vnd.ms-excel.addin.macroenabled.12" }, -    .{ .@"xlc", all.@"application/vnd.ms-excel" }, -    .{ .@"xlf", all.@"application/x-xliff+xml" }, -    .{ .@"xlf", all.@"application/xliff+xml" }, -    .{ .@"xlm", all.@"application/vnd.ms-excel" }, -    .{ .@"xls", all.@"application/vnd.ms-excel" }, -    .{ .@"xlsb", all.@"application/vnd.ms-excel.sheet.binary.macroenabled.12" }, -    .{ .@"xlsm", all.@"application/vnd.ms-excel.sheet.macroenabled.12" }, -    .{ .@"xlsx", all.@"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }, -    .{ .@"xlt", all.@"application/vnd.ms-excel" }, -    .{ .@"xltm", all.@"application/vnd.ms-excel.template.macroenabled.12" }, -    .{ .@"xltx", all.@"application/vnd.openxmlformats-officedocument.spreadsheetml.template" }, -    .{ .@"xlw", all.@"application/vnd.ms-excel" }, -    .{ .@"xm", all.@"audio/xm" }, -    .{ .@"xml", all.@"application/xml" }, -    .{ .@"xml", all.@"text/xml" }, -    .{ .@"xns", all.@"application/xcap-ns+xml" }, -    .{ .@"xo", all.@"application/vnd.olpc-sugar" }, -    .{ .@"xop", all.@"application/xop+xml" }, -    .{ .@"xpi", all.@"application/x-xpinstall" }, -    .{ .@"xpl", all.@"application/xproc+xml" }, -    .{ .@"xpm", all.@"image/x-xpixmap" }, -    .{ .@"xpr", all.@"application/vnd.is-xpr" }, -    .{ .@"xps", all.@"application/vnd.ms-xpsdocument" }, -    .{ .@"xpw", all.@"application/vnd.intercon.formnet" }, -    .{ .@"xpx", all.@"application/vnd.intercon.formnet" }, -    .{ .@"xsd", all.@"application/xml" }, -    .{ .@"xsl", all.@"application/xml" }, -    .{ .@"xsl", all.@"application/xslt+xml" }, -    .{ .@"xslt", all.@"application/xslt+xml" }, -    .{ .@"xsm", all.@"application/vnd.syncml+xml" }, -    .{ .@"xspf", all.@"application/xspf+xml" }, -    .{ .@"xul", all.@"application/vnd.mozilla.xul+xml" }, -    .{ .@"xvm", all.@"application/xv+xml" }, -    .{ .@"xvml", all.@"application/xv+xml" }, -    .{ .@"xwd", all.@"image/x-xwindowdump" }, -    .{ .@"xyz", all.@"chemical/x-xyz" }, -    .{ .@"xz", all.@"application/x-xz" }, -    .{ .@"yaml", all.@"text/yaml" }, -    .{ .@"yang", all.@"application/yang" }, -    .{ .@"yin", all.@"application/yin+xml" }, -    .{ .@"yml", all.@"text/yaml" }, -    .{ .@"ymp", all.@"text/x-suse-ymp" }, -    .{ .@"z1", all.@"application/x-zmachine" }, -    .{ .@"z2", all.@"application/x-zmachine" }, -    .{ .@"z3", all.@"application/x-zmachine" }, -    .{ .@"z4", all.@"application/x-zmachine" }, -    .{ .@"z5", all.@"application/x-zmachine" }, -    .{ .@"z6", all.@"application/x-zmachine" }, -    .{ .@"z7", all.@"application/x-zmachine" }, -    .{ .@"z8", all.@"application/x-zmachine" }, -    .{ .@"zaz", all.@"application/vnd.zzazz.deck+xml" }, -    .{ .@"zip", all.@"application/zip" }, -    .{ .@"zir", all.@"application/vnd.zul" }, -    .{ .@"zirz", all.@"application/vnd.zul" }, -    .{ .@"zmm", all.@"application/vnd.handheld-entertainment+xml" }, +    .{ "123", all.@"application/vnd.lotus-1-2-3" }, +    .{ "1km", all.@"application/vnd.1000minds.decision-model+xml" }, +    .{ "3dml", all.@"text/vnd.in3d.3dml" }, +    .{ "3ds", all.@"image/x-3ds" }, +    .{ "3g2", all.@"video/3gpp2" }, +    .{ "3gp", all.@"video/3gpp" }, +    .{ "3gpp", all.@"video/3gpp" }, +    .{ "3mf", all.@"model/3mf" }, +    .{ "7z", all.@"application/x-7z-compressed" }, +    .{ "aab", all.@"application/x-authorware-bin" }, +    .{ "aac", all.@"audio/x-aac" }, +    .{ "aam", all.@"application/x-authorware-map" }, +    .{ "aas", all.@"application/x-authorware-seg" }, +    .{ "abw", all.@"application/x-abiword" }, +    .{ "ac", all.@"application/vnd.nokia.n-gage.ac+xml" }, +    .{ "acc", all.@"application/vnd.americandynamics.acc" }, +    .{ "ace", all.@"application/x-ace-compressed" }, +    .{ "acu", all.@"application/vnd.acucobol" }, +    .{ "acutc", all.@"application/vnd.acucorp" }, +    .{ "adp", all.@"audio/adpcm" }, +    .{ "aep", all.@"application/vnd.audiograph" }, +    .{ "afm", all.@"application/x-font-type1" }, +    .{ "afp", all.@"application/vnd.ibm.modcap" }, +    .{ "age", all.@"application/vnd.age" }, +    .{ "ahead", all.@"application/vnd.ahead.space" }, +    .{ "ai", all.@"application/postscript" }, +    .{ "aif", all.@"audio/x-aiff" }, +    .{ "aifc", all.@"audio/x-aiff" }, +    .{ "aiff", all.@"audio/x-aiff" }, +    .{ "air", all.@"application/vnd.adobe.air-application-installer-package+zip" }, +    .{ "ait", all.@"application/vnd.dvb.ait" }, +    .{ "ami", all.@"application/vnd.amiga.ami" }, +    .{ "amr", all.@"audio/amr" }, +    .{ "apk", all.@"application/vnd.android.package-archive" }, +    .{ "apng", all.@"image/apng" }, +    .{ "appcache", all.@"text/cache-manifest" }, +    .{ "application", all.@"application/x-ms-application" }, +    .{ "apr", all.@"application/vnd.lotus-approach" }, +    .{ "arc", all.@"application/x-freearc" }, +    .{ "arj", all.@"application/x-arj" }, +    .{ "asc", all.@"application/pgp-signature" }, +    .{ "asf", all.@"video/x-ms-asf" }, +    .{ "asm", all.@"text/x-asm" }, +    .{ "aso", all.@"application/vnd.accpac.simply.aso" }, +    .{ "asx", all.@"video/x-ms-asf" }, +    .{ "atc", all.@"application/vnd.acucorp" }, +    .{ "atom", all.@"application/atom+xml" }, +    .{ "atomcat", all.@"application/atomcat+xml" }, +    .{ "atomdeleted", all.@"application/atomdeleted+xml" }, +    .{ "atomsvc", all.@"application/atomsvc+xml" }, +    .{ "atx", all.@"application/vnd.antix.game-component" }, +    .{ "au", all.@"audio/basic" }, +    .{ "avci", all.@"image/avci" }, +    .{ "avcs", all.@"image/avcs" }, +    .{ "avi", all.@"video/x-msvideo" }, +    .{ "avif", all.@"image/avif" }, +    .{ "aw", all.@"application/applixware" }, +    .{ "azf", all.@"application/vnd.airzip.filesecure.azf" }, +    .{ "azs", all.@"application/vnd.airzip.filesecure.azs" }, +    .{ "azv", all.@"image/vnd.airzip.accelerator.azv" }, +    .{ "azw", all.@"application/vnd.amazon.ebook" }, +    .{ "b16", all.@"image/vnd.pco.b16" }, +    .{ "bat", all.@"application/x-msdownload" }, +    .{ "bcpio", all.@"application/x-bcpio" }, +    .{ "bdf", all.@"application/x-font-bdf" }, +    .{ "bdm", all.@"application/vnd.syncml.dm+wbxml" }, +    .{ "bdoc", all.@"application/x-bdoc" }, +    .{ "bed", all.@"application/vnd.realvnc.bed" }, +    .{ "bh2", all.@"application/vnd.fujitsu.oasysprs" }, +    .{ "bin", all.@"application/octet-stream" }, +    .{ "blb", all.@"application/x-blorb" }, +    .{ "blorb", all.@"application/x-blorb" }, +    .{ "bmi", all.@"application/vnd.bmi" }, +    .{ "bmml", all.@"application/vnd.balsamiq.bmml+xml" }, +    .{ "bmp", all.@"image/x-ms-bmp" }, +    .{ "book", all.@"application/vnd.framemaker" }, +    .{ "box", all.@"application/vnd.previewsystems.box" }, +    .{ "boz", all.@"application/x-bzip2" }, +    .{ "bpk", all.@"application/octet-stream" }, +    .{ "bsp", all.@"model/vnd.valve.source.compiled-map" }, +    .{ "btif", all.@"image/prs.btif" }, +    .{ "buffer", all.@"application/octet-stream" }, +    .{ "bz", all.@"application/x-bzip" }, +    .{ "bz2", all.@"application/x-bzip2" }, +    .{ "c", all.@"text/x-c" }, +    .{ "c11amc", all.@"application/vnd.cluetrust.cartomobile-config" }, +    .{ "c11amz", all.@"application/vnd.cluetrust.cartomobile-config-pkg" }, +    .{ "c4d", all.@"application/vnd.clonk.c4group" }, +    .{ "c4f", all.@"application/vnd.clonk.c4group" }, +    .{ "c4g", all.@"application/vnd.clonk.c4group" }, +    .{ "c4p", all.@"application/vnd.clonk.c4group" }, +    .{ "c4u", all.@"application/vnd.clonk.c4group" }, +    .{ "cab", all.@"application/vnd.ms-cab-compressed" }, +    .{ "caf", all.@"audio/x-caf" }, +    .{ "cap", all.@"application/vnd.tcpdump.pcap" }, +    .{ "car", all.@"application/vnd.curl.car" }, +    .{ "cat", all.@"application/vnd.ms-pki.seccat" }, +    .{ "cb7", all.@"application/x-cbr" }, +    .{ "cba", all.@"application/x-cbr" }, +    .{ "cbr", all.@"application/x-cbr" }, +    .{ "cbt", all.@"application/x-cbr" }, +    .{ "cbz", all.@"application/x-cbr" }, +    .{ "cc", all.@"text/x-c" }, +    .{ "cco", all.@"application/x-cocoa" }, +    .{ "cct", all.@"application/x-director" }, +    .{ "ccxml", all.@"application/ccxml+xml" }, +    .{ "cdbcmsg", all.@"application/vnd.contact.cmsg" }, +    .{ "cdf", all.@"application/x-netcdf" }, +    .{ "cdfx", all.@"application/cdfx+xml" }, +    .{ "cdkey", all.@"application/vnd.mediastation.cdkey" }, +    .{ "cdmia", all.@"application/cdmi-capability" }, +    .{ "cdmic", all.@"application/cdmi-container" }, +    .{ "cdmid", all.@"application/cdmi-domain" }, +    .{ "cdmio", all.@"application/cdmi-object" }, +    .{ "cdmiq", all.@"application/cdmi-queue" }, +    .{ "cdx", all.@"chemical/x-cdx" }, +    .{ "cdxml", all.@"application/vnd.chemdraw+xml" }, +    .{ "cdy", all.@"application/vnd.cinderella" }, +    .{ "cer", all.@"application/pkix-cert" }, +    .{ "cfs", all.@"application/x-cfs-compressed" }, +    .{ "cgm", all.@"image/cgm" }, +    .{ "chat", all.@"application/x-chat" }, +    .{ "chm", all.@"application/vnd.ms-htmlhelp" }, +    .{ "chrt", all.@"application/vnd.kde.kchart" }, +    .{ "cif", all.@"chemical/x-cif" }, +    .{ "cii", all.@"application/vnd.anser-web-certificate-issue-initiation" }, +    .{ "cil", all.@"application/vnd.ms-artgalry" }, +    .{ "cjs", all.@"application/javascript" }, +    .{ "cla", all.@"application/vnd.claymore" }, +    .{ "class", all.@"application/java-vm" }, +    .{ "clkk", all.@"application/vnd.crick.clicker.keyboard" }, +    .{ "clkp", all.@"application/vnd.crick.clicker.palette" }, +    .{ "clkt", all.@"application/vnd.crick.clicker.template" }, +    .{ "clkw", all.@"application/vnd.crick.clicker.wordbank" }, +    .{ "clkx", all.@"application/vnd.crick.clicker" }, +    .{ "clp", all.@"application/x-msclip" }, +    .{ "cmc", all.@"application/vnd.cosmocaller" }, +    .{ "cmdf", all.@"chemical/x-cmdf" }, +    .{ "cml", all.@"chemical/x-cml" }, +    .{ "cmp", all.@"application/vnd.yellowriver-custom-menu" }, +    .{ "cmx", all.@"image/x-cmx" }, +    .{ "cod", all.@"application/vnd.rim.cod" }, +    .{ "coffee", all.@"text/coffeescript" }, +    .{ "com", all.@"application/x-msdownload" }, +    .{ "conf", all.@"text/plain" }, +    .{ "cpio", all.@"application/x-cpio" }, +    .{ "cpl", all.@"application/cpl+xml" }, +    .{ "cpp", all.@"text/x-c" }, +    .{ "cpt", all.@"application/mac-compactpro" }, +    .{ "crd", all.@"application/x-mscardfile" }, +    .{ "crl", all.@"application/pkix-crl" }, +    .{ "crt", all.@"application/x-x509-ca-cert" }, +    .{ "crx", all.@"application/x-chrome-extension" }, +    .{ "cryptonote", all.@"application/vnd.rig.cryptonote" }, +    .{ "csh", all.@"application/x-csh" }, +    .{ "csl", all.@"application/vnd.citationstyles.style+xml" }, +    .{ "csml", all.@"chemical/x-csml" }, +    .{ "csp", all.@"application/vnd.commonspace" }, +    .{ "css", all.@"text/css" }, +    .{ "cst", all.@"application/x-director" }, +    .{ "csv", all.@"text/csv" }, +    .{ "cts", all.@"application/javascript" }, +    .{ "cu", all.@"application/cu-seeme" }, +    .{ "curl", all.@"text/vnd.curl" }, +    .{ "cww", all.@"application/prs.cww" }, +    .{ "cxt", all.@"application/x-director" }, +    .{ "cxx", all.@"text/x-c" }, +    .{ "dae", all.@"model/vnd.collada+xml" }, +    .{ "daf", all.@"application/vnd.mobius.daf" }, +    .{ "dart", all.@"application/vnd.dart" }, +    .{ "dataless", all.@"application/vnd.fdsn.seed" }, +    .{ "davmount", all.@"application/davmount+xml" }, +    .{ "dbf", all.@"application/vnd.dbf" }, +    .{ "dbk", all.@"application/docbook+xml" }, +    .{ "dcr", all.@"application/x-director" }, +    .{ "dcurl", all.@"text/vnd.curl.dcurl" }, +    .{ "dd2", all.@"application/vnd.oma.dd2+xml" }, +    .{ "ddd", all.@"application/vnd.fujixerox.ddd" }, +    .{ "ddf", all.@"application/vnd.syncml.dmddf+xml" }, +    .{ "dds", all.@"image/vnd.ms-dds" }, +    .{ "deb", all.@"application/x-debian-package" }, +    .{ "def", all.@"text/plain" }, +    .{ "deploy", all.@"application/octet-stream" }, +    .{ "der", all.@"application/x-x509-ca-cert" }, +    .{ "dfac", all.@"application/vnd.dreamfactory" }, +    .{ "dgc", all.@"application/x-dgc-compressed" }, +    .{ "dic", all.@"text/x-c" }, +    .{ "dir", all.@"application/x-director" }, +    .{ "dis", all.@"application/vnd.mobius.dis" }, +    .{ "disposition-n", all.@"message/disposition-notification" }, +    .{ "dist", all.@"application/octet-stream" }, +    .{ "distz", all.@"application/octet-stream" }, +    .{ "djv", all.@"image/vnd.djvu" }, +    .{ "djvu", all.@"image/vnd.djvu" }, +    .{ "dll", all.@"application/x-msdownload" }, +    .{ "dmg", all.@"application/x-apple-diskimage" }, +    .{ "dmp", all.@"application/vnd.tcpdump.pcap" }, +    .{ "dms", all.@"application/octet-stream" }, +    .{ "dna", all.@"application/vnd.dna" }, +    .{ "doc", all.@"application/msword" }, +    .{ "docm", all.@"application/vnd.ms-word.document.macroenabled.12" }, +    .{ "docx", all.@"application/vnd.openxmlformats-officedocument.wordprocessingml.document" }, +    .{ "dot", all.@"application/msword" }, +    .{ "dotm", all.@"application/vnd.ms-word.template.macroenabled.12" }, +    .{ "dotx", all.@"application/vnd.openxmlformats-officedocument.wordprocessingml.template" }, +    .{ "dp", all.@"application/vnd.osgi.dp" }, +    .{ "dpg", all.@"application/vnd.dpgraph" }, +    .{ "dra", all.@"audio/vnd.dra" }, +    .{ "drle", all.@"image/dicom-rle" }, +    .{ "dsc", all.@"text/prs.lines.tag" }, +    .{ "dssc", all.@"application/dssc+der" }, +    .{ "dtb", all.@"application/x-dtbook+xml" }, +    .{ "dtd", all.@"application/xml-dtd" }, +    .{ "dts", all.@"audio/vnd.dts" }, +    .{ "dtshd", all.@"audio/vnd.dts.hd" }, +    .{ "dump", all.@"application/octet-stream" }, +    .{ "dvb", all.@"video/vnd.dvb.file" }, +    .{ "dvi", all.@"application/x-dvi" }, +    .{ "dwd", all.@"application/atsc-dwd+xml" }, +    .{ "dwf", all.@"model/vnd.dwf" }, +    .{ "dwg", all.@"image/vnd.dwg" }, +    .{ "dxf", all.@"image/vnd.dxf" }, +    .{ "dxp", all.@"application/vnd.spotfire.dxp" }, +    .{ "dxr", all.@"application/x-director" }, +    .{ "ear", all.@"application/java-archive" }, +    .{ "ecelp4800", all.@"audio/vnd.nuera.ecelp4800" }, +    .{ "ecelp7470", all.@"audio/vnd.nuera.ecelp7470" }, +    .{ "ecelp9600", all.@"audio/vnd.nuera.ecelp9600" }, +    .{ "ecma", all.@"application/ecmascript" }, +    .{ "edm", all.@"application/vnd.novadigm.edm" }, +    .{ "edx", all.@"application/vnd.novadigm.edx" }, +    .{ "efif", all.@"application/vnd.picsel" }, +    .{ "ei6", all.@"application/vnd.pg.osasli" }, +    .{ "elc", all.@"application/octet-stream" }, +    .{ "emf", all.@"image/emf" }, +    .{ "eml", all.@"message/rfc822" }, +    .{ "emma", all.@"application/emma+xml" }, +    .{ "emotionml", all.@"application/emotionml+xml" }, +    .{ "emz", all.@"application/x-msmetafile" }, +    .{ "eol", all.@"audio/vnd.digital-winds" }, +    .{ "eot", all.@"application/vnd.ms-fontobject" }, +    .{ "eps", all.@"application/postscript" }, +    .{ "epub", all.@"application/epub+zip" }, +    .{ "es", all.@"application/ecmascript" }, +    .{ "es3", all.@"application/vnd.eszigno3+xml" }, +    .{ "esa", all.@"application/vnd.osgi.subsystem" }, +    .{ "esf", all.@"application/vnd.epson.esf" }, +    .{ "et3", all.@"application/vnd.eszigno3+xml" }, +    .{ "etx", all.@"text/x-setext" }, +    .{ "eva", all.@"application/x-eva" }, +    .{ "evy", all.@"application/x-envoy" }, +    .{ "exe", all.@"application/x-msdownload" }, +    .{ "exi", all.@"application/exi" }, +    .{ "exp", all.@"application/express" }, +    .{ "exr", all.@"image/aces" }, +    .{ "ext", all.@"application/vnd.novadigm.ext" }, +    .{ "ez", all.@"application/andrew-inset" }, +    .{ "ez2", all.@"application/vnd.ezpix-album" }, +    .{ "ez3", all.@"application/vnd.ezpix-package" }, +    .{ "f", all.@"text/x-fortran" }, +    .{ "f4v", all.@"video/x-f4v" }, +    .{ "f77", all.@"text/x-fortran" }, +    .{ "f90", all.@"text/x-fortran" }, +    .{ "fbs", all.@"image/vnd.fastbidsheet" }, +    .{ "fcdt", all.@"application/vnd.adobe.formscentral.fcdt" }, +    .{ "fcs", all.@"application/vnd.isac.fcs" }, +    .{ "fdf", all.@"application/vnd.fdf" }, +    .{ "fdt", all.@"application/fdt+xml" }, +    .{ "fe_launch", all.@"application/vnd.denovo.fcselayout-link" }, +    .{ "fg5", all.@"application/vnd.fujitsu.oasysgp" }, +    .{ "fgd", all.@"application/x-director" }, +    .{ "fh", all.@"image/x-freehand" }, +    .{ "fh4", all.@"image/x-freehand" }, +    .{ "fh5", all.@"image/x-freehand" }, +    .{ "fh7", all.@"image/x-freehand" }, +    .{ "fhc", all.@"image/x-freehand" }, +    .{ "fig", all.@"application/x-xfig" }, +    .{ "fits", all.@"image/fits" }, +    .{ "flac", all.@"audio/x-flac" }, +    .{ "fli", all.@"video/x-fli" }, +    .{ "flo", all.@"application/vnd.micrografx.flo" }, +    .{ "flv", all.@"video/x-flv" }, +    .{ "flw", all.@"application/vnd.kde.kivio" }, +    .{ "flx", all.@"text/vnd.fmi.flexstor" }, +    .{ "fly", all.@"text/vnd.fly" }, +    .{ "fm", all.@"application/vnd.framemaker" }, +    .{ "fnc", all.@"application/vnd.frogans.fnc" }, +    .{ "fo", all.@"application/vnd.software602.filler.form+xml" }, +    .{ "for", all.@"text/x-fortran" }, +    .{ "fpx", all.@"image/vnd.fpx" }, +    .{ "frame", all.@"application/vnd.framemaker" }, +    .{ "fsc", all.@"application/vnd.fsc.weblaunch" }, +    .{ "fst", all.@"image/vnd.fst" }, +    .{ "ftc", all.@"application/vnd.fluxtime.clip" }, +    .{ "fti", all.@"application/vnd.anser-web-funds-transfer-initiation" }, +    .{ "fvt", all.@"video/vnd.fvt" }, +    .{ "fxp", all.@"application/vnd.adobe.fxp" }, +    .{ "fxpl", all.@"application/vnd.adobe.fxp" }, +    .{ "fzs", all.@"application/vnd.fuzzysheet" }, +    .{ "g2w", all.@"application/vnd.geoplan" }, +    .{ "g3", all.@"image/g3fax" }, +    .{ "g3w", all.@"application/vnd.geospace" }, +    .{ "gac", all.@"application/vnd.groove-account" }, +    .{ "gam", all.@"application/x-tads" }, +    .{ "gbr", all.@"application/rpki-ghostbusters" }, +    .{ "gca", all.@"application/x-gca-compressed" }, +    .{ "gdl", all.@"model/vnd.gdl" }, +    .{ "gdoc", all.@"application/vnd.google-apps.document" }, +    .{ "ged", all.@"text/vnd.familysearch.gedcom" }, +    .{ "geo", all.@"application/vnd.dynageo" }, +    .{ "geojson", all.@"application/geo+json" }, +    .{ "gex", all.@"application/vnd.geometry-explorer" }, +    .{ "ggb", all.@"application/vnd.geogebra.file" }, +    .{ "ggt", all.@"application/vnd.geogebra.tool" }, +    .{ "ghf", all.@"application/vnd.groove-help" }, +    .{ "gif", all.@"image/gif" }, +    .{ "gim", all.@"application/vnd.groove-identity-message" }, +    .{ "glb", all.@"model/gltf-binary" }, +    .{ "gltf", all.@"model/gltf+json" }, +    .{ "gml", all.@"application/gml+xml" }, +    .{ "gmx", all.@"application/vnd.gmx" }, +    .{ "gnumeric", all.@"application/x-gnumeric" }, +    .{ "gph", all.@"application/vnd.flographit" }, +    .{ "gpx", all.@"application/gpx+xml" }, +    .{ "gqf", all.@"application/vnd.grafeq" }, +    .{ "gqs", all.@"application/vnd.grafeq" }, +    .{ "gram", all.@"application/srgs" }, +    .{ "gramps", all.@"application/x-gramps-xml" }, +    .{ "gre", all.@"application/vnd.geometry-explorer" }, +    .{ "grv", all.@"application/vnd.groove-injector" }, +    .{ "grxml", all.@"application/srgs+xml" }, +    .{ "gsf", all.@"application/x-font-ghostscript" }, +    .{ "gsheet", all.@"application/vnd.google-apps.spreadsheet" }, +    .{ "gslides", all.@"application/vnd.google-apps.presentation" }, +    .{ "gtar", all.@"application/x-gtar" }, +    .{ "gtm", all.@"application/vnd.groove-tool-message" }, +    .{ "gtw", all.@"model/vnd.gtw" }, +    .{ "gv", all.@"text/vnd.graphviz" }, +    .{ "gxf", all.@"application/gxf" }, +    .{ "gxt", all.@"application/vnd.geonext" }, +    .{ "gz", all.@"application/gzip" }, +    .{ "h", all.@"text/x-c" }, +    .{ "h261", all.@"video/h261" }, +    .{ "h263", all.@"video/h263" }, +    .{ "h264", all.@"video/h264" }, +    .{ "hal", all.@"application/vnd.hal+xml" }, +    .{ "hbci", all.@"application/vnd.hbci" }, +    .{ "hbs", all.@"text/x-handlebars-template" }, +    .{ "hdd", all.@"application/x-virtualbox-hdd" }, +    .{ "hdf", all.@"application/x-hdf" }, +    .{ "heic", all.@"image/heic" }, +    .{ "heics", all.@"image/heic-sequence" }, +    .{ "heif", all.@"image/heif" }, +    .{ "heifs", all.@"image/heif-sequence" }, +    .{ "hej2", all.@"image/hej2k" }, +    .{ "held", all.@"application/atsc-held+xml" }, +    .{ "hh", all.@"text/x-c" }, +    .{ "hjson", all.@"application/hjson" }, +    .{ "hlp", all.@"application/winhlp" }, +    .{ "hpgl", all.@"application/vnd.hp-hpgl" }, +    .{ "hpid", all.@"application/vnd.hp-hpid" }, +    .{ "hps", all.@"application/vnd.hp-hps" }, +    .{ "hqx", all.@"application/mac-binhex40" }, +    .{ "hsj2", all.@"image/hsj2" }, +    .{ "htc", all.@"text/x-component" }, +    .{ "htke", all.@"application/vnd.kenameaapp" }, +    .{ "htm", all.@"text/html" }, +    .{ "html", all.@"text/html" }, +    .{ "hvd", all.@"application/vnd.yamaha.hv-dic" }, +    .{ "hvp", all.@"application/vnd.yamaha.hv-voice" }, +    .{ "hvs", all.@"application/vnd.yamaha.hv-script" }, +    .{ "i2g", all.@"application/vnd.intergeo" }, +    .{ "icc", all.@"application/vnd.iccprofile" }, +    .{ "ice", all.@"x-conference/x-cooltalk" }, +    .{ "icm", all.@"application/vnd.iccprofile" }, +    .{ "ico", all.@"image/x-icon" }, +    .{ "ics", all.@"text/calendar" }, +    .{ "ief", all.@"image/ief" }, +    .{ "ifb", all.@"text/calendar" }, +    .{ "ifm", all.@"application/vnd.shana.informed.formdata" }, +    .{ "iges", all.@"model/iges" }, +    .{ "igl", all.@"application/vnd.igloader" }, +    .{ "igm", all.@"application/vnd.insors.igm" }, +    .{ "igs", all.@"model/iges" }, +    .{ "igx", all.@"application/vnd.micrografx.igx" }, +    .{ "iif", all.@"application/vnd.shana.informed.interchange" }, +    .{ "img", all.@"application/octet-stream" }, +    .{ "imp", all.@"application/vnd.accpac.simply.imp" }, +    .{ "ims", all.@"application/vnd.ms-ims" }, +    .{ "in", all.@"text/plain" }, +    .{ "ini", all.@"text/plain" }, +    .{ "ink", all.@"application/inkml+xml" }, +    .{ "inkml", all.@"application/inkml+xml" }, +    .{ "install", all.@"application/x-install-instructions" }, +    .{ "iota", all.@"application/vnd.astraea-software.iota" }, +    .{ "ipfix", all.@"application/ipfix" }, +    .{ "ipk", all.@"application/vnd.shana.informed.package" }, +    .{ "irm", all.@"application/vnd.ibm.rights-management" }, +    .{ "irp", all.@"application/vnd.irepository.package+xml" }, +    .{ "iso", all.@"application/x-iso9660-image" }, +    .{ "itp", all.@"application/vnd.shana.informed.formtemplate" }, +    .{ "its", all.@"application/its+xml" }, +    .{ "ivp", all.@"application/vnd.immervision-ivp" }, +    .{ "ivu", all.@"application/vnd.immervision-ivu" }, +    .{ "jad", all.@"text/vnd.sun.j2me.app-descriptor" }, +    .{ "jade", all.@"text/jade" }, +    .{ "jam", all.@"application/vnd.jam" }, +    .{ "jar", all.@"application/java-archive" }, +    .{ "jardiff", all.@"application/x-java-archive-diff" }, +    .{ "java", all.@"text/x-java-source" }, +    .{ "jhc", all.@"image/jphc" }, +    .{ "jisp", all.@"application/vnd.jisp" }, +    .{ "jls", all.@"image/jls" }, +    .{ "jlt", all.@"application/vnd.hp-jlyt" }, +    .{ "jng", all.@"image/x-jng" }, +    .{ "jnlp", all.@"application/x-java-jnlp-file" }, +    .{ "joda", all.@"application/vnd.joost.joda-archive" }, +    .{ "jp2", all.@"image/jp2" }, +    .{ "jpe", all.@"image/jpeg" }, +    .{ "jpeg", all.@"image/jpeg" }, +    .{ "jpf", all.@"image/jpx" }, +    .{ "jpg", all.@"image/jpeg" }, +    .{ "jpg2", all.@"image/jp2" }, +    .{ "jpgm", all.@"video/jpm" }, +    .{ "jpgv", all.@"video/jpeg" }, +    .{ "jph", all.@"image/jph" }, +    .{ "jpm", all.@"video/jpm" }, +    .{ "jpx", all.@"image/jpx" }, +    .{ "js", all.@"application/javascript" }, +    .{ "json", all.@"application/json" }, +    .{ "json5", all.@"application/json5" }, +    .{ "jsonld", all.@"application/ld+json" }, +    .{ "jsonml", all.@"application/jsonml+json" }, +    .{ "jsx", all.@"text/jsx" }, +    .{ "jxr", all.@"image/jxr" }, +    .{ "jxra", all.@"image/jxra" }, +    .{ "jxrs", all.@"image/jxrs" }, +    .{ "jxs", all.@"image/jxs" }, +    .{ "jxsc", all.@"image/jxsc" }, +    .{ "jxsi", all.@"image/jxsi" }, +    .{ "jxss", all.@"image/jxss" }, +    .{ "kar", all.@"audio/midi" }, +    .{ "karbon", all.@"application/vnd.kde.karbon" }, +    .{ "kdbx", all.@"application/x-keepass2" }, +    .{ "key", all.@"application/x-iwork-keynote-sffkey" }, +    .{ "kfo", all.@"application/vnd.kde.kformula" }, +    .{ "kia", all.@"application/vnd.kidspiration" }, +    .{ "kml", all.@"application/vnd.google-earth.kml+xml" }, +    .{ "kmz", all.@"application/vnd.google-earth.kmz" }, +    .{ "kne", all.@"application/vnd.kinar" }, +    .{ "knp", all.@"application/vnd.kinar" }, +    .{ "kon", all.@"application/vnd.kde.kontour" }, +    .{ "kpr", all.@"application/vnd.kde.kpresenter" }, +    .{ "kpt", all.@"application/vnd.kde.kpresenter" }, +    .{ "kpxx", all.@"application/vnd.ds-keypoint" }, +    .{ "ksp", all.@"application/vnd.kde.kspread" }, +    .{ "ktr", all.@"application/vnd.kahootz" }, +    .{ "ktx", all.@"image/ktx" }, +    .{ "ktx2", all.@"image/ktx2" }, +    .{ "ktz", all.@"application/vnd.kahootz" }, +    .{ "kwd", all.@"application/vnd.kde.kword" }, +    .{ "kwt", all.@"application/vnd.kde.kword" }, +    .{ "lasxml", all.@"application/vnd.las.las+xml" }, +    .{ "latex", all.@"application/x-latex" }, +    .{ "lbd", all.@"application/vnd.llamagraphics.life-balance.desktop" }, +    .{ "lbe", all.@"application/vnd.llamagraphics.life-balance.exchange+xml" }, +    .{ "les", all.@"application/vnd.hhe.lesson-player" }, +    .{ "less", all.@"text/less" }, +    .{ "lgr", all.@"application/lgr+xml" }, +    .{ "lha", all.@"application/x-lzh-compressed" }, +    .{ "link66", all.@"application/vnd.route66.link66+xml" }, +    .{ "list", all.@"text/plain" }, +    .{ "list3820", all.@"application/vnd.ibm.modcap" }, +    .{ "listafp", all.@"application/vnd.ibm.modcap" }, +    .{ "litcoffee", all.@"text/coffeescript" }, +    .{ "lnk", all.@"application/x-ms-shortcut" }, +    .{ "log", all.@"text/plain" }, +    .{ "lostxml", all.@"application/lost+xml" }, +    .{ "lrf", all.@"application/octet-stream" }, +    .{ "lrm", all.@"application/vnd.ms-lrm" }, +    .{ "ltf", all.@"application/vnd.frogans.ltf" }, +    .{ "lua", all.@"text/x-lua" }, +    .{ "luac", all.@"application/x-lua-bytecode" }, +    .{ "lvp", all.@"audio/vnd.lucent.voice" }, +    .{ "lwp", all.@"application/vnd.lotus-wordpro" }, +    .{ "lzh", all.@"application/x-lzh-compressed" }, +    .{ "m13", all.@"application/x-msmediaview" }, +    .{ "m14", all.@"application/x-msmediaview" }, +    .{ "m1v", all.@"video/mpeg" }, +    .{ "m21", all.@"application/mp21" }, +    .{ "m2a", all.@"audio/mpeg" }, +    .{ "m2v", all.@"video/mpeg" }, +    .{ "m3a", all.@"audio/mpeg" }, +    .{ "m3u", all.@"audio/x-mpegurl" }, +    .{ "m3u8", all.@"application/vnd.apple.mpegurl" }, +    .{ "m4a", all.@"audio/x-m4a" }, +    .{ "m4p", all.@"application/mp4" }, +    .{ "m4s", all.@"video/iso.segment" }, +    .{ "m4u", all.@"video/vnd.mpegurl" }, +    .{ "m4v", all.@"video/x-m4v" }, +    .{ "ma", all.@"application/mathematica" }, +    .{ "mads", all.@"application/mads+xml" }, +    .{ "maei", all.@"application/mmt-aei+xml" }, +    .{ "mag", all.@"application/vnd.ecowin.chart" }, +    .{ "maker", all.@"application/vnd.framemaker" }, +    .{ "man", all.@"text/troff" }, +    .{ "manifest", all.@"text/cache-manifest" }, +    .{ "map", all.@"application/json" }, +    .{ "mar", all.@"application/octet-stream" }, +    .{ "markdown", all.@"text/markdown" }, +    .{ "mathml", all.@"application/mathml+xml" }, +    .{ "mb", all.@"application/mathematica" }, +    .{ "mbk", all.@"application/vnd.mobius.mbk" }, +    .{ "mbox", all.@"application/mbox" }, +    .{ "mc1", all.@"application/vnd.medcalcdata" }, +    .{ "mcd", all.@"application/vnd.mcd" }, +    .{ "mcurl", all.@"text/vnd.curl.mcurl" }, +    .{ "md", all.@"text/markdown" }, +    .{ "mdb", all.@"application/x-msaccess" }, +    .{ "mdi", all.@"image/vnd.ms-modi" }, +    .{ "mdx", all.@"text/mdx" }, +    .{ "me", all.@"text/troff" }, +    .{ "mesh", all.@"model/mesh" }, +    .{ "meta4", all.@"application/metalink4+xml" }, +    .{ "metalink", all.@"application/metalink+xml" }, +    .{ "mets", all.@"application/mets+xml" }, +    .{ "mfm", all.@"application/vnd.mfmp" }, +    .{ "mft", all.@"application/rpki-manifest" }, +    .{ "mgp", all.@"application/vnd.osgeo.mapguide.package" }, +    .{ "mgz", all.@"application/vnd.proteus.magazine" }, +    .{ "mid", all.@"audio/midi" }, +    .{ "midi", all.@"audio/midi" }, +    .{ "mie", all.@"application/x-mie" }, +    .{ "mif", all.@"application/vnd.mif" }, +    .{ "mime", all.@"message/rfc822" }, +    .{ "mj2", all.@"video/mj2" }, +    .{ "mjp2", all.@"video/mj2" }, +    .{ "mjs", all.@"application/javascript" }, +    .{ "mk3d", all.@"video/x-matroska" }, +    .{ "mka", all.@"audio/x-matroska" }, +    .{ "mkd", all.@"text/x-markdown" }, +    .{ "mks", all.@"video/x-matroska" }, +    .{ "mkv", all.@"video/x-matroska" }, +    .{ "mlp", all.@"application/vnd.dolby.mlp" }, +    .{ "mmd", all.@"application/vnd.chipnuts.karaoke-mmd" }, +    .{ "mmf", all.@"application/vnd.smaf" }, +    .{ "mml", all.@"text/mathml" }, +    .{ "mmr", all.@"image/vnd.fujixerox.edmics-mmr" }, +    .{ "mng", all.@"video/x-mng" }, +    .{ "mny", all.@"application/x-msmoney" }, +    .{ "mobi", all.@"application/x-mobipocket-ebook" }, +    .{ "mods", all.@"application/mods+xml" }, +    .{ "mov", all.@"video/quicktime" }, +    .{ "movie", all.@"video/x-sgi-movie" }, +    .{ "mp2", all.@"audio/mpeg" }, +    .{ "mp21", all.@"application/mp21" }, +    .{ "mp2a", all.@"audio/mpeg" }, +    .{ "mp3", all.@"audio/mpeg" }, +    .{ "mp4", all.@"video/mp4" }, +    .{ "mp4a", all.@"audio/mp4" }, +    .{ "mp4s", all.@"application/mp4" }, +    .{ "mp4v", all.@"video/mp4" }, +    .{ "mpc", all.@"application/vnd.mophun.certificate" }, +    .{ "mpd", all.@"application/dash+xml" }, +    .{ "mpe", all.@"video/mpeg" }, +    .{ "mpeg", all.@"video/mpeg" }, +    .{ "mpf", all.@"application/media-policy-dataset+xml" }, +    .{ "mpg", all.@"video/mpeg" }, +    .{ "mpg4", all.@"video/mp4" }, +    .{ "mpga", all.@"audio/mpeg" }, +    .{ "mpkg", all.@"application/vnd.apple.installer+xml" }, +    .{ "mpm", all.@"application/vnd.blueice.multipass" }, +    .{ "mpn", all.@"application/vnd.mophun.application" }, +    .{ "mpp", all.@"application/vnd.ms-project" }, +    .{ "mpt", all.@"application/vnd.ms-project" }, +    .{ "mpy", all.@"application/vnd.ibm.minipay" }, +    .{ "mqy", all.@"application/vnd.mobius.mqy" }, +    .{ "mrc", all.@"application/marc" }, +    .{ "mrcx", all.@"application/marcxml+xml" }, +    .{ "ms", all.@"text/troff" }, +    .{ "mscml", all.@"application/mediaservercontrol+xml" }, +    .{ "mseed", all.@"application/vnd.fdsn.mseed" }, +    .{ "mseq", all.@"application/vnd.mseq" }, +    .{ "msf", all.@"application/vnd.epson.msf" }, +    .{ "msg", all.@"application/vnd.ms-outlook" }, +    .{ "msh", all.@"model/mesh" }, +    .{ "msi", all.@"application/x-msdownload" }, +    .{ "msl", all.@"application/vnd.mobius.msl" }, +    .{ "msm", all.@"application/octet-stream" }, +    .{ "msp", all.@"application/octet-stream" }, +    .{ "msty", all.@"application/vnd.muvee.style" }, +    .{ "mtl", all.@"model/mtl" }, +    .{ "mts", all.@"model/vnd.mts" }, +    .{ "mtsx", all.@"application/javascript" }, +    .{ "mus", all.@"application/vnd.musician" }, +    .{ "musd", all.@"application/mmt-usd+xml" }, +    .{ "musicxml", all.@"application/vnd.recordare.musicxml+xml" }, +    .{ "mvb", all.@"application/x-msmediaview" }, +    .{ "mvt", all.@"application/vnd.mapbox-vector-tile" }, +    .{ "mwf", all.@"application/vnd.mfer" }, +    .{ "mxf", all.@"application/mxf" }, +    .{ "mxl", all.@"application/vnd.recordare.musicxml" }, +    .{ "mxmf", all.@"audio/mobile-xmf" }, +    .{ "mxml", all.@"application/xv+xml" }, +    .{ "mxs", all.@"application/vnd.triscape.mxs" }, +    .{ "mxu", all.@"video/vnd.mpegurl" }, +    .{ "n-g", all.@"application/vnd.nokia.n-gage.symbian.install" }, +    .{ "n3", all.@"text/n3" }, +    .{ "nb", all.@"application/mathematica" }, +    .{ "nbp", all.@"application/vnd.wolfram.player" }, +    .{ "nc", all.@"application/x-netcdf" }, +    .{ "ncx", all.@"application/x-dtbncx+xml" }, +    .{ "nfo", all.@"text/x-nfo" }, +    .{ "ngdat", all.@"application/vnd.nokia.n-gage.data" }, +    .{ "nitf", all.@"application/vnd.nitf" }, +    .{ "nlu", all.@"application/vnd.neurolanguage.nlu" }, +    .{ "nml", all.@"application/vnd.enliven" }, +    .{ "nnd", all.@"application/vnd.noblenet-directory" }, +    .{ "nns", all.@"application/vnd.noblenet-sealer" }, +    .{ "nnw", all.@"application/vnd.noblenet-web" }, +    .{ "npx", all.@"image/vnd.net-fpx" }, +    .{ "nq", all.@"application/n-quads" }, +    .{ "nsc", all.@"application/x-conference" }, +    .{ "nsf", all.@"application/vnd.lotus-notes" }, +    .{ "nt", all.@"application/n-triples" }, +    .{ "ntf", all.@"application/vnd.nitf" }, +    .{ "numbers", all.@"application/x-iwork-numbers-sffnumbers" }, +    .{ "nzb", all.@"application/x-nzb" }, +    .{ "oa2", all.@"application/vnd.fujitsu.oasys2" }, +    .{ "oa3", all.@"application/vnd.fujitsu.oasys3" }, +    .{ "oas", all.@"application/vnd.fujitsu.oasys" }, +    .{ "obd", all.@"application/x-msbinder" }, +    .{ "obgx", all.@"application/vnd.openblox.game+xml" }, +    .{ "obj", all.@"model/obj" }, +    .{ "oda", all.@"application/oda" }, +    .{ "odb", all.@"application/vnd.oasis.opendocument.database" }, +    .{ "odc", all.@"application/vnd.oasis.opendocument.chart" }, +    .{ "odf", all.@"application/vnd.oasis.opendocument.formula" }, +    .{ "odft", all.@"application/vnd.oasis.opendocument.formula-template" }, +    .{ "odg", all.@"application/vnd.oasis.opendocument.graphics" }, +    .{ "odi", all.@"application/vnd.oasis.opendocument.image" }, +    .{ "odm", all.@"application/vnd.oasis.opendocument.text-master" }, +    .{ "odp", all.@"application/vnd.oasis.opendocument.presentation" }, +    .{ "ods", all.@"application/vnd.oasis.opendocument.spreadsheet" }, +    .{ "odt", all.@"application/vnd.oasis.opendocument.text" }, +    .{ "oga", all.@"audio/ogg" }, +    .{ "ogex", all.@"model/vnd.opengex" }, +    .{ "ogg", all.@"audio/ogg" }, +    .{ "ogv", all.@"video/ogg" }, +    .{ "ogx", all.@"application/ogg" }, +    .{ "omdoc", all.@"application/omdoc+xml" }, +    .{ "onepkg", all.@"application/onenote" }, +    .{ "onetmp", all.@"application/onenote" }, +    .{ "onetoc", all.@"application/onenote" }, +    .{ "onetoc2", all.@"application/onenote" }, +    .{ "opf", all.@"application/oebps-package+xml" }, +    .{ "opml", all.@"text/x-opml" }, +    .{ "oprc", all.@"application/vnd.palm" }, +    .{ "opus", all.@"audio/ogg" }, +    .{ "org", all.@"text/x-org" }, +    .{ "osf", all.@"application/vnd.yamaha.openscoreformat" }, +    .{ "osfpvg", all.@"application/vnd.yamaha.openscoreformat.osfpvg+xml" }, +    .{ "osm", all.@"application/vnd.openstreetmap.data+xml" }, +    .{ "otc", all.@"application/vnd.oasis.opendocument.chart-template" }, +    .{ "otf", all.@"font/otf" }, +    .{ "otg", all.@"application/vnd.oasis.opendocument.graphics-template" }, +    .{ "oth", all.@"application/vnd.oasis.opendocument.text-web" }, +    .{ "oti", all.@"application/vnd.oasis.opendocument.image-template" }, +    .{ "otp", all.@"application/vnd.oasis.opendocument.presentation-template" }, +    .{ "ots", all.@"application/vnd.oasis.opendocument.spreadsheet-template" }, +    .{ "ott", all.@"application/vnd.oasis.opendocument.text-template" }, +    .{ "ova", all.@"application/x-virtualbox-ova" }, +    .{ "ovf", all.@"application/x-virtualbox-ovf" }, +    .{ "owl", all.@"application/rdf+xml" }, +    .{ "oxps", all.@"application/oxps" }, +    .{ "oxt", all.@"application/vnd.openofficeorg.extension" }, +    .{ "p", all.@"text/x-pascal" }, +    .{ "p10", all.@"application/pkcs10" }, +    .{ "p12", all.@"application/x-pkcs12" }, +    .{ "p7b", all.@"application/x-pkcs7-certificates" }, +    .{ "p7c", all.@"application/pkcs7-mime" }, +    .{ "p7m", all.@"application/pkcs7-mime" }, +    .{ "p7r", all.@"application/x-pkcs7-certreqresp" }, +    .{ "p7s", all.@"application/pkcs7-signature" }, +    .{ "p8", all.@"application/pkcs8" }, +    .{ "pac", all.@"application/x-ns-proxy-autoconfig" }, +    .{ "pages", all.@"application/x-iwork-pages-sffpages" }, +    .{ "pas", all.@"text/x-pascal" }, +    .{ "paw", all.@"application/vnd.pawaafile" }, +    .{ "pbd", all.@"application/vnd.powerbuilder6" }, +    .{ "pbm", all.@"image/x-portable-bitmap" }, +    .{ "pcap", all.@"application/vnd.tcpdump.pcap" }, +    .{ "pcf", all.@"application/x-font-pcf" }, +    .{ "pcl", all.@"application/vnd.hp-pcl" }, +    .{ "pclxl", all.@"application/vnd.hp-pclxl" }, +    .{ "pct", all.@"image/x-pict" }, +    .{ "pcurl", all.@"application/vnd.curl.pcurl" }, +    .{ "pcx", all.@"image/x-pcx" }, +    .{ "pdb", all.@"application/x-pilot" }, +    .{ "pde", all.@"text/x-processing" }, +    .{ "pdf", all.@"application/pdf" }, +    .{ "pem", all.@"application/x-x509-ca-cert" }, +    .{ "pfa", all.@"application/x-font-type1" }, +    .{ "pfb", all.@"application/x-font-type1" }, +    .{ "pfm", all.@"application/x-font-type1" }, +    .{ "pfr", all.@"application/font-tdpfr" }, +    .{ "pfx", all.@"application/x-pkcs12" }, +    .{ "pgm", all.@"image/x-portable-graymap" }, +    .{ "pgn", all.@"application/x-chess-pgn" }, +    .{ "pgp", all.@"application/pgp-encrypted" }, +    .{ "php", all.@"application/x-httpd-php" }, +    .{ "pic", all.@"image/x-pict" }, +    .{ "pkg", all.@"application/octet-stream" }, +    .{ "pki", all.@"application/pkixcmp" }, +    .{ "pkipath", all.@"application/pkix-pkipath" }, +    .{ "pkpass", all.@"application/vnd.apple.pkpass" }, +    .{ "pl", all.@"application/x-perl" }, +    .{ "plb", all.@"application/vnd.3gpp.pic-bw-large" }, +    .{ "plc", all.@"application/vnd.mobius.plc" }, +    .{ "plf", all.@"application/vnd.pocketlearn" }, +    .{ "pls", all.@"application/pls+xml" }, +    .{ "pm", all.@"application/x-perl" }, +    .{ "pml", all.@"application/vnd.ctc-posml" }, +    .{ "png", all.@"image/png" }, +    .{ "pnm", all.@"image/x-portable-anymap" }, +    .{ "portpkg", all.@"application/vnd.macports.portpkg" }, +    .{ "pot", all.@"application/vnd.ms-powerpoint" }, +    .{ "potm", all.@"application/vnd.ms-powerpoint.template.macroenabled.12" }, +    .{ "potx", all.@"application/vnd.openxmlformats-officedocument.presentationml.template" }, +    .{ "ppam", all.@"application/vnd.ms-powerpoint.addin.macroenabled.12" }, +    .{ "ppd", all.@"application/vnd.cups-ppd" }, +    .{ "ppm", all.@"image/x-portable-pixmap" }, +    .{ "pps", all.@"application/vnd.ms-powerpoint" }, +    .{ "ppsm", all.@"application/vnd.ms-powerpoint.slideshow.macroenabled.12" }, +    .{ +        "ppsx", +        all.@"application/vnd.openxmlformats-officedocument.presentationml.slideshow", +    }, +    .{ "ppt", all.@"application/vnd.ms-powerpoint" }, +    .{ "pptm", all.@"application/vnd.ms-powerpoint.presentation.macroenabled.12" }, +    .{ +        "pptx", +        all.@"application/vnd.openxmlformats-officedocument.presentationml.presentation", +    }, +    .{ "pqa", all.@"application/vnd.palm" }, +    .{ "prc", all.@"model/prc" }, +    .{ "pre", all.@"application/vnd.lotus-freelance" }, +    .{ "prf", all.@"application/pics-rules" }, +    .{ "provx", all.@"application/provenance+xml" }, +    .{ "ps", all.@"application/postscript" }, +    .{ "psb", all.@"application/vnd.3gpp.pic-bw-small" }, +    .{ "psd", all.@"image/vnd.adobe.photoshop" }, +    .{ "psf", all.@"application/x-font-linux-psf" }, +    .{ "pskcxml", all.@"application/pskc+xml" }, +    .{ "pti", all.@"image/prs.pti" }, +    .{ "ptid", all.@"application/vnd.pvi.ptid1" }, +    .{ "pub", all.@"application/x-mspublisher" }, +    .{ "pvb", all.@"application/vnd.3gpp.pic-bw-var" }, +    .{ "pwn", all.@"application/vnd.3m.post-it-notes" }, +    .{ "pya", all.@"audio/vnd.ms-playready.media.pya" }, +    .{ "pyv", all.@"video/vnd.ms-playready.media.pyv" }, +    .{ "qam", all.@"application/vnd.epson.quickanime" }, +    .{ "qbo", all.@"application/vnd.intu.qbo" }, +    .{ "qfx", all.@"application/vnd.intu.qfx" }, +    .{ "qps", all.@"application/vnd.publishare-delta-tree" }, +    .{ "qt", all.@"video/quicktime" }, +    .{ "qwd", all.@"application/vnd.quark.quarkxpress" }, +    .{ "qwt", all.@"application/vnd.quark.quarkxpress" }, +    .{ "qxb", all.@"application/vnd.quark.quarkxpress" }, +    .{ "qxd", all.@"application/vnd.quark.quarkxpress" }, +    .{ "qxl", all.@"application/vnd.quark.quarkxpress" }, +    .{ "qxt", all.@"application/vnd.quark.quarkxpress" }, +    .{ "ra", all.@"audio/x-realaudio" }, +    .{ "ram", all.@"audio/x-pn-realaudio" }, +    .{ "raml", all.@"application/raml+yaml" }, +    .{ "rapd", all.@"application/route-apd+xml" }, +    .{ "rar", all.@"application/x-rar-compressed" }, +    .{ "ras", all.@"image/x-cmu-raster" }, +    .{ "rcprofile", all.@"application/vnd.ipunplugged.rcprofile" }, +    .{ "rdf", all.@"application/rdf+xml" }, +    .{ "rdz", all.@"application/vnd.data-vision.rdz" }, +    .{ "relo", all.@"application/p2p-overlay+xml" }, +    .{ "rep", all.@"application/vnd.businessobjects" }, +    .{ "res", all.@"application/x-dtbresource+xml" }, +    .{ "rgb", all.@"image/x-rgb" }, +    .{ "rif", all.@"application/reginfo+xml" }, +    .{ "rip", all.@"audio/vnd.rip" }, +    .{ "ris", all.@"application/x-research-info-systems" }, +    .{ "rl", all.@"application/resource-lists+xml" }, +    .{ "rlc", all.@"image/vnd.fujixerox.edmics-rlc" }, +    .{ "rld", all.@"application/resource-lists-diff+xml" }, +    .{ "rm", all.@"application/vnd.rn-realmedia" }, +    .{ "rmi", all.@"audio/midi" }, +    .{ "rmp", all.@"audio/x-pn-realaudio-plugin" }, +    .{ "rms", all.@"application/vnd.jcp.javame.midlet-rms" }, +    .{ "rmvb", all.@"application/vnd.rn-realmedia-vbr" }, +    .{ "rnc", all.@"application/relax-ng-compact-syntax" }, +    .{ "rng", all.@"application/xml" }, +    .{ "roa", all.@"application/rpki-roa" }, +    .{ "roff", all.@"text/troff" }, +    .{ "rp9", all.@"application/vnd.cloanto.rp9" }, +    .{ "rpm", all.@"application/x-redhat-package-manager" }, +    .{ "rpss", all.@"application/vnd.nokia.radio-presets" }, +    .{ "rpst", all.@"application/vnd.nokia.radio-preset" }, +    .{ "rq", all.@"application/sparql-query" }, +    .{ "rs", all.@"application/rls-services+xml" }, +    .{ "rsat", all.@"application/atsc-rsat+xml" }, +    .{ "rsd", all.@"application/rsd+xml" }, +    .{ "rsheet", all.@"application/urc-ressheet+xml" }, +    .{ "rss", all.@"application/rss+xml" }, +    .{ "rtf", all.@"text/rtf" }, +    .{ "rtx", all.@"text/richtext" }, +    .{ "run", all.@"application/x-makeself" }, +    .{ "rusd", all.@"application/route-usd+xml" }, +    .{ "s", all.@"text/x-asm" }, +    .{ "s3m", all.@"audio/s3m" }, +    .{ "saf", all.@"application/vnd.yamaha.smaf-audio" }, +    .{ "sass", all.@"text/x-sass" }, +    .{ "sbml", all.@"application/sbml+xml" }, +    .{ "sc", all.@"application/vnd.ibm.secure-container" }, +    .{ "scd", all.@"application/x-msschedule" }, +    .{ "scm", all.@"application/vnd.lotus-screencam" }, +    .{ "scq", all.@"application/scvp-cv-request" }, +    .{ "scs", all.@"application/scvp-cv-response" }, +    .{ "scss", all.@"text/x-scss" }, +    .{ "scurl", all.@"text/vnd.curl.scurl" }, +    .{ "sda", all.@"application/vnd.stardivision.draw" }, +    .{ "sdc", all.@"application/vnd.stardivision.calc" }, +    .{ "sdd", all.@"application/vnd.stardivision.impress" }, +    .{ "sdkd", all.@"application/vnd.solent.sdkm+xml" }, +    .{ "sdkm", all.@"application/vnd.solent.sdkm+xml" }, +    .{ "sdp", all.@"application/sdp" }, +    .{ "sdw", all.@"application/vnd.stardivision.writer" }, +    .{ "sea", all.@"application/x-sea" }, +    .{ "see", all.@"application/vnd.seemail" }, +    .{ "seed", all.@"application/vnd.fdsn.seed" }, +    .{ "sema", all.@"application/vnd.sema" }, +    .{ "semd", all.@"application/vnd.semd" }, +    .{ "semf", all.@"application/vnd.semf" }, +    .{ "senmlx", all.@"application/senml+xml" }, +    .{ "sensmlx", all.@"application/sensml+xml" }, +    .{ "ser", all.@"application/java-serialized-object" }, +    .{ "setpay", all.@"application/set-payment-initiation" }, +    .{ "setreg", all.@"application/set-registration-initiation" }, +    .{ "sfd-h", all.@"application/vnd.hydrostatix.sof-data" }, +    .{ "sfs", all.@"application/vnd.spotfire.sfs" }, +    .{ "sfv", all.@"text/x-sfv" }, +    .{ "sgi", all.@"image/sgi" }, +    .{ "sgl", all.@"application/vnd.stardivision.writer-global" }, +    .{ "sgm", all.@"text/sgml" }, +    .{ "sgml", all.@"text/sgml" }, +    .{ "sh", all.@"application/x-sh" }, +    .{ "shar", all.@"application/x-shar" }, +    .{ "shex", all.@"text/shex" }, +    .{ "shf", all.@"application/shf+xml" }, +    .{ "shtml", all.@"text/html" }, +    .{ "sid", all.@"image/x-mrsid-image" }, +    .{ "sieve", all.@"application/sieve" }, +    .{ "sig", all.@"application/pgp-signature" }, +    .{ "sil", all.@"audio/silk" }, +    .{ "silo", all.@"model/mesh" }, +    .{ "sis", all.@"application/vnd.symbian.install" }, +    .{ "sisx", all.@"application/vnd.symbian.install" }, +    .{ "sit", all.@"application/x-stuffit" }, +    .{ "sitx", all.@"application/x-stuffitx" }, +    .{ "siv", all.@"application/sieve" }, +    .{ "skd", all.@"application/vnd.koan" }, +    .{ "skm", all.@"application/vnd.koan" }, +    .{ "skp", all.@"application/vnd.koan" }, +    .{ "skt", all.@"application/vnd.koan" }, +    .{ "sldm", all.@"application/vnd.ms-powerpoint.slide.macroenabled.12" }, +    .{ "sldx", all.@"application/vnd.openxmlformats-officedocument.presentationml.slide" }, +    .{ "slim", all.@"text/slim" }, +    .{ "slm", all.@"text/slim" }, +    .{ "sls", all.@"application/route-s-tsid+xml" }, +    .{ "slt", all.@"application/vnd.epson.salt" }, +    .{ "sm", all.@"application/vnd.stepmania.stepchart" }, +    .{ "smf", all.@"application/vnd.stardivision.math" }, +    .{ "smi", all.@"application/smil+xml" }, +    .{ "smil", all.@"application/smil+xml" }, +    .{ "smv", all.@"video/x-smv" }, +    .{ "smzip", all.@"application/vnd.stepmania.package" }, +    .{ "snd", all.@"audio/basic" }, +    .{ "snf", all.@"application/x-font-snf" }, +    .{ "so", all.@"application/octet-stream" }, +    .{ "spc", all.@"application/x-pkcs7-certificates" }, +    .{ "spdx", all.@"text/spdx" }, +    .{ "spf", all.@"application/vnd.yamaha.smaf-phrase" }, +    .{ "spl", all.@"application/x-futuresplash" }, +    .{ "spot", all.@"text/vnd.in3d.spot" }, +    .{ "spp", all.@"application/scvp-vp-response" }, +    .{ "spq", all.@"application/scvp-vp-request" }, +    .{ "spx", all.@"audio/ogg" }, +    .{ "sql", all.@"application/x-sql" }, +    .{ "src", all.@"application/x-wais-source" }, +    .{ "srt", all.@"application/x-subrip" }, +    .{ "sru", all.@"application/sru+xml" }, +    .{ "srx", all.@"application/sparql-results+xml" }, +    .{ "ssdl", all.@"application/ssdl+xml" }, +    .{ "sse", all.@"application/vnd.kodak-descriptor" }, +    .{ "ssf", all.@"application/vnd.epson.ssf" }, +    .{ "ssml", all.@"application/ssml+xml" }, +    .{ "st", all.@"application/vnd.sailingtracker.track" }, +    .{ "stc", all.@"application/vnd.sun.xml.calc.template" }, +    .{ "std", all.@"application/vnd.sun.xml.draw.template" }, +    .{ "stf", all.@"application/vnd.wt.stf" }, +    .{ "sti", all.@"application/vnd.sun.xml.impress.template" }, +    .{ "stk", all.@"application/hyperstudio" }, +    .{ "stl", all.@"model/stl" }, +    .{ "stpx", all.@"model/step+xml" }, +    .{ "stpxz", all.@"model/step-xml+zip" }, +    .{ "stpz", all.@"model/step+zip" }, +    .{ "str", all.@"application/vnd.pg.format" }, +    .{ "stw", all.@"application/vnd.sun.xml.writer.template" }, +    .{ "styl", all.@"text/stylus" }, +    .{ "stylus", all.@"text/stylus" }, +    .{ "sub", all.@"text/vnd.dvb.subtitle" }, +    .{ "sus", all.@"application/vnd.sus-calendar" }, +    .{ "susp", all.@"application/vnd.sus-calendar" }, +    .{ "sv4cpio", all.@"application/x-sv4cpio" }, +    .{ "sv4crc", all.@"application/x-sv4crc" }, +    .{ "svc", all.@"application/vnd.dvb.service" }, +    .{ "svd", all.@"application/vnd.svd" }, +    .{ "svg", all.@"image/svg+xml" }, +    .{ "svgz", all.@"image/svg+xml" }, +    .{ "swa", all.@"application/x-director" }, +    .{ "swf", all.@"application/x-shockwave-flash" }, +    .{ "swi", all.@"application/vnd.aristanetworks.swi" }, +    .{ "swidtag", all.@"application/swid+xml" }, +    .{ "sxc", all.@"application/vnd.sun.xml.calc" }, +    .{ "sxd", all.@"application/vnd.sun.xml.draw" }, +    .{ "sxg", all.@"application/vnd.sun.xml.writer.global" }, +    .{ "sxi", all.@"application/vnd.sun.xml.impress" }, +    .{ "sxm", all.@"application/vnd.sun.xml.math" }, +    .{ "sxw", all.@"application/vnd.sun.xml.writer" }, +    .{ "t", all.@"text/troff" }, +    .{ "t3", all.@"application/x-t3vm-image" }, +    .{ "t38", all.@"image/t38" }, +    .{ "taglet", all.@"application/vnd.mynfc" }, +    .{ "tao", all.@"application/vnd.tao.intent-module-archive" }, +    .{ "tap", all.@"image/vnd.tencent.tap" }, +    .{ "tar", all.@"application/x-tar" }, +    .{ "tcap", all.@"application/vnd.3gpp2.tcap" }, +    .{ "tcl", all.@"application/x-tcl" }, +    .{ "td", all.@"application/urc-targetdesc+xml" }, +    .{ "teacher", all.@"application/vnd.smart.teacher" }, +    .{ "tei", all.@"application/tei+xml" }, +    .{ "teicorpus", all.@"application/tei+xml" }, +    .{ "tex", all.@"application/x-tex" }, +    .{ "texi", all.@"application/x-texinfo" }, +    .{ "texinfo", all.@"application/x-texinfo" }, +    .{ "text", all.@"text/plain" }, +    .{ "tfi", all.@"application/thraud+xml" }, +    .{ "tfm", all.@"application/x-tex-tfm" }, +    .{ "tfx", all.@"image/tiff-fx" }, +    .{ "tga", all.@"image/x-tga" }, +    .{ "thmx", all.@"application/vnd.ms-officetheme" }, +    .{ "tif", all.@"image/tiff" }, +    .{ "tiff", all.@"image/tiff" }, +    .{ "tk", all.@"application/x-tcl" }, +    .{ "tmo", all.@"application/vnd.tmobile-livetv" }, +    .{ "toml", all.@"application/toml" }, +    .{ "torrent", all.@"application/x-bittorrent" }, +    .{ "tpl", all.@"application/vnd.groove-tool-template" }, +    .{ "tpt", all.@"application/vnd.trid.tpt" }, +    .{ "tr", all.@"text/troff" }, +    .{ "tra", all.@"application/vnd.trueapp" }, +    .{ "trig", all.@"application/trig" }, +    .{ "trm", all.@"application/x-msterminal" }, +    .{ "ts", all.@"video/mp2t" }, +    .{ "tsd", all.@"application/timestamped-data" }, +    .{ "tsv", all.@"text/tab-separated-values" }, +    .{ "tsx", all.@"application/javascript" }, +    .{ "ttc", all.@"font/collection" }, +    .{ "ttf", all.@"font/ttf" }, +    .{ "ttl", all.@"text/turtle" }, +    .{ "ttml", all.@"application/ttml+xml" }, +    .{ "twd", all.@"application/vnd.simtech-mindmapper" }, +    .{ "twds", all.@"application/vnd.simtech-mindmapper" }, +    .{ "txd", all.@"application/vnd.genomatix.tuxedo" }, +    .{ "txf", all.@"application/vnd.mobius.txf" }, +    .{ "txt", all.@"text/plain" }, +    .{ "u32", all.@"application/x-authorware-bin" }, +    .{ "u3d", all.@"model/u3d" }, +    .{ "u8dsn", all.@"message/global-delivery-status" }, +    .{ "u8hdr", all.@"message/global-headers" }, +    .{ "u8mdn", all.@"message/global-disposition-notification" }, +    .{ "u8msg", all.@"message/global" }, +    .{ "ubj", all.@"application/ubjson" }, +    .{ "udeb", all.@"application/x-debian-package" }, +    .{ "ufd", all.@"application/vnd.ufdl" }, +    .{ "ufdl", all.@"application/vnd.ufdl" }, +    .{ "ulx", all.@"application/x-glulx" }, +    .{ "umj", all.@"application/vnd.umajin" }, +    .{ "unityweb", all.@"application/vnd.unity" }, +    .{ "uoml", all.@"application/vnd.uoml+xml" }, +    .{ "uri", all.@"text/uri-list" }, +    .{ "uris", all.@"text/uri-list" }, +    .{ "urls", all.@"text/uri-list" }, +    .{ "usdz", all.@"model/vnd.usdz+zip" }, +    .{ "ustar", all.@"application/x-ustar" }, +    .{ "utz", all.@"application/vnd.uiq.theme" }, +    .{ "uu", all.@"text/x-uuencode" }, +    .{ "uva", all.@"audio/vnd.dece.audio" }, +    .{ "uvd", all.@"application/vnd.dece.data" }, +    .{ "uvf", all.@"application/vnd.dece.data" }, +    .{ "uvg", all.@"image/vnd.dece.graphic" }, +    .{ "uvh", all.@"video/vnd.dece.hd" }, +    .{ "uvi", all.@"image/vnd.dece.graphic" }, +    .{ "uvm", all.@"video/vnd.dece.mobile" }, +    .{ "uvp", all.@"video/vnd.dece.pd" }, +    .{ "uvs", all.@"video/vnd.dece.sd" }, +    .{ "uvt", all.@"application/vnd.dece.ttml+xml" }, +    .{ "uvu", all.@"video/vnd.uvvu.mp4" }, +    .{ "uvv", all.@"video/vnd.dece.video" }, +    .{ "uvva", all.@"audio/vnd.dece.audio" }, +    .{ "uvvd", all.@"application/vnd.dece.data" }, +    .{ "uvvf", all.@"application/vnd.dece.data" }, +    .{ "uvvg", all.@"image/vnd.dece.graphic" }, +    .{ "uvvh", all.@"video/vnd.dece.hd" }, +    .{ "uvvi", all.@"image/vnd.dece.graphic" }, +    .{ "uvvm", all.@"video/vnd.dece.mobile" }, +    .{ "uvvp", all.@"video/vnd.dece.pd" }, +    .{ "uvvs", all.@"video/vnd.dece.sd" }, +    .{ "uvvt", all.@"application/vnd.dece.ttml+xml" }, +    .{ "uvvu", all.@"video/vnd.uvvu.mp4" }, +    .{ "uvvv", all.@"video/vnd.dece.video" }, +    .{ "uvvx", all.@"application/vnd.dece.unspecified" }, +    .{ "uvvz", all.@"application/vnd.dece.zip" }, +    .{ "uvx", all.@"application/vnd.dece.unspecified" }, +    .{ "uvz", all.@"application/vnd.dece.zip" }, +    .{ "vbox-e", all.@"application/x-virtualbox-vbox-extpack" }, +    .{ "vbox", all.@"application/x-virtualbox-vbox" }, +    .{ "vcard", all.@"text/vcard" }, +    .{ "vcd", all.@"application/x-cdlink" }, +    .{ "vcf", all.@"text/x-vcard" }, +    .{ "vcg", all.@"application/vnd.groove-vcard" }, +    .{ "vcs", all.@"text/x-vcalendar" }, +    .{ "vcx", all.@"application/vnd.vcx" }, +    .{ "vdi", all.@"application/x-virtualbox-vdi" }, +    .{ "vds", all.@"model/vnd.sap.vds" }, +    .{ "vhd", all.@"application/x-virtualbox-vhd" }, +    .{ "vis", all.@"application/vnd.visionary" }, +    .{ "viv", all.@"video/vnd.vivo" }, +    .{ "vmdk", all.@"application/x-virtualbox-vmdk" }, +    .{ "vob", all.@"video/x-ms-vob" }, +    .{ "vor", all.@"application/vnd.stardivision.writer" }, +    .{ "vox", all.@"application/x-authorware-bin" }, +    .{ "vrml", all.@"model/vrml" }, +    .{ "vsd", all.@"application/vnd.visio" }, +    .{ "vsf", all.@"application/vnd.vsf" }, +    .{ "vss", all.@"application/vnd.visio" }, +    .{ "vst", all.@"application/vnd.visio" }, +    .{ "vsw", all.@"application/vnd.visio" }, +    .{ "vtf", all.@"image/vnd.valve.source.texture" }, +    .{ "vtt", all.@"text/vtt" }, +    .{ "vtu", all.@"model/vnd.vtu" }, +    .{ "vxml", all.@"application/voicexml+xml" }, +    .{ "w3d", all.@"application/x-director" }, +    .{ "wad", all.@"application/x-doom" }, +    .{ "wadl", all.@"application/vnd.sun.wadl+xml" }, +    .{ "war", all.@"application/java-archive" }, +    .{ "wasm", all.@"application/webassembly" }, +    .{ "wav", all.@"audio/x-wav" }, +    .{ "wax", all.@"audio/x-ms-wax" }, +    .{ "wbmp", all.@"image/vnd.wap.wbmp" }, +    .{ "wbs", all.@"application/vnd.criticaltools.wbs+xml" }, +    .{ "wbxml", all.@"application/vnd.wap.wbxml" }, +    .{ "wcm", all.@"application/vnd.ms-works" }, +    .{ "wdb", all.@"application/vnd.ms-works" }, +    .{ "wdp", all.@"image/vnd.ms-photo" }, +    .{ "weba", all.@"audio/webm" }, +    .{ "webapp", all.@"application/x-web-app-manifest+json" }, +    .{ "webm", all.@"video/webm" }, +    .{ "webmanifest", all.@"application/manifest+json" }, +    .{ "webp", all.@"image/webp" }, +    .{ "wg", all.@"application/vnd.pmi.widget" }, +    .{ "wgt", all.@"application/widget" }, +    .{ "wif", all.@"application/watcherinfo+xml" }, +    .{ "wks", all.@"application/vnd.ms-works" }, +    .{ "wm", all.@"video/x-ms-wm" }, +    .{ "wma", all.@"audio/x-ms-wma" }, +    .{ "wmd", all.@"application/x-ms-wmd" }, +    .{ "wmf", all.@"image/wmf" }, +    .{ "wml", all.@"text/vnd.wap.wml" }, +    .{ "wmlc", all.@"application/vnd.wap.wmlc" }, +    .{ "wmls", all.@"text/vnd.wap.wmlscript" }, +    .{ "wmlsc", all.@"application/vnd.wap.wmlscriptc" }, +    .{ "wmv", all.@"video/x-ms-wmv" }, +    .{ "wmx", all.@"video/x-ms-wmx" }, +    .{ "wmz", all.@"application/x-msmetafile" }, +    .{ "woff", all.@"font/woff" }, +    .{ "woff2", all.@"font/woff2" }, +    .{ "wpd", all.@"application/vnd.wordperfect" }, +    .{ "wpl", all.@"application/vnd.ms-wpl" }, +    .{ "wps", all.@"application/vnd.ms-works" }, +    .{ "wqd", all.@"application/vnd.wqd" }, +    .{ "wri", all.@"application/x-mswrite" }, +    .{ "wrl", all.@"model/vrml" }, +    .{ "wsc", all.@"message/vnd.wfa.wsc" }, +    .{ "wsdl", all.@"application/wsdl+xml" }, +    .{ "wspolicy", all.@"application/wspolicy+xml" }, +    .{ "wtb", all.@"application/vnd.webturbo" }, +    .{ "wvx", all.@"video/x-ms-wvx" }, +    .{ "x_b", all.@"model/vnd.parasolid.transmit.binary" }, +    .{ "x_t", all.@"model/vnd.parasolid.transmit.text" }, +    .{ "x32", all.@"application/x-authorware-bin" }, +    .{ "x3d", all.@"model/x3d+xml" }, +    .{ "x3db", all.@"model/x3d+fastinfoset" }, +    .{ "x3dbz", all.@"model/x3d+binary" }, +    .{ "x3dv", all.@"model/x3d+vrml" }, +    .{ "x3dvz", all.@"model/x3d+vrml" }, +    .{ "x3dz", all.@"model/x3d+xml" }, +    .{ "xaml", all.@"application/xaml+xml" }, +    .{ "xap", all.@"application/x-silverlight-app" }, +    .{ "xar", all.@"application/vnd.xara" }, +    .{ "xav", all.@"application/xcap-att+xml" }, +    .{ "xbap", all.@"application/x-ms-xbap" }, +    .{ "xbd", all.@"application/vnd.fujixerox.docuworks.binder" }, +    .{ "xbm", all.@"image/x-xbitmap" }, +    .{ "xca", all.@"application/xcap-caps+xml" }, +    .{ "xcs", all.@"application/calendar+xml" }, +    .{ "xdf", all.@"application/xcap-diff+xml" }, +    .{ "xdm", all.@"application/vnd.syncml.dm+xml" }, +    .{ "xdp", all.@"application/vnd.adobe.xdp+xml" }, +    .{ "xdssc", all.@"application/dssc+xml" }, +    .{ "xdw", all.@"application/vnd.fujixerox.docuworks" }, +    .{ "xel", all.@"application/xcap-el+xml" }, +    .{ "xenc", all.@"application/xenc+xml" }, +    .{ "xer", all.@"application/patch-ops-error+xml" }, +    .{ "xfdf", all.@"application/vnd.adobe.xfdf" }, +    .{ "xfdl", all.@"application/vnd.xfdl" }, +    .{ "xht", all.@"application/xhtml+xml" }, +    .{ "xhtml", all.@"application/xhtml+xml" }, +    .{ "xhvml", all.@"application/xv+xml" }, +    .{ "xif", all.@"image/vnd.xiff" }, +    .{ "xla", all.@"application/vnd.ms-excel" }, +    .{ "xlam", all.@"application/vnd.ms-excel.addin.macroenabled.12" }, +    .{ "xlc", all.@"application/vnd.ms-excel" }, +    .{ "xlf", all.@"application/xliff+xml" }, +    .{ "xlm", all.@"application/vnd.ms-excel" }, +    .{ "xls", all.@"application/vnd.ms-excel" }, +    .{ "xlsb", all.@"application/vnd.ms-excel.sheet.binary.macroenabled.12" }, +    .{ "xlsm", all.@"application/vnd.ms-excel.sheet.macroenabled.12" }, +    .{ "xlsx", all.@"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }, +    .{ "xlt", all.@"application/vnd.ms-excel" }, +    .{ "xltm", all.@"application/vnd.ms-excel.template.macroenabled.12" }, +    .{ +        "xltx", +        all.@"application/vnd.openxmlformats-officedocument.spreadsheetml.template", +    }, +    .{ "xlw", all.@"application/vnd.ms-excel" }, +    .{ "xm", all.@"audio/xm" }, +    .{ "xml", all.@"application/xml" }, +    .{ "xns", all.@"application/xcap-ns+xml" }, +    .{ "xo", all.@"application/vnd.olpc-sugar" }, +    .{ "xop", all.@"application/xop+xml" }, +    .{ "xpi", all.@"application/x-xpinstall" }, +    .{ "xpl", all.@"application/xproc+xml" }, +    .{ "xpm", all.@"image/x-xpixmap" }, +    .{ "xpr", all.@"application/vnd.is-xpr" }, +    .{ "xps", all.@"application/vnd.ms-xpsdocument" }, +    .{ "xpw", all.@"application/vnd.intercon.formnet" }, +    .{ "xpx", all.@"application/vnd.intercon.formnet" }, +    .{ "xsd", all.@"application/xml" }, +    .{ "xsl", all.@"application/xslt+xml" }, +    .{ "xslt", all.@"application/xslt+xml" }, +    .{ "xsm", all.@"application/vnd.syncml+xml" }, +    .{ "xspf", all.@"application/xspf+xml" }, +    .{ "xul", all.@"application/vnd.mozilla.xul+xml" }, +    .{ "xvm", all.@"application/xv+xml" }, +    .{ "xvml", all.@"application/xv+xml" }, +    .{ "xwd", all.@"image/x-xwindowdump" }, +    .{ "xyz", all.@"chemical/x-xyz" }, +    .{ "xz", all.@"application/x-xz" }, +    .{ "yaml", all.@"text/yaml" }, +    .{ "yang", all.@"application/yang" }, +    .{ "yin", all.@"application/yin+xml" }, +    .{ "yml", all.@"text/yaml" }, +    .{ "ymp", all.@"text/x-suse-ymp" }, +    .{ "z1", all.@"application/x-zmachine" }, +    .{ "z2", all.@"application/x-zmachine" }, +    .{ "z3", all.@"application/x-zmachine" }, +    .{ "z4", all.@"application/x-zmachine" }, +    .{ "z5", all.@"application/x-zmachine" }, +    .{ "z6", all.@"application/x-zmachine" }, +    .{ "z7", all.@"application/x-zmachine" }, +    .{ "z8", all.@"application/x-zmachine" }, +    .{ "zaz", all.@"application/vnd.zzazz.deck+xml" }, +    .{ "zip", all.@"application/zip" }, +    .{ "zir", all.@"application/vnd.zul" }, +    .{ "zirz", all.@"application/vnd.zul" }, +    .{ "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" }, +}; +pub fn sniff(bytes: []const u8) ?MimeType { +    if (bytes.len < 2) return null; + +    inline for (IMAGES_HEADERS) |header| { +        if (bytes.len >= header[0].len) { +            if (strings.eqlComptime(bytes[0..header[0].len], header[0])) { +                return header[1]; +            } +        } +    } + +    return null; +} diff --git a/src/http/websocket.zig b/src/http/websocket.zig index 9fd5e212c..293c67757 100644 --- a/src/http/websocket.zig +++ b/src/http/websocket.zig @@ -65,11 +65,13 @@ pub const WebsocketHeader = packed struct {      }      pub fn packLength(length: usize) u7 { -        return switch (length) { +        var eight: u7 = 0; +        eight = switch (length) {              0...126 => @truncate(u7, length),              127...0xFFFF => 126,              else => 127,          }; +        return eight;      }  }; diff --git a/src/javascript/jsc/api/bun.zig b/src/javascript/jsc/api/bun.zig index f1a6e6c36..acb8daf2b 100644 --- a/src/javascript/jsc/api/bun.zig +++ b/src/javascript/jsc/api/bun.zig @@ -1035,8 +1035,8 @@ pub const Class = NewClass(              .rfn = Bun.readAllStdinSync,              .ts = d.ts{},          }, -        .startServer = .{ -            .rfn = Bun.startServer, +        .serve = .{ +            .rfn = Bun.serve,              .ts = d.ts{},          },          .file = .{ @@ -1094,25 +1094,38 @@ pub const Class = NewClass(      },  ); -pub fn startServer( +pub fn serve(      _: void,      ctx: js.JSContextRef,      _: js.JSObjectRef,      _: js.JSObjectRef,      arguments: []const js.JSValueRef, -    _: js.ExceptionRef, +    exception: js.ExceptionRef,  ) js.JSValueRef { -    var vm = JSC.VirtualMachine.vm; -    const handler = if (arguments.len > 0) JSC.JSValue.fromRef(arguments[0]) else JSC.JSValue.zero; -    if (handler.isEmpty() or handler.isUndefinedOrNull() or !handler.isCell() or !handler.isCallable(ctx.ptr().vm())) { -        Output.prettyWarnln("\"serverless\" export should be a function", .{}); -        Output.flush(); -        return JSC.JSValue.jsUndefined().asObjectRef(); +    var args = JSC.Node.ArgumentsSlice.from(arguments); +    var config = JSC.API.ServerConfig.fromJS(ctx.ptr(), &args, exception); +    if (exception.* != null) { +        return null; +    } + +    if (config.ssl_config != null) { +        if (config.development) { +            var server = JSC.API.DebugSSLServer.init(config, ctx.ptr()); +            server.listen(); +        } else { +            var server = JSC.API.SSLServer.init(config, ctx.ptr()); +            server.listen(); +        } +    } else { +        if (config.development) { +            var server = JSC.API.DebugServer.init(config, ctx.ptr()); +            server.listen(); +        } else { +            var server = JSC.API.Server.init(config, ctx.ptr()); +            server.listen(); +        }      } -    JSC.C.JSValueProtect(ctx.ptr().ref(), handler.asObjectRef()); -    var server = JSC.API.Server.init(vm.bundler.options.origin.getPortAuto(), handler, ctx.ptr()); -    server.listen();      return JSC.JSValue.jsUndefined().asObjectRef();  } diff --git a/src/javascript/jsc/api/html_rewriter.zig b/src/javascript/jsc/api/html_rewriter.zig index a9f5f5d48..e3a3c6d75 100644 --- a/src/javascript/jsc/api/html_rewriter.zig +++ b/src/javascript/jsc/api/html_rewriter.zig @@ -316,23 +316,26 @@ pub const HTMLRewriter = struct {              );          } -        pub fn onFinishedLoadingWrap(sink: *anyopaque, bytes: anyerror![]u8) void { +        pub fn onFinishedLoadingWrap(sink: *anyopaque, bytes: JSC.WebCore.Blob.Store.ReadFile.ResultType) void {              onFinishedLoading(bun.cast(*BufferOutputSink, sink), bytes);          } -        pub fn onFinishedLoading(sink: *BufferOutputSink, bytes: anyerror![]u8) void { -            const data = bytes catch |err| { -                if (sink.response.body.value == .Locked and @ptrToInt(sink.response.body.value.Locked.task) == @ptrToInt(sink)) { -                    sink.response.body.value = .{ .Empty = .{} }; -                } - -                sink.response.body.value.toError(err, sink.global); -                sink.rewriter.end() catch {}; -                sink.deinit(); -                return; -            }; - -            _ = sink.runOutputSink(data, true); +        pub fn onFinishedLoading(sink: *BufferOutputSink, bytes: JSC.WebCore.Blob.Store.ReadFile.ResultType) void { +            switch (bytes) { +                .err => |err| { +                    if (sink.response.body.value == .Locked and @ptrToInt(sink.response.body.value.Locked.task) == @ptrToInt(sink)) { +                        sink.response.body.value = .{ .Empty = .{} }; +                    } + +                    sink.response.body.value.toErrorInstance(err.toErrorInstance(sink.global), sink.global); +                    sink.rewriter.end() catch {}; +                    sink.deinit(); +                    return; +                }, +                .result => |data| { +                    _ = sink.runOutputSink(data, true); +                }, +            }          }          pub fn runOutputSink(sink: *BufferOutputSink, bytes: []const u8, is_async: bool) ?JSValue { diff --git a/src/javascript/jsc/api/server.zig b/src/javascript/jsc/api/server.zig index 2beac4d23..38fad7c0c 100644 --- a/src/javascript/jsc/api/server.zig +++ b/src/javascript/jsc/api/server.zig @@ -93,11 +93,240 @@ const linux = std.os.linux;  pub const ServerConfig = struct {      port: u16 = 0, -    hostnames: std.ArrayListUnmanaged([*:0]const u8) = .{}, +    hostname: [*:0]const u8 = "0.0.0.0", +    ssl_config: ?SSLConfig = null,      max_request_body_size: usize = 1024 * 1024 * 128, +    development: bool = false, + +    onError: JSC.JSValue = JSC.JSValue.zero, +    onRequest: JSC.JSValue = JSC.JSValue.zero, + +    pub const SSLConfig = struct { +        server_name: [*:0]const u8 = "", + +        key_file_name: [*:0]const u8 = "", +        cert_file_name: [*:0]const u8 = "", + +        ca_file_name: [*:0]const u8 = "", +        dh_params_file_name: [*:0]const u8 = "", + +        passphrase: [*:0]const u8 = "", +        low_memory_mode: bool = false, + +        pub fn deinit(this: *SSLConfig) void { +            const fields = .{ +                "server_name", +                "key_file_name", +                "cert_file_name", +                "ca_file_name", +                "dh_params_file_name", +                "passphrase", +            }; + +            inline for (fields) |field| { +                const slice = std.mem.span(@field(this, field)); +                if (slice.len > 0) { +                    bun.default_allocator.free(slice); +                } +            } +        } + +        const zero = SSLConfig{}; + +        pub fn inJS(global: *JSC.JSGlobalObject, obj: JSC.JSValue, exception: JSC.C.ExceptionRef) ?SSLConfig { +            var result = zero; +            var any = false; + +            // Required +            if (obj.getTruthy(global, "keyFile")) |key_file_name| { +                var sliced = key_file_name.toSlice(global, bun.default_allocator); +                if (sliced.len > 0) { +                    result.key_file_name = bun.default_allocator.dupeZ(u8, sliced.slice()) catch unreachable; +                    if (std.os.system.access(result.key_file_name, std.os.F_OK) != 0) { +                        JSC.throwInvalidArguments("Invalid keyFile path", .{}, global.ref(), exception); +                        result.deinit(); + +                        return null; +                    } +                    any = true; +                } +            } +            if (obj.getTruthy(global, "certFile")) |cert_file_name| { +                var sliced = cert_file_name.toSlice(global, bun.default_allocator); +                if (sliced.len > 0) { +                    result.cert_file_name = bun.default_allocator.dupeZ(u8, sliced.slice()) catch unreachable; +                    if (std.os.system.access(result.cert_file_name, std.os.F_OK) != 0) { +                        JSC.throwInvalidArguments("Invalid certFile path", .{}, global.ref(), exception); +                        result.deinit(); +                        return null; +                    } +                    any = true; +                } +            } + +            // Optional +            if (any) { +                if (obj.getTruthy(global, "serverName")) |key_file_name| { +                    var sliced = key_file_name.toSlice(global, bun.default_allocator); +                    if (sliced.len > 0) { +                        result.server_name = bun.default_allocator.dupeZ(u8, sliced.slice()) catch unreachable; +                    } +                } + +                if (obj.getTruthy(global, "caFile")) |ca_file_name| { +                    var sliced = ca_file_name.toSlice(global, bun.default_allocator); +                    if (sliced.len > 0) { +                        result.ca_file_name = bun.default_allocator.dupeZ(u8, sliced.slice()) catch unreachable; +                        if (std.os.system.access(result.ca_file_name, std.os.F_OK) != 0) { +                            JSC.throwInvalidArguments("Invalid caFile path", .{}, global.ref(), exception); +                            result.deinit(); +                            return null; +                        } +                    } +                } +                if (obj.getTruthy(global, "dhParamsFile")) |dh_params_file_name| { +                    var sliced = dh_params_file_name.toSlice(global, bun.default_allocator); +                    if (sliced.len > 0) { +                        result.dh_params_file_name = bun.default_allocator.dupeZ(u8, sliced.slice()) catch unreachable; +                        if (std.os.system.access(result.dh_params_file_name, std.os.F_OK) != 0) { +                            JSC.throwInvalidArguments("Invalid dhParamsFile path", .{}, global.ref(), exception); +                            result.deinit(); +                            return null; +                        } +                    } +                } + +                if (obj.getTruthy(global, "passphrase")) |passphrase| { +                    var sliced = passphrase.toSlice(global, bun.default_allocator); +                    if (sliced.len > 0) { +                        result.passphrase = bun.default_allocator.dupeZ(u8, sliced.slice()) catch unreachable; +                    } +                } + +                if (obj.get(global, "lowMemoryMode")) |low_memory_mode| { +                    result.low_memory_mode = low_memory_mode.toBoolean(); +                    any = true; +                } +            } + +            if (!any) +                return null; +            return result; +        } + +        pub fn fromJS(global: *JSC.JSGlobalObject, arguments: *JSC.Node.ArgumentsSlice, exception: JSC.C.ExceptionRef) ?SSLConfig { +            if (arguments.next()) |arg| { +                return SSLConfig.inJS(global, arg, exception); +            } + +            return null; +        } +    }; + +    pub fn fromJS(global: *JSC.JSGlobalObject, arguments: *JSC.Node.ArgumentsSlice, exception: JSC.C.ExceptionRef) ServerConfig { +        var env = VirtualMachine.vm.bundler.env; + +        var args = ServerConfig{ +            .port = 3000, +            .hostname = "0.0.0.0", +            .development = true, +        }; + +        if (strings.eqlComptime(env.get("NODE_ENV") orelse "", "production")) { +            args.development = false; +        } + +        if (VirtualMachine.vm.bundler.options.production) { +            args.development = false; +        } + +        const PORT_ENV = .{ "PORT", "BUN_PORT" }; + +        inline for (PORT_ENV) |PORT| { +            if (env.get(PORT)) |port| { +                if (std.fmt.parseInt(u16, port, 10)) |_port| { +                    args.port = _port; +                } else |_| {} +            } +        } + +        if (VirtualMachine.vm.bundler.options.transform_options.port) |port| { +            args.port = port; +        } + +        if (arguments.next()) |arg| { +            if (arg.isUndefinedOrNull() or !arg.isObject()) { +                JSC.throwInvalidArguments("Bun.serve expects an object", .{}, global.ref(), exception); +                return args; +            } + +            if (arg.getTruthy(global, "port")) |port_| { +                args.port = @intCast(u16, @minimum(@maximum(0, port_.toInt32()), std.math.maxInt(u16))); +            } + +            if (arg.getTruthy(global, "hostname") orelse arg.getTruthy(global, "host")) |host| { +                const host_str = host.toSlice( +                    global, +                    bun.default_allocator, +                ); +                if (host_str.len > 0) { +                    args.hostname = bun.default_allocator.dupeZ(u8, host_str.slice()) catch unreachable; +                } +            } + +            if (arg.get(global, "development")) |dev| { +                args.development = dev.toBoolean(); +            } + +            if (SSLConfig.fromJS(global, arguments, exception)) |ssl_config| { +                args.ssl_config = ssl_config; +            } + +            if (exception.* != null) { +                return args; +            } + +            if (arg.getTruthy(global, "maxRequestBodySize")) |max_request_body_size| { +                args.max_request_body_size = @intCast(u64, @maximum(0, max_request_body_size.toInt64())); +            } + +            if (arg.getTruthy(global, "error")) |onError| { +                if (!onError.isCallable(global.vm())) { +                    JSC.throwInvalidArguments("Expected error to be a function", .{}, global.ref(), exception); +                    if (args.ssl_config) |*conf| { +                        conf.deinit(); +                    } +                    return args; +                } +                JSC.C.JSValueProtect(global.ref(), onError.asObjectRef()); +                args.onError = onError; +            } + +            if (arg.getTruthy(global, "fetch")) |onRequest| { +                if (!onRequest.isCallable(global.vm())) { +                    JSC.throwInvalidArguments("Expected fetch() to be a function", .{}, global.ref(), exception); +                    return args; +                } +                JSC.C.JSValueProtect(global.ref(), onRequest.asObjectRef()); +                args.onRequest = onRequest; +            } else { +                JSC.throwInvalidArguments("Expected fetch() to be a function", .{}, global.ref(), exception); +                if (args.ssl_config) |*conf| { +                    conf.deinit(); +                } +                return args; +            } +        } + +        if (args.port == 0) { +            JSC.throwInvalidArguments("Invalid port: must be > 0", .{}, global.ref(), exception); +        } + +        return args; +    }  }; -pub fn NewServer(comptime ssl_enabled: bool) type { +pub fn NewServer(comptime ssl_enabled: bool, comptime debug_mode: bool) type {      return struct {          const ThisServer = @This();          const RequestContextStackAllocator = std.heap.StackFallbackAllocator(@sizeOf(RequestContext) * 2048 + 4096); @@ -105,21 +334,19 @@ pub fn NewServer(comptime ssl_enabled: bool) type {          pub const App = uws.NewApp(ssl_enabled);          listener: ?*App.ListenSocket = null, -        callback: JSC.JSValue = JSC.JSValue.zero, -        port: u16 = 3000, +          app: *App = undefined,          globalThis: *JSGlobalObject, -        default_server: URL = URL{ .host = "localhost", .port = "3000" }, +          response_objects_pool: JSC.WebCore.Response.Pool = JSC.WebCore.Response.Pool{},          config: ServerConfig = ServerConfig{},          request_pool_allocator: std.mem.Allocator = undefined, -        pub fn init(port: u16, callback: JSC.JSValue, globalThis: *JSGlobalObject) *ThisServer { +        pub fn init(config: ServerConfig, globalThis: *JSGlobalObject) *ThisServer {              var server = bun.default_allocator.create(ThisServer) catch @panic("Out of memory!");              server.* = .{ -                .port = port, -                .callback = callback,                  .globalThis = globalThis, +                .config = config,              };              RequestContext.pool = bun.default_allocator.create(RequestContextStackAllocator) catch @panic("Out of memory!");              server.request_pool_allocator = RequestContext.pool.get(); @@ -128,14 +355,14 @@ pub fn NewServer(comptime ssl_enabled: bool) type {          pub fn onListen(this: *ThisServer, socket: ?*App.ListenSocket, _: uws.uws_app_listen_config_t) void {              if (socket == null) { -                Output.prettyErrorln("Failed to start socket", .{}); -                Output.flush(); +                JSC.VirtualMachine.vm.defaultErrorHandler(ZigString.init("Bun.serve failed to start").toErrorInstance(this.globalThis), null);                  return;              }              this.listener = socket;              VirtualMachine.vm.uws_event_loop = uws.Loop.get();              VirtualMachine.vm.response_objects_pool = &this.response_objects_pool; +              this.app.run();          } @@ -153,6 +380,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type {              response_headers: ?*JSC.WebCore.Headers.RefCountedHeaders = null,              has_abort_handler: bool = false,              has_sendfile_ctx: bool = false, +            has_called_error_handler: bool = false,              sendfile: SendfileContext = undefined,              request_js_object: JSC.C.JSObjectRef = null,              request_body_buf: std.ArrayListUnmanaged(u8) = .{}, @@ -197,21 +425,9 @@ pub fn NewServer(comptime ssl_enabled: bool) type {                  _: *JSC.JSGlobalObject,                  arguments: []const JSC.JSValue,              ) void { -                var exception_list: std.ArrayList(Api.JsException) = std.ArrayList(Api.JsException).init(bun.default_allocator); -                JSC.VirtualMachine.vm.defaultErrorHandler(arguments[0], &exception_list); -                if (!ctx.resp.hasResponded()) { -                    ctx.renderDefaultError( -                        JSC.VirtualMachine.vm.log, -                        error.PromiseRejection, -                        exception_list.toOwnedSlice(), -                        "", -                        .{}, -                    ); -                    JSC.VirtualMachine.vm.log.reset(); -                    return; -                } else { -                    exception_list.deinit(); -                } +                ctx.runErrorHandler( +                    if (arguments.len > 0) arguments[0] else JSC.JSValue.jsUndefined(), +                );                  if (ctx.aborted) {                      ctx.finalize(); @@ -264,7 +480,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type {                  ) catch unreachable;                  if (this.resp.tryEnd(bb.items, bb.items.len)) {                      bb.clearAndFree(); -                    this.finalize(); +                    this.finalizeWithoutDeinit();                      return;                  } @@ -349,6 +565,13 @@ pub fn NewServer(comptime ssl_enabled: bool) type {                  if (headers.getHeaderIndex("content-length")) |index| {                      headers.entries.orderedRemove(index);                  } + +                if (this.blob.content_type.len > 0 and headers.getHeaderIndex("content-type") == null) { +                    this.resp.writeHeader("content-type", this.blob.content_type); +                } else if (MimeType.sniff(this.blob.sharedView())) |content| { +                    this.resp.writeHeader("content-type", content.value); +                } +                  defer headers_.deref();                  var entries = headers.entries.slice();                  const names = entries.items(.name); @@ -487,7 +710,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type {                  this.sendfile = .{                      .fd = fd, -                    .remain = size_, // 2 is for \r\n, +                    .remain = size_,                      .socket_fd = this.resp.getNativeHandle(),                  }; @@ -499,6 +722,8 @@ pub fn NewServer(comptime ssl_enabled: bool) type {                      return;                  } + +                // TODO: fix this to be MSGHDR                  _ = std.os.write(this.sendfile.socket_fd, "\r\n") catch 0;                  _ = this.onSendfile(); @@ -553,6 +778,51 @@ pub fn NewServer(comptime ssl_enabled: bool) type {                  this.renderBytes();              } +            pub fn renderProductionError(this: *RequestContext) void { +                this.resp.writeStatus("500 Internal Server Error"); +                this.resp.writeHeader("content-type", "text/plain"); +                this.resp.end("Something went wrong!", true); + +                this.finalize(); +            } + +            pub fn runErrorHandler(this: *RequestContext, value: JSC.JSValue) void { +                if (this.resp.hasResponded()) return; + +                var exception_list: std.ArrayList(Api.JsException) = std.ArrayList(Api.JsException).init(bun.default_allocator); + +                if (!this.server.config.onError.isEmpty() and !this.has_called_error_handler) { +                    this.has_called_error_handler = true; +                    var args = [_]JSC.C.JSValueRef{value.asObjectRef()}; +                    const result = JSC.C.JSObjectCallAsFunctionReturnValue(this.server.globalThis.ref(), this.server.config.onError.asObjectRef(), null, 1, &args); +                    if (!result.isUndefinedOrNull()) { +                        if (result.isError() or result.isAggregateError(this.server.globalThis)) { +                            JSC.VirtualMachine.vm.defaultErrorHandler(result, &exception_list); +                        } else if (result.as(Response)) |response| { +                            this.render(response); +                            return; +                        } +                    } +                } + +                if (comptime debug_mode) { +                    JSC.VirtualMachine.vm.defaultErrorHandler(value, &exception_list); + +                    this.renderDefaultError( +                        JSC.VirtualMachine.vm.log, +                        error.ExceptionOcurred, +                        exception_list.toOwnedSlice(), +                        "Unhandled exception in request handler", +                        .{}, +                    ); +                } else { +                    JSC.VirtualMachine.vm.defaultErrorHandler(value, &exception_list); +                    this.renderProductionError(); +                } +                JSC.VirtualMachine.vm.log.reset(); +                return; +            } +              pub fn renderMetadata(this: *RequestContext) void {                  var response: *JSC.WebCore.Response = this.response_ptr.?;                  var status = response.statusCode(); @@ -566,6 +836,10 @@ pub fn NewServer(comptime ssl_enabled: bool) type {                  if (response.body.init.headers) |headers_| {                      this.writeHeaders(headers_); +                } else if (this.blob.content_type.len > 0) { +                    this.resp.writeHeader("content-type", this.blob.content_type); +                } else if (MimeType.sniff(this.blob.sharedView())) |content| { +                    this.resp.writeHeader("content-type", content.value);                  }              } @@ -687,6 +961,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type {              const buffer = writer.ctx.written;              resp.end(buffer, false);          } +          pub fn onSrcRequest(_: *ThisServer, req: *uws.Request, resp: *App.Response) void {              if (comptime JSC.is_bindgen) return undefined;              req.setYield(false); @@ -739,7 +1014,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type {              var args = [_]JSC.C.JSValueRef{JSC.WebCore.Request.Class.make(this.globalThis.ref(), request_object)};              ctx.request_js_object = args[0];              JSC.C.JSValueProtect(this.globalThis.ref(), args[0]); -            ctx.response_jsvalue = JSC.C.JSObjectCallAsFunctionReturnValue(this.globalThis.ref(), this.callback.asObjectRef(), null, 1, &args); +            ctx.response_jsvalue = JSC.C.JSObjectCallAsFunctionReturnValue(this.globalThis.ref(), this.config.onRequest.asObjectRef(), null, 1, &args);              defer JSC.VirtualMachine.vm.tick();              if (ctx.aborted) {                  ctx.finalize(); @@ -754,21 +1029,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type {              }              if (ctx.response_jsvalue.isError() or ctx.response_jsvalue.isAggregateError(this.globalThis) or ctx.response_jsvalue.isException(this.globalThis.vm())) { -                var exception_list: std.ArrayList(Api.JsException) = std.ArrayList(Api.JsException).init(bun.default_allocator); -                JSC.VirtualMachine.vm.defaultErrorHandler(ctx.response_jsvalue, &exception_list); -                if (!ctx.resp.hasResponded()) { -                    ctx.renderDefaultError( -                        JSC.VirtualMachine.vm.log, -                        error.ExceptionOcurred, -                        exception_list.toOwnedSlice(), -                        "Unhandled exception in request handler", -                        .{}, -                    ); -                    JSC.VirtualMachine.vm.log.reset(); -                    return; -                } else { -                    exception_list.deinit(); -                } +                ctx.runErrorHandler(ctx.response_jsvalue);              }              JSC.C.JSValueProtect(this.globalThis.ref(), ctx.response_jsvalue.asObjectRef()); @@ -790,6 +1051,12 @@ pub fn NewServer(comptime ssl_enabled: bool) type {                      RequestContext.onResolve,                      RequestContext.onReject,                  ); +                return; +            } + +            if (!ctx.resp.hasResponded()) { +                ctx.resp.writeStatus("200 OK"); +                ctx.resp.end("Welcome to Bun! To get started, ", false);              }              // switch (ctx.response_jsvalue.jsTypeLoose()) { @@ -800,20 +1067,42 @@ pub fn NewServer(comptime ssl_enabled: bool) type {          }          pub fn listen(this: *ThisServer) void { -            this.app = App.create(.{}); +            if (ssl_enabled) { +                const ssl_config = this.config.ssl_config orelse @panic("Assertion failure: ssl_config"); +                this.app = App.create(.{ +                    .key_file_name = ssl_config.key_file_name, +                    .cert_file_name = ssl_config.cert_file_name, +                    .passphrase = ssl_config.passphrase, +                    .dh_params_file_name = ssl_config.dh_params_file_name, +                    .ca_file_name = ssl_config.ca_file_name, +                    .ssl_prefer_low_memory_usage = @as(c_int, @boolToInt(ssl_config.low_memory_mode)), +                }); + +                if (std.mem.span(ssl_config.server_name).len > 0) { +                    this.app.addServerName(ssl_config.server_name); +                } +            } else { +                this.app = App.create(.{}); +            } +              this.app.any("/*", *ThisServer, this, onRequest); -            this.app.get("/bun:info", *ThisServer, this, onBunInfoRequest); -            this.app.get("/src:/*", *ThisServer, this, onSrcRequest); +            if (comptime debug_mode) { +                this.app.get("/bun:info", *ThisServer, this, onBunInfoRequest); +                this.app.get("/src:/*", *ThisServer, this, onSrcRequest); +            }              this.app.listenWithConfig(*ThisServer, this, onListen, .{ -                .port = this.default_server.getPort().?, -                .host = bun.default_allocator.dupeZ(u8, this.default_server.displayHostname()) catch unreachable, +                .port = this.config.port, +                .host = this.config.hostname,                  .options = 0,              });          }      };  } -pub const Server = NewServer(false); -pub const SSLServer = NewServer(true); +pub const Server = NewServer(false, true); +pub const SSLServer = NewServer(true, true); + +pub const DebugServer = NewServer(false, true); +pub const DebugSSLServer = NewServer(true, true); diff --git a/src/javascript/jsc/bindings/bindings.zig b/src/javascript/jsc/bindings/bindings.zig index 05298ea27..64ee478c6 100644 --- a/src/javascript/jsc/bindings/bindings.zig +++ b/src/javascript/jsc/bindings/bindings.zig @@ -357,6 +357,13 @@ pub const SystemError = extern struct {      path: ZigString = ZigString.init(""),      syscall: ZigString = ZigString.init(""), +    pub fn Maybe(comptime Result: type) type { +        return union(enum) { +            err: SystemError, +            result: Result, +        }; +    } +      pub const shim = Shimmer("", "SystemError", @This());      pub const name = "SystemError"; diff --git a/src/javascript/jsc/webcore/response.zig b/src/javascript/jsc/webcore/response.zig index 748828daf..4b64137ad 100644 --- a/src/javascript/jsc/webcore/response.zig +++ b/src/javascript/jsc/webcore/response.zig @@ -13,7 +13,7 @@ const js = JSC.C;  const Method = @import("../../../http/method.zig").Method;  const ObjectPool = @import("../../../pool.zig").ObjectPool; - +const SystemError = JSC.SystemError;  const Output = @import("../../../global.zig").Output;  const MutableString = @import("../../../global.zig").MutableString;  const strings = @import("../../../global.zig").strings; @@ -1980,13 +1980,13 @@ pub const Blob = struct {                              if (sliced.len > 0) {                                  var extname = std.fs.path.extension(sliced);                                  extname = std.mem.trim(u8, extname, "."); -                                if (HTTPClient.MimeType.byExtension(extname)) |mime| { -                                    break :brk mime.value; +                                if (HTTPClient.MimeType.byExtensionNoDefault(extname)) |mime| { +                                    break :brk mime;                                  }                              } - -                            break :brk null;                          } + +                        break :brk null;                      },                  ) },                  .allocator = allocator, @@ -2133,6 +2133,7 @@ pub const Blob = struct {                      suspend {                          this.close_frame = @frame().*;                      } +                      if (@hasField(This, "errno")) {                          if (this.errno) |errno| {                              return @errSetCast(AsyncIO.CloseError, errno); @@ -2267,7 +2268,6 @@ pub const Blob = struct {              open_frame: OpenFrameType = undefined,              read_frame: @Frame(ReadFile.doRead) = undefined,              close_frame: @Frame(ReadFile.doClose) = undefined, -            errno: ?anyerror = null,              open_completion: HTTPClient.NetworkThread.Completion = undefined,              opened_fd: JSC.Node.FileDescriptor = 0,              read_completion: HTTPClient.NetworkThread.Completion = undefined, @@ -2278,11 +2278,14 @@ pub const Blob = struct {              runAsyncFrame: @Frame(ReadFile.runAsync) = undefined,              close_completion: HTTPClient.NetworkThread.Completion = undefined,              task: HTTPClient.NetworkThread.Task = undefined, - +            system_error: ?JSC.SystemError = null, +            errno: ?anyerror = null,              onCompleteCtx: *anyopaque = undefined,              onCompleteCallback: OnReadFileCallback = undefined, -            pub const OnReadFileCallback = fn (ctx: *anyopaque, bytes: anyerror![]u8) void; +            pub const ResultType = SystemError.Maybe([]u8); + +            pub const OnReadFileCallback = fn (ctx: *anyopaque, bytes: ResultType) void;              pub usingnamespace FileOpenerMixin(ReadFile);              pub usingnamespace FileCloserMixin(ReadFile); @@ -2315,10 +2318,10 @@ pub const Blob = struct {                  max_len: SizeType,                  comptime Context: type,                  context: Context, -                comptime callback: fn (ctx: Context, bytes: anyerror![]u8) void, +                comptime callback: fn (ctx: Context, bytes: ResultType) void,              ) !*ReadFile {                  const Handler = struct { -                    pub fn run(ptr: *anyopaque, bytes: anyerror![]u8) void { +                    pub fn run(ptr: *anyopaque, bytes: ResultType) void {                          callback(bun.cast(Context, ptr), bytes);                      }                  }; @@ -2346,6 +2349,15 @@ pub const Blob = struct {                  }                  if (this.errno) |errno| { +                    this.system_error = JSC.SystemError{ +                        .code = ZigString.init(std.mem.span(@errorName(errno))), +                        .path = if (this.file_store.pathlike == .path) +                            ZigString.init(this.file_store.pathlike.path.slice()) +                        else +                            ZigString.Empty, +                        .syscall = ZigString.init("read"), +                    }; +                      return @errSetCast(AsyncIO.ReadError, errno);                  } @@ -2358,22 +2370,31 @@ pub const Blob = struct {                  var cb = this.onCompleteCallback;                  var cb_ctx = this.onCompleteCtx; -                var store = this.store orelse { -                    var _err = this.errno orelse error.MissingData; -                    this.byte_store.deinit(); +                if (this.store == null and this.system_error != null) { +                    var system_error = this.system_error.?;                      bun.default_allocator.destroy(this); -                    cb(cb_ctx, _err); +                    cb(cb_ctx, ResultType{ .err = system_error });                      return; -                }; +                } else if (this.store == null) { +                    bun.default_allocator.destroy(this); +                    cb(cb_ctx, ResultType{ .err = SystemError{ +                        .code = ZigString.init("INTERNAL_ERROR"), +                        .path = ZigString.Empty, +                        .message = ZigString.init("assertion failure - store should not be null"), +                        .syscall = ZigString.init("read"), +                    } }); +                    return; +                } +                var store = this.store.?;                  defer store.deref();                  if (this.file_store.pathlike == .path) {                      VirtualMachine.vm.removeFileBlob(this.file_store.pathlike);                  } -                if (this.errno) |err| { +                if (this.system_error) |err| {                      bun.default_allocator.destroy(this); -                    cb(cb_ctx, err); +                    cb(cb_ctx, ResultType{ .err = err });                      return;                  } @@ -2391,7 +2412,7 @@ pub const Blob = struct {                  }                  bun.default_allocator.destroy(this); -                cb(cb_ctx, bytes); +                cb(cb_ctx, .{ .result = bytes });              }              pub fn run(this: *ReadFile, task: *ReadFileTask) void {                  this.runAsyncFrame = async this.runAsync(task); @@ -2400,6 +2421,7 @@ pub const Blob = struct {              pub fn onRead(this: *ReadFile, _: *HTTPClient.NetworkThread.Completion, result: AsyncIO.ReadError!usize) void {                  this.read_len = @truncate(SizeType, result catch |err| {                      this.errno = err; +                    this.system_error = .{ .code = ZigString.init(std.mem.span(@errorName(err))), .syscall = ZigString.init("read") };                      this.read_len = 0;                      resume this.read_frame;                      return; @@ -2420,11 +2442,21 @@ pub const Blob = struct {                      .result => |result| result,                      .err => |err| {                          this.errno = AsyncIO.asError(err.errno); +                        this.system_error = err.toSystemError();                          return;                      },                  };                  if (!std.os.S.ISREG(stat.mode)) {                      this.errno = error.ENOTSUP; +                    this.system_error = JSC.SystemError{ +                        .code = ZigString.init(std.mem.span(@errorName(error.TODO))), +                        .path = if (this.file_store.pathlike == .path) +                            ZigString.init(this.file_store.pathlike.path.slice()) +                        else +                            ZigString.Empty, +                        .message = ZigString.init("Non-regular files are not supported yet"), +                        .syscall = ZigString.init("read"), +                    };                      return;                  } @@ -2482,6 +2514,7 @@ pub const Blob = struct {              open_frame: OpenFrameType = undefined,              write_frame: @Frame(WriteFile.doWrite) = undefined,              close_frame: @Frame(WriteFile.doClose) = undefined, +            system_error: ?JSC.SystemError = null,              errno: ?anyerror = null,              open_completion: HTTPClient.NetworkThread.Completion = undefined, @@ -2494,7 +2527,7 @@ pub const Blob = struct {              onCompleteCallback: OnWriteFileCallback = undefined,              wrote: usize = 0, -            pub const ResultType = anyerror!SizeType; +            pub const ResultType = SystemError.Maybe(SizeType);              pub const OnWriteFileCallback = fn (ctx: *anyopaque, count: ResultType) void;              pub usingnamespace FileOpenerMixin(WriteFile); @@ -2566,6 +2599,10 @@ pub const Blob = struct {                  }                  if (this.errno) |errno| { +                    this.system_error = this.system_error orelse JSC.SystemError{ +                        .code = ZigString.init(std.mem.span(@errorName(errno))), +                        .syscall = ZigString.init("write"), +                    };                      return @errSetCast(AsyncIO.WriteError, errno);                  } @@ -2581,14 +2618,16 @@ pub const Blob = struct {                  this.bytes_blob.store.?.deref();                  this.file_blob.store.?.deref(); -                if (this.errno) |err| { +                if (this.system_error) |err| {                      bun.default_allocator.destroy(this); -                    cb(cb_ctx, err); +                    cb(cb_ctx, .{ +                        .err = err, +                    });                      return;                  }                  bun.default_allocator.destroy(this); -                cb(cb_ctx, @truncate(SizeType, this.wrote)); +                cb(cb_ctx, .{ .result = @truncate(SizeType, this.wrote) });              }              pub fn run(this: *WriteFile, task: *WriteFileTask) void {                  this.runAsyncFrame = async this.runAsync(task); @@ -2650,6 +2689,17 @@ pub const Blob = struct {              both,          }; +        const unsupported_directory_error = SystemError{ +            .errno = @intCast(c_int, @enumToInt(bun.C.SystemErrno.EISDIR)), +            .message = ZigString.init("That doesn't work on folders"), +            .syscall = ZigString.init("fstat"), +        }; +        const unsupported_non_regular_file_error = SystemError{ +            .errno = @intCast(c_int, @enumToInt(bun.C.SystemErrno.ENOTSUP)), +            .message = ZigString.init("Non-regular files aren't supported yet"), +            .syscall = ZigString.init("fstat"), +        }; +          // blocking, but off the main thread          pub const CopyFile = struct {              destination_file_store: FileStore, @@ -2662,7 +2712,7 @@ pub const Blob = struct {              destination_fd: JSC.Node.FileDescriptor = 0,              source_fd: JSC.Node.FileDescriptor = 0, -            errno: ?anyerror = null, +            system_error: ?SystemError = null,              read_len: SizeType = 0,              read_off: SizeType = 0, @@ -2703,7 +2753,7 @@ pub const Blob = struct {              pub fn deinit(this: *CopyFile) void {                  if (this.source_file_store.pathlike == .path) { -                    if (this.source_file_store.pathlike.path == .string) { +                    if (this.source_file_store.pathlike.path == .string and this.system_error == null) {                          bun.default_allocator.free(bun.constStrToU8(this.source_file_store.pathlike.path.slice()));                      }                  } @@ -2714,14 +2764,13 @@ pub const Blob = struct {              pub fn reject(this: *CopyFile, promise: *JSC.JSInternalPromise) void {                  var globalThis = this.globalThis; -                var system_error = JSC.SystemError{}; -                if (this.destination_file_store.pathlike == .path) { -                    system_error.path = ZigString.init(this.destination_file_store.pathlike.path.slice()); +                var system_error: SystemError = this.system_error orelse SystemError{}; +                if (this.source_file_store.pathlike == .path and system_error.path.len == 0) { +                    system_error.path = ZigString.init(this.source_file_store.pathlike.path.slice());                      system_error.path.mark();                  }                  system_error.message = ZigString.init("Failed to copy file"); -                var _err = this.errno orelse error.MissingData; -                system_error.code = ZigString.init(std.mem.span(@errorName(_err))); +                  var instance = system_error.toErrorInstance(this.globalThis);                  if (this.store) |store| {                      store.deref(); @@ -2732,7 +2781,7 @@ pub const Blob = struct {              pub fn then(this: *CopyFile, promise: *JSC.JSInternalPromise) void {                  this.source_store.?.deref(); -                if (this.errno != null) { +                if (this.system_error != null) {                      this.reject(promise);                      return;                  } @@ -2789,8 +2838,8 @@ pub const Blob = struct {                      )) {                          .result => |result| result,                          .err => |errno| { -                            this.errno = AsyncIO.asError(errno.errno); -                            return; +                            this.system_error = errno.toSystemError(); +                            return AsyncIO.asError(errno.errno);                          },                      };                  } @@ -2808,8 +2857,8 @@ pub const Blob = struct {                                  this.source_fd = 0;                              } -                            this.errno = AsyncIO.asError(errno.errno); -                            return; +                            this.system_error = errno.toSystemError(); +                            return AsyncIO.asError(errno.errno);                          },                      };                  } @@ -2838,8 +2887,11 @@ pub const Blob = struct {                      switch (linux.getErrno(written)) {                          .SUCCESS => {},                          else => |errno| { -                            this.errno = AsyncIO.asError(errno); -                            return this.errno.?; +                            this.system_error = (JSC.Node.Syscall.Error{ +                                .errno = @intCast(JSC.Node.Syscall.Error.Int, @enumToInt(errno)), +                                .syscall = ZigString.init("copy_file_range"), +                            }).toSystemError(); +                            return AsyncIO.asError(errno);                          },                      } @@ -2853,8 +2905,8 @@ pub const Blob = struct {              pub fn doFCopyFile(this: *CopyFile) anyerror!void {                  switch (JSC.Node.Syscall.fcopyfile(this.source_fd, this.destination_fd, os.system.COPYFILE_DATA)) {                      .err => |errno| { -                        this.errno = AsyncIO.asError(errno.errno); -                        return this.errno.?; +                        this.system_error = errno.toSystemError(); +                        return AsyncIO.asError(errno.errno);                      },                      .result => {},                  } @@ -2863,6 +2915,7 @@ pub const Blob = struct {              pub fn doClonefile(this: *CopyFile) anyerror!void {                  switch (JSC.Node.Syscall.clonefile(this.destination_file_store.pathlike.path.sliceZAssume(), this.source_file_store.pathlike.path.sliceZAssume())) {                      .err => |errno| { +                        this.system_error = errno.toSystemError();                          return AsyncIO.asError(errno.errno);                      },                      .result => {}, @@ -2898,7 +2951,7 @@ pub const Blob = struct {                                          stat_ = result;                                          if (os.S.ISDIR(result.mode)) { -                                            this.errno = error.@"Bun.write() doesn't support directories yet."; +                                            this.system_error = unsupported_directory_error;                                              return;                                          } @@ -2907,7 +2960,7 @@ pub const Blob = struct {                                      },                                      .err => |err| {                                          // If we can't stat it, we also can't copy it. -                                        this.errno = AsyncIO.asError(err.errno); +                                        this.system_error = err.toSystemError();                                          return;                                      },                                  } @@ -2934,29 +2987,20 @@ pub const Blob = struct {                          }                      } -                    this.doOpenFile(.both) catch |err| { -                        this.errno = err; -                        return; -                    }; +                    this.doOpenFile(.both) catch return;                      // Do we need to open only one file?                  } else if (this.destination_fd == 0) {                      this.source_fd = this.source_file_store.pathlike.fd; -                    this.doOpenFile(.destination) catch |err| { -                        this.errno = err; -                        return; -                    }; +                    this.doOpenFile(.destination) catch return;                      // Do we need to open only one file?                  } else if (this.source_fd == 0) {                      this.destination_fd = this.destination_file_store.pathlike.fd; -                    this.doOpenFile(.source) catch |err| { -                        this.errno = err; -                        return; -                    }; +                    this.doOpenFile(.source) catch return;                  } -                if (this.errno != null) { +                if (this.system_error != null) {                      return;                  } @@ -2967,13 +3011,13 @@ pub const Blob = struct {                      .result => |result| result,                      .err => |err| {                          this.doClose(); -                        this.errno = AsyncIO.asError(err.errno); +                        this.system_error = err.toSystemError();                          return;                      },                  };                  if (os.S.ISDIR(stat.mode)) { -                    this.errno = error.@"Bun.write() doesn't support directories yet."; +                    this.system_error = unsupported_directory_error;                      this.doClose();                      return;                  } @@ -2992,15 +3036,15 @@ pub const Blob = struct {                  if (os.S.ISREG(stat.mode)) {                      if (comptime Environment.isLinux) { -                        this.doCopyFileRange() catch |err| { +                        this.doCopyFileRange() catch {                              this.doClose(); -                            this.errno = err; +                              return;                          };                      } else if (comptime Environment.isMac) { -                        this.doFCopyFile() catch |err| { +                        this.doFCopyFile() catch {                              this.doClose(); -                            this.errno = err; +                              return;                          };                          if (stat.size != 0 and @intCast(SizeType, stat.size) > this.max_length) { @@ -3010,7 +3054,7 @@ pub const Blob = struct {                          @compileError("TODO: implement copyfile");                      }                  } else { -                    this.errno = error.@"Bun.write() doesn't support non-regular files yet."; +                    this.system_error = unsupported_non_regular_file_error;                  }                  this.doClose(); @@ -3486,27 +3530,24 @@ pub const Blob = struct {              context: Blob,              promise: *JSPromise,              globalThis: *JSGlobalObject, -            pub fn run(handler: *@This(), bytes_: anyerror![]u8) void { +            pub fn run(handler: *@This(), bytes_: Blob.Store.ReadFile.ResultType) void {                  var promise = handler.promise;                  var blob = handler.context;                  blob.allocator = null;                  var globalThis = handler.globalThis;                  bun.default_allocator.destroy(handler); -                var bytes = bytes_ catch |err| { -                    var error_string = ZigString.init( -                        std.fmt.allocPrint(bun.default_allocator, "Failed to read file \"{s}\"", .{std.mem.span(@errorName(err))}) catch unreachable, -                    ); -                    error_string.mark(); -                    blob.detach(); - -                    promise.reject(globalThis, error_string.toErrorInstance(globalThis)); -                    return; -                }; - -                if (blob.size > 0) -                    blob.size = @minimum(@truncate(u32, bytes.len), blob.size); +                switch (bytes_) { +                    .result => |bytes| { +                        if (blob.size > 0) +                            blob.size = @minimum(@truncate(u32, bytes.len), blob.size); -                promise.resolve(globalThis, Function(&blob, globalThis, comptime lifetime)); +                        promise.resolve(globalThis, Function(&blob, globalThis, comptime lifetime)); +                    }, +                    .err => |err| { +                        blob.detach(); +                        promise.reject(globalThis, err.toErrorInstance(globalThis)); +                    }, +                }              }          };      } @@ -3518,22 +3559,20 @@ pub const Blob = struct {              var promise = handler.promise;              var globalThis = handler.globalThis;              bun.default_allocator.destroy(handler); -            var wrote = count catch |err| { -                var error_string = ZigString.init( -                    std.fmt.allocPrint(bun.default_allocator, "Failed to write file \"{s}\"", .{std.mem.span(@errorName(err))}) catch unreachable, -                ); -                error_string.mark(); -                promise.reject(globalThis, error_string.toErrorInstance(globalThis)); -                return; -            }; - -            promise.resolve(globalThis, JSC.JSValue.jsNumberFromUint64(wrote)); +            switch (count) { +                .err => |err| { +                    promise.reject(globalThis, err.toErrorInstance(globalThis)); +                }, +                .result => |wrote| { +                    promise.resolve(globalThis, JSC.JSValue.jsNumberFromUint64(wrote)); +                }, +            }          }      };      pub fn NewInternalReadFileHandler(comptime Context: type, comptime Function: anytype) type {          return struct { -            pub fn run(handler: *anyopaque, bytes_: anyerror![]u8) void { +            pub fn run(handler: *anyopaque, bytes_: Store.ReadFile.ResultType) void {                  Function(bun.cast(Context, handler), bytes_);              }          }; diff --git a/src/jsc.zig b/src/jsc.zig index 07e6ae5e6..553bcd65d 100644 --- a/src/jsc.zig +++ b/src/jsc.zig @@ -24,8 +24,11 @@ pub const API = struct {      pub const Transpiler = @import("./javascript/jsc/api/transpiler.zig");      pub const Server = @import("./javascript/jsc/api/server.zig").Server;      pub const SSLServer = @import("./javascript/jsc/api/server.zig").SSLServer; +    pub const DebugServer = @import("./javascript/jsc/api/server.zig").DebugServer; +    pub const DebugSSLServer = @import("./javascript/jsc/api/server.zig").DebugSSLServer;      pub const Bun = @import("./javascript/jsc/api/bun.zig");      pub const Router = @import("./javascript/jsc/api/router.zig"); +    pub const ServerConfig = @import("./javascript/jsc/api/server.zig").ServerConfig;  };  pub const Node = struct {      pub usingnamespace @import("./javascript/jsc/node/types.zig"); diff --git a/src/runtime.version b/src/runtime.version index 0bbf538da..9837b512c 100644 --- a/src/runtime.version +++ b/src/runtime.version @@ -1 +1 @@ -139d399765744be7
\ No newline at end of file +b8cf50ba67de2817
\ No newline at end of file diff --git a/src/runtime/hmr.ts b/src/runtime/hmr.ts index 75d4e0bea..6f030480e 100644 --- a/src/runtime/hmr.ts +++ b/src/runtime/hmr.ts @@ -359,19 +359,17 @@ if (typeof window !== "undefined") {        build: API.WebsocketMessageBuildSuccess,        timestamp: number      ) { +      debugger;        const start = performance.now();        var update = this.findCSSLinkTag(build.id);        // The last 4 bytes of the build message are the hash of the module        // Currently, this hash is only used for ensuring we reload the source-map -      var end = buffer.index + build.blob_length; -      if (end > buffer.data.length && end > 4) { -        end = buffer.data.length - 4; + +      let bytes = new Uint8Array(buffer.data.buffer, buffer.index); +      if (bytes.length > 4) { +        bytes = bytes.subarray(0, bytes.length - 4);        } -      let bytes = -        buffer.data.length > buffer.index -          ? buffer.data.subarray(buffer.index, end) -          : new Uint8Array(0);        if (update === null) {          __hmrlog.debug("Skipping unused CSS.");          return; @@ -431,15 +429,19 @@ if (typeof window !== "undefined") {              update.node.tagName === "LINK" ||              update.node.tagName === "STYLE"            ) { +            console.log("check");              // This might cause CSS specifity issues....              // I'm not 100% sure this is a safe operation              const sheet = new CSSStyleSheet(); -            sheet.replaceSync(this.decoder.decode(bytes)); -            update.node.remove(); +            const decoded = this.decoder.decode(bytes); + +            sheet.replaceSync(decoded); +              document.adoptedStyleSheets = [                ...document.adoptedStyleSheets,                sheet,              ]; +            update.node.remove();            }            break;          } diff --git a/types/src/bun.d.ts b/types/src/bun.d.ts index 49a452329..7f0374fd5 100644 --- a/types/src/bun.d.ts +++ b/types/src/bun.d.ts @@ -1,161 +1,162 @@ -export interface EncodeIntoResult { -  /** -   * The read Unicode code units of input. -   */ -  read: number; -  /** -   * The written UTF-8 bytes of output. -   */ -  written: number; -} - -type TypedArray = -  | Uint8Array -  | Int8Array -  | Uint8ClampedArray -  | Int16Array -  | Uint16Array -  | Int32Array -  | Uint32Array -  | Float32Array -  | Float64Array; - -export interface Crypto { -  getRandomValues(array: TypedArray): void; -  randomUUID(): string; -} - -declare namespace WebPlatform { -  export type Encoding = "utf-8" | "windows-1252" | "utf-16"; -} +declare global { +  export interface EncodeIntoResult { +    /** +     * The read Unicode code units of input. +     */ +    read: number; +    /** +     * The written UTF-8 bytes of output. +     */ +    written: number; +  } -/** - * An implementation of the [WHATWG Encoding Standard](https://encoding.spec.whatwg.org/) `TextEncoder` API. All - * instances of `TextEncoder` only support UTF-8 encoding. - * - * ```js - * const encoder = new TextEncoder(); - * const uint8array = encoder.encode('this is some data'); - * ``` - * - */ -export declare class TextEncoder { -  constructor(encoding?: "utf-8"); -  readonly encoding: "utf-8"; +  export interface Crypto { +    getRandomValues(array: TypedArray): void; +    randomUUID(): string; +  }    /** -   * UTF-8 encodes the `input` string and returns a `Uint8Array` containing the -   * encoded bytes. -   * @param [input='an empty string'] The text to encode. -   */ -  encode(input?: string): Uint8Array; -  /** -   * UTF-8 encodes the `src` string to the `dest` Uint8Array and returns an object -   * containing the read Unicode code units and written UTF-8 bytes. +   * An implementation of the [WHATWG Encoding Standard](https://encoding.spec.whatwg.org/) `TextEncoder` API. All +   * instances of `TextEncoder` only support UTF-8 encoding.     *     * ```js     * const encoder = new TextEncoder(); -   * const src = 'this is some data'; -   * const dest = new Uint8Array(10); -   * const { read, written } = encoder.encodeInto(src, dest); +   * const uint8array = encoder.encode('this is some data');     * ``` -   * @param src The text to encode. -   * @param dest The array to hold the encode result. +   *     */ -  encodeInto(src?: string, dest?: TypedArray): EncodeIntoResult; -} +  export class TextEncoder { +    constructor(encoding?: "utf-8"); +    readonly encoding: "utf-8"; -export declare class TextDecoder { -  constructor( -    encoding?: WebPlatform.Encoding, -    options?: { fatal?: boolean; ignoreBOM?: boolean } -  ); +    /** +     * UTF-8 encodes the `input` string and returns a `Uint8Array` containing the +     * encoded bytes. +     * @param [input='an empty string'] The text to encode. +     */ +    encode(input?: string): Uint8Array; +    /** +     * UTF-8 encodes the `src` string to the `dest` Uint8Array and returns an object +     * containing the read Unicode code units and written UTF-8 bytes. +     * +     * ```js +     * const encoder = new TextEncoder(); +     * const src = 'this is some data'; +     * const dest = new Uint8Array(10); +     * const { read, written } = encoder.encodeInto(src, dest); +     * ``` +     * @param src The text to encode. +     * @param dest The array to hold the encode result. +     */ +    encodeInto(src?: string, dest?: TypedArray): EncodeIntoResult; +  } -  encoding: WebPlatform.Encoding; -  ignoreBOM: boolean; -  fatal: boolean; +  export class TextDecoder { +    constructor( +      encoding?: Bun.WebPlatform.Encoding, +      options?: { fatal?: boolean; ignoreBOM?: boolean } +    ); -  /** -   * Decodes the `input` and returns a string. If `options.stream` is `true`, any -   * incomplete byte sequences occurring at the end of the `input` are buffered -   * internally and emitted after the next call to `textDecoder.decode()`. -   * -   * If `textDecoder.fatal` is `true`, decoding errors that occur will result in a`TypeError` being thrown. -   * @param input An `ArrayBuffer`, `DataView` or `TypedArray` instance containing the encoded data. -   */ -  decode(input?: TypedArray | ArrayBuffer): string; -} +    encoding: Bun.WebPlatform.Encoding; +    ignoreBOM: boolean; +    fatal: boolean; -type Platform = -  /** -   * When building for bun.js -   */ -  | "bun" -  /** -   * When building for the web -   */ -  | "browser" -  /** -   * When building for node.js -   */ -  | "node" -  | "neutral"; - -// This lets you use macros -interface MacroMap { -  // @example -  // ``` -  // { -  //   "react-relay": { -  //     "graphql": "bun-macro-relay/bun-macro-relay.tsx" -  //   } -  // } -  // ``` -  [packagePath: string]: { -    [importItemName: string]: string; -  }; -} +    /** +     * Decodes the `input` and returns a string. If `options.stream` is `true`, any +     * incomplete byte sequences occurring at the end of the `input` are buffered +     * internally and emitted after the next call to `textDecoder.decode()`. +     * +     * If `textDecoder.fatal` is `true`, decoding errors that occur will result in a`TypeError` being thrown. +     * @param input An `ArrayBuffer`, `DataView` or `TypedArray` instance containing the encoded data. +     */ +    decode(input?: TypedArray | ArrayBuffer): string; +  } -export type StringOrBuffer = string | TypedArray | ArrayBufferLike; -export type PathLike = string | TypedArray | ArrayBufferLike; +  type TypedArray = +    | Uint8Array +    | Int8Array +    | Uint8ClampedArray +    | Int16Array +    | Uint16Array +    | Int32Array +    | Uint32Array +    | Float32Array +    | Float64Array; -export declare interface FetchEvent { -  request: Request; -  respondWith(r: Response | PromiseLike<Response>): void; -} +  namespace Bun { +    namespace WebPlatform { +      export type Encoding = "utf-8" | "windows-1252" | "utf-16"; +    } -export function addEventListener( -  event: "fetch", -  listener: (event: FetchEvent) => Promise<void> -): void; +    type Platform = +      /** +       * When building for bun.js +       */ +      | "bun" +      /** +       * When building for the web +       */ +      | "browser" +      /** +       * When building for node.js +       */ +      | "node" +      | "neutral"; -export declare namespace Bun { -  type JavaScriptLoader = "jsx" | "js" | "ts" | "tsx"; +    // This lets you use macros +    interface MacroMap { +      // @example +      // ``` +      // { +      //   "react-relay": { +      //     "graphql": "bun-macro-relay/bun-macro-relay.tsx" +      //   } +      // } +      // ``` +      [packagePath: string]: { +        [importItemName: string]: string; +      }; +    } + +    export type StringOrBuffer = string | TypedArray | ArrayBufferLike; +    export type PathLike = string | TypedArray | ArrayBufferLike; + +    export interface FetchEvent { +      request: Request; +      respondWith(r: Response | PromiseLike<Response>): void; +    } -  interface TranspilerOptions { -    /** Replace key with value. Value must be a JSON string. +    export function addEventListener( +      event: "fetch", +      listener: (event: FetchEvent) => Promise<void> +    ): void; + +    type JavaScriptLoader = "jsx" | "js" | "ts" | "tsx"; + +    interface TranspilerOptions { +      /** Replace key with value. Value must be a JSON string.       @example       ```       { "process.env.NODE_ENV": "\"production\"" }       ```      */ -    define?: Record<string, string>; +      define?: Record<string, string>; -    /** What is the default loader used for this transpiler?  */ -    loader?: JavaScriptLoader; +      /** What is the default loader used for this transpiler?  */ +      loader?: JavaScriptLoader; -    /**  What platform are we targeting? This may affect how import and/or require is used */ -    /**  @example "browser" */ -    platform?: Platform; +      /**  What platform are we targeting? This may affect how import and/or require is used */ +      /**  @example "browser" */ +      platform?: Platform; -    /** +      /**         TSConfig.json file as stringified JSON or an object         Use this to set a custom JSX factory, fragment, or import source         For example, if you want to use Preact instead of React. Or if you want to use Emotion.       */ -    tsconfig?: string; +      tsconfig?: string; -    /**  +      /**        Replace an import statement with a macro.       This will remove the import statement from the final output @@ -192,66 +193,261 @@ export declare namespace Bun {      const query = UserQuery;      ```      */ -    macros: MacroMap; -  } +      macros: MacroMap; +    } -  export class Transpiler { -    constructor(options: TranspilerOptions); +    export class Transpiler { +      constructor(options: TranspilerOptions); -    /** Transpile code from TypeScript or JSX into valid JavaScript. -     * This function does not resolve imports. -     * @param code The code to transpile -     */ -    transform(code: StringOrBuffer, loader?: JavaScriptLoader): Promise<string>; -    /** Transpile code from TypeScript or JSX into valid JavaScript. -     * This function does not resolve imports. -     * @param code The code to transpile -     */ -    transformSync(code: StringOrBuffer, loader?: JavaScriptLoader): string; +      /** Transpile code from TypeScript or JSX into valid JavaScript. +       * This function does not resolve imports. +       * @param code The code to transpile +       */ +      transform( +        code: StringOrBuffer, +        loader?: JavaScriptLoader +      ): Promise<string>; +      /** Transpile code from TypeScript or JSX into valid JavaScript. +       * This function does not resolve imports. +       * @param code The code to transpile +       */ +      transformSync(code: StringOrBuffer, loader?: JavaScriptLoader): string; + +      /** Get a list of import paths and export paths from a TypeScript, JSX, TSX, or JavaScript file. +       * @param code The code to scan +       * @example +       * ```js +       * const {imports, exports} = transpiler.scan(` +       * import {foo} from "baz"; +       * export const hello = "hi!"; +       * `); +       * +       * console.log(imports); // ["baz"] +       * console.log(exports); // ["hello"] +       * ``` +       */ +      scan(code: StringOrBuffer): { exports: string[]; imports: Import[] }; + +      /** Get a list of import paths from a TypeScript, JSX, TSX, or JavaScript file. +       * @param code The code to scan +       * @example +       * ```js +       * const imports = transpiler.scanImports(` +       * import {foo} from "baz"; +       * import type {FooType} from "bar"; +       * import type {DogeType} from "wolf"; +       * `); +       * +       * console.log(imports); // ["baz"] +       * ``` +       * This is a fast path which performs less work than `scan`. +       */ +      scanImports(code: StringOrBuffer): Import[]; +    } -    /** Get a list of import paths and export paths from a TypeScript, JSX, TSX, or JavaScript file. -     * @param code The code to scan +    type Import = { +      path: string; + +      kind: +        | "import-statement" +        | "require-call" +        | "require-resolve" +        | "dynamic-import" +        | "import-rule" +        | "url-token" +        | "internal" +        | "entry-point"; +    }; + +    export interface HTTP { +      /** +       * What port should the server listen on? +       * @default process.env.PORT || "3000" +       */ +      port?: string | number; +      /** +       * What hostname should the server listen on? +       * @default "0.0.0.0" // listen on all interfaces +       * @example "127.0.0.1" // Only listen locally +       * @example "remix.run" // Only listen on remix.run +       */ +      hostname?: string; + +      /** +       * What is the maximum size of a request body? (in bytes) +       * @default 1024 * 1024 * 128 // 128MB +       */ +      maxRequestBodySize?: number; + +      /** +       * Render contextual errors? This enables bun's error page +       * @default process.env.NODE_ENV !== 'production' +       */ +      development?: boolean; + +      fetch(request: Request): Response | Promise<Response>; + +      error?: ( +        request: Request +      ) => Response | Promise<Response> | undefined | Promise<undefined>; +    } + +    interface Errorlike extends Error { +      code?: string; +      errno?: number; +      syscall?: string; +    } + +    interface SSLAdvancedOptions { +      passphrase?: string; +      caFile?: string; +      dhParamsFile?: string; + +      /** +       * This sets `OPENSSL_RELEASE_BUFFERS` to 1. +       * It reduces overall performance but saves some memory. +       * @default false +       */ +      lowMemoryMode?: boolean; +    } +    interface SSLOptions { +      /** +       * File path to a TLS key +       * +       * To enable TLS, this option is required. +       */ +      keyFile: string; +      /** +       * File path to a TLS certificate +       * +       * To enable TLS, this option is required. +       */ +      certFile: string; +    } + +    export type SSLServeOptions = HTTP & +      SSLOptions & +      SSLAdvancedOptions & { +        /**  +          The keys are [SNI](https://en.wikipedia.org/wiki/Server_Name_Indication) hostnames. +          The values are SSL options objects.  +        */ +        serverNames: Record<string, SSLOptions & SSLAdvancedOptions>; +      }; + +    export type Serve = SSLServeOptions | HTTP; +    export function serve(options?: Serve): void; + +    /** +     * [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) powered by the fastest system calls available for operating on files. +     * +     * This Blob is lazy. That means it won't do any work until you read from it. +     * +     * - `size` will not be valid until the contents of the file are read at least once. +     * - `type` is auto-set based on the file extension when possible +     *       * @example       * ```js -     * const {imports, exports} = transpiler.scan(` -     * import {foo} from "baz"; -     * export const hello = "hi!"; -     * `); +     * const file = Bun.file("./hello.json"); +     * console.log(file.type); // "application/json" +     * console.log(await file.json()); // { hello: "world" } +     * ```       * -     * console.log(imports); // ["baz"] -     * console.log(exports); // ["hello"] +     * @example +     * ```js +     * await Bun.write( +     *   Bun.file("./hello.txt"), +     *   "Hello, world!" +     * );       * ``` +     * @param path The path to the file (lazily loaded) +     *       */ -    scan(code: StringOrBuffer): { exports: string[]; imports: Import[] }; +    export function file(path: string, options?: BlobPropertyBag): FileBlob; -    /** Get a list of import paths from a TypeScript, JSX, TSX, or JavaScript file. -     * @param code The code to scan +    /** +     * `Blob` that leverages the fastest system calls available to operate on files. +     * +     * This Blob is lazy. It won't do any work until you read from it. Errors propagate as promise rejections. +     * +     * `Blob.size` will not be valid until the contents of the file are read at least once. +     * `Blob.type` will have a default set based on the file extension +     *       * @example       * ```js -     * const imports = transpiler.scanImports(` -     * import {foo} from "baz"; -     * import type {FooType} from "bar"; -     * import type {DogeType} from "wolf"; -     * `); +     * const file = Bun.file(new TextEncoder.encode("./hello.json")); +     * console.log(file.type); // "application/json" +     * ```       * -     * console.log(imports); // ["baz"] +     * @param path The path to the file as a byte buffer (the buffer is copied) +     */ +    export function file( +      path: ArrayBufferLike | Uint8Array, +      options?: BlobPropertyBag +    ): FileBlob; + +    /** +     * [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) powered by the fastest system calls available for operating on files. +     * +     * This Blob is lazy. That means it won't do any work until you read from it. +     * +     * - `size` will not be valid until the contents of the file are read at least once. +     * +     * @example +     * ```js +     * const file = Bun.file(fd);       * ``` -     * This is a fast path which performs less work than `scan`. +     * +     * @param fileDescriptor The file descriptor of the file +     */ +    export function file( +      fileDescriptor: number, +      options?: BlobPropertyBag +    ): FileBlob; +  } + +  export interface Blob { +    /** +     * Read the contents of the [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) as a JSON object +     * @warn in browsers, this function is only available for `Response` and `Request` +     */ +    json(): Promise<any>; +    /** +     * Read the [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) as a UTF-8 string +     * @link https://developer.mozilla.org/en-US/docs/Web/API/Blob/text +     */ +    text(): Promise<string>; +    /** +     * Read the [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) as an ArrayBuffer object +     * @link https://developer.mozilla.org/en-US/docs/Web/API/Blob/arrayBuffer       */ -    scanImports(code: StringOrBuffer): Import[]; +    arrayBuffer(): Promise<ArrayBuffer>;    } -  type Import = { -    path: string; - -    kind: -      | "import-statement" -      | "require-call" -      | "require-resolve" -      | "dynamic-import" -      | "import-rule" -      | "url-token" -      | "internal" -      | "entry-point"; -  }; +  /** +   * [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) powered by the fastest system calls available for operating on files. +   * +   * This Blob is lazy. That means it won't do any work until you read from it. +   * +   * - `size` will not be valid until the contents of the file are read at least once. +   * - `type` is auto-set based on the file extension when possible +   * +   * @example +   * ```js +   * const file = Bun.file("./hello.json"); +   * console.log(file.type); // "application/json" +   * console.log(await file.json()); // { hello: "world" } +   * ``` +   * +   * @example +   * ```js +   * await Bun.write( +   *   Bun.file("./hello.txt"), +   *   "Hello, world!" +   * ); +   * ``` +   * +   */ +  export interface FileBlob extends Blob {}  } +export {}; | 
