| 'use strict'; |
| const path = require('path'); |
| const resolveFrom = require('resolve-from'); |
| |
| module.exports = (moduleId, options = {}) => { |
| const parts = moduleId.replace(/\\/g, '/').split('/'); |
| let packageName = ''; |
| |
| // Handle scoped package name |
| if (parts.length > 0 && parts[0][0] === '@') { |
| packageName += parts.shift() + '/'; |
| } |
| |
| packageName += parts.shift(); |
| |
| const packageJson = path.join(packageName, 'package.json'); |
| const resolved = resolveFrom.silent(options.cwd || process.cwd(), packageJson); |
| |
| if (!resolved) { |
| return; |
| } |
| |
| return path.join(path.dirname(resolved), parts.join('/')); |
| }; |