UNPKG

817 BJavaScriptView Raw
1let { resolve, parse, dirname } = require('path')
2let { existsSync } = require('fs')
3let { readFile } = require('fs').promises
4
5async function readPkg(cwd) {
6 let filePath = resolve(cwd, 'package.json')
7 return JSON.parse(await readFile(filePath, 'utf8'))
8}
9
10async function findUp(name, cwd = '') {
11 let directory = resolve(cwd)
12 let { root } = parse(directory)
13
14 while (true) {
15 let foundPath = await resolve(directory, name)
16
17 if (existsSync(foundPath)) {
18 return foundPath
19 }
20
21 if (directory === root) {
22 return undefined
23 }
24
25 directory = dirname(directory)
26 }
27}
28
29module.exports = async cwd => {
30 let filePath = await findUp('package.json', cwd)
31
32 if (!filePath) {
33 return undefined
34 }
35
36 return {
37 packageJson: await readPkg(dirname(filePath)),
38 path: filePath
39 }
40}