local FILES = { license = "text/plain", ["cargo.lock"] = "application/json", } local EXTS = { ["123"] = "application/vnd.lotus-1-2-3", ["3dml"] = "text/vnd.in3d.3dml", ["3ds"] = "image/x-3ds", ["3g2"] = "video/3gpp2", ["3gp"] = "video/3gpp", ["7z"] = "application/x-7z-compressed", ["for"] = "text/fortran", ["in"] = "text/plain", ["n-gage"] = "application/vnd.nokia.n-gage.symbian.install", ["sfd-hdstx"] = "application/vnd.hydrostatix.sof-data", aab = "application/x-authorware-bin", aac = "audio/x-aac", aam = "application/x-authorware-map", aas = "application/x-authorware-seg", abw = "application/x-abiword", ac = "application/pkix-attr-cert", acc = "application/vnd.americandynamics.acc", ace = "application/x-ace-compressed", acu = "application/vnd.acucobol", acutc = "application/vnd.acucorp", adp = "audio/adpcm", aep = "application/vnd.audiograph", afm = "application/x-font-type1", afp = "application/vnd.ibm.modcap", ahead = "application/vnd.ahead.space", ai = "application/postscript", aif = "audio/x-aiff", aifc = "audio/x-aiff", aiff = "audio/x-aiff", air = "application/vnd.adobe.air-application-installer-package+zip", ait = "application/vnd.dvb.ait", ami = "application/vnd.amiga.ami", apk = "application/vnd.android.package-archive", appcache = "text/cache-manifest", application = "application/x-ms-application", apr = "application/vnd.lotus-approach", arc = "application/x-freearc", asc = "application/pgp-signature", asf = "video/x-ms-asf", asm = "text/asm", aso = "application/vnd.accpac.simply.aso", ass = "text/x-ass", asx = "video/x-ms-asf", atc = "application/vnd.acucorp", atom = "application/atom+xml", atomcat = "application/atomcat+xml", atomsvc = "application/atomsvc+xml", atx = "application/vnd.antix.game-component", au = "audio/basic", avi = "video/x-msvideo", avif = "image/avif", aw = "application/applixware", azf = "application/vnd.airzip.filesecure.azf", azs = "application/vnd.airzip.filesecure.azs", azw = "application/vnd.amazon.ebook", bash = "text/shellscript", bat = "application/x-msdownload", bcpio = "application/x-bcpio", bdf = "application/x-font-bdf", bdm = "application/vnd.syncml.dm+wbxml", bed = "application/vnd.realvnc.bed", bh2 = "application/vnd.fujitsu.oasysprs", bin = "application/octet-stream", blb = "application/x-blorb", blorb = "application/x-blorb", bmi = "application/vnd.bmi", bmp = "image/bmp", book = "application/vnd.framemaker", box = "application/vnd.previewsystems.box", boz = "application/x-bzip2", bpk = "application/octet-stream", btif = "image/prs.btif", bz = "application/x-bzip", bz2 = "application/x-bzip2", c = "text/c", c11amc = "application/vnd.cluetrust.cartomobile-config", c11amz = "application/vnd.cluetrust.cartomobile-config-pkg", c4d = "application/vnd.clonk.c4group", c4f = "application/vnd.clonk.c4group", c4g = "application/vnd.clonk.c4group", c4p = "application/vnd.clonk.c4group", c4u = "application/vnd.clonk.c4group", cab = "application/vnd.ms-cab-compressed", caf = "audio/x-caf", cap = "application/vnd.tcpdump.pcap", car = "application/vnd.curl.car", cat = "application/vnd.ms-pki.seccat", cb7 = "application/x-cbr", cba = "application/x-cbr", cbr = "application/x-cbr", cbt = "application/x-cbr", cbz = "application/x-cbr", cc = "text/c", cct = "application/x-director", ccxml = "application/ccxml+xml", cdbcmsg = "application/vnd.contact.cmsg", cdf = "application/x-netcdf", cdkey = "application/vnd.mediastation.cdkey", cdmia = "application/cdmi-capability", cdmic = "application/cdmi-container", cdmid = "application/cdmi-domain", cdmio = "application/cdmi-object", cdmiq = "application/cdmi-queue", cdx = "chemical/x-cdx", cdxml = "application/vnd.chemdraw+xml", cdy = "application/vnd.cinderella", cer = "application/pkix-cert", cfg = "text/plain", cfs = "application/x-cfs-compressed", cgm = "image/cgm", chat = "application/x-chat", chm = "application/vnd.ms-htmlhelp", chrt = "application/vnd.kde.kchart", cif = "chemical/x-cif", cii = "application/vnd.anser-web-certificate-issue-initiation", cil = "application/vnd.ms-artgalry", cla = "application/vnd.claymore", class = "application/java-vm", clkk = "application/vnd.crick.clicker.keyboard", clkp = "application/vnd.crick.clicker.palette", clkt = "application/vnd.crick.clicker.template", clkw = "application/vnd.crick.clicker.wordbank", clkx = "application/vnd.crick.clicker", clp = "application/x-msclip", cmc = "application/vnd.cosmocaller", cmdf = "chemical/x-cmdf", cml = "chemical/x-cml", cmp = "application/vnd.yellowriver-custom-menu", cmx = "image/x-cmx", cod = "application/vnd.rim.cod", com = "application/x-msdownload", conf = "text/plain", cpio = "application/x-cpio", cpp = "text/c", cpt = "application/mac-compactpro", crd = "application/x-mscardfile", crl = "application/pkix-crl", crt = "application/x-x509-ca-cert", cryptonote = "application/vnd.rig.cryptonote", csh = "application/x-csh", csml = "chemical/x-csml", csp = "application/vnd.commonspace", css = "text/css", cst = "application/x-director", csv = "text/csv", cu = "application/cu-seeme", curl = "text/vnd.curl", cww = "application/prs.cww", cxt = "application/x-director", cxx = "text/c", dae = "model/vnd.collada+xml", daf = "application/vnd.mobius.daf", dart = "application/vnd.dart", dataless = "application/vnd.fdsn.seed", davmount = "application/davmount+xml", dbk = "application/docbook+xml", dcr = "application/x-director", dcurl = "text/vnd.curl.dcurl", dd2 = "application/vnd.oma.dd2+xml", ddd = "application/vnd.fujixerox.ddd", deb = "application/x-debian-package", def = "text/plain", deploy = "application/octet-stream", der = "application/x-x509-ca-cert", dfac = "application/vnd.dreamfactory", dgc = "application/x-dgc-compressed", dic = "text/c", dir = "application/x-director", dis = "application/vnd.mobius.dis", dist = "application/octet-stream", distz = "application/octet-stream", djv = "image/vnd.djvu", djvu = "image/vnd.djvu", dll = "application/x-msdownload", dmg = "application/x-apple-diskimage", dmp = "application/vnd.tcpdump.pcap", dms = "application/octet-stream", dna = "application/vnd.dna", doc = "application/msword", docm = "application/vnd.ms-word.document.macroenabled.12", docx = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", dot = "application/msword", dotm = "application/vnd.ms-word.template.macroenabled.12", dotx = "application/vnd.openxmlformats-officedocument.wordprocessingml.template", dp = "application/vnd.osgi.dp", dpg = "application/vnd.dpgraph", dra = "audio/vnd.dra", dsc = "text/prs.lines.tag", dssc = "application/dssc+der", dtb = "application/x-dtbook+xml", dtd = "application/xml-dtd", dts = "audio/vnd.dts", dtshd = "audio/vnd.dts.hd", dump = "application/octet-stream", dvb = "video/vnd.dvb.file", dvi = "application/x-dvi", dwf = "model/vnd.dwf", dwg = "image/vnd.dwg", dxf = "image/vnd.dxf", dxp = "application/vnd.spotfire.dxp", dxr = "application/x-director", ebuild = "application/vnd.gentoo.ebuild", ecelp4800 = "audio/vnd.nuera.ecelp4800", ecelp7470 = "audio/vnd.nuera.ecelp7470", ecelp9600 = "audio/vnd.nuera.ecelp9600", eclass = "application/vnd.gentoo.eclass", ecma = "application/ecmascript", edm = "application/vnd.novadigm.edm", edx = "application/vnd.novadigm.edx", efif = "application/vnd.picsel", ei6 = "application/vnd.pg.osasli", elc = "application/octet-stream", emf = "application/x-msmetafile", eml = "message/rfc822", emma = "application/emma+xml", emz = "application/x-msmetafile", env = "text/plain", eol = "audio/vnd.digital-winds", eot = "application/vnd.ms-fontobject", eps = "application/postscript", epub = "application/epub+zip", es3 = "application/vnd.eszigno3+xml", esa = "application/vnd.osgi.subsystem", esf = "application/vnd.epson.esf", et3 = "application/vnd.eszigno3+xml", etx = "text/setext", eva = "application/x-eva", evy = "application/x-envoy", exe = "application/x-msdownload", exi = "application/exi", ext = "application/vnd.novadigm.ext", ez = "application/andrew-inset", ez2 = "application/vnd.ezpix-album", ez3 = "application/vnd.ezpix-package", f = "text/fortran", f4v = "video/x-f4v", f77 = "text/fortran", f90 = "text/fortran", fbs = "image/vnd.fastbidsheet", fcdt = "application/vnd.adobe.formscentral.fcdt", fcs = "application/vnd.isac.fcs", fdf = "application/vnd.fdf", fe_launch = "application/vnd.denovo.fcselayout-link", fg5 = "application/vnd.fujitsu.oasysgp", fgd = "application/x-director", fh = "image/x-freehand", fh4 = "image/x-freehand", fh5 = "image/x-freehand", fh7 = "image/x-freehand", fhc = "image/x-freehand", fig = "application/x-xfig", fish = "text/shellscript", flac = "audio/x-flac", fli = "video/x-fli", flo = "application/vnd.micrografx.flo", flv = "video/x-flv", flw = "application/vnd.kde.kivio", flx = "text/vnd.fmi.flexstor", fly = "text/vnd.fly", fm = "application/vnd.framemaker", fnc = "application/vnd.frogans.fnc", fpx = "image/vnd.fpx", frame = "application/vnd.framemaker", fsc = "application/vnd.fsc.weblaunch", fst = "image/vnd.fst", ftc = "application/vnd.fluxtime.clip", fti = "application/vnd.anser-web-funds-transfer-initiation", fvt = "video/vnd.fvt", fxp = "application/vnd.adobe.fxp", fxpl = "application/vnd.adobe.fxp", fzs = "application/vnd.fuzzysheet", g2w = "application/vnd.geoplan", g3 = "image/g3fax", g3w = "application/vnd.geospace", gac = "application/vnd.groove-account", gam = "application/x-tads", gbr = "application/rpki-ghostbusters", gca = "application/x-gca-compressed", gdl = "model/vnd.gdl", geo = "application/vnd.dynageo", gex = "application/vnd.geometry-explorer", ggb = "application/vnd.geogebra.file", ggs = "application/vnd.geogebra.slides", ggt = "application/vnd.geogebra.tool", ghf = "application/vnd.groove-help", gif = "image/gif", gim = "application/vnd.groove-identity-message", gml = "application/gml+xml", gmx = "application/vnd.gmx", gnumeric = "application/x-gnumeric", go = "text/go", gph = "application/vnd.flographit", gpx = "application/gpx+xml", gqf = "application/vnd.grafeq", gqs = "application/vnd.grafeq", gram = "application/srgs", gramps = "application/x-gramps-xml", gre = "application/vnd.geometry-explorer", grv = "application/vnd.groove-injector", grxml = "application/srgs+xml", gsf = "application/x-font-ghostscript", gtar = "application/x-gtar", gtm = "application/vnd.groove-tool-message", gtw = "model/vnd.gtw", gv = "text/vnd.graphviz", gxf = "application/gxf", gxt = "application/vnd.geonext", h = "text/c", h261 = "video/h261", h263 = "video/h263", h264 = "video/h264", hal = "application/vnd.hal+xml", hbci = "application/vnd.hbci", hcl = "text/hcl", hdf = "application/x-hdf", hh = "text/c", hlp = "application/winhlp", hpgl = "application/vnd.hp-hpgl", hpid = "application/vnd.hp-hpid", hpp = "text/c", hps = "application/vnd.hp-hps", hqx = "application/mac-binhex40", htke = "application/vnd.kenameaapp", htm = "text/html", html = "text/html", hvd = "application/vnd.yamaha.hv-dic", hvp = "application/vnd.yamaha.hv-voice", hvs = "application/vnd.yamaha.hv-script", i2g = "application/vnd.intergeo", icc = "application/vnd.iccprofile", ice = "x-conference/x-cooltalk", icm = "application/vnd.iccprofile", ico = "image/x-icon", ics = "text/calendar", ief = "image/ief", ifb = "text/calendar", ifm = "application/vnd.shana.informed.formdata", iges = "model/iges", igl = "application/vnd.igloader", igm = "application/vnd.insors.igm", igs = "model/iges", igx = "application/vnd.micrografx.igx", iif = "application/vnd.shana.informed.interchange", imp = "application/vnd.accpac.simply.imp", ims = "application/vnd.ms-ims", ini = "text/plain", ink = "application/inkml+xml", inkml = "application/inkml+xml", install = "application/x-install-instructions", iota = "application/vnd.astraea-software.iota", ipfix = "application/ipfix", ipk = "application/vnd.shana.informed.package", irm = "application/vnd.ibm.rights-management", irp = "application/vnd.irepository.package+xml", iso = "application/x-iso9660-image", itp = "application/vnd.shana.informed.formtemplate", ivp = "application/vnd.immervision-ivp", ivu = "application/vnd.immervision-ivu", jad = "text/vnd.sun.j2me.app-descriptor", jam = "application/vnd.jam", jar = "application/java-archive", java = "text/java-source", jisp = "application/vnd.jisp", jlt = "application/vnd.hp-jlyt", jnlp = "application/x-java-jnlp-file", joda = "application/vnd.joost.joda-archive", jpe = "image/jpeg", jpeg = "image/jpeg", jpg = "image/jpeg", jpgm = "video/jpm", jpgv = "video/jpeg", jpm = "video/jpm", js = "text/javascript", json = "application/json", jsonc = "application/json", jsonml = "application/jsonml+json", jsx = "text/jsx", jxl = "image/jxl", kar = "audio/midi", karbon = "application/vnd.kde.karbon", kfo = "application/vnd.kde.kformula", kia = "application/vnd.kidspiration", kml = "application/vnd.google-earth.kml+xml", kmz = "application/vnd.google-earth.kmz", kne = "application/vnd.kinar", knp = "application/vnd.kinar", kon = "application/vnd.kde.kontour", kpr = "application/vnd.kde.kpresenter", kpt = "application/vnd.kde.kpresenter", kpxx = "application/vnd.ds-keypoint", ksp = "application/vnd.kde.kspread", ktr = "application/vnd.kahootz", ktx = "image/ktx", ktz = "application/vnd.kahootz", kwd = "application/vnd.kde.kword", kwt = "application/vnd.kde.kword", lasxml = "application/vnd.las.las+xml", latex = "application/x-latex", lbd = "application/vnd.llamagraphics.life-balance.desktop", lbe = "application/vnd.llamagraphics.life-balance.exchange+xml", les = "application/vnd.hhe.lesson-player", lha = "application/x-lzh-compressed", link66 = "application/vnd.route66.link66+xml", list = "text/plain", list3820 = "application/vnd.ibm.modcap", listafp = "application/vnd.ibm.modcap", lnk = "application/x-ms-shortcut", log = "text/plain", lostxml = "application/lost+xml", lrf = "application/octet-stream", lrm = "application/vnd.ms-lrm", ltf = "application/vnd.frogans.ltf", lua = "text/lua", lvp = "audio/vnd.lucent.voice", lwp = "application/vnd.lotus-wordpro", lzh = "application/x-lzh-compressed", m13 = "application/x-msmediaview", m14 = "application/x-msmediaview", m1v = "video/mpeg", m21 = "application/mp21", m2a = "audio/mpeg", m2t = "video/mp2t", m2ts = "video/mp2t", m2v = "video/mpeg", m3a = "audio/mpeg", m3u = "audio/x-mpegurl", m3u8 = "application/vnd.apple.mpegurl", m4a = "audio/mp4", m4u = "video/vnd.mpegurl", m4v = "video/x-m4v", ma = "application/mathematica", mads = "application/mads+xml", mag = "application/vnd.ecowin.chart", maker = "application/vnd.framemaker", man = "text/troff", mar = "application/octet-stream", mathml = "application/mathml+xml", mb = "application/mathematica", mbk = "application/vnd.mobius.mbk", mbox = "application/mbox", mc1 = "application/vnd.medcalcdata", mcd = "application/vnd.mcd", mcurl = "text/vnd.curl.mcurl", md = "text/markdown", mdb = "application/x-msaccess", mdi = "image/vnd.ms-modi", me = "text/troff", mesh = "model/mesh", meta4 = "application/metalink4+xml", metalink = "application/metalink+xml", mets = "application/mets+xml", mfm = "application/vnd.mfmp", mft = "application/rpki-manifest", mgp = "application/vnd.osgeo.mapguide.package", mgz = "application/vnd.proteus.magazine", mid = "audio/midi", midi = "audio/midi", mie = "application/x-mie", mif = "application/vnd.mif", mime = "message/rfc822", mj2 = "video/mj2", mjp2 = "video/mj2", mjs = "text/javascript", mk3d = "video/x-matroska", mka = "audio/x-matroska", mks = "video/x-matroska", mkv = "video/x-matroska", mlp = "application/vnd.dolby.mlp", mmd = "application/vnd.chipnuts.karaoke-mmd", mmf = "application/vnd.smaf", mmr = "image/vnd.fujixerox.edmics-mmr", mng = "video/x-mng", mny = "application/x-msmoney", mobi = "application/x-mobipocket-ebook", mods = "application/mods+xml", mov = "video/quicktime", movie = "video/x-sgi-movie", mp2 = "audio/mpeg", mp21 = "application/mp21", mp2a = "audio/mpeg", mp3 = "audio/mpeg", mp4 = "video/mp4", mp4a = "audio/mp4", mp4s = "application/mp4", mp4v = "video/mp4", mpc = "application/vnd.mophun.certificate", mpe = "video/mpeg", mpeg = "video/mpeg", mpg = "video/mpeg", mpg4 = "video/mp4", mpga = "audio/mpeg", mpkg = "application/vnd.apple.installer+xml", mpm = "application/vnd.blueice.multipass", mpn = "application/vnd.mophun.application", mpp = "application/vnd.ms-project", mpt = "application/vnd.ms-project", mpy = "application/vnd.ibm.minipay", mqy = "application/vnd.mobius.mqy", mrc = "application/marc", mrcx = "application/marcxml+xml", ms = "text/troff", mscml = "application/mediaservercontrol+xml", mseed = "application/vnd.fdsn.mseed", mseq = "application/vnd.mseq", msf = "application/vnd.epson.msf", msh = "model/mesh", msi = "application/x-msdownload", msl = "application/vnd.mobius.msl", msty = "application/vnd.muvee.style", mts = "video/mp2t", mus = "application/vnd.musician", musicxml = "application/vnd.recordare.musicxml+xml", mvb = "application/x-msmediaview", mwf = "application/vnd.mfer", mxf = "application/mxf", mxl = "application/vnd.recordare.musicxml", mxml = "application/xv+xml", mxs = "application/vnd.triscape.mxs", mxu = "video/vnd.mpegurl", n3 = "text/n3", nb = "application/mathematica", nbp = "application/vnd.wolfram.player", nc = "application/x-netcdf", ncx = "application/x-dtbncx+xml", nfo = "text/nfo", ngdat = "application/vnd.nokia.n-gage.data", nitf = "application/vnd.nitf", nix = "text/nix", nlu = "application/vnd.neurolanguage.nlu", nml = "application/vnd.enliven", nnd = "application/vnd.noblenet-directory", nns = "application/vnd.noblenet-sealer", nnw = "application/vnd.noblenet-web", npx = "image/vnd.net-fpx", nsc = "application/x-conference", nsf = "application/vnd.lotus-notes", ntf = "application/vnd.nitf", nzb = "application/x-nzb", oa2 = "application/vnd.fujitsu.oasys2", oa3 = "application/vnd.fujitsu.oasys3", oas = "application/vnd.fujitsu.oasys", obd = "application/x-msbinder", obj = "application/x-tgif", oda = "application/oda", odb = "application/vnd.oasis.opendocument.database", odc = "application/vnd.oasis.opendocument.chart", odf = "application/vnd.oasis.opendocument.formula", odft = "application/vnd.oasis.opendocument.formula-template", odg = "application/vnd.oasis.opendocument.graphics", odi = "application/vnd.oasis.opendocument.image", odm = "application/vnd.oasis.opendocument.text-master", odp = "application/vnd.oasis.opendocument.presentation", ods = "application/vnd.oasis.opendocument.spreadsheet", odt = "application/vnd.oasis.opendocument.text", oga = "audio/ogg", ogg = "audio/ogg", ogv = "video/ogg", ogx = "application/ogg", omdoc = "application/omdoc+xml", onepkg = "application/onenote", onetmp = "application/onenote", onetoc = "application/onenote", onetoc2 = "application/onenote", opf = "application/oebps-package+xml", opml = "text/opml", oprc = "application/vnd.palm", opus = "audio/ogg", org = "application/vnd.lotus-organizer", osf = "application/vnd.yamaha.openscoreformat", osfpvg = "application/vnd.yamaha.openscoreformat.osfpvg+xml", otc = "application/vnd.oasis.opendocument.chart-template", otf = "font/otf", otg = "application/vnd.oasis.opendocument.graphics-template", oth = "application/vnd.oasis.opendocument.text-web", oti = "application/vnd.oasis.opendocument.image-template", otp = "application/vnd.oasis.opendocument.presentation-template", ots = "application/vnd.oasis.opendocument.spreadsheet-template", ott = "application/vnd.oasis.opendocument.text-template", oxps = "application/oxps", oxt = "application/vnd.openofficeorg.extension", p = "text/pascal", p10 = "application/pkcs10", p12 = "application/x-pkcs12", p7b = "application/x-pkcs7-certificates", p7c = "application/pkcs7-mime", p7m = "application/pkcs7-mime", p7r = "application/x-pkcs7-certreqresp", p7s = "application/pkcs7-signature", p8 = "application/pkcs8", pas = "text/pascal", paw = "application/vnd.pawaafile", pbd = "application/vnd.powerbuilder6", pbm = "image/x-portable-bitmap", pcap = "application/vnd.tcpdump.pcap", pcf = "application/x-font-pcf", pcl = "application/vnd.hp-pcl", pclxl = "application/vnd.hp-pclxl", pct = "image/x-pict", pcurl = "application/vnd.curl.pcurl", pcx = "image/x-pcx", pdb = "application/vnd.palm", pdf = "application/pdf", pfa = "application/x-font-type1", pfb = "application/x-font-type1", pfm = "application/x-font-type1", pfr = "application/font-tdpfr", pfx = "application/x-pkcs12", pgm = "image/x-portable-graymap", pgn = "application/x-chess-pgn", pgp = "application/pgp-encrypted", php = "text/php", pic = "image/x-pict", pkg = "application/octet-stream", pki = "application/pkixcmp", pkipath = "application/pkix-pkipath", plb = "application/vnd.3gpp.pic-bw-large", plc = "application/vnd.mobius.plc", plf = "application/vnd.pocketlearn", pls = "application/pls+xml", pml = "application/vnd.ctc-posml", png = "image/png", pnm = "image/x-portable-anymap", portpkg = "application/vnd.macports.portpkg", pot = "application/vnd.ms-powerpoint", potm = "application/vnd.ms-powerpoint.template.macroenabled.12", potx = "application/vnd.openxmlformats-officedocument.presentationml.template", ppam = "application/vnd.ms-powerpoint.addin.macroenabled.12", ppd = "application/vnd.cups-ppd", ppm = "image/x-portable-pixmap", pps = "application/vnd.ms-powerpoint", ppsm = "application/vnd.ms-powerpoint.slideshow.macroenabled.12", ppsx = "application/vnd.openxmlformats-officedocument.presentationml.slideshow", ppt = "application/vnd.ms-powerpoint", pptm = "application/vnd.ms-powerpoint.presentation.macroenabled.12", pptx = "application/vnd.openxmlformats-officedocument.presentationml.presentation", pqa = "application/vnd.palm", prc = "application/x-mobipocket-ebook", pre = "application/vnd.lotus-freelance", prf = "application/pics-rules", ps = "application/postscript", psb = "application/vnd.3gpp.pic-bw-small", psd = "image/vnd.adobe.photoshop", psf = "application/x-font-linux-psf", pskcxml = "application/pskc+xml", ptid = "application/vnd.pvi.ptid1", pub = "application/x-mspublisher", pvb = "application/vnd.3gpp.pic-bw-var", pwn = "application/vnd.3m.post-it-notes", py = "text/python", pya = "audio/vnd.ms-playready.media.pya", pyv = "video/vnd.ms-playready.media.pyv", qam = "application/vnd.epson.quickanime", qbo = "application/vnd.intu.qbo", qfx = "application/vnd.intu.qfx", qml = "text/x-qml", qps = "application/vnd.publishare-delta-tree", qt = "video/quicktime", qwd = "application/vnd.quark.quarkxpress", qwt = "application/vnd.quark.quarkxpress", qxb = "application/vnd.quark.quarkxpress", qxd = "application/vnd.quark.quarkxpress", qxl = "application/vnd.quark.quarkxpress", qxt = "application/vnd.quark.quarkxpress", r = "text/r", ra = "audio/x-pn-realaudio", ram = "audio/x-pn-realaudio", rar = "application/x-rar-compressed", ras = "image/x-cmu-raster", rb = "text/ruby", rcprofile = "application/vnd.ipunplugged.rcprofile", rdf = "application/rdf+xml", rdz = "application/vnd.data-vision.rdz", rep = "application/vnd.businessobjects", res = "application/x-dtbresource+xml", rgb = "image/x-rgb", rif = "application/reginfo+xml", rip = "audio/vnd.rip", ris = "application/x-research-info-systems", rl = "application/resource-lists+xml", rlc = "image/vnd.fujixerox.edmics-rlc", rld = "application/resource-lists-diff+xml", rm = "application/vnd.rn-realmedia", rmi = "audio/midi", rmp = "audio/x-pn-realaudio-plugin", rms = "application/vnd.jcp.javame.midlet-rms", rmvb = "application/vnd.rn-realmedia-vbr", rnc = "application/relax-ng-compact-syntax", roa = "application/rpki-roa", roff = "text/troff", rp9 = "application/vnd.cloanto.rp9", rpm = "application/x-rpm", rpss = "application/vnd.nokia.radio-presets", rpst = "application/vnd.nokia.radio-preset", rq = "application/sparql-query", rs = "text/rust", rsd = "application/rsd+xml", rss = "application/rss+xml", rtf = "application/rtf", rtx = "text/richtext", s = "text/asm", s3m = "audio/s3m", saf = "application/vnd.yamaha.smaf-audio", sbml = "application/sbml+xml", sc = "application/vnd.ibm.secure-container", scd = "application/x-msschedule", scm = "application/vnd.lotus-screencam", scq = "application/scvp-cv-request", scs = "application/scvp-cv-response", scss = "text/x-scss", scurl = "text/vnd.curl.scurl", sda = "application/vnd.stardivision.draw", sdc = "application/vnd.stardivision.calc", sdd = "application/vnd.stardivision.impress", sdkd = "application/vnd.solent.sdkm+xml", sdkm = "application/vnd.solent.sdkm+xml", sdp = "application/sdp", sdw = "application/vnd.stardivision.writer", see = "application/vnd.seemail", seed = "application/vnd.fdsn.seed", sema = "application/vnd.sema", semd = "application/vnd.semd", semf = "application/vnd.semf", ser = "application/java-serialized-object", setpay = "application/set-payment-initiation", setreg = "application/set-registration-initiation", sfs = "application/vnd.spotfire.sfs", sfv = "text/sfv", sgi = "image/sgi", sgl = "application/vnd.stardivision.writer-global", sgm = "text/sgml", sgml = "text/sgml", sh = "text/shellscript", shar = "application/x-shar", shf = "application/shf+xml", sid = "image/x-mrsid-image", sig = "application/pgp-signature", sil = "audio/silk", silo = "model/mesh", sis = "application/vnd.symbian.install", sisx = "application/vnd.symbian.install", sit = "application/x-stuffit", sitx = "application/x-stuffitx", skd = "application/vnd.koan", skm = "application/vnd.koan", skp = "application/vnd.koan", skt = "application/vnd.koan", sldm = "application/vnd.ms-powerpoint.slide.macroenabled.12", sldx = "application/vnd.openxmlformats-officedocument.presentationml.slide", slt = "application/vnd.epson.salt", sm = "application/vnd.stepmania.stepchart", smf = "application/vnd.stardivision.math", smi = "application/smil+xml", smil = "application/smil+xml", smv = "video/x-smv", smzip = "application/vnd.stepmania.package", snd = "audio/basic", snf = "application/x-font-snf", so = "application/octet-stream", spc = "application/x-pkcs7-certificates", spf = "application/vnd.yamaha.smaf-phrase", spl = "application/x-futuresplash", spot = "text/vnd.in3d.spot", spp = "application/scvp-vp-response", spq = "application/scvp-vp-request", spx = "audio/ogg", sql = "application/x-sql", src = "application/x-wais-source", srt = "application/x-subrip", sru = "application/sru+xml", srx = "application/sparql-results+xml", ssdl = "application/ssdl+xml", sse = "application/vnd.kodak-descriptor", ssf = "application/vnd.epson.ssf", ssml = "application/ssml+xml", st = "application/vnd.sailingtracker.track", stc = "application/vnd.sun.xml.calc.template", std = "application/vnd.sun.xml.draw.template", stf = "application/vnd.wt.stf", sti = "application/vnd.sun.xml.impress.template", stk = "application/hyperstudio", stl = "application/vnd.ms-pki.stl", str = "application/vnd.pg.format", stw = "application/vnd.sun.xml.writer.template", sub = "text/vnd.dvb.subtitle", sus = "application/vnd.sus-calendar", susp = "application/vnd.sus-calendar", sv4cpio = "application/x-sv4cpio", sv4crc = "application/x-sv4crc", svc = "application/vnd.dvb.service", svd = "application/vnd.svd", svg = "image/svg+xml", svgz = "image/svg+xml", swa = "application/x-director", swf = "application/x-shockwave-flash", swi = "application/vnd.aristanetworks.swi", sxc = "application/vnd.sun.xml.calc", sxd = "application/vnd.sun.xml.draw", sxg = "application/vnd.sun.xml.writer.global", sxi = "application/vnd.sun.xml.impress", sxm = "application/vnd.sun.xml.math", sxw = "application/vnd.sun.xml.writer", t = "text/troff", t3 = "application/x-t3vm-image", taglet = "application/vnd.mynfc", tao = "application/vnd.tao.intent-module-archive", tar = "application/x-tar", tcap = "application/vnd.3gpp2.tcap", tcl = "application/x-tcl", teacher = "application/vnd.smart.teacher", tei = "application/tei+xml", teicorpus = "application/tei+xml", tex = "application/x-tex", texi = "application/x-texinfo", texinfo = "application/x-texinfo", text = "text/plain", tf = "text/hcl", tfi = "application/thraud+xml", tfm = "application/x-tex-tfm", tfrc = "text/hcl", tfstate = "application/json", tfvars = "text/hcl", tga = "image/x-tga", thmx = "application/vnd.ms-officetheme", tif = "image/tiff", tiff = "image/tiff", tmo = "application/vnd.tmobile-livetv", toml = "text/toml", torrent = "application/x-bittorrent", tpl = "application/vnd.groove-tool-template", tpt = "application/vnd.trid.tpt", tr = "text/troff", tra = "application/vnd.trueapp", trm = "application/x-msterminal", ts = "text/typescript", tsd = "application/timestamped-data", tsv = "text/tab-separated-values", tsx = "text/tsx", ttc = "font/collection", ttf = "font/ttf", ttl = "text/turtle", twd = "application/vnd.simtech-mindmapper", twds = "application/vnd.simtech-mindmapper", txd = "application/vnd.genomatix.tuxedo", txf = "application/vnd.mobius.txf", txt = "text/plain", u32 = "application/x-authorware-bin", udeb = "application/x-debian-package", ufd = "application/vnd.ufdl", ufdl = "application/vnd.ufdl", ulx = "application/x-glulx", umj = "application/vnd.umajin", unityweb = "application/vnd.unity", uoml = "application/vnd.uoml+xml", uri = "text/uri-list", uris = "text/uri-list", urls = "text/uri-list", ustar = "application/x-ustar", utz = "application/vnd.uiq.theme", uu = "text/uuencode", uva = "audio/vnd.dece.audio", uvd = "application/vnd.dece.data", uvf = "application/vnd.dece.data", uvg = "image/vnd.dece.graphic", uvh = "video/vnd.dece.hd", uvi = "image/vnd.dece.graphic", uvm = "video/vnd.dece.mobile", uvp = "video/vnd.dece.pd", uvs = "video/vnd.dece.sd", uvt = "application/vnd.dece.ttml+xml", uvu = "video/vnd.uvvu.mp4", uvv = "video/vnd.dece.video", uvva = "audio/vnd.dece.audio", uvvd = "application/vnd.dece.data", uvvf = "application/vnd.dece.data", uvvg = "image/vnd.dece.graphic", uvvh = "video/vnd.dece.hd", uvvi = "image/vnd.dece.graphic", uvvm = "video/vnd.dece.mobile", uvvp = "video/vnd.dece.pd", uvvs = "video/vnd.dece.sd", uvvt = "application/vnd.dece.ttml+xml", uvvu = "video/vnd.uvvu.mp4", uvvv = "video/vnd.dece.video", uvvx = "application/vnd.dece.unspecified", uvvz = "application/vnd.dece.zip", uvx = "application/vnd.dece.unspecified", uvz = "application/vnd.dece.zip", vcard = "text/vcard", vcd = "application/x-cdlink", vcf = "text/vcard", vcg = "application/vnd.groove-vcard", vcs = "text/vcalendar", vcx = "application/vnd.vcx", vis = "application/vnd.visionary", viv = "video/vnd.vivo", vob = "video/x-ms-vob", vor = "application/vnd.stardivision.writer", vox = "application/x-authorware-bin", vrml = "model/vrml", vsd = "application/vnd.visio", vsf = "application/vnd.vsf", vss = "application/vnd.visio", vst = "application/vnd.visio", vsw = "application/vnd.visio", vtu = "model/vnd.vtu", vxml = "application/voicexml+xml", w3d = "application/x-director", wad = "application/x-doom", wasm = "application/wasm", wav = "audio/x-wav", wax = "audio/x-ms-wax", wbmp = "image/vnd.wap.wbmp", wbs = "application/vnd.criticaltools.wbs+xml", wbxml = "application/vnd.wap.wbxml", wcm = "application/vnd.ms-works", wdb = "application/vnd.ms-works", wdp = "image/vnd.ms-photo", weba = "audio/webm", webm = "video/webm", webp = "image/webp", wg = "application/vnd.pmi.widget", wgt = "application/widget", wks = "application/vnd.ms-works", wm = "video/x-ms-wm", wma = "audio/x-ms-wma", wmd = "application/x-ms-wmd", wmf = "application/x-msmetafile", wml = "text/vnd.wap.wml", wmlc = "application/vnd.wap.wmlc", wmls = "text/vnd.wap.wmlscript", wmlsc = "application/vnd.wap.wmlscriptc", wmv = "video/x-ms-wmv", wmx = "video/x-ms-wmx", wmz = "application/x-ms-wmz", woff = "font/woff", woff2 = "font/woff2", wpd = "application/vnd.wordperfect", wpl = "application/vnd.ms-wpl", wps = "application/vnd.ms-works", wqd = "application/vnd.wqd", wri = "application/x-mswrite", wrl = "model/vrml", wsdl = "application/wsdl+xml", wspolicy = "application/wspolicy+xml", wtb = "application/vnd.webturbo", wvx = "video/x-ms-wvx", x32 = "application/x-authorware-bin", x3d = "model/x3d+xml", x3db = "model/x3d+binary", x3dbz = "model/x3d+binary", x3dv = "model/x3d+vrml", x3dvz = "model/x3d+vrml", x3dz = "model/x3d+xml", xaml = "application/xaml+xml", xap = "application/x-silverlight-app", xar = "application/vnd.xara", xbap = "application/x-ms-xbap", xbd = "application/vnd.fujixerox.docuworks.binder", xbm = "image/x-xbitmap", xdf = "application/xcap-diff+xml", xdm = "application/vnd.syncml.dm+xml", xdp = "application/vnd.adobe.xdp+xml", xdssc = "application/dssc+xml", xdw = "application/vnd.fujixerox.docuworks", xenc = "application/xenc+xml", xer = "application/patch-ops-error+xml", xfdf = "application/vnd.adobe.xfdf", xfdl = "application/vnd.xfdl", xht = "application/xhtml+xml", xhtml = "application/xhtml+xml", xhvml = "application/xv+xml", xif = "image/vnd.xiff", xla = "application/vnd.ms-excel", xlam = "application/vnd.ms-excel.addin.macroenabled.12", xlc = "application/vnd.ms-excel", xlf = "application/x-xliff+xml", xlm = "application/vnd.ms-excel", xls = "application/vnd.ms-excel", xlsb = "application/vnd.ms-excel.sheet.binary.macroenabled.12", xlsm = "application/vnd.ms-excel.sheet.macroenabled.12", xlsx = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", xlt = "application/vnd.ms-excel", xltm = "application/vnd.ms-excel.template.macroenabled.12", xltx = "application/vnd.openxmlformats-officedocument.spreadsheetml.template", xlw = "application/vnd.ms-excel", xm = "audio/xm", xml = "application/xml", xo = "application/vnd.olpc-sugar", xop = "application/xop+xml", xpak = "application/vnd.gentoo.xpak", xpi = "application/x-xpinstall", xpl = "application/xproc+xml", xpm = "image/x-xpixmap", xpr = "application/vnd.is-xpr", xps = "application/vnd.ms-xpsdocument", xpw = "application/vnd.intercon.formnet", xpx = "application/vnd.intercon.formnet", xsl = "application/xml", xslt = "application/xslt+xml", xsm = "application/vnd.syncml+xml", xspf = "application/xspf+xml", xul = "application/vnd.mozilla.xul+xml", xvm = "application/xv+xml", xvml = "application/xv+xml", xwd = "image/x-xwindowdump", xyz = "chemical/x-xyz", xz = "application/x-xz", yaml = "text/yaml", yang = "application/yang", yin = "application/yin+xml", yml = "text/yaml", z1 = "application/x-zmachine", z2 = "application/x-zmachine", z3 = "application/x-zmachine", z4 = "application/x-zmachine", z5 = "application/x-zmachine", z6 = "application/x-zmachine", z7 = "application/x-zmachine", z8 = "application/x-zmachine", zaz = "application/vnd.zzazz.deck+xml", zip = "application/zip", zir = "application/vnd.zul", zirz = "application/vnd.zul", zmm = "application/vnd.handheld-entertainment+xml", zsh = "text/shellscript", } local options = ya.sync( function(st) return { with_files = st.with_files, with_exts = st.with_exts, fallback_file1 = st.fallback_file1, } end ) local M = {} function M:setup(opts) opts = opts or {} self.with_files = opts.with_files self.with_exts = opts.with_exts self.fallback_file1 = opts.fallback_file1 end function M:fetch(job) -- TODO: remove this once Yazi 0.4 is released local not_v4 = not job job = job or self local opts = options() local merged_files = ya.dict_merge(FILES, opts.with_files or {}) local merged_exts = ya.dict_merge(EXTS, opts.with_exts or {}) local updates, unknown = {}, {} for _, file in ipairs(job.files) do local mime if file.cha.len == 0 then mime = "inode/x-empty" else mime = merged_files[(file.url:name() or ""):lower()] mime = mime or merged_exts[(file.url:ext() or ""):lower()] end if mime then updates[tostring(file.url)] = mime elseif opts.fallback_file1 then unknown[#unknown + 1] = file end end if next(updates) then ya.manager_emit("update_mimes", { updates = updates }) ya.manager_emit("update_mimetype", { updates = updates }) -- TODO: remove this end if #unknown > 0 then job.files = unknown return not_v4 and require("mime").fetch(job) or require("mime"):fetch(job) end return 1 end return M