From 93f5bb3b1f10cb6011f1770132067fc58df39f3b Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Sat, 23 Dec 2023 17:44:38 -0600 Subject: Bump react-native to 0.73.1, expo to 50 (#2214) * Bump to react-native@0.73, bump expo@next Includes bumps for all expo deps and dev dependencies. Updates react-native patch and others, and removes the babel-preset-expo patch. * Remove duplicate Splash ref * Bump more deps * Properly install expo-notifications * Bump webview dep * Bump packages according to expo fix; remove pager-view patch as it is no longer needed * Don't access expo-camera from Web * Fix crypto dep on web * Fix some type issues * Build esnext modules to support dynamic imports --------- Co-authored-by: Paul Frazee --- patches/babel-preset-expo+9.5.2.patch | 14 -------- patches/metro+0.76.8.patch | 44 ----------------------- patches/metro+0.80.1.patch | 44 +++++++++++++++++++++++ patches/metro-runtime+0.76.8.patch | 50 -------------------------- patches/metro-runtime+0.80.1.patch | 50 ++++++++++++++++++++++++++ patches/metro-transform-worker+0.76.8.patch | 41 ---------------------- patches/metro-transform-worker+0.80.1.patch | 41 ++++++++++++++++++++++ patches/react-native+0.72.5.patch | 17 --------- patches/react-native+0.73.0.patch | 17 +++++++++ patches/react-native-pager-view+6.1.4.patch | 54 ----------------------------- 10 files changed, 152 insertions(+), 220 deletions(-) delete mode 100644 patches/babel-preset-expo+9.5.2.patch delete mode 100644 patches/metro+0.76.8.patch create mode 100644 patches/metro+0.80.1.patch delete mode 100644 patches/metro-runtime+0.76.8.patch create mode 100644 patches/metro-runtime+0.80.1.patch delete mode 100644 patches/metro-transform-worker+0.76.8.patch create mode 100644 patches/metro-transform-worker+0.80.1.patch delete mode 100644 patches/react-native+0.72.5.patch create mode 100644 patches/react-native+0.73.0.patch delete mode 100644 patches/react-native-pager-view+6.1.4.patch (limited to 'patches') diff --git a/patches/babel-preset-expo+9.5.2.patch b/patches/babel-preset-expo+9.5.2.patch deleted file mode 100644 index 5e328c224..000000000 --- a/patches/babel-preset-expo+9.5.2.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/node_modules/babel-preset-expo/index.js b/node_modules/babel-preset-expo/index.js -index 2099ee3..2b9e092 100644 ---- a/node_modules/babel-preset-expo/index.js -+++ b/node_modules/babel-preset-expo/index.js -@@ -105,7 +105,8 @@ module.exports = function (api, options = {}) { - ], - ], - plugins: [ -- getObjectRestSpreadPlugin(), -+ // - dan: This will be disabled anyway when we upgrade Expo, but let's do it now. -+ // getObjectRestSpreadPlugin(), - ...extraPlugins, - getAliasPlugin(), - [require.resolve('@babel/plugin-proposal-decorators'), { legacy: true }], diff --git a/patches/metro+0.76.8.patch b/patches/metro+0.76.8.patch deleted file mode 100644 index f8ef67c84..000000000 --- a/patches/metro+0.76.8.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff --git a/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js b/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js -index 48a1409..ef185c9 100644 ---- a/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js -+++ b/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js -@@ -70,14 +70,19 @@ function wrapModule( - importDefaultName, - importAllName, - dependencyMapName, -- globalPrefix -+ globalPrefix, -+ moduleFactoryName - ) { - const params = buildParameters( - importDefaultName, - importAllName, - dependencyMapName - ); -- const factory = functionFromProgram(fileAst.program, params); -+ const factory = functionFromProgram( -+ fileAst.program, -+ params, -+ moduleFactoryName -+ ); - const def = t.callExpression(t.identifier(`${globalPrefix}__d`), [factory]); - const ast = t.file(t.program([t.expressionStatement(def)])); - const requireName = renameRequires(ast); -@@ -107,7 +112,16 @@ function wrapJson(source, globalPrefix) { - "});", - ].join("\n"); - } --function functionFromProgram(program, parameters) { -+const JS_INVALID_IDENT_RE = /[^a-zA-Z0-9$_]/g; -+function functionFromProgram(program, parameters, moduleFactoryName) { -+ let identifier; -+ if (typeof moduleFactoryName === "string" && moduleFactoryName !== "") { -+ // Keep the name readable so it shows up in profiler traces. -+ // Add an unlikely suffix to avoid collisions with the module code. -+ identifier = t.identifier( -+ `${moduleFactoryName.replace(JS_INVALID_IDENT_RE, "_")}__module_factory__` -+ ); -+ } - return t.functionExpression( - undefined, - parameters.map(makeIdentifier), diff --git a/patches/metro+0.80.1.patch b/patches/metro+0.80.1.patch new file mode 100644 index 000000000..f8ef67c84 --- /dev/null +++ b/patches/metro+0.80.1.patch @@ -0,0 +1,44 @@ +diff --git a/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js b/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js +index 48a1409..ef185c9 100644 +--- a/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js ++++ b/node_modules/metro/src/ModuleGraph/worker/JsFileWrapping.js +@@ -70,14 +70,19 @@ function wrapModule( + importDefaultName, + importAllName, + dependencyMapName, +- globalPrefix ++ globalPrefix, ++ moduleFactoryName + ) { + const params = buildParameters( + importDefaultName, + importAllName, + dependencyMapName + ); +- const factory = functionFromProgram(fileAst.program, params); ++ const factory = functionFromProgram( ++ fileAst.program, ++ params, ++ moduleFactoryName ++ ); + const def = t.callExpression(t.identifier(`${globalPrefix}__d`), [factory]); + const ast = t.file(t.program([t.expressionStatement(def)])); + const requireName = renameRequires(ast); +@@ -107,7 +112,16 @@ function wrapJson(source, globalPrefix) { + "});", + ].join("\n"); + } +-function functionFromProgram(program, parameters) { ++const JS_INVALID_IDENT_RE = /[^a-zA-Z0-9$_]/g; ++function functionFromProgram(program, parameters, moduleFactoryName) { ++ let identifier; ++ if (typeof moduleFactoryName === "string" && moduleFactoryName !== "") { ++ // Keep the name readable so it shows up in profiler traces. ++ // Add an unlikely suffix to avoid collisions with the module code. ++ identifier = t.identifier( ++ `${moduleFactoryName.replace(JS_INVALID_IDENT_RE, "_")}__module_factory__` ++ ); ++ } + return t.functionExpression( + undefined, + parameters.map(makeIdentifier), diff --git a/patches/metro-runtime+0.76.8.patch b/patches/metro-runtime+0.76.8.patch deleted file mode 100644 index 65303775d..000000000 --- a/patches/metro-runtime+0.76.8.patch +++ /dev/null @@ -1,50 +0,0 @@ -diff --git a/node_modules/metro-runtime/src/polyfills/require.js b/node_modules/metro-runtime/src/polyfills/require.js -index ce67cb4..eeeae84 100644 ---- a/node_modules/metro-runtime/src/polyfills/require.js -+++ b/node_modules/metro-runtime/src/polyfills/require.js -@@ -22,6 +22,13 @@ global.__c = clear; - global.__registerSegment = registerSegment; - var modules = clear(); - -+if (__DEV__) { -+ // Added by Dan for module init logging. -+ global.__INIT_LOGS__ = [] -+ var initModuleCounter = 0 -+ var initModuleStack = [] -+} -+ - // Don't use a Symbol here, it would pull in an extra polyfill with all sorts of - // additional stuff (e.g. Array.from). - const EMPTY = {}; -@@ -303,7 +310,30 @@ function loadModuleImplementation(moduleId, module) { - throw module.error; - } - if (__DEV__) { -- var Systrace = requireSystrace(); -+ // Added by Dan for module init logging. -+ var Systrace = { -+ beginEvent(label) { -+ let fullLabel = initModuleCounter++ + ' ' + label -+ global.__INIT_LOGS__.push( -+ ' '.repeat(initModuleStack.length) + -+ ' ENTER ' + fullLabel -+ ) -+ initModuleStack.push({ -+ fullLabel, -+ startTime: nativePerformanceNow(), -+ }) -+ }, -+ endEvent() { -+ const res = initModuleStack.pop() -+ const fullLabel = res.fullLabel -+ const startTime = res.startTime -+ const timeElapsed = Math.round(nativePerformanceNow() - startTime) -+ global.__INIT_LOGS__.push( -+ ' '.repeat(initModuleStack.length) + -+ ' LEAVE ' + fullLabel + ' [' + timeElapsed + 'ms]', -+ ) -+ } -+ }; - var Refresh = requireRefresh(); - } - diff --git a/patches/metro-runtime+0.80.1.patch b/patches/metro-runtime+0.80.1.patch new file mode 100644 index 000000000..65303775d --- /dev/null +++ b/patches/metro-runtime+0.80.1.patch @@ -0,0 +1,50 @@ +diff --git a/node_modules/metro-runtime/src/polyfills/require.js b/node_modules/metro-runtime/src/polyfills/require.js +index ce67cb4..eeeae84 100644 +--- a/node_modules/metro-runtime/src/polyfills/require.js ++++ b/node_modules/metro-runtime/src/polyfills/require.js +@@ -22,6 +22,13 @@ global.__c = clear; + global.__registerSegment = registerSegment; + var modules = clear(); + ++if (__DEV__) { ++ // Added by Dan for module init logging. ++ global.__INIT_LOGS__ = [] ++ var initModuleCounter = 0 ++ var initModuleStack = [] ++} ++ + // Don't use a Symbol here, it would pull in an extra polyfill with all sorts of + // additional stuff (e.g. Array.from). + const EMPTY = {}; +@@ -303,7 +310,30 @@ function loadModuleImplementation(moduleId, module) { + throw module.error; + } + if (__DEV__) { +- var Systrace = requireSystrace(); ++ // Added by Dan for module init logging. ++ var Systrace = { ++ beginEvent(label) { ++ let fullLabel = initModuleCounter++ + ' ' + label ++ global.__INIT_LOGS__.push( ++ ' '.repeat(initModuleStack.length) + ++ ' ENTER ' + fullLabel ++ ) ++ initModuleStack.push({ ++ fullLabel, ++ startTime: nativePerformanceNow(), ++ }) ++ }, ++ endEvent() { ++ const res = initModuleStack.pop() ++ const fullLabel = res.fullLabel ++ const startTime = res.startTime ++ const timeElapsed = Math.round(nativePerformanceNow() - startTime) ++ global.__INIT_LOGS__.push( ++ ' '.repeat(initModuleStack.length) + ++ ' LEAVE ' + fullLabel + ' [' + timeElapsed + 'ms]', ++ ) ++ } ++ }; + var Refresh = requireRefresh(); + } + diff --git a/patches/metro-transform-worker+0.76.8.patch b/patches/metro-transform-worker+0.76.8.patch deleted file mode 100644 index d835eee06..000000000 --- a/patches/metro-transform-worker+0.76.8.patch +++ /dev/null @@ -1,41 +0,0 @@ -diff --git a/node_modules/metro-transform-worker/src/index.js b/node_modules/metro-transform-worker/src/index.js -index 27d4cb3..fd71f47 100644 ---- a/node_modules/metro-transform-worker/src/index.js -+++ b/node_modules/metro-transform-worker/src/index.js -@@ -190,6 +190,10 @@ async function transformJS(file, { config, options, projectRoot }) { - let dependencyMapName = ""; - let dependencies; - let wrappedAst; -+ const minify = -+ options.minify && -+ options.unstable_transformProfile !== "hermes-canary" && -+ options.unstable_transformProfile !== "hermes-stable"; - - // If the module to transform is a script (meaning that is not part of the - // dependency graph and it code will just be prepended to the bundle modules), -@@ -229,19 +233,20 @@ async function transformJS(file, { config, options, projectRoot }) { - if (config.unstable_disableModuleWrapping === true) { - wrappedAst = ast; - } else { -+ let moduleFactoryName; -+ if (options.dev && !minify) { -+ moduleFactoryName = file.filename; -+ } - ({ ast: wrappedAst } = JsFileWrapping.wrapModule( - ast, - importDefault, - importAll, - dependencyMapName, -- config.globalPrefix -+ config.globalPrefix, -+ moduleFactoryName - )); - } - } -- const minify = -- options.minify && -- options.unstable_transformProfile !== "hermes-canary" && -- options.unstable_transformProfile !== "hermes-stable"; - const reserved = []; - if (config.unstable_dependencyMapReservedName != null) { - reserved.push(config.unstable_dependencyMapReservedName); diff --git a/patches/metro-transform-worker+0.80.1.patch b/patches/metro-transform-worker+0.80.1.patch new file mode 100644 index 000000000..65f44e578 --- /dev/null +++ b/patches/metro-transform-worker+0.80.1.patch @@ -0,0 +1,41 @@ +diff --git a/node_modules/metro-transform-worker/src/index.js b/node_modules/metro-transform-worker/src/index.js +index cae11e7..42f251b 100644 +--- a/node_modules/metro-transform-worker/src/index.js ++++ b/node_modules/metro-transform-worker/src/index.js +@@ -189,6 +189,10 @@ async function transformJS(file, { config, options, projectRoot }) { + let dependencyMapName = ""; + let dependencies; + let wrappedAst; ++ const minify = ++ options.minify && ++ options.unstable_transformProfile !== "hermes-canary" && ++ options.unstable_transformProfile !== "hermes-stable"; + + // If the module to transform is a script (meaning that is not part of the + // dependency graph and it code will just be prepended to the bundle modules), +@@ -228,19 +232,20 @@ async function transformJS(file, { config, options, projectRoot }) { + if (config.unstable_disableModuleWrapping === true) { + wrappedAst = ast; + } else { ++ let moduleFactoryName; ++ if (options.dev && !minify) { ++ moduleFactoryName = file.filename; ++ } + ({ ast: wrappedAst } = JsFileWrapping.wrapModule( + ast, + importDefault, + importAll, + dependencyMapName, +- config.globalPrefix ++ config.globalPrefix, ++ moduleFactoryName + )); + } + } +- const minify = +- options.minify && +- options.unstable_transformProfile !== "hermes-canary" && +- options.unstable_transformProfile !== "hermes-stable"; + const reserved = []; + if (config.unstable_dependencyMapReservedName != null) { + reserved.push(config.unstable_dependencyMapReservedName); diff --git a/patches/react-native+0.72.5.patch b/patches/react-native+0.72.5.patch deleted file mode 100644 index d640f6c9e..000000000 --- a/patches/react-native+0.72.5.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m b/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m -index 9dca6a5..090bda5 100644 ---- a/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m -+++ b/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.m -@@ -266,11 +266,10 @@ static void *TextFieldSelectionObservingContext = &TextFieldSelectionObservingCo - - - (void)textViewDidChangeSelection:(__unused UITextView *)textView - { -- if (_lastStringStateWasUpdatedWith && ![_lastStringStateWasUpdatedWith isEqual:_backedTextInputView.attributedText]) { -+ if (![_lastStringStateWasUpdatedWith isEqual:_backedTextInputView.attributedText]) { - [self textViewDidChange:_backedTextInputView]; - _ignoreNextTextInputCall = YES; - } -- _lastStringStateWasUpdatedWith = _backedTextInputView.attributedText; - [self textViewProbablyDidChangeSelection]; - } - diff --git a/patches/react-native+0.73.0.patch b/patches/react-native+0.73.0.patch new file mode 100644 index 000000000..66f7f7647 --- /dev/null +++ b/patches/react-native+0.73.0.patch @@ -0,0 +1,17 @@ +diff --git a/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm b/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm +index 9dca6a5..090bda5 100644 +--- a/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm ++++ b/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm +@@ -266,11 +266,10 @@ static void *TextFieldSelectionObservingContext = &TextFieldSelectionObservingCo + + - (void)textViewDidChangeSelection:(__unused UITextView *)textView + { +- if (_lastStringStateWasUpdatedWith && ![_lastStringStateWasUpdatedWith isEqual:_backedTextInputView.attributedText]) { ++ if (![_lastStringStateWasUpdatedWith isEqual:_backedTextInputView.attributedText]) { + [self textViewDidChange:_backedTextInputView]; + _ignoreNextTextInputCall = YES; + } +- _lastStringStateWasUpdatedWith = _backedTextInputView.attributedText; + [self textViewProbablyDidChangeSelection]; + } + diff --git a/patches/react-native-pager-view+6.1.4.patch b/patches/react-native-pager-view+6.1.4.patch deleted file mode 100644 index d6b4178ab..000000000 --- a/patches/react-native-pager-view+6.1.4.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/node_modules/react-native-pager-view/ios/ReactNativePageView.m b/node_modules/react-native-pager-view/ios/ReactNativePageView.m -index ab0fc7f..1ace752 100644 ---- a/node_modules/react-native-pager-view/ios/ReactNativePageView.m -+++ b/node_modules/react-native-pager-view/ios/ReactNativePageView.m -@@ -1,6 +1,6 @@ - - #import "ReactNativePageView.h" --#import "React/RCTLog.h" -+#import - #import - - #import "UIViewController+CreateExtension.h" -@@ -9,7 +9,7 @@ - #import "RCTOnPageSelected.h" - #import - --@interface ReactNativePageView () -+@interface ReactNativePageView () - - @property(nonatomic, strong) UIPageViewController *reactPageViewController; - @property(nonatomic, strong) RCTEventDispatcher *eventDispatcher; -@@ -80,6 +80,10 @@ - (void)didMoveToWindow { - [self setupInitialController]; - } - -+ UIPanGestureRecognizer* panGestureRecognizer = [UIPanGestureRecognizer new]; -+ panGestureRecognizer.delegate = self; -+ [self addGestureRecognizer: panGestureRecognizer]; -+ - if (self.reactViewController.navigationController != nil && self.reactViewController.navigationController.interactivePopGestureRecognizer != nil) { - [self.scrollView.panGestureRecognizer requireGestureRecognizerToFail:self.reactViewController.navigationController.interactivePopGestureRecognizer]; - } -@@ -463,4 +467,21 @@ - (NSString *)determineScrollDirection:(UIScrollView *)scrollView { - - (BOOL)isLtrLayout { - return [_layoutDirection isEqualToString:@"ltr"]; - } -+ -+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { -+ if (!_overdrag && otherGestureRecognizer == self.scrollView.panGestureRecognizer) { -+ UIPanGestureRecognizer* p = (UIPanGestureRecognizer*) gestureRecognizer; -+ CGPoint velocity = [p velocityInView:self]; -+ if (self.currentIndex == 0 && velocity.x > 0) { -+ self.scrollView.panGestureRecognizer.enabled = false; -+ return NO; -+ } else { -+ self.scrollView.panGestureRecognizer.enabled = self.scrollEnabled; -+ } -+ } else { -+ self.scrollView.panGestureRecognizer.enabled = self.scrollEnabled; -+ } -+ -+ return YES; -+} - @end -- cgit 1.4.1