github-pages-deploy-action/node_modules/find-up/index.js

90 lines
1.9 KiB
JavaScript
Raw Normal View History

2020-01-28 13:07:56 +08:00
'use strict';
const path = require('path');
const locatePath = require('locate-path');
2020-03-31 20:57:48 +08:00
const pathExists = require('path-exists');
2020-01-28 13:07:56 +08:00
2020-03-31 20:57:48 +08:00
const stop = Symbol('findUp.stop');
module.exports = async (name, options = {}) => {
let directory = path.resolve(options.cwd || '');
const {root} = path.parse(directory);
const paths = [].concat(name);
const runMatcher = async locateOptions => {
if (typeof name !== 'function') {
return locatePath(paths, locateOptions);
}
const foundPath = await name(locateOptions.cwd);
if (typeof foundPath === 'string') {
return locatePath([foundPath], locateOptions);
}
return foundPath;
};
// eslint-disable-next-line no-constant-condition
while (true) {
// eslint-disable-next-line no-await-in-loop
const foundPath = await runMatcher({...options, cwd: directory});
if (foundPath === stop) {
return;
}
if (foundPath) {
return path.resolve(directory, foundPath);
}
if (directory === root) {
return;
}
directory = path.dirname(directory);
}
2020-01-28 13:07:56 +08:00
};
2020-03-31 20:57:48 +08:00
module.exports.sync = (name, options = {}) => {
let directory = path.resolve(options.cwd || '');
const {root} = path.parse(directory);
const paths = [].concat(name);
2020-01-28 13:07:56 +08:00
2020-03-31 20:57:48 +08:00
const runMatcher = locateOptions => {
if (typeof name !== 'function') {
return locatePath.sync(paths, locateOptions);
}
2020-01-28 13:07:56 +08:00
2020-03-31 20:57:48 +08:00
const foundPath = name(locateOptions.cwd);
if (typeof foundPath === 'string') {
return locatePath.sync([foundPath], locateOptions);
}
return foundPath;
};
2020-01-28 13:07:56 +08:00
// eslint-disable-next-line no-constant-condition
while (true) {
2020-03-31 20:57:48 +08:00
const foundPath = runMatcher({...options, cwd: directory});
2020-01-28 13:07:56 +08:00
2020-03-31 20:57:48 +08:00
if (foundPath === stop) {
return;
2020-01-28 13:07:56 +08:00
}
2020-03-31 20:57:48 +08:00
if (foundPath) {
return path.resolve(directory, foundPath);
}
if (directory === root) {
return;
}
directory = path.dirname(directory);
2020-01-28 13:07:56 +08:00
}
};
2020-03-31 20:57:48 +08:00
module.exports.exists = pathExists;
module.exports.sync.exists = pathExists.sync;
module.exports.stop = stop;