| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 'use strict'var path = require('path')var writeFileAtomic = require('write-file-atomic')var moduleName = require('../utils/module-name.js')var deepSortObject = require('../utils/deep-sort-object.js')var sortedObject = require('sorted-object')var isWindows = require('../utils/is-windows.js')var sortKeys = [  'dependencies', 'devDependencies', 'bundleDependencies',  'optionalDependencies', 'keywords', 'engines', 'scripts',  'files']module.exports = function (mod, buildpath, next) {  var pkg = sortedObject(mod.package)  var name = moduleName(mod)  // Add our diagnostic keys to the package.json.  // Note that there are folks relying on these, for ex, the Visual Studio  // Node.js addon.  pkg._requiredBy =    mod.requiredBy      .map(function (req) {        if (          req.package.devDependencies &&          req.package.devDependencies[name] &&          !req.package.dependencies[name]        ) {          return '#DEV:' + req.location        } else {          return req.location        }      })      .concat(mod.userRequired ? ['#USER'] : [])      .sort()  pkg._location = mod.location  pkg._phantomChildren = {}  Object.keys(mod.phantomChildren).sort().forEach(function (name) {    pkg._phantomChildren[name] = mod.phantomChildren[name].package.version  })  pkg._inBundle = !!mod.fromBundle  // sort keys that are known safe to sort to produce more consistent output  sortKeys.forEach(function (key) {    if (pkg[key] != null) pkg[key] = deepSortObject(pkg[key])  })  var data = JSON.stringify(sortedObject(pkg), null, 2) + '\n'  writeFileAtomic(path.resolve(buildpath, 'package.json'), data, {    // We really don't need this guarantee, and fsyncing here is super slow. Except on    // Windows where there isn't a big performance difference and it prevents errors when    // rolling back optional packages (#17671)    fsync: isWindows  }, next)}
 |