2023-10-03 11:14:36 +08:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const { resolve, join, dirname } = require('path');
|
|
|
|
const { readFile } = require('hexo-fs');
|
|
|
|
|
|
|
|
function findPkg(cwd, args = {}) {
|
|
|
|
if (args.cwd) {
|
|
|
|
cwd = resolve(cwd, args.cwd);
|
|
|
|
}
|
|
|
|
|
|
|
|
return checkPkg(cwd);
|
|
|
|
}
|
|
|
|
|
|
|
|
function checkPkg(path) {
|
|
|
|
const pkgPath = join(path, 'package.json');
|
|
|
|
|
|
|
|
return readFile(pkgPath).then(content => {
|
|
|
|
const json = JSON.parse(content);
|
|
|
|
if (typeof json.hexo === 'object') return path;
|
|
|
|
}).catch(err => {
|
|
|
|
if (err && err.code === 'ENOENT') {
|
|
|
|
const parent = dirname(path);
|
|
|
|
|
|
|
|
if (parent === path) return;
|
|
|
|
return checkPkg(parent);
|
|
|
|
}
|
|
|
|
|
|
|
|
throw err;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = findPkg;
|