1package mimetype
2
3import "github.com/gabriel-vasile/mimetype/internal/matchers"
4
5// root is a matcher which passes for any slice of bytes.
6// When a matcher passes the check, the children matchers
7// are tried in order to find a more accurate MIME type.
8var root = newMIME("application/octet-stream", "", matchers.True,
9	sevenZ, zip, pdf, ole, ps, psd, ogg, png, jpg, jp2, jpx, jpm, gif, webp,
10	exe, elf, ar, tar, xar, bz2, fits, tiff, bmp, ico, mp3, flac, midi, ape,
11	musePack, amr, wav, aiff, au, mpeg, quickTime, mqv, mp4, webM, threeGP,
12	threeG2, avi, flv, mkv, asf, aac, voc, aMp4, m4a, utf32le, utf32be, utf16le,
13	utf16be, gzip, class, swf, crx, woff, woff2, otf, eot, wasm, shx, dbf, dcm,
14	rar, djvu, mobi, lit, bpg, sqlite3, dwg, nes, macho, qcp, icns, heic,
15	heicSeq, heif, heifSeq, mrc, mdb, accdb, zstd, cab, utf8,
16)
17
18// The list of nodes appended to the root node
19var (
20	gzip = newMIME("application/gzip", ".gz", matchers.Gzip).
21		alias("application/x-gzip", "application/x-gunzip", "application/gzipped", "application/gzip-compressed", "application/x-gzip-compressed", "gzip/document")
22	sevenZ = newMIME("application/x-7z-compressed", ".7z", matchers.SevenZ)
23	zip    = newMIME("application/zip", ".zip", matchers.Zip, xlsx, docx, pptx, epub, jar, odt, ods, odp, odg, odf).
24		alias("application/x-zip", "application/x-zip-compressed")
25	tar = newMIME("application/x-tar", ".tar", matchers.Tar)
26	xar = newMIME("application/x-xar", ".xar", matchers.Xar)
27	bz2 = newMIME("application/x-bzip2", ".bz2", matchers.Bz2)
28	pdf = newMIME("application/pdf", ".pdf", matchers.Pdf).
29		alias("application/x-pdf")
30	xlsx = newMIME("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ".xlsx", matchers.Xlsx)
31	docx = newMIME("application/vnd.openxmlformats-officedocument.wordprocessingml.document", ".docx", matchers.Docx)
32	pptx = newMIME("application/vnd.openxmlformats-officedocument.presentationml.presentation", ".pptx", matchers.Pptx)
33	epub = newMIME("application/epub+zip", ".epub", matchers.Epub)
34	jar  = newMIME("application/jar", ".jar", matchers.Jar)
35	ole  = newMIME("application/x-ole-storage", "", matchers.Ole, xls, pub, ppt, doc)
36	doc  = newMIME("application/msword", ".doc", matchers.Doc).
37		alias("application/vnd.ms-word")
38	ppt = newMIME("application/vnd.ms-powerpoint", ".ppt", matchers.Ppt).
39		alias("application/mspowerpoint")
40	pub = newMIME("application/vnd.ms-publisher", ".pub", matchers.Pub)
41	xls = newMIME("application/vnd.ms-excel", ".xls", matchers.Xls).
42		alias("application/msexcel")
43	ps   = newMIME("application/postscript", ".ps", matchers.Ps)
44	fits = newMIME("application/fits", ".fits", matchers.Fits)
45	ogg  = newMIME("application/ogg", ".ogg", matchers.Ogg, oggAudio, oggVideo).
46		alias("application/x-ogg")
47	oggAudio = newMIME("audio/ogg", ".oga", matchers.OggAudio)
48	oggVideo = newMIME("video/ogg", ".ogv", matchers.OggVideo)
49	utf32le  = newMIME("text/plain; charset=utf-32le", ".txt", matchers.Utf32le)
50	utf32be  = newMIME("text/plain; charset=utf-32be", ".txt", matchers.Utf32be)
51	utf16le  = newMIME("text/plain; charset=utf-16le", ".txt", matchers.Utf16le)
52	utf16be  = newMIME("text/plain; charset=utf-16be", ".txt", matchers.Utf16be)
53	utf8     = newMIME("text/plain; charset=utf-8", ".txt", matchers.Utf8, html, svg, xml, php, js, lua, perl, python, json, ndJson, rtf, tcl, csv, tsv, vCard, iCalendar, warc)
54	xml      = newMIME("text/xml; charset=utf-8", ".xml", matchers.Xml, rss, atom, x3d, kml, xliff, collada, gml, gpx, tcx, amf, threemf)
55	json     = newMIME("application/json", ".json", matchers.Json, geoJson)
56	csv      = newMIME("text/csv", ".csv", matchers.Csv)
57	tsv      = newMIME("text/tab-separated-values", ".tsv", matchers.Tsv)
58	geoJson  = newMIME("application/geo+json", ".geojson", matchers.GeoJson)
59	ndJson   = newMIME("application/x-ndjson", ".ndjson", matchers.NdJson)
60	html     = newMIME("text/html; charset=utf-8", ".html", matchers.Html)
61	php      = newMIME("text/x-php; charset=utf-8", ".php", matchers.Php)
62	rtf      = newMIME("text/rtf", ".rtf", matchers.Rtf)
63	js       = newMIME("application/javascript", ".js", matchers.Js).
64			alias("application/x-javascript", "text/javascript")
65	lua    = newMIME("text/x-lua", ".lua", matchers.Lua)
66	perl   = newMIME("text/x-perl", ".pl", matchers.Perl)
67	python = newMIME("application/x-python", ".py", matchers.Python)
68	tcl    = newMIME("text/x-tcl", ".tcl", matchers.Tcl).
69		alias("application/x-tcl")
70	vCard     = newMIME("text/vcard", ".vcf", matchers.VCard)
71	iCalendar = newMIME("text/calendar", ".ics", matchers.ICalendar)
72	svg       = newMIME("image/svg+xml", ".svg", matchers.Svg)
73	rss       = newMIME("application/rss+xml", ".rss", matchers.Rss).
74			alias("text/rss")
75	atom    = newMIME("application/atom+xml", ".atom", matchers.Atom)
76	x3d     = newMIME("model/x3d+xml", ".x3d", matchers.X3d)
77	kml     = newMIME("application/vnd.google-earth.kml+xml", ".kml", matchers.Kml)
78	xliff   = newMIME("application/x-xliff+xml", ".xlf", matchers.Xliff)
79	collada = newMIME("model/vnd.collada+xml", ".dae", matchers.Collada)
80	gml     = newMIME("application/gml+xml", ".gml", matchers.Gml)
81	gpx     = newMIME("application/gpx+xml", ".gpx", matchers.Gpx)
82	tcx     = newMIME("application/vnd.garmin.tcx+xml", ".tcx", matchers.Tcx)
83	amf     = newMIME("application/x-amf", ".amf", matchers.Amf)
84	threemf = newMIME("application/vnd.ms-package.3dmanufacturing-3dmodel+xml", ".3mf", matchers.Threemf)
85	png     = newMIME("image/png", ".png", matchers.Png)
86	jpg     = newMIME("image/jpeg", ".jpg", matchers.Jpg)
87	jp2     = newMIME("image/jp2", ".jp2", matchers.Jp2)
88	jpx     = newMIME("image/jpx", ".jpf", matchers.Jpx)
89	jpm     = newMIME("image/jpm", ".jpm", matchers.Jpm).
90		alias("video/jpm")
91	bpg  = newMIME("image/bpg", ".bpg", matchers.Bpg)
92	gif  = newMIME("image/gif", ".gif", matchers.Gif)
93	webp = newMIME("image/webp", ".webp", matchers.Webp)
94	tiff = newMIME("image/tiff", ".tiff", matchers.Tiff)
95	bmp  = newMIME("image/bmp", ".bmp", matchers.Bmp).
96		alias("image/x-bmp", "image/x-ms-bmp")
97	ico  = newMIME("image/x-icon", ".ico", matchers.Ico)
98	icns = newMIME("image/x-icns", ".icns", matchers.Icns)
99	psd  = newMIME("image/vnd.adobe.photoshop", ".psd", matchers.Psd).
100		alias("image/x-psd", "application/photoshop")
101	heic    = newMIME("image/heic", ".heic", matchers.Heic)
102	heicSeq = newMIME("image/heic-sequence", ".heic", matchers.HeicSequence)
103	heif    = newMIME("image/heif", ".heif", matchers.Heif)
104	heifSeq = newMIME("image/heif-sequence", ".heif", matchers.HeifSequence)
105	mp3     = newMIME("audio/mpeg", ".mp3", matchers.Mp3).
106		alias("audio/x-mpeg", "audio/mp3")
107	flac = newMIME("audio/flac", ".flac", matchers.Flac)
108	midi = newMIME("audio/midi", ".midi", matchers.Midi).
109		alias("audio/mid", "audio/sp-midi", "audio/x-mid", "audio/x-midi")
110	ape      = newMIME("audio/ape", ".ape", matchers.Ape)
111	musePack = newMIME("audio/musepack", ".mpc", matchers.MusePack)
112	wav      = newMIME("audio/wav", ".wav", matchers.Wav).
113			alias("audio/x-wav", "audio/vnd.wave", "audio/wave")
114	aiff = newMIME("audio/aiff", ".aiff", matchers.Aiff)
115	au   = newMIME("audio/basic", ".au", matchers.Au)
116	amr  = newMIME("audio/amr", ".amr", matchers.Amr).
117		alias("audio/amr-nb")
118	aac  = newMIME("audio/aac", ".aac", matchers.Aac)
119	voc  = newMIME("audio/x-unknown", ".voc", matchers.Voc)
120	aMp4 = newMIME("audio/mp4", ".mp4", matchers.AMp4).
121		alias("audio/x-m4a", "audio/x-mp4a")
122	m4a  = newMIME("audio/x-m4a", ".m4a", matchers.M4a)
123	mp4  = newMIME("video/mp4", ".mp4", matchers.Mp4)
124	webM = newMIME("video/webm", ".webm", matchers.WebM).
125		alias("audio/webm")
126	mpeg      = newMIME("video/mpeg", ".mpeg", matchers.Mpeg)
127	quickTime = newMIME("video/quicktime", ".mov", matchers.QuickTime)
128	mqv       = newMIME("video/quicktime", ".mqv", matchers.Mqv)
129	threeGP   = newMIME("video/3gpp", ".3gp", matchers.ThreeGP).
130			alias("video/3gp", "audio/3gpp")
131	threeG2 = newMIME("video/3gpp2", ".3g2", matchers.ThreeG2).
132		alias("video/3g2", "audio/3gpp2")
133	avi = newMIME("video/x-msvideo", ".avi", matchers.Avi).
134		alias("video/avi", "video/msvideo")
135	flv = newMIME("video/x-flv", ".flv", matchers.Flv)
136	mkv = newMIME("video/x-matroska", ".mkv", matchers.Mkv)
137	asf = newMIME("video/x-ms-asf", ".asf", matchers.Asf).
138		alias("video/asf", "video/x-ms-wmv")
139	class   = newMIME("application/x-java-applet; charset=binary", ".class", matchers.Class)
140	swf     = newMIME("application/x-shockwave-flash", ".swf", matchers.Swf)
141	crx     = newMIME("application/x-chrome-extension", ".crx", matchers.Crx)
142	woff    = newMIME("font/woff", ".woff", matchers.Woff)
143	woff2   = newMIME("font/woff2", ".woff2", matchers.Woff2)
144	otf     = newMIME("font/otf", ".otf", matchers.Otf)
145	eot     = newMIME("application/vnd.ms-fontobject", ".eot", matchers.Eot)
146	wasm    = newMIME("application/wasm", ".wasm", matchers.Wasm)
147	shp     = newMIME("application/octet-stream", ".shp", matchers.Shp)
148	shx     = newMIME("application/octet-stream", ".shx", matchers.Shx, shp)
149	dbf     = newMIME("application/x-dbf", ".dbf", matchers.Dbf)
150	exe     = newMIME("application/vnd.microsoft.portable-executable", ".exe", matchers.Exe)
151	elf     = newMIME("application/x-elf", "", matchers.Elf, elfObj, elfExe, elfLib, elfDump)
152	elfObj  = newMIME("application/x-object", "", matchers.ElfObj)
153	elfExe  = newMIME("application/x-executable", "", matchers.ElfExe)
154	elfLib  = newMIME("application/x-sharedlib", ".so", matchers.ElfLib)
155	elfDump = newMIME("application/x-coredump", "", matchers.ElfDump)
156	ar      = newMIME("application/x-archive", ".a", matchers.Ar, deb).
157		alias("application/x-unix-archive")
158	deb = newMIME("application/vnd.debian.binary-package", ".deb", matchers.Deb)
159	dcm = newMIME("application/dicom", ".dcm", matchers.Dcm)
160	odt = newMIME("application/vnd.oasis.opendocument.text", ".odt", matchers.Odt, ott).
161		alias("application/x-vnd.oasis.opendocument.text")
162	ott = newMIME("application/vnd.oasis.opendocument.text-template", ".ott", matchers.Ott).
163		alias("application/x-vnd.oasis.opendocument.text-template")
164	ods = newMIME("application/vnd.oasis.opendocument.spreadsheet", ".ods", matchers.Ods, ots).
165		alias("application/x-vnd.oasis.opendocument.spreadsheet")
166	ots = newMIME("application/vnd.oasis.opendocument.spreadsheet-template", ".ots", matchers.Ots).
167		alias("application/x-vnd.oasis.opendocument.spreadsheet-template")
168	odp = newMIME("application/vnd.oasis.opendocument.presentation", ".odp", matchers.Odp, otp).
169		alias("application/x-vnd.oasis.opendocument.presentation")
170	otp = newMIME("application/vnd.oasis.opendocument.presentation-template", ".otp", matchers.Otp).
171		alias("application/x-vnd.oasis.opendocument.presentation-template")
172	odg = newMIME("application/vnd.oasis.opendocument.graphics", ".odg", matchers.Odg, otg).
173		alias("application/x-vnd.oasis.opendocument.graphics")
174	otg = newMIME("application/vnd.oasis.opendocument.graphics-template", ".otg", matchers.Otg).
175		alias("application/x-vnd.oasis.opendocument.graphics-template")
176	odf = newMIME("application/vnd.oasis.opendocument.formula", ".odf", matchers.Odf).
177		alias("application/x-vnd.oasis.opendocument.formula")
178	rar = newMIME("application/x-rar-compressed", ".rar", matchers.Rar).
179		alias("application/x-rar")
180	djvu    = newMIME("image/vnd.djvu", ".djvu", matchers.DjVu)
181	mobi    = newMIME("application/x-mobipocket-ebook", ".mobi", matchers.Mobi)
182	lit     = newMIME("application/x-ms-reader", ".lit", matchers.Lit)
183	sqlite3 = newMIME("application/x-sqlite3", ".sqlite", matchers.Sqlite)
184	dwg     = newMIME("image/vnd.dwg", ".dwg", matchers.Dwg).
185		alias("image/x-dwg", "application/acad", "application/x-acad", "application/autocad_dwg", "application/dwg", "application/x-dwg", "application/x-autocad", "drawing/dwg")
186	warc  = newMIME("application/warc", ".warc", matchers.Warc)
187	nes   = newMIME("application/vnd.nintendo.snes.rom", ".nes", matchers.Nes)
188	macho = newMIME("application/x-mach-binary", ".macho", matchers.MachO)
189	qcp   = newMIME("audio/qcelp", ".qcp", matchers.Qcp)
190	mrc   = newMIME("application/marc", ".mrc", matchers.Marc)
191	mdb   = newMIME("application/x-msaccess", ".mdb", matchers.MsAccessMdb)
192	accdb = newMIME("application/x-msaccess", ".accdb", matchers.MsAccessAce)
193	zstd  = newMIME("application/zstd", ".zst", matchers.Zstd)
194	cab   = newMIME("application/vnd.ms-cab-compressed", ".cab", matchers.Cab)
195)
196