UNPKG

mauss

Version:

lightweight, modular, type-safe utilities

24 lines (23 loc) 798 B
/** Joins all given parameters together using `/`, regardless of the platform */ export function catenate(...paths) { if (!paths.length) return '.'; const index = paths[0].replace(/\\/g, '/').trim(); if (paths.length === 1 && index === '') return '.'; const parts = index.replace(/[/]*$/g, '').split('/'); if (parts[0] === '') parts.shift(); for (let i = 1; i < paths.length; i += 1) { const part = paths[i].replace(/\\/g, '/').trim(); for (const slice of part.split('/')) { if (slice === '.') continue; if (slice === '..') parts.pop(); else if (slice) parts.push(slice); } } return (index[0] === '/' ? '/' : '') + parts.join('/'); }