Skip to content

Commit

Permalink
Add support for custom platform plugins in Haste
Browse files Browse the repository at this point in the history
  • Loading branch information
empyrical committed Aug 24, 2018
1 parent 3b688ae commit d7a0c6b
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 9 deletions.
18 changes: 14 additions & 4 deletions jest/hasteImpl.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,19 @@
'use strict';

const path = require('path');
const findPlugins = require('../local-cli/core/findPlugins');

const plugins = findPlugins([path.resolve(__dirname, '../../../')]);

const pluginRoots = plugins.haste.providesModuleNodeModules.map(
name => path.resolve(__dirname, '../../', name) + path.sep);

const pluginNameReducers = plugins.haste.platforms.map(
name => [new RegExp(`^(.*)\.(${name})$`), '$1']);

const ROOTS = [
path.resolve(__dirname, '..') + path.sep,
path.resolve(__dirname, '../../react-native-windows') + path.sep,
path.resolve(__dirname, '../../react-native-dom') + path.sep,
...pluginRoots
];

const BLACKLISTED_PATTERNS /*: Array<RegExp> */ = [
Expand All @@ -36,8 +44,10 @@ const NAME_REDUCERS /*: Array<[RegExp, string]> */ = [
[/^(?:.*[\\\/])?([a-zA-Z0-9$_.-]+)$/, '$1'],
// strip .js/.js.flow suffix
[/^(.*)\.js(\.flow)?$/, '$1'],
// strip .android/.ios/.native/.web suffix
[/^(.*)\.(android|ios|native|web|windows|dom)$/, '$1'],
// strip platform suffix
[/^(.*)\.(android|ios|native)$/, '$1'],
// strip plugin platform suffixes
...pluginNameReducers
];

const haste = {
Expand Down
29 changes: 26 additions & 3 deletions local-cli/core/findPlugins.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,28 @@ const findPlatformsInPackage = pjson => {
return path.join(pjson.name, pjson.rnpm.platform);
};

const findHasteConfigInPackageAndConcat = (pjson, haste) => {
if (!pjson.rnpm || !pjson.rnpm.haste) {
return;
}
let pkgHaste = pjson.rnpm.haste;

if (pkgHaste.platforms) {
haste.platforms = haste.platforms.concat(pkgHaste.platforms);
}

if (pkgHaste.providesModuleNodeModules) {
haste.providesModuleNodeModules =
haste.providesModuleNodeModules.concat(pkgHaste.providesModuleNodeModules);
}
};


const findPluginInFolder = folder => {
const pjson = readPackage(folder);

if (!pjson) {
return {commands: [], platforms: []};
return {commands: [], platforms: [], haste: {platforms: [], providesModuleNodeModules: []}};
}

const deps = union(
Expand All @@ -63,6 +80,7 @@ const findPluginInFolder = folder => {
(acc, pkg) => {
let commands = acc.commands;
let platforms = acc.platforms;
let haste = acc.haste;
if (isRNPMPlugin(pkg)) {
commands = commands.concat(pkg);
}
Expand All @@ -71,11 +89,12 @@ const findPluginInFolder = folder => {
if (pkgJson) {
commands = commands.concat(findPluginsInReactNativePackage(pkgJson));
platforms = platforms.concat(findPlatformsInPackage(pkgJson));
findHasteConfigInPackageAndConcat(pkgJson, haste);
}
}
return {commands: commands, platforms: platforms};
return {commands: commands, platforms: platforms, haste: haste};
},
{commands: [], platforms: []},
{commands: [], platforms: [], haste: {platforms: [], providesModuleNodeModules: []}},
);
};

Expand All @@ -89,5 +108,9 @@ module.exports = function findPlugins(folders) {
return {
commands: uniq(flatten(plugins.map(p => p.commands))),
platforms: uniq(flatten(plugins.map(p => p.platforms))),
haste: {
platforms: uniq(flatten(plugins.map(p => p.haste.platforms))),
providesModuleNodeModules: uniq(flatten(plugins.map(p => p.haste.providesModuleNodeModules)))
}
};
};
4 changes: 2 additions & 2 deletions local-cli/core/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,11 @@ const defaultConfig = {
hasteImplModulePath: require.resolve('../../jest/hasteImpl'),

getPlatforms(): Array<string> {
return ['ios', 'android', 'windows', 'web', 'dom'];
return ['ios', 'android', 'native', ...plugins.haste.platforms];
},

getProvidesModuleNodeModules(): Array<string> {
return ['react-native', 'react-native-windows', 'react-native-dom'];
return ['react-native', ...plugins.haste.providesModuleNodeModules];
},
};

Expand Down

0 comments on commit d7a0c6b

Please sign in to comment.