export function getFileExtension (fileName) { const regex = new RegExp('[^.]+$'); return fileName.match(regex)?.[0]; } export function getFileBasename (fileName) { const regex = new RegExp('^[^.]+'); return fileName.match(regex)?.[0] } export function parseFileName (s) { const pattern = /(?^.+)\.(?[^.]+?$)/ const match = s.match(pattern) if (match && match.groups){ return { fileName: match.groups.base, fileExtension: match.groups.extension, } } else { return {fileName: s} } } const createFileNameDefaultOptions = { meta_separator : "__", category_prefix : "", tag_prefix: "<>", tag_separator: "", lowerCase: true, noSymbols: true, } export function createMetaFileName(originalFileName, meta={category:"", tags:[]}, options) { const { meta_separator, category_prefix, tag_prefix, tag_separator, lowerCase, noSymbols } = {...createFileNameDefaultOptions,...options} let {fileName, fileExtension} = parseFileName(originalFileName) const category_string = `${category_prefix}${meta.category}` const tag_string = `${meta.tags.map(tag=>tag_prefix+tag).join('')}` fileName = `${fileName}${meta_separator}${category_string}${tag_separator}${tag_string}` if (lowerCase) { fileName = fileName.toLowerCase() } if (noSymbols) { fileName = fileName.replace(/[^a-z0-9_-]/g,'-') } return `${fileName}.${fileExtension}` }