From 2c5e44719da33d876cef0ff63df5fe0145d198a9 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 28 Aug 2025 17:51:07 +0200 Subject: [PATCH 01/37] Testing reanimated v4 --- babel.config.js | 8 +-- package-lock.json | 28 ++++++++- package.json | 3 +- patches/react-native-reanimated/details.md | 15 ----- ...ted+3.19.1+002+dontWhitelistTextProp.patch | 12 ---- ...1+003+correctly-handle-Easing.bezier.patch | 62 ------------------- 6 files changed, 33 insertions(+), 95 deletions(-) delete mode 100644 patches/react-native-reanimated/react-native-reanimated+3.19.1+002+dontWhitelistTextProp.patch delete mode 100644 patches/react-native-reanimated/react-native-reanimated+3.19.1+003+correctly-handle-Easing.bezier.patch diff --git a/babel.config.js b/babel.config.js index e303de7eddd5..998f99b5c267 100644 --- a/babel.config.js +++ b/babel.config.js @@ -43,9 +43,9 @@ const defaultPluginsForWebpack = [ // We use `@babel/plugin-transform-class-properties` for transforming ReactNative libraries and do not use it for our own // source code transformation as we do not use class property assignment. '@babel/plugin-transform-class-properties', - + '@babel/plugin-proposal-export-namespace-from', // Keep it last - 'react-native-reanimated/plugin', + 'react-native-worklets/plugin', ]; // The Fullstory annotate plugin generated a few errors when executed in Electron. Let's @@ -81,8 +81,6 @@ const metro = { ['@babel/plugin-proposal-class-properties', {loose: true}], ['@babel/plugin-proposal-private-methods', {loose: true}], ['@babel/plugin-proposal-private-property-in-object', {loose: true}], - // The reanimated babel plugin needs to be last, as stated here: https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/installation - 'react-native-reanimated/plugin', /* Fullstory */ '@fullstory/react-native', @@ -132,6 +130,8 @@ const metro = { }, }, ], + // The reanimated babel plugin needs to be last, as stated here: https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/getting-started/ + 'react-native-worklets/plugin', ], env: { production: { diff --git a/package-lock.json b/package-lock.json index 997679f795a3..e11d41ac7131 100644 --- a/package-lock.json +++ b/package-lock.json @@ -117,7 +117,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "11.11.0", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "3.19.1", + "react-native-reanimated": "^3.19.1", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", @@ -131,6 +131,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", + "react-native-worklets": "^0.4.2", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1" @@ -31886,6 +31887,8 @@ }, "node_modules/react-native-reanimated": { "version": "3.19.1", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.19.1.tgz", + "integrity": "sha512-ILL0FSNzSVIg6WuawrsMBvNxk2yJFiTUcahimXDAeNiE/09eagVUlHhYWXAAmH0umvAOafBaGjO7YfBhUrf5ZQ==", "license": "MIT", "dependencies": { "@babel/plugin-transform-arrow-functions": "^7.0.0-0", @@ -32132,6 +32135,29 @@ "react-native": "*" } }, + "node_modules/react-native-worklets": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.4.2.tgz", + "integrity": "sha512-02IMmU2rOL6vrF7uA6cLAeN4haXOMTBh7opmVYQbjYG8mNAb0cnhmkvkdQupmpFjBpWZRJnBGYJJa471a/9IPg==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-arrow-functions": "^7.0.0-0", + "@babel/plugin-transform-class-properties": "^7.0.0-0", + "@babel/plugin-transform-classes": "^7.0.0-0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", + "@babel/plugin-transform-optional-chaining": "^7.0.0-0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", + "@babel/plugin-transform-template-literals": "^7.0.0-0", + "@babel/plugin-transform-unicode-regex": "^7.0.0-0", + "@babel/preset-typescript": "^7.16.7", + "convert-source-map": "^2.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native/node_modules/@react-native/normalize-colors": { "version": "0.79.2", "license": "MIT" diff --git a/package.json b/package.json index dcf32cb8613f..4ea4ca1ed507 100644 --- a/package.json +++ b/package.json @@ -187,7 +187,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "11.11.0", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "3.19.1", + "react-native-reanimated": "^3.19.1", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", @@ -201,6 +201,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", + "react-native-worklets": "^0.4.2", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1" diff --git a/patches/react-native-reanimated/details.md b/patches/react-native-reanimated/details.md index ec97da45b4a6..130e3d94c3ef 100644 --- a/patches/react-native-reanimated/details.md +++ b/patches/react-native-reanimated/details.md @@ -7,18 +7,3 @@ - Upstream PR/issue: 🛑 - E/App issue: 🛑 - PR Introducing Patch: [Upgrade to React Native 0.76](https://github.com/Expensify/App/pull/51475) - -### [react-native-reanimated+3.19.1+002+dontWhitelistTextProp.patch](react-native-reanimated+3.19.1+002+dontWhitelistTextProp.patch) - -- Reason: In Expensify `text` prop in a JS prop and not in native code. Recheck if this is still needed when migrating to v4. -- Upstream PR/issue: 🛑 -- E/App issue: 🛑 -- PR Introducing Patch: [NR 0.75 upgrade](https://github.com/Expensify/App/pull/45289) - -### [react-native-reanimated+3.19.1+003+correctly-handle-Easing.bezier.patch](react-native-reanimated+3.19.1+003+correctly-handle-Easing.bezier.patch) - -- Reason: The Easing.bezier animation doesn't work on web -- Upstream PR/issue: https://github.com/software-mansion/react-native-reanimated/pull/8049 -- E/App issue: https://github.com/Expensify/App/pull/63623 -- PR Introducing Patch: 🛑 - diff --git a/patches/react-native-reanimated/react-native-reanimated+3.19.1+002+dontWhitelistTextProp.patch b/patches/react-native-reanimated/react-native-reanimated+3.19.1+002+dontWhitelistTextProp.patch deleted file mode 100644 index 583cc7015ee4..000000000000 --- a/patches/react-native-reanimated/react-native-reanimated+3.19.1+002+dontWhitelistTextProp.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/node_modules/react-native-reanimated/src/component/PerformanceMonitor.tsx b/node_modules/react-native-reanimated/src/component/PerformanceMonitor.tsx -index d4b31f2..ced6561 100644 ---- a/node_modules/react-native-reanimated/src/component/PerformanceMonitor.tsx -+++ b/node_modules/react-native-reanimated/src/component/PerformanceMonitor.tsx -@@ -46,7 +46,6 @@ function createCircularDoublesBuffer(size: number) { - } - - const DEFAULT_BUFFER_SIZE = 20; --addWhitelistedNativeProps({ text: true }); - const AnimatedTextInput = createAnimatedComponent(TextInput); - - function loopAnimationFrame(fn: (lastTime: number, time: number) => void) { diff --git a/patches/react-native-reanimated/react-native-reanimated+3.19.1+003+correctly-handle-Easing.bezier.patch b/patches/react-native-reanimated/react-native-reanimated+3.19.1+003+correctly-handle-Easing.bezier.patch deleted file mode 100644 index b623fc7f758e..000000000000 --- a/patches/react-native-reanimated/react-native-reanimated+3.19.1+003+correctly-handle-Easing.bezier.patch +++ /dev/null @@ -1,62 +0,0 @@ -diff --git a/node_modules/react-native-reanimated/lib/module/layoutReanimation/web/Easing.web.js b/node_modules/react-native-reanimated/lib/module/layoutReanimation/web/Easing.web.js -index ed0f9d3..6baf136 100644 ---- a/node_modules/react-native-reanimated/lib/module/layoutReanimation/web/Easing.web.js -+++ b/node_modules/react-native-reanimated/lib/module/layoutReanimation/web/Easing.web.js -@@ -14,4 +14,18 @@ export const WebEasings = { - export function getEasingByName(easingName) { - return `cubic-bezier(${WebEasings[easingName].toString()})`; - } --//# sourceMappingURL=Easing.web.js.map -\ No newline at end of file -+export function maybeGetBezierEasing(easing) { -+ if (!('factory' in easing)) { -+ return null; -+ } -+ const easingFactory = easing.factory; -+ if (!('__closure' in easingFactory)) { -+ return null; -+ } -+ const closure = easingFactory.__closure; -+ if (!('Bezier' in closure)) { -+ return null; -+ } -+ return `cubic-bezier(${closure.x1}, ${closure.y1}, ${closure.x2}, ${closure.y2})`; -+} -+ -diff --git a/node_modules/react-native-reanimated/lib/module/layoutReanimation/web/componentUtils.js b/node_modules/react-native-reanimated/lib/module/layoutReanimation/web/componentUtils.js -index 7f724c4..ad53a74 100644 ---- a/node_modules/react-native-reanimated/lib/module/layoutReanimation/web/componentUtils.js -+++ b/node_modules/react-native-reanimated/lib/module/layoutReanimation/web/componentUtils.js -@@ -10,18 +10,28 @@ import { setElementPosition, snapshots } from "./componentStyle.js"; - import { Animations, TransitionType } from "./config.js"; - import { TransitionGenerator } from "./createAnimation.js"; - import { scheduleAnimationCleanup } from "./domUtils.js"; --import { getEasingByName, WebEasings } from "./Easing.web.js"; -+import { -+ getEasingByName, -+ maybeGetBezierEasing, -+ WebEasings -+} from "./Easing.web.js"; - import { prepareCurvedTransition } from "./transition/Curved.web.js"; - function getEasingFromConfig(config) { - if (!config.easingV) { - return getEasingByName('linear'); - } - const easingName = config.easingV[EasingNameSymbol]; -- if (!(easingName in WebEasings)) { -- logger.warn(`Selected easing is not currently supported on web.`); -+ if (easingName in WebEasings) { -+ return getEasingByName(easingName); -+ } -+ const bezierEasing = maybeGetBezierEasing(config.easingV); -+ if (!bezierEasing) { -+ logger.warn( -+ `Selected easing is not currently supported on web. Using linear easing instead.` -+ ); - return getEasingByName('linear'); - } -- return getEasingByName(easingName); -+ return bezierEasing; - } - function getRandomDelay(maxDelay = 1000) { - return Math.floor(Math.random() * (maxDelay + 1)) / 1000; From 8878252dc3a7223f1bc8cf507b407ec22b1d0bb6 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 29 Aug 2025 08:54:32 +0200 Subject: [PATCH 02/37] Bump reanimated to v4 --- package-lock.json | 49 ++++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index e11d41ac7131..6330ba3b5a34 100644 --- a/package-lock.json +++ b/package-lock.json @@ -117,7 +117,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "11.11.0", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "^3.19.1", + "react-native-reanimated": "^4.0.3", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", @@ -31448,7 +31448,9 @@ "license": "MIT" }, "node_modules/react-native-is-edge-to-edge": { - "version": "1.1.7", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.2.1.tgz", + "integrity": "sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q==", "license": "MIT", "peerDependencies": { "react": "*", @@ -31485,14 +31487,6 @@ "react-native-reanimated": ">=3.0.0" } }, - "node_modules/react-native-keyboard-controller/node_modules/react-native-is-edge-to-edge": { - "version": "1.2.1", - "license": "MIT", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, "node_modules/react-native-launch-arguments": { "version": "4.0.2", "license": "MIT", @@ -31886,28 +31880,31 @@ } }, "node_modules/react-native-reanimated": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.19.1.tgz", - "integrity": "sha512-ILL0FSNzSVIg6WuawrsMBvNxk2yJFiTUcahimXDAeNiE/09eagVUlHhYWXAAmH0umvAOafBaGjO7YfBhUrf5ZQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.0.3.tgz", + "integrity": "sha512-apXILxR2gRi3n0Xi0UILr+72vXj1etooOId/4nCgzKfNnvcp+dRzt7UQdFU0/nc+4bPWlSsiIskDxdYXr2KNmw==", "license": "MIT", "dependencies": { - "@babel/plugin-transform-arrow-functions": "^7.0.0-0", - "@babel/plugin-transform-class-properties": "^7.0.0-0", - "@babel/plugin-transform-classes": "^7.0.0-0", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", - "@babel/plugin-transform-optional-chaining": "^7.0.0-0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", - "@babel/plugin-transform-template-literals": "^7.0.0-0", - "@babel/plugin-transform-unicode-regex": "^7.0.0-0", - "@babel/preset-typescript": "^7.16.7", - "convert-source-map": "^2.0.0", - "invariant": "^2.2.4", - "react-native-is-edge-to-edge": "1.1.7" + "react-native-is-edge-to-edge": "^1.2.1", + "semver": "7.7.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0", "react": "*", - "react-native": "*" + "react-native": "*", + "react-native-worklets": ">=0.4.0" + } + }, + "node_modules/react-native-reanimated/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/react-native-release-profiler": { diff --git a/package.json b/package.json index 4ea4ca1ed507..cebbe9d43718 100644 --- a/package.json +++ b/package.json @@ -187,7 +187,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "11.11.0", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "^3.19.1", + "react-native-reanimated": "^4.0.3", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", From f35e02be4e2ae7b0b79222d91ac199b10b1c4a40 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 29 Aug 2025 09:29:14 +0200 Subject: [PATCH 03/37] Add live-markdown temporary patch --- ...wn+0.1.299+001+reanimated-v4-temp-backport.patch | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 patches/@expensify+react-native-live-markdown+0.1.299+001+reanimated-v4-temp-backport.patch diff --git a/patches/@expensify+react-native-live-markdown+0.1.299+001+reanimated-v4-temp-backport.patch b/patches/@expensify+react-native-live-markdown+0.1.299+001+reanimated-v4-temp-backport.patch new file mode 100644 index 000000000000..58a1ce535468 --- /dev/null +++ b/patches/@expensify+react-native-live-markdown+0.1.299+001+reanimated-v4-temp-backport.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec b/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec +index 21de59d..7165118 100644 +--- a/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec ++++ b/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec +@@ -24,7 +24,7 @@ Pod::Spec.new do |s| + + s.source_files = "apple/**/*.{h,m,mm}", "cpp/**/*.{h,cpp}" + +- s.dependency "RNReanimated/worklets" ++ s.dependency "RNWorklets" + + s.xcconfig = { + "OTHER_CFLAGS" => "$(inherited) -DREACT_NATIVE_MINOR_VERSION=#{react_native_minor_version}", From bd77f1ab98c40bbec55cff0299024d85eb9401f7 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 1 Sep 2025 14:44:16 +0200 Subject: [PATCH 04/37] Update patches and reanimated version --- package-lock.json | 33 +++++++++++++------ package.json | 4 +-- patches/react-native-reanimated/details.md | 2 +- ....0+001+catch-all-exceptions-on-stoi.patch} | 6 ++-- 4 files changed, 29 insertions(+), 16 deletions(-) rename patches/react-native-reanimated/{react-native-reanimated+3.19.1+001+catch-all-exceptions-on-stoi.patch => react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch} (87%) diff --git a/package-lock.json b/package-lock.json index 90f23f7e7695..0d1496074d50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -118,7 +118,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "11.11.0", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "^4.0.3", + "react-native-reanimated": "4.1", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", @@ -132,7 +132,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", - "react-native-worklets": "^0.4.2", + "react-native-worklets": "^0.5.0", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1" @@ -31893,9 +31893,9 @@ } }, "node_modules/react-native-reanimated": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.0.3.tgz", - "integrity": "sha512-apXILxR2gRi3n0Xi0UILr+72vXj1etooOId/4nCgzKfNnvcp+dRzt7UQdFU0/nc+4bPWlSsiIskDxdYXr2KNmw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.0.tgz", + "integrity": "sha512-L8FqZn8VjZyBaCUMYFyx1Y+T+ZTbblaudpxReOXJ66RnOf52g6UM4Pa/IjwLD1XAw1FUxLRQrtpdjbkEc74FiQ==", "license": "MIT", "dependencies": { "react-native-is-edge-to-edge": "^1.2.1", @@ -31905,7 +31905,7 @@ "@babel/core": "^7.0.0-0", "react": "*", "react-native": "*", - "react-native-worklets": ">=0.4.0" + "react-native-worklets": ">=0.5.0" } }, "node_modules/react-native-reanimated/node_modules/semver": { @@ -32146,9 +32146,9 @@ } }, "node_modules/react-native-worklets": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.4.2.tgz", - "integrity": "sha512-02IMmU2rOL6vrF7uA6cLAeN4haXOMTBh7opmVYQbjYG8mNAb0cnhmkvkdQupmpFjBpWZRJnBGYJJa471a/9IPg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.0.tgz", + "integrity": "sha512-+/tbUCBEVchxe5xxFvvdC18PRZFCoxq1emcjIezXodElFguk1MaBYpbqABvZHBGrrEOo9k99h4Jbt0i9ArCbxg==", "license": "MIT", "dependencies": { "@babel/plugin-transform-arrow-functions": "^7.0.0-0", @@ -32160,7 +32160,8 @@ "@babel/plugin-transform-template-literals": "^7.0.0-0", "@babel/plugin-transform-unicode-regex": "^7.0.0-0", "@babel/preset-typescript": "^7.16.7", - "convert-source-map": "^2.0.0" + "convert-source-map": "^2.0.0", + "semver": "7.7.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0", @@ -32168,6 +32169,18 @@ "react-native": "*" } }, + "node_modules/react-native-worklets/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/react-native/node_modules/@react-native/normalize-colors": { "version": "0.79.2", "license": "MIT" diff --git a/package.json b/package.json index cac4bb14fef5..a58be76f530a 100644 --- a/package.json +++ b/package.json @@ -188,7 +188,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "11.11.0", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "^4.0.3", + "react-native-reanimated": "4.1", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", @@ -202,7 +202,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", - "react-native-worklets": "^0.4.2", + "react-native-worklets": "^0.5.0", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1" diff --git a/patches/react-native-reanimated/details.md b/patches/react-native-reanimated/details.md index 130e3d94c3ef..33055066aaa6 100644 --- a/patches/react-native-reanimated/details.md +++ b/patches/react-native-reanimated/details.md @@ -1,7 +1,7 @@ # `react-native-reanimated` patches -### [react-native-reanimated+3.19.1+001+catch-all-exceptions-on-stoi.patch](react-native-reanimated+3.19.1+001+catch-all-exceptions-on-stoi.patch) +### [react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch](react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch) - Reason: Reanimated wasn't able to catch an exception here, so the catch clause was broadened. - Upstream PR/issue: 🛑 diff --git a/patches/react-native-reanimated/react-native-reanimated+3.19.1+001+catch-all-exceptions-on-stoi.patch b/patches/react-native-reanimated/react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch similarity index 87% rename from patches/react-native-reanimated/react-native-reanimated+3.19.1+001+catch-all-exceptions-on-stoi.patch rename to patches/react-native-reanimated/react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch index 2fdf25db7f64..4e168c22a926 100644 --- a/patches/react-native-reanimated/react-native-reanimated+3.19.1+001+catch-all-exceptions-on-stoi.patch +++ b/patches/react-native-reanimated/react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch @@ -1,8 +1,8 @@ diff --git a/node_modules/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.cpp b/node_modules/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.cpp -index 8102462..f2738d2 100644 +index 6574d2d..8cb9b2f 100644 --- a/node_modules/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.cpp +++ b/node_modules/react-native-reanimated/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy.cpp -@@ -853,7 +853,7 @@ void LayoutAnimationsProxy::transferConfigFromNativeID( +@@ -805,7 +805,7 @@ void LayoutAnimationsProxy::transferConfigFromNativeID( auto nativeId = stoi(nativeIdString); layoutAnimationsManager_->transferConfigFromNativeID(nativeId, tag); } catch (std::invalid_argument) { @@ -10,4 +10,4 @@ index 8102462..f2738d2 100644 + } catch (...) { } } - + From 95b331157935aff9f2527bc9791357aa1072fb08 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 1 Sep 2025 14:46:52 +0200 Subject: [PATCH 05/37] Update live-markdown patch --- ...e-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename patches/{@expensify+react-native-live-markdown+0.1.299+001+reanimated-v4-temp-backport.patch => @expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch} (100%) diff --git a/patches/@expensify+react-native-live-markdown+0.1.299+001+reanimated-v4-temp-backport.patch b/patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch similarity index 100% rename from patches/@expensify+react-native-live-markdown+0.1.299+001+reanimated-v4-temp-backport.patch rename to patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch From 6a8ba26c9d7eee3a7c46f27611223004eb92c9ba Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 3 Sep 2025 09:49:07 +0200 Subject: [PATCH 06/37] Fix versions --- package-lock.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d1496074d50..950ae1a2f3d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -118,7 +118,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "11.11.0", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "4.1", + "react-native-reanimated": "4.1.0", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", @@ -132,7 +132,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", - "react-native-worklets": "^0.5.0", + "react-native-worklets": "0.5.0", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1" diff --git a/package.json b/package.json index a58be76f530a..6f940b9ed32f 100644 --- a/package.json +++ b/package.json @@ -188,7 +188,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "11.11.0", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "4.1", + "react-native-reanimated": "4.1.0", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", @@ -202,7 +202,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", - "react-native-worklets": "^0.5.0", + "react-native-worklets": "0.5.0", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1" From e4e74af0a1a2d5d4862d0a4eccd9cc1b1d18eff5 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 3 Sep 2025 09:50:04 +0200 Subject: [PATCH 07/37] Remove patch for reduce motion animation --- ...04+reduce-motion-animation-callbacks.patch | 33 ------------------- 1 file changed, 33 deletions(-) delete mode 100644 patches/react-native-reanimated/react-native-reanimated+3.19.1+004+reduce-motion-animation-callbacks.patch diff --git a/patches/react-native-reanimated/react-native-reanimated+3.19.1+004+reduce-motion-animation-callbacks.patch b/patches/react-native-reanimated/react-native-reanimated+3.19.1+004+reduce-motion-animation-callbacks.patch deleted file mode 100644 index 03310811d5df..000000000000 --- a/patches/react-native-reanimated/react-native-reanimated+3.19.1+004+reduce-motion-animation-callbacks.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff --git a/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx b/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx -index a2f6cf1..93a37f5 100644 ---- a/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx -+++ b/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx -@@ -503,13 +503,6 @@ export function createAnimatedComponent( - return; - } - -- if (this._isReducedMotion(currentConfig)) { -- if (!previousConfig) { -- return; -- } -- currentConfig = undefined; -- } -- - updateLayoutAnimations( - isFabric() && type === LayoutAnimationType.ENTERING - ? this.reanimatedID -@@ -608,14 +601,6 @@ export function createAnimatedComponent( - }, - }); - -- _isReducedMotion(config?: LayoutAnimationOrBuilder): boolean { -- return config && -- 'getReduceMotion' in config && -- typeof config.getReduceMotion === 'function' -- ? getReduceMotionFromConfig(config.getReduceMotion()) -- : getReduceMotionFromConfig(); -- } -- - // This is a component lifecycle method from React, therefore we are not calling it directly. - // It is called before the component gets rerendered. This way we can access components' position before it changed - // and later on, in componentDidUpdate, calculate translation for layout transition. From 9031c0aa4a4f227e7bc109594ab1a9c77399305c Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 3 Sep 2025 14:43:44 +0200 Subject: [PATCH 08/37] Fix ts check with live markdown patch --- ....302+001+reanimated-v4-temp-backport.patch | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch b/patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch index 58a1ce535468..137e3ba31e0e 100644 --- a/patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch +++ b/patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch @@ -11,3 +11,29 @@ index 21de59d..7165118 100644 s.xcconfig = { "OTHER_CFLAGS" => "$(inherited) -DREACT_NATIVE_MINOR_VERSION=#{react_native_minor_version}", +diff --git a/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts b/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts +index e6ad088..90f2487 100644 +--- a/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts ++++ b/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts +@@ -2,7 +2,7 @@ import { TextInput } from 'react-native'; + import React from 'react'; + import type { TextInputProps } from 'react-native'; + import type { WorkletRuntime } from 'react-native-reanimated'; +-import type { ShareableRef, WorkletFunction } from 'react-native-reanimated/lib/typescript/commonTypes'; ++import type { ShareableRef, WorkletFunction } from 'react-native-worklets'; + import type { PartialMarkdownStyle } from './styleUtils'; + import type { InlineImagesInputProps, MarkdownRange } from './commonTypes'; + declare global { +diff --git a/node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx b/node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx +index 82ee895..55c0e90 100644 +--- a/node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx ++++ b/node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx +@@ -3,7 +3,7 @@ import React from 'react'; + import type {TextInputProps} from 'react-native'; + import {createWorkletRuntime, makeShareableCloneRecursive} from 'react-native-reanimated'; + import type {WorkletRuntime} from 'react-native-reanimated'; +-import type {ShareableRef, WorkletFunction} from 'react-native-reanimated/lib/typescript/commonTypes'; ++import type {ShareableRef, WorkletFunction} from 'react-native-worklets'; + + import MarkdownTextInputDecoratorViewNativeComponent from './MarkdownTextInputDecoratorViewNativeComponent'; + import type {MarkdownStyle} from './MarkdownTextInputDecoratorViewNativeComponent'; From d44c18125096ac8fa969b50e9568405e46527160 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 3 Sep 2025 14:58:05 +0200 Subject: [PATCH 09/37] Fix patch for live markdown --- ...wn+0.1.302+001+reanimated-v4-temp-backport.patch | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch b/patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch index 137e3ba31e0e..bad0ea448157 100644 --- a/patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch +++ b/patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch @@ -37,3 +37,16 @@ index 82ee895..55c0e90 100644 import MarkdownTextInputDecoratorViewNativeComponent from './MarkdownTextInputDecoratorViewNativeComponent'; import type {MarkdownStyle} from './MarkdownTextInputDecoratorViewNativeComponent'; +diff --git a/node_modules/@expensify/react-native-live-markdown/src/parseExpensiMark.ts b/node_modules/@expensify/react-native-live-markdown/src/parseExpensiMark.ts +index 6e14e25..38d92bb 100644 +--- a/node_modules/@expensify/react-native-live-markdown/src/parseExpensiMark.ts ++++ b/node_modules/@expensify/react-native-live-markdown/src/parseExpensiMark.ts +@@ -4,7 +4,7 @@ import {Platform} from 'react-native'; + import {ExpensiMark} from 'expensify-common'; + import {unescapeText} from 'expensify-common/dist/utils'; + import {decode} from 'html-entities'; +-import type {WorkletFunction} from 'react-native-reanimated/lib/typescript/commonTypes'; ++import type {WorkletFunction} from 'react-native-worklets'; + import type {MarkdownType, MarkdownRange} from './commonTypes'; + import {groupRanges, sortRanges, splitRangesOnEmojis} from './rangeUtils'; + From 582f5f917a14684346b1a1b9d7816f4198c1999d Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 3 Sep 2025 17:50:10 +0200 Subject: [PATCH 10/37] Remove patch name --- ....patch => @expensify+react-native-live-markdown+0.1.302.patch} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename patches/{@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch => @expensify+react-native-live-markdown+0.1.302.patch} (100%) diff --git a/patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch b/patches/@expensify+react-native-live-markdown+0.1.302.patch similarity index 100% rename from patches/@expensify+react-native-live-markdown+0.1.302+001+reanimated-v4-temp-backport.patch rename to patches/@expensify+react-native-live-markdown+0.1.302.patch From 7e93dd5e50927f3c1e082dae1fc4b12d49de7339 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 4 Sep 2025 16:55:04 +0200 Subject: [PATCH 11/37] Prepare live markdown temporary patch so the app builds on both android and ios --- Gemfile.lock | 8 +- ios/Podfile.lock | 81 ++++++--- ...y+react-native-live-markdown+0.1.302.patch | 168 +++++++++++++++++- 3 files changed, 227 insertions(+), 30 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 3c7253c08db7..fbaf94f378e9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -172,10 +172,10 @@ GEM google-apis-firebaseappdistribution_v1alpha (~> 0.2.0) fastlane-sirp (1.0.0) sysrandom (~> 1.0) - ffi (1.17.0) - ffi (1.17.0-arm64-darwin) - ffi (1.17.0-x86_64-darwin) - ffi (1.17.0-x86_64-linux) + ffi (1.17.2) + ffi (1.17.2-arm64-darwin) + ffi (1.17.2-x86_64-darwin) + ffi (1.17.2-x86_64-linux-gnu) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 01acb1c37bb9..709de39e249c 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2898,7 +2898,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/worklets + - RNWorklets - Yoga - RNLocalize (2.2.6): - React-Core @@ -3003,7 +3003,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated (3.19.1): + - RNReanimated (4.1.0): - DoubleConversion - glog - hermes-engine @@ -3026,10 +3026,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 3.19.1) - - RNReanimated/worklets (= 3.19.1) + - RNReanimated/reanimated (= 4.1.0) + - RNWorklets - Yoga - - RNReanimated/reanimated (3.19.1): + - RNReanimated/reanimated (4.1.0): - DoubleConversion - glog - hermes-engine @@ -3052,9 +3052,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 3.19.1) + - RNReanimated/reanimated/apple (= 4.1.0) + - RNWorklets - Yoga - - RNReanimated/reanimated/apple (3.19.1): + - RNReanimated/reanimated/apple (4.1.0): - DoubleConversion - glog - hermes-engine @@ -3077,8 +3078,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - RNWorklets - Yoga - - RNReanimated/worklets (3.19.1): + - RNScreens (4.12.0): - DoubleConversion - glog - hermes-engine @@ -3095,15 +3097,16 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/worklets/apple (= 3.19.1) + - RNScreens/common (= 4.12.0) - Yoga - - RNReanimated/worklets/apple (3.19.1): + - RNScreens/common (4.12.0): - DoubleConversion - glog - hermes-engine @@ -3120,6 +3123,7 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-RCTImage - React-renderercss - React-rendererdebug - React-utils @@ -3127,7 +3131,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNScreens (4.12.0): + - RNShare (11.0.2): - DoubleConversion - glog - hermes-engine @@ -3144,16 +3148,19 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric - - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens/common (= 4.12.0) - Yoga - - RNScreens/common (4.12.0): + - RNSound (0.11.2): + - React-Core + - RNSound/Core (= 0.11.2) + - RNSound/Core (0.11.2): + - React-Core + - RNSVG (15.9.0): - DoubleConversion - glog - hermes-engine @@ -3170,15 +3177,15 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric - - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - RNSVG/common (= 15.9.0) - Yoga - - RNShare (11.0.2): + - RNSVG/common (15.9.0): - DoubleConversion - glog - hermes-engine @@ -3202,12 +3209,32 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNSound (0.11.2): - - React-Core - - RNSound/Core (= 0.11.2) - - RNSound/Core (0.11.2): + - RNWorklets (0.5.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core - - RNSVG (15.9.0): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNWorklets/worklets (= 0.5.0) + - Yoga + - RNWorklets/worklets (0.5.0): - DoubleConversion - glog - hermes-engine @@ -3230,9 +3257,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNSVG/common (= 15.9.0) + - RNWorklets/worklets/apple (= 0.5.0) - Yoga - - RNSVG/common (15.9.0): + - RNWorklets/worklets/apple (0.5.0): - DoubleConversion - glog - hermes-engine @@ -3416,6 +3443,7 @@ DEPENDENCIES: - RNShare (from `../node_modules/react-native-share`) - RNSound (from `../node_modules/react-native-sound`) - RNSVG (from `../node_modules/react-native-svg`) + - RNWorklets (from `../node_modules/react-native-worklets`) - VisionCamera (from `../node_modules/react-native-vision-camera`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -3738,6 +3766,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-sound" RNSVG: :path: "../node_modules/react-native-svg" + RNWorklets: + :path: "../node_modules/react-native-worklets" VisionCamera: :path: "../node_modules/react-native-vision-camera" Yoga: @@ -3911,17 +3941,18 @@ SPEC CHECKSUMS: RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNGestureHandler: b249b5be5a3659025aed8898aaaafd567dc2d660 RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0 - RNLiveMarkdown: 33974079f2be0b5c5e6032582c265494f00a8ce4 + RNLiveMarkdown: 335a4d04da4d4b940a19b750cccae2ee1ea21a0e RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81 rnmapbox-maps: 315b95f92be3bf9c86cac2925e39c9ab2ad2c793 RNNitroSQLite: a1b0f1a665c54fc0f2510a292c1bf8ac4d44231b RNPermissions: fd6b2676e74ecb6d2dec0a6168502ab7af733e34 RNReactNativeHapticFeedback: 85c0a6ff490d52f5e8073040296fefe5945ebbfa - RNReanimated: 0692f0b36f15b83a7936c3611cab923e1396eeb9 + RNReanimated: 223b1b3895100ae576756fa8e0d09e49354f9bdf RNScreens: 9cb0d4b69067d62d51c278730bb0322f5cbd8d8e RNShare: 1e3e15a3d2608acde2808bc35448e2344e38e15b RNSound: 6c156f925295bdc83e8e422e7d8b38d33bc71852 RNSVG: 2aeb75970331da3a64cb89309f7fd7bd3769260a + RNWorklets: 18e24f98345960e357e8e0f7908c6b67704c34a2 SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c diff --git a/patches/@expensify+react-native-live-markdown+0.1.302.patch b/patches/@expensify+react-native-live-markdown+0.1.302.patch index bad0ea448157..8d39864cce21 100644 --- a/patches/@expensify+react-native-live-markdown+0.1.302.patch +++ b/patches/@expensify+react-native-live-markdown+0.1.302.patch @@ -1,7 +1,16 @@ diff --git a/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec b/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec -index 21de59d..7165118 100644 +index 21de59d..da055d6 100644 --- a/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec +++ b/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec +@@ -5,7 +5,7 @@ react_native_json = JSON.parse(File.read(File.join(react_native_node_modules_dir + react_native_minor_version = react_native_json['version'].split('.')[1].to_i + + pods_root = Pod::Config.instance.project_pods_root +-react_native_reanimated_node_modules_dir = ENV['REACT_NATIVE_REANIMATED_NODE_MODULES_DIR'] || File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('react-native-reanimated/package.json')"`) ++react_native_reanimated_node_modules_dir = ENV['REACT_NATIVE_REANIMATED_NODE_MODULES_DIR'] || File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('react-native-worklets/package.json')"`) + react_native_reanimated_node_modules_dir_from_pods_root = Pathname.new(react_native_reanimated_node_modules_dir).relative_path_from(pods_root).to_s + + package = JSON.parse(File.read(File.join(__dir__, "package.json"))) @@ -24,7 +24,7 @@ Pod::Spec.new do |s| s.source_files = "apple/**/*.{h,m,mm}", "cpp/**/*.{h,cpp}" @@ -11,6 +20,163 @@ index 21de59d..7165118 100644 s.xcconfig = { "OTHER_CFLAGS" => "$(inherited) -DREACT_NATIVE_MINOR_VERSION=#{react_native_minor_version}", +diff --git a/node_modules/@expensify/react-native-live-markdown/android/build.gradle b/node_modules/@expensify/react-native-live-markdown/android/build.gradle +index 001a23c..232263c 100644 +--- a/node_modules/@expensify/react-native-live-markdown/android/build.gradle ++++ b/node_modules/@expensify/react-native-live-markdown/android/build.gradle +@@ -1,3 +1,5 @@ ++import org.apache.tools.ant.taskdefs.condition.Os ++ + buildscript { + repositories { + google() +@@ -68,6 +70,15 @@ def getReactNativeMinorVersion() { + + def REACT_NATIVE_MINOR_VERSION = getReactNativeMinorVersion() + ++def toPlatformFileString(String path) { ++ if (Os.isFamily(Os.FAMILY_WINDOWS)) { ++ path = path.replace(File.separatorChar, '/' as char) ++ } ++ return path ++} ++ ++def reactNativeRootDir = resolveReactNativeDirectory() ++ + android { + if (supportsNamespace()) { + namespace "com.expensify.livemarkdown" +@@ -94,6 +105,7 @@ android { + arguments "-DANDROID_STL=c++_shared", + "-DANDROID_TOOLCHAIN=clang", + "-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}", ++ "-DREACT_NATIVE_DIR=${toPlatformFileString(reactNativeRootDir.path)}", + "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON" + abiFilters (*reactNativeArchitectures()) + } +@@ -175,7 +187,7 @@ repositories { + dependencies { + implementation "com.facebook.react:react-android" // version substituted by RNGP + implementation "com.facebook.react:hermes-android" // version substituted by RNGP +- implementation project(":react-native-reanimated") ++ implementation project(":react-native-worklets") + } + + // This fixes linking errors due to undefined symbols from libworklets.so. +@@ -183,6 +195,6 @@ dependencies { + // like a header-only library. During build, config files are not regenerated + // because the cache key does not change and AGP thinks that they are up-to-date. + afterEvaluate { +- prepareKotlinBuildScriptModel.dependsOn(":react-native-reanimated:prefabDebugPackage") +- prepareKotlinBuildScriptModel.dependsOn(":react-native-reanimated:prefabReleasePackage") ++ prepareKotlinBuildScriptModel.dependsOn(":react-native-worklets:prefabDebugPackage") ++ prepareKotlinBuildScriptModel.dependsOn(":react-native-worklets:prefabReleasePackage") + } +diff --git a/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt b/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt +index e5ba0ea..c0456eb 100644 +--- a/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt ++++ b/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt +@@ -4,6 +4,9 @@ cmake_minimum_required(VERSION 3.13) + + set(CMAKE_VERBOSE_MAKEFILE on) + ++include("${REACT_NATIVE_DIR}/ReactAndroid/cmake-utils/folly-flags.cmake") ++add_compile_options(${folly_FLAGS}) ++ + add_compile_options(-fvisibility=hidden -fexceptions -frtti) + + string(APPEND CMAKE_CXX_FLAGS " -DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}") +@@ -15,16 +18,16 @@ file(GLOB CPP_SRC CONFIGURE_DEPENDS "${CPP_DIR}/*.cpp") + + add_library(${CMAKE_PROJECT_NAME} SHARED ${ANDROID_SRC} ${CPP_SRC}) + +-target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CPP_DIR}) ++target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CPP_DIR} "${REACT_NATIVE_DIR}/ReactCommon/jsiexecutor") + + find_package(fbjni REQUIRED CONFIG) + find_package(ReactAndroid REQUIRED CONFIG) +-find_package(react-native-reanimated REQUIRED CONFIG) ++find_package(react-native-worklets REQUIRED CONFIG) + + target_link_libraries( + ${CMAKE_PROJECT_NAME} + fbjni::fbjni + ReactAndroid::jsi + ReactAndroid::reactnative +- react-native-reanimated::worklets ++ react-native-worklets::worklets + ) +diff --git a/node_modules/@expensify/react-native-live-markdown/apple/MarkdownParser.mm b/node_modules/@expensify/react-native-live-markdown/apple/MarkdownParser.mm +index 9d585e3..fe46961 100644 +--- a/node_modules/@expensify/react-native-live-markdown/apple/MarkdownParser.mm ++++ b/node_modules/@expensify/react-native-live-markdown/apple/MarkdownParser.mm +@@ -19,7 +19,7 @@ @implementation MarkdownParser { + const auto &markdownRuntime = expensify::livemarkdown::getMarkdownRuntime(); + jsi::Runtime &rt = markdownRuntime->getJSIRuntime(); + +- std::shared_ptr markdownWorklet; ++ std::shared_ptr markdownWorklet; + try { + markdownWorklet = expensify::livemarkdown::getMarkdownWorklet([parserId intValue]); + } catch (const std::out_of_range &error) { +diff --git a/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.cpp b/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.cpp +index 56fd6de..67f93eb 100644 +--- a/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.cpp ++++ b/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.cpp +@@ -17,11 +17,11 @@ std::shared_ptr getMarkdownRuntime() { + return globalMarkdownWorkletRuntime; + } + +-std::unordered_map> globalMarkdownShareableWorklets; ++std::unordered_map> globalMarkdownShareableWorklets; + std::mutex globalMarkdownShareableWorkletsMutex; + int nextParserId = 1; + +-const int registerMarkdownWorklet(const std::shared_ptr &markdownWorklet) { ++const int registerMarkdownWorklet(const std::shared_ptr &markdownWorklet) { + assert(markdownWorklet != nullptr); + auto parserId = nextParserId++; + std::unique_lock lock(globalMarkdownShareableWorkletsMutex); +@@ -34,7 +34,7 @@ void unregisterMarkdownWorklet(const int parserId) { + globalMarkdownShareableWorklets.erase(parserId); + } + +-std::shared_ptr getMarkdownWorklet(const int parserId) { ++std::shared_ptr getMarkdownWorklet(const int parserId) { + std::unique_lock lock(globalMarkdownShareableWorkletsMutex); + return globalMarkdownShareableWorklets.at(parserId); + } +diff --git a/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.h b/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.h +index 1edfb45..e181726 100644 +--- a/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.h ++++ b/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.h +@@ -14,11 +14,11 @@ void setMarkdownRuntime(const std::shared_ptr &markdownWorkletRu + + std::shared_ptr getMarkdownRuntime(); + +-const int registerMarkdownWorklet(const std::shared_ptr &markdownWorklet); ++const int registerMarkdownWorklet(const std::shared_ptr &markdownWorklet); + + void unregisterMarkdownWorklet(const int parserId); + +-std::shared_ptr getMarkdownWorklet(const int parserId); ++std::shared_ptr getMarkdownWorklet(const int parserId); + + } // namespace livemarkdown + } // namespace expensify +diff --git a/node_modules/@expensify/react-native-live-markdown/cpp/RuntimeDecorator.cpp b/node_modules/@expensify/react-native-live-markdown/cpp/RuntimeDecorator.cpp +index 5332e30..f1f25a5 100644 +--- a/node_modules/@expensify/react-native-live-markdown/cpp/RuntimeDecorator.cpp ++++ b/node_modules/@expensify/react-native-live-markdown/cpp/RuntimeDecorator.cpp +@@ -23,7 +23,7 @@ void injectJSIBindings(jsi::Runtime &rt) { + jsi::PropNameID::forAscii(rt, "jsi_registerMarkdownWorklet"), + 1, + [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) -> jsi::Value { +- auto parserId = registerMarkdownWorklet(extractShareableOrThrow(rt, args[0])); ++ auto parserId = registerMarkdownWorklet(extractSerializableOrThrow(rt, args[0])); + return jsi::Value(parserId); + })); + diff --git a/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts b/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts index e6ad088..90f2487 100644 --- a/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts From 1c37a3e06c82c8fa7b8afd464acc5262f11ed370 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 4 Sep 2025 17:17:11 +0200 Subject: [PATCH 12/37] Move patch to a catalog --- .../@expensify+react-native-live-markdown+0.1.302.patch | 0 patches/@expensify/react-native-live-markdown/details.md | 9 +++++++++ 2 files changed, 9 insertions(+) rename patches/{ => @expensify/react-native-live-markdown}/@expensify+react-native-live-markdown+0.1.302.patch (100%) create mode 100644 patches/@expensify/react-native-live-markdown/details.md diff --git a/patches/@expensify+react-native-live-markdown+0.1.302.patch b/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.302.patch similarity index 100% rename from patches/@expensify+react-native-live-markdown+0.1.302.patch rename to patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.302.patch diff --git a/patches/@expensify/react-native-live-markdown/details.md b/patches/@expensify/react-native-live-markdown/details.md new file mode 100644 index 000000000000..a209fe239a53 --- /dev/null +++ b/patches/@expensify/react-native-live-markdown/details.md @@ -0,0 +1,9 @@ + +# `@expensify/react-native-live-markdown` patches + +### [@expensify+react-native-live-markdown+0.1.302.patch](@expensify+react-native-live-markdown+0.1.302.patch) + +- Reason: This is a temporary patch to make the app buildable and testable with live-markdown. The plan is to bump live-markdown first, and then update reanimated. This patch is not meant for production — it exists only for testing purposes. +- Upstream PR/issue: 🛑 +- E/App issue: 🛑 +- PR Introducing Patch: [Upgrade Reanimated to v4](https://github.com/Expensify/App/pull/69469) From 5999f801587c34a62bbb207addd19463b2a400a9 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 4 Sep 2025 17:30:19 +0200 Subject: [PATCH 13/37] Fix comment --- babel.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/babel.config.js b/babel.config.js index 998f99b5c267..691a74e1479c 100644 --- a/babel.config.js +++ b/babel.config.js @@ -130,7 +130,7 @@ const metro = { }, }, ], - // The reanimated babel plugin needs to be last, as stated here: https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/getting-started/ + // The worklets babel plugin needs to be last, as stated here: https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/getting-started/ 'react-native-worklets/plugin', ], env: { From ed9b358b79136cc7b115d4ae3800ae654309f1fc Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 4 Sep 2025 17:35:04 +0200 Subject: [PATCH 14/37] Remove unrelated podfile changes --- ios/Podfile.lock | 49 +++++++++++++----------------------------------- 1 file changed, 13 insertions(+), 36 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 709de39e249c..ee76bd93f7ee 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3131,7 +3131,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNShare (11.0.2): + - RNScreens (4.12.0): - DoubleConversion - glog - hermes-engine @@ -3148,19 +3148,16 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - RNScreens/common (= 4.12.0) - Yoga - - RNSound (0.11.2): - - React-Core - - RNSound/Core (= 0.11.2) - - RNSound/Core (0.11.2): - - React-Core - - RNSVG (15.9.0): + - RNScreens/common (4.12.0): - DoubleConversion - glog - hermes-engine @@ -3177,15 +3174,15 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNSVG/common (= 15.9.0) - Yoga - - RNSVG/common (15.9.0): + - RNShare (11.0.2): - DoubleConversion - glog - hermes-engine @@ -3209,32 +3206,12 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNWorklets (0.5.0): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.11.18.00) - - RCTRequired - - RCTTypeSafety + - RNSound (0.11.2): - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNWorklets/worklets (= 0.5.0) - - Yoga - - RNWorklets/worklets (0.5.0): + - RNSound/Core (= 0.11.2) + - RNSound/Core (0.11.2): + - React-Core + - RNSVG (15.9.0): - DoubleConversion - glog - hermes-engine @@ -3257,9 +3234,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNWorklets/worklets/apple (= 0.5.0) + - RNSVG/common (= 15.9.0) - Yoga - - RNWorklets/worklets/apple (0.5.0): + - RNSVG/common (15.9.0): - DoubleConversion - glog - hermes-engine From 87aeb55974d48f6e3548b138638c22419361fd0f Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 4 Sep 2025 17:39:27 +0200 Subject: [PATCH 15/37] Reset podfile --- ios/Podfile.lock | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index ee76bd93f7ee..01acb1c37bb9 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2898,7 +2898,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNWorklets + - RNReanimated/worklets - Yoga - RNLocalize (2.2.6): - React-Core @@ -3003,7 +3003,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated (4.1.0): + - RNReanimated (3.19.1): - DoubleConversion - glog - hermes-engine @@ -3026,10 +3026,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 4.1.0) - - RNWorklets + - RNReanimated/reanimated (= 3.19.1) + - RNReanimated/worklets (= 3.19.1) - Yoga - - RNReanimated/reanimated (4.1.0): + - RNReanimated/reanimated (3.19.1): - DoubleConversion - glog - hermes-engine @@ -3052,10 +3052,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 4.1.0) - - RNWorklets + - RNReanimated/reanimated/apple (= 3.19.1) - Yoga - - RNReanimated/reanimated/apple (4.1.0): + - RNReanimated/reanimated/apple (3.19.1): - DoubleConversion - glog - hermes-engine @@ -3078,9 +3077,8 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNWorklets - Yoga - - RNScreens (4.12.0): + - RNReanimated/worklets (3.19.1): - DoubleConversion - glog - hermes-engine @@ -3097,16 +3095,15 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric - - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens/common (= 4.12.0) + - RNReanimated/worklets/apple (= 3.19.1) - Yoga - - RNScreens/common (4.12.0): + - RNReanimated/worklets/apple (3.19.1): - DoubleConversion - glog - hermes-engine @@ -3123,7 +3120,6 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric - - React-RCTImage - React-renderercss - React-rendererdebug - React-utils @@ -3420,7 +3416,6 @@ DEPENDENCIES: - RNShare (from `../node_modules/react-native-share`) - RNSound (from `../node_modules/react-native-sound`) - RNSVG (from `../node_modules/react-native-svg`) - - RNWorklets (from `../node_modules/react-native-worklets`) - VisionCamera (from `../node_modules/react-native-vision-camera`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -3743,8 +3738,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-sound" RNSVG: :path: "../node_modules/react-native-svg" - RNWorklets: - :path: "../node_modules/react-native-worklets" VisionCamera: :path: "../node_modules/react-native-vision-camera" Yoga: @@ -3918,18 +3911,17 @@ SPEC CHECKSUMS: RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNGestureHandler: b249b5be5a3659025aed8898aaaafd567dc2d660 RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0 - RNLiveMarkdown: 335a4d04da4d4b940a19b750cccae2ee1ea21a0e + RNLiveMarkdown: 33974079f2be0b5c5e6032582c265494f00a8ce4 RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81 rnmapbox-maps: 315b95f92be3bf9c86cac2925e39c9ab2ad2c793 RNNitroSQLite: a1b0f1a665c54fc0f2510a292c1bf8ac4d44231b RNPermissions: fd6b2676e74ecb6d2dec0a6168502ab7af733e34 RNReactNativeHapticFeedback: 85c0a6ff490d52f5e8073040296fefe5945ebbfa - RNReanimated: 223b1b3895100ae576756fa8e0d09e49354f9bdf + RNReanimated: 0692f0b36f15b83a7936c3611cab923e1396eeb9 RNScreens: 9cb0d4b69067d62d51c278730bb0322f5cbd8d8e RNShare: 1e3e15a3d2608acde2808bc35448e2344e38e15b RNSound: 6c156f925295bdc83e8e422e7d8b38d33bc71852 RNSVG: 2aeb75970331da3a64cb89309f7fd7bd3769260a - RNWorklets: 18e24f98345960e357e8e0f7908c6b67704c34a2 SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c From 7ce74909746b5cb6b659fcf4661ff5ef2eb9bbf5 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 4 Sep 2025 17:49:57 +0200 Subject: [PATCH 16/37] Commit verified podfile.lock --- ios/Podfile.lock | 81 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 25 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 01acb1c37bb9..e2de0e52c91b 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2898,7 +2898,7 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/worklets + - RNWorklets - Yoga - RNLocalize (2.2.6): - React-Core @@ -3003,7 +3003,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated (3.19.1): + - RNReanimated (4.1.0): - DoubleConversion - glog - hermes-engine @@ -3026,10 +3026,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 3.19.1) - - RNReanimated/worklets (= 3.19.1) + - RNReanimated/reanimated (= 4.1.0) + - RNWorklets - Yoga - - RNReanimated/reanimated (3.19.1): + - RNReanimated/reanimated (4.1.0): - DoubleConversion - glog - hermes-engine @@ -3052,9 +3052,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 3.19.1) + - RNReanimated/reanimated/apple (= 4.1.0) + - RNWorklets - Yoga - - RNReanimated/reanimated/apple (3.19.1): + - RNReanimated/reanimated/apple (4.1.0): - DoubleConversion - glog - hermes-engine @@ -3077,8 +3078,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - RNWorklets - Yoga - - RNReanimated/worklets (3.19.1): + - RNScreens (4.12.0): - DoubleConversion - glog - hermes-engine @@ -3095,15 +3097,16 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/worklets/apple (= 3.19.1) + - RNScreens/common (= 4.12.0) - Yoga - - RNReanimated/worklets/apple (3.19.1): + - RNScreens/common (4.12.0): - DoubleConversion - glog - hermes-engine @@ -3120,6 +3123,7 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-RCTImage - React-renderercss - React-rendererdebug - React-utils @@ -3127,7 +3131,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNScreens (4.12.0): + - RNShare (11.0.2): - DoubleConversion - glog - hermes-engine @@ -3144,16 +3148,19 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric - - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens/common (= 4.12.0) - Yoga - - RNScreens/common (4.12.0): + - RNSound (0.11.2): + - React-Core + - RNSound/Core (= 0.11.2) + - RNSound/Core (0.11.2): + - React-Core + - RNSVG (15.9.0): - DoubleConversion - glog - hermes-engine @@ -3170,15 +3177,15 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric - - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - RNSVG/common (= 15.9.0) - Yoga - - RNShare (11.0.2): + - RNSVG/common (15.9.0): - DoubleConversion - glog - hermes-engine @@ -3202,12 +3209,32 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNSound (0.11.2): - - React-Core - - RNSound/Core (= 0.11.2) - - RNSound/Core (0.11.2): + - RNWorklets (0.5.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety - React-Core - - RNSVG (15.9.0): + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNWorklets/worklets (= 0.5.0) + - Yoga + - RNWorklets/worklets (0.5.0): - DoubleConversion - glog - hermes-engine @@ -3230,9 +3257,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNSVG/common (= 15.9.0) + - RNWorklets/worklets/apple (= 0.5.0) - Yoga - - RNSVG/common (15.9.0): + - RNWorklets/worklets/apple (0.5.0): - DoubleConversion - glog - hermes-engine @@ -3416,6 +3443,7 @@ DEPENDENCIES: - RNShare (from `../node_modules/react-native-share`) - RNSound (from `../node_modules/react-native-sound`) - RNSVG (from `../node_modules/react-native-svg`) + - RNWorklets (from `../node_modules/react-native-worklets`) - VisionCamera (from `../node_modules/react-native-vision-camera`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -3738,6 +3766,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-sound" RNSVG: :path: "../node_modules/react-native-svg" + RNWorklets: + :path: "../node_modules/react-native-worklets" VisionCamera: :path: "../node_modules/react-native-vision-camera" Yoga: @@ -3911,17 +3941,18 @@ SPEC CHECKSUMS: RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNGestureHandler: b249b5be5a3659025aed8898aaaafd567dc2d660 RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0 - RNLiveMarkdown: 33974079f2be0b5c5e6032582c265494f00a8ce4 + RNLiveMarkdown: 7a023e8ca721643cb5a9297e279e4b085093137c RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81 rnmapbox-maps: 315b95f92be3bf9c86cac2925e39c9ab2ad2c793 RNNitroSQLite: a1b0f1a665c54fc0f2510a292c1bf8ac4d44231b RNPermissions: fd6b2676e74ecb6d2dec0a6168502ab7af733e34 RNReactNativeHapticFeedback: 85c0a6ff490d52f5e8073040296fefe5945ebbfa - RNReanimated: 0692f0b36f15b83a7936c3611cab923e1396eeb9 + RNReanimated: 223b1b3895100ae576756fa8e0d09e49354f9bdf RNScreens: 9cb0d4b69067d62d51c278730bb0322f5cbd8d8e RNShare: 1e3e15a3d2608acde2808bc35448e2344e38e15b RNSound: 6c156f925295bdc83e8e422e7d8b38d33bc71852 RNSVG: 2aeb75970331da3a64cb89309f7fd7bd3769260a + RNWorklets: 18e24f98345960e357e8e0f7908c6b67704c34a2 SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c From c6709ae824190f103de96e906850de038ef57ce9 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 11 Sep 2025 14:56:12 +0200 Subject: [PATCH 17/37] Bump worklets, fix failing tests --- package-lock.json | 18 ++++-------------- package.json | 2 +- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6a913a50d8a..f9f19e18fa8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -136,7 +136,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", - "react-native-worklets": "0.5.0", + "react-native-worklets": "^0.5.1", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1", @@ -32159,16 +32159,6 @@ "react-native": "*" } }, - "node_modules/react-native-screens/node_modules/react-native-is-edge-to-edge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.2.1.tgz", - "integrity": "sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q==", - "license": "MIT", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, "node_modules/react-native-share": { "version": "11.0.2", "license": "MIT", @@ -32295,9 +32285,9 @@ } }, "node_modules/react-native-worklets": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.0.tgz", - "integrity": "sha512-+/tbUCBEVchxe5xxFvvdC18PRZFCoxq1emcjIezXodElFguk1MaBYpbqABvZHBGrrEOo9k99h4Jbt0i9ArCbxg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.1.tgz", + "integrity": "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==", "license": "MIT", "dependencies": { "@babel/plugin-transform-arrow-functions": "^7.0.0-0", diff --git a/package.json b/package.json index 34b765182f53..9386613de902 100644 --- a/package.json +++ b/package.json @@ -206,7 +206,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", - "react-native-worklets": "0.5.0", + "react-native-worklets": "^0.5.1", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1", From 466c7256612b4174be525af18b9b70adc930b853 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 12 Sep 2025 15:32:16 +0200 Subject: [PATCH 18/37] Pin worklets version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 441937a93eb3..dcec2b05025d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -136,7 +136,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", - "react-native-worklets": "^0.5.1", + "react-native-worklets": "0.5.1", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1", diff --git a/package.json b/package.json index caf39aa47989..55f06c86d518 100644 --- a/package.json +++ b/package.json @@ -206,7 +206,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", - "react-native-worklets": "^0.5.1", + "react-native-worklets": "0.5.1", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1", From 0aef90329246f7ea5874da741f94a4cd2738624c Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 12 Sep 2025 15:32:30 +0200 Subject: [PATCH 19/37] Add rn-worklets to babel transforming --- config/webpack/webpack.common.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/config/webpack/webpack.common.ts b/config/webpack/webpack.common.ts index d51c31f59d96..f6c3f7e0c7b4 100644 --- a/config/webpack/webpack.common.ts +++ b/config/webpack/webpack.common.ts @@ -29,6 +29,7 @@ const PreloadWebpackPlugin = require('@vue/preload-webpack-plugin') as PreloadWe const includeModules = [ 'react-native-animatable', 'react-native-reanimated', + 'react-native-worklets', 'react-native-picker-select', 'react-native-web', 'react-native-webview', From 93ff430e70f9a16ef2967340355d1e14d64caf80 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 12 Sep 2025 15:38:28 +0200 Subject: [PATCH 20/37] Temporary testing to fix web --- .../react-native-reanimated+4.1.0+002+temp.patch | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 patches/react-native-reanimated/react-native-reanimated+4.1.0+002+temp.patch diff --git a/patches/react-native-reanimated/react-native-reanimated+4.1.0+002+temp.patch b/patches/react-native-reanimated/react-native-reanimated+4.1.0+002+temp.patch new file mode 100644 index 000000000000..dd2632f717ab --- /dev/null +++ b/patches/react-native-reanimated/react-native-reanimated+4.1.0+002+temp.patch @@ -0,0 +1,12 @@ +diff --git a/node_modules/react-native-reanimated/lib/module/css/component/AnimatedComponent.js b/node_modules/react-native-reanimated/lib/module/css/component/AnimatedComponent.js +index 8a41ccf..c78e40e 100644 +--- a/node_modules/react-native-reanimated/lib/module/css/component/AnimatedComponent.js ++++ b/node_modules/react-native-reanimated/lib/module/css/component/AnimatedComponent.js +@@ -1,6 +1,6 @@ + 'use strict'; + +-import { Component } from 'react'; ++import React, {Component} from 'react'; + import { Platform, StyleSheet } from 'react-native'; + import { IS_JEST, ReanimatedError, SHOULD_BE_USE_WEB } from "../../common/index.js"; + import { getViewInfo } from "../../createAnimatedComponent/getViewInfo.js"; From aa80b3d7b1235882e06f8aaab9424382acf579d1 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 17 Sep 2025 09:01:44 +0200 Subject: [PATCH 21/37] Remove temporary patch and update reanimated to fix bundle on web --- package-lock.json | 8 ++++---- package.json | 2 +- .../react-native-reanimated+4.1.0+002+temp.patch | 12 ------------ 3 files changed, 5 insertions(+), 17 deletions(-) delete mode 100644 patches/react-native-reanimated/react-native-reanimated+4.1.0+002+temp.patch diff --git a/package-lock.json b/package-lock.json index dcec2b05025d..d871c1e9a605 100644 --- a/package-lock.json +++ b/package-lock.json @@ -122,7 +122,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "11.11.0", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "4.1.0", + "react-native-reanimated": "^4.1.0-jsx-fix", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", @@ -32030,9 +32030,9 @@ } }, "node_modules/react-native-reanimated": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.0.tgz", - "integrity": "sha512-L8FqZn8VjZyBaCUMYFyx1Y+T+ZTbblaudpxReOXJ66RnOf52g6UM4Pa/IjwLD1XAw1FUxLRQrtpdjbkEc74FiQ==", + "version": "4.1.0-jsx-fix", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.0-jsx-fix.tgz", + "integrity": "sha512-kDfdzTvuHlqNkaP4W46qh1RTeyD7JhAMuNenz/9mFBAQmgajpVaXthma52j4EtXZgNfPbXHnH43NQ/OZrdQA4Q==", "license": "MIT", "dependencies": { "react-native-is-edge-to-edge": "^1.2.1", diff --git a/package.json b/package.json index 55f06c86d518..4b9e59102315 100644 --- a/package.json +++ b/package.json @@ -192,7 +192,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "11.11.0", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "4.1.0", + "react-native-reanimated": "^4.1.0-jsx-fix", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", diff --git a/patches/react-native-reanimated/react-native-reanimated+4.1.0+002+temp.patch b/patches/react-native-reanimated/react-native-reanimated+4.1.0+002+temp.patch deleted file mode 100644 index dd2632f717ab..000000000000 --- a/patches/react-native-reanimated/react-native-reanimated+4.1.0+002+temp.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/node_modules/react-native-reanimated/lib/module/css/component/AnimatedComponent.js b/node_modules/react-native-reanimated/lib/module/css/component/AnimatedComponent.js -index 8a41ccf..c78e40e 100644 ---- a/node_modules/react-native-reanimated/lib/module/css/component/AnimatedComponent.js -+++ b/node_modules/react-native-reanimated/lib/module/css/component/AnimatedComponent.js -@@ -1,6 +1,6 @@ - 'use strict'; - --import { Component } from 'react'; -+import React, {Component} from 'react'; - import { Platform, StyleSheet } from 'react-native'; - import { IS_JEST, ReanimatedError, SHOULD_BE_USE_WEB } from "../../common/index.js"; - import { getViewInfo } from "../../createAnimatedComponent/getViewInfo.js"; From 2ff77f44146792f6fcdb2f50d2c366f0c06b82f7 Mon Sep 17 00:00:00 2001 From: war-in Date: Fri, 3 Oct 2025 15:47:22 +0200 Subject: [PATCH 22/37] bump live-markdown to version supporting worklets & remove patch --- package-lock.json | 33 ++- package.json | 4 +- ...y+react-native-live-markdown+0.1.302.patch | 218 ------------------ .../react-native-live-markdown/details.md | 9 - 4 files changed, 23 insertions(+), 241 deletions(-) delete mode 100644 patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.302.patch delete mode 100644 patches/@expensify/react-native-live-markdown/details.md diff --git a/package-lock.json b/package-lock.json index d871c1e9a605..712b21f6f6de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@expensify/nitro-utils": "file:./modules/ExpensifyNitroUtils", "@expensify/react-native-background-task": "file:./modules/background-task", "@expensify/react-native-hybrid-app": "file:./modules/hybrid-app", - "@expensify/react-native-live-markdown": "0.1.302", + "@expensify/react-native-live-markdown": "git+https://github.com/Expensify/react-native-live-markdown.git#2e125b8ee4268424bed20989cd73bb7f8707d6fe", "@expensify/react-native-wallet": "^0.1.5", "@expo/metro-runtime": "^5.0.4", "@firebase/app": "^0.13.2", @@ -136,7 +136,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", - "react-native-worklets": "0.5.1", + "react-native-worklets": "0.6.0", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1", @@ -3831,9 +3831,9 @@ "link": true }, "node_modules/@expensify/react-native-live-markdown": { - "version": "0.1.302", - "resolved": "https://registry.npmjs.org/@expensify/react-native-live-markdown/-/react-native-live-markdown-0.1.302.tgz", - "integrity": "sha512-0mTy7A6myWwBviQAI47LvcmxGQ+x3O4b7Vt9JJyTXcp9b8N6wPsBhe9YMjzBLqGFYP00ucGNV13P64R9XLglag==", + "version": "0.1.305", + "resolved": "git+ssh://git@github.com/Expensify/react-native-live-markdown.git#2e125b8ee4268424bed20989cd73bb7f8707d6fe", + "integrity": "sha512-zojPCX+2B13MTkcdiShpdUZVcCzcq8lOCP1Szfu3Z35znjRD8d+KT+Ue1lnJQYHpxD+cGyEgiNwGeiC0f2DlBg==", "license": "MIT", "workspaces": [ "./example", @@ -3846,7 +3846,16 @@ "expensify-common": ">=2.0.148", "react": "*", "react-native": "*", - "react-native-reanimated": ">=3.17.0" + "react-native-reanimated": ">=3.17.0", + "react-native-worklets": "^0.6.0" + }, + "peerDependenciesMeta": { + "react-native-reanimated": { + "optional": true + }, + "react-native-worklets": { + "optional": true + } } }, "node_modules/@expensify/react-native-wallet": { @@ -32030,9 +32039,9 @@ } }, "node_modules/react-native-reanimated": { - "version": "4.1.0-jsx-fix", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.0-jsx-fix.tgz", - "integrity": "sha512-kDfdzTvuHlqNkaP4W46qh1RTeyD7JhAMuNenz/9mFBAQmgajpVaXthma52j4EtXZgNfPbXHnH43NQ/OZrdQA4Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-4.1.2.tgz", + "integrity": "sha512-qzmQiFrvjm62pRBcj97QI9Xckc3EjgHQoY1F2yjktd0kpjhoyePeuTEXjYRCAVIy7IV/1cfeSup34+zFThFoHQ==", "license": "MIT", "dependencies": { "react-native-is-edge-to-edge": "^1.2.1", @@ -32285,9 +32294,9 @@ } }, "node_modules/react-native-worklets": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.5.1.tgz", - "integrity": "sha512-lJG6Uk9YuojjEX/tQrCbcbmpdLCSFxDK1rJlkDhgqkVi1KZzG7cdcBFQRqyNOOzR9Y0CXNuldmtWTGOyM0k0+w==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-native-worklets/-/react-native-worklets-0.6.0.tgz", + "integrity": "sha512-yETMNuCcivdYWteuG4eRqgiAk2DzRCrVAaEBIEWPo4emrf3BNjadFo85L5QvyEusrX9QKE3ZEAx8U5A/nbyFgg==", "license": "MIT", "dependencies": { "@babel/plugin-transform-arrow-functions": "^7.0.0-0", diff --git a/package.json b/package.json index 4b9e59102315..22b6c069e7d7 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "@expensify/nitro-utils": "file:./modules/ExpensifyNitroUtils", "@expensify/react-native-background-task": "file:./modules/background-task", "@expensify/react-native-hybrid-app": "file:./modules/hybrid-app", - "@expensify/react-native-live-markdown": "0.1.302", + "@expensify/react-native-live-markdown": "git+https://github.com/Expensify/react-native-live-markdown.git#2e125b8ee4268424bed20989cd73bb7f8707d6fe", "@expensify/react-native-wallet": "^0.1.5", "@expo/metro-runtime": "^5.0.4", "@firebase/app": "^0.13.2", @@ -206,7 +206,7 @@ "react-native-vision-camera": "^4.7.0", "react-native-web": "0.20.0", "react-native-webview": "13.13.1", - "react-native-worklets": "0.5.1", + "react-native-worklets": "0.6.0", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1", diff --git a/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.302.patch b/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.302.patch deleted file mode 100644 index 8d39864cce21..000000000000 --- a/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.302.patch +++ /dev/null @@ -1,218 +0,0 @@ -diff --git a/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec b/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec -index 21de59d..da055d6 100644 ---- a/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec -+++ b/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec -@@ -5,7 +5,7 @@ react_native_json = JSON.parse(File.read(File.join(react_native_node_modules_dir - react_native_minor_version = react_native_json['version'].split('.')[1].to_i - - pods_root = Pod::Config.instance.project_pods_root --react_native_reanimated_node_modules_dir = ENV['REACT_NATIVE_REANIMATED_NODE_MODULES_DIR'] || File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('react-native-reanimated/package.json')"`) -+react_native_reanimated_node_modules_dir = ENV['REACT_NATIVE_REANIMATED_NODE_MODULES_DIR'] || File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('react-native-worklets/package.json')"`) - react_native_reanimated_node_modules_dir_from_pods_root = Pathname.new(react_native_reanimated_node_modules_dir).relative_path_from(pods_root).to_s - - package = JSON.parse(File.read(File.join(__dir__, "package.json"))) -@@ -24,7 +24,7 @@ Pod::Spec.new do |s| - - s.source_files = "apple/**/*.{h,m,mm}", "cpp/**/*.{h,cpp}" - -- s.dependency "RNReanimated/worklets" -+ s.dependency "RNWorklets" - - s.xcconfig = { - "OTHER_CFLAGS" => "$(inherited) -DREACT_NATIVE_MINOR_VERSION=#{react_native_minor_version}", -diff --git a/node_modules/@expensify/react-native-live-markdown/android/build.gradle b/node_modules/@expensify/react-native-live-markdown/android/build.gradle -index 001a23c..232263c 100644 ---- a/node_modules/@expensify/react-native-live-markdown/android/build.gradle -+++ b/node_modules/@expensify/react-native-live-markdown/android/build.gradle -@@ -1,3 +1,5 @@ -+import org.apache.tools.ant.taskdefs.condition.Os -+ - buildscript { - repositories { - google() -@@ -68,6 +70,15 @@ def getReactNativeMinorVersion() { - - def REACT_NATIVE_MINOR_VERSION = getReactNativeMinorVersion() - -+def toPlatformFileString(String path) { -+ if (Os.isFamily(Os.FAMILY_WINDOWS)) { -+ path = path.replace(File.separatorChar, '/' as char) -+ } -+ return path -+} -+ -+def reactNativeRootDir = resolveReactNativeDirectory() -+ - android { - if (supportsNamespace()) { - namespace "com.expensify.livemarkdown" -@@ -94,6 +105,7 @@ android { - arguments "-DANDROID_STL=c++_shared", - "-DANDROID_TOOLCHAIN=clang", - "-DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}", -+ "-DREACT_NATIVE_DIR=${toPlatformFileString(reactNativeRootDir.path)}", - "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON" - abiFilters (*reactNativeArchitectures()) - } -@@ -175,7 +187,7 @@ repositories { - dependencies { - implementation "com.facebook.react:react-android" // version substituted by RNGP - implementation "com.facebook.react:hermes-android" // version substituted by RNGP -- implementation project(":react-native-reanimated") -+ implementation project(":react-native-worklets") - } - - // This fixes linking errors due to undefined symbols from libworklets.so. -@@ -183,6 +195,6 @@ dependencies { - // like a header-only library. During build, config files are not regenerated - // because the cache key does not change and AGP thinks that they are up-to-date. - afterEvaluate { -- prepareKotlinBuildScriptModel.dependsOn(":react-native-reanimated:prefabDebugPackage") -- prepareKotlinBuildScriptModel.dependsOn(":react-native-reanimated:prefabReleasePackage") -+ prepareKotlinBuildScriptModel.dependsOn(":react-native-worklets:prefabDebugPackage") -+ prepareKotlinBuildScriptModel.dependsOn(":react-native-worklets:prefabReleasePackage") - } -diff --git a/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt b/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt -index e5ba0ea..c0456eb 100644 ---- a/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt -+++ b/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/CMakeLists.txt -@@ -4,6 +4,9 @@ cmake_minimum_required(VERSION 3.13) - - set(CMAKE_VERBOSE_MAKEFILE on) - -+include("${REACT_NATIVE_DIR}/ReactAndroid/cmake-utils/folly-flags.cmake") -+add_compile_options(${folly_FLAGS}) -+ - add_compile_options(-fvisibility=hidden -fexceptions -frtti) - - string(APPEND CMAKE_CXX_FLAGS " -DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}") -@@ -15,16 +18,16 @@ file(GLOB CPP_SRC CONFIGURE_DEPENDS "${CPP_DIR}/*.cpp") - - add_library(${CMAKE_PROJECT_NAME} SHARED ${ANDROID_SRC} ${CPP_SRC}) - --target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CPP_DIR}) -+target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CPP_DIR} "${REACT_NATIVE_DIR}/ReactCommon/jsiexecutor") - - find_package(fbjni REQUIRED CONFIG) - find_package(ReactAndroid REQUIRED CONFIG) --find_package(react-native-reanimated REQUIRED CONFIG) -+find_package(react-native-worklets REQUIRED CONFIG) - - target_link_libraries( - ${CMAKE_PROJECT_NAME} - fbjni::fbjni - ReactAndroid::jsi - ReactAndroid::reactnative -- react-native-reanimated::worklets -+ react-native-worklets::worklets - ) -diff --git a/node_modules/@expensify/react-native-live-markdown/apple/MarkdownParser.mm b/node_modules/@expensify/react-native-live-markdown/apple/MarkdownParser.mm -index 9d585e3..fe46961 100644 ---- a/node_modules/@expensify/react-native-live-markdown/apple/MarkdownParser.mm -+++ b/node_modules/@expensify/react-native-live-markdown/apple/MarkdownParser.mm -@@ -19,7 +19,7 @@ @implementation MarkdownParser { - const auto &markdownRuntime = expensify::livemarkdown::getMarkdownRuntime(); - jsi::Runtime &rt = markdownRuntime->getJSIRuntime(); - -- std::shared_ptr markdownWorklet; -+ std::shared_ptr markdownWorklet; - try { - markdownWorklet = expensify::livemarkdown::getMarkdownWorklet([parserId intValue]); - } catch (const std::out_of_range &error) { -diff --git a/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.cpp b/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.cpp -index 56fd6de..67f93eb 100644 ---- a/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.cpp -+++ b/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.cpp -@@ -17,11 +17,11 @@ std::shared_ptr getMarkdownRuntime() { - return globalMarkdownWorkletRuntime; - } - --std::unordered_map> globalMarkdownShareableWorklets; -+std::unordered_map> globalMarkdownShareableWorklets; - std::mutex globalMarkdownShareableWorkletsMutex; - int nextParserId = 1; - --const int registerMarkdownWorklet(const std::shared_ptr &markdownWorklet) { -+const int registerMarkdownWorklet(const std::shared_ptr &markdownWorklet) { - assert(markdownWorklet != nullptr); - auto parserId = nextParserId++; - std::unique_lock lock(globalMarkdownShareableWorkletsMutex); -@@ -34,7 +34,7 @@ void unregisterMarkdownWorklet(const int parserId) { - globalMarkdownShareableWorklets.erase(parserId); - } - --std::shared_ptr getMarkdownWorklet(const int parserId) { -+std::shared_ptr getMarkdownWorklet(const int parserId) { - std::unique_lock lock(globalMarkdownShareableWorkletsMutex); - return globalMarkdownShareableWorklets.at(parserId); - } -diff --git a/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.h b/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.h -index 1edfb45..e181726 100644 ---- a/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.h -+++ b/node_modules/@expensify/react-native-live-markdown/cpp/MarkdownGlobal.h -@@ -14,11 +14,11 @@ void setMarkdownRuntime(const std::shared_ptr &markdownWorkletRu - - std::shared_ptr getMarkdownRuntime(); - --const int registerMarkdownWorklet(const std::shared_ptr &markdownWorklet); -+const int registerMarkdownWorklet(const std::shared_ptr &markdownWorklet); - - void unregisterMarkdownWorklet(const int parserId); - --std::shared_ptr getMarkdownWorklet(const int parserId); -+std::shared_ptr getMarkdownWorklet(const int parserId); - - } // namespace livemarkdown - } // namespace expensify -diff --git a/node_modules/@expensify/react-native-live-markdown/cpp/RuntimeDecorator.cpp b/node_modules/@expensify/react-native-live-markdown/cpp/RuntimeDecorator.cpp -index 5332e30..f1f25a5 100644 ---- a/node_modules/@expensify/react-native-live-markdown/cpp/RuntimeDecorator.cpp -+++ b/node_modules/@expensify/react-native-live-markdown/cpp/RuntimeDecorator.cpp -@@ -23,7 +23,7 @@ void injectJSIBindings(jsi::Runtime &rt) { - jsi::PropNameID::forAscii(rt, "jsi_registerMarkdownWorklet"), - 1, - [](jsi::Runtime &rt, const jsi::Value &thisValue, const jsi::Value *args, size_t count) -> jsi::Value { -- auto parserId = registerMarkdownWorklet(extractShareableOrThrow(rt, args[0])); -+ auto parserId = registerMarkdownWorklet(extractSerializableOrThrow(rt, args[0])); - return jsi::Value(parserId); - })); - -diff --git a/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts b/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts -index e6ad088..90f2487 100644 ---- a/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts -+++ b/node_modules/@expensify/react-native-live-markdown/lib/typescript/src/MarkdownTextInput.d.ts -@@ -2,7 +2,7 @@ import { TextInput } from 'react-native'; - import React from 'react'; - import type { TextInputProps } from 'react-native'; - import type { WorkletRuntime } from 'react-native-reanimated'; --import type { ShareableRef, WorkletFunction } from 'react-native-reanimated/lib/typescript/commonTypes'; -+import type { ShareableRef, WorkletFunction } from 'react-native-worklets'; - import type { PartialMarkdownStyle } from './styleUtils'; - import type { InlineImagesInputProps, MarkdownRange } from './commonTypes'; - declare global { -diff --git a/node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx b/node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx -index 82ee895..55c0e90 100644 ---- a/node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx -+++ b/node_modules/@expensify/react-native-live-markdown/src/MarkdownTextInput.tsx -@@ -3,7 +3,7 @@ import React from 'react'; - import type {TextInputProps} from 'react-native'; - import {createWorkletRuntime, makeShareableCloneRecursive} from 'react-native-reanimated'; - import type {WorkletRuntime} from 'react-native-reanimated'; --import type {ShareableRef, WorkletFunction} from 'react-native-reanimated/lib/typescript/commonTypes'; -+import type {ShareableRef, WorkletFunction} from 'react-native-worklets'; - - import MarkdownTextInputDecoratorViewNativeComponent from './MarkdownTextInputDecoratorViewNativeComponent'; - import type {MarkdownStyle} from './MarkdownTextInputDecoratorViewNativeComponent'; -diff --git a/node_modules/@expensify/react-native-live-markdown/src/parseExpensiMark.ts b/node_modules/@expensify/react-native-live-markdown/src/parseExpensiMark.ts -index 6e14e25..38d92bb 100644 ---- a/node_modules/@expensify/react-native-live-markdown/src/parseExpensiMark.ts -+++ b/node_modules/@expensify/react-native-live-markdown/src/parseExpensiMark.ts -@@ -4,7 +4,7 @@ import {Platform} from 'react-native'; - import {ExpensiMark} from 'expensify-common'; - import {unescapeText} from 'expensify-common/dist/utils'; - import {decode} from 'html-entities'; --import type {WorkletFunction} from 'react-native-reanimated/lib/typescript/commonTypes'; -+import type {WorkletFunction} from 'react-native-worklets'; - import type {MarkdownType, MarkdownRange} from './commonTypes'; - import {groupRanges, sortRanges, splitRangesOnEmojis} from './rangeUtils'; - diff --git a/patches/@expensify/react-native-live-markdown/details.md b/patches/@expensify/react-native-live-markdown/details.md deleted file mode 100644 index a209fe239a53..000000000000 --- a/patches/@expensify/react-native-live-markdown/details.md +++ /dev/null @@ -1,9 +0,0 @@ - -# `@expensify/react-native-live-markdown` patches - -### [@expensify+react-native-live-markdown+0.1.302.patch](@expensify+react-native-live-markdown+0.1.302.patch) - -- Reason: This is a temporary patch to make the app buildable and testable with live-markdown. The plan is to bump live-markdown first, and then update reanimated. This patch is not meant for production — it exists only for testing purposes. -- Upstream PR/issue: 🛑 -- E/App issue: 🛑 -- PR Introducing Patch: [Upgrade Reanimated to v4](https://github.com/Expensify/App/pull/69469) From a3112abad5040395458dbc72636d20909b3783b2 Mon Sep 17 00:00:00 2001 From: war-in Date: Fri, 3 Oct 2025 16:05:14 +0200 Subject: [PATCH 23/37] update Podfile.lock --- ios/Podfile.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index c645efba42c9..4a3c0ff05300 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2841,7 +2841,7 @@ PODS: - RNGoogleSignin (10.0.1): - GoogleSignIn (~> 7.0) - React-Core - - RNLiveMarkdown (0.1.304): + - RNLiveMarkdown (0.1.305): - DoubleConversion - glog - hermes-engine @@ -2971,7 +2971,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated (4.1.0): + - RNReanimated (4.1.2): - DoubleConversion - glog - hermes-engine @@ -2994,10 +2994,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 4.1.0) + - RNReanimated/reanimated (= 4.1.2) - RNWorklets - Yoga - - RNReanimated/reanimated (4.1.0): + - RNReanimated/reanimated (4.1.2): - DoubleConversion - glog - hermes-engine @@ -3020,10 +3020,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 4.1.0) + - RNReanimated/reanimated/apple (= 4.1.2) - RNWorklets - Yoga - - RNReanimated/reanimated/apple (4.1.0): + - RNReanimated/reanimated/apple (4.1.2): - DoubleConversion - glog - hermes-engine @@ -3177,7 +3177,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNWorklets (0.5.0): + - RNWorklets (0.6.0): - DoubleConversion - glog - hermes-engine @@ -3200,9 +3200,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNWorklets/worklets (= 0.5.0) + - RNWorklets/worklets (= 0.6.0) - Yoga - - RNWorklets/worklets (0.5.0): + - RNWorklets/worklets (0.6.0): - DoubleConversion - glog - hermes-engine @@ -3225,9 +3225,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNWorklets/worklets/apple (= 0.5.0) + - RNWorklets/worklets/apple (= 0.6.0) - Yoga - - RNWorklets/worklets/apple (0.5.0): + - RNWorklets/worklets/apple (0.6.0): - DoubleConversion - glog - hermes-engine @@ -3917,18 +3917,18 @@ SPEC CHECKSUMS: RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNGestureHandler: 61d3e94abb866ee955563ddf073e405e3f541359 RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0 - RNLiveMarkdown: 7a023e8ca721643cb5a9297e279e4b085093137c + RNLiveMarkdown: 2090300f9993f0babf741715e3a0cfe56943cfbb RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81 rnmapbox-maps: f3875edd847c82d770d1b57852b36d45b3ea8a01 RNNitroSQLite: e36968e81bbcab6c9e97a35e74ae34c7420d734c RNPermissions: fd6b2676e74ecb6d2dec0a6168502ab7af733e34 RNReactNativeHapticFeedback: 85c0a6ff490d52f5e8073040296fefe5945ebbfa - RNReanimated: 223b1b3895100ae576756fa8e0d09e49354f9bdf + RNReanimated: 2721090eb0e662bf05b84701eae6de7a4eead177 RNScreens: 0dcbe4c37daf0ec9b98bc5a655b1303e58e676ff RNShare: 1e3e15a3d2608acde2808bc35448e2344e38e15b RNSound: 6c156f925295bdc83e8e422e7d8b38d33bc71852 RNSVG: 9346c68a0d5c5e4e74d82d664b745f28e6cfc1cb - RNWorklets: 18e24f98345960e357e8e0f7908c6b67704c34a2 + RNWorklets: f7b2c643f9c3fcdf4c7049f237bcf5d308eaaa93 SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c From 6c9a50bc4baf51b73f9b6d314653411fc9df0319 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 6 Oct 2025 12:26:09 +0200 Subject: [PATCH 24/37] Bump reanimated to 4.1.2 --- package-lock.json | 2 +- package.json | 2 +- ...ive-reanimated+4.1.2+001+catch-all-exceptions-on-stoi.patch} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename patches/react-native-reanimated/{react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch => react-native-reanimated+4.1.2+001+catch-all-exceptions-on-stoi.patch} (100%) diff --git a/package-lock.json b/package-lock.json index ac130b21fc96..7362628a53c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -122,7 +122,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "12.5.3", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "^4.1.0-jsx-fix", + "react-native-reanimated": "4.1.2", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", diff --git a/package.json b/package.json index 82423069646e..5500173bdaec 100644 --- a/package.json +++ b/package.json @@ -192,7 +192,7 @@ "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#07d60d78d4772d47afd7a744940fc6b6d1881806", "react-native-plaid-link-sdk": "12.5.3", "react-native-qrcode-svg": "6.3.14", - "react-native-reanimated": "^4.1.0-jsx-fix", + "react-native-reanimated": "4.1.2", "react-native-release-profiler": "^0.2.1", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.4.0", diff --git a/patches/react-native-reanimated/react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch b/patches/react-native-reanimated/react-native-reanimated+4.1.2+001+catch-all-exceptions-on-stoi.patch similarity index 100% rename from patches/react-native-reanimated/react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch rename to patches/react-native-reanimated/react-native-reanimated+4.1.2+001+catch-all-exceptions-on-stoi.patch From 805688d160da6516f9294d47f1cade6a363cf469 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Mon, 6 Oct 2025 12:28:49 +0200 Subject: [PATCH 25/37] Fix patch name --- patches/react-native-reanimated/details.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patches/react-native-reanimated/details.md b/patches/react-native-reanimated/details.md index 33055066aaa6..b9e9bd2a6cde 100644 --- a/patches/react-native-reanimated/details.md +++ b/patches/react-native-reanimated/details.md @@ -1,7 +1,7 @@ # `react-native-reanimated` patches -### [react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch](react-native-reanimated+4.1.0+001+catch-all-exceptions-on-stoi.patch) +### [react-native-reanimated+4.1.2+001+catch-all-exceptions-on-stoi.patch](react-native-reanimated+4.1.2+001+catch-all-exceptions-on-stoi.patch) - Reason: Reanimated wasn't able to catch an exception here, so the catch clause was broadened. - Upstream PR/issue: 🛑 From 186102616cf17fc79f91e1f826967b168097946b Mon Sep 17 00:00:00 2001 From: war-in Date: Tue, 7 Oct 2025 11:41:09 +0200 Subject: [PATCH 26/37] bump live-markdown --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index a2fe66b44406..42102afd541b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@expensify/nitro-utils": "file:./modules/ExpensifyNitroUtils", "@expensify/react-native-background-task": "file:./modules/background-task", "@expensify/react-native-hybrid-app": "file:./modules/hybrid-app", - "@expensify/react-native-live-markdown": "git+https://github.com/Expensify/react-native-live-markdown.git#2e125b8ee4268424bed20989cd73bb7f8707d6fe", + "@expensify/react-native-live-markdown": "git+https://github.com/Expensify/react-native-live-markdown.git#a8a5765f98ec1c2e0422b215eebb23d8cc8b09f0", "@expensify/react-native-wallet": "^0.1.5", "@expo/metro-runtime": "^5.0.4", "@firebase/app": "^0.13.2", @@ -3836,8 +3836,8 @@ }, "node_modules/@expensify/react-native-live-markdown": { "version": "0.1.305", - "resolved": "git+ssh://git@github.com/Expensify/react-native-live-markdown.git#2e125b8ee4268424bed20989cd73bb7f8707d6fe", - "integrity": "sha512-zojPCX+2B13MTkcdiShpdUZVcCzcq8lOCP1Szfu3Z35znjRD8d+KT+Ue1lnJQYHpxD+cGyEgiNwGeiC0f2DlBg==", + "resolved": "git+ssh://git@github.com/Expensify/react-native-live-markdown.git#a8a5765f98ec1c2e0422b215eebb23d8cc8b09f0", + "integrity": "sha512-j2ahhF7n1UDdrTqwSvdyk5t6XVaOvgdy2VimMOBTKVmXEr6M9DZz+8Hz5S+SP4mW1oA3/pr7PEITGrRNCSTZ8A==", "license": "MIT", "workspaces": [ "./example", diff --git a/package.json b/package.json index 02d0e932f6ba..8c83d19eed35 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "@expensify/nitro-utils": "file:./modules/ExpensifyNitroUtils", "@expensify/react-native-background-task": "file:./modules/background-task", "@expensify/react-native-hybrid-app": "file:./modules/hybrid-app", - "@expensify/react-native-live-markdown": "git+https://github.com/Expensify/react-native-live-markdown.git#2e125b8ee4268424bed20989cd73bb7f8707d6fe", + "@expensify/react-native-live-markdown": "git+https://github.com/Expensify/react-native-live-markdown.git#a8a5765f98ec1c2e0422b215eebb23d8cc8b09f0", "@expensify/react-native-wallet": "^0.1.5", "@expo/metro-runtime": "^5.0.4", "@firebase/app": "^0.13.2", From 518e746caa361cb01711163816f91898b4b37256 Mon Sep 17 00:00:00 2001 From: war-in Date: Mon, 13 Oct 2025 13:00:46 +0200 Subject: [PATCH 27/37] chore: bump `react-native-live-markdown` --- ios/Podfile.lock | 2 +- package-lock.json | 11 ++++------- package.json | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 54469966084e..b133690274f4 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3842,7 +3842,7 @@ SPEC CHECKSUMS: React-microtasksnativemodule: 8fc1bfccd27980ed6cfec1f52ffcd6af336f48f7 react-native-advanced-input-mask: e5fa44f25ae16ab5b8da75b5aed4236a5400a770 react-native-airship: ff2599900d29e0e64ff2b2dd9f897c0c220a9163 - react-native-app-logs: 45d7515e7a92e61be56dffb10f315b578dedee01 + react-native-app-logs: 6540c5f6f66f33cb52d0bb62f0a10131ff3a9589 react-native-blob-util: a013bd1bb12de304a726c2308cc0e219f34ab66c react-native-cameraroll: d98f8a64b53620754864c33a034e054ca4a3b360 react-native-config: ab9f9cc16883aed5355ca43478fe39e6aec5ebb9 diff --git a/package-lock.json b/package-lock.json index f1cc140303bd..caf4e09601ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@expensify/nitro-utils": "file:./modules/ExpensifyNitroUtils", "@expensify/react-native-background-task": "file:./modules/background-task", "@expensify/react-native-hybrid-app": "file:./modules/hybrid-app", - "@expensify/react-native-live-markdown": "git+https://github.com/Expensify/react-native-live-markdown.git#a8a5765f98ec1c2e0422b215eebb23d8cc8b09f0", + "@expensify/react-native-live-markdown": "git+https://github.com/Expensify/react-native-live-markdown.git#a1b25f632138d86068cc546450982d57e8227ce5", "@expensify/react-native-wallet": "0.1.11", "@expo/metro-runtime": "^5.0.4", "@firebase/app": "^0.13.2", @@ -3837,8 +3837,8 @@ }, "node_modules/@expensify/react-native-live-markdown": { "version": "0.1.305", - "resolved": "git+ssh://git@github.com/Expensify/react-native-live-markdown.git#a8a5765f98ec1c2e0422b215eebb23d8cc8b09f0", - "integrity": "sha512-j2ahhF7n1UDdrTqwSvdyk5t6XVaOvgdy2VimMOBTKVmXEr6M9DZz+8Hz5S+SP4mW1oA3/pr7PEITGrRNCSTZ8A==", + "resolved": "git+ssh://git@github.com/Expensify/react-native-live-markdown.git#a1b25f632138d86068cc546450982d57e8227ce5", + "integrity": "sha512-khNn3D5u6IplAHyt+0sGcVi6kgjIrDrDt9LRxPKJxnBSV21U2ac9etYPDJqMenukkjI7xfRGTqtHmzFEtSf9uQ==", "license": "MIT", "workspaces": [ "./example", @@ -3852,12 +3852,9 @@ "react": "*", "react-native": "*", "react-native-reanimated": ">=3.17.0", - "react-native-worklets": "^0.6.0" + "react-native-worklets": ">=0.6.0" }, "peerDependenciesMeta": { - "react-native-reanimated": { - "optional": true - }, "react-native-worklets": { "optional": true } diff --git a/package.json b/package.json index c34cc01ea55d..8b461e1fd547 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "@expensify/nitro-utils": "file:./modules/ExpensifyNitroUtils", "@expensify/react-native-background-task": "file:./modules/background-task", "@expensify/react-native-hybrid-app": "file:./modules/hybrid-app", - "@expensify/react-native-live-markdown": "git+https://github.com/Expensify/react-native-live-markdown.git#a8a5765f98ec1c2e0422b215eebb23d8cc8b09f0", + "@expensify/react-native-live-markdown": "git+https://github.com/Expensify/react-native-live-markdown.git#a1b25f632138d86068cc546450982d57e8227ce5", "@expensify/react-native-wallet": "0.1.11", "@expo/metro-runtime": "^5.0.4", "@firebase/app": "^0.13.2", From 7c9da25fdea1deff9644d513751810246e39e93e Mon Sep 17 00:00:00 2001 From: war-in Date: Tue, 14 Oct 2025 17:12:48 +0200 Subject: [PATCH 28/37] chore: bump `react-native-live-markdown` --- ios/Podfile.lock | 4 ++-- package-lock.json | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index e5cc89b72bcf..609e2bef1917 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2830,7 +2830,7 @@ PODS: - RNGoogleSignin (10.0.1): - GoogleSignIn (~> 7.0) - React-Core - - RNLiveMarkdown (0.1.307): + - RNLiveMarkdown (0.1.308): - DoubleConversion - glog - hermes-engine @@ -3906,7 +3906,7 @@ SPEC CHECKSUMS: RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNGestureHandler: 61d3e94abb866ee955563ddf073e405e3f541359 RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0 - RNLiveMarkdown: ba5e9bd83b82d3994fb67608c7840a60ecc6e4fe + RNLiveMarkdown: bc963828beb86b8ef43e8303481f51fe43f9e2b0 RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81 rnmapbox-maps: f3875edd847c82d770d1b57852b36d45b3ea8a01 RNNitroSQLite: e36968e81bbcab6c9e97a35e74ae34c7420d734c diff --git a/package-lock.json b/package-lock.json index ec5e1871eeb7..be198c3c6c8b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@expensify/nitro-utils": "file:./modules/ExpensifyNitroUtils", "@expensify/react-native-background-task": "file:./modules/background-task", "@expensify/react-native-hybrid-app": "file:./modules/hybrid-app", - "@expensify/react-native-live-markdown": "0.1.307", + "@expensify/react-native-live-markdown": "0.1.308", "@expensify/react-native-wallet": "0.1.11", "@expo/metro-runtime": "^5.0.4", "@firebase/app": "^0.13.2", @@ -3836,9 +3836,9 @@ "link": true }, "node_modules/@expensify/react-native-live-markdown": { - "version": "0.1.307", - "resolved": "https://registry.npmjs.org/@expensify/react-native-live-markdown/-/react-native-live-markdown-0.1.307.tgz", - "integrity": "sha512-W2wRqqKVmyobGs6AaK+wC81tLaV6WGkeQv3R7GlYXD00ISphXTCQQjbqUTKXU/n4HfLdEQBy8oP6Fkb6BMQBvA==", + "version": "0.1.308", + "resolved": "https://registry.npmjs.org/@expensify/react-native-live-markdown/-/react-native-live-markdown-0.1.308.tgz", + "integrity": "sha512-KRmWSL2KVidNzaDS4RnyUx68suF6i/UPcaIHHvmK90LhnpmkOa9wUrxO3RIpmkJWf2AYk9BfMtN0fpXLxl/arw==", "license": "MIT", "workspaces": [ "./example", From 91e51adefd0d849251169ee62254db18d86c7260 Mon Sep 17 00:00:00 2001 From: war-in Date: Mon, 20 Oct 2025 15:43:35 +0200 Subject: [PATCH 29/37] chore: update Podfile.lock --- ios/Podfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index ab20e64ba476..ed71edd37dd5 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3906,7 +3906,7 @@ SPEC CHECKSUMS: RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNGestureHandler: 61d3e94abb866ee955563ddf073e405e3f541359 RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0 - RNLiveMarkdown: 6a36c82776afa8fd2c41c2c6e299c6dd77f249ce + RNLiveMarkdown: bc963828beb86b8ef43e8303481f51fe43f9e2b0 RNLocalize: d4b8af4e442d4bcca54e68fc687a2129b4d71a81 rnmapbox-maps: f3875edd847c82d770d1b57852b36d45b3ea8a01 RNNitroSQLite: e36968e81bbcab6c9e97a35e74ae34c7420d734c From 636eab5e8e0171ba0a1c8fe75979181698818c2e Mon Sep 17 00:00:00 2001 From: war-in Date: Tue, 21 Oct 2025 12:39:57 +0200 Subject: [PATCH 30/37] fix: test failures due to "missing" `makeShareableCloneRecursive` in reanimated --- jest/setup.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/jest/setup.ts b/jest/setup.ts index 8e4dd8f5179a..d3e304e49aab 100644 --- a/jest/setup.ts +++ b/jest/setup.ts @@ -90,6 +90,7 @@ jest.mock('react-native-reanimated', () => ({ useScrollViewOffset: jest.fn(() => 0), useAnimatedRef: jest.fn(() => jest.fn()), LayoutAnimationConfig: jest.fn, + makeShareableCloneRecursive: jest.fn, })); jest.mock('react-native-keyboard-controller', () => require('react-native-keyboard-controller/jest')); From 4e94b0ee7c977f77d59827ca190b0a240672914b Mon Sep 17 00:00:00 2001 From: war-in Date: Wed, 22 Oct 2025 11:34:37 +0200 Subject: [PATCH 31/37] chore: fix Podfile.lock after merging main --- ios/Podfile.lock | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 65e369e7a0ac..929fb1cd2db6 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -490,6 +490,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -508,6 +509,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -525,6 +527,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -544,6 +547,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -562,6 +566,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -580,6 +585,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -598,6 +604,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -616,6 +623,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -634,6 +642,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -652,6 +661,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -670,6 +680,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -688,6 +699,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -706,6 +718,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -724,6 +737,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -3754,7 +3768,7 @@ SPEC CHECKSUMS: AirshipServiceExtension: 4c87a84223d347f27e16dbfa3c366fa25015747f AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73 AppLogs: 3bc4e9b141dbf265b9464409caaa40416a9ee0e0 - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 + boost: 659a89341ea4ab3df8259733813b52f26d8be9a5 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb EXAV: 13d43af15268a3f448a6b994e91574c939f065e6 EXConstants: 9d62a46a36eae6d28cb978efcbc68aef354d1704 @@ -3823,7 +3837,7 @@ SPEC CHECKSUMS: React: c2d3aa44c49bb34e4dfd49d3ee92da5ebacc1c1c React-callinvoker: 1bdfb7549b5af266d85757193b5069f60659ef9d React-Codegen: 4b8b4817cea7a54b83851d4c1f91f79aa73de30a - React-Core: 7150cf9b6a5af063b37003062689f1691e79c020 + React-Core: 7e3642ef83e1032df3d25ebc840868c0c54381ca React-CoreModules: 15a85e6665d61678942da6ae485b351f4c699049 React-cxxreact: 74f9de59259ac951923f5726aa14f0398f167af9 React-debug: a9861ea2196e886642887e29fd1d86c6eee93454 @@ -3873,7 +3887,7 @@ SPEC CHECKSUMS: react-native-webview: 9cf95bd9b16cde5d9bbae452a9cf55631b62028d React-NativeModulesApple: 1b5e6bf9164371771e553f744da801f5d9f5c7e5 React-oscompat: ef5df1c734f19b8003e149317d041b8ce1f7d29c - React-perflogger: 6fd2f6811533e9c19a61e855c3033eecbf4ad2a0 + React-perflogger: 005c6dfd4aa335fd527c94cc4591ed9b509f0486 React-performancetimeline: df331d0764cc54204a73960408371111efbd34b7 React-RCTActionSheet: a499b0d6d9793886b67ba3e16046a3fef2cdbbc3 React-RCTAnimation: 2595dcb10a82216a511b54742f8c28d793852ac6 @@ -3888,7 +3902,7 @@ SPEC CHECKSUMS: React-RCTSettings: a060c7e381a3896104761b8eed7e284d95e37df3 React-RCTText: 4f272b72dbb61f390d8c8274528f9fdbff983806 React-RCTVibration: 0e5326220719aca12473d703aa46693e3b4ce67a - React-rendererconsistency: 68db5a64f0c42b0337e25ba7b0e9513caae1389d + React-rendererconsistency: 4e8e3fd5e90ec9594a4bd5950496eb8006c72f7e React-renderercss: eeb482d2790028a9b47ce9c214397ae2f4e2a7c5 React-rendererdebug: c6e3b7583c2f0802cb3b4cf19f714853fa9ac670 React-rncore: 0f64cacb1becc6f89c99018ca920d012f9044ebd @@ -3914,7 +3928,7 @@ SPEC CHECKSUMS: RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNGestureHandler: 61d3e94abb866ee955563ddf073e405e3f541359 RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0 - RNLiveMarkdown: 6a36c82776afa8fd2c41c2c6e299c6dd77f249ce + RNLiveMarkdown: bc963828beb86b8ef43e8303481f51fe43f9e2b0 RNLocalize: e3a384870bd61fccfcc46de28089371907ed2e14 rnmapbox-maps: f3875edd847c82d770d1b57852b36d45b3ea8a01 RNNitroSQLite: e36968e81bbcab6c9e97a35e74ae34c7420d734c From 8f8ac4584bf20eb86ab9f512463160deaa890117 Mon Sep 17 00:00:00 2001 From: war-in Date: Wed, 22 Oct 2025 11:58:51 +0200 Subject: [PATCH 32/37] fix: update `react-native-reanimated` mock --- tests/perf-test/ReportActionCompose.perf-test.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/perf-test/ReportActionCompose.perf-test.tsx b/tests/perf-test/ReportActionCompose.perf-test.tsx index 43e2f597dee9..72eb4f495002 100644 --- a/tests/perf-test/ReportActionCompose.perf-test.tsx +++ b/tests/perf-test/ReportActionCompose.perf-test.tsx @@ -28,6 +28,7 @@ jest.mock('react-native-reanimated', () => ({ easing: jest.fn().mockReturnThis(), withCallback: jest.fn().mockReturnThis(), })), + makeShareableCloneRecursive: jest.fn, })); jest.mock('../../src/libs/Navigation/Navigation', () => ({ From cad6c9edcebe73fda7c91f9e17386d608b5ec529 Mon Sep 17 00:00:00 2001 From: war-in Date: Thu, 23 Oct 2025 14:48:01 +0200 Subject: [PATCH 33/37] fix: iOS standalone build issue --- ios/Podfile.lock | 24 ++++--------------- ...8+001+fix-ios-standalone-build-issue.patch | 22 +++++++++++++++++ .../react-native-live-markdown/details.md | 13 ++++++++++ 3 files changed, 40 insertions(+), 19 deletions(-) create mode 100644 patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch create mode 100644 patches/@expensify/react-native-live-markdown/details.md diff --git a/ios/Podfile.lock b/ios/Podfile.lock index b5ca6f25dc40..ea8dde211219 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -490,7 +490,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -509,7 +508,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -527,7 +525,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -547,7 +544,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -566,7 +562,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -585,7 +580,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -604,7 +598,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -623,7 +616,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -642,7 +634,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -661,7 +652,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -680,7 +670,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -699,7 +688,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -718,7 +706,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -737,7 +724,6 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger - - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -3768,7 +3754,7 @@ SPEC CHECKSUMS: AirshipServiceExtension: 4c87a84223d347f27e16dbfa3c366fa25015747f AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73 AppLogs: 3bc4e9b141dbf265b9464409caaa40416a9ee0e0 - boost: 659a89341ea4ab3df8259733813b52f26d8be9a5 + boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb EXAV: 13d43af15268a3f448a6b994e91574c939f065e6 EXConstants: 9d62a46a36eae6d28cb978efcbc68aef354d1704 @@ -3837,7 +3823,7 @@ SPEC CHECKSUMS: React: c2d3aa44c49bb34e4dfd49d3ee92da5ebacc1c1c React-callinvoker: 1bdfb7549b5af266d85757193b5069f60659ef9d React-Codegen: 4b8b4817cea7a54b83851d4c1f91f79aa73de30a - React-Core: 7e3642ef83e1032df3d25ebc840868c0c54381ca + React-Core: 7150cf9b6a5af063b37003062689f1691e79c020 React-CoreModules: 15a85e6665d61678942da6ae485b351f4c699049 React-cxxreact: 74f9de59259ac951923f5726aa14f0398f167af9 React-debug: a9861ea2196e886642887e29fd1d86c6eee93454 @@ -3887,7 +3873,7 @@ SPEC CHECKSUMS: react-native-webview: 9cf95bd9b16cde5d9bbae452a9cf55631b62028d React-NativeModulesApple: 1b5e6bf9164371771e553f744da801f5d9f5c7e5 React-oscompat: ef5df1c734f19b8003e149317d041b8ce1f7d29c - React-perflogger: 005c6dfd4aa335fd527c94cc4591ed9b509f0486 + React-perflogger: 6fd2f6811533e9c19a61e855c3033eecbf4ad2a0 React-performancetimeline: df331d0764cc54204a73960408371111efbd34b7 React-RCTActionSheet: a499b0d6d9793886b67ba3e16046a3fef2cdbbc3 React-RCTAnimation: 2595dcb10a82216a511b54742f8c28d793852ac6 @@ -3902,7 +3888,7 @@ SPEC CHECKSUMS: React-RCTSettings: a060c7e381a3896104761b8eed7e284d95e37df3 React-RCTText: 4f272b72dbb61f390d8c8274528f9fdbff983806 React-RCTVibration: 0e5326220719aca12473d703aa46693e3b4ce67a - React-rendererconsistency: 4e8e3fd5e90ec9594a4bd5950496eb8006c72f7e + React-rendererconsistency: 68db5a64f0c42b0337e25ba7b0e9513caae1389d React-renderercss: eeb482d2790028a9b47ce9c214397ae2f4e2a7c5 React-rendererdebug: c6e3b7583c2f0802cb3b4cf19f714853fa9ac670 React-rncore: 0f64cacb1becc6f89c99018ca920d012f9044ebd @@ -3928,7 +3914,7 @@ SPEC CHECKSUMS: RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNGestureHandler: 61d3e94abb866ee955563ddf073e405e3f541359 RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0 - RNLiveMarkdown: bc963828beb86b8ef43e8303481f51fe43f9e2b0 + RNLiveMarkdown: b6101ca50d3add114be4535a3ea90b8b30bc483d RNLocalize: e3a384870bd61fccfcc46de28089371907ed2e14 rnmapbox-maps: f3875edd847c82d770d1b57852b36d45b3ea8a01 RNNitroSQLite: e36968e81bbcab6c9e97a35e74ae34c7420d734c diff --git a/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch b/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch new file mode 100644 index 000000000000..a07488dfff03 --- /dev/null +++ b/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec b/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec +index 748f4f2..330bce9 100644 +--- a/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec ++++ b/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec +@@ -18,6 +18,9 @@ react_native_worklets_or_reanimated_node_modules_dir = ENV['REACT_NATIVE_WORKLET + File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('#{worklets_package_name}/package.json')"`) + react_native_worklets_or_reanimated_node_modules_dir_from_pods_root = Pathname.new(react_native_worklets_or_reanimated_node_modules_dir).relative_path_from(pods_root).to_s + ++react_native_react_common_dir = File.join(react_native_node_modules_dir, 'react-native/ReactCommon') ++react_native_react_common_dir_from_pods_root = Pathname.new(react_native_react_common_dir).relative_path_from(pods_root).to_s ++ + package = JSON.parse(File.read(File.join(__dir__, "package.json"))) + folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' + +@@ -45,6 +48,7 @@ Pod::Spec.new do |s| + "HEADER_SEARCH_PATHS" => [ + "\"$(PODS_ROOT)/#{react_native_worklets_or_reanimated_node_modules_dir_from_pods_root}/apple\"", + "\"$(PODS_ROOT)/#{react_native_worklets_or_reanimated_node_modules_dir_from_pods_root}/Common/cpp\"", ++ "\"$(PODS_ROOT)/#{react_native_react_common_dir_from_pods_root}\"", + ].join(' '), + } + if worklets_installed diff --git a/patches/@expensify/react-native-live-markdown/details.md b/patches/@expensify/react-native-live-markdown/details.md new file mode 100644 index 000000000000..6cebaad1d63f --- /dev/null +++ b/patches/@expensify/react-native-live-markdown/details.md @@ -0,0 +1,13 @@ +# `@expensify/react-native-live-markdown` patches + +### [@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch](@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch) + +- Reason: + + ``` + Patch fixes iOS build error when building standalone NewDot app (the one without access to Mobile-Expensify submodule. + ``` + +- Upstream PR/issue: TODO +- E/App issue: We're going to bump react-native-live-markdown first so that's only a placeholder +- PR introducing patch: https://github.com/Expensify/App/pull/69469 From ff554855deed9ebfac97f7871d8e64cb22a48f1e Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 24 Oct 2025 15:52:43 +0200 Subject: [PATCH 34/37] Remove temporary live-markdown patch & bump LM --- package-lock.json | 8 +++---- package.json | 2 +- ...8+001+fix-ios-standalone-build-issue.patch | 22 ------------------- .../react-native-live-markdown/details.md | 13 ----------- 4 files changed, 5 insertions(+), 40 deletions(-) delete mode 100644 patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch delete mode 100644 patches/@expensify/react-native-live-markdown/details.md diff --git a/package-lock.json b/package-lock.json index d9fd01744fe5..a3564cd96dd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@expensify/nitro-utils": "file:./modules/ExpensifyNitroUtils", "@expensify/react-native-background-task": "file:./modules/background-task", "@expensify/react-native-hybrid-app": "file:./modules/hybrid-app", - "@expensify/react-native-live-markdown": "0.1.308", + "@expensify/react-native-live-markdown": "0.1.310", "@expensify/react-native-wallet": "0.1.11", "@expo/metro-runtime": "^5.0.4", "@firebase/app": "^0.13.2", @@ -4202,9 +4202,9 @@ "link": true }, "node_modules/@expensify/react-native-live-markdown": { - "version": "0.1.308", - "resolved": "https://registry.npmjs.org/@expensify/react-native-live-markdown/-/react-native-live-markdown-0.1.308.tgz", - "integrity": "sha512-KRmWSL2KVidNzaDS4RnyUx68suF6i/UPcaIHHvmK90LhnpmkOa9wUrxO3RIpmkJWf2AYk9BfMtN0fpXLxl/arw==", + "version": "0.1.310", + "resolved": "https://registry.npmjs.org/@expensify/react-native-live-markdown/-/react-native-live-markdown-0.1.310.tgz", + "integrity": "sha512-3uFLW1YWrliLFYcPzQkSanhyLDaA5MzBQGtvm4bh68aH5KwpHUv9Z3HByDBbIrrTsXc3pkncunIHM0g23KW/aw==", "license": "MIT", "workspaces": [ "./example", diff --git a/package.json b/package.json index 1b3ad41f34ca..d6ee40d6bae4 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "@expensify/nitro-utils": "file:./modules/ExpensifyNitroUtils", "@expensify/react-native-background-task": "file:./modules/background-task", "@expensify/react-native-hybrid-app": "file:./modules/hybrid-app", - "@expensify/react-native-live-markdown": "0.1.308", + "@expensify/react-native-live-markdown": "0.1.310", "@expensify/react-native-wallet": "0.1.11", "@expo/metro-runtime": "^5.0.4", "@firebase/app": "^0.13.2", diff --git a/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch b/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch deleted file mode 100644 index a07488dfff03..000000000000 --- a/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec b/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec -index 748f4f2..330bce9 100644 ---- a/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec -+++ b/node_modules/@expensify/react-native-live-markdown/RNLiveMarkdown.podspec -@@ -18,6 +18,9 @@ react_native_worklets_or_reanimated_node_modules_dir = ENV['REACT_NATIVE_WORKLET - File.dirname(`cd "#{Pod::Config.instance.installation_root.to_s}" && node --print "require.resolve('#{worklets_package_name}/package.json')"`) - react_native_worklets_or_reanimated_node_modules_dir_from_pods_root = Pathname.new(react_native_worklets_or_reanimated_node_modules_dir).relative_path_from(pods_root).to_s - -+react_native_react_common_dir = File.join(react_native_node_modules_dir, 'react-native/ReactCommon') -+react_native_react_common_dir_from_pods_root = Pathname.new(react_native_react_common_dir).relative_path_from(pods_root).to_s -+ - package = JSON.parse(File.read(File.join(__dir__, "package.json"))) - folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' - -@@ -45,6 +48,7 @@ Pod::Spec.new do |s| - "HEADER_SEARCH_PATHS" => [ - "\"$(PODS_ROOT)/#{react_native_worklets_or_reanimated_node_modules_dir_from_pods_root}/apple\"", - "\"$(PODS_ROOT)/#{react_native_worklets_or_reanimated_node_modules_dir_from_pods_root}/Common/cpp\"", -+ "\"$(PODS_ROOT)/#{react_native_react_common_dir_from_pods_root}\"", - ].join(' '), - } - if worklets_installed diff --git a/patches/@expensify/react-native-live-markdown/details.md b/patches/@expensify/react-native-live-markdown/details.md deleted file mode 100644 index 6cebaad1d63f..000000000000 --- a/patches/@expensify/react-native-live-markdown/details.md +++ /dev/null @@ -1,13 +0,0 @@ -# `@expensify/react-native-live-markdown` patches - -### [@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch](@expensify+react-native-live-markdown+0.1.308+001+fix-ios-standalone-build-issue.patch) - -- Reason: - - ``` - Patch fixes iOS build error when building standalone NewDot app (the one without access to Mobile-Expensify submodule. - ``` - -- Upstream PR/issue: TODO -- E/App issue: We're going to bump react-native-live-markdown first so that's only a placeholder -- PR introducing patch: https://github.com/Expensify/App/pull/69469 From b55f781349affcc1b4d535b55a68ea17138af143 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 24 Oct 2025 15:56:06 +0200 Subject: [PATCH 35/37] Update Podfile.lock to include bump of RNLiveMarkdown to 0.1.310 --- ios/Podfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index ea8dde211219..3ae84d80980a 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2816,7 +2816,7 @@ PODS: - RNGoogleSignin (10.0.1): - GoogleSignIn (~> 7.0) - React-Core - - RNLiveMarkdown (0.1.308): + - RNLiveMarkdown (0.1.310): - DoubleConversion - glog - hermes-engine @@ -3914,7 +3914,7 @@ SPEC CHECKSUMS: RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNGestureHandler: 61d3e94abb866ee955563ddf073e405e3f541359 RNGoogleSignin: ccaa4a81582cf713eea562c5dd9dc1961a715fd0 - RNLiveMarkdown: b6101ca50d3add114be4535a3ea90b8b30bc483d + RNLiveMarkdown: a1b9e5dd6514dd9186e87f88ebbd6b8f7bc91651 RNLocalize: e3a384870bd61fccfcc46de28089371907ed2e14 rnmapbox-maps: f3875edd847c82d770d1b57852b36d45b3ea8a01 RNNitroSQLite: e36968e81bbcab6c9e97a35e74ae34c7420d734c From 421e60f6f9237b9d6c31f155cd9480ebf4e19e59 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Fri, 24 Oct 2025 15:57:23 +0200 Subject: [PATCH 36/37] Fix podfile.lock, sync with main --- ios/Podfile.lock | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 3ae84d80980a..a92c90f968a6 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -490,6 +490,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -508,6 +509,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -525,6 +527,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -544,6 +547,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -562,6 +566,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -580,6 +585,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -598,6 +604,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -616,6 +623,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -634,6 +642,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -652,6 +661,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -670,6 +680,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -688,6 +699,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -706,6 +718,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -724,6 +737,7 @@ PODS: - React-jsinspector - React-jsitooling - React-perflogger + - React-rendererconsistency - React-runtimescheduler - React-utils - SocketRocket (= 0.7.1) @@ -3823,7 +3837,7 @@ SPEC CHECKSUMS: React: c2d3aa44c49bb34e4dfd49d3ee92da5ebacc1c1c React-callinvoker: 1bdfb7549b5af266d85757193b5069f60659ef9d React-Codegen: 4b8b4817cea7a54b83851d4c1f91f79aa73de30a - React-Core: 7150cf9b6a5af063b37003062689f1691e79c020 + React-Core: 7e3642ef83e1032df3d25ebc840868c0c54381ca React-CoreModules: 15a85e6665d61678942da6ae485b351f4c699049 React-cxxreact: 74f9de59259ac951923f5726aa14f0398f167af9 React-debug: a9861ea2196e886642887e29fd1d86c6eee93454 @@ -3873,7 +3887,7 @@ SPEC CHECKSUMS: react-native-webview: 9cf95bd9b16cde5d9bbae452a9cf55631b62028d React-NativeModulesApple: 1b5e6bf9164371771e553f744da801f5d9f5c7e5 React-oscompat: ef5df1c734f19b8003e149317d041b8ce1f7d29c - React-perflogger: 6fd2f6811533e9c19a61e855c3033eecbf4ad2a0 + React-perflogger: 005c6dfd4aa335fd527c94cc4591ed9b509f0486 React-performancetimeline: df331d0764cc54204a73960408371111efbd34b7 React-RCTActionSheet: a499b0d6d9793886b67ba3e16046a3fef2cdbbc3 React-RCTAnimation: 2595dcb10a82216a511b54742f8c28d793852ac6 @@ -3888,7 +3902,7 @@ SPEC CHECKSUMS: React-RCTSettings: a060c7e381a3896104761b8eed7e284d95e37df3 React-RCTText: 4f272b72dbb61f390d8c8274528f9fdbff983806 React-RCTVibration: 0e5326220719aca12473d703aa46693e3b4ce67a - React-rendererconsistency: 68db5a64f0c42b0337e25ba7b0e9513caae1389d + React-rendererconsistency: 4e8e3fd5e90ec9594a4bd5950496eb8006c72f7e React-renderercss: eeb482d2790028a9b47ce9c214397ae2f4e2a7c5 React-rendererdebug: c6e3b7583c2f0802cb3b4cf19f714853fa9ac670 React-rncore: 0f64cacb1becc6f89c99018ca920d012f9044ebd From 9c4207d473fdc9bd784137df81460fb5bdeadde8 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Thu, 30 Oct 2025 11:48:55 +0100 Subject: [PATCH 37/37] Remove patch for fixing broken slideInUp animation in react-native-reanimated --- ...ed+3.19.1+005+fix-broken-slideInUp-animation.patch | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 patches/react-native-reanimated/react-native-reanimated+3.19.1+005+fix-broken-slideInUp-animation.patch diff --git a/patches/react-native-reanimated/react-native-reanimated+3.19.1+005+fix-broken-slideInUp-animation.patch b/patches/react-native-reanimated/react-native-reanimated+3.19.1+005+fix-broken-slideInUp-animation.patch deleted file mode 100644 index 2e4e06749b85..000000000000 --- a/patches/react-native-reanimated/react-native-reanimated+3.19.1+005+fix-broken-slideInUp-animation.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff --git a/node_modules/react-native-reanimated/android/src/main/cpp/reanimated/CMakeLists.txt b/node_modules/react-native-reanimated/android/src/main/cpp/reanimated/CMakeLists.txt -index c61b03a..a3a3428 100644 ---- a/node_modules/react-native-reanimated/android/src/main/cpp/reanimated/CMakeLists.txt -+++ b/node_modules/react-native-reanimated/android/src/main/cpp/reanimated/CMakeLists.txt -@@ -36,3 +36,6 @@ if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76) - else() - target_link_libraries(reanimated ReactAndroid::react_nativemodule_core) - endif() -+ -+include("${REACT_NATIVE_DIR}/ReactCommon/cmake-utils/react-native-flags.cmake") -+target_compile_reactnative_options(reanimated PUBLIC)