@wooksjs/http-static 0.4.9 → 0.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -16,6 +16,8 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
16
16
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17
17
  PERFORMANCE OF THIS SOFTWARE.
18
18
  ***************************************************************************** */
19
+ /* global Reflect, Promise, SuppressedError, Symbol */
20
+
19
21
 
20
22
  function __awaiter(thisArg, _arguments, P, generator) {
21
23
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -25,1403 +27,1408 @@ function __awaiter(thisArg, _arguments, P, generator) {
25
27
  function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
26
28
  step((generator = generator.apply(thisArg, _arguments || [])).next());
27
29
  });
28
- }
30
+ }
31
+
32
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
33
+ var e = new Error(message);
34
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
35
+ };
29
36
 
30
- const extensions = {
31
- '123': 'application/vnd.lotus-1-2-3',
32
- ez: 'application/andrew-inset',
33
- aw: 'application/applixware',
34
- atom: 'application/atom+xml',
35
- atomcat: 'application/atomcat+xml',
36
- atomdeleted: 'application/atomdeleted+xml',
37
- atomsvc: 'application/atomsvc+xml',
38
- dwd: 'application/atsc-dwd+xml',
39
- held: 'application/atsc-held+xml',
40
- rsat: 'application/atsc-rsat+xml',
41
- bdoc: 'application/x-bdoc',
42
- xcs: 'application/calendar+xml',
43
- ccxml: 'application/ccxml+xml',
44
- cdfx: 'application/cdfx+xml',
45
- cdmia: 'application/cdmi-capability',
46
- cdmic: 'application/cdmi-container',
47
- cdmid: 'application/cdmi-domain',
48
- cdmio: 'application/cdmi-object',
49
- cdmiq: 'application/cdmi-queue',
50
- cpl: 'application/cpl+xml',
51
- cu: 'application/cu-seeme',
52
- cwl: 'application/cwl',
53
- mpd: 'application/dash+xml',
54
- mpp: 'application/vnd.ms-project',
55
- davmount: 'application/davmount+xml',
56
- dbk: 'application/docbook+xml',
57
- dssc: 'application/dssc+der',
58
- xdssc: 'application/dssc+xml',
59
- ecma: 'application/ecmascript',
60
- emma: 'application/emma+xml',
61
- emotionml: 'application/emotionml+xml',
62
- epub: 'application/epub+zip',
63
- exi: 'application/exi',
64
- exp: 'application/express',
65
- fdf: 'application/vnd.fdf',
66
- fdt: 'application/fdt+xml',
67
- pfr: 'application/font-tdpfr',
68
- geojson: 'application/geo+json',
69
- gml: 'application/gml+xml',
70
- gpx: 'application/gpx+xml',
71
- gxf: 'application/gxf',
72
- gz: 'application/gzip',
73
- hjson: 'application/hjson',
74
- stk: 'application/hyperstudio',
75
- ink: 'application/inkml+xml',
76
- inkml: 'application/inkml+xml',
77
- ipfix: 'application/ipfix',
78
- its: 'application/its+xml',
79
- jar: 'application/java-archive',
80
- war: 'application/java-archive',
81
- ear: 'application/java-archive',
82
- ser: 'application/java-serialized-object',
83
- class: 'application/java-vm',
84
- js: 'application/javascript',
85
- mjs: 'application/javascript',
86
- json: 'application/json',
87
- map: 'application/json',
88
- json5: 'application/json5',
89
- jsonml: 'application/jsonml+json',
90
- jsonld: 'application/ld+json',
91
- lgr: 'application/lgr+xml',
92
- lostxml: 'application/lost+xml',
93
- hqx: 'application/mac-binhex40',
94
- cpt: 'application/mac-compactpro',
95
- mads: 'application/mads+xml',
96
- webmanifest: 'application/manifest+json',
97
- mrc: 'application/marc',
98
- mrcx: 'application/marcxml+xml',
99
- ma: 'application/mathematica',
100
- nb: 'application/mathematica',
101
- mb: 'application/mathematica',
102
- mathml: 'application/mathml+xml',
103
- mbox: 'application/mbox',
104
- mpf: 'application/media-policy-dataset+xml',
105
- mscml: 'application/mediaservercontrol+xml',
106
- metalink: 'application/metalink+xml',
107
- meta4: 'application/metalink4+xml',
108
- mets: 'application/mets+xml',
109
- maei: 'application/mmt-aei+xml',
110
- musd: 'application/mmt-usd+xml',
111
- mods: 'application/mods+xml',
112
- m21: 'application/mp21',
113
- mp21: 'application/mp21',
114
- mp4s: 'application/mp4',
115
- m4p: 'application/mp4',
116
- doc: 'application/msword',
117
- dot: 'application/msword',
118
- mxf: 'application/mxf',
119
- nq: 'application/n-quads',
120
- nt: 'application/n-triples',
121
- cjs: 'application/node',
122
- bin: 'application/octet-stream',
123
- dms: 'application/octet-stream',
124
- lrf: 'application/octet-stream',
125
- mar: 'application/octet-stream',
126
- so: 'application/octet-stream',
127
- dist: 'application/octet-stream',
128
- distz: 'application/octet-stream',
129
- pkg: 'application/octet-stream',
130
- bpk: 'application/octet-stream',
131
- dump: 'application/octet-stream',
132
- elc: 'application/octet-stream',
133
- deploy: 'application/octet-stream',
134
- exe: 'application/x-msdownload',
135
- dll: 'application/x-msdownload',
136
- deb: 'application/x-debian-package',
137
- dmg: 'application/x-apple-diskimage',
138
- iso: 'application/x-iso9660-image',
139
- img: 'application/octet-stream',
140
- msi: 'application/x-msdownload',
141
- msp: 'application/octet-stream',
142
- msm: 'application/octet-stream',
143
- buffer: 'application/octet-stream',
144
- oda: 'application/oda',
145
- opf: 'application/oebps-package+xml',
146
- ogx: 'application/ogg',
147
- omdoc: 'application/omdoc+xml',
148
- onetoc: 'application/onenote',
149
- onetoc2: 'application/onenote',
150
- onetmp: 'application/onenote',
151
- onepkg: 'application/onenote',
152
- oxps: 'application/oxps',
153
- relo: 'application/p2p-overlay+xml',
154
- xer: 'application/patch-ops-error+xml',
155
- pdf: 'application/pdf',
156
- pgp: 'application/pgp-encrypted',
157
- asc: 'application/pgp-signature',
158
- sig: 'application/pgp-signature',
159
- prf: 'application/pics-rules',
160
- p10: 'application/pkcs10',
161
- p7m: 'application/pkcs7-mime',
162
- p7c: 'application/pkcs7-mime',
163
- p7s: 'application/pkcs7-signature',
164
- p8: 'application/pkcs8',
165
- ac: 'application/vnd.nokia.n-gage.ac+xml',
166
- cer: 'application/pkix-cert',
167
- crl: 'application/pkix-crl',
168
- pkipath: 'application/pkix-pkipath',
169
- pki: 'application/pkixcmp',
170
- pls: 'application/pls+xml',
171
- ai: 'application/postscript',
172
- eps: 'application/postscript',
173
- ps: 'application/postscript',
174
- provx: 'application/provenance+xml',
175
- cww: 'application/prs.cww',
176
- pskcxml: 'application/pskc+xml',
177
- raml: 'application/raml+yaml',
178
- rdf: 'application/rdf+xml',
179
- owl: 'application/rdf+xml',
180
- rif: 'application/reginfo+xml',
181
- rnc: 'application/relax-ng-compact-syntax',
182
- rl: 'application/resource-lists+xml',
183
- rld: 'application/resource-lists-diff+xml',
184
- rs: 'application/rls-services+xml',
185
- rapd: 'application/route-apd+xml',
186
- sls: 'application/route-s-tsid+xml',
187
- rusd: 'application/route-usd+xml',
188
- gbr: 'application/rpki-ghostbusters',
189
- mft: 'application/rpki-manifest',
190
- roa: 'application/rpki-roa',
191
- rsd: 'application/rsd+xml',
192
- rss: 'application/rss+xml',
193
- rtf: 'text/rtf',
194
- sbml: 'application/sbml+xml',
195
- scq: 'application/scvp-cv-request',
196
- scs: 'application/scvp-cv-response',
197
- spq: 'application/scvp-vp-request',
198
- spp: 'application/scvp-vp-response',
199
- sdp: 'application/sdp',
200
- senmlx: 'application/senml+xml',
201
- sensmlx: 'application/sensml+xml',
202
- setpay: 'application/set-payment-initiation',
203
- setreg: 'application/set-registration-initiation',
204
- shf: 'application/shf+xml',
205
- siv: 'application/sieve',
206
- sieve: 'application/sieve',
207
- smi: 'application/smil+xml',
208
- smil: 'application/smil+xml',
209
- rq: 'application/sparql-query',
210
- srx: 'application/sparql-results+xml',
211
- gram: 'application/srgs',
212
- grxml: 'application/srgs+xml',
213
- sru: 'application/sru+xml',
214
- ssdl: 'application/ssdl+xml',
215
- ssml: 'application/ssml+xml',
216
- swidtag: 'application/swid+xml',
217
- tei: 'application/tei+xml',
218
- teicorpus: 'application/tei+xml',
219
- tfi: 'application/thraud+xml',
220
- tsd: 'application/timestamped-data',
221
- toml: 'application/toml',
222
- trig: 'application/trig',
223
- ttml: 'application/ttml+xml',
224
- ubj: 'application/ubjson',
225
- rsheet: 'application/urc-ressheet+xml',
226
- td: 'application/urc-targetdesc+xml',
227
- '1km': 'application/vnd.1000minds.decision-model+xml',
228
- plb: 'application/vnd.3gpp.pic-bw-large',
229
- psb: 'application/vnd.3gpp.pic-bw-small',
230
- pvb: 'application/vnd.3gpp.pic-bw-var',
231
- tcap: 'application/vnd.3gpp2.tcap',
232
- pwn: 'application/vnd.3m.post-it-notes',
233
- aso: 'application/vnd.accpac.simply.aso',
234
- imp: 'application/vnd.accpac.simply.imp',
235
- acu: 'application/vnd.acucobol',
236
- atc: 'application/vnd.acucorp',
237
- acutc: 'application/vnd.acucorp',
238
- air: 'application/vnd.adobe.air-application-installer-package+zip',
239
- fcdt: 'application/vnd.adobe.formscentral.fcdt',
240
- fxp: 'application/vnd.adobe.fxp',
241
- fxpl: 'application/vnd.adobe.fxp',
242
- xdp: 'application/vnd.adobe.xdp+xml',
243
- xfdf: 'application/xfdf',
244
- age: 'application/vnd.age',
245
- ahead: 'application/vnd.ahead.space',
246
- azf: 'application/vnd.airzip.filesecure.azf',
247
- azs: 'application/vnd.airzip.filesecure.azs',
248
- azw: 'application/vnd.amazon.ebook',
249
- acc: 'application/vnd.americandynamics.acc',
250
- ami: 'application/vnd.amiga.ami',
251
- apk: 'application/vnd.android.package-archive',
252
- cii: 'application/vnd.anser-web-certificate-issue-initiation',
253
- fti: 'application/vnd.anser-web-funds-transfer-initiation',
254
- atx: 'application/vnd.antix.game-component',
255
- mpkg: 'application/vnd.apple.installer+xml',
256
- key: 'application/x-iwork-keynote-sffkey',
257
- m3u8: 'application/vnd.apple.mpegurl',
258
- numbers: 'application/x-iwork-numbers-sffnumbers',
259
- pages: 'application/x-iwork-pages-sffpages',
260
- pkpass: 'application/vnd.apple.pkpass',
261
- swi: 'application/vnd.aristanetworks.swi',
262
- iota: 'application/vnd.astraea-software.iota',
263
- aep: 'application/vnd.audiograph',
264
- bmml: 'application/vnd.balsamiq.bmml+xml',
265
- mpm: 'application/vnd.blueice.multipass',
266
- bmi: 'application/vnd.bmi',
267
- rep: 'application/vnd.businessobjects',
268
- cdxml: 'application/vnd.chemdraw+xml',
269
- mmd: 'application/vnd.chipnuts.karaoke-mmd',
270
- cdy: 'application/vnd.cinderella',
271
- csl: 'application/vnd.citationstyles.style+xml',
272
- cla: 'application/vnd.claymore',
273
- rp9: 'application/vnd.cloanto.rp9',
274
- c4g: 'application/vnd.clonk.c4group',
275
- c4d: 'application/vnd.clonk.c4group',
276
- c4f: 'application/vnd.clonk.c4group',
277
- c4p: 'application/vnd.clonk.c4group',
278
- c4u: 'application/vnd.clonk.c4group',
279
- c11amc: 'application/vnd.cluetrust.cartomobile-config',
280
- c11amz: 'application/vnd.cluetrust.cartomobile-config-pkg',
281
- csp: 'application/vnd.commonspace',
282
- cdbcmsg: 'application/vnd.contact.cmsg',
283
- cmc: 'application/vnd.cosmocaller',
284
- clkx: 'application/vnd.crick.clicker',
285
- clkk: 'application/vnd.crick.clicker.keyboard',
286
- clkp: 'application/vnd.crick.clicker.palette',
287
- clkt: 'application/vnd.crick.clicker.template',
288
- clkw: 'application/vnd.crick.clicker.wordbank',
289
- wbs: 'application/vnd.criticaltools.wbs+xml',
290
- pml: 'application/vnd.ctc-posml',
291
- ppd: 'application/vnd.cups-ppd',
292
- car: 'application/vnd.curl.car',
293
- pcurl: 'application/vnd.curl.pcurl',
294
- dart: 'application/vnd.dart',
295
- rdz: 'application/vnd.data-vision.rdz',
296
- dbf: 'application/vnd.dbf',
297
- uvf: 'application/vnd.dece.data',
298
- uvvf: 'application/vnd.dece.data',
299
- uvd: 'application/vnd.dece.data',
300
- uvvd: 'application/vnd.dece.data',
301
- uvt: 'application/vnd.dece.ttml+xml',
302
- uvvt: 'application/vnd.dece.ttml+xml',
303
- uvx: 'application/vnd.dece.unspecified',
304
- uvvx: 'application/vnd.dece.unspecified',
305
- uvz: 'application/vnd.dece.zip',
306
- uvvz: 'application/vnd.dece.zip',
307
- fe_launch: 'application/vnd.denovo.fcselayout-link',
308
- dna: 'application/vnd.dna',
309
- mlp: 'application/vnd.dolby.mlp',
310
- dpg: 'application/vnd.dpgraph',
311
- dfac: 'application/vnd.dreamfactory',
312
- kpxx: 'application/vnd.ds-keypoint',
313
- ait: 'application/vnd.dvb.ait',
314
- svc: 'application/vnd.dvb.service',
315
- geo: 'application/vnd.dynageo',
316
- mag: 'application/vnd.ecowin.chart',
317
- nml: 'application/vnd.enliven',
318
- esf: 'application/vnd.epson.esf',
319
- msf: 'application/vnd.epson.msf',
320
- qam: 'application/vnd.epson.quickanime',
321
- slt: 'application/vnd.epson.salt',
322
- ssf: 'application/vnd.epson.ssf',
323
- es3: 'application/vnd.eszigno3+xml',
324
- et3: 'application/vnd.eszigno3+xml',
325
- ez2: 'application/vnd.ezpix-album',
326
- ez3: 'application/vnd.ezpix-package',
327
- mseed: 'application/vnd.fdsn.mseed',
328
- seed: 'application/vnd.fdsn.seed',
329
- dataless: 'application/vnd.fdsn.seed',
330
- gph: 'application/vnd.flographit',
331
- ftc: 'application/vnd.fluxtime.clip',
332
- fm: 'application/vnd.framemaker',
333
- frame: 'application/vnd.framemaker',
334
- maker: 'application/vnd.framemaker',
335
- book: 'application/vnd.framemaker',
336
- fnc: 'application/vnd.frogans.fnc',
337
- ltf: 'application/vnd.frogans.ltf',
338
- fsc: 'application/vnd.fsc.weblaunch',
339
- oas: 'application/vnd.fujitsu.oasys',
340
- oa2: 'application/vnd.fujitsu.oasys2',
341
- oa3: 'application/vnd.fujitsu.oasys3',
342
- fg5: 'application/vnd.fujitsu.oasysgp',
343
- bh2: 'application/vnd.fujitsu.oasysprs',
344
- ddd: 'application/vnd.fujixerox.ddd',
345
- xdw: 'application/vnd.fujixerox.docuworks',
346
- xbd: 'application/vnd.fujixerox.docuworks.binder',
347
- fzs: 'application/vnd.fuzzysheet',
348
- txd: 'application/vnd.genomatix.tuxedo',
349
- ggb: 'application/vnd.geogebra.file',
350
- ggt: 'application/vnd.geogebra.tool',
351
- gex: 'application/vnd.geometry-explorer',
352
- gre: 'application/vnd.geometry-explorer',
353
- gxt: 'application/vnd.geonext',
354
- g2w: 'application/vnd.geoplan',
355
- g3w: 'application/vnd.geospace',
356
- gmx: 'application/vnd.gmx',
357
- gdoc: 'application/vnd.google-apps.document',
358
- gslides: 'application/vnd.google-apps.presentation',
359
- gsheet: 'application/vnd.google-apps.spreadsheet',
360
- kml: 'application/vnd.google-earth.kml+xml',
361
- kmz: 'application/vnd.google-earth.kmz',
362
- gqf: 'application/vnd.grafeq',
363
- gqs: 'application/vnd.grafeq',
364
- gac: 'application/vnd.groove-account',
365
- ghf: 'application/vnd.groove-help',
366
- gim: 'application/vnd.groove-identity-message',
367
- grv: 'application/vnd.groove-injector',
368
- gtm: 'application/vnd.groove-tool-message',
369
- tpl: 'application/vnd.groove-tool-template',
370
- vcg: 'application/vnd.groove-vcard',
371
- hal: 'application/vnd.hal+xml',
372
- zmm: 'application/vnd.handheld-entertainment+xml',
373
- hbci: 'application/vnd.hbci',
374
- les: 'application/vnd.hhe.lesson-player',
375
- hpgl: 'application/vnd.hp-hpgl',
376
- hpid: 'application/vnd.hp-hpid',
377
- hps: 'application/vnd.hp-hps',
378
- jlt: 'application/vnd.hp-jlyt',
379
- pcl: 'application/vnd.hp-pcl',
380
- pclxl: 'application/vnd.hp-pclxl',
381
- 'sfd-hdstx': 'application/vnd.hydrostatix.sof-data',
382
- mpy: 'application/vnd.ibm.minipay',
383
- afp: 'application/vnd.ibm.modcap',
384
- listafp: 'application/vnd.ibm.modcap',
385
- list3820: 'application/vnd.ibm.modcap',
386
- irm: 'application/vnd.ibm.rights-management',
387
- sc: 'application/vnd.ibm.secure-container',
388
- icc: 'application/vnd.iccprofile',
389
- icm: 'application/vnd.iccprofile',
390
- igl: 'application/vnd.igloader',
391
- ivp: 'application/vnd.immervision-ivp',
392
- ivu: 'application/vnd.immervision-ivu',
393
- igm: 'application/vnd.insors.igm',
394
- xpw: 'application/vnd.intercon.formnet',
395
- xpx: 'application/vnd.intercon.formnet',
396
- i2g: 'application/vnd.intergeo',
397
- qbo: 'application/vnd.intu.qbo',
398
- qfx: 'application/vnd.intu.qfx',
399
- rcprofile: 'application/vnd.ipunplugged.rcprofile',
400
- irp: 'application/vnd.irepository.package+xml',
401
- xpr: 'application/vnd.is-xpr',
402
- fcs: 'application/vnd.isac.fcs',
403
- jam: 'application/vnd.jam',
404
- rms: 'application/vnd.jcp.javame.midlet-rms',
405
- jisp: 'application/vnd.jisp',
406
- joda: 'application/vnd.joost.joda-archive',
407
- ktz: 'application/vnd.kahootz',
408
- ktr: 'application/vnd.kahootz',
409
- karbon: 'application/vnd.kde.karbon',
410
- chrt: 'application/vnd.kde.kchart',
411
- kfo: 'application/vnd.kde.kformula',
412
- flw: 'application/vnd.kde.kivio',
413
- kon: 'application/vnd.kde.kontour',
414
- kpr: 'application/vnd.kde.kpresenter',
415
- kpt: 'application/vnd.kde.kpresenter',
416
- ksp: 'application/vnd.kde.kspread',
417
- kwd: 'application/vnd.kde.kword',
418
- kwt: 'application/vnd.kde.kword',
419
- htke: 'application/vnd.kenameaapp',
420
- kia: 'application/vnd.kidspiration',
421
- kne: 'application/vnd.kinar',
422
- knp: 'application/vnd.kinar',
423
- skp: 'application/vnd.koan',
424
- skd: 'application/vnd.koan',
425
- skt: 'application/vnd.koan',
426
- skm: 'application/vnd.koan',
427
- sse: 'application/vnd.kodak-descriptor',
428
- lasxml: 'application/vnd.las.las+xml',
429
- lbd: 'application/vnd.llamagraphics.life-balance.desktop',
430
- lbe: 'application/vnd.llamagraphics.life-balance.exchange+xml',
431
- apr: 'application/vnd.lotus-approach',
432
- pre: 'application/vnd.lotus-freelance',
433
- nsf: 'application/vnd.lotus-notes',
434
- org: 'text/x-org',
435
- scm: 'application/vnd.lotus-screencam',
436
- lwp: 'application/vnd.lotus-wordpro',
437
- portpkg: 'application/vnd.macports.portpkg',
438
- mvt: 'application/vnd.mapbox-vector-tile',
439
- mcd: 'application/vnd.mcd',
440
- mc1: 'application/vnd.medcalcdata',
441
- cdkey: 'application/vnd.mediastation.cdkey',
442
- mwf: 'application/vnd.mfer',
443
- mfm: 'application/vnd.mfmp',
444
- flo: 'application/vnd.micrografx.flo',
445
- igx: 'application/vnd.micrografx.igx',
446
- mif: 'application/vnd.mif',
447
- daf: 'application/vnd.mobius.daf',
448
- dis: 'application/vnd.mobius.dis',
449
- mbk: 'application/vnd.mobius.mbk',
450
- mqy: 'application/vnd.mobius.mqy',
451
- msl: 'application/vnd.mobius.msl',
452
- plc: 'application/vnd.mobius.plc',
453
- txf: 'application/vnd.mobius.txf',
454
- mpn: 'application/vnd.mophun.application',
455
- mpc: 'application/vnd.mophun.certificate',
456
- xul: 'application/vnd.mozilla.xul+xml',
457
- cil: 'application/vnd.ms-artgalry',
458
- cab: 'application/vnd.ms-cab-compressed',
459
- xls: 'application/vnd.ms-excel',
460
- xlm: 'application/vnd.ms-excel',
461
- xla: 'application/vnd.ms-excel',
462
- xlc: 'application/vnd.ms-excel',
463
- xlt: 'application/vnd.ms-excel',
464
- xlw: 'application/vnd.ms-excel',
465
- xlam: 'application/vnd.ms-excel.addin.macroenabled.12',
466
- xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
467
- xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12',
468
- xltm: 'application/vnd.ms-excel.template.macroenabled.12',
469
- eot: 'application/vnd.ms-fontobject',
470
- chm: 'application/vnd.ms-htmlhelp',
471
- ims: 'application/vnd.ms-ims',
472
- lrm: 'application/vnd.ms-lrm',
473
- thmx: 'application/vnd.ms-officetheme',
474
- msg: 'application/vnd.ms-outlook',
475
- cat: 'application/vnd.ms-pki.seccat',
476
- stl: 'model/stl',
477
- ppt: 'application/vnd.ms-powerpoint',
478
- pps: 'application/vnd.ms-powerpoint',
479
- pot: 'application/vnd.ms-powerpoint',
480
- ppam: 'application/vnd.ms-powerpoint.addin.macroenabled.12',
481
- pptm: 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
482
- sldm: 'application/vnd.ms-powerpoint.slide.macroenabled.12',
483
- ppsm: 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
484
- potm: 'application/vnd.ms-powerpoint.template.macroenabled.12',
485
- mpt: 'application/vnd.ms-project',
486
- docm: 'application/vnd.ms-word.document.macroenabled.12',
487
- dotm: 'application/vnd.ms-word.template.macroenabled.12',
488
- wps: 'application/vnd.ms-works',
489
- wks: 'application/vnd.ms-works',
490
- wcm: 'application/vnd.ms-works',
491
- wdb: 'application/vnd.ms-works',
492
- wpl: 'application/vnd.ms-wpl',
493
- xps: 'application/vnd.ms-xpsdocument',
494
- mseq: 'application/vnd.mseq',
495
- mus: 'application/vnd.musician',
496
- msty: 'application/vnd.muvee.style',
497
- taglet: 'application/vnd.mynfc',
498
- nlu: 'application/vnd.neurolanguage.nlu',
499
- ntf: 'application/vnd.nitf',
500
- nitf: 'application/vnd.nitf',
501
- nnd: 'application/vnd.noblenet-directory',
502
- nns: 'application/vnd.noblenet-sealer',
503
- nnw: 'application/vnd.noblenet-web',
504
- ngdat: 'application/vnd.nokia.n-gage.data',
505
- 'n-gage': 'application/vnd.nokia.n-gage.symbian.install',
506
- rpst: 'application/vnd.nokia.radio-preset',
507
- rpss: 'application/vnd.nokia.radio-presets',
508
- edm: 'application/vnd.novadigm.edm',
509
- edx: 'application/vnd.novadigm.edx',
510
- ext: 'application/vnd.novadigm.ext',
511
- odc: 'application/vnd.oasis.opendocument.chart',
512
- otc: 'application/vnd.oasis.opendocument.chart-template',
513
- odb: 'application/vnd.oasis.opendocument.database',
514
- odf: 'application/vnd.oasis.opendocument.formula',
515
- odft: 'application/vnd.oasis.opendocument.formula-template',
516
- odg: 'application/vnd.oasis.opendocument.graphics',
517
- otg: 'application/vnd.oasis.opendocument.graphics-template',
518
- odi: 'application/vnd.oasis.opendocument.image',
519
- oti: 'application/vnd.oasis.opendocument.image-template',
520
- odp: 'application/vnd.oasis.opendocument.presentation',
521
- otp: 'application/vnd.oasis.opendocument.presentation-template',
522
- ods: 'application/vnd.oasis.opendocument.spreadsheet',
523
- ots: 'application/vnd.oasis.opendocument.spreadsheet-template',
524
- odt: 'application/vnd.oasis.opendocument.text',
525
- odm: 'application/vnd.oasis.opendocument.text-master',
526
- ott: 'application/vnd.oasis.opendocument.text-template',
527
- oth: 'application/vnd.oasis.opendocument.text-web',
528
- xo: 'application/vnd.olpc-sugar',
529
- dd2: 'application/vnd.oma.dd2+xml',
530
- obgx: 'application/vnd.openblox.game+xml',
531
- oxt: 'application/vnd.openofficeorg.extension',
532
- osm: 'application/vnd.openstreetmap.data+xml',
533
- pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
534
- sldx: 'application/vnd.openxmlformats-officedocument.presentationml.slide',
535
- ppsx: 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
536
- potx: 'application/vnd.openxmlformats-officedocument.presentationml.template',
537
- xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
538
- xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
539
- docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
540
- dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
541
- mgp: 'application/vnd.osgeo.mapguide.package',
542
- dp: 'application/vnd.osgi.dp',
543
- esa: 'application/vnd.osgi.subsystem',
544
- pdb: 'application/x-pilot',
545
- pqa: 'application/vnd.palm',
546
- oprc: 'application/vnd.palm',
547
- paw: 'application/vnd.pawaafile',
548
- str: 'application/vnd.pg.format',
549
- ei6: 'application/vnd.pg.osasli',
550
- efif: 'application/vnd.picsel',
551
- wg: 'application/vnd.pmi.widget',
552
- plf: 'application/vnd.pocketlearn',
553
- pbd: 'application/vnd.powerbuilder6',
554
- box: 'application/vnd.previewsystems.box',
555
- mgz: 'application/vnd.proteus.magazine',
556
- qps: 'application/vnd.publishare-delta-tree',
557
- ptid: 'application/vnd.pvi.ptid1',
558
- qxd: 'application/vnd.quark.quarkxpress',
559
- qxt: 'application/vnd.quark.quarkxpress',
560
- qwd: 'application/vnd.quark.quarkxpress',
561
- qwt: 'application/vnd.quark.quarkxpress',
562
- qxl: 'application/vnd.quark.quarkxpress',
563
- qxb: 'application/vnd.quark.quarkxpress',
564
- rar: 'application/x-rar-compressed',
565
- bed: 'application/vnd.realvnc.bed',
566
- mxl: 'application/vnd.recordare.musicxml',
567
- musicxml: 'application/vnd.recordare.musicxml+xml',
568
- cryptonote: 'application/vnd.rig.cryptonote',
569
- cod: 'application/vnd.rim.cod',
570
- rm: 'application/vnd.rn-realmedia',
571
- rmvb: 'application/vnd.rn-realmedia-vbr',
572
- link66: 'application/vnd.route66.link66+xml',
573
- st: 'application/vnd.sailingtracker.track',
574
- see: 'application/vnd.seemail',
575
- sema: 'application/vnd.sema',
576
- semd: 'application/vnd.semd',
577
- semf: 'application/vnd.semf',
578
- ifm: 'application/vnd.shana.informed.formdata',
579
- itp: 'application/vnd.shana.informed.formtemplate',
580
- iif: 'application/vnd.shana.informed.interchange',
581
- ipk: 'application/vnd.shana.informed.package',
582
- twd: 'application/vnd.simtech-mindmapper',
583
- twds: 'application/vnd.simtech-mindmapper',
584
- mmf: 'application/vnd.smaf',
585
- teacher: 'application/vnd.smart.teacher',
586
- fo: 'application/vnd.software602.filler.form+xml',
587
- sdkm: 'application/vnd.solent.sdkm+xml',
588
- sdkd: 'application/vnd.solent.sdkm+xml',
589
- dxp: 'application/vnd.spotfire.dxp',
590
- sfs: 'application/vnd.spotfire.sfs',
591
- sdc: 'application/vnd.stardivision.calc',
592
- sda: 'application/vnd.stardivision.draw',
593
- sdd: 'application/vnd.stardivision.impress',
594
- smf: 'application/vnd.stardivision.math',
595
- sdw: 'application/vnd.stardivision.writer',
596
- vor: 'application/vnd.stardivision.writer',
597
- sgl: 'application/vnd.stardivision.writer-global',
598
- smzip: 'application/vnd.stepmania.package',
599
- sm: 'application/vnd.stepmania.stepchart',
600
- wadl: 'application/vnd.sun.wadl+xml',
601
- sxc: 'application/vnd.sun.xml.calc',
602
- stc: 'application/vnd.sun.xml.calc.template',
603
- sxd: 'application/vnd.sun.xml.draw',
604
- std: 'application/vnd.sun.xml.draw.template',
605
- sxi: 'application/vnd.sun.xml.impress',
606
- sti: 'application/vnd.sun.xml.impress.template',
607
- sxm: 'application/vnd.sun.xml.math',
608
- sxw: 'application/vnd.sun.xml.writer',
609
- sxg: 'application/vnd.sun.xml.writer.global',
610
- stw: 'application/vnd.sun.xml.writer.template',
611
- sus: 'application/vnd.sus-calendar',
612
- susp: 'application/vnd.sus-calendar',
613
- svd: 'application/vnd.svd',
614
- sis: 'application/vnd.symbian.install',
615
- sisx: 'application/vnd.symbian.install',
616
- xsm: 'application/vnd.syncml+xml',
617
- bdm: 'application/vnd.syncml.dm+wbxml',
618
- xdm: 'application/vnd.syncml.dm+xml',
619
- ddf: 'application/vnd.syncml.dmddf+xml',
620
- tao: 'application/vnd.tao.intent-module-archive',
621
- pcap: 'application/vnd.tcpdump.pcap',
622
- cap: 'application/vnd.tcpdump.pcap',
623
- dmp: 'application/vnd.tcpdump.pcap',
624
- tmo: 'application/vnd.tmobile-livetv',
625
- tpt: 'application/vnd.trid.tpt',
626
- mxs: 'application/vnd.triscape.mxs',
627
- tra: 'application/vnd.trueapp',
628
- ufd: 'application/vnd.ufdl',
629
- ufdl: 'application/vnd.ufdl',
630
- utz: 'application/vnd.uiq.theme',
631
- umj: 'application/vnd.umajin',
632
- unityweb: 'application/vnd.unity',
633
- uoml: 'application/vnd.uoml+xml',
634
- vcx: 'application/vnd.vcx',
635
- vsd: 'application/vnd.visio',
636
- vst: 'application/vnd.visio',
637
- vss: 'application/vnd.visio',
638
- vsw: 'application/vnd.visio',
639
- vis: 'application/vnd.visionary',
640
- vsf: 'application/vnd.vsf',
641
- wbxml: 'application/vnd.wap.wbxml',
642
- wmlc: 'application/vnd.wap.wmlc',
643
- wmlsc: 'application/vnd.wap.wmlscriptc',
644
- wtb: 'application/vnd.webturbo',
645
- nbp: 'application/vnd.wolfram.player',
646
- wpd: 'application/vnd.wordperfect',
647
- wqd: 'application/vnd.wqd',
648
- stf: 'application/vnd.wt.stf',
649
- xar: 'application/vnd.xara',
650
- xfdl: 'application/vnd.xfdl',
651
- hvd: 'application/vnd.yamaha.hv-dic',
652
- hvs: 'application/vnd.yamaha.hv-script',
653
- hvp: 'application/vnd.yamaha.hv-voice',
654
- osf: 'application/vnd.yamaha.openscoreformat',
655
- osfpvg: 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
656
- saf: 'application/vnd.yamaha.smaf-audio',
657
- spf: 'application/vnd.yamaha.smaf-phrase',
658
- cmp: 'application/vnd.yellowriver-custom-menu',
659
- zir: 'application/vnd.zul',
660
- zirz: 'application/vnd.zul',
661
- zaz: 'application/vnd.zzazz.deck+xml',
662
- vxml: 'application/voicexml+xml',
663
- wasm: 'application/wasm',
664
- wif: 'application/watcherinfo+xml',
665
- wgt: 'application/widget',
666
- hlp: 'application/winhlp',
667
- wsdl: 'application/wsdl+xml',
668
- wspolicy: 'application/wspolicy+xml',
669
- '7z': 'application/x-7z-compressed',
670
- abw: 'application/x-abiword',
671
- ace: 'application/x-ace-compressed',
672
- arj: 'application/x-arj',
673
- aab: 'application/x-authorware-bin',
674
- x32: 'application/x-authorware-bin',
675
- u32: 'application/x-authorware-bin',
676
- vox: 'application/x-authorware-bin',
677
- aam: 'application/x-authorware-map',
678
- aas: 'application/x-authorware-seg',
679
- bcpio: 'application/x-bcpio',
680
- torrent: 'application/x-bittorrent',
681
- blb: 'application/x-blorb',
682
- blorb: 'application/x-blorb',
683
- bz: 'application/x-bzip',
684
- bz2: 'application/x-bzip2',
685
- boz: 'application/x-bzip2',
686
- cbr: 'application/x-cbr',
687
- cba: 'application/x-cbr',
688
- cbt: 'application/x-cbr',
689
- cbz: 'application/x-cbr',
690
- cb7: 'application/x-cbr',
691
- vcd: 'application/x-cdlink',
692
- cfs: 'application/x-cfs-compressed',
693
- chat: 'application/x-chat',
694
- pgn: 'application/x-chess-pgn',
695
- crx: 'application/x-chrome-extension',
696
- cco: 'application/x-cocoa',
697
- nsc: 'application/x-conference',
698
- cpio: 'application/x-cpio',
699
- csh: 'application/x-csh',
700
- udeb: 'application/x-debian-package',
701
- dgc: 'application/x-dgc-compressed',
702
- dir: 'application/x-director',
703
- dcr: 'application/x-director',
704
- dxr: 'application/x-director',
705
- cst: 'application/x-director',
706
- cct: 'application/x-director',
707
- cxt: 'application/x-director',
708
- w3d: 'application/x-director',
709
- fgd: 'application/x-director',
710
- swa: 'application/x-director',
711
- wad: 'application/x-doom',
712
- ncx: 'application/x-dtbncx+xml',
713
- dtb: 'application/x-dtbook+xml',
714
- res: 'application/x-dtbresource+xml',
715
- dvi: 'application/x-dvi',
716
- evy: 'application/x-envoy',
717
- eva: 'application/x-eva',
718
- bdf: 'application/x-font-bdf',
719
- gsf: 'application/x-font-ghostscript',
720
- psf: 'application/x-font-linux-psf',
721
- pcf: 'application/x-font-pcf',
722
- snf: 'application/x-font-snf',
723
- pfa: 'application/x-font-type1',
724
- pfb: 'application/x-font-type1',
725
- pfm: 'application/x-font-type1',
726
- afm: 'application/x-font-type1',
727
- arc: 'application/x-freearc',
728
- spl: 'application/x-futuresplash',
729
- gca: 'application/x-gca-compressed',
730
- ulx: 'application/x-glulx',
731
- gnumeric: 'application/x-gnumeric',
732
- gramps: 'application/x-gramps-xml',
733
- gtar: 'application/x-gtar',
734
- hdf: 'application/x-hdf',
735
- php: 'application/x-httpd-php',
736
- install: 'application/x-install-instructions',
737
- jardiff: 'application/x-java-archive-diff',
738
- jnlp: 'application/x-java-jnlp-file',
739
- kdbx: 'application/x-keepass2',
740
- latex: 'application/x-latex',
741
- luac: 'application/x-lua-bytecode',
742
- lzh: 'application/x-lzh-compressed',
743
- lha: 'application/x-lzh-compressed',
744
- run: 'application/x-makeself',
745
- mie: 'application/x-mie',
746
- prc: 'model/prc',
747
- mobi: 'application/x-mobipocket-ebook',
748
- application: 'application/x-ms-application',
749
- lnk: 'application/x-ms-shortcut',
750
- wmd: 'application/x-ms-wmd',
751
- wmz: 'application/x-msmetafile',
752
- xbap: 'application/x-ms-xbap',
753
- mdb: 'application/x-msaccess',
754
- obd: 'application/x-msbinder',
755
- crd: 'application/x-mscardfile',
756
- clp: 'application/x-msclip',
757
- com: 'application/x-msdownload',
758
- bat: 'application/x-msdownload',
759
- mvb: 'application/x-msmediaview',
760
- m13: 'application/x-msmediaview',
761
- m14: 'application/x-msmediaview',
762
- wmf: 'image/wmf',
763
- emf: 'image/emf',
764
- emz: 'application/x-msmetafile',
765
- mny: 'application/x-msmoney',
766
- pub: 'application/x-mspublisher',
767
- scd: 'application/x-msschedule',
768
- trm: 'application/x-msterminal',
769
- wri: 'application/x-mswrite',
770
- nc: 'application/x-netcdf',
771
- cdf: 'application/x-netcdf',
772
- pac: 'application/x-ns-proxy-autoconfig',
773
- nzb: 'application/x-nzb',
774
- pl: 'application/x-perl',
775
- pm: 'application/x-perl',
776
- p12: 'application/x-pkcs12',
777
- pfx: 'application/x-pkcs12',
778
- p7b: 'application/x-pkcs7-certificates',
779
- spc: 'application/x-pkcs7-certificates',
780
- p7r: 'application/x-pkcs7-certreqresp',
781
- rpm: 'application/x-redhat-package-manager',
782
- ris: 'application/x-research-info-systems',
783
- sea: 'application/x-sea',
784
- sh: 'application/x-sh',
785
- shar: 'application/x-shar',
786
- swf: 'application/x-shockwave-flash',
787
- xap: 'application/x-silverlight-app',
788
- sql: 'application/x-sql',
789
- sit: 'application/x-stuffit',
790
- sitx: 'application/x-stuffitx',
791
- srt: 'application/x-subrip',
792
- sv4cpio: 'application/x-sv4cpio',
793
- sv4crc: 'application/x-sv4crc',
794
- t3: 'application/x-t3vm-image',
795
- gam: 'application/x-tads',
796
- tar: 'application/x-tar',
797
- tcl: 'application/x-tcl',
798
- tk: 'application/x-tcl',
799
- tex: 'application/x-tex',
800
- tfm: 'application/x-tex-tfm',
801
- texinfo: 'application/x-texinfo',
802
- texi: 'application/x-texinfo',
803
- obj: 'model/obj',
804
- ustar: 'application/x-ustar',
805
- hdd: 'application/x-virtualbox-hdd',
806
- ova: 'application/x-virtualbox-ova',
807
- ovf: 'application/x-virtualbox-ovf',
808
- vbox: 'application/x-virtualbox-vbox',
809
- 'vbox-extpack': 'application/x-virtualbox-vbox-extpack',
810
- vdi: 'application/x-virtualbox-vdi',
811
- vhd: 'application/x-virtualbox-vhd',
812
- vmdk: 'application/x-virtualbox-vmdk',
813
- src: 'application/x-wais-source',
814
- webapp: 'application/x-web-app-manifest+json',
815
- der: 'application/x-x509-ca-cert',
816
- crt: 'application/x-x509-ca-cert',
817
- pem: 'application/x-x509-ca-cert',
818
- fig: 'application/x-xfig',
819
- xlf: 'application/xliff+xml',
820
- xpi: 'application/x-xpinstall',
821
- xz: 'application/x-xz',
822
- z1: 'application/x-zmachine',
823
- z2: 'application/x-zmachine',
824
- z3: 'application/x-zmachine',
825
- z4: 'application/x-zmachine',
826
- z5: 'application/x-zmachine',
827
- z6: 'application/x-zmachine',
828
- z7: 'application/x-zmachine',
829
- z8: 'application/x-zmachine',
830
- xaml: 'application/xaml+xml',
831
- xav: 'application/xcap-att+xml',
832
- xca: 'application/xcap-caps+xml',
833
- xdf: 'application/xcap-diff+xml',
834
- xel: 'application/xcap-el+xml',
835
- xns: 'application/xcap-ns+xml',
836
- xenc: 'application/xenc+xml',
837
- xhtml: 'application/xhtml+xml',
838
- xht: 'application/xhtml+xml',
839
- xml: 'text/xml',
840
- xsl: 'application/xslt+xml',
841
- xsd: 'application/xml',
842
- rng: 'application/xml',
843
- dtd: 'application/xml-dtd',
844
- xop: 'application/xop+xml',
845
- xpl: 'application/xproc+xml',
846
- xslt: 'application/xslt+xml',
847
- xspf: 'application/xspf+xml',
848
- mxml: 'application/xv+xml',
849
- xhvml: 'application/xv+xml',
850
- xvml: 'application/xv+xml',
851
- xvm: 'application/xv+xml',
852
- yang: 'application/yang',
853
- yin: 'application/yin+xml',
854
- zip: 'application/zip',
855
- '3gpp': 'video/3gpp',
856
- adp: 'audio/adpcm',
857
- amr: 'audio/amr',
858
- au: 'audio/basic',
859
- snd: 'audio/basic',
860
- mid: 'audio/midi',
861
- midi: 'audio/midi',
862
- kar: 'audio/midi',
863
- rmi: 'audio/midi',
864
- mxmf: 'audio/mobile-xmf',
865
- mp3: 'audio/mpeg',
866
- m4a: 'audio/x-m4a',
867
- mp4a: 'audio/mp4',
868
- mpga: 'audio/mpeg',
869
- mp2: 'audio/mpeg',
870
- mp2a: 'audio/mpeg',
871
- m2a: 'audio/mpeg',
872
- m3a: 'audio/mpeg',
873
- oga: 'audio/ogg',
874
- ogg: 'audio/ogg',
875
- spx: 'audio/ogg',
876
- opus: 'audio/ogg',
877
- s3m: 'audio/s3m',
878
- sil: 'audio/silk',
879
- uva: 'audio/vnd.dece.audio',
880
- uvva: 'audio/vnd.dece.audio',
881
- eol: 'audio/vnd.digital-winds',
882
- dra: 'audio/vnd.dra',
883
- dts: 'audio/vnd.dts',
884
- dtshd: 'audio/vnd.dts.hd',
885
- lvp: 'audio/vnd.lucent.voice',
886
- pya: 'audio/vnd.ms-playready.media.pya',
887
- ecelp4800: 'audio/vnd.nuera.ecelp4800',
888
- ecelp7470: 'audio/vnd.nuera.ecelp7470',
889
- ecelp9600: 'audio/vnd.nuera.ecelp9600',
890
- rip: 'audio/vnd.rip',
891
- wav: 'audio/x-wav',
892
- weba: 'audio/webm',
893
- aac: 'audio/x-aac',
894
- aif: 'audio/x-aiff',
895
- aiff: 'audio/x-aiff',
896
- aifc: 'audio/x-aiff',
897
- caf: 'audio/x-caf',
898
- flac: 'audio/x-flac',
899
- mka: 'audio/x-matroska',
900
- m3u: 'audio/x-mpegurl',
901
- wax: 'audio/x-ms-wax',
902
- wma: 'audio/x-ms-wma',
903
- ram: 'audio/x-pn-realaudio',
904
- ra: 'audio/x-realaudio',
905
- rmp: 'audio/x-pn-realaudio-plugin',
906
- xm: 'audio/xm',
907
- cdx: 'chemical/x-cdx',
908
- cif: 'chemical/x-cif',
909
- cmdf: 'chemical/x-cmdf',
910
- cml: 'chemical/x-cml',
911
- csml: 'chemical/x-csml',
912
- xyz: 'chemical/x-xyz',
913
- ttc: 'font/collection',
914
- otf: 'font/otf',
915
- ttf: 'font/ttf',
916
- woff: 'font/woff',
917
- woff2: 'font/woff2',
918
- exr: 'image/aces',
919
- apng: 'image/apng',
920
- avci: 'image/avci',
921
- avcs: 'image/avcs',
922
- avif: 'image/avif',
923
- bmp: 'image/x-ms-bmp',
924
- cgm: 'image/cgm',
925
- drle: 'image/dicom-rle',
926
- fits: 'image/fits',
927
- g3: 'image/g3fax',
928
- gif: 'image/gif',
929
- heic: 'image/heic',
930
- heics: 'image/heic-sequence',
931
- heif: 'image/heif',
932
- heifs: 'image/heif-sequence',
933
- hej2: 'image/hej2k',
934
- hsj2: 'image/hsj2',
935
- ief: 'image/ief',
936
- jls: 'image/jls',
937
- jp2: 'image/jp2',
938
- jpg2: 'image/jp2',
939
- jpeg: 'image/jpeg',
940
- jpg: 'image/jpeg',
941
- jpe: 'image/jpeg',
942
- jph: 'image/jph',
943
- jhc: 'image/jphc',
944
- jpm: 'video/jpm',
945
- jpx: 'image/jpx',
946
- jpf: 'image/jpx',
947
- jxr: 'image/jxr',
948
- jxra: 'image/jxra',
949
- jxrs: 'image/jxrs',
950
- jxs: 'image/jxs',
951
- jxsc: 'image/jxsc',
952
- jxsi: 'image/jxsi',
953
- jxss: 'image/jxss',
954
- ktx: 'image/ktx',
955
- ktx2: 'image/ktx2',
956
- png: 'image/png',
957
- btif: 'image/prs.btif',
958
- pti: 'image/prs.pti',
959
- sgi: 'image/sgi',
960
- svg: 'image/svg+xml',
961
- svgz: 'image/svg+xml',
962
- t38: 'image/t38',
963
- tif: 'image/tiff',
964
- tiff: 'image/tiff',
965
- tfx: 'image/tiff-fx',
966
- psd: 'image/vnd.adobe.photoshop',
967
- azv: 'image/vnd.airzip.accelerator.azv',
968
- uvi: 'image/vnd.dece.graphic',
969
- uvvi: 'image/vnd.dece.graphic',
970
- uvg: 'image/vnd.dece.graphic',
971
- uvvg: 'image/vnd.dece.graphic',
972
- djvu: 'image/vnd.djvu',
973
- djv: 'image/vnd.djvu',
974
- sub: 'text/vnd.dvb.subtitle',
975
- dwg: 'image/vnd.dwg',
976
- dxf: 'image/vnd.dxf',
977
- fbs: 'image/vnd.fastbidsheet',
978
- fpx: 'image/vnd.fpx',
979
- fst: 'image/vnd.fst',
980
- mmr: 'image/vnd.fujixerox.edmics-mmr',
981
- rlc: 'image/vnd.fujixerox.edmics-rlc',
982
- ico: 'image/x-icon',
983
- dds: 'image/vnd.ms-dds',
984
- mdi: 'image/vnd.ms-modi',
985
- wdp: 'image/vnd.ms-photo',
986
- npx: 'image/vnd.net-fpx',
987
- b16: 'image/vnd.pco.b16',
988
- tap: 'image/vnd.tencent.tap',
989
- vtf: 'image/vnd.valve.source.texture',
990
- wbmp: 'image/vnd.wap.wbmp',
991
- xif: 'image/vnd.xiff',
992
- pcx: 'image/x-pcx',
993
- webp: 'image/webp',
994
- '3ds': 'image/x-3ds',
995
- ras: 'image/x-cmu-raster',
996
- cmx: 'image/x-cmx',
997
- fh: 'image/x-freehand',
998
- fhc: 'image/x-freehand',
999
- fh4: 'image/x-freehand',
1000
- fh5: 'image/x-freehand',
1001
- fh7: 'image/x-freehand',
1002
- jng: 'image/x-jng',
1003
- sid: 'image/x-mrsid-image',
1004
- pic: 'image/x-pict',
1005
- pct: 'image/x-pict',
1006
- pnm: 'image/x-portable-anymap',
1007
- pbm: 'image/x-portable-bitmap',
1008
- pgm: 'image/x-portable-graymap',
1009
- ppm: 'image/x-portable-pixmap',
1010
- rgb: 'image/x-rgb',
1011
- tga: 'image/x-tga',
1012
- xbm: 'image/x-xbitmap',
1013
- xpm: 'image/x-xpixmap',
1014
- xwd: 'image/x-xwindowdump',
1015
- 'disposition-notification': 'message/disposition-notification',
1016
- u8msg: 'message/global',
1017
- u8dsn: 'message/global-delivery-status',
1018
- u8mdn: 'message/global-disposition-notification',
1019
- u8hdr: 'message/global-headers',
1020
- eml: 'message/rfc822',
1021
- mime: 'message/rfc822',
1022
- wsc: 'message/vnd.wfa.wsc',
1023
- '3mf': 'model/3mf',
1024
- gltf: 'model/gltf+json',
1025
- glb: 'model/gltf-binary',
1026
- igs: 'model/iges',
1027
- iges: 'model/iges',
1028
- msh: 'model/mesh',
1029
- mesh: 'model/mesh',
1030
- silo: 'model/mesh',
1031
- mtl: 'model/mtl',
1032
- stpx: 'model/step+xml',
1033
- stpz: 'model/step+zip',
1034
- stpxz: 'model/step-xml+zip',
1035
- u3d: 'model/u3d',
1036
- dae: 'model/vnd.collada+xml',
1037
- dwf: 'model/vnd.dwf',
1038
- gdl: 'model/vnd.gdl',
1039
- gtw: 'model/vnd.gtw',
1040
- mts: 'model/vnd.mts',
1041
- ogex: 'model/vnd.opengex',
1042
- x_b: 'model/vnd.parasolid.transmit.binary',
1043
- x_t: 'model/vnd.parasolid.transmit.text',
1044
- vds: 'model/vnd.sap.vds',
1045
- usdz: 'model/vnd.usdz+zip',
1046
- bsp: 'model/vnd.valve.source.compiled-map',
1047
- vtu: 'model/vnd.vtu',
1048
- wrl: 'model/vrml',
1049
- vrml: 'model/vrml',
1050
- x3db: 'model/x3d+fastinfoset',
1051
- x3dbz: 'model/x3d+binary',
1052
- x3dv: 'model/x3d-vrml',
1053
- x3dvz: 'model/x3d+vrml',
1054
- x3d: 'model/x3d+xml',
1055
- x3dz: 'model/x3d+xml',
1056
- appcache: 'text/cache-manifest',
1057
- manifest: 'text/cache-manifest',
1058
- ics: 'text/calendar',
1059
- ifb: 'text/calendar',
1060
- coffee: 'text/coffeescript',
1061
- litcoffee: 'text/coffeescript',
1062
- css: 'text/css',
1063
- csv: 'text/csv',
1064
- html: 'text/html',
1065
- htm: 'text/html',
1066
- shtml: 'text/html',
1067
- jade: 'text/jade',
1068
- jsx: 'text/jsx',
1069
- less: 'text/less',
1070
- markdown: 'text/markdown',
1071
- md: 'text/markdown',
1072
- mml: 'text/mathml',
1073
- mdx: 'text/mdx',
1074
- n3: 'text/n3',
1075
- txt: 'text/plain',
1076
- text: 'text/plain',
1077
- conf: 'text/plain',
1078
- def: 'text/plain',
1079
- list: 'text/plain',
1080
- log: 'text/plain',
1081
- in: 'text/plain',
1082
- ini: 'text/plain',
1083
- dsc: 'text/prs.lines.tag',
1084
- rtx: 'text/richtext',
1085
- sgml: 'text/sgml',
1086
- sgm: 'text/sgml',
1087
- shex: 'text/shex',
1088
- slim: 'text/slim',
1089
- slm: 'text/slim',
1090
- spdx: 'text/spdx',
1091
- stylus: 'text/stylus',
1092
- styl: 'text/stylus',
1093
- tsv: 'text/tab-separated-values',
1094
- t: 'text/troff',
1095
- tr: 'text/troff',
1096
- roff: 'text/troff',
1097
- man: 'text/troff',
1098
- me: 'text/troff',
1099
- ms: 'text/troff',
1100
- ttl: 'text/turtle',
1101
- uri: 'text/uri-list',
1102
- uris: 'text/uri-list',
1103
- urls: 'text/uri-list',
1104
- vcard: 'text/vcard',
1105
- curl: 'text/vnd.curl',
1106
- dcurl: 'text/vnd.curl.dcurl',
1107
- mcurl: 'text/vnd.curl.mcurl',
1108
- scurl: 'text/vnd.curl.scurl',
1109
- ged: 'text/vnd.familysearch.gedcom',
1110
- fly: 'text/vnd.fly',
1111
- flx: 'text/vnd.fmi.flexstor',
1112
- gv: 'text/vnd.graphviz',
1113
- '3dml': 'text/vnd.in3d.3dml',
1114
- spot: 'text/vnd.in3d.spot',
1115
- jad: 'text/vnd.sun.j2me.app-descriptor',
1116
- wml: 'text/vnd.wap.wml',
1117
- wmls: 'text/vnd.wap.wmlscript',
1118
- vtt: 'text/vtt',
1119
- s: 'text/x-asm',
1120
- asm: 'text/x-asm',
1121
- c: 'text/x-c',
1122
- cc: 'text/x-c',
1123
- cxx: 'text/x-c',
1124
- cpp: 'text/x-c',
1125
- h: 'text/x-c',
1126
- hh: 'text/x-c',
1127
- dic: 'text/x-c',
1128
- htc: 'text/x-component',
1129
- f: 'text/x-fortran',
1130
- for: 'text/x-fortran',
1131
- f77: 'text/x-fortran',
1132
- f90: 'text/x-fortran',
1133
- hbs: 'text/x-handlebars-template',
1134
- java: 'text/x-java-source',
1135
- lua: 'text/x-lua',
1136
- mkd: 'text/x-markdown',
1137
- nfo: 'text/x-nfo',
1138
- opml: 'text/x-opml',
1139
- p: 'text/x-pascal',
1140
- pas: 'text/x-pascal',
1141
- pde: 'text/x-processing',
1142
- sass: 'text/x-sass',
1143
- scss: 'text/x-scss',
1144
- etx: 'text/x-setext',
1145
- sfv: 'text/x-sfv',
1146
- ymp: 'text/x-suse-ymp',
1147
- uu: 'text/x-uuencode',
1148
- vcs: 'text/x-vcalendar',
1149
- vcf: 'text/x-vcard',
1150
- yaml: 'text/yaml',
1151
- yml: 'text/yaml',
1152
- '3gp': 'video/3gpp',
1153
- '3g2': 'video/3gpp2',
1154
- h261: 'video/h261',
1155
- h263: 'video/h263',
1156
- h264: 'video/h264',
1157
- m4s: 'video/iso.segment',
1158
- jpgv: 'video/jpeg',
1159
- jpgm: 'video/jpm',
1160
- mj2: 'video/mj2',
1161
- mjp2: 'video/mj2',
1162
- ts: 'video/mp2t',
1163
- mp4: 'video/mp4',
1164
- mp4v: 'video/mp4',
1165
- mpg4: 'video/mp4',
1166
- mpeg: 'video/mpeg',
1167
- mpg: 'video/mpeg',
1168
- mpe: 'video/mpeg',
1169
- m1v: 'video/mpeg',
1170
- m2v: 'video/mpeg',
1171
- ogv: 'video/ogg',
1172
- qt: 'video/quicktime',
1173
- mov: 'video/quicktime',
1174
- uvh: 'video/vnd.dece.hd',
1175
- uvvh: 'video/vnd.dece.hd',
1176
- uvm: 'video/vnd.dece.mobile',
1177
- uvvm: 'video/vnd.dece.mobile',
1178
- uvp: 'video/vnd.dece.pd',
1179
- uvvp: 'video/vnd.dece.pd',
1180
- uvs: 'video/vnd.dece.sd',
1181
- uvvs: 'video/vnd.dece.sd',
1182
- uvv: 'video/vnd.dece.video',
1183
- uvvv: 'video/vnd.dece.video',
1184
- dvb: 'video/vnd.dvb.file',
1185
- fvt: 'video/vnd.fvt',
1186
- mxu: 'video/vnd.mpegurl',
1187
- m4u: 'video/vnd.mpegurl',
1188
- pyv: 'video/vnd.ms-playready.media.pyv',
1189
- uvu: 'video/vnd.uvvu.mp4',
1190
- uvvu: 'video/vnd.uvvu.mp4',
1191
- viv: 'video/vnd.vivo',
1192
- webm: 'video/webm',
1193
- f4v: 'video/x-f4v',
1194
- fli: 'video/x-fli',
1195
- flv: 'video/x-flv',
1196
- m4v: 'video/x-m4v',
1197
- mkv: 'video/x-matroska',
1198
- mk3d: 'video/x-matroska',
1199
- mks: 'video/x-matroska',
1200
- mng: 'video/x-mng',
1201
- asf: 'video/x-ms-asf',
1202
- asx: 'video/x-ms-asf',
1203
- vob: 'video/x-ms-vob',
1204
- wm: 'video/x-ms-wm',
1205
- wmv: 'video/x-ms-wmv',
1206
- wmx: 'video/x-ms-wmx',
1207
- wvx: 'video/x-ms-wvx',
1208
- avi: 'video/x-msvideo',
1209
- movie: 'video/x-sgi-movie',
1210
- smv: 'video/x-smv',
1211
- ice: 'x-conference/x-cooltalk',
37
+ const extensions = {
38
+ '123': 'application/vnd.lotus-1-2-3',
39
+ ez: 'application/andrew-inset',
40
+ aw: 'application/applixware',
41
+ atom: 'application/atom+xml',
42
+ atomcat: 'application/atomcat+xml',
43
+ atomdeleted: 'application/atomdeleted+xml',
44
+ atomsvc: 'application/atomsvc+xml',
45
+ dwd: 'application/atsc-dwd+xml',
46
+ held: 'application/atsc-held+xml',
47
+ rsat: 'application/atsc-rsat+xml',
48
+ bdoc: 'application/x-bdoc',
49
+ xcs: 'application/calendar+xml',
50
+ ccxml: 'application/ccxml+xml',
51
+ cdfx: 'application/cdfx+xml',
52
+ cdmia: 'application/cdmi-capability',
53
+ cdmic: 'application/cdmi-container',
54
+ cdmid: 'application/cdmi-domain',
55
+ cdmio: 'application/cdmi-object',
56
+ cdmiq: 'application/cdmi-queue',
57
+ cpl: 'application/cpl+xml',
58
+ cu: 'application/cu-seeme',
59
+ cwl: 'application/cwl',
60
+ mpd: 'application/dash+xml',
61
+ mpp: 'application/vnd.ms-project',
62
+ davmount: 'application/davmount+xml',
63
+ dbk: 'application/docbook+xml',
64
+ dssc: 'application/dssc+der',
65
+ xdssc: 'application/dssc+xml',
66
+ ecma: 'application/ecmascript',
67
+ emma: 'application/emma+xml',
68
+ emotionml: 'application/emotionml+xml',
69
+ epub: 'application/epub+zip',
70
+ exi: 'application/exi',
71
+ exp: 'application/express',
72
+ fdf: 'application/vnd.fdf',
73
+ fdt: 'application/fdt+xml',
74
+ pfr: 'application/font-tdpfr',
75
+ geojson: 'application/geo+json',
76
+ gml: 'application/gml+xml',
77
+ gpx: 'application/gpx+xml',
78
+ gxf: 'application/gxf',
79
+ gz: 'application/gzip',
80
+ hjson: 'application/hjson',
81
+ stk: 'application/hyperstudio',
82
+ ink: 'application/inkml+xml',
83
+ inkml: 'application/inkml+xml',
84
+ ipfix: 'application/ipfix',
85
+ its: 'application/its+xml',
86
+ jar: 'application/java-archive',
87
+ war: 'application/java-archive',
88
+ ear: 'application/java-archive',
89
+ ser: 'application/java-serialized-object',
90
+ class: 'application/java-vm',
91
+ js: 'application/javascript',
92
+ mjs: 'application/javascript',
93
+ json: 'application/json',
94
+ map: 'application/json',
95
+ json5: 'application/json5',
96
+ jsonml: 'application/jsonml+json',
97
+ jsonld: 'application/ld+json',
98
+ lgr: 'application/lgr+xml',
99
+ lostxml: 'application/lost+xml',
100
+ hqx: 'application/mac-binhex40',
101
+ cpt: 'application/mac-compactpro',
102
+ mads: 'application/mads+xml',
103
+ webmanifest: 'application/manifest+json',
104
+ mrc: 'application/marc',
105
+ mrcx: 'application/marcxml+xml',
106
+ ma: 'application/mathematica',
107
+ nb: 'application/mathematica',
108
+ mb: 'application/mathematica',
109
+ mathml: 'application/mathml+xml',
110
+ mbox: 'application/mbox',
111
+ mpf: 'application/media-policy-dataset+xml',
112
+ mscml: 'application/mediaservercontrol+xml',
113
+ metalink: 'application/metalink+xml',
114
+ meta4: 'application/metalink4+xml',
115
+ mets: 'application/mets+xml',
116
+ maei: 'application/mmt-aei+xml',
117
+ musd: 'application/mmt-usd+xml',
118
+ mods: 'application/mods+xml',
119
+ m21: 'application/mp21',
120
+ mp21: 'application/mp21',
121
+ mp4s: 'application/mp4',
122
+ m4p: 'application/mp4',
123
+ doc: 'application/msword',
124
+ dot: 'application/msword',
125
+ mxf: 'application/mxf',
126
+ nq: 'application/n-quads',
127
+ nt: 'application/n-triples',
128
+ cjs: 'application/node',
129
+ bin: 'application/octet-stream',
130
+ dms: 'application/octet-stream',
131
+ lrf: 'application/octet-stream',
132
+ mar: 'application/octet-stream',
133
+ so: 'application/octet-stream',
134
+ dist: 'application/octet-stream',
135
+ distz: 'application/octet-stream',
136
+ pkg: 'application/octet-stream',
137
+ bpk: 'application/octet-stream',
138
+ dump: 'application/octet-stream',
139
+ elc: 'application/octet-stream',
140
+ deploy: 'application/octet-stream',
141
+ exe: 'application/x-msdownload',
142
+ dll: 'application/x-msdownload',
143
+ deb: 'application/x-debian-package',
144
+ dmg: 'application/x-apple-diskimage',
145
+ iso: 'application/x-iso9660-image',
146
+ img: 'application/octet-stream',
147
+ msi: 'application/x-msdownload',
148
+ msp: 'application/octet-stream',
149
+ msm: 'application/octet-stream',
150
+ buffer: 'application/octet-stream',
151
+ oda: 'application/oda',
152
+ opf: 'application/oebps-package+xml',
153
+ ogx: 'application/ogg',
154
+ omdoc: 'application/omdoc+xml',
155
+ onetoc: 'application/onenote',
156
+ onetoc2: 'application/onenote',
157
+ onetmp: 'application/onenote',
158
+ onepkg: 'application/onenote',
159
+ oxps: 'application/oxps',
160
+ relo: 'application/p2p-overlay+xml',
161
+ xer: 'application/patch-ops-error+xml',
162
+ pdf: 'application/pdf',
163
+ pgp: 'application/pgp-encrypted',
164
+ asc: 'application/pgp-signature',
165
+ sig: 'application/pgp-signature',
166
+ prf: 'application/pics-rules',
167
+ p10: 'application/pkcs10',
168
+ p7m: 'application/pkcs7-mime',
169
+ p7c: 'application/pkcs7-mime',
170
+ p7s: 'application/pkcs7-signature',
171
+ p8: 'application/pkcs8',
172
+ ac: 'application/vnd.nokia.n-gage.ac+xml',
173
+ cer: 'application/pkix-cert',
174
+ crl: 'application/pkix-crl',
175
+ pkipath: 'application/pkix-pkipath',
176
+ pki: 'application/pkixcmp',
177
+ pls: 'application/pls+xml',
178
+ ai: 'application/postscript',
179
+ eps: 'application/postscript',
180
+ ps: 'application/postscript',
181
+ provx: 'application/provenance+xml',
182
+ cww: 'application/prs.cww',
183
+ pskcxml: 'application/pskc+xml',
184
+ raml: 'application/raml+yaml',
185
+ rdf: 'application/rdf+xml',
186
+ owl: 'application/rdf+xml',
187
+ rif: 'application/reginfo+xml',
188
+ rnc: 'application/relax-ng-compact-syntax',
189
+ rl: 'application/resource-lists+xml',
190
+ rld: 'application/resource-lists-diff+xml',
191
+ rs: 'application/rls-services+xml',
192
+ rapd: 'application/route-apd+xml',
193
+ sls: 'application/route-s-tsid+xml',
194
+ rusd: 'application/route-usd+xml',
195
+ gbr: 'application/rpki-ghostbusters',
196
+ mft: 'application/rpki-manifest',
197
+ roa: 'application/rpki-roa',
198
+ rsd: 'application/rsd+xml',
199
+ rss: 'application/rss+xml',
200
+ rtf: 'text/rtf',
201
+ sbml: 'application/sbml+xml',
202
+ scq: 'application/scvp-cv-request',
203
+ scs: 'application/scvp-cv-response',
204
+ spq: 'application/scvp-vp-request',
205
+ spp: 'application/scvp-vp-response',
206
+ sdp: 'application/sdp',
207
+ senmlx: 'application/senml+xml',
208
+ sensmlx: 'application/sensml+xml',
209
+ setpay: 'application/set-payment-initiation',
210
+ setreg: 'application/set-registration-initiation',
211
+ shf: 'application/shf+xml',
212
+ siv: 'application/sieve',
213
+ sieve: 'application/sieve',
214
+ smi: 'application/smil+xml',
215
+ smil: 'application/smil+xml',
216
+ rq: 'application/sparql-query',
217
+ srx: 'application/sparql-results+xml',
218
+ gram: 'application/srgs',
219
+ grxml: 'application/srgs+xml',
220
+ sru: 'application/sru+xml',
221
+ ssdl: 'application/ssdl+xml',
222
+ ssml: 'application/ssml+xml',
223
+ swidtag: 'application/swid+xml',
224
+ tei: 'application/tei+xml',
225
+ teicorpus: 'application/tei+xml',
226
+ tfi: 'application/thraud+xml',
227
+ tsd: 'application/timestamped-data',
228
+ toml: 'application/toml',
229
+ trig: 'application/trig',
230
+ ttml: 'application/ttml+xml',
231
+ ubj: 'application/ubjson',
232
+ rsheet: 'application/urc-ressheet+xml',
233
+ td: 'application/urc-targetdesc+xml',
234
+ '1km': 'application/vnd.1000minds.decision-model+xml',
235
+ plb: 'application/vnd.3gpp.pic-bw-large',
236
+ psb: 'application/vnd.3gpp.pic-bw-small',
237
+ pvb: 'application/vnd.3gpp.pic-bw-var',
238
+ tcap: 'application/vnd.3gpp2.tcap',
239
+ pwn: 'application/vnd.3m.post-it-notes',
240
+ aso: 'application/vnd.accpac.simply.aso',
241
+ imp: 'application/vnd.accpac.simply.imp',
242
+ acu: 'application/vnd.acucobol',
243
+ atc: 'application/vnd.acucorp',
244
+ acutc: 'application/vnd.acucorp',
245
+ air: 'application/vnd.adobe.air-application-installer-package+zip',
246
+ fcdt: 'application/vnd.adobe.formscentral.fcdt',
247
+ fxp: 'application/vnd.adobe.fxp',
248
+ fxpl: 'application/vnd.adobe.fxp',
249
+ xdp: 'application/vnd.adobe.xdp+xml',
250
+ xfdf: 'application/xfdf',
251
+ age: 'application/vnd.age',
252
+ ahead: 'application/vnd.ahead.space',
253
+ azf: 'application/vnd.airzip.filesecure.azf',
254
+ azs: 'application/vnd.airzip.filesecure.azs',
255
+ azw: 'application/vnd.amazon.ebook',
256
+ acc: 'application/vnd.americandynamics.acc',
257
+ ami: 'application/vnd.amiga.ami',
258
+ apk: 'application/vnd.android.package-archive',
259
+ cii: 'application/vnd.anser-web-certificate-issue-initiation',
260
+ fti: 'application/vnd.anser-web-funds-transfer-initiation',
261
+ atx: 'application/vnd.antix.game-component',
262
+ mpkg: 'application/vnd.apple.installer+xml',
263
+ key: 'application/x-iwork-keynote-sffkey',
264
+ m3u8: 'application/vnd.apple.mpegurl',
265
+ numbers: 'application/x-iwork-numbers-sffnumbers',
266
+ pages: 'application/x-iwork-pages-sffpages',
267
+ pkpass: 'application/vnd.apple.pkpass',
268
+ swi: 'application/vnd.aristanetworks.swi',
269
+ iota: 'application/vnd.astraea-software.iota',
270
+ aep: 'application/vnd.audiograph',
271
+ bmml: 'application/vnd.balsamiq.bmml+xml',
272
+ mpm: 'application/vnd.blueice.multipass',
273
+ bmi: 'application/vnd.bmi',
274
+ rep: 'application/vnd.businessobjects',
275
+ cdxml: 'application/vnd.chemdraw+xml',
276
+ mmd: 'application/vnd.chipnuts.karaoke-mmd',
277
+ cdy: 'application/vnd.cinderella',
278
+ csl: 'application/vnd.citationstyles.style+xml',
279
+ cla: 'application/vnd.claymore',
280
+ rp9: 'application/vnd.cloanto.rp9',
281
+ c4g: 'application/vnd.clonk.c4group',
282
+ c4d: 'application/vnd.clonk.c4group',
283
+ c4f: 'application/vnd.clonk.c4group',
284
+ c4p: 'application/vnd.clonk.c4group',
285
+ c4u: 'application/vnd.clonk.c4group',
286
+ c11amc: 'application/vnd.cluetrust.cartomobile-config',
287
+ c11amz: 'application/vnd.cluetrust.cartomobile-config-pkg',
288
+ csp: 'application/vnd.commonspace',
289
+ cdbcmsg: 'application/vnd.contact.cmsg',
290
+ cmc: 'application/vnd.cosmocaller',
291
+ clkx: 'application/vnd.crick.clicker',
292
+ clkk: 'application/vnd.crick.clicker.keyboard',
293
+ clkp: 'application/vnd.crick.clicker.palette',
294
+ clkt: 'application/vnd.crick.clicker.template',
295
+ clkw: 'application/vnd.crick.clicker.wordbank',
296
+ wbs: 'application/vnd.criticaltools.wbs+xml',
297
+ pml: 'application/vnd.ctc-posml',
298
+ ppd: 'application/vnd.cups-ppd',
299
+ car: 'application/vnd.curl.car',
300
+ pcurl: 'application/vnd.curl.pcurl',
301
+ dart: 'application/vnd.dart',
302
+ rdz: 'application/vnd.data-vision.rdz',
303
+ dbf: 'application/vnd.dbf',
304
+ uvf: 'application/vnd.dece.data',
305
+ uvvf: 'application/vnd.dece.data',
306
+ uvd: 'application/vnd.dece.data',
307
+ uvvd: 'application/vnd.dece.data',
308
+ uvt: 'application/vnd.dece.ttml+xml',
309
+ uvvt: 'application/vnd.dece.ttml+xml',
310
+ uvx: 'application/vnd.dece.unspecified',
311
+ uvvx: 'application/vnd.dece.unspecified',
312
+ uvz: 'application/vnd.dece.zip',
313
+ uvvz: 'application/vnd.dece.zip',
314
+ fe_launch: 'application/vnd.denovo.fcselayout-link',
315
+ dna: 'application/vnd.dna',
316
+ mlp: 'application/vnd.dolby.mlp',
317
+ dpg: 'application/vnd.dpgraph',
318
+ dfac: 'application/vnd.dreamfactory',
319
+ kpxx: 'application/vnd.ds-keypoint',
320
+ ait: 'application/vnd.dvb.ait',
321
+ svc: 'application/vnd.dvb.service',
322
+ geo: 'application/vnd.dynageo',
323
+ mag: 'application/vnd.ecowin.chart',
324
+ nml: 'application/vnd.enliven',
325
+ esf: 'application/vnd.epson.esf',
326
+ msf: 'application/vnd.epson.msf',
327
+ qam: 'application/vnd.epson.quickanime',
328
+ slt: 'application/vnd.epson.salt',
329
+ ssf: 'application/vnd.epson.ssf',
330
+ es3: 'application/vnd.eszigno3+xml',
331
+ et3: 'application/vnd.eszigno3+xml',
332
+ ez2: 'application/vnd.ezpix-album',
333
+ ez3: 'application/vnd.ezpix-package',
334
+ mseed: 'application/vnd.fdsn.mseed',
335
+ seed: 'application/vnd.fdsn.seed',
336
+ dataless: 'application/vnd.fdsn.seed',
337
+ gph: 'application/vnd.flographit',
338
+ ftc: 'application/vnd.fluxtime.clip',
339
+ fm: 'application/vnd.framemaker',
340
+ frame: 'application/vnd.framemaker',
341
+ maker: 'application/vnd.framemaker',
342
+ book: 'application/vnd.framemaker',
343
+ fnc: 'application/vnd.frogans.fnc',
344
+ ltf: 'application/vnd.frogans.ltf',
345
+ fsc: 'application/vnd.fsc.weblaunch',
346
+ oas: 'application/vnd.fujitsu.oasys',
347
+ oa2: 'application/vnd.fujitsu.oasys2',
348
+ oa3: 'application/vnd.fujitsu.oasys3',
349
+ fg5: 'application/vnd.fujitsu.oasysgp',
350
+ bh2: 'application/vnd.fujitsu.oasysprs',
351
+ ddd: 'application/vnd.fujixerox.ddd',
352
+ xdw: 'application/vnd.fujixerox.docuworks',
353
+ xbd: 'application/vnd.fujixerox.docuworks.binder',
354
+ fzs: 'application/vnd.fuzzysheet',
355
+ txd: 'application/vnd.genomatix.tuxedo',
356
+ ggb: 'application/vnd.geogebra.file',
357
+ ggt: 'application/vnd.geogebra.tool',
358
+ gex: 'application/vnd.geometry-explorer',
359
+ gre: 'application/vnd.geometry-explorer',
360
+ gxt: 'application/vnd.geonext',
361
+ g2w: 'application/vnd.geoplan',
362
+ g3w: 'application/vnd.geospace',
363
+ gmx: 'application/vnd.gmx',
364
+ gdoc: 'application/vnd.google-apps.document',
365
+ gslides: 'application/vnd.google-apps.presentation',
366
+ gsheet: 'application/vnd.google-apps.spreadsheet',
367
+ kml: 'application/vnd.google-earth.kml+xml',
368
+ kmz: 'application/vnd.google-earth.kmz',
369
+ gqf: 'application/vnd.grafeq',
370
+ gqs: 'application/vnd.grafeq',
371
+ gac: 'application/vnd.groove-account',
372
+ ghf: 'application/vnd.groove-help',
373
+ gim: 'application/vnd.groove-identity-message',
374
+ grv: 'application/vnd.groove-injector',
375
+ gtm: 'application/vnd.groove-tool-message',
376
+ tpl: 'application/vnd.groove-tool-template',
377
+ vcg: 'application/vnd.groove-vcard',
378
+ hal: 'application/vnd.hal+xml',
379
+ zmm: 'application/vnd.handheld-entertainment+xml',
380
+ hbci: 'application/vnd.hbci',
381
+ les: 'application/vnd.hhe.lesson-player',
382
+ hpgl: 'application/vnd.hp-hpgl',
383
+ hpid: 'application/vnd.hp-hpid',
384
+ hps: 'application/vnd.hp-hps',
385
+ jlt: 'application/vnd.hp-jlyt',
386
+ pcl: 'application/vnd.hp-pcl',
387
+ pclxl: 'application/vnd.hp-pclxl',
388
+ 'sfd-hdstx': 'application/vnd.hydrostatix.sof-data',
389
+ mpy: 'application/vnd.ibm.minipay',
390
+ afp: 'application/vnd.ibm.modcap',
391
+ listafp: 'application/vnd.ibm.modcap',
392
+ list3820: 'application/vnd.ibm.modcap',
393
+ irm: 'application/vnd.ibm.rights-management',
394
+ sc: 'application/vnd.ibm.secure-container',
395
+ icc: 'application/vnd.iccprofile',
396
+ icm: 'application/vnd.iccprofile',
397
+ igl: 'application/vnd.igloader',
398
+ ivp: 'application/vnd.immervision-ivp',
399
+ ivu: 'application/vnd.immervision-ivu',
400
+ igm: 'application/vnd.insors.igm',
401
+ xpw: 'application/vnd.intercon.formnet',
402
+ xpx: 'application/vnd.intercon.formnet',
403
+ i2g: 'application/vnd.intergeo',
404
+ qbo: 'application/vnd.intu.qbo',
405
+ qfx: 'application/vnd.intu.qfx',
406
+ rcprofile: 'application/vnd.ipunplugged.rcprofile',
407
+ irp: 'application/vnd.irepository.package+xml',
408
+ xpr: 'application/vnd.is-xpr',
409
+ fcs: 'application/vnd.isac.fcs',
410
+ jam: 'application/vnd.jam',
411
+ rms: 'application/vnd.jcp.javame.midlet-rms',
412
+ jisp: 'application/vnd.jisp',
413
+ joda: 'application/vnd.joost.joda-archive',
414
+ ktz: 'application/vnd.kahootz',
415
+ ktr: 'application/vnd.kahootz',
416
+ karbon: 'application/vnd.kde.karbon',
417
+ chrt: 'application/vnd.kde.kchart',
418
+ kfo: 'application/vnd.kde.kformula',
419
+ flw: 'application/vnd.kde.kivio',
420
+ kon: 'application/vnd.kde.kontour',
421
+ kpr: 'application/vnd.kde.kpresenter',
422
+ kpt: 'application/vnd.kde.kpresenter',
423
+ ksp: 'application/vnd.kde.kspread',
424
+ kwd: 'application/vnd.kde.kword',
425
+ kwt: 'application/vnd.kde.kword',
426
+ htke: 'application/vnd.kenameaapp',
427
+ kia: 'application/vnd.kidspiration',
428
+ kne: 'application/vnd.kinar',
429
+ knp: 'application/vnd.kinar',
430
+ skp: 'application/vnd.koan',
431
+ skd: 'application/vnd.koan',
432
+ skt: 'application/vnd.koan',
433
+ skm: 'application/vnd.koan',
434
+ sse: 'application/vnd.kodak-descriptor',
435
+ lasxml: 'application/vnd.las.las+xml',
436
+ lbd: 'application/vnd.llamagraphics.life-balance.desktop',
437
+ lbe: 'application/vnd.llamagraphics.life-balance.exchange+xml',
438
+ apr: 'application/vnd.lotus-approach',
439
+ pre: 'application/vnd.lotus-freelance',
440
+ nsf: 'application/vnd.lotus-notes',
441
+ org: 'text/x-org',
442
+ scm: 'application/vnd.lotus-screencam',
443
+ lwp: 'application/vnd.lotus-wordpro',
444
+ portpkg: 'application/vnd.macports.portpkg',
445
+ mvt: 'application/vnd.mapbox-vector-tile',
446
+ mcd: 'application/vnd.mcd',
447
+ mc1: 'application/vnd.medcalcdata',
448
+ cdkey: 'application/vnd.mediastation.cdkey',
449
+ mwf: 'application/vnd.mfer',
450
+ mfm: 'application/vnd.mfmp',
451
+ flo: 'application/vnd.micrografx.flo',
452
+ igx: 'application/vnd.micrografx.igx',
453
+ mif: 'application/vnd.mif',
454
+ daf: 'application/vnd.mobius.daf',
455
+ dis: 'application/vnd.mobius.dis',
456
+ mbk: 'application/vnd.mobius.mbk',
457
+ mqy: 'application/vnd.mobius.mqy',
458
+ msl: 'application/vnd.mobius.msl',
459
+ plc: 'application/vnd.mobius.plc',
460
+ txf: 'application/vnd.mobius.txf',
461
+ mpn: 'application/vnd.mophun.application',
462
+ mpc: 'application/vnd.mophun.certificate',
463
+ xul: 'application/vnd.mozilla.xul+xml',
464
+ cil: 'application/vnd.ms-artgalry',
465
+ cab: 'application/vnd.ms-cab-compressed',
466
+ xls: 'application/vnd.ms-excel',
467
+ xlm: 'application/vnd.ms-excel',
468
+ xla: 'application/vnd.ms-excel',
469
+ xlc: 'application/vnd.ms-excel',
470
+ xlt: 'application/vnd.ms-excel',
471
+ xlw: 'application/vnd.ms-excel',
472
+ xlam: 'application/vnd.ms-excel.addin.macroenabled.12',
473
+ xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
474
+ xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12',
475
+ xltm: 'application/vnd.ms-excel.template.macroenabled.12',
476
+ eot: 'application/vnd.ms-fontobject',
477
+ chm: 'application/vnd.ms-htmlhelp',
478
+ ims: 'application/vnd.ms-ims',
479
+ lrm: 'application/vnd.ms-lrm',
480
+ thmx: 'application/vnd.ms-officetheme',
481
+ msg: 'application/vnd.ms-outlook',
482
+ cat: 'application/vnd.ms-pki.seccat',
483
+ stl: 'model/stl',
484
+ ppt: 'application/vnd.ms-powerpoint',
485
+ pps: 'application/vnd.ms-powerpoint',
486
+ pot: 'application/vnd.ms-powerpoint',
487
+ ppam: 'application/vnd.ms-powerpoint.addin.macroenabled.12',
488
+ pptm: 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
489
+ sldm: 'application/vnd.ms-powerpoint.slide.macroenabled.12',
490
+ ppsm: 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
491
+ potm: 'application/vnd.ms-powerpoint.template.macroenabled.12',
492
+ mpt: 'application/vnd.ms-project',
493
+ docm: 'application/vnd.ms-word.document.macroenabled.12',
494
+ dotm: 'application/vnd.ms-word.template.macroenabled.12',
495
+ wps: 'application/vnd.ms-works',
496
+ wks: 'application/vnd.ms-works',
497
+ wcm: 'application/vnd.ms-works',
498
+ wdb: 'application/vnd.ms-works',
499
+ wpl: 'application/vnd.ms-wpl',
500
+ xps: 'application/vnd.ms-xpsdocument',
501
+ mseq: 'application/vnd.mseq',
502
+ mus: 'application/vnd.musician',
503
+ msty: 'application/vnd.muvee.style',
504
+ taglet: 'application/vnd.mynfc',
505
+ nlu: 'application/vnd.neurolanguage.nlu',
506
+ ntf: 'application/vnd.nitf',
507
+ nitf: 'application/vnd.nitf',
508
+ nnd: 'application/vnd.noblenet-directory',
509
+ nns: 'application/vnd.noblenet-sealer',
510
+ nnw: 'application/vnd.noblenet-web',
511
+ ngdat: 'application/vnd.nokia.n-gage.data',
512
+ 'n-gage': 'application/vnd.nokia.n-gage.symbian.install',
513
+ rpst: 'application/vnd.nokia.radio-preset',
514
+ rpss: 'application/vnd.nokia.radio-presets',
515
+ edm: 'application/vnd.novadigm.edm',
516
+ edx: 'application/vnd.novadigm.edx',
517
+ ext: 'application/vnd.novadigm.ext',
518
+ odc: 'application/vnd.oasis.opendocument.chart',
519
+ otc: 'application/vnd.oasis.opendocument.chart-template',
520
+ odb: 'application/vnd.oasis.opendocument.database',
521
+ odf: 'application/vnd.oasis.opendocument.formula',
522
+ odft: 'application/vnd.oasis.opendocument.formula-template',
523
+ odg: 'application/vnd.oasis.opendocument.graphics',
524
+ otg: 'application/vnd.oasis.opendocument.graphics-template',
525
+ odi: 'application/vnd.oasis.opendocument.image',
526
+ oti: 'application/vnd.oasis.opendocument.image-template',
527
+ odp: 'application/vnd.oasis.opendocument.presentation',
528
+ otp: 'application/vnd.oasis.opendocument.presentation-template',
529
+ ods: 'application/vnd.oasis.opendocument.spreadsheet',
530
+ ots: 'application/vnd.oasis.opendocument.spreadsheet-template',
531
+ odt: 'application/vnd.oasis.opendocument.text',
532
+ odm: 'application/vnd.oasis.opendocument.text-master',
533
+ ott: 'application/vnd.oasis.opendocument.text-template',
534
+ oth: 'application/vnd.oasis.opendocument.text-web',
535
+ xo: 'application/vnd.olpc-sugar',
536
+ dd2: 'application/vnd.oma.dd2+xml',
537
+ obgx: 'application/vnd.openblox.game+xml',
538
+ oxt: 'application/vnd.openofficeorg.extension',
539
+ osm: 'application/vnd.openstreetmap.data+xml',
540
+ pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
541
+ sldx: 'application/vnd.openxmlformats-officedocument.presentationml.slide',
542
+ ppsx: 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
543
+ potx: 'application/vnd.openxmlformats-officedocument.presentationml.template',
544
+ xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
545
+ xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
546
+ docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
547
+ dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
548
+ mgp: 'application/vnd.osgeo.mapguide.package',
549
+ dp: 'application/vnd.osgi.dp',
550
+ esa: 'application/vnd.osgi.subsystem',
551
+ pdb: 'application/x-pilot',
552
+ pqa: 'application/vnd.palm',
553
+ oprc: 'application/vnd.palm',
554
+ paw: 'application/vnd.pawaafile',
555
+ str: 'application/vnd.pg.format',
556
+ ei6: 'application/vnd.pg.osasli',
557
+ efif: 'application/vnd.picsel',
558
+ wg: 'application/vnd.pmi.widget',
559
+ plf: 'application/vnd.pocketlearn',
560
+ pbd: 'application/vnd.powerbuilder6',
561
+ box: 'application/vnd.previewsystems.box',
562
+ mgz: 'application/vnd.proteus.magazine',
563
+ qps: 'application/vnd.publishare-delta-tree',
564
+ ptid: 'application/vnd.pvi.ptid1',
565
+ qxd: 'application/vnd.quark.quarkxpress',
566
+ qxt: 'application/vnd.quark.quarkxpress',
567
+ qwd: 'application/vnd.quark.quarkxpress',
568
+ qwt: 'application/vnd.quark.quarkxpress',
569
+ qxl: 'application/vnd.quark.quarkxpress',
570
+ qxb: 'application/vnd.quark.quarkxpress',
571
+ rar: 'application/x-rar-compressed',
572
+ bed: 'application/vnd.realvnc.bed',
573
+ mxl: 'application/vnd.recordare.musicxml',
574
+ musicxml: 'application/vnd.recordare.musicxml+xml',
575
+ cryptonote: 'application/vnd.rig.cryptonote',
576
+ cod: 'application/vnd.rim.cod',
577
+ rm: 'application/vnd.rn-realmedia',
578
+ rmvb: 'application/vnd.rn-realmedia-vbr',
579
+ link66: 'application/vnd.route66.link66+xml',
580
+ st: 'application/vnd.sailingtracker.track',
581
+ see: 'application/vnd.seemail',
582
+ sema: 'application/vnd.sema',
583
+ semd: 'application/vnd.semd',
584
+ semf: 'application/vnd.semf',
585
+ ifm: 'application/vnd.shana.informed.formdata',
586
+ itp: 'application/vnd.shana.informed.formtemplate',
587
+ iif: 'application/vnd.shana.informed.interchange',
588
+ ipk: 'application/vnd.shana.informed.package',
589
+ twd: 'application/vnd.simtech-mindmapper',
590
+ twds: 'application/vnd.simtech-mindmapper',
591
+ mmf: 'application/vnd.smaf',
592
+ teacher: 'application/vnd.smart.teacher',
593
+ fo: 'application/vnd.software602.filler.form+xml',
594
+ sdkm: 'application/vnd.solent.sdkm+xml',
595
+ sdkd: 'application/vnd.solent.sdkm+xml',
596
+ dxp: 'application/vnd.spotfire.dxp',
597
+ sfs: 'application/vnd.spotfire.sfs',
598
+ sdc: 'application/vnd.stardivision.calc',
599
+ sda: 'application/vnd.stardivision.draw',
600
+ sdd: 'application/vnd.stardivision.impress',
601
+ smf: 'application/vnd.stardivision.math',
602
+ sdw: 'application/vnd.stardivision.writer',
603
+ vor: 'application/vnd.stardivision.writer',
604
+ sgl: 'application/vnd.stardivision.writer-global',
605
+ smzip: 'application/vnd.stepmania.package',
606
+ sm: 'application/vnd.stepmania.stepchart',
607
+ wadl: 'application/vnd.sun.wadl+xml',
608
+ sxc: 'application/vnd.sun.xml.calc',
609
+ stc: 'application/vnd.sun.xml.calc.template',
610
+ sxd: 'application/vnd.sun.xml.draw',
611
+ std: 'application/vnd.sun.xml.draw.template',
612
+ sxi: 'application/vnd.sun.xml.impress',
613
+ sti: 'application/vnd.sun.xml.impress.template',
614
+ sxm: 'application/vnd.sun.xml.math',
615
+ sxw: 'application/vnd.sun.xml.writer',
616
+ sxg: 'application/vnd.sun.xml.writer.global',
617
+ stw: 'application/vnd.sun.xml.writer.template',
618
+ sus: 'application/vnd.sus-calendar',
619
+ susp: 'application/vnd.sus-calendar',
620
+ svd: 'application/vnd.svd',
621
+ sis: 'application/vnd.symbian.install',
622
+ sisx: 'application/vnd.symbian.install',
623
+ xsm: 'application/vnd.syncml+xml',
624
+ bdm: 'application/vnd.syncml.dm+wbxml',
625
+ xdm: 'application/vnd.syncml.dm+xml',
626
+ ddf: 'application/vnd.syncml.dmddf+xml',
627
+ tao: 'application/vnd.tao.intent-module-archive',
628
+ pcap: 'application/vnd.tcpdump.pcap',
629
+ cap: 'application/vnd.tcpdump.pcap',
630
+ dmp: 'application/vnd.tcpdump.pcap',
631
+ tmo: 'application/vnd.tmobile-livetv',
632
+ tpt: 'application/vnd.trid.tpt',
633
+ mxs: 'application/vnd.triscape.mxs',
634
+ tra: 'application/vnd.trueapp',
635
+ ufd: 'application/vnd.ufdl',
636
+ ufdl: 'application/vnd.ufdl',
637
+ utz: 'application/vnd.uiq.theme',
638
+ umj: 'application/vnd.umajin',
639
+ unityweb: 'application/vnd.unity',
640
+ uoml: 'application/vnd.uoml+xml',
641
+ vcx: 'application/vnd.vcx',
642
+ vsd: 'application/vnd.visio',
643
+ vst: 'application/vnd.visio',
644
+ vss: 'application/vnd.visio',
645
+ vsw: 'application/vnd.visio',
646
+ vis: 'application/vnd.visionary',
647
+ vsf: 'application/vnd.vsf',
648
+ wbxml: 'application/vnd.wap.wbxml',
649
+ wmlc: 'application/vnd.wap.wmlc',
650
+ wmlsc: 'application/vnd.wap.wmlscriptc',
651
+ wtb: 'application/vnd.webturbo',
652
+ nbp: 'application/vnd.wolfram.player',
653
+ wpd: 'application/vnd.wordperfect',
654
+ wqd: 'application/vnd.wqd',
655
+ stf: 'application/vnd.wt.stf',
656
+ xar: 'application/vnd.xara',
657
+ xfdl: 'application/vnd.xfdl',
658
+ hvd: 'application/vnd.yamaha.hv-dic',
659
+ hvs: 'application/vnd.yamaha.hv-script',
660
+ hvp: 'application/vnd.yamaha.hv-voice',
661
+ osf: 'application/vnd.yamaha.openscoreformat',
662
+ osfpvg: 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
663
+ saf: 'application/vnd.yamaha.smaf-audio',
664
+ spf: 'application/vnd.yamaha.smaf-phrase',
665
+ cmp: 'application/vnd.yellowriver-custom-menu',
666
+ zir: 'application/vnd.zul',
667
+ zirz: 'application/vnd.zul',
668
+ zaz: 'application/vnd.zzazz.deck+xml',
669
+ vxml: 'application/voicexml+xml',
670
+ wasm: 'application/wasm',
671
+ wif: 'application/watcherinfo+xml',
672
+ wgt: 'application/widget',
673
+ hlp: 'application/winhlp',
674
+ wsdl: 'application/wsdl+xml',
675
+ wspolicy: 'application/wspolicy+xml',
676
+ '7z': 'application/x-7z-compressed',
677
+ abw: 'application/x-abiword',
678
+ ace: 'application/x-ace-compressed',
679
+ arj: 'application/x-arj',
680
+ aab: 'application/x-authorware-bin',
681
+ x32: 'application/x-authorware-bin',
682
+ u32: 'application/x-authorware-bin',
683
+ vox: 'application/x-authorware-bin',
684
+ aam: 'application/x-authorware-map',
685
+ aas: 'application/x-authorware-seg',
686
+ bcpio: 'application/x-bcpio',
687
+ torrent: 'application/x-bittorrent',
688
+ blb: 'application/x-blorb',
689
+ blorb: 'application/x-blorb',
690
+ bz: 'application/x-bzip',
691
+ bz2: 'application/x-bzip2',
692
+ boz: 'application/x-bzip2',
693
+ cbr: 'application/x-cbr',
694
+ cba: 'application/x-cbr',
695
+ cbt: 'application/x-cbr',
696
+ cbz: 'application/x-cbr',
697
+ cb7: 'application/x-cbr',
698
+ vcd: 'application/x-cdlink',
699
+ cfs: 'application/x-cfs-compressed',
700
+ chat: 'application/x-chat',
701
+ pgn: 'application/x-chess-pgn',
702
+ crx: 'application/x-chrome-extension',
703
+ cco: 'application/x-cocoa',
704
+ nsc: 'application/x-conference',
705
+ cpio: 'application/x-cpio',
706
+ csh: 'application/x-csh',
707
+ udeb: 'application/x-debian-package',
708
+ dgc: 'application/x-dgc-compressed',
709
+ dir: 'application/x-director',
710
+ dcr: 'application/x-director',
711
+ dxr: 'application/x-director',
712
+ cst: 'application/x-director',
713
+ cct: 'application/x-director',
714
+ cxt: 'application/x-director',
715
+ w3d: 'application/x-director',
716
+ fgd: 'application/x-director',
717
+ swa: 'application/x-director',
718
+ wad: 'application/x-doom',
719
+ ncx: 'application/x-dtbncx+xml',
720
+ dtb: 'application/x-dtbook+xml',
721
+ res: 'application/x-dtbresource+xml',
722
+ dvi: 'application/x-dvi',
723
+ evy: 'application/x-envoy',
724
+ eva: 'application/x-eva',
725
+ bdf: 'application/x-font-bdf',
726
+ gsf: 'application/x-font-ghostscript',
727
+ psf: 'application/x-font-linux-psf',
728
+ pcf: 'application/x-font-pcf',
729
+ snf: 'application/x-font-snf',
730
+ pfa: 'application/x-font-type1',
731
+ pfb: 'application/x-font-type1',
732
+ pfm: 'application/x-font-type1',
733
+ afm: 'application/x-font-type1',
734
+ arc: 'application/x-freearc',
735
+ spl: 'application/x-futuresplash',
736
+ gca: 'application/x-gca-compressed',
737
+ ulx: 'application/x-glulx',
738
+ gnumeric: 'application/x-gnumeric',
739
+ gramps: 'application/x-gramps-xml',
740
+ gtar: 'application/x-gtar',
741
+ hdf: 'application/x-hdf',
742
+ php: 'application/x-httpd-php',
743
+ install: 'application/x-install-instructions',
744
+ jardiff: 'application/x-java-archive-diff',
745
+ jnlp: 'application/x-java-jnlp-file',
746
+ kdbx: 'application/x-keepass2',
747
+ latex: 'application/x-latex',
748
+ luac: 'application/x-lua-bytecode',
749
+ lzh: 'application/x-lzh-compressed',
750
+ lha: 'application/x-lzh-compressed',
751
+ run: 'application/x-makeself',
752
+ mie: 'application/x-mie',
753
+ prc: 'model/prc',
754
+ mobi: 'application/x-mobipocket-ebook',
755
+ application: 'application/x-ms-application',
756
+ lnk: 'application/x-ms-shortcut',
757
+ wmd: 'application/x-ms-wmd',
758
+ wmz: 'application/x-msmetafile',
759
+ xbap: 'application/x-ms-xbap',
760
+ mdb: 'application/x-msaccess',
761
+ obd: 'application/x-msbinder',
762
+ crd: 'application/x-mscardfile',
763
+ clp: 'application/x-msclip',
764
+ com: 'application/x-msdownload',
765
+ bat: 'application/x-msdownload',
766
+ mvb: 'application/x-msmediaview',
767
+ m13: 'application/x-msmediaview',
768
+ m14: 'application/x-msmediaview',
769
+ wmf: 'image/wmf',
770
+ emf: 'image/emf',
771
+ emz: 'application/x-msmetafile',
772
+ mny: 'application/x-msmoney',
773
+ pub: 'application/x-mspublisher',
774
+ scd: 'application/x-msschedule',
775
+ trm: 'application/x-msterminal',
776
+ wri: 'application/x-mswrite',
777
+ nc: 'application/x-netcdf',
778
+ cdf: 'application/x-netcdf',
779
+ pac: 'application/x-ns-proxy-autoconfig',
780
+ nzb: 'application/x-nzb',
781
+ pl: 'application/x-perl',
782
+ pm: 'application/x-perl',
783
+ p12: 'application/x-pkcs12',
784
+ pfx: 'application/x-pkcs12',
785
+ p7b: 'application/x-pkcs7-certificates',
786
+ spc: 'application/x-pkcs7-certificates',
787
+ p7r: 'application/x-pkcs7-certreqresp',
788
+ rpm: 'application/x-redhat-package-manager',
789
+ ris: 'application/x-research-info-systems',
790
+ sea: 'application/x-sea',
791
+ sh: 'application/x-sh',
792
+ shar: 'application/x-shar',
793
+ swf: 'application/x-shockwave-flash',
794
+ xap: 'application/x-silverlight-app',
795
+ sql: 'application/x-sql',
796
+ sit: 'application/x-stuffit',
797
+ sitx: 'application/x-stuffitx',
798
+ srt: 'application/x-subrip',
799
+ sv4cpio: 'application/x-sv4cpio',
800
+ sv4crc: 'application/x-sv4crc',
801
+ t3: 'application/x-t3vm-image',
802
+ gam: 'application/x-tads',
803
+ tar: 'application/x-tar',
804
+ tcl: 'application/x-tcl',
805
+ tk: 'application/x-tcl',
806
+ tex: 'application/x-tex',
807
+ tfm: 'application/x-tex-tfm',
808
+ texinfo: 'application/x-texinfo',
809
+ texi: 'application/x-texinfo',
810
+ obj: 'model/obj',
811
+ ustar: 'application/x-ustar',
812
+ hdd: 'application/x-virtualbox-hdd',
813
+ ova: 'application/x-virtualbox-ova',
814
+ ovf: 'application/x-virtualbox-ovf',
815
+ vbox: 'application/x-virtualbox-vbox',
816
+ 'vbox-extpack': 'application/x-virtualbox-vbox-extpack',
817
+ vdi: 'application/x-virtualbox-vdi',
818
+ vhd: 'application/x-virtualbox-vhd',
819
+ vmdk: 'application/x-virtualbox-vmdk',
820
+ src: 'application/x-wais-source',
821
+ webapp: 'application/x-web-app-manifest+json',
822
+ der: 'application/x-x509-ca-cert',
823
+ crt: 'application/x-x509-ca-cert',
824
+ pem: 'application/x-x509-ca-cert',
825
+ fig: 'application/x-xfig',
826
+ xlf: 'application/xliff+xml',
827
+ xpi: 'application/x-xpinstall',
828
+ xz: 'application/x-xz',
829
+ z1: 'application/x-zmachine',
830
+ z2: 'application/x-zmachine',
831
+ z3: 'application/x-zmachine',
832
+ z4: 'application/x-zmachine',
833
+ z5: 'application/x-zmachine',
834
+ z6: 'application/x-zmachine',
835
+ z7: 'application/x-zmachine',
836
+ z8: 'application/x-zmachine',
837
+ xaml: 'application/xaml+xml',
838
+ xav: 'application/xcap-att+xml',
839
+ xca: 'application/xcap-caps+xml',
840
+ xdf: 'application/xcap-diff+xml',
841
+ xel: 'application/xcap-el+xml',
842
+ xns: 'application/xcap-ns+xml',
843
+ xenc: 'application/xenc+xml',
844
+ xhtml: 'application/xhtml+xml',
845
+ xht: 'application/xhtml+xml',
846
+ xml: 'text/xml',
847
+ xsl: 'application/xslt+xml',
848
+ xsd: 'application/xml',
849
+ rng: 'application/xml',
850
+ dtd: 'application/xml-dtd',
851
+ xop: 'application/xop+xml',
852
+ xpl: 'application/xproc+xml',
853
+ xslt: 'application/xslt+xml',
854
+ xspf: 'application/xspf+xml',
855
+ mxml: 'application/xv+xml',
856
+ xhvml: 'application/xv+xml',
857
+ xvml: 'application/xv+xml',
858
+ xvm: 'application/xv+xml',
859
+ yang: 'application/yang',
860
+ yin: 'application/yin+xml',
861
+ zip: 'application/zip',
862
+ '3gpp': 'video/3gpp',
863
+ adp: 'audio/adpcm',
864
+ amr: 'audio/amr',
865
+ au: 'audio/basic',
866
+ snd: 'audio/basic',
867
+ mid: 'audio/midi',
868
+ midi: 'audio/midi',
869
+ kar: 'audio/midi',
870
+ rmi: 'audio/midi',
871
+ mxmf: 'audio/mobile-xmf',
872
+ mp3: 'audio/mpeg',
873
+ m4a: 'audio/x-m4a',
874
+ mp4a: 'audio/mp4',
875
+ mpga: 'audio/mpeg',
876
+ mp2: 'audio/mpeg',
877
+ mp2a: 'audio/mpeg',
878
+ m2a: 'audio/mpeg',
879
+ m3a: 'audio/mpeg',
880
+ oga: 'audio/ogg',
881
+ ogg: 'audio/ogg',
882
+ spx: 'audio/ogg',
883
+ opus: 'audio/ogg',
884
+ s3m: 'audio/s3m',
885
+ sil: 'audio/silk',
886
+ uva: 'audio/vnd.dece.audio',
887
+ uvva: 'audio/vnd.dece.audio',
888
+ eol: 'audio/vnd.digital-winds',
889
+ dra: 'audio/vnd.dra',
890
+ dts: 'audio/vnd.dts',
891
+ dtshd: 'audio/vnd.dts.hd',
892
+ lvp: 'audio/vnd.lucent.voice',
893
+ pya: 'audio/vnd.ms-playready.media.pya',
894
+ ecelp4800: 'audio/vnd.nuera.ecelp4800',
895
+ ecelp7470: 'audio/vnd.nuera.ecelp7470',
896
+ ecelp9600: 'audio/vnd.nuera.ecelp9600',
897
+ rip: 'audio/vnd.rip',
898
+ wav: 'audio/x-wav',
899
+ weba: 'audio/webm',
900
+ aac: 'audio/x-aac',
901
+ aif: 'audio/x-aiff',
902
+ aiff: 'audio/x-aiff',
903
+ aifc: 'audio/x-aiff',
904
+ caf: 'audio/x-caf',
905
+ flac: 'audio/x-flac',
906
+ mka: 'audio/x-matroska',
907
+ m3u: 'audio/x-mpegurl',
908
+ wax: 'audio/x-ms-wax',
909
+ wma: 'audio/x-ms-wma',
910
+ ram: 'audio/x-pn-realaudio',
911
+ ra: 'audio/x-realaudio',
912
+ rmp: 'audio/x-pn-realaudio-plugin',
913
+ xm: 'audio/xm',
914
+ cdx: 'chemical/x-cdx',
915
+ cif: 'chemical/x-cif',
916
+ cmdf: 'chemical/x-cmdf',
917
+ cml: 'chemical/x-cml',
918
+ csml: 'chemical/x-csml',
919
+ xyz: 'chemical/x-xyz',
920
+ ttc: 'font/collection',
921
+ otf: 'font/otf',
922
+ ttf: 'font/ttf',
923
+ woff: 'font/woff',
924
+ woff2: 'font/woff2',
925
+ exr: 'image/aces',
926
+ apng: 'image/apng',
927
+ avci: 'image/avci',
928
+ avcs: 'image/avcs',
929
+ avif: 'image/avif',
930
+ bmp: 'image/x-ms-bmp',
931
+ cgm: 'image/cgm',
932
+ drle: 'image/dicom-rle',
933
+ fits: 'image/fits',
934
+ g3: 'image/g3fax',
935
+ gif: 'image/gif',
936
+ heic: 'image/heic',
937
+ heics: 'image/heic-sequence',
938
+ heif: 'image/heif',
939
+ heifs: 'image/heif-sequence',
940
+ hej2: 'image/hej2k',
941
+ hsj2: 'image/hsj2',
942
+ ief: 'image/ief',
943
+ jls: 'image/jls',
944
+ jp2: 'image/jp2',
945
+ jpg2: 'image/jp2',
946
+ jpeg: 'image/jpeg',
947
+ jpg: 'image/jpeg',
948
+ jpe: 'image/jpeg',
949
+ jph: 'image/jph',
950
+ jhc: 'image/jphc',
951
+ jpm: 'video/jpm',
952
+ jpx: 'image/jpx',
953
+ jpf: 'image/jpx',
954
+ jxr: 'image/jxr',
955
+ jxra: 'image/jxra',
956
+ jxrs: 'image/jxrs',
957
+ jxs: 'image/jxs',
958
+ jxsc: 'image/jxsc',
959
+ jxsi: 'image/jxsi',
960
+ jxss: 'image/jxss',
961
+ ktx: 'image/ktx',
962
+ ktx2: 'image/ktx2',
963
+ png: 'image/png',
964
+ btif: 'image/prs.btif',
965
+ pti: 'image/prs.pti',
966
+ sgi: 'image/sgi',
967
+ svg: 'image/svg+xml',
968
+ svgz: 'image/svg+xml',
969
+ t38: 'image/t38',
970
+ tif: 'image/tiff',
971
+ tiff: 'image/tiff',
972
+ tfx: 'image/tiff-fx',
973
+ psd: 'image/vnd.adobe.photoshop',
974
+ azv: 'image/vnd.airzip.accelerator.azv',
975
+ uvi: 'image/vnd.dece.graphic',
976
+ uvvi: 'image/vnd.dece.graphic',
977
+ uvg: 'image/vnd.dece.graphic',
978
+ uvvg: 'image/vnd.dece.graphic',
979
+ djvu: 'image/vnd.djvu',
980
+ djv: 'image/vnd.djvu',
981
+ sub: 'text/vnd.dvb.subtitle',
982
+ dwg: 'image/vnd.dwg',
983
+ dxf: 'image/vnd.dxf',
984
+ fbs: 'image/vnd.fastbidsheet',
985
+ fpx: 'image/vnd.fpx',
986
+ fst: 'image/vnd.fst',
987
+ mmr: 'image/vnd.fujixerox.edmics-mmr',
988
+ rlc: 'image/vnd.fujixerox.edmics-rlc',
989
+ ico: 'image/x-icon',
990
+ dds: 'image/vnd.ms-dds',
991
+ mdi: 'image/vnd.ms-modi',
992
+ wdp: 'image/vnd.ms-photo',
993
+ npx: 'image/vnd.net-fpx',
994
+ b16: 'image/vnd.pco.b16',
995
+ tap: 'image/vnd.tencent.tap',
996
+ vtf: 'image/vnd.valve.source.texture',
997
+ wbmp: 'image/vnd.wap.wbmp',
998
+ xif: 'image/vnd.xiff',
999
+ pcx: 'image/x-pcx',
1000
+ webp: 'image/webp',
1001
+ '3ds': 'image/x-3ds',
1002
+ ras: 'image/x-cmu-raster',
1003
+ cmx: 'image/x-cmx',
1004
+ fh: 'image/x-freehand',
1005
+ fhc: 'image/x-freehand',
1006
+ fh4: 'image/x-freehand',
1007
+ fh5: 'image/x-freehand',
1008
+ fh7: 'image/x-freehand',
1009
+ jng: 'image/x-jng',
1010
+ sid: 'image/x-mrsid-image',
1011
+ pic: 'image/x-pict',
1012
+ pct: 'image/x-pict',
1013
+ pnm: 'image/x-portable-anymap',
1014
+ pbm: 'image/x-portable-bitmap',
1015
+ pgm: 'image/x-portable-graymap',
1016
+ ppm: 'image/x-portable-pixmap',
1017
+ rgb: 'image/x-rgb',
1018
+ tga: 'image/x-tga',
1019
+ xbm: 'image/x-xbitmap',
1020
+ xpm: 'image/x-xpixmap',
1021
+ xwd: 'image/x-xwindowdump',
1022
+ 'disposition-notification': 'message/disposition-notification',
1023
+ u8msg: 'message/global',
1024
+ u8dsn: 'message/global-delivery-status',
1025
+ u8mdn: 'message/global-disposition-notification',
1026
+ u8hdr: 'message/global-headers',
1027
+ eml: 'message/rfc822',
1028
+ mime: 'message/rfc822',
1029
+ wsc: 'message/vnd.wfa.wsc',
1030
+ '3mf': 'model/3mf',
1031
+ gltf: 'model/gltf+json',
1032
+ glb: 'model/gltf-binary',
1033
+ igs: 'model/iges',
1034
+ iges: 'model/iges',
1035
+ msh: 'model/mesh',
1036
+ mesh: 'model/mesh',
1037
+ silo: 'model/mesh',
1038
+ mtl: 'model/mtl',
1039
+ stpx: 'model/step+xml',
1040
+ stpz: 'model/step+zip',
1041
+ stpxz: 'model/step-xml+zip',
1042
+ u3d: 'model/u3d',
1043
+ dae: 'model/vnd.collada+xml',
1044
+ dwf: 'model/vnd.dwf',
1045
+ gdl: 'model/vnd.gdl',
1046
+ gtw: 'model/vnd.gtw',
1047
+ mts: 'model/vnd.mts',
1048
+ ogex: 'model/vnd.opengex',
1049
+ x_b: 'model/vnd.parasolid.transmit.binary',
1050
+ x_t: 'model/vnd.parasolid.transmit.text',
1051
+ vds: 'model/vnd.sap.vds',
1052
+ usdz: 'model/vnd.usdz+zip',
1053
+ bsp: 'model/vnd.valve.source.compiled-map',
1054
+ vtu: 'model/vnd.vtu',
1055
+ wrl: 'model/vrml',
1056
+ vrml: 'model/vrml',
1057
+ x3db: 'model/x3d+fastinfoset',
1058
+ x3dbz: 'model/x3d+binary',
1059
+ x3dv: 'model/x3d-vrml',
1060
+ x3dvz: 'model/x3d+vrml',
1061
+ x3d: 'model/x3d+xml',
1062
+ x3dz: 'model/x3d+xml',
1063
+ appcache: 'text/cache-manifest',
1064
+ manifest: 'text/cache-manifest',
1065
+ ics: 'text/calendar',
1066
+ ifb: 'text/calendar',
1067
+ coffee: 'text/coffeescript',
1068
+ litcoffee: 'text/coffeescript',
1069
+ css: 'text/css',
1070
+ csv: 'text/csv',
1071
+ html: 'text/html',
1072
+ htm: 'text/html',
1073
+ shtml: 'text/html',
1074
+ jade: 'text/jade',
1075
+ jsx: 'text/jsx',
1076
+ less: 'text/less',
1077
+ markdown: 'text/markdown',
1078
+ md: 'text/markdown',
1079
+ mml: 'text/mathml',
1080
+ mdx: 'text/mdx',
1081
+ n3: 'text/n3',
1082
+ txt: 'text/plain',
1083
+ text: 'text/plain',
1084
+ conf: 'text/plain',
1085
+ def: 'text/plain',
1086
+ list: 'text/plain',
1087
+ log: 'text/plain',
1088
+ in: 'text/plain',
1089
+ ini: 'text/plain',
1090
+ dsc: 'text/prs.lines.tag',
1091
+ rtx: 'text/richtext',
1092
+ sgml: 'text/sgml',
1093
+ sgm: 'text/sgml',
1094
+ shex: 'text/shex',
1095
+ slim: 'text/slim',
1096
+ slm: 'text/slim',
1097
+ spdx: 'text/spdx',
1098
+ stylus: 'text/stylus',
1099
+ styl: 'text/stylus',
1100
+ tsv: 'text/tab-separated-values',
1101
+ t: 'text/troff',
1102
+ tr: 'text/troff',
1103
+ roff: 'text/troff',
1104
+ man: 'text/troff',
1105
+ me: 'text/troff',
1106
+ ms: 'text/troff',
1107
+ ttl: 'text/turtle',
1108
+ uri: 'text/uri-list',
1109
+ uris: 'text/uri-list',
1110
+ urls: 'text/uri-list',
1111
+ vcard: 'text/vcard',
1112
+ curl: 'text/vnd.curl',
1113
+ dcurl: 'text/vnd.curl.dcurl',
1114
+ mcurl: 'text/vnd.curl.mcurl',
1115
+ scurl: 'text/vnd.curl.scurl',
1116
+ ged: 'text/vnd.familysearch.gedcom',
1117
+ fly: 'text/vnd.fly',
1118
+ flx: 'text/vnd.fmi.flexstor',
1119
+ gv: 'text/vnd.graphviz',
1120
+ '3dml': 'text/vnd.in3d.3dml',
1121
+ spot: 'text/vnd.in3d.spot',
1122
+ jad: 'text/vnd.sun.j2me.app-descriptor',
1123
+ wml: 'text/vnd.wap.wml',
1124
+ wmls: 'text/vnd.wap.wmlscript',
1125
+ vtt: 'text/vtt',
1126
+ s: 'text/x-asm',
1127
+ asm: 'text/x-asm',
1128
+ c: 'text/x-c',
1129
+ cc: 'text/x-c',
1130
+ cxx: 'text/x-c',
1131
+ cpp: 'text/x-c',
1132
+ h: 'text/x-c',
1133
+ hh: 'text/x-c',
1134
+ dic: 'text/x-c',
1135
+ htc: 'text/x-component',
1136
+ f: 'text/x-fortran',
1137
+ for: 'text/x-fortran',
1138
+ f77: 'text/x-fortran',
1139
+ f90: 'text/x-fortran',
1140
+ hbs: 'text/x-handlebars-template',
1141
+ java: 'text/x-java-source',
1142
+ lua: 'text/x-lua',
1143
+ mkd: 'text/x-markdown',
1144
+ nfo: 'text/x-nfo',
1145
+ opml: 'text/x-opml',
1146
+ p: 'text/x-pascal',
1147
+ pas: 'text/x-pascal',
1148
+ pde: 'text/x-processing',
1149
+ sass: 'text/x-sass',
1150
+ scss: 'text/x-scss',
1151
+ etx: 'text/x-setext',
1152
+ sfv: 'text/x-sfv',
1153
+ ymp: 'text/x-suse-ymp',
1154
+ uu: 'text/x-uuencode',
1155
+ vcs: 'text/x-vcalendar',
1156
+ vcf: 'text/x-vcard',
1157
+ yaml: 'text/yaml',
1158
+ yml: 'text/yaml',
1159
+ '3gp': 'video/3gpp',
1160
+ '3g2': 'video/3gpp2',
1161
+ h261: 'video/h261',
1162
+ h263: 'video/h263',
1163
+ h264: 'video/h264',
1164
+ m4s: 'video/iso.segment',
1165
+ jpgv: 'video/jpeg',
1166
+ jpgm: 'video/jpm',
1167
+ mj2: 'video/mj2',
1168
+ mjp2: 'video/mj2',
1169
+ ts: 'video/mp2t',
1170
+ mp4: 'video/mp4',
1171
+ mp4v: 'video/mp4',
1172
+ mpg4: 'video/mp4',
1173
+ mpeg: 'video/mpeg',
1174
+ mpg: 'video/mpeg',
1175
+ mpe: 'video/mpeg',
1176
+ m1v: 'video/mpeg',
1177
+ m2v: 'video/mpeg',
1178
+ ogv: 'video/ogg',
1179
+ qt: 'video/quicktime',
1180
+ mov: 'video/quicktime',
1181
+ uvh: 'video/vnd.dece.hd',
1182
+ uvvh: 'video/vnd.dece.hd',
1183
+ uvm: 'video/vnd.dece.mobile',
1184
+ uvvm: 'video/vnd.dece.mobile',
1185
+ uvp: 'video/vnd.dece.pd',
1186
+ uvvp: 'video/vnd.dece.pd',
1187
+ uvs: 'video/vnd.dece.sd',
1188
+ uvvs: 'video/vnd.dece.sd',
1189
+ uvv: 'video/vnd.dece.video',
1190
+ uvvv: 'video/vnd.dece.video',
1191
+ dvb: 'video/vnd.dvb.file',
1192
+ fvt: 'video/vnd.fvt',
1193
+ mxu: 'video/vnd.mpegurl',
1194
+ m4u: 'video/vnd.mpegurl',
1195
+ pyv: 'video/vnd.ms-playready.media.pyv',
1196
+ uvu: 'video/vnd.uvvu.mp4',
1197
+ uvvu: 'video/vnd.uvvu.mp4',
1198
+ viv: 'video/vnd.vivo',
1199
+ webm: 'video/webm',
1200
+ f4v: 'video/x-f4v',
1201
+ fli: 'video/x-fli',
1202
+ flv: 'video/x-flv',
1203
+ m4v: 'video/x-m4v',
1204
+ mkv: 'video/x-matroska',
1205
+ mk3d: 'video/x-matroska',
1206
+ mks: 'video/x-matroska',
1207
+ mng: 'video/x-mng',
1208
+ asf: 'video/x-ms-asf',
1209
+ asx: 'video/x-ms-asf',
1210
+ vob: 'video/x-ms-vob',
1211
+ wm: 'video/x-ms-wm',
1212
+ wmv: 'video/x-ms-wmv',
1213
+ wmx: 'video/x-ms-wmx',
1214
+ wvx: 'video/x-ms-wvx',
1215
+ avi: 'video/x-msvideo',
1216
+ movie: 'video/x-sgi-movie',
1217
+ smv: 'video/x-smv',
1218
+ ice: 'x-conference/x-cooltalk',
1212
1219
  };
1213
1220
 
1214
- function getMimeType(path, fallback = null) {
1215
- const ext = (/\.([^.]+)$/.exec(path) || [])[1] || path;
1216
- return extensions[ext] || fallback;
1221
+ function getMimeType(path, fallback = null) {
1222
+ const ext = (/\.([^.]+)$/.exec(path) || [])[1] || path;
1223
+ return extensions[ext] || fallback;
1217
1224
  }
1218
1225
 
1219
- function normalizePath(filePath, baseDir) {
1220
- return path.normalize(path.join(filePath.startsWith('/') || (baseDir && baseDir.startsWith('/')) ? '' : process.cwd(), baseDir || '', filePath));
1226
+ function normalizePath(filePath, baseDir) {
1227
+ return path.normalize(path.join(filePath.startsWith('/') || (baseDir && baseDir.startsWith('/')) ? '' : process.cwd(), baseDir || '', filePath));
1221
1228
  }
1222
1229
 
1223
- const { stat, readdir } = promises;
1224
- // export function statFile(path: string) {
1225
- // return stat(path)
1226
- // }
1227
- function serveFile(filePath, options = {}) {
1228
- return __awaiter(this, void 0, void 0, function* () {
1229
- const { restoreCtx } = useHttpContext();
1230
- const { status } = useResponse();
1231
- const { setHeader, removeHeader } = useSetHeaders();
1232
- const headers = useHeaders();
1233
- const { method, url } = useRequest();
1234
- const { setCacheControl, setExpires, setPragmaNoCache } = useSetCacheControl();
1235
- const normalizedPath = normalizePath(filePath, options.baseDir);
1236
- let fileStats;
1237
- try {
1238
- fileStats = yield stat(normalizedPath);
1239
- }
1240
- catch (e) {
1241
- if (options.defaultExt) {
1242
- const ext = path.extname(filePath);
1243
- if (!ext) {
1244
- restoreCtx();
1245
- return serveFile(filePath + '.' + options.defaultExt);
1246
- }
1247
- }
1248
- throw new HttpError(404);
1249
- }
1250
- status(200);
1251
- // if-none-match & if-modified-since processing start
1252
- // rfc7232
1253
- const etag = `"${[
1254
- fileStats.ino,
1255
- fileStats.size,
1256
- fileStats.mtime.toISOString(),
1257
- ].join('-')}"`;
1258
- const lastModified = new Date(fileStats.mtime);
1259
- if (isNotModified(etag, lastModified, headers['if-none-match'] || '', headers['if-modified-since'] || '')) {
1260
- status(304);
1261
- return '';
1262
- }
1263
- // if-none-match & if-modified-since processing end
1264
- setHeader('etag', etag);
1265
- setHeader('last-modified', lastModified.toUTCString());
1266
- if (options.cacheControl !== undefined) {
1267
- setCacheControl(options.cacheControl);
1268
- }
1269
- if (options.expires) {
1270
- setExpires(options.expires);
1271
- }
1272
- if (options.pragmaNoCache) {
1273
- setPragmaNoCache(options.pragmaNoCache);
1274
- }
1275
- if (fileStats.isDirectory()) {
1276
- if (options.listDirectory) {
1277
- restoreCtx();
1278
- return listDirectory(normalizedPath);
1279
- }
1280
- else if (options.index) {
1281
- if (filePath[filePath.length - 1] !== '/' &&
1282
- url &&
1283
- url[url.length - 1] !== '/') {
1284
- return new BaseHttpResponse()
1285
- .setStatus(302)
1286
- .setHeader('location', url + '/');
1287
- }
1288
- restoreCtx();
1289
- return serveFile(path.join(filePath, options.index), Object.assign(Object.assign({}, options), { index: '' }));
1290
- }
1291
- removeHeader('etag');
1292
- removeHeader('last-modified');
1293
- throw new HttpError(404);
1294
- }
1295
- // range header processing start
1296
- let range = headers.range;
1297
- let start, end;
1298
- let size = fileStats.size;
1299
- if (range) {
1300
- const rangeParts = range
1301
- .trim()
1302
- .replace(/bytes=/, '')
1303
- .split('-');
1304
- const [s, e] = rangeParts;
1305
- start = parseInt(s);
1306
- end = e ? parseInt(e) : size - 1;
1307
- end = Math.min(size - 1, end);
1308
- if (start > end || isNaN(start) || isNaN(end)) {
1309
- throw new HttpError(416);
1310
- }
1311
- size = end - start + 1;
1312
- // if-range processing start
1313
- // rfc7233#section-3.2\
1314
- const ifRange = headers['if-range'] || '';
1315
- const ifRangeTag = ifRange[0] === '"' ? ifRange : '';
1316
- const ifRangeDate = ifRangeTag ? '' : ifRange;
1317
- if (ifRange &&
1318
- !isNotModified(etag, lastModified, ifRangeTag, ifRangeDate)) {
1319
- // If the validator does not match, the server MUST ignore
1320
- // the Range header field.
1321
- status(200);
1322
- size = fileStats.size;
1323
- range = '';
1324
- }
1325
- else {
1326
- // If the validator given in the If-Range header field matches the
1327
- // current validator for the selected representation of the target
1328
- // resource, then the server SHOULD process the Range header field as
1329
- // requested.
1330
- setHeader('content-range', `bytes ${start}-${end}/${fileStats.size}`);
1331
- status(206);
1332
- }
1333
- // if-range processing end
1334
- }
1335
- // range header processing end
1336
- setHeader('accept-ranges', 'bytes');
1337
- setHeader('content-type', getMimeType(normalizedPath) || 'application/octet-stream');
1338
- setHeader('content-length', size);
1339
- if (options.headers) {
1340
- for (const header of Object.keys(options.headers)) {
1341
- setHeader(header, options.headers[header]);
1342
- }
1343
- }
1344
- return method === 'HEAD'
1345
- ? ''
1346
- : createReadStream(normalizedPath, !!range ? { start, end } : undefined);
1347
- });
1348
- }
1349
- // function toWeak(etag: string): string {
1350
- // return `W/${etag}`
1351
- // }
1352
- function isNotModified(etag, lastModified, clientEtag, clientLM) {
1353
- if (clientEtag) {
1354
- const parts = clientEtag.split(',').map((v) => v.trim());
1355
- for (const p of parts) {
1356
- if (etag === p) {
1357
- return true;
1358
- }
1359
- }
1360
- // A recipient MUST ignore If-Modified-Since if the request contains an
1361
- // If-None-Match header field; the condition in If-None-Match is
1362
- // considered to be a more accurate replacement for the condition in
1363
- // If-Modified-Since, and the two are only combined for the sake of
1364
- // interoperating with older intermediaries that might not implement
1365
- // If-None-Match.
1366
- return false;
1367
- }
1368
- const date = new Date(clientLM);
1369
- // A recipient MUST ignore the If-Modified-Since header field if the
1370
- // received field-value is not a valid HTTP-date, or if the request
1371
- // method is neither GET nor HEAD.
1372
- if (date.toString() !== 'Invalid Date' &&
1373
- date.getTime() > lastModified.getTime()) {
1374
- return true;
1375
- }
1376
- return false;
1377
- }
1378
- function listDirectory(dirPath) {
1379
- return __awaiter(this, void 0, void 0, function* () {
1380
- const { setContentType } = useSetHeaders();
1381
- const { url } = useRequest();
1382
- const list = yield readdir(dirPath);
1383
- const promises = [];
1384
- let detailedList = [];
1385
- for (const item of list) {
1386
- promises.push({ name: item, promise: stat(path.join(dirPath, item)) });
1387
- }
1388
- for (const item of promises) {
1389
- const data = yield item.promise;
1390
- detailedList.push({
1391
- name: item.name,
1392
- size: data.size,
1393
- mtime: data.mtime,
1394
- dir: data.isDirectory(),
1395
- });
1396
- }
1397
- detailedList = detailedList.sort((a, b) => a.dir === b.dir ? (a.name > b.name ? 1 : -1) : a.dir > b.dir ? -1 : 1);
1398
- detailedList.unshift({ name: '..', dir: true });
1399
- setContentType('text/html');
1400
- const styles = '<style type="text/css">\nhtml { font-family: monospace }\n' +
1401
- 'span { padding: 0px 2px }\n' +
1402
- '.text { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }\n' +
1403
- '.icon { width: 20px; display: inline-block; text-align: center; }\n' +
1404
- '.name { width: 250px; display: inline-block; }\n' +
1405
- '.size { width: 80px; display: inline-block; color: grey; text-align: right; }\n' +
1406
- '.date { width: 200px; display: inline-block; color: grey; text-align: right; }\n' +
1407
- '\n</style>';
1408
- return ('<html><head><title>Dir</title> ' +
1409
- styles +
1410
- ' </head><body><ul>' +
1411
- detailedList
1412
- .map((d) => `<li> <span class="icon">${d.dir ? '&#128193;' : '&#128462;'}</span>` +
1413
- `<a href="${path.join(url || '', d.name)}"><span class="name text">${d.name}</span></a>` +
1414
- `<span class="size text">${(d.size &&
1415
- (d.size > 10000
1416
- ? Math.round(d.size / 1024 / 1024).toString() +
1417
- 'Mb'
1418
- : Math.round(d.size / 1024).toString() +
1419
- 'Kb')) ||
1420
- ''}</span>` +
1421
- `<span class="date text">${(d.mtime && d.mtime.toISOString()) || ''}</li>`)
1422
- .join('\n') +
1423
- '</ul></body></html>');
1424
- });
1230
+ const { stat, readdir } = promises;
1231
+ function serveFile(filePath, options = {}) {
1232
+ return __awaiter(this, void 0, void 0, function* () {
1233
+ if (!options.allowDotDot && (/\/\.\.\//.test(filePath) || /^\.\.\//.test(filePath))) {
1234
+ throw new Error('Parent Traversal ("/../") is not allowed.');
1235
+ }
1236
+ const { restoreCtx } = useHttpContext();
1237
+ const { status } = useResponse();
1238
+ const { setHeader, removeHeader } = useSetHeaders();
1239
+ const headers = useHeaders();
1240
+ const { method, url } = useRequest();
1241
+ const { setCacheControl, setExpires, setPragmaNoCache } = useSetCacheControl();
1242
+ const normalizedPath = normalizePath(filePath, options.baseDir);
1243
+ let fileStats;
1244
+ try {
1245
+ fileStats = yield stat(normalizedPath);
1246
+ }
1247
+ catch (e) {
1248
+ if (options.defaultExt) {
1249
+ const ext = path.extname(filePath);
1250
+ if (!ext) {
1251
+ restoreCtx();
1252
+ return serveFile(filePath + '.' + options.defaultExt);
1253
+ }
1254
+ }
1255
+ throw new HttpError(404);
1256
+ }
1257
+ status(200);
1258
+ // if-none-match & if-modified-since processing start
1259
+ // rfc7232
1260
+ const etag = `"${[
1261
+ fileStats.ino,
1262
+ fileStats.size,
1263
+ fileStats.mtime.toISOString(),
1264
+ ].join('-')}"`;
1265
+ const lastModified = new Date(fileStats.mtime);
1266
+ if (isNotModified(etag, lastModified, headers['if-none-match'] || '', headers['if-modified-since'] || '')) {
1267
+ status(304);
1268
+ return '';
1269
+ }
1270
+ // if-none-match & if-modified-since processing end
1271
+ setHeader('etag', etag);
1272
+ setHeader('last-modified', lastModified.toUTCString());
1273
+ if (options.cacheControl !== undefined) {
1274
+ setCacheControl(options.cacheControl);
1275
+ }
1276
+ if (options.expires) {
1277
+ setExpires(options.expires);
1278
+ }
1279
+ if (options.pragmaNoCache) {
1280
+ setPragmaNoCache(options.pragmaNoCache);
1281
+ }
1282
+ if (fileStats.isDirectory()) {
1283
+ if (options.listDirectory) {
1284
+ restoreCtx();
1285
+ return listDirectory(normalizedPath);
1286
+ }
1287
+ else if (options.index) {
1288
+ if (filePath[filePath.length - 1] !== '/' &&
1289
+ url &&
1290
+ url[url.length - 1] !== '/') {
1291
+ return new BaseHttpResponse()
1292
+ .setStatus(302)
1293
+ .setHeader('location', url + '/');
1294
+ }
1295
+ restoreCtx();
1296
+ return serveFile(path.join(filePath, options.index), Object.assign(Object.assign({}, options), { index: '' }));
1297
+ }
1298
+ removeHeader('etag');
1299
+ removeHeader('last-modified');
1300
+ throw new HttpError(404);
1301
+ }
1302
+ // range header processing start
1303
+ let range = headers.range;
1304
+ let start, end;
1305
+ let size = fileStats.size;
1306
+ if (range) {
1307
+ const rangeParts = range
1308
+ .trim()
1309
+ .replace(/bytes=/, '')
1310
+ .split('-');
1311
+ const [s, e] = rangeParts;
1312
+ start = parseInt(s);
1313
+ end = e ? parseInt(e) : size - 1;
1314
+ end = Math.min(size - 1, end);
1315
+ if (start > end || isNaN(start) || isNaN(end)) {
1316
+ throw new HttpError(416);
1317
+ }
1318
+ size = end - start + 1;
1319
+ // if-range processing start
1320
+ // rfc7233#section-3.2\
1321
+ const ifRange = headers['if-range'] || '';
1322
+ const ifRangeTag = ifRange[0] === '"' ? ifRange : '';
1323
+ const ifRangeDate = ifRangeTag ? '' : ifRange;
1324
+ if (ifRange &&
1325
+ !isNotModified(etag, lastModified, ifRangeTag, ifRangeDate)) {
1326
+ // If the validator does not match, the server MUST ignore
1327
+ // the Range header field.
1328
+ status(200);
1329
+ size = fileStats.size;
1330
+ range = '';
1331
+ }
1332
+ else {
1333
+ // If the validator given in the If-Range header field matches the
1334
+ // current validator for the selected representation of the target
1335
+ // resource, then the server SHOULD process the Range header field as
1336
+ // requested.
1337
+ setHeader('content-range', `bytes ${start}-${end}/${fileStats.size}`);
1338
+ status(206);
1339
+ }
1340
+ // if-range processing end
1341
+ }
1342
+ // range header processing end
1343
+ setHeader('accept-ranges', 'bytes');
1344
+ setHeader('content-type', getMimeType(normalizedPath) || 'application/octet-stream');
1345
+ setHeader('content-length', size);
1346
+ if (options.headers) {
1347
+ for (const header of Object.keys(options.headers)) {
1348
+ setHeader(header, options.headers[header]);
1349
+ }
1350
+ }
1351
+ return method === 'HEAD'
1352
+ ? ''
1353
+ : createReadStream(normalizedPath, !!range ? { start, end } : undefined);
1354
+ });
1355
+ }
1356
+ // function toWeak(etag: string): string {
1357
+ // return `W/${etag}`
1358
+ // }
1359
+ function isNotModified(etag, lastModified, clientEtag, clientLM) {
1360
+ if (clientEtag) {
1361
+ const parts = clientEtag.split(',').map((v) => v.trim());
1362
+ for (const p of parts) {
1363
+ if (etag === p) {
1364
+ return true;
1365
+ }
1366
+ }
1367
+ // A recipient MUST ignore If-Modified-Since if the request contains an
1368
+ // If-None-Match header field; the condition in If-None-Match is
1369
+ // considered to be a more accurate replacement for the condition in
1370
+ // If-Modified-Since, and the two are only combined for the sake of
1371
+ // interoperating with older intermediaries that might not implement
1372
+ // If-None-Match.
1373
+ return false;
1374
+ }
1375
+ const date = new Date(clientLM);
1376
+ // A recipient MUST ignore the If-Modified-Since header field if the
1377
+ // received field-value is not a valid HTTP-date, or if the request
1378
+ // method is neither GET nor HEAD.
1379
+ if (date.toString() !== 'Invalid Date' &&
1380
+ date.getTime() > lastModified.getTime()) {
1381
+ return true;
1382
+ }
1383
+ return false;
1384
+ }
1385
+ function listDirectory(dirPath) {
1386
+ return __awaiter(this, void 0, void 0, function* () {
1387
+ const { setContentType } = useSetHeaders();
1388
+ const { url } = useRequest();
1389
+ const list = yield readdir(dirPath);
1390
+ const promises = [];
1391
+ let detailedList = [];
1392
+ for (const item of list) {
1393
+ promises.push({ name: item, promise: stat(path.join(dirPath, item)) });
1394
+ }
1395
+ for (const item of promises) {
1396
+ const data = yield item.promise;
1397
+ detailedList.push({
1398
+ name: item.name,
1399
+ size: data.size,
1400
+ mtime: data.mtime,
1401
+ dir: data.isDirectory(),
1402
+ });
1403
+ }
1404
+ detailedList = detailedList.sort((a, b) => a.dir === b.dir ? (a.name > b.name ? 1 : -1) : a.dir > b.dir ? -1 : 1);
1405
+ detailedList.unshift({ name: '..', dir: true });
1406
+ setContentType('text/html');
1407
+ const styles = '<style type="text/css">\nhtml { font-family: monospace }\n' +
1408
+ 'span { padding: 0px 2px }\n' +
1409
+ '.text { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }\n' +
1410
+ '.icon { width: 20px; display: inline-block; text-align: center; }\n' +
1411
+ '.name { width: 250px; display: inline-block; }\n' +
1412
+ '.size { width: 80px; display: inline-block; color: grey; text-align: right; }\n' +
1413
+ '.date { width: 200px; display: inline-block; color: grey; text-align: right; }\n' +
1414
+ '\n</style>';
1415
+ return ('<html><head><title>Dir</title> ' +
1416
+ styles +
1417
+ ' </head><body><ul>' +
1418
+ detailedList
1419
+ .map((d) => `<li> <span class="icon">${d.dir ? '&#128193;' : '&#128462;'}</span>` +
1420
+ `<a href="${path.join(url || '', d.name)}"><span class="name text">${d.name}</span></a>` +
1421
+ `<span class="size text">${(d.size &&
1422
+ (d.size > 10000
1423
+ ? Math.round(d.size / 1024 / 1024).toString() +
1424
+ 'Mb'
1425
+ : Math.round(d.size / 1024).toString() +
1426
+ 'Kb')) ||
1427
+ ''}</span>` +
1428
+ `<span class="date text">${(d.mtime && d.mtime.toISOString()) || ''}</li>`)
1429
+ .join('\n') +
1430
+ '</ul></body></html>');
1431
+ });
1425
1432
  }
1426
1433
 
1427
1434
  export { serveFile };