mauss
Version:
lightweight, modular, type-safe utilities
24 lines (23 loc) • 798 B
JavaScript
/** 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('/');
}