Skip to content

Commit 5b4b6e7

Browse files
sebmarkbagezpao
authored andcommitted
Merge pull request #6338 from sebmarkbage/reactnative2
Move React Core Integration and Injection to the Core Repo (cherry picked from commit c84ad52)
1 parent f565c92 commit 5b4b6e7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+3749
-22
lines changed

.babelrc

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"plugins": [
55
"fbjs-scripts/babel-6/dev-expression",
66
"syntax-trailing-function-commas",
7+
"babel-plugin-transform-object-rest-spread",
78
"transform-es2015-template-literals",
89
"transform-es2015-literals",
910
"transform-es2015-arrow-functions",

.travis.yml

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ script:
5858
-F "react-dom-server.min=@build/react-dom-server.min.js" \
5959
-F "npm-react=@build/packages/react.tgz" \
6060
-F "npm-react-dom=@build/packages/react-dom.tgz" \
61+
-F "npm-react-native=@build/packages/react-native-renderer.tgz" \
6162
-F "commit=$TRAVIS_COMMIT" \
6263
-F "date=`git log --format='%ct' -1`" \
6364
-F "pull_request=$TRAVIS_PULL_REQUEST" \

Gruntfile.js

+6
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ module.exports = function(grunt) {
7474
grunt.registerTask('npm-react-dom:release', npmReactDOMTasks.buildRelease);
7575
grunt.registerTask('npm-react-dom:pack', npmReactDOMTasks.packRelease);
7676

77+
var npmReactNativeTasks = require('./grunt/tasks/npm-react-native');
78+
grunt.registerTask('npm-react-native:release', npmReactNativeTasks.buildRelease);
79+
grunt.registerTask('npm-react-native:pack', npmReactNativeTasks.packRelease);
80+
7781
var npmReactAddonsTasks = require('./grunt/tasks/npm-react-addons');
7882
grunt.registerTask('npm-react-addons:release', npmReactAddonsTasks.buildReleases);
7983
grunt.registerTask('npm-react-addons:pack', npmReactAddonsTasks.packReleases);
@@ -127,6 +131,8 @@ module.exports = function(grunt) {
127131
'npm-react:pack',
128132
'npm-react-dom:release',
129133
'npm-react-dom:pack',
134+
'npm-react-native:release',
135+
'npm-react-native:pack',
130136
'npm-react-addons:release',
131137
'npm-react-addons:pack',
132138
'compare_size',

grunt/tasks/npm-react-native.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
'use strict';
2+
3+
var fs = require('fs');
4+
var grunt = require('grunt');
5+
6+
var src = 'packages/react-native-renderer/';
7+
var dest = 'build/packages/react-native-renderer/';
8+
9+
function buildRelease() {
10+
if (grunt.file.exists(dest)) {
11+
grunt.file.delete(dest);
12+
}
13+
14+
// Copy to build/packages/react-native-renderer
15+
var mappings = [].concat(
16+
grunt.file.expandMapping('**/*', dest, {cwd: src}),
17+
grunt.file.expandMapping('{LICENSE,PATENTS}', dest)
18+
);
19+
mappings.forEach(function(mapping) {
20+
var mappingSrc = mapping.src[0];
21+
var mappingDest = mapping.dest;
22+
if (grunt.file.isDir(mappingSrc)) {
23+
grunt.file.mkdir(mappingDest);
24+
} else {
25+
grunt.file.copy(mappingSrc, mappingDest);
26+
}
27+
});
28+
}
29+
30+
function packRelease() {
31+
var done = this.async();
32+
var spawnCmd = {
33+
cmd: 'npm',
34+
args: ['pack', 'packages/react-native-renderer'],
35+
};
36+
grunt.util.spawn(spawnCmd, function() {
37+
var buildSrc = 'react-native-renderer-' + grunt.config.data.pkg.version + '.tgz';
38+
var buildDest = 'build/packages/react-native-renderer.tgz';
39+
fs.rename(buildSrc, buildDest, done);
40+
});
41+
}
42+
43+
module.exports = {
44+
buildRelease: buildRelease,
45+
packRelease: packRelease,
46+
};

grunt/tasks/version-check.js

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ module.exports = function() {
1111
grunt.file.readJSON('./packages/react/package.json').version,
1212
'packages/react-dom/package.json':
1313
grunt.file.readJSON('./packages/react-dom/package.json').version,
14+
'packages/react-native-renderer/package.json':
15+
grunt.file.readJSON('./packages/react-native-renderer/package.json').version,
1416
'packages/react-addons/package.json (version)': addonsData.version,
1517
// Get the "version" without the range bit
1618
'packages/react-addons/package.json (react dependency)': addonsData.peerDependencies.react.slice(1),

gulpfile.js

+29-9
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ var paths = {
2020
react: {
2121
src: [
2222
'src/**/*.js',
23+
'!src/**/__benchmarks__/**/*.js',
2324
'!src/**/__tests__/**/*.js',
2425
'!src/**/__mocks__/**/*.js',
2526
'!src/shared/vendor/**/*.js',
@@ -28,17 +29,36 @@ var paths = {
2829
},
2930
};
3031

32+
var fbjsModuleMap = require('fbjs/module-map');
33+
var moduleMap = {};
34+
for (var key in fbjsModuleMap) {
35+
moduleMap[key] = fbjsModuleMap[key];
36+
}
37+
var whiteListNames = [
38+
'deepDiffer',
39+
'deepFreezeAndThrowOnMutationInDev',
40+
'flattenStyle',
41+
'InitializeJavaScriptAppEngine',
42+
'InteractionManager',
43+
'JSTimersExecution',
44+
'merge',
45+
'Platform',
46+
'RCTEventEmitter',
47+
'RCTLog',
48+
'TextInputState',
49+
'UIManager',
50+
'View',
51+
];
52+
53+
whiteListNames.forEach(function(name) {
54+
moduleMap[name] = name;
55+
});
56+
57+
moduleMap['object-assign'] = 'object-assign';
58+
3159
var babelOpts = {
3260
plugins: [
33-
[babelPluginModules, {
34-
map: Object.assign(
35-
{},
36-
require('fbjs/module-map'),
37-
{
38-
'object-assign': 'object-assign',
39-
}
40-
),
41-
}],
61+
[babelPluginModules, { map: moduleMap }],
4262
],
4363
};
4464

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"babel-plugin-transform-es2015-template-literals": "^6.5.2",
2626
"babel-plugin-transform-es3-member-expression-literals": "^6.5.0",
2727
"babel-plugin-transform-es3-property-literals": "^6.5.0",
28+
"babel-plugin-transform-object-rest-spread": "^6.6.5",
2829
"babel-preset-react": "^6.5.0",
2930
"browserify": "^13.0.0",
3031
"bundle-collapser": "^1.1.1",
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# `react-native-renderer`
2+
3+
This package is the renderer that is used by the react-native package.
4+
It is intended to be used inside the react-native environment. It is not
5+
intended to be used stand alone.
+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
'use strict';
2+
3+
module.exports = require('react/lib/ReactNative');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"name": "react-native-renderer",
3+
"version": "16.0.0-alpha",
4+
"description": "React package for use inside react-native.",
5+
"main": "index.js",
6+
"repository": {
7+
"type": "git",
8+
"url": "git+https://github.com/facebook/react.git"
9+
},
10+
"keywords": [
11+
"react",
12+
"react-native"
13+
],
14+
"license": "BSD-3-Clause",
15+
"bugs": {
16+
"url": "https://github.com/facebook/react/issues"
17+
},
18+
"homepage": "https://facebook.github.io/react-native/",
19+
"dependencies": {
20+
"fbjs": "^0.8.0",
21+
"react": "^16.0.0-alpha"
22+
}
23+
}

packages/react/lib/ReactDOM.native.js

-12
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
* @providesModule IOSDefaultEventPluginOrder
10+
* @flow
11+
*/
12+
'use strict';
13+
14+
var IOSDefaultEventPluginOrder = [
15+
'ResponderEventPlugin',
16+
'IOSNativeBridgeEventPlugin',
17+
];
18+
19+
module.exports = IOSDefaultEventPluginOrder;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
* @providesModule IOSNativeBridgeEventPlugin
10+
* @flow
11+
*/
12+
'use strict';
13+
14+
var EventPropagators = require('EventPropagators');
15+
var SyntheticEvent = require('SyntheticEvent');
16+
var UIManager = require('UIManager');
17+
18+
var merge = require('merge');
19+
var warning = require('warning');
20+
21+
var customBubblingEventTypes = UIManager.customBubblingEventTypes;
22+
var customDirectEventTypes = UIManager.customDirectEventTypes;
23+
24+
var allTypesByEventName = {};
25+
26+
for (var bubblingTypeName in customBubblingEventTypes) {
27+
allTypesByEventName[bubblingTypeName] = customBubblingEventTypes[bubblingTypeName];
28+
}
29+
30+
for (var directTypeName in customDirectEventTypes) {
31+
warning(
32+
!customBubblingEventTypes[directTypeName],
33+
'Event cannot be both direct and bubbling: %s',
34+
directTypeName
35+
);
36+
allTypesByEventName[directTypeName] = customDirectEventTypes[directTypeName];
37+
}
38+
39+
var IOSNativeBridgeEventPlugin = {
40+
41+
eventTypes: merge(customBubblingEventTypes, customDirectEventTypes),
42+
43+
/**
44+
* @see {EventPluginHub.extractEvents}
45+
*/
46+
extractEvents: function(
47+
topLevelType,
48+
targetInst,
49+
nativeEvent,
50+
nativeEventTarget
51+
): ?Object {
52+
var bubbleDispatchConfig = customBubblingEventTypes[topLevelType];
53+
var directDispatchConfig = customDirectEventTypes[topLevelType];
54+
var event = SyntheticEvent.getPooled(
55+
bubbleDispatchConfig || directDispatchConfig,
56+
targetInst,
57+
nativeEvent,
58+
nativeEventTarget
59+
);
60+
if (bubbleDispatchConfig) {
61+
EventPropagators.accumulateTwoPhaseDispatches(event);
62+
} else if (directDispatchConfig) {
63+
EventPropagators.accumulateDirectDispatches(event);
64+
} else {
65+
return null;
66+
}
67+
return event;
68+
},
69+
};
70+
71+
module.exports = IOSNativeBridgeEventPlugin;

0 commit comments

Comments
 (0)