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}`
}