/** * Get an incremented name (e.g. New page (2)) from a name (e.g. New page), based on an array of * existing names. * * @param name - The name to increment. * @param others - The array of existing names. * @public */ export function getIncrementedName(name: string, others: string[]) { let result = name const set = new Set(others) while (set.has(result)) { result = /^.*(\d+)$/.exec(result)?.[1] ? result.replace(/(\d+)(?=\D?)$/, (m) => { return (+m + 1).toString() }) : `${result} 1` } return result }