UNPKG

image-exporter

Version:

Easily download one or more DOM elements as images

55 lines (47 loc) 2.17 kB
import { ImageOptions, Label } from "../types"; /** * Handles the generation of unique filenames based on a proposed filename and an array of existing filenames. * * If the proposed filename is unique, it is added to the filenames array and returned as-is. * If the proposed filename is not unique, the function will check if it already ends with a "-n" pattern. * If it does, the function will increment the number until a unique filename is found. * If it doesn't, the function will start with "-2" and increment the number until a unique filename is found. */ export function handleFileNames(imageOptions: ImageOptions, filenames: string[]): Label { // Finish altering filenames before checking for uniqueness let proposedFilename = imageOptions.label; // Add scale to filename if includeScaleInLabel is true if (imageOptions.includeScaleInLabel) proposedFilename += `_@${imageOptions.scale}x`; // Add format to filename last const extension = `.${imageOptions.format}`; proposedFilename += extension; // If filename is unique, add it to array and return as-is if (!filenames.includes(proposedFilename)) { filenames.push(proposedFilename); return proposedFilename; } // Check if filename already ends with -n pattern const numberPattern = /-(\d+)$/; const match = proposedFilename.match(numberPattern); if (match) { // File ends with -n, increment the number until we find a unique name const baseFilename = proposedFilename.replace(numberPattern, ""); let counter = parseInt(match[1], 10); while (filenames.includes(`${baseFilename}-${counter}${extension}`)) { counter++; } const newFilename = `${baseFilename}-${counter}${extension}`; filenames.push(newFilename); return newFilename; } else { // File doesn't end with -n, start with -2 and increment if needed const baseFilename = proposedFilename.replace(extension, ""); let counter = 2; while (filenames.includes(`${baseFilename}-${counter}${extension}`)) { counter++; } const newFilename = `${baseFilename}-${counter}${extension}`; filenames.push(newFilename); return newFilename; } }