{"version":3,"file":"index.cjs","sources":["../src/module.ts"],"sourcesContent":["import type { TypeMap, TypeMeta } from './type';\nimport db from './db.json';\n\nconst map : Record<string, TypeMeta> = {};\nconst extensionMap : Record<string, string> = {};\n\n/**\n * Define meta information/extensions for a mime type.\n *\n * @param key\n * @param value\n */\nexport function define(key: string, value: string[] | TypeMeta) {\n    let meta : TypeMeta = {\n        extensions: [],\n    };\n\n    if (Array.isArray(value)) {\n        meta.extensions = value;\n    } else {\n        meta = {\n            ...meta,\n            ...value,\n        };\n    }\n\n    if (meta.extensions.length === 0) {\n        return;\n    }\n\n    meta.extensions = meta.extensions.map((t) => t.toLowerCase());\n\n    key = key.toLowerCase();\n\n    for (let j = 0; j < meta.extensions.length; j++) {\n        const ext = meta.extensions[j] as string;\n\n        if (!Object.prototype.hasOwnProperty.call(extensionMap, ext)) {\n            extensionMap[ext] = key;\n        }\n    }\n\n    // Use first extension as default\n    if (!Object.prototype.hasOwnProperty.call(map, key)) {\n        map[key] = meta;\n    }\n}\n\n/**\n * Remove meta information.\n *\n * @param input\n */\nexport function undefine(input: string) {\n    if (!Object.prototype.hasOwnProperty.call(map, input)) {\n        return;\n    }\n\n    delete map[input];\n\n    const keys = Object.keys(extensionMap);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i] as string;\n\n        if (extensionMap[key] === input) {\n            delete extensionMap[key];\n        }\n    }\n}\n\n/**\n * Define multiple mime type -> extension/meta mappings.\n *\n * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']});\n */\nexport function defineMany(typeMap: TypeMap) {\n    const keys : string[] = Object.keys(typeMap);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        if (key) {\n            define(key, typeMap[key] as string[] | TypeMeta);\n        }\n    }\n}\n\n/**\n * Lookup a mime type based on extension\n *\n * @param input\n */\nexport function getType(input: string) : string | undefined {\n    const last = input.replace(/^.*[/\\\\]/, '').toLowerCase();\n    const ext = last.replace(/^.*\\./, '').toLowerCase();\n\n    const hasPath = last.length < input.length;\n    const hasDot = ext.length < last.length - 1;\n\n    if (hasDot || !hasPath) {\n        return extensionMap[ext];\n    }\n\n    return undefined;\n}\n\n/**\n * Get the file extension associated with a mime type.\n *\n * @param input\n */\nexport function getExtension(input: string) : string | undefined {\n    const meta = get(input);\n    if (meta) {\n        const ext = meta.extensions[0] as string;\n        return (ext[0] !== '*') ? ext : ext.slice(1);\n    }\n\n    return undefined;\n}\n\n/**\n * Retrieve meta information associated with a mime type.\n *\n * @param input\n */\nexport function get(input: string) : TypeMeta | undefined {\n    const type = /^\\s*([^;\\s]*)/.test(input) && RegExp.$1;\n    if (!type) {\n        return undefined;\n    }\n\n    return map[type.toLowerCase()];\n}\n\ndefineMany(db);\n"],"names":["map","extensionMap","define","key","value","meta","extensions","Array","isArray","length","t","toLowerCase","j","ext","Object","prototype","hasOwnProperty","call","defineMany","typeMap","keys","i","get","input","type","test","RegExp","$1","slice","last","replace","hasPath"],"mappings":"aAGA,MAAMA,EAAiC,CAAA,EACjCC,EAAwC,CAAA,EAQvC,SAASC,EAAOC,EAAaC,GAChC,IAAIC,EAAkB,CAClBC,WAAY,IAYhB,GATIC,MAAMC,QAAQJ,GACdC,EAAKC,WAAaF,EAElBC,EAAO,IACAA,KACAD,GAIoB,IAA3BC,EAAKC,WAAWG,OAApB,CAIAJ,EAAKC,WAAaD,EAAKC,WAAWN,KAAKU,GAAMA,EAAEC,gBAE/CR,EAAMA,EAAIQ,cAEV,IAAK,IAAIC,EAAI,EAAGA,EAAIP,EAAKC,WAAWG,OAAQG,IAAK,CAC7C,MAAMC,EAAMR,EAAKC,WAAWM,GAEvBE,OAAOC,UAAUC,eAAeC,KAAKhB,EAAcY,KACpDZ,EAAaY,GAAOV,EAE5B,CAGKW,OAAOC,UAAUC,eAAeC,KAAKjB,EAAKG,KAC3CH,EAAIG,GAAOE,EAhBf,CAkBJ,CA6BO,SAASa,EAAWC,GACvB,MAAMC,EAAkBN,OAAOM,KAAKD,GACpC,IAAK,IAAIE,EAAI,EAAGA,EAAID,EAAKX,OAAQY,IAAK,CAClC,MAAMlB,EAAMiB,EAAKC,GACblB,GACAD,EAAOC,EAAKgB,EAAQhB,GAE5B,CACJ,CAyCO,SAASmB,EAAIC,GAChB,MAAMC,EAAO,gBAAgBC,KAAKF,IAAUG,OAAOC,GACnD,GAAKH,EAIL,OAAOxB,EAAIwB,EAAKb,cACpB,CAEAO,+hrIAxBO,SAAsBK,GACzB,MAAMlB,EAAOiB,EAAIC,GACjB,GAAIlB,EAAM,CACN,MAAMQ,EAAMR,EAAKC,WAAW,GAC5B,MAAmB,MAAXO,EAAI,GAAcA,EAAMA,EAAIe,MAAM,EAC9C,CAGJ,kBA3BO,SAAiBL,GACpB,MAAMM,EAAON,EAAMO,QAAQ,WAAY,IAAInB,cACrCE,EAAMgB,EAAKC,QAAQ,QAAS,IAAInB,cAEhCoB,EAAUF,EAAKpB,OAASc,EAAMd,OAGpC,GAFeI,EAAIJ,OAASoB,EAAKpB,OAAS,IAE3BsB,EACX,OAAO9B,EAAaY,EAI5B,mBAjDO,SAAkBU,GACrB,IAAKT,OAAOC,UAAUC,eAAeC,KAAKjB,EAAKuB,GAC3C,cAGGvB,EAAIuB,GAEX,MAAMH,EAAON,OAAOM,KAAKnB,GACzB,IAAK,IAAIoB,EAAI,EAAGA,EAAID,EAAKX,OAAQY,IAAK,CAClC,MAAMlB,EAAMiB,EAAKC,GAEbpB,EAAaE,KAASoB,UACftB,EAAaE,EAE5B,CACJ"}