1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 'use strict';
- var path = require('path');
- var pathExists = require('path-exists');
- var Promise = require('pinkie-promise');
- function splitPath(x) {
- return path.resolve(x || '').split(path.sep);
- }
- function join(parts, filename) {
- return path.resolve(parts.join(path.sep) + path.sep, filename);
- }
- module.exports = function (filename, opts) {
- opts = opts || {};
- var parts = splitPath(opts.cwd);
- return new Promise(function (resolve) {
- (function find() {
- var fp = join(parts, filename);
- pathExists(fp).then(function (exists) {
- if (exists) {
- resolve(fp);
- } else if (parts.pop()) {
- find();
- } else {
- resolve(null);
- }
- });
- })();
- });
- };
- module.exports.sync = function (filename, opts) {
- opts = opts || {};
- var parts = splitPath(opts.cwd);
- var len = parts.length;
- while (len--) {
- var fp = join(parts, filename);
- if (pathExists.sync(fp)) {
- return fp;
- }
- parts.pop();
- }
- return null;
- };
|