You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
843 B
33 lines
843 B
'use strict' |
|
const { sep: DEFAULT_SEPARATOR } = require('path') |
|
|
|
const determineSeparator = paths => { |
|
for (const path of paths) { |
|
const match = /(\/|\\)/.exec(path) |
|
if (match !== null) return match[0] |
|
} |
|
|
|
return DEFAULT_SEPARATOR |
|
} |
|
|
|
module.exports = function commonPathPrefix (paths, sep = determineSeparator(paths)) { |
|
const [first = '', ...remaining] = paths |
|
if (first === '' || remaining.length === 0) return '' |
|
|
|
const parts = first.split(sep) |
|
|
|
let endOfPrefix = parts.length |
|
for (const path of remaining) { |
|
const compare = path.split(sep) |
|
for (let i = 0; i < endOfPrefix; i++) { |
|
if (compare[i] !== parts[i]) { |
|
endOfPrefix = i |
|
} |
|
} |
|
|
|
if (endOfPrefix === 0) return '' |
|
} |
|
|
|
const prefix = parts.slice(0, endOfPrefix).join(sep) |
|
return prefix.endsWith(sep) ? prefix : prefix + sep |
|
}
|
|
|