index.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. 'use strict';
  2. var path = require('path')
  3. , fs = require('fs')
  4. , exists = fs.exists || path.exists
  5. , existsSync = fs.existsSync || path.existsSync
  6. ;
  7. function splitPath(path) {
  8. var parts = path.split(/(\/|\\)/);
  9. if (!parts.length) return parts;
  10. // when path starts with a slash, the first part is empty string
  11. return !parts[0].length ? parts.slice(1) : parts;
  12. }
  13. exports = module.exports = function (currentFullPath, clue, cb) {
  14. function testDir(parts) {
  15. if (parts.length === 0) return cb(null, null);
  16. var p = parts.join('');
  17. exists(path.join(p, clue), function (itdoes) {
  18. if (itdoes) return cb(null, p);
  19. testDir(parts.slice(0, -1));
  20. });
  21. }
  22. testDir(splitPath(currentFullPath));
  23. }
  24. exports.sync = function (currentFullPath, clue) {
  25. function testDir(parts) {
  26. if (parts.length === 0) return null;
  27. var p = parts.join('');
  28. var itdoes = existsSync(path.join(p, clue));
  29. return itdoes ? p : testDir(parts.slice(0, -1));
  30. }
  31. return testDir(splitPath(currentFullPath));
  32. }