34 lines
		
	
	
		
			843 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			843 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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
 | |
| }
 |