mirror of
https://github.com/nodejs/node.git
synced 2025-05-21 17:44:15 +00:00

PR-URL: https://github.com/nodejs/node/pull/36293 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
const fs = require('fs')
|
|
const promisify = require('util').promisify
|
|
const readFile = promisify(fs.readFile)
|
|
const writeFile = promisify(fs.writeFile)
|
|
const {resolve} = require('path')
|
|
|
|
const parseJSON = require('json-parse-even-better-errors')
|
|
|
|
const { orderDeps } = require('./dep-spec.js')
|
|
|
|
const depTypes = new Set([
|
|
'dependencies',
|
|
'optionalDependencies',
|
|
'devDependencies',
|
|
'peerDependencies',
|
|
])
|
|
|
|
async function updateRootPackageJson ({ tree }) {
|
|
const filename = resolve(tree.path, 'package.json')
|
|
const originalContent = await readFile(filename, 'utf8')
|
|
.then(data => parseJSON(data))
|
|
.catch(() => null)
|
|
|
|
const depsData = orderDeps({
|
|
...tree.package,
|
|
})
|
|
|
|
// if there's no package.json, just use internal pkg info as source of truth
|
|
const packageJsonContent = originalContent || depsData
|
|
|
|
// loop through all types of dependencies and update package json content
|
|
for (const type of depTypes)
|
|
packageJsonContent[type] = depsData[type]
|
|
|
|
// format content
|
|
const {
|
|
[Symbol.for('indent')]: indent,
|
|
[Symbol.for('newline')]: newline,
|
|
} = tree.package
|
|
const format = indent === undefined ? ' ' : indent
|
|
const eol = newline === undefined ? '\n' : newline
|
|
const content = (JSON.stringify(packageJsonContent, null, format) + '\n')
|
|
.replace(/\n/g, eol)
|
|
|
|
return writeFile(filename, content)
|
|
}
|
|
|
|
module.exports = updateRootPackageJson
|