UNPKG

wsemi

Version:

A support package for web developer.

1,059 lines (1,051 loc) 21.6 kB
import find from 'lodash-es/find.js' import isestr from './isestr.mjs' import iseobj from './iseobj.mjs' //MIME_types: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types let fts = [ { name: 'pic', group: 'image', acp: 'image/*', exec: 'imageviwer', }, { name: 'xml', group: 'data', acp: 'text/xml', exec: 'textviwer', }, { name: 'htm', group: 'docums', acp: 'text/html', exec: 'browser', }, { name: 'html', group: 'docums', acp: 'text/html', exec: 'browser', }, { name: 'json', group: 'data', acp: 'application/json', exec: 'textviwer', }, { name: 'geojson', group: 'data', acp: 'application/geo+json', exec: 'textviwer', }, { name: 'txt', group: 'data', acp: 'text/plain', exec: 'textviwer', }, { name: 'csv', group: 'data', acp: 'text/csv', exec: 'excel', }, { name: 'dat', group: 'data', acp: 'application/octet-stream', exec: 'binaryviwer', }, { name: '7z', group: 'compress', acp: 'application/x-7z-compressed', exec: 'compressor' }, { name: 'bzip', group: 'compress', acp: 'application/x-bzip', exec: '7z', }, { name: 'bzip2', group: 'compress', acp: 'application/x-bzip2', exec: 'compressor' }, { name: 'bz2', group: 'compress', acp: 'application/x-bzip2', exec: 'compressor' }, { name: 'ace', group: 'compress', acp: 'application/x-ace-compressed', exec: 'compressor' }, { name: 'Z', group: 'compress', acp: 'application/x-compress', exec: 'compressor' }, { name: 'lzh', group: 'compress', acp: 'application/x-lzh-compressed', exec: 'compressor' }, { name: 'lz', group: 'compress', acp: 'application/x-lzip', exec: 'compressor' }, { name: 'rar', group: 'compress', acp: 'application/x-rar-compressed', exec: 'compressor' }, { name: 'tar', group: 'compress', acp: 'application/x-tar', exec: 'compressor' }, { name: 'ar', group: 'compress', acp: 'application/x-unix-archive', exec: 'compressor' }, { name: 'zip', group: 'compress', acp: 'application/zip', exec: 'compressor' }, { name: 'gz', group: 'compress', acp: 'application/gzip', exec: 'compressor' }, { name: 'avro', group: '', acp: 'application/avro', exec: '' }, { name: 'dcm', group: '', acp: 'application/dicom', exec: '' }, { name: 'eps', group: '', acp: 'application/eps', exec: '' }, { name: 'epub', group: '', acp: 'application/epub+zip', exec: '' }, { name: 'class', group: '', acp: 'application/java-vm', exec: '' }, { name: 'mxf', group: '', acp: 'application/mxf', exec: '' }, { name: 'ogx', group: '', acp: 'application/ogg', exec: '' }, { name: 'pdf', group: 'docums', acp: 'application/pdf', exec: 'acrobat' }, { name: 'pgp', group: '', acp: 'application/pgp-encrypted', exec: '' }, { name: 'ps', group: '', acp: 'application/postscript', exec: '' }, { name: 'ai', group: '', acp: 'application/postscript', exec: '' }, { name: 'rtf', group: 'docums', acp: 'application/rtf', exec: 'word' }, { name: 'icc', group: '', acp: 'application/vnd.iccprofile', exec: '' }, { name: 'asf', group: '', acp: 'application/vnd.ms-asf', exec: '', msg: 'asf的acp可能為application/vnd.ms-asf或audio/x-ms-asf或video/x-ms-asf' }, { name: 'cab', group: '', acp: 'application/vnd.ms-cab-compressed', exec: '' }, { name: 'eot', group: '', acp: 'application/vnd.ms-fontobject', exec: '' }, { name: 'chm', group: '', acp: 'application/vnd.ms-htmlhelp', exec: '' }, { name: 'pst', group: '', acp: 'application/vnd.ms-outlook', exec: '' }, { name: 'odp', group: 'docums', acp: 'application/vnd.oasis.opendocument.presentation', exec: 'powerpoint' }, { name: 'ods', group: 'docums', acp: 'application/vnd.oasis.opendocument.spreadsheet', exec: 'excel' }, { name: 'odt', group: 'docums', acp: 'application/vnd.oasis.opendocument.text', exec: 'word' }, { name: 'ppt', group: 'docums', acp: 'application/vnd.ms-powerpoint', exec: 'powerpoint', }, { name: 'pptx', group: 'docums', acp: 'application/vnd.openxmlformats-officedocument.presentationml.presentation', exec: 'powerpoint' }, { name: 'xls', group: 'docums', acp: 'application/vnd.ms-excel', exec: 'excel', }, { name: 'xlsx', group: 'docums', acp: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', exec: 'excel' }, { name: 'doc', group: 'docums', acp: 'application/msword', exec: 'word', }, { name: 'docx', group: 'docums', acp: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', exec: 'word' }, { name: 'skp', group: '', acp: 'application/vnd.sketchup.skp', exec: '' }, { name: 'pcap', group: '', acp: 'application/vnd.tcpdump.pcap', exec: '' }, { name: 'wasm', group: '', acp: 'application/wasm', exec: '' }, { name: 'arrow', group: '', acp: 'application/x-apache-arrow', exec: '' }, { name: 'dmg', group: '', acp: 'application/x-apple-diskimage', exec: '' }, { name: 'arj', group: '', acp: 'application/x-arj', exec: '' }, { name: 'asar', group: '', acp: 'application/x-asar', exec: '' }, { name: 'blend', group: '', acp: 'application/x-blender', exec: 'blender' }, { name: 'cfb', group: '', acp: 'application/x-cfb', exec: '' }, { name: 'cpio', group: '', acp: 'application/x-cpio', exec: '' }, { name: 'deb', group: '', acp: 'application/x-deb', exec: '' }, { name: 'elf', group: '', acp: 'application/x-elf', exec: '' }, { name: 'shp', group: '', acp: 'application/x-esri-shape', exec: '' }, { name: 'crx', group: '', acp: 'application/x-google-chrome-extension', exec: '' }, { name: 'indd', group: '', acp: 'application/x-indesign', exec: '' }, { name: 'macho', group: '', acp: 'application/x-mach-binary', exec: '' }, { name: 'mie', group: '', acp: 'application/x-mie', exec: '' }, { name: 'mobi', group: '', acp: 'application/x-mobipocket-ebook', exec: '' }, { name: 'exe', group: '', acp: 'application/x-msdownload', exec: '' }, { name: 'nes', group: '', acp: 'application/x-nintendo-nes-rom', exec: '' }, { name: 'parquet', group: '', acp: 'application/x-parquet', exec: '' }, { name: 'rpm', group: '', acp: 'application/x-rpm', exec: '' }, { name: 'swf', group: '', acp: 'application/x-shockwave-flash', exec: '' }, { name: 'sqlite', group: '', acp: 'application/x-sqlite3', exec: '' }, { name: 'xpi', group: '', acp: 'application/x-xpinstall', exec: '' }, { name: 'xz', group: '', acp: 'application/x-xz', exec: '' }, { name: 'alias', group: '', acp: 'application/x.apple.alias', exec: '' }, { name: 'fbx', group: '', acp: 'application/x.autodesk.fbx', exec: '' }, { name: 'lnk', group: '', acp: 'application/x.ms.shortcut', exec: '' }, { name: 'zst', group: '', acp: 'application/zstd', exec: '' }, { name: 'aac', group: 'audio', acp: 'audio/aac', exec: 'audioplayer' }, { name: 'aif', group: 'audio', acp: 'audio/aiff', exec: 'audioplayer' }, { name: 'amr', group: 'audio', acp: 'audio/amr', exec: 'audioplayer' }, { name: 'ape', group: 'audio', acp: 'audio/ape', exec: 'audioplayer' }, { name: 'mid', group: 'audio', acp: 'audio/midi', exec: 'audioplayer' }, { name: 'm4b', group: 'audio', acp: 'audio/mp4', exec: 'audioplayer' }, { name: 'f4a', group: 'audio', acp: 'audio/mp4', exec: 'audioplayer' }, { name: 'f4b', group: 'audio', acp: 'audio/mp4', exec: 'audioplayer' }, { name: 'mp3', group: 'audio', acp: 'audio/mpeg', exec: 'audioplayer' }, { name: 'mp2', group: 'audio', acp: 'audio/mpeg', exec: 'audioplayer' }, { name: 'mp1', group: 'audio', acp: 'audio/mpeg', exec: 'audioplayer' }, { name: 'oga', group: 'audio', acp: 'audio/ogg', exec: 'audioplayer' }, { name: 'spx', group: 'audio', acp: 'audio/ogg', exec: 'audioplayer' }, { name: 'ogg', group: 'audio', acp: 'audio/ogg', exec: 'audioplayer' }, { name: 'opus', group: 'audio', acp: 'audio/opus', exec: 'audioplayer' }, { name: 'qcp', group: 'audio', acp: 'audio/qcelp', exec: 'audioplayer' }, { name: 'ac3', group: 'audio', acp: 'audio/vnd.dolby.dd-raw', exec: 'audioplayer' }, { name: 'wav', group: 'audio', acp: 'audio/wav', exec: 'audioplayer' }, { name: 'wv', group: 'audio', acp: 'audio/wavpack', exec: 'audioplayer' }, { name: 'dsf', group: 'audio', acp: 'audio/x-dsf', exec: 'audioplayer' }, { name: 'flac', group: 'audio', acp: 'audio/x-flac', exec: 'audioplayer' }, { name: 'it', group: 'audio', acp: 'audio/x-it', exec: 'audioplayer' }, { name: 'm4a', group: 'audio', acp: 'audio/x-m4a', exec: 'audioplayer' }, { name: 'mpc', group: 'audio', acp: 'audio/x-musepack', exec: 'audioplayer' }, { name: 's3m', group: 'audio', acp: 'audio/x-s3m', exec: 'audioplayer' }, { name: 'voc', group: 'audio', acp: 'audio/x-voc', exec: 'audioplayer' }, { name: 'xm', group: 'audio', acp: 'audio/x-xm', exec: 'audioplayer' }, { name: 'otf', group: '', acp: 'font/otf', exec: '' }, { name: 'ttf', group: '', acp: 'font/ttf', exec: '' }, { name: 'woff', group: '', acp: 'font/woff', exec: '' }, { name: 'woff2', group: '', acp: 'font/woff2', exec: '' }, { name: 'apng', group: 'image', acp: 'image/apng', exec: 'imageviwer' }, { name: 'avif', group: 'image', acp: 'image/avif', exec: 'imageviwer' }, { name: 'bmp', group: 'image', acp: 'image/bmp', exec: 'imageviwer' }, { name: 'bpg', group: 'image', acp: 'image/bpg', exec: 'imageviwer' }, { name: 'flif', group: 'image', acp: 'image/flif', exec: 'imageviwer' }, { name: 'gif', group: 'image', acp: 'image/gif', exec: 'imageviwer' }, { name: 'heic', group: 'image', acp: 'image/heif', exec: 'imageviwer' }, { name: 'icns', group: 'image', acp: 'image/icns', exec: 'imageviwer' }, { name: 'j2c', group: 'image', acp: 'image/j2c', exec: 'imageviwer' }, { name: 'jls', group: 'image', acp: 'image/jls', exec: 'imageviwer' }, { name: 'jp2', group: 'image', acp: 'image/jp2', exec: 'imageviwer' }, { name: 'jpg', group: 'image', acp: 'image/jpeg', exec: 'imageviwer' }, { name: 'jpm', group: 'image', acp: 'image/jpm', exec: 'imageviwer' }, { name: 'jpx', group: 'image', acp: 'image/jpx', exec: 'imageviwer' }, { name: 'jxl', group: 'image', acp: 'image/jxl', exec: 'imageviwer' }, { name: 'ktx', group: 'image', acp: 'image/ktx', exec: 'imageviwer' }, { name: 'mj2', group: 'image', acp: 'image/mj2', exec: 'imageviwer' }, { name: 'png', group: 'image', acp: 'image/png', exec: 'imageviwer' }, { name: 'tif', group: 'image', acp: 'image/tiff', exec: 'imageviwer' }, { name: 'psd', group: 'image', acp: 'image/vnd.adobe.photoshop', exec: 'imageviwer' }, { name: 'dwg', group: 'image', acp: 'image/vnd.dwg', exec: 'imageviwer' }, { name: 'jxr', group: 'image', acp: 'image/vnd.ms-photo', exec: 'imageviwer' }, { name: 'webp', group: 'image', acp: 'image/webp', exec: 'imageviwer' }, { name: 'dng', group: 'image', acp: 'image/x-adobe-dng', exec: 'imageviwer' }, { name: 'cr2', group: 'image', acp: 'image/x-canon-cr2', exec: 'imageviwer' }, { name: 'cr3', group: 'image', acp: 'image/x-canon-cr3', exec: 'imageviwer' }, { name: 'raf', group: 'image', acp: 'image/x-fujifilm-raf', exec: 'imageviwer' }, { name: 'ico', group: 'image', acp: 'image/x-icon', exec: 'imageviwer' }, { name: 'cur', group: 'image', acp: 'image/x-icon', exec: 'imageviwer' }, { name: 'nef', group: 'image', acp: 'image/x-nikon-nef', exec: 'imageviwer' }, { name: 'orf', group: 'image', acp: 'image/x-olympus-orf', exec: 'imageviwer' }, { name: 'rw2', group: 'image', acp: 'image/x-panasonic-rw2', exec: 'imageviwer' }, { name: 'arw', group: 'image', acp: 'image/x-sony-arw', exec: 'imageviwer' }, { name: 'xcf', group: 'image', acp: 'image/x-xcf', exec: 'imageviwer' }, { name: '3mf', group: '', acp: 'model/3mf', exec: '' }, { name: 'glb', group: '', acp: 'model/gltf-binary', exec: '' }, { name: 'stl', group: '', acp: 'model/stl', exec: '' }, { name: 'ics', group: '', acp: 'text/calendar', exec: '' }, { name: 'vcf', group: '', acp: 'text/vcard', exec: '' }, { name: '3gp', group: 'video', acp: 'video/3gpp', exec: 'videoplayer' }, { name: '3g2', group: 'video', acp: 'video/3gpp2', exec: 'videoplayer' }, { name: 'm2p', group: 'video', acp: 'video/MP2P', exec: 'videoplayer' }, { name: 'vob', group: 'video', acp: 'video/MP2P', exec: 'videoplayer' }, { name: 'sub', group: 'video', acp: 'video/MP2P', exec: 'videoplayer', msg: '與字幕檔衝突' }, { name: 'mts', group: 'video', acp: 'video/mp2t', exec: 'videoplayer' }, { name: 'm4p', group: 'video', acp: 'video/mp4', exec: 'videoplayer' }, { name: 'f4v', group: 'video', acp: 'video/mp4', exec: 'videoplayer' }, { name: 'f4p', group: 'video', acp: 'video/mp4', exec: 'videoplayer' }, { name: 'mp4', group: 'video', acp: 'video/mp4', exec: 'videoplayer' }, { name: 'mpg', group: 'video', acp: 'video/mpeg', exec: 'videoplayer', msg: 'mpg可能為mpeg或video/MP1S或video/MP2S' }, { name: 'ogv', group: 'video', acp: 'video/ogg', exec: 'videoplayer' }, { name: 'ogm', group: 'video', acp: 'video/ogg', exec: 'videoplayer' }, { name: 'mov', group: 'video', acp: 'video/quicktime', exec: 'videoplayer' }, { name: 'avi', group: 'video', acp: 'video/vnd.avi', exec: 'videoplayer' }, { name: 'webm', group: 'video', acp: 'video/webm', exec: 'videoplayer' }, { name: 'flv', group: 'video', acp: 'video/x-flv', exec: 'videoplayer' }, { name: 'm4v', group: 'video', acp: 'video/x-m4v', exec: 'videoplayer' }, { name: 'mkv', group: 'video', acp: 'video/x-matroska', exec: 'videoplayer' } ] /** * 取得檔案類型資訊 * * Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/getFileType.test.mjs Github} * @memberOf wsemi * @param {string} [name=''] 輸入過濾副檔名字串,預設'' * @returns {Object|Array} 回傳檔案關聯性資訊物件或陣列 * @example * * let r * * r = getFileType('mp3') * console.log('name=mp3', r) * // => name=mp3 { name: 'mp3', group: 'audio', acp: 'audio/mpeg', exec: 'audioplayer' } * * r = getFileType('mp4') * console.log('name=mp4', r) * // => name=mp4 { name: 'mp4', group: 'video', acp: 'video/mp4', exec: 'videoplayer' } * */ function getFileType(name = '') { let r = null if (isestr(name)) { r = find(fts, { name }) if (!iseobj(r)) { r = null } } else { r = fts } return r } export default getFileType