Skip to content

Commit 157554d

Browse files
authored
Fix context menu functions on RN 0.57 (#263)
* Use __r from RN >= 0.57 as metro require in debugger worker * Fix patchFetchPolyfill for RN 0.57
1 parent e7125cb commit 157554d

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

app/middlewares/delta/patchFetchPolyfill.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ const isFetch = [
1111
* RN >= 0.56
1212
*/
1313
/,"whatwg-fetch.js"\)/,
14+
/*
15+
* RN >= 0.57, it is now in react-native/Libraries/vendor/core/
16+
*/
17+
/"node_modules\/react-native\/Libraries\/vendor\/core\/whatwg-fetch.js"/,
1418
];
1519

1620
const fetchSupportFlag = /(var support )(=)( {)/g;

app/worker/utils.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable no-underscore-dangle */
22

3-
// Avoid warning of use `window.require` on dev mode
3+
// Avoid warning of use metro require on dev mode
44
// it actually unnecessary for RN >= 0.56, so it is backward compatibility
55
const avoidWarnForRequire = moduleNames => {
66
if (!moduleNames.length) moduleNames.push('NativeModules');
@@ -26,9 +26,17 @@ const avoidWarnForRequire = moduleNames => {
2626

2727
let reactNative;
2828

29+
const getRequireMethod = () => {
30+
// RN >= 0.57
31+
if (typeof window.__r === 'function') return window.__r;
32+
// RN < 0.57
33+
if (typeof window.require === 'function') return window.require;
34+
};
35+
2936
const lookupForRNModules = (size = 999) => {
37+
const metroRequire = getRequireMethod();
3038
for (let moduleId = 0; moduleId <= size - 1; moduleId++) {
31-
const rn = window.require(moduleId);
39+
const rn = metroRequire(moduleId);
3240
if (rn.requireNativeComponent && rn.NativeModules) {
3341
return rn;
3442
}
@@ -39,12 +47,13 @@ const lookupForRNModules = (size = 999) => {
3947
const getModule = (name, size) => {
4048
let result;
4149
try {
50+
const metroRequire = getRequireMethod();
4251
// RN >= 0.56
43-
if (window.require.name === 'metroRequire') {
52+
if (metroRequire.name === 'metroRequire') {
4453
reactNative = global.$reactNative = reactNative || lookupForRNModules(size);
4554
result = reactNative && reactNative[name];
46-
} else if (window.require.name === '_require') {
47-
result = window.require(name);
55+
} else if (metroRequire.name === '_require') {
56+
result = metroRequire(name);
4857
}
4958
} catch (e) {} // eslint-disable-line
5059
return result || { __empty: true };
@@ -61,7 +70,7 @@ const requiredModules = {
6170
};
6271

6372
export const getRequiredModules = async size => {
64-
if (!window.__DEV__ || typeof window.require !== 'function') return;
73+
if (!window.__DEV__ || !getRequireMethod()) return;
6574
const done = await avoidWarnForRequire(Object.keys(requiredModules));
6675
const modules = {};
6776
for (const name of Object.keys(requiredModules)) {

0 commit comments

Comments
 (0)