UNPKG

915 BJavaScriptView Raw
1'use strict';
2const path = require('path');
3const pathExists = require('path-exists');
4
5module.exports = (filename, opts) => {
6 opts = opts || {};
7
8 const startDir = path.resolve(opts.cwd || '');
9 const root = path.parse(startDir).root;
10
11 return new Promise(resolve => {
12 (function find(dir) {
13 const fp = path.join(dir, filename);
14
15 pathExists(fp).then(exists => {
16 if (exists) {
17 resolve(fp);
18 } else if (dir === root) {
19 resolve(null);
20 } else {
21 find(path.dirname(dir));
22 }
23 });
24 })(startDir);
25 });
26};
27
28module.exports.sync = (filename, opts) => {
29 opts = opts || {};
30
31 let dir = path.resolve(opts.cwd || '');
32 const root = path.parse(dir).root;
33
34 // eslint-disable-next-line no-constant-condition
35 while (true) {
36 const fp = path.join(dir, filename);
37
38 if (pathExists.sync(fp)) {
39 return fp;
40 } else if (dir === root) {
41 return null;
42 }
43
44 dir = path.dirname(dir);
45 }
46};