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