diff --git a/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.342+001+register-parser-worklet-in-insertion-effect.patch b/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.343+001+register-parser-worklet-in-insertion-effect.patch similarity index 99% rename from patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.342+001+register-parser-worklet-in-insertion-effect.patch rename to patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.343+001+register-parser-worklet-in-insertion-effect.patch index 9f114fa1a8a8..a6a96307db34 100644 --- a/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.342+001+register-parser-worklet-in-insertion-effect.patch +++ b/patches/@expensify/react-native-live-markdown/@expensify+react-native-live-markdown+0.1.343+001+register-parser-worklet-in-insertion-effect.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownParser.cpp b/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownParser.cpp -index 4edd28e..c98baa7 100644 +index 534e20c..007eb55 100644 --- a/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownParser.cpp +++ b/node_modules/@expensify/react-native-live-markdown/android/src/main/cpp/MarkdownParser.cpp @@ -11,11 +11,15 @@ namespace livemarkdown { @@ -18,10 +18,10 @@ index 4edd28e..c98baa7 100644 - const auto markdownWorklet = expensify::livemarkdown::getMarkdownWorklet(parserId); - const auto input = jsi::String::createFromUtf8(rt, text->toStdString()); - const auto output = markdownRuntime->runGuarded(markdownWorklet, input); + const auto output = markdownRuntime->runSync(markdownWorklet, input); diff --git a/node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownParser.java b/node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownParser.java -index 3e108db..260925b 100644 +index d38fd02..1f56d0e 100644 --- a/node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownParser.java +++ b/node_modules/@expensify/react-native-live-markdown/android/src/main/java/com/expensify/livemarkdown/MarkdownParser.java @@ -1,6 +1,7 @@ @@ -72,7 +72,7 @@ index 1d73622..f506f5f 100644 withParserId:(nonnull NSNumber *)parserId completion:(nullable void (^)(void))completion; 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 89bb209..3c438f7 100644 +index 28d8ea0..7b14ced 100644 --- a/node_modules/@expensify/react-native-live-markdown/apple/MarkdownParser.mm +++ b/node_modules/@expensify/react-native-live-markdown/apple/MarkdownParser.mm @@ -171,13 +171,13 @@ - (void)drainPendingWarmups diff --git a/patches/@expensify/react-native-live-markdown/details.md b/patches/@expensify/react-native-live-markdown/details.md index 8c66cf91e3a5..2bd1b68e183b 100644 --- a/patches/@expensify/react-native-live-markdown/details.md +++ b/patches/@expensify/react-native-live-markdown/details.md @@ -1,6 +1,6 @@ # `@expensify/react-native-live-markdown` patches -### [@expensify+react-native-live-markdown+0.1.342+001+register-parser-worklet-in-insertion-effect.patch](@expensify+react-native-live-markdown+0.1.342+001+register-parser-worklet-in-insertion-effect.patch) +### [@expensify+react-native-live-markdown+0.1.343+001+register-parser-worklet-in-insertion-effect.patch](@expensify+react-native-live-markdown+0.1.343+001+register-parser-worklet-in-insertion-effect.patch) - Reason: `MarkdownTextInput` registered its parser worklet during render (`useMemo`) and unregistered it in an effect cleanup. React runs that cleanup without unmounting the component under StrictMode and whenever a hidden `` disconnects effects, so the native view kept a parser id that pointed at nothing and the input silently stopped formatting markdown. The patch moves the registration into `useInsertionEffect` in a new `useParserId` hook, chooses the id in JS (one per mounted input, a fresh one on every `parser` change) and turns the native registry into a plain map. A parse for an id with no registered worklet logs a warning and returns no ranges without caching them, so the next parse picks the parser up once it is registered. It carries the `src/`, `lib/` and native (`cpp/`, `apple/`, `android/`) parts of the upstream PR. - Depends on: `react-native+0.86.0+044+run-insertion-effect-cleanup-in-hidden-subtree.patch`. Without it Fabric skips the insertion cleanup for an input removed while its `` is hidden, and the worklet leaks in the native registry. Formatting stays correct either way because ids are never reused.