@c9up/ream 0.2.12 → 0.2.14

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