12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /**
- * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
- /** A File or Blob object or a URL string */
- export type FileInput = File | Blob | string
- // TODO only support compressed files for which uncompression support is available???
- // TODO store globally with decompression plugins?
- const compressedExtList = [ 'gz', 'zip' ]
- // TODO store globally with parser plugins?
- const binaryExtList = [ 'bcif', 'ccp4', 'dcd' ]
- export interface FileInfo {
- path: string
- name: string
- ext: string
- base: string
- dir: string
- compressed: string | boolean
- binary: boolean
- protocol: string
- query: string
- src: FileInput
- }
- export function getFileInfo (file: FileInput): FileInfo {
- let path: string
- let compressed: string|false
- let protocol = ''
- if (file instanceof File) {
- path = file.name
- } else if (file instanceof Blob) {
- path = ''
- } else {
- path = file
- }
- const queryIndex = path.lastIndexOf('?')
- const query = queryIndex !== -1 ? path.substring(queryIndex) : ''
- path = path.substring(0, queryIndex === -1 ? path.length : queryIndex)
- const name = path.replace(/^.*[\\/]/, '')
- let base = name.substring(0, name.lastIndexOf('.'))
- const nameSplit = name.split('.')
- let ext = nameSplit.length > 1 ? (nameSplit.pop() || '').toLowerCase() : ''
- const protocolMatch = path.match(/^(.+):\/\/(.+)$/)
- if (protocolMatch) {
- protocol = protocolMatch[ 1 ].toLowerCase()
- path = protocolMatch[ 2 ] || ''
- }
- const dir = path.substring(0, path.lastIndexOf('/') + 1)
- if (compressedExtList.includes(ext)) {
- compressed = ext
- const n = path.length - ext.length - 1
- ext = (path.substr(0, n).split('.').pop() || '').toLowerCase()
- const m = base.length - ext.length - 1
- base = base.substr(0, m)
- } else {
- compressed = false
- }
- const binary = binaryExtList.includes(ext)
- return { path, name, ext, base, dir, compressed, binary, protocol, query, src: file }
- }
|