| 123456789101112131415161718192021222324252627282930313233343536373839404142 | 'use strict'var validate = require('aproba')var moduleName = require('../utils/module-name.js')module.exports = flattenTreemodule.exports.flatName = flatNamemodule.exports.flatNameFromTree = flatNameFromTreefunction flattenTree (tree) {  validate('O', arguments)  var seen = new Set()  var flat = {}  var todo = [[tree, '/']]  while (todo.length) {    var next = todo.shift()    var pkg = next[0]    seen.add(pkg)    var path = next[1]    flat[path] = pkg    if (path !== '/') path += '/'    for (var ii = 0; ii < pkg.children.length; ++ii) {      var child = pkg.children[ii]      if (!seen.has(child)) {        todo.push([child, flatName(path, child)])      }    }  }  return flat}function flatName (path, child) {  validate('SO', arguments)  return path + (moduleName(child) || 'TOP')}function flatNameFromTree (tree) {  validate('O', arguments)  if (tree.isTop) return '/'  var path = flatNameFromTree(tree.parent)  if (path !== '/') path += '/'  return flatName(path, tree)}
 |