summaryrefslogtreecommitdiffstats
path: root/node_modules/findup-sync/index.js
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-16 00:10:28 +0100
commite06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch)
tree55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/findup-sync/index.js
downloadwebsite_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2
website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip
api, login, auth
Diffstat (limited to 'node_modules/findup-sync/index.js')
-rw-r--r--node_modules/findup-sync/index.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/node_modules/findup-sync/index.js b/node_modules/findup-sync/index.js
new file mode 100644
index 0000000..2a9e117
--- /dev/null
+++ b/node_modules/findup-sync/index.js
@@ -0,0 +1,87 @@
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var fs = require('fs');
+var path = require('path');
+var isGlob = require('is-glob');
+var resolveDir = require('resolve-dir');
+var detect = require('detect-file');
+var mm = require('micromatch');
+
+/**
+ * @param {String|Array} `pattern` Glob pattern or file path(s) to match against.
+ * @param {Object} `options` Options to pass to [micromatch]. Note that if you want to start in a different directory than the current working directory, specify the `options.cwd` property here.
+ * @return {String} Returns the first matching file.
+ * @api public
+ */
+
+module.exports = function(patterns, options) {
+ options = options || {};
+ var cwd = path.resolve(resolveDir(options.cwd || ''));
+
+ if (typeof patterns === 'string') {
+ return lookup(cwd, [patterns], options);
+ }
+
+ if (!Array.isArray(patterns)) {
+ throw new TypeError('findup-sync expects a string or array as the first argument.');
+ }
+
+ return lookup(cwd, patterns, options);
+};
+
+function lookup(cwd, patterns, options) {
+ var len = patterns.length;
+ var idx = -1;
+ var res;
+
+ while (++idx < len) {
+ if (isGlob(patterns[idx])) {
+ res = matchFile(cwd, patterns[idx], options);
+ } else {
+ res = findFile(cwd, patterns[idx], options);
+ }
+ if (res) {
+ return res;
+ }
+ }
+
+ var dir = path.dirname(cwd);
+ if (dir === cwd) {
+ return null;
+ }
+ return lookup(dir, patterns, options);
+}
+
+function matchFile(cwd, pattern, opts) {
+ var isMatch = mm.matcher(pattern, opts);
+ var files = tryReaddirSync(cwd);
+ var len = files.length;
+ var idx = -1;
+
+ while (++idx < len) {
+ var name = files[idx];
+ var fp = path.join(cwd, name);
+ if (isMatch(name) || isMatch(fp)) {
+ return fp;
+ }
+ }
+ return null;
+}
+
+function findFile(cwd, filename, options) {
+ var fp = cwd ? path.resolve(cwd, filename) : filename;
+ return detect(fp, options);
+}
+
+function tryReaddirSync(fp) {
+ try {
+ return fs.readdirSync(fp);
+ } catch (err) {
+ // Ignore error
+ }
+ return [];
+}