packages/utils-path/src/joinPaths.ts (14 lines of code) (raw):
import { cleanEndingSeparator } from './cleanEndingSeparator';
import { cleanLeadingSeparator } from './cleanLeadingSeparator';
import { PATH_SEPARATOR } from './constants';
// TODO: improve this
/**
* Safely joins the given paths which might both start and end with a `/`
*
* Example:
* - `joinPaths('abc/', '/def') === 'abc/def'`
* - `joinPaths(null, 'abc/def', 'zoo) === 'abc/def/zoo'`
*
* @param {...String} paths
* @returns {String}
*/
export function joinPaths(...paths: string[]): string {
return paths.reduce((acc, path) => {
if (!path) {
return acc;
}
if (!acc) {
return path;
}
return [cleanEndingSeparator(acc), PATH_SEPARATOR, cleanLeadingSeparator(path)].join('');
}, '');
}