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.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
	
	
							45 lines
						
					
					
						
							1.0 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
var path       = require('path') | 
						|
  , fs         = require('fs') | 
						|
  , exists     = fs.exists || path.exists | 
						|
  , existsSync = fs.existsSync || path.existsSync | 
						|
  ; | 
						|
 | 
						|
function splitPath(path) { | 
						|
  var parts = path.split(/(\/|\\)/); | 
						|
  if (!parts.length) return parts; | 
						|
 | 
						|
  // when path starts with a slash, the first part is empty string | 
						|
  return !parts[0].length ? parts.slice(1) : parts; | 
						|
} | 
						|
 | 
						|
exports = module.exports = function (currentFullPath, clue, cb) { | 
						|
 | 
						|
  function testDir(parts) { | 
						|
    if (parts.length === 0) return cb(null, null); | 
						|
 | 
						|
    var p = parts.join(''); | 
						|
 | 
						|
    exists(path.join(p, clue), function (itdoes) { | 
						|
      if (itdoes) return cb(null, p); | 
						|
      testDir(parts.slice(0, -1)); | 
						|
    }); | 
						|
  } | 
						|
 | 
						|
  testDir(splitPath(currentFullPath)); | 
						|
} | 
						|
 | 
						|
exports.sync = function (currentFullPath, clue) { | 
						|
 | 
						|
  function testDir(parts) { | 
						|
    if (parts.length === 0) return null; | 
						|
 | 
						|
    var p = parts.join(''); | 
						|
 | 
						|
    var itdoes = existsSync(path.join(p, clue)); | 
						|
    return itdoes ? p : testDir(parts.slice(0, -1)); | 
						|
  } | 
						|
 | 
						|
  return testDir(splitPath(currentFullPath)); | 
						|
}
 | 
						|
 |