reify-finish.js 946 B

1234567891011121314151617181920212223242526272829303132
  1. const reifyOutput = require('./reify-output.js')
  2. const ini = require('ini')
  3. const util = require('util')
  4. const fs = require('fs')
  5. const { writeFile } = fs.promises || { writeFile: util.promisify(fs.writeFile) }
  6. const {resolve} = require('path')
  7. const reifyFinish = async (npm, arb) => {
  8. await saveBuiltinConfig(npm, arb)
  9. reifyOutput(npm, arb)
  10. }
  11. const saveBuiltinConfig = async (npm, arb) => {
  12. const { options: { global }, actualTree } = arb
  13. if (!global)
  14. return
  15. // if we are using a builtin config, and just installed npm as
  16. // a top-level global package, we have to preserve that config.
  17. const npmNode = actualTree.inventory.get('node_modules/npm')
  18. if (!npmNode)
  19. return
  20. const builtinConf = npm.config.data.get('builtin')
  21. if (builtinConf.loadError)
  22. return
  23. const content = ini.stringify(builtinConf.raw).trim() + '\n'
  24. await writeFile(resolve(npmNode.path, 'npmrc'), content)
  25. }
  26. module.exports = reifyFinish