1 | let { resolve, parse, dirname } = require('path')
|
2 | let { existsSync } = require('fs')
|
3 | let { readFile } = require('fs').promises
|
4 |
|
5 | async function readPkg(cwd) {
|
6 | let filePath = resolve(cwd, 'package.json')
|
7 | return JSON.parse(await readFile(filePath, 'utf8'))
|
8 | }
|
9 |
|
10 | async 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 |
|
29 | module.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 | }
|