react-native-contrib/rsx

View on GitHub
src/findPlugins.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

let path = require('path');
let utils  = require('rsx-common');

let union = utils._.union;
let unique = utils._.uniq;
let flatten = utils._.flattenDeep;

/**
 * Filter dependencies by name pattern
 * @param  {String} dependency Name of the dependency
 * @return {Boolean}           If dependency is a rnpm plugin
 */
const isPlugin = (dependency) => !!~dependency.indexOf('rsx-plugin-');

const findPluginInFolder = (folder) => {
    var pjson;
    try {
        pjson = require(path.join(folder, 'package.json'));
    } catch (e) {
        return [];
    }

    let deps = union(
        Object.keys(pjson.dependencies || {}),
        Object.keys(pjson.devDependencies || {})
    );

    return deps.filter(isPlugin);
};

/**
 * Find plugins in package.json of the given folder
 * @param {String} folder Path to the folder to get the package.json from
 * @type  {Array}         Array of plugins or an empty array if no package.json found
 */
module.exports = function findPlugins(folders) {
    return unique(flatten(folders.map(findPluginInFolder)));
};