MaddHacker/server-lite

View on GitHub
lib/sl-content.js

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * Copyright 2017 MaddHacker
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

'use strict';

/**
 * Generic concept of a Content-Type model => all (non-binary) content is assumed to have charset = 'utf-8'.
 * 
 * @param {String} mimeType => how the client should read the content
 * @param {Object} content => actual content (file, image, etc)
 * @param {String} encoding => 'binary' or 'utf-8' encoded content, default is 'binary'
 * @returns {Content} content wrapper for given payload.
 */
function Content(mimeType, content, encoding) {
    var obj = {};

    obj.type = mimeType;
    obj.value = content;
    obj.length = content.byteLength || content.length;
    obj.encoding = encoding || binaryEncoding;
    if (obj.encoding === utf8Encoding) {
        obj.type = obj.type + utf8EncodingCharset;
    }

    return obj;
}

/**
 * Shortcut to use a known MIME type constant to create a Content Object
 * 
 * @param {Object} mimeType => one of the known MIME Types
 * @param {Object} content actual content (file, image, etc)
 * 
 * @see #Content(String, Object, String)
 */
function ContentFromKnownType(mimeType, content) {
    return Content(mimeType.mimeType, content, mimeType.encoding);
}

const binaryEncoding = 'binary';

const utf8Encoding = 'utf-8';

const utf8EncodingCharset = '; charset=utf-8';

/**
 * Comprehensive list of MIME types by extension, others can still be supported using the `#custom()` export
 */
