1 'use strict' 2 var path = require('path') 3 4 module.exports = moduleName 5 module.exports.test = {} 6 7 module.exports.test.pathToPackageName = pathToPackageName 8 function pathToPackageName (dir) { 9 if (dir == null) return '' 10 if (dir === '') return '' 11 var name = path.relative(path.resolve(dir, '..'), dir) 12 var scoped = path.relative(path.resolve(dir, '../..'), dir) 13 if (scoped[0] === '@') return scoped.replace(/\\/g, '/') 14 return name.trim() 15 } 16 17 module.exports.test.isNotEmpty = isNotEmpty 18 function isNotEmpty (str) { 19 return str != null && str !== '' 20 } 21 22 var unknown = 0 23 function moduleName (tree) { 24 if (tree.name) { return tree.name } 25 var pkg = tree.package || tree 26 if (isNotEmpty(pkg.name) && typeof pkg.name === 'string') return pkg.name.trim() 27 var pkgName = pathToPackageName(tree.path) 28 if (pkgName !== '') return pkgName 29 if (tree._invalidName != null) return tree._invalidName 30 tree._invalidName = '!invalid#' + (++unknown) 31 return tree._invalidName 32 } 33