/** * An analog of Node.js's `path.join` * @param {...string} segments * @return {string} */ export const join = (...segments: string[]) => { const partss = segments.reduce((parts: any, segment: string) => { // Remove leading slashes from non-first part if (parts.length > 0) segment = segment.replace(/^\//, '') // Remove trailing slashes segment = segment.replace(/\/$/, '') return parts.concat(segment.split('/')); }, []) const resultParts: string[] = [] for (const part of partss) { if (part === '.') continue; if (part === '..') { resultParts.pop() continue } resultParts.push(part) } return resultParts.join('/') }