24 lines
745 B
TypeScript
24 lines
745 B
TypeScript
/**
|
|
* 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('/')
|
|
} |