aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-25 07:12:02 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-25 07:12:02 -0700
commite3fb88b06af43665128083cec2cf8cad45148cf6 (patch)
tree405ea57a73fa3b5446987cc3d8593cff8d6f4ac2 /src
parentbe5789fe01eb510ba56c101e2cef82b37dc2ad07 (diff)
downloadbun-e3fb88b06af43665128083cec2cf8cad45148cf6.tar.gz
bun-e3fb88b06af43665128083cec2cf8cad45148cf6.tar.zst
bun-e3fb88b06af43665128083cec2cf8cad45148cf6.zip
[bun.js] configuration and error handling for HTTP server
Diffstat (limited to 'src')
-rw-r--r--src/bundler/entry_points.zig12
-rw-r--r--src/bunfig.zig12
-rw-r--r--src/comptime_string_map.zig8
-rw-r--r--src/deps/uws.zig4
-rw-r--r--src/http/mime_type.zig2453
-rw-r--r--src/http/websocket.zig4
-rw-r--r--src/javascript/jsc/api/bun.zig39
-rw-r--r--src/javascript/jsc/api/html_rewriter.zig31
-rw-r--r--src/javascript/jsc/api/server.zig389
-rw-r--r--src/javascript/jsc/bindings/bindings.zig7
-rw-r--r--src/javascript/jsc/webcore/response.zig211
-rw-r--r--src/jsc.zig3
-rw-r--r--src/runtime.version2
-rw-r--r--src/runtime/hmr.ts20
14 files changed, 1787 insertions, 1408 deletions
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;
}