123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 'use strict'
- var validate = require('aproba')
- var moduleName = require('../utils/module-name.js')
- module.exports = flattenTree
- module.exports.flatName = flatName
- module.exports.flatNameFromTree = flatNameFromTree
- function 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)
- }
|