const mimeTypes = {
    'x3d': { mimeType: 'application/vnd.hzn-3d-crossword', encoding: binaryEncoding },
    '3dml': { mimeType: 'text/vnd.in3d.3dml', encoding: binaryEncoding },
    '3g2': { mimeType: 'video/3gpp2', encoding: binaryEncoding },
    '3gp': { mimeType: 'video/3gpp', encoding: binaryEncoding },
    '7z': { mimeType: 'application/x-7z-compressed', encoding: binaryEncoding },
    'aab': { mimeType: 'application/x-authorware-bin', encoding: binaryEncoding },
    'aac': { mimeType: 'audio/x-aac', encoding: binaryEncoding },
    'aam': { mimeType: 'application/x-authorware-map', encoding: binaryEncoding },
    'aas': { mimeType: 'application/x-authorware-seg', encoding: binaryEncoding },
    'abw': { mimeType: 'application/x-abiword', encoding: binaryEncoding },
    'ac': { mimeType: 'application/pkix-attr-cert', encoding: binaryEncoding },
    'acc': { mimeType: 'application/vnd.americandynamics.acc', encoding: binaryEncoding },
    'ace': { mimeType: 'application/x-ace-compressed', encoding: binaryEncoding },
    'acu': { mimeType: 'application/vnd.acucobol', encoding: binaryEncoding },
    'adp': { mimeType: 'audio/adpcm', encoding: binaryEncoding },
    'aep': { mimeType: 'application/vnd.audiograph', encoding: binaryEncoding },
    'afp': { mimeType: 'application/vnd.ibm.modcap', encoding: binaryEncoding },
    'ahead': { mimeType: 'application/vnd.ahead.space', encoding: binaryEncoding },
    'ai': { mimeType: 'application/postscript', encoding: binaryEncoding },
    'aif': { mimeType: 'audio/x-aiff', encoding: binaryEncoding },
    'air': { mimeType: 'application/vnd.adobe.air-application-installer-package+zip', encoding: binaryEncoding },
    'ait': { mimeType: 'application/vnd.dvb.ait', encoding: binaryEncoding },
    'ami': { mimeType: 'application/vnd.amiga.ami', encoding: binaryEncoding },
    'apk': { mimeType: 'application/vnd.android.package-archive', encoding: binaryEncoding },
    'application': { mimeType: 'application/x-ms-application', encoding: binaryEncoding },
    'apr': { mimeType: 'application/vnd.lotus-approach', encoding: binaryEncoding },
    'asf': { mimeType: 'video/x-ms-asf', encoding: binaryEncoding },
    'aso': { mimeType: 'application/vnd.accpac.simply.aso', encoding: binaryEncoding },
    'atc': { mimeType: 'application/vnd.acucorp', encoding: binaryEncoding },
    'atom': { mimeType: 'application/atom+xml', encoding: binaryEncoding },
    'atomcat': { mimeType: 'application/atomcat+xml', encoding: binaryEncoding },
    'atomsvc': { mimeType: 'application/atomsvc+xml', encoding: binaryEncoding },
    'atx': { mimeType: 'application/vnd.antix.game-component', encoding: binaryEncoding },
    'au': { mimeType: 'audio/basic', encoding: binaryEncoding },
    'avi': { mimeType: 'video/x-msvideo', encoding: binaryEncoding },
    'aw': { mimeType: 'application/applixware', encoding: binaryEncoding },
    'azf': { mimeType: 'application/vnd.airzip.filesecure.azf', encoding: binaryEncoding },
    'azs': { mimeType: 'application/vnd.airzip.filesecure.azs', encoding: binaryEncoding },
    'azw': { mimeType: 'application/vnd.amazon.ebook', encoding: binaryEncoding },
    'bcpio': { mimeType: 'application/x-bcpio', encoding: binaryEncoding },
    'bdf': { mimeType: 'application/x-font-bdf', encoding: binaryEncoding },
    'bdm': { mimeType: 'application/vnd.syncml.dm+wbxml', encoding: binaryEncoding },
    'bed': { mimeType: 'application/vnd.realvnc.bed', encoding: binaryEncoding },
    'bh2': { mimeType: 'application/vnd.fujitsu.oasysprs', encoding: binaryEncoding },
    'bin': { mimeType: 'application/octet-stream', encoding: binaryEncoding },
    'bmi': { mimeType: 'application/vnd.bmi', encoding: binaryEncoding },
    'bmp': { mimeType: 'image/bmp', encoding: binaryEncoding },
    'box': { mimeType: 'application/vnd.previewsystems.box', encoding: binaryEncoding },
    'btif': { mimeType: 'image/prs.btif', encoding: binaryEncoding },
    'bz': { mimeType: 'application/x-bzip', encoding: binaryEncoding },
    'bz2': { mimeType: 'application/x-bzip2', encoding: binaryEncoding },
    'c': { mimeType: 'text/x-c', encoding: binaryEncoding },
    'c11amc': { mimeType: 'application/vnd.cluetrust.cartomobile-config', encoding: binaryEncoding },
    'c11amz': { mimeType: 'application/vnd.cluetrust.cartomobile-config-pkg', encoding: binaryEncoding },
    'c4g': { mimeType: 'application/vnd.clonk.c4group', encoding: binaryEncoding },
    'cab': { mimeType: 'application/vnd.ms-cab-compressed', encoding: binaryEncoding },
    'car': { mimeType: 'application/vnd.curl.car', encoding: binaryEncoding },
    'cat': { mimeType: 'application/vnd.ms-pki.seccat', encoding: binaryEncoding },
    'ccxml': { mimeType: 'application/ccxml+xml', encoding: binaryEncoding },
    'cdbcmsg': { mimeType: 'application/vnd.contact.cmsg', encoding: binaryEncoding },
    'cdkey': { mimeType: 'application/vnd.mediastation.cdkey', encoding: binaryEncoding },
    'cdmia': { mimeType: 'application/cdmi-capability', encoding: binaryEncoding },
    'cdmic': { mimeType: 'application/cdmi-container', encoding: binaryEncoding },
    'cdmid': { mimeType: 'application/cdmi-domain', encoding: binaryEncoding },
    'cdmio': { mimeType: 'application/cdmi-object', encoding: binaryEncoding },
    'cdmiq': { mimeType: 'application/cdmi-queue', encoding: binaryEncoding },
    'cdx': { mimeType: 'chemical/x-cdx', encoding: binaryEncoding },
    'cdxml': { mimeType: 'application/vnd.chemdraw+xml', encoding: binaryEncoding },
    'cdy': { mimeType: 'application/vnd.cinderella', encoding: binaryEncoding },
    'cer': { mimeType: 'application/pkix-cert', encoding: binaryEncoding },
    'cgm': { mimeType: 'image/cgm', encoding: binaryEncoding },
    'chat': { mimeType: 'application/x-chat', encoding: binaryEncoding },
    'chm': { mimeType: 'application/vnd.ms-htmlhelp', encoding: binaryEncoding },
    'chrt': { mimeType: 'application/vnd.kde.kchart', encoding: binaryEncoding },
    'cif': { mimeType: 'chemical/x-cif', encoding: binaryEncoding },
    'cii': { mimeType: 'application/vnd.anser-web-certificate-issue-initiation', encoding: binaryEncoding },
    'cil': { mimeType: 'application/vnd.ms-artgalry', encoding: binaryEncoding },
    'cla': { mimeType: 'application/vnd.claymore', encoding: binaryEncoding },
    'class': { mimeType: 'application/java-vm', encoding: binaryEncoding },
    'clkk': { mimeType: 'application/vnd.crick.clicker.keyboard', encoding: binaryEncoding },
    'clkp': { mimeType: 'application/vnd.crick.clicker.palette', encoding: binaryEncoding },
    'clkt': { mimeType: 'application/vnd.crick.clicker.template', encoding: binaryEncoding },
    'clkw': { mimeType: 'application/vnd.crick.clicker.wordbank', encoding: binaryEncoding },
    'clkx': { mimeType: 'application/vnd.crick.clicker', encoding: binaryEncoding },
    'clp': { mimeType: 'application/x-msclip', encoding: binaryEncoding },
    'cmc': { mimeType: 'application/vnd.cosmocaller', encoding: binaryEncoding },
    'cmdf': { mimeType: 'chemical/x-cmdf', encoding: binaryEncoding },
    'cml': { mimeType: 'chemical/x-cml', encoding: binaryEncoding },
    'cmp': { mimeType: 'application/vnd.yellowriver-custom-menu', encoding: binaryEncoding },
    'cmx': { mimeType: 'image/x-cmx', encoding: binaryEncoding },
    'cod': { mimeType: 'application/vnd.rim.cod', encoding: binaryEncoding },
    'cpio': { mimeType: 'application/x-cpio', encoding: binaryEncoding },
    'cpt': { mimeType: 'application/mac-compactpro', encoding: binaryEncoding },
    'crd': { mimeType: 'application/x-mscardfile', encoding: binaryEncoding },
    'crl': { mimeType: 'application/pkix-crl', encoding: binaryEncoding },
    'cryptonote': { mimeType: 'application/vnd.rig.cryptonote', encoding: binaryEncoding },
    'csh': { mimeType: 'application/x-csh', encoding: binaryEncoding },
    'csml': { mimeType: 'chemical/x-csml', encoding: binaryEncoding },
    'csp': { mimeType: 'application/vnd.commonspace', encoding: binaryEncoding },
    'css': { mimeType: 'text/css', encoding: utf8Encoding },
    'csv': { mimeType: 'text/csv', encoding: binaryEncoding },
    'cu': { mimeType: 'application/cu-seeme', encoding: binaryEncoding },
    'curl': { mimeType: 'text/vnd.curl', encoding: binaryEncoding },
    'cww': { mimeType: 'application/prs.cww', encoding: binaryEncoding },
    'dae': { mimeType: 'model/vnd.collada+xml', encoding: binaryEncoding },
    'daf': { mimeType: 'application/vnd.mobius.daf', encoding: binaryEncoding },
    'davmount': { mimeType: 'application/davmount+xml', encoding: binaryEncoding },
    'dcurl': { mimeType: 'text/vnd.curl.dcurl', encoding: binaryEncoding },
    'dd2': { mimeType: 'application/vnd.oma.dd2+xml', encoding: binaryEncoding },
    'ddd': { mimeType: 'application/vnd.fujixerox.ddd', encoding: binaryEncoding },
    'deb': { mimeType: 'application/x-debian-package', encoding: binaryEncoding },
    'der': { mimeType: 'application/x-x509-ca-cert', encoding: binaryEncoding },
    'dfac': { mimeType: 'application/vnd.dreamfactory', encoding: binaryEncoding },
    'dir': { mimeType: 'application/x-director', encoding: binaryEncoding },
    'dis': { mimeType: 'application/vnd.mobius.dis', encoding: binaryEncoding },
    'djvu': { mimeType: 'image/vnd.djvu', encoding: binaryEncoding },
    'dna': { mimeType: 'application/vnd.dna', encoding: binaryEncoding },
    'doc': { mimeType: 'application/msword', encoding: binaryEncoding },
    'docm': { mimeType: 'application/vnd.ms-word.document.macroenabled.12', encoding: binaryEncoding },
    'docx': { mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', encoding: binaryEncoding },
    'dotm': { mimeType: 'application/vnd.ms-word.template.macroenabled.12', encoding: binaryEncoding },
    'dotx': { mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', encoding: binaryEncoding },
    'dp': { mimeType: 'application/vnd.osgi.dp', encoding: binaryEncoding },
    'dpg': { mimeType: 'application/vnd.dpgraph', encoding: binaryEncoding },
    'dra': { mimeType: 'audio/vnd.dra', encoding: binaryEncoding },
    'dsc': { mimeType: 'text/prs.lines.tag', encoding: binaryEncoding },
    'dssc': { mimeType: 'application/dssc+der', encoding: binaryEncoding },
    'dtb': { mimeType: 'application/x-dtbook+xml', encoding: binaryEncoding },
    'dtd': { mimeType: 'application/xml-dtd', encoding: binaryEncoding },
    'dts': { mimeType: 'audio/vnd.dts', encoding: binaryEncoding },
    'dtshd': { mimeType: 'audio/vnd.dts.hd', encoding: binaryEncoding },
    'dvi': { mimeType: 'application/x-dvi', encoding: binaryEncoding },
    'dwf': { mimeType: 'model/vnd.dwf', encoding: binaryEncoding },
    'dwg': { mimeType: 'image/vnd.dwg', encoding: binaryEncoding },
    'dxf': { mimeType: 'image/vnd.dxf', encoding: binaryEncoding },
    'dxp': { mimeType: 'application/vnd.spotfire.dxp', encoding: binaryEncoding },
    'ecelp4800': { mimeType: 'audio/vnd.nuera.ecelp4800', encoding: binaryEncoding },
    'ecelp7470': { mimeType: 'audio/vnd.nuera.ecelp7470', encoding: binaryEncoding },
    'ecelp9600': { mimeType: 'audio/vnd.nuera.ecelp9600', encoding: binaryEncoding },
    'edm': { mimeType: 'application/vnd.novadigm.edm', encoding: binaryEncoding },
    'edx': { mimeType: 'application/vnd.novadigm.edx', encoding: binaryEncoding },
    'efif': { mimeType: 'application/vnd.picsel', encoding: binaryEncoding },
    'ei6': { mimeType: 'application/vnd.pg.osasli', encoding: binaryEncoding },
    'eml': { mimeType: 'message/rfc822', encoding: binaryEncoding },
    'emma': { mimeType: 'application/emma+xml', encoding: binaryEncoding },
    'eol': { mimeType: 'audio/vnd.digital-winds', encoding: binaryEncoding },
    'eot': { mimeType: 'application/vnd.ms-fontobject', encoding: binaryEncoding },
    'epub': { mimeType: 'application/epub+zip', encoding: binaryEncoding },
    'es': { mimeType: 'application/ecmascript', encoding: binaryEncoding },
    'es3': { mimeType: 'application/vnd.eszigno3+xml', encoding: binaryEncoding },
    'esf': { mimeType: 'application/vnd.epson.esf', encoding: binaryEncoding },
    'etx': { mimeType: 'text/x-setext', encoding: binaryEncoding },
    'exe': { mimeType: 'application/x-msdownload', encoding: binaryEncoding },
    'exi': { mimeType: 'application/exi', encoding: binaryEncoding },
    'ext': { mimeType: 'application/vnd.novadigm.ext', encoding: binaryEncoding },
    'ez2': { mimeType: 'application/vnd.ezpix-album', encoding: binaryEncoding },
    'ez3': { mimeType: 'application/vnd.ezpix-package', encoding: binaryEncoding },
    'f': { mimeType: 'text/x-fortran', encoding: binaryEncoding },
    'f4v': { mimeType: 'video/x-f4v', encoding: binaryEncoding },
    'fbs': { mimeType: 'image/vnd.fastbidsheet', encoding: binaryEncoding },
    'fcs': { mimeType: 'application/vnd.isac.fcs', encoding: binaryEncoding },
    'fdf': { mimeType: 'application/vnd.fdf', encoding: binaryEncoding },
    'fe_launch': { mimeType: 'application/vnd.denovo.fcselayout-link', encoding: binaryEncoding },
    'fg5': { mimeType: 'application/vnd.fujitsu.oasysgp', encoding: binaryEncoding },
    'fh': { mimeType: 'image/x-freehand', encoding: binaryEncoding },
    'fig': { mimeType: 'application/x-xfig', encoding: binaryEncoding },
    'fli': { mimeType: 'video/x-fli', encoding: binaryEncoding },
    'flo': { mimeType: 'application/vnd.micrografx.flo', encoding: binaryEncoding },
    'flv': { mimeType: 'video/x-flv', encoding: binaryEncoding },
    'flw': { mimeType: 'application/vnd.kde.kivio', encoding: binaryEncoding },
    'flx': { mimeType: 'text/vnd.fmi.flexstor', encoding: binaryEncoding },
    'fly': { mimeType: 'text/vnd.fly', encoding: binaryEncoding },
    'fm': { mimeType: 'application/vnd.framemaker', encoding: binaryEncoding },
    'fnc': { mimeType: 'application/vnd.frogans.fnc', encoding: binaryEncoding },
    'fpx': { mimeType: 'image/vnd.fpx', encoding: binaryEncoding },
    'fsc': { mimeType: 'application/vnd.fsc.weblaunch', encoding: binaryEncoding },
    'fst': { mimeType: 'image/vnd.fst', encoding: binaryEncoding },
    'ftc': { mimeType: 'application/vnd.fluxtime.clip', encoding: binaryEncoding },
    'fti': { mimeType: 'application/vnd.anser-web-funds-transfer-initiation', encoding: binaryEncoding },
    'fvt': { mimeType: 'video/vnd.fvt', encoding: binaryEncoding },
    'fxp': { mimeType: 'application/vnd.adobe.fxp', encoding: binaryEncoding },
    'fzs': { mimeType: 'application/vnd.fuzzysheet', encoding: binaryEncoding },
    'g2w': { mimeType: 'application/vnd.geoplan', encoding: binaryEncoding },
    'g3': { mimeType: 'image/g3fax', encoding: binaryEncoding },
    'g3w': { mimeType: 'application/vnd.geospace', encoding: binaryEncoding },
    'gac': { mimeType: 'application/vnd.groove-account', encoding: binaryEncoding },
    'gdl': { mimeType: 'model/vnd.gdl', encoding: binaryEncoding },
    'geo': { mimeType: 'application/vnd.dynageo', encoding: binaryEncoding },
    'gex': { mimeType: 'application/vnd.geometry-explorer', encoding: binaryEncoding },
    'ggb': { mimeType: 'application/vnd.geogebra.file', encoding: binaryEncoding },
    'ggt': { mimeType: 'application/vnd.geogebra.tool', encoding: binaryEncoding },
    'ghf': { mimeType: 'application/vnd.groove-help', encoding: binaryEncoding },
    'gif': { mimeType: 'image/gif', encoding: binaryEncoding },
    'gim': { mimeType: 'application/vnd.groove-identity-message', encoding: binaryEncoding },
    'gmx': { mimeType: 'application/vnd.gmx', encoding: binaryEncoding },
    'gnumeric': { mimeType: 'application/x-gnumeric', encoding: binaryEncoding },
    'gph': { mimeType: 'application/vnd.flographit', encoding: binaryEncoding },
    'gqf': { mimeType: 'application/vnd.grafeq', encoding: binaryEncoding },
    'gram': { mimeType: 'application/srgs', encoding: binaryEncoding },
    'grv': { mimeType: 'application/vnd.groove-injector', encoding: binaryEncoding },
    'grxml': { mimeType: 'application/srgs+xml', encoding: binaryEncoding },
    'gsf': { mimeType: 'application/x-font-ghostscript', encoding: binaryEncoding },
    'gtar': { mimeType: 'application/x-gtar', encoding: binaryEncoding },
    'gtm': { mimeType: 'application/vnd.groove-tool-message', encoding: binaryEncoding },
    'gtw': { mimeType: 'model/vnd.gtw', encoding: binaryEncoding },
    'gv': { mimeType: 'text/vnd.graphviz', encoding: binaryEncoding },
    'gxt': { mimeType: 'application/vnd.geonext', encoding: binaryEncoding },
    'h261': { mimeType: 'video/h261', encoding: binaryEncoding },
    'h263': { mimeType: 'video/h263', encoding: binaryEncoding },
    'h264': { mimeType: 'video/h264', encoding: binaryEncoding },
    'hal': { mimeType: 'application/vnd.hal+xml', encoding: binaryEncoding },
    'hbci': { mimeType: 'application/vnd.hbci', encoding: binaryEncoding },
    'hdf': { mimeType: 'application/x-hdf', encoding: binaryEncoding },
    'hlp': { mimeType: 'application/winhlp', encoding: binaryEncoding },
    'hpgl': { mimeType: 'application/vnd.hp-hpgl', encoding: binaryEncoding },
    'hpid': { mimeType: 'application/vnd.hp-hpid', encoding: binaryEncoding },
    'hps': { mimeType: 'application/vnd.hp-hps', encoding: binaryEncoding },
    'hqx': { mimeType: 'application/mac-binhex40', encoding: binaryEncoding },
    'htke': { mimeType: 'application/vnd.kenameaapp', encoding: binaryEncoding },
    'html': { mimeType: 'text/html', encoding: utf8Encoding },
    'hvd': { mimeType: 'application/vnd.yamaha.hv-dic', encoding: binaryEncoding },
    'hvp': { mimeType: 'application/vnd.yamaha.hv-voice', encoding: binaryEncoding },
    'hvs': { mimeType: 'application/vnd.yamaha.hv-script', encoding: binaryEncoding },
    'i2g': { mimeType: 'application/vnd.intergeo', encoding: binaryEncoding },
    'icc': { mimeType: 'application/vnd.iccprofile', encoding: binaryEncoding },
    'ice': { mimeType: 'x-conference/x-cooltalk', encoding: binaryEncoding },
    'ico': { mimeType: 'image/x-icon', encoding: binaryEncoding },
    'ics': { mimeType: 'text/calendar', encoding: binaryEncoding },
    'ief': { mimeType: 'image/ief', encoding: binaryEncoding },
    'ifm': { mimeType: 'application/vnd.shana.informed.formdata', encoding: binaryEncoding },
    'igl': { mimeType: 'application/vnd.igloader', encoding: binaryEncoding },
    'igm': { mimeType: 'application/vnd.insors.igm', encoding: binaryEncoding },
    'igs': { mimeType: 'model/iges', encoding: binaryEncoding },
    'igx': { mimeType: 'application/vnd.micrografx.igx', encoding: binaryEncoding },
    'iif': { mimeType: 'application/vnd.shana.informed.interchange', encoding: binaryEncoding },
    'imp': { mimeType: 'application/vnd.accpac.simply.imp', encoding: binaryEncoding },
    'ims': { mimeType: 'application/vnd.ms-ims', encoding: binaryEncoding },
    'ipfix': { mimeType: 'application/ipfix', encoding: binaryEncoding },
    'ipk': { mimeType: 'application/vnd.shana.informed.package', encoding: binaryEncoding },
    'irm': { mimeType: 'application/vnd.ibm.rights-management', encoding: binaryEncoding },
    'irp': { mimeType: 'application/vnd.irepository.package+xml', encoding: binaryEncoding },
    'itp': { mimeType: 'application/vnd.shana.informed.formtemplate', encoding: binaryEncoding },
    'ivp': { mimeType: 'application/vnd.immervision-ivp', encoding: binaryEncoding },
    'ivu': { mimeType: 'application/vnd.immervision-ivu', encoding: binaryEncoding },
    'jad': { mimeType: 'text/vnd.sun.j2me.app-descriptor', encoding: binaryEncoding },
    'jam': { mimeType: 'application/vnd.jam', encoding: binaryEncoding },
    'jar': { mimeType: 'application/java-archive', encoding: binaryEncoding },
    'java': { mimeType: 'text/x-java-source', encoding: binaryEncoding },
    'jisp': { mimeType: 'application/vnd.jisp', encoding: binaryEncoding },
    'jlt': { mimeType: 'application/vnd.hp-jlyt', encoding: binaryEncoding },
    'jnlp': { mimeType: 'application/x-java-jnlp-file', encoding: binaryEncoding },
    'joda': { mimeType: 'application/vnd.joost.joda-archive', encoding: binaryEncoding },
    'jpeg': { mimeType: 'image/jpeg', encoding: binaryEncoding },
    'jpg': { mimeType: 'image/jpeg', encoding: binaryEncoding },
    'jpgv': { mimeType: 'video/jpeg', encoding: binaryEncoding },
    'jpm': { mimeType: 'video/jpm', encoding: binaryEncoding },
    'js': { mimeType: 'application/javascript', encoding: utf8Encoding },
    'json': { mimeType: 'application/json', encoding: utf8Encoding },
    'karbon': { mimeType: 'application/vnd.kde.karbon', encoding: binaryEncoding },
    'kfo': { mimeType: 'application/vnd.kde.kformula', encoding: binaryEncoding },
    'kia': { mimeType: 'application/vnd.kidspiration', encoding: binaryEncoding },
    'kml': { mimeType: 'application/vnd.google-earth.kml+xml', encoding: binaryEncoding },
    'kmz': { mimeType: 'application/vnd.google-earth.kmz', encoding: binaryEncoding },
    'kne': { mimeType: 'application/vnd.kinar', encoding: binaryEncoding },
    'kon': { mimeType: 'application/vnd.kde.kontour', encoding: binaryEncoding },
    'kpr': { mimeType: 'application/vnd.kde.kpresenter', encoding: binaryEncoding },
    'ksp': { mimeType: 'application/vnd.kde.kspread', encoding: binaryEncoding },
    'ktx': { mimeType: 'image/ktx', encoding: binaryEncoding },
    'ktz': { mimeType: 'application/vnd.kahootz', encoding: binaryEncoding },
    'kwd': { mimeType: 'application/vnd.kde.kword', encoding: binaryEncoding },
    'lasxml': { mimeType: 'application/vnd.las.las+xml', encoding: binaryEncoding },
    'latex': { mimeType: 'application/x-latex', encoding: binaryEncoding },
    'lbd': { mimeType: 'application/vnd.llamagraphics.life-balance.desktop', encoding: binaryEncoding },
    'lbe': { mimeType: 'application/vnd.llamagraphics.life-balance.exchange+xml', encoding: binaryEncoding },
    'les': { mimeType: 'application/vnd.hhe.lesson-player', encoding: binaryEncoding },
    'link66': { mimeType: 'application/vnd.route66.link66+xml', encoding: binaryEncoding },
    'lrm': { mimeType: 'application/vnd.ms-lrm', encoding: binaryEncoding },
    'ltf': { mimeType: 'application/vnd.frogans.ltf', encoding: binaryEncoding },
    'lvp': { mimeType: 'audio/vnd.lucent.voice', encoding: binaryEncoding },
    'lwp': { mimeType: 'application/vnd.lotus-wordpro', encoding: binaryEncoding },
    'm21': { mimeType: 'application/mp21', encoding: binaryEncoding },
    'm3u': { mimeType: 'audio/x-mpegurl', encoding: binaryEncoding },
    'm3u8': { mimeType: 'application/vnd.apple.mpegurl', encoding: binaryEncoding },
    'm4v': { mimeType: 'video/x-m4v', encoding: binaryEncoding },
    'ma': { mimeType: 'application/mathematica', encoding: binaryEncoding },
    'mads': { mimeType: 'application/mads+xml', encoding: binaryEncoding },
    'mag': { mimeType: 'application/vnd.ecowin.chart', encoding: binaryEncoding },
    'mathml': { mimeType: 'application/mathml+xml', encoding: binaryEncoding },
    'mbk': { mimeType: 'application/vnd.mobius.mbk', encoding: binaryEncoding },
    'mbox': { mimeType: 'application/mbox', encoding: binaryEncoding },
    'mc1': { mimeType: 'application/vnd.medcalcdata', encoding: binaryEncoding },
    'mcd': { mimeType: 'application/vnd.mcd', encoding: binaryEncoding },
    'mcurl': { mimeType: 'text/vnd.curl.mcurl', encoding: binaryEncoding },
    'mdb': { mimeType: 'application/x-msaccess', encoding: binaryEncoding },
    'mdi': { mimeType: 'image/vnd.ms-modi', encoding: binaryEncoding },
    'meta4': { mimeType: 'application/metalink4+xml', encoding: binaryEncoding },
    'mets': { mimeType: 'application/mets+xml', encoding: binaryEncoding },
    'mfm': { mimeType: 'application/vnd.mfmp', encoding: binaryEncoding },
    'mgp': { mimeType: 'application/vnd.osgeo.mapguide.package', encoding: binaryEncoding },
    'mgz': { mimeType: 'application/vnd.proteus.magazine', encoding: binaryEncoding },
    'mid': { mimeType: 'audio/midi', encoding: binaryEncoding },
    'mif': { mimeType: 'application/vnd.mif', encoding: binaryEncoding },
    'mj2': { mimeType: 'video/mj2', encoding: binaryEncoding },
    'mlp': { mimeType: 'application/vnd.dolby.mlp', encoding: binaryEncoding },
    'mmd': { mimeType: 'application/vnd.chipnuts.karaoke-mmd', encoding: binaryEncoding },
    'mmf': { mimeType: 'application/vnd.smaf', encoding: binaryEncoding },
    'mmr': { mimeType: 'image/vnd.fujixerox.edmics-mmr', encoding: binaryEncoding },
    'mny': { mimeType: 'application/x-msmoney', encoding: binaryEncoding },
    'mods': { mimeType: 'application/mods+xml', encoding: binaryEncoding },
    'movie': { mimeType: 'video/x-sgi-movie', encoding: binaryEncoding },
    'mp4': { mimeType: 'video/mp4', encoding: binaryEncoding },
    'mp4a': { mimeType: 'audio/mp4', encoding: binaryEncoding },
    'mpc': { mimeType: 'application/vnd.mophun.certificate', encoding: binaryEncoding },
    'mpeg': { mimeType: 'video/mpeg', encoding: binaryEncoding },
    'mpga': { mimeType: 'audio/mpeg', encoding: binaryEncoding },
    'mpkg': { mimeType: 'application/vnd.apple.installer+xml', encoding: binaryEncoding },
    'mpm': { mimeType: 'application/vnd.blueice.multipass', encoding: binaryEncoding },
    'mpn': { mimeType: 'application/vnd.mophun.application', encoding: binaryEncoding },
    'mpp': { mimeType: 'application/vnd.ms-project', encoding: binaryEncoding },
    'mpy': { mimeType: 'application/vnd.ibm.minipay', encoding: binaryEncoding },
    'mqy': { mimeType: 'application/vnd.mobius.mqy', encoding: binaryEncoding },
    'mrc': { mimeType: 'application/marc', encoding: binaryEncoding },
    'mrcx': { mimeType: 'application/marcxml+xml', encoding: binaryEncoding },
    'mscml': { mimeType: 'application/mediaservercontrol+xml', encoding: binaryEncoding },
    'mseq': { mimeType: 'application/vnd.mseq', encoding: binaryEncoding },
    'msf': { mimeType: 'application/vnd.epson.msf', encoding: binaryEncoding },
    'msh': { mimeType: 'model/mesh', encoding: binaryEncoding },
    'msl': { mimeType: 'application/vnd.mobius.msl', encoding: binaryEncoding },
    'msty': { mimeType: 'application/vnd.muvee.style', encoding: binaryEncoding },
    'mts': { mimeType: 'model/vnd.mts', encoding: binaryEncoding },
    'mus': { mimeType: 'application/vnd.musician', encoding: binaryEncoding },
    'musicxml': { mimeType: 'application/vnd.recordare.musicxml+xml', encoding: binaryEncoding },
    'mvb': { mimeType: 'application/x-msmediaview', encoding: binaryEncoding },
    'mwf': { mimeType: 'application/vnd.mfer', encoding: binaryEncoding },
    'mxf': { mimeType: 'application/mxf', encoding: binaryEncoding },
    'mxl': { mimeType: 'application/vnd.recordare.musicxml', encoding: binaryEncoding },
    'mxml': { mimeType: 'application/xv+xml', encoding: binaryEncoding },
    'mxs': { mimeType: 'application/vnd.triscape.mxs', encoding: binaryEncoding },
    'mxu': { mimeType: 'video/vnd.mpegurl', encoding: binaryEncoding },
    'n3': { mimeType: 'text/n3', encoding: binaryEncoding },
    'nbp': { mimeType: 'application/vnd.wolfram.player', encoding: binaryEncoding },
    'nc': { mimeType: 'application/x-netcdf', encoding: binaryEncoding },
    'ncx': { mimeType: 'application/x-dtbncx+xml', encoding: binaryEncoding },
    'n-gage': { mimeType: 'application/vnd.nokia.n-gage.symbian.install', encoding: binaryEncoding },
    'ngdat': { mimeType: 'application/vnd.nokia.n-gage.data', encoding: binaryEncoding },
    'nlu': { mimeType: 'application/vnd.neurolanguage.nlu', encoding: binaryEncoding },
    'nml': { mimeType: 'application/vnd.enliven', encoding: binaryEncoding },
    'nnd': { mimeType: 'application/vnd.noblenet-directory', encoding: binaryEncoding },
    'nns': { mimeType: 'application/vnd.noblenet-sealer', encoding: binaryEncoding },
    'nnw': { mimeType: 'application/vnd.noblenet-web', encoding: binaryEncoding },
    'npx': { mimeType: 'image/vnd.net-fpx', encoding: binaryEncoding },
    'nsf': { mimeType: 'application/vnd.lotus-notes', encoding: binaryEncoding },
    'oa2': { mimeType: 'application/vnd.fujitsu.oasys2', encoding: binaryEncoding },
    'oa3': { mimeType: 'application/vnd.fujitsu.oasys3', encoding: binaryEncoding },
    'oas': { mimeType: 'application/vnd.fujitsu.oasys', encoding: binaryEncoding },
    'obd': { mimeType: 'application/x-msbinder', encoding: binaryEncoding },
    'oda': { mimeType: 'application/oda', encoding: binaryEncoding },
    'odb': { mimeType: 'application/vnd.oasis.opendocument.database', encoding: binaryEncoding },
    'odc': { mimeType: 'application/vnd.oasis.opendocument.chart', encoding: binaryEncoding },
    'odf': { mimeType: 'application/vnd.oasis.opendocument.formula', encoding: binaryEncoding },
    'odft': { mimeType: 'application/vnd.oasis.opendocument.formula-template', encoding: binaryEncoding },
    'odg': { mimeType: 'application/vnd.oasis.opendocument.graphics', encoding: binaryEncoding },
    'odi': { mimeType: 'application/vnd.oasis.opendocument.image', encoding: binaryEncoding },
    'odm': { mimeType: 'application/vnd.oasis.opendocument.text-master', encoding: binaryEncoding },
    'odp': { mimeType: 'application/vnd.oasis.opendocument.presentation', encoding: binaryEncoding },
    'ods': { mimeType: 'application/vnd.oasis.opendocument.spreadsheet', encoding: binaryEncoding },
    'odt': { mimeType: 'application/vnd.oasis.opendocument.text', encoding: binaryEncoding },
    'oga': { mimeType: 'audio/ogg', encoding: binaryEncoding },
    'ogv': { mimeType: 'video/ogg', encoding: binaryEncoding },
    'ogx': { mimeType: 'application/ogg', encoding: binaryEncoding },
    'onetoc': { mimeType: 'application/onenote', encoding: binaryEncoding },
    'opf': { mimeType: 'application/oebps-package+xml', encoding: binaryEncoding },
    'org': { mimeType: 'application/vnd.lotus-organizer', encoding: binaryEncoding },
    'osf': { mimeType: 'application/vnd.yamaha.openscoreformat', encoding: binaryEncoding },
    'osfpvg': { mimeType: 'application/vnd.yamaha.openscoreformat.osfpvg+xml', encoding: binaryEncoding },
    'otc': { mimeType: 'application/vnd.oasis.opendocument.chart-template', encoding: binaryEncoding },
    'otf': { mimeType: 'application/x-font-otf', encoding: binaryEncoding },
    'otg': { mimeType: 'application/vnd.oasis.opendocument.graphics-template', encoding: binaryEncoding },
    'oth': { mimeType: 'application/vnd.oasis.opendocument.text-web', encoding: binaryEncoding },
    'oti': { mimeType: 'application/vnd.oasis.opendocument.image-template', encoding: binaryEncoding },
    'otp': { mimeType: 'application/vnd.oasis.opendocument.presentation-template', encoding: binaryEncoding },
    'ots': { mimeType: 'application/vnd.oasis.opendocument.spreadsheet-template', encoding: binaryEncoding },
    'ott': { mimeType: 'application/vnd.oasis.opendocument.text-template', encoding: binaryEncoding },
    'out': { mimeType: 'application/octet-stream', encoding: binaryEncoding },
    'oxt': { mimeType: 'application/vnd.openofficeorg.extension', encoding: binaryEncoding },
    'p': { mimeType: 'text/x-pascal', encoding: binaryEncoding },
    'p10': { mimeType: 'application/pkcs10', encoding: binaryEncoding },
    'p12': { mimeType: 'application/x-pkcs12', encoding: binaryEncoding },
    'p7b': { mimeType: 'application/x-pkcs7-certificates', encoding: binaryEncoding },
    'p7m': { mimeType: 'application/pkcs7-mime', encoding: binaryEncoding },
    'p7r': { mimeType: 'application/x-pkcs7-certreqresp', encoding: binaryEncoding },
    'p7s': { mimeType: 'application/pkcs7-signature', encoding: binaryEncoding },
    'p8': { mimeType: 'application/pkcs8', encoding: binaryEncoding },
    'par': { mimeType: 'text/plain-bas', encoding: binaryEncoding },
    'paw': { mimeType: 'application/vnd.pawaafile', encoding: binaryEncoding },
    'pbd': { mimeType: 'application/vnd.powerbuilder6', encoding: binaryEncoding },
    'pbm': { mimeType: 'image/x-portable-bitmap', encoding: binaryEncoding },
    'pcf': { mimeType: 'application/x-font-pcf', encoding: binaryEncoding },
    'pcl': { mimeType: 'application/vnd.hp-pcl', encoding: binaryEncoding },
    'pclxl': { mimeType: 'application/vnd.hp-pclxl', encoding: binaryEncoding },
    'pcurl': { mimeType: 'application/vnd.curl.pcurl', encoding: binaryEncoding },
    'pcx': { mimeType: 'image/x-pcx', encoding: binaryEncoding },
    'pdb': { mimeType: 'application/vnd.palm', encoding: binaryEncoding },
    'pdf': { mimeType: 'application/pdf', encoding: binaryEncoding },
    'pfa': { mimeType: 'application/x-font-type1', encoding: binaryEncoding },
    'pfr': { mimeType: 'application/font-tdpfr', encoding: binaryEncoding },
    'pgm': { mimeType: 'image/x-portable-graymap', encoding: binaryEncoding },
    'pgn': { mimeType: 'application/x-chess-pgn', encoding: binaryEncoding },
    'pic': { mimeType: 'image/x-pict', encoding: binaryEncoding },
    'pjpeg': { mimeType: 'image/pjpeg', encoding: binaryEncoding },
    'pki': { mimeType: 'application/pkixcmp', encoding: binaryEncoding },
    'pkipath': { mimeType: 'application/pkix-pkipath', encoding: binaryEncoding },
    'plb': { mimeType: 'application/vnd.3gpp.pic-bw-large', encoding: binaryEncoding },
    'plc': { mimeType: 'application/vnd.mobius.plc', encoding: binaryEncoding },
    'plf': { mimeType: 'application/vnd.pocketlearn', encoding: binaryEncoding },
    'pls': { mimeType: 'application/pls+xml', encoding: binaryEncoding },
    'pml': { mimeType: 'application/vnd.ctc-posml', encoding: binaryEncoding },
    'png': { mimeType: 'image/png', encoding: binaryEncoding },
    'pnm': { mimeType: 'image/x-portable-anymap', encoding: binaryEncoding },
    'portpkg': { mimeType: 'application/vnd.macports.portpkg', encoding: binaryEncoding },
    'potm': { mimeType: 'application/vnd.ms-powerpoint.template.macroenabled.12', encoding: binaryEncoding },
    'potx': { mimeType: 'application/vnd.openxmlformats-officedocument.presentationml.template', encoding: binaryEncoding },
    'ppam': { mimeType: 'application/vnd.ms-powerpoint.addin.macroenabled.12', encoding: binaryEncoding },
    'ppd': { mimeType: 'application/vnd.cups-ppd', encoding: binaryEncoding },
    'ppm': { mimeType: 'image/x-portable-pixmap', encoding: binaryEncoding },
    'ppsm': { mimeType: 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', encoding: binaryEncoding },
    'ppsx': { mimeType: 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', encoding: binaryEncoding },
    'ppt': { mimeType: 'application/vnd.ms-powerpoint', encoding: binaryEncoding },
    'pptm': { mimeType: 'application/vnd.ms-powerpoint.presentation.macroenabled.12', encoding: binaryEncoding },
    'pptx': { mimeType: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', encoding: binaryEncoding },
    'prc': { mimeType: 'application/x-mobipocket-ebook', encoding: binaryEncoding },
    'pre': { mimeType: 'application/vnd.lotus-freelance', encoding: binaryEncoding },
    'prf': { mimeType: 'application/pics-rules', encoding: binaryEncoding },
    'psb': { mimeType: 'application/vnd.3gpp.pic-bw-small', encoding: binaryEncoding },
    'psd': { mimeType: 'image/vnd.adobe.photoshop', encoding: binaryEncoding },
    'psf': { mimeType: 'application/x-font-linux-psf', encoding: binaryEncoding },
    'pskcxml': { mimeType: 'application/pskc+xml', encoding: binaryEncoding },
    'ptid': { mimeType: 'application/vnd.pvi.ptid1', encoding: binaryEncoding },
    'pub': { mimeType: 'application/x-mspublisher', encoding: binaryEncoding },
    'pvb': { mimeType: 'application/vnd.3gpp.pic-bw-var', encoding: binaryEncoding },
    'pwn': { mimeType: 'application/vnd.3m.post-it-notes', encoding: binaryEncoding },
    'pya': { mimeType: 'audio/vnd.ms-playready.media.pya', encoding: binaryEncoding },
    'pyv': { mimeType: 'video/vnd.ms-playready.media.pyv', encoding: binaryEncoding },
    'qam': { mimeType: 'application/vnd.epson.quickanime', encoding: binaryEncoding },
    'qbo': { mimeType: 'application/vnd.intu.qbo', encoding: binaryEncoding },
    'qfx': { mimeType: 'application/vnd.intu.qfx', encoding: binaryEncoding },
    'qps': { mimeType: 'application/vnd.publishare-delta-tree', encoding: binaryEncoding },
    'qt': { mimeType: 'video/quicktime', encoding: binaryEncoding },
    'qxd': { mimeType: 'application/vnd.quark.quarkxpress', encoding: binaryEncoding },
    'ram': { mimeType: 'audio/x-pn-realaudio', encoding: binaryEncoding },
    'rar': { mimeType: 'application/x-rar-compressed', encoding: binaryEncoding },
    'ras': { mimeType: 'image/x-cmu-raster', encoding: binaryEncoding },
    'rcprofile': { mimeType: 'application/vnd.ipunplugged.rcprofile', encoding: binaryEncoding },
    'rdf': { mimeType: 'application/rdf+xml', encoding: binaryEncoding },
    'rdz': { mimeType: 'application/vnd.data-vision.rdz', encoding: binaryEncoding },
    'rep': { mimeType: 'application/vnd.businessobjects', encoding: binaryEncoding },
    'res': { mimeType: 'application/x-dtbresource+xml', encoding: binaryEncoding },
    'rgb': { mimeType: 'image/x-rgb', encoding: binaryEncoding },
    'rif': { mimeType: 'application/reginfo+xml', encoding: binaryEncoding },
    'rip': { mimeType: 'audio/vnd.rip', encoding: binaryEncoding },
    'rl': { mimeType: 'application/resource-lists+xml', encoding: binaryEncoding },
    'rlc': { mimeType: 'image/vnd.fujixerox.edmics-rlc', encoding: binaryEncoding },
    'rld': { mimeType: 'application/resource-lists-diff+xml', encoding: binaryEncoding },
    'rm': { mimeType: 'application/vnd.rn-realmedia', encoding: binaryEncoding },
    'rmp': { mimeType: 'audio/x-pn-realaudio-plugin', encoding: binaryEncoding },
    'rms': { mimeType: 'application/vnd.jcp.javame.midlet-rms', encoding: binaryEncoding },
    'rnc': { mimeType: 'application/relax-ng-compact-syntax', encoding: binaryEncoding },
    'rp9': { mimeType: 'application/vnd.cloanto.rp9', encoding: binaryEncoding },
    'rpss': { mimeType: 'application/vnd.nokia.radio-presets', encoding: binaryEncoding },
    'rpst': { mimeType: 'application/vnd.nokia.radio-preset', encoding: binaryEncoding },
    'rq': { mimeType: 'application/sparql-query', encoding: binaryEncoding },
    'rs': { mimeType: 'application/rls-services+xml', encoding: binaryEncoding },
    'rsd': { mimeType: 'application/rsd+xml', encoding: binaryEncoding },
    'rss': { mimeType: 'application/rss+xml', encoding: binaryEncoding },
    'rtf': { mimeType: 'application/rtf', encoding: binaryEncoding },
    'rtx': { mimeType: 'text/richtext', encoding: binaryEncoding },
    's': { mimeType: 'text/x-asm', encoding: binaryEncoding },
    'saf': { mimeType: 'application/vnd.yamaha.smaf-audio', encoding: binaryEncoding },
    'sbml': { mimeType: 'application/sbml+xml', encoding: binaryEncoding },
    'sc': { mimeType: 'application/vnd.ibm.secure-container', encoding: binaryEncoding },
    'scd': { mimeType: 'application/x-msschedule', encoding: binaryEncoding },
    'scm': { mimeType: 'application/vnd.lotus-screencam', encoding: binaryEncoding },
    'scq': { mimeType: 'application/scvp-cv-request', encoding: binaryEncoding },
    'scs': { mimeType: 'application/scvp-cv-response', encoding: binaryEncoding },
    'scurl': { mimeType: 'text/vnd.curl.scurl', encoding: binaryEncoding },
    'sda': { mimeType: 'application/vnd.stardivision.draw', encoding: binaryEncoding },
    'sdc': { mimeType: 'application/vnd.stardivision.calc', encoding: binaryEncoding },
    'sdd': { mimeType: 'application/vnd.stardivision.impress', encoding: binaryEncoding },
    'sdkm': { mimeType: 'application/vnd.solent.sdkm+xml', encoding: binaryEncoding },
    'sdp': { mimeType: 'application/sdp', encoding: binaryEncoding },
    'sdw': { mimeType: 'application/vnd.stardivision.writer', encoding: binaryEncoding },
    'see': { mimeType: 'application/vnd.seemail', encoding: binaryEncoding },
    'seed': { mimeType: 'application/vnd.fdsn.seed', encoding: binaryEncoding },
    'sema': { mimeType: 'application/vnd.sema', encoding: binaryEncoding },
    'semd': { mimeType: 'application/vnd.semd', encoding: binaryEncoding },
    'semf': { mimeType: 'application/vnd.semf', encoding: binaryEncoding },
    'ser': { mimeType: 'application/java-serialized-object', encoding: binaryEncoding },
    'setpay': { mimeType: 'application/set-payment-initiation', encoding: binaryEncoding },
    'setreg': { mimeType: 'application/set-registration-initiation', encoding: binaryEncoding },
    'sfd-hdstx': { mimeType: 'application/vnd.hydrostatix.sof-data', encoding: binaryEncoding },
    'sfs': { mimeType: 'application/vnd.spotfire.sfs', encoding: binaryEncoding },
    'sgl': { mimeType: 'application/vnd.stardivision.writer-global', encoding: binaryEncoding },
    'sgml': { mimeType: 'text/sgml', encoding: binaryEncoding },
    'sh': { mimeType: 'application/x-sh', encoding: binaryEncoding },
    'shar': { mimeType: 'application/x-shar', encoding: binaryEncoding },
    'shf': { mimeType: 'application/shf+xml', encoding: binaryEncoding },
    'sis': { mimeType: 'application/vnd.symbian.install', encoding: binaryEncoding },
    'sit': { mimeType: 'application/x-stuffit', encoding: binaryEncoding },
    'sitx': { mimeType: 'application/x-stuffitx', encoding: binaryEncoding },
    'skp': { mimeType: 'application/vnd.koan', encoding: binaryEncoding },
    'sldm': { mimeType: 'application/vnd.ms-powerpoint.slide.macroenabled.12', encoding: binaryEncoding },
    'sldx': { mimeType: 'application/vnd.openxmlformats-officedocument.presentationml.slide', encoding: binaryEncoding },
    'slt': { mimeType: 'application/vnd.epson.salt', encoding: binaryEncoding },
    'sm': { mimeType: 'application/vnd.stepmania.stepchart', encoding: binaryEncoding },
    'smf': { mimeType: 'application/vnd.stardivision.math', encoding: binaryEncoding },
    'smi': { mimeType: 'application/smil+xml', encoding: binaryEncoding },
    'snf': { mimeType: 'application/x-font-snf', encoding: binaryEncoding },
    'spf': { mimeType: 'application/vnd.yamaha.smaf-phrase', encoding: binaryEncoding },
    'spl': { mimeType: 'application/x-futuresplash', encoding: binaryEncoding },
    'spot': { mimeType: 'text/vnd.in3d.spot', encoding: binaryEncoding },
    'spp': { mimeType: 'application/scvp-vp-response', encoding: binaryEncoding },
    'spq': { mimeType: 'application/scvp-vp-request', encoding: binaryEncoding },
    'src': { mimeType: 'application/x-wais-source', encoding: binaryEncoding },
    'sru': { mimeType: 'application/sru+xml', encoding: binaryEncoding },
    'srx': { mimeType: 'application/sparql-results+xml', encoding: binaryEncoding },
    'sse': { mimeType: 'application/vnd.kodak-descriptor', encoding: binaryEncoding },
    'ssf': { mimeType: 'application/vnd.epson.ssf', encoding: binaryEncoding },
    'ssml': { mimeType: 'application/ssml+xml', encoding: binaryEncoding },
    'st': { mimeType: 'application/vnd.sailingtracker.track', encoding: binaryEncoding },
    'stc': { mimeType: 'application/vnd.sun.xml.calc.template', encoding: binaryEncoding },
    'std': { mimeType: 'application/vnd.sun.xml.draw.template', encoding: binaryEncoding },
    'stf': { mimeType: 'application/vnd.wt.stf', encoding: binaryEncoding },
    'sti': { mimeType: 'application/vnd.sun.xml.impress.template', encoding: binaryEncoding },
    'stk': { mimeType: 'application/hyperstudio', encoding: binaryEncoding },
    'stl': { mimeType: 'application/vnd.ms-pki.stl', encoding: binaryEncoding },
    'str': { mimeType: 'application/vnd.pg.format', encoding: binaryEncoding },
    'stw': { mimeType: 'application/vnd.sun.xml.writer.template', encoding: binaryEncoding },
    'sub': { mimeType: 'image/vnd.dvb.subtitle', encoding: binaryEncoding },
    'sus': { mimeType: 'application/vnd.sus-calendar', encoding: binaryEncoding },
    'sv4cpio': { mimeType: 'application/x-sv4cpio', encoding: binaryEncoding },
    'sv4crc': { mimeType: 'application/x-sv4crc', encoding: binaryEncoding },
    'svc': { mimeType: 'application/vnd.dvb.service', encoding: binaryEncoding },
    'svd': { mimeType: 'application/vnd.svd', encoding: binaryEncoding },
    'svg': { mimeType: 'image/svg+xml', encoding: binaryEncoding },
    'swf': { mimeType: 'application/x-shockwave-flash', encoding: binaryEncoding },
    'swi': { mimeType: 'application/vnd.aristanetworks.swi', encoding: binaryEncoding },
    'sxc': { mimeType: 'application/vnd.sun.xml.calc', encoding: binaryEncoding },
    'sxd': { mimeType: 'application/vnd.sun.xml.draw', encoding: binaryEncoding },
    'sxg': { mimeType: 'application/vnd.sun.xml.writer.global', encoding: binaryEncoding },
    'sxi': { mimeType: 'application/vnd.sun.xml.impress', encoding: binaryEncoding },
    'sxm': { mimeType: 'application/vnd.sun.xml.math', encoding: binaryEncoding },
    'sxw': { mimeType: 'application/vnd.sun.xml.writer', encoding: binaryEncoding },
    't': { mimeType: 'text/troff', encoding: binaryEncoding },
    'tao': { mimeType: 'application/vnd.tao.intent-module-archive', encoding: binaryEncoding },
    'tar': { mimeType: 'application/x-tar', encoding: binaryEncoding },
    'tcap': { mimeType: 'application/vnd.3gpp2.tcap', encoding: binaryEncoding },
    'tcl': { mimeType: 'application/x-tcl', encoding: binaryEncoding },
    'teacher': { mimeType: 'application/vnd.smart.teacher', encoding: binaryEncoding },
    'tei': { mimeType: 'application/tei+xml', encoding: binaryEncoding },
    'tex': { mimeType: 'application/x-tex', encoding: binaryEncoding },
    'texinfo': { mimeType: 'application/x-texinfo', encoding: binaryEncoding },
    'tfi': { mimeType: 'application/thraud+xml', encoding: binaryEncoding },
    'tfm': { mimeType: 'application/x-tex-tfm', encoding: binaryEncoding },
    'thmx': { mimeType: 'application/vnd.ms-officetheme', encoding: binaryEncoding },
    'tiff': { mimeType: 'image/tiff', encoding: binaryEncoding },
    'tmo': { mimeType: 'application/vnd.tmobile-livetv', encoding: binaryEncoding },
    'torrent': { mimeType: 'application/x-bittorrent', encoding: binaryEncoding },
    'tpl': { mimeType: 'application/vnd.groove-tool-template', encoding: binaryEncoding },
    'tpt': { mimeType: 'application/vnd.trid.tpt', encoding: binaryEncoding },
    'tra': { mimeType: 'application/vnd.trueapp', encoding: binaryEncoding },
    'trm': { mimeType: 'application/x-msterminal', encoding: binaryEncoding },
    'tsd': { mimeType: 'application/timestamped-data', encoding: binaryEncoding },
    'tsv': { mimeType: 'text/tab-separated-values', encoding: binaryEncoding },
    'ttf': { mimeType: 'application/x-font-ttf', encoding: binaryEncoding },
    'ttl': { mimeType: 'text/turtle', encoding: binaryEncoding },
    'twd': { mimeType: 'application/vnd.simtech-mindmapper', encoding: binaryEncoding },
    'txd': { mimeType: 'application/vnd.genomatix.tuxedo', encoding: binaryEncoding },
    'txf': { mimeType: 'application/vnd.mobius.txf', encoding: binaryEncoding },
    'txt': { mimeType: 'text/plain', encoding: utf8Encoding },
    'ufd': { mimeType: 'application/vnd.ufdl', encoding: binaryEncoding },
    'umj': { mimeType: 'application/vnd.umajin', encoding: binaryEncoding },
    'unityweb': { mimeType: 'application/vnd.unity', encoding: binaryEncoding },
    'uoml': { mimeType: 'application/vnd.uoml+xml', encoding: binaryEncoding },
    'uri': { mimeType: 'text/uri-list', encoding: binaryEncoding },
    'ustar': { mimeType: 'application/x-ustar', encoding: binaryEncoding },
    'utz': { mimeType: 'application/vnd.uiq.theme', encoding: binaryEncoding },
    'uu': { mimeType: 'text/x-uuencode', encoding: binaryEncoding },
    'uva': { mimeType: 'audio/vnd.dece.audio', encoding: binaryEncoding },
    'uvh': { mimeType: 'video/vnd.dece.hd', encoding: binaryEncoding },
    'uvi': { mimeType: 'image/vnd.dece.graphic', encoding: binaryEncoding },
    'uvm': { mimeType: 'video/vnd.dece.mobile', encoding: binaryEncoding },
    'uvp': { mimeType: 'video/vnd.dece.pd', encoding: binaryEncoding },
    'uvs': { mimeType: 'video/vnd.dece.sd', encoding: binaryEncoding },
    'uvu': { mimeType: 'video/vnd.uvvu.mp4', encoding: binaryEncoding },
    'uvv': { mimeType: 'video/vnd.dece.video', encoding: binaryEncoding },
    'vcd': { mimeType: 'application/x-cdlink', encoding: binaryEncoding },
    'vcf': { mimeType: 'text/x-vcard', encoding: binaryEncoding },
    'vcg': { mimeType: 'application/vnd.groove-vcard', encoding: binaryEncoding },
    'vcs': { mimeType: 'text/x-vcalendar', encoding: binaryEncoding },
    'vcx': { mimeType: 'application/vnd.vcx', encoding: binaryEncoding },
    'vis': { mimeType: 'application/vnd.visionary', encoding: binaryEncoding },
    'viv': { mimeType: 'video/vnd.vivo', encoding: binaryEncoding },
    'vsd': { mimeType: 'application/vnd.visio', encoding: binaryEncoding },
    'vsdx': { mimeType: 'application/vnd.visio2013', encoding: binaryEncoding },
    'vsf': { mimeType: 'application/vnd.vsf', encoding: binaryEncoding },
    'vtu': { mimeType: 'model/vnd.vtu', encoding: binaryEncoding },
    'vxml': { mimeType: 'application/voicexml+xml', encoding: binaryEncoding },
    'wad': { mimeType: 'application/x-doom', encoding: binaryEncoding },
    'wav': { mimeType: 'audio/x-wav', encoding: binaryEncoding },
    'wax': { mimeType: 'audio/x-ms-wax', encoding: binaryEncoding },
    'wbmp': { mimeType: 'image/vnd.wap.wbmp', encoding: binaryEncoding },
    'wbs': { mimeType: 'application/vnd.criticaltools.wbs+xml', encoding: binaryEncoding },
    'wbxml': { mimeType: 'application/vnd.wap.wbxml', encoding: binaryEncoding },
    'weba': { mimeType: 'audio/webm', encoding: binaryEncoding },
    'webm': { mimeType: 'video/webm', encoding: binaryEncoding },
    'webp': { mimeType: 'image/webp', encoding: binaryEncoding },
    'wg': { mimeType: 'application/vnd.pmi.widget', encoding: binaryEncoding },
    'wgt': { mimeType: 'application/widget', encoding: binaryEncoding },
    'wm': { mimeType: 'video/x-ms-wm', encoding: binaryEncoding },
    'wma': { mimeType: 'audio/x-ms-wma', encoding: binaryEncoding },
    'wmd': { mimeType: 'application/x-ms-wmd', encoding: binaryEncoding },
    'wmf': { mimeType: 'application/x-msmetafile', encoding: binaryEncoding },
    'wml': { mimeType: 'text/vnd.wap.wml', encoding: binaryEncoding },
    'wmlc': { mimeType: 'application/vnd.wap.wmlc', encoding: binaryEncoding },
    'wmls': { mimeType: 'text/vnd.wap.wmlscript', encoding: binaryEncoding },
    'wmlsc': { mimeType: 'application/vnd.wap.wmlscriptc', encoding: binaryEncoding },
    'wmv': { mimeType: 'video/x-ms-wmv', encoding: binaryEncoding },
    'wmx': { mimeType: 'video/x-ms-wmx', encoding: binaryEncoding },
    'wmz': { mimeType: 'application/x-ms-wmz', encoding: binaryEncoding },
    'woff': { mimeType: 'application/x-font-woff', encoding: binaryEncoding },
    'wpd': { mimeType: 'application/vnd.wordperfect', encoding: binaryEncoding },
    'wpl': { mimeType: 'application/vnd.ms-wpl', encoding: binaryEncoding },
    'wps': { mimeType: 'application/vnd.ms-works', encoding: binaryEncoding },
    'wqd': { mimeType: 'application/vnd.wqd', encoding: binaryEncoding },
    'wri': { mimeType: 'application/x-mswrite', encoding: binaryEncoding },
    'wrl': { mimeType: 'model/vrml', encoding: binaryEncoding },
    'wsdl': { mimeType: 'application/wsdl+xml', encoding: binaryEncoding },
    'wspolicy': { mimeType: 'application/wspolicy+xml', encoding: binaryEncoding },
    'wtb': { mimeType: 'application/vnd.webturbo', encoding: binaryEncoding },
    'wvx': { mimeType: 'video/x-ms-wvx', encoding: binaryEncoding },
    'xap': { mimeType: 'application/x-silverlight-app', encoding: binaryEncoding },
    'xar': { mimeType: 'application/vnd.xara', encoding: binaryEncoding },
    'xbap': { mimeType: 'application/x-ms-xbap', encoding: binaryEncoding },
    'xbd': { mimeType: 'application/vnd.fujixerox.docuworks.binder', encoding: binaryEncoding },
    'xbm': { mimeType: 'image/x-xbitmap', encoding: binaryEncoding },
    'xdf': { mimeType: 'application/xcap-diff+xml', encoding: binaryEncoding },
    'xdm': { mimeType: 'application/vnd.syncml.dm+xml', encoding: binaryEncoding },
    'xdp': { mimeType: 'application/vnd.adobe.xdp+xml', encoding: binaryEncoding },
    'xdssc': { mimeType: 'application/dssc+xml', encoding: binaryEncoding },
    'xdw': { mimeType: 'application/vnd.fujixerox.docuworks', encoding: binaryEncoding },
    'xenc': { mimeType: 'application/xenc+xml', encoding: binaryEncoding },
    'xer': { mimeType: 'application/patch-ops-error+xml', encoding: binaryEncoding },
    'xfdf': { mimeType: 'application/vnd.adobe.xfdf', encoding: binaryEncoding },
    'xfdl': { mimeType: 'application/vnd.xfdl', encoding: binaryEncoding },
    'xhtml': { mimeType: 'application/xhtml+xml', encoding: utf8Encoding },
    'xif': { mimeType: 'image/vnd.xiff', encoding: binaryEncoding },
    'xlam': { mimeType: 'application/vnd.ms-excel.addin.macroenabled.12', encoding: binaryEncoding },
    'xls': { mimeType: 'application/vnd.ms-excel', encoding: binaryEncoding },
    'xlsb': { mimeType: 'application/vnd.ms-excel.sheet.binary.macroenabled.12', encoding: binaryEncoding },
    'xlsm': { mimeType: 'application/vnd.ms-excel.sheet.macroenabled.12', encoding: binaryEncoding },
    'xlsx': { mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', encoding: binaryEncoding },
    'xltm': { mimeType: 'application/vnd.ms-excel.template.macroenabled.12', encoding: binaryEncoding },
    'xltx': { mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', encoding: binaryEncoding },
    'xml': { mimeType: 'application/xml', encoding: utf8Encoding },
    'xo': { mimeType: 'application/vnd.olpc-sugar', encoding: binaryEncoding },
    'xop': { mimeType: 'application/xop+xml', encoding: binaryEncoding },
    'xpi': { mimeType: 'application/x-xpinstall', encoding: binaryEncoding },
    'xpm': { mimeType: 'image/x-xpixmap', encoding: binaryEncoding },
    'xpr': { mimeType: 'application/vnd.is-xpr', encoding: binaryEncoding },
    'xps': { mimeType: 'application/vnd.ms-xpsdocument', encoding: binaryEncoding },
    'xpw': { mimeType: 'application/vnd.intercon.formnet', encoding: binaryEncoding },
    'xslt': { mimeType: 'application/xslt+xml', encoding: binaryEncoding },
    'xsm': { mimeType: 'application/vnd.syncml+xml', encoding: binaryEncoding },
    'xspf': { mimeType: 'application/xspf+xml', encoding: binaryEncoding },
    'xul': { mimeType: 'application/vnd.mozilla.xul+xml', encoding: binaryEncoding },
    'xwd': { mimeType: 'image/x-xwindowdump', encoding: binaryEncoding },
    'xyz': { mimeType: 'chemical/x-xyz', encoding: binaryEncoding },
    'yaml': { mimeType: 'text/yaml', encoding: utf8Encoding },
    'yang': { mimeType: 'application/yang', encoding: binaryEncoding },
    'yin': { mimeType: 'application/yin+xml', encoding: binaryEncoding },
    'zaz': { mimeType: 'application/vnd.zzazz.deck+xml', encoding: binaryEncoding },
    'zip': { mimeType: 'application/zip', encoding: binaryEncoding },
    'zir': { mimeType: 'application/vnd.zul', encoding: binaryEncoding },
    'zmm': { mimeType: 'application/vnd.handheld-entertainment+xml', encoding: binaryEncoding }
};

/**
 * export based on how client read, or extend new export module type
 * 
 * @param {object} content actual content 
 * @returns {Content} Content wrapper for given payload
 */
module.exports = {
    binary: (content) => { return ContentFromKnownType(mimeTypes.bin, content); },
    text: (content) => { return ContentFromKnownType(mimeTypes.txt, content); },
    html: (content) => { return ContentFromKnownType(mimeTypes.html, content); },
    json: (content) => { return ContentFromKnownType(mimeTypes.json, content); },
    xml: (content) => { return ContentFromKnownType(mimeTypes.xml, content); },
    byExtension: (extension, content) => {
        let contentObj = mimeTypes[extension] || mimeTypes.bin;
        return new ContentFromKnownType(contentObj, content);
    },
    custom: Content,
    fromKnownType: ContentFromKnownType,
    mimeTypes: mimeTypes,
    typeString: (mimeTypeObj = mimeTypes.bin) => { return mimeTypeObj.mimeType + ((mimeTypeObj.encoding === utf8Encoding) ? utf8EncodingCharset : ''); }
};