diff --git a/src/findPlugins.js b/src/findPlugins.js index 58d3855..8cb8818 100644 --- a/src/findPlugins.js +++ b/src/findPlugins.js @@ -9,13 +9,29 @@ const flatten = require('lodash').flatten; * @param {String} dependency Name of the dependency * @return {Boolean} If dependency is a rnpm plugin */ -const isPlugin = (dependency) => !!~dependency.indexOf('rnpm-plugin-'); +const isRNPMPlugin = (dependency) => !!~dependency.indexOf('rnpm-plugin-'); +const isReactNativePlugin = (dependency) => !!~dependency.indexOf('react-native-'); -const findPluginInFolder = (folder) => { - var pjson; +const readPackage = (folder) => { try { - pjson = require(path.join(folder, 'package.json')); + return require(path.join(folder, 'package.json')); } catch (e) { + return null; + } +}; + +const findPluginsInReactNativePackage = (pjson) => { + if (!pjson.rnpm || !pjson.rnpm.plugin) { + return []; + } + + return path.join(pjson.name, pjson.rnpm.plugin); +}; + +const findPluginInFolder = (folder) => { + const pjson = readPackage(folder); + + if (!pjson) { return []; } @@ -24,7 +40,22 @@ const findPluginInFolder = (folder) => { Object.keys(pjson.devDependencies || {}) ); - return deps.filter(isPlugin); + return deps.reduce( + (acc, pkg) => { + if (isRNPMPlugin(pkg)) { + return acc.concat(pkg); + } + if (isReactNativePlugin(pkg)) { + const pjson = readPackage(path.join(folder, 'node_modules', pkg)); + if (!pjson) { + return acc; + } + return acc.concat(findPluginsInReactNativePackage(pjson)); + } + return acc; + }, + [] + ); }; /**