mime-explorer 1.0.0 → 1.1.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { 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 * Get metae 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":"whCAUMA,EAAiC,CAAA,EACjCC,EAAwC,CAAA,EAQvC,SAASC,EAAOC,EAAaC,GAChC,IAAIC,EAAkB,CAClBC,WAAY,IAYhB,GATIC,MAAMC,QAAQJ,GACdC,EAAKC,WAAaF,EAElBC,EACOA,EAAAA,EAAAA,CAAAA,EAAAA,GACAD,GAIoB,IAA3BC,EAAKC,WAAWG,OAApB,CAIAJ,EAAKC,WAAaD,EAAKC,WAAWN,KAAI,SAACU,GAAC,OAAKA,EAAEC,iBAE/CR,EAAMA,EAAIQ,cAEV,IAAK,IAAIC,EAAI,EAAGA,EAAIP,EAAKC,WAAWG,OAAQG,IAAK,CAC7C,IAAMC,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,GAEvB,IADA,IAAMC,EAAkBN,OAAOM,KAAKD,GAC3BE,EAAI,EAAGA,EAAID,EAAKX,OAAQY,IAAK,CAClC,IAAMlB,EAAMiB,EAAKC,GACblB,GACAD,EAAOC,EAAKgB,EAAQhB,GAE5B,CACJ,CAyCO,SAASmB,EAAIC,GAChB,IAAMC,EAAO,gBAAgBC,KAAKF,IAAUG,OAAOC,GACnD,GAAKH,EAIL,OAAOxB,EAAIwB,EAAKb,cACpB,CAEAO,+hrIAxBO,SAAsBK,GACzB,IAAMlB,EAAOiB,EAAIC,GACjB,GAAIlB,EAAM,CACN,IAAMQ,EAAMR,EAAKC,WAAW,GAC5B,MAAmB,MAAXO,EAAI,GAAcA,EAAMA,EAAIe,MAAM,EAC9C,CAGJ,kBA3BO,SAAiBL,GACpB,IAAMM,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,GAAKT,OAAOC,UAAUC,eAAeC,KAAKjB,EAAKuB,GAA/C,QAIOvB,EAAIuB,GAGX,IADA,IAAMH,EAAON,OAAOM,KAAKnB,GAChBoB,EAAI,EAAGA,EAAID,EAAKX,OAAQY,IAAK,CAClC,IAAMlB,EAAMiB,EAAKC,GAEbpB,EAAaE,KAASoB,UACftB,EAAaE,EAE5B,CAXA,CAYJ"}
1
+ {"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"}