12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- /*
- * findup-sync
- * https://github.com/cowboy/node-findup-sync
- *
- * Copyright (c) 2013 "Cowboy" Ben Alman
- * Licensed under the MIT license.
- */
- 'use strict';
- // Nodejs libs.
- var path = require('path');
- // External libs.
- var glob = require('glob');
- var _ = require('lodash');
- // Search for a filename in the given directory or all parent directories.
- module.exports = function(patterns, options) {
- // Normalize patterns to an array.
- if (!Array.isArray(patterns)) { patterns = [patterns]; }
- // Create globOptions so that it can be modified without mutating the
- // original object.
- var globOptions = Object.create(options || {});
- globOptions.maxDepth = 1;
- globOptions.cwd = path.resolve(globOptions.cwd || '.');
- var files, lastpath;
- do {
- // Search for files matching patterns.
- files = _(patterns).map(function(pattern) {
- return glob.sync(pattern, globOptions);
- }).flatten().uniq().value();
- // Return file if found.
- if (files.length > 0) {
- return path.resolve(path.join(globOptions.cwd, files[0]));
- }
- // Go up a directory.
- lastpath = globOptions.cwd;
- globOptions.cwd = path.resolve(globOptions.cwd, '..');
- // If parentpath is the same as basedir, we can't go any higher.
- } while (globOptions.cwd !== lastpath);
- // No files were found!
- return null;
- };
